@itwin/core-frontend 3.0.0-dev.93 → 3.0.0-dev.94

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 (31) hide show
  1. package/lib/cjs/RealityDataConnection.d.ts +2 -2
  2. package/lib/cjs/RealityDataConnection.d.ts.map +1 -1
  3. package/lib/cjs/RealityDataConnection.js +2 -2
  4. package/lib/cjs/RealityDataConnection.js.map +1 -1
  5. package/lib/cjs/ViewCreator3d.d.ts.map +1 -1
  6. package/lib/cjs/ViewCreator3d.js +7 -5
  7. package/lib/cjs/ViewCreator3d.js.map +1 -1
  8. package/lib/cjs/render/webgl/Technique.js +1 -1
  9. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  10. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  11. package/lib/cjs/tile/RealityModelTileTree.js +10 -5
  12. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  13. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  14. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +0 -1
  15. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  16. package/lib/esm/RealityDataConnection.d.ts +2 -2
  17. package/lib/esm/RealityDataConnection.d.ts.map +1 -1
  18. package/lib/esm/RealityDataConnection.js +2 -2
  19. package/lib/esm/RealityDataConnection.js.map +1 -1
  20. package/lib/esm/ViewCreator3d.d.ts.map +1 -1
  21. package/lib/esm/ViewCreator3d.js +7 -5
  22. package/lib/esm/ViewCreator3d.js.map +1 -1
  23. package/lib/esm/render/webgl/Technique.js +1 -1
  24. package/lib/esm/render/webgl/Technique.js.map +1 -1
  25. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  26. package/lib/esm/tile/RealityModelTileTree.js +10 -5
  27. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  28. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  29. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +0 -1
  30. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  31. package/package.json +24 -24
@@ -1 +1 @@
1
- {"version":3,"file":"RealityDataConnection.js","sourceRoot":"","sources":["../../src/RealityDataConnection.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { RealityDataSourceKey, RealityDataSourceProps } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { RealityData } from \"./RealityDataAccessProps\";\r\nimport { RealityDataSource, realityDataSourceKeyToString } from \"./RealityDataSource\";\r\n\r\n/**\r\n * This interface provide methods used to access a reality data from ContextShare\r\n * @internal\r\n */\r\nexport interface RealityDataConnection {\r\n /** Metatdata on the reality data source */\r\n readonly realityData: RealityData | undefined;\r\n /** The reality data type (e.g.: \"RealityMesh3DTiles\", OPC, Terrain3DTiles, Cesium3DTiles, ... )*/\r\n readonly realityDataType: string | undefined;\r\n /** The source provides access to the reality data provider services.*/\r\n readonly source: RealityDataSource;\r\n /**\r\n * This method returns the URL to obtain the Reality Data properties.\r\n * @param iTwinId id of associated iTwin project\r\n * @returns string containing the URL to reality data.\r\n */\r\n getServiceUrl(iTwinId: GuidString | undefined): Promise<string | undefined>;\r\n}\r\n\r\n/** @internal */\r\nexport namespace RealityDataConnection {\r\n /** Return an instance of a RealityDataConnection from a source key.\r\n * There will aways be only one reality data connection for a corresponding reality data source key.\r\n * @internal\r\n */\r\n export async function fromSourceKey(rdSourceKey: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataConnection | undefined> {\r\n return RealityDataConnectionImpl.fromSourceKey(rdSourceKey, iTwinId);\r\n }\r\n}\r\n\r\n/**\r\n * This class encapsulates access to a reality data from ContextShare\r\n * There is a one to one relationship between a reality data and the instances of present class.\r\n * @internal\r\n */\r\nclass RealityDataConnectionImpl implements RealityDataConnection {\r\n private static _realityDataConnections = new Map<string, RealityDataConnection>();\r\n private _rd: RealityData | undefined;\r\n private _rdSource: RealityDataSource;\r\n\r\n private constructor(props: RealityDataSourceProps) {\r\n this._rdSource = RealityDataSource.fromProps(props);\r\n }\r\n public static async fromSourceKey(rdSourceKey: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataConnection | undefined> {\r\n // search to see if it was already created\r\n const rdSourceKeyString = realityDataSourceKeyToString(rdSourceKey);\r\n let rdConnection = RealityDataConnectionImpl._realityDataConnections.get(rdSourceKeyString);\r\n if (rdConnection)\r\n return rdConnection;\r\n // If not already in our list, create and add it to our list before returing it.\r\n rdConnection = await RealityDataConnectionImpl.createFromSourceKey(rdSourceKey, iTwinId);\r\n if (rdConnection)\r\n RealityDataConnectionImpl._realityDataConnections.set(rdSourceKeyString,rdConnection);\r\n return rdConnection;\r\n }\r\n /**\r\n * Create an instance of this class from a source key and iTwin context/\r\n * @alpha\r\n */\r\n public static async createFromSourceKey(sk: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataConnection | undefined> {\r\n const props: RealityDataSourceProps = {sourceKey: sk};\r\n const rdConnection = new RealityDataConnectionImpl(props);\r\n let tilesetUrl: string | undefined;\r\n try {\r\n await rdConnection.queryRealityData(iTwinId);\r\n tilesetUrl = await rdConnection._rdSource.getServiceUrl(iTwinId);\r\n } catch (e) {\r\n }\r\n\r\n return (tilesetUrl !== undefined) ? rdConnection : undefined;\r\n }\r\n /**\r\n * Query Reality Data from provider\r\n */\r\n private async queryRealityData(iTwinId: GuidString | undefined) {\r\n if (this._rdSource.isContextShare && !this._rd) {\r\n const token = await IModelApp.getAccessToken();\r\n if (token && this._rdSource.realityDataId) {\r\n if (undefined === IModelApp.realityDataAccess)\r\n throw new Error(\"Missing an implementation of RealityDataAccess on IModelApp, it is required to access reality data. Please provide an implementation to the IModelApp.startup using IModelAppOptions.realityDataAccess.\");\r\n this._rd = await IModelApp.realityDataAccess.getRealityData(token, iTwinId, this._rdSource.realityDataId);\r\n }\r\n }\r\n }\r\n /**\r\n * Returns Reality Data if available\r\n */\r\n public get realityData(): RealityData | undefined {\r\n return this._rd;\r\n }\r\n /**\r\n * Returns Reality Data type if available\r\n */\r\n public get realityDataType(): string | undefined {\r\n return this._rd?.type;\r\n }\r\n /**\r\n * This method returns the URL to obtain the Reality Data details.\r\n * @param iTwinId id of associated iTwin project\r\n * @returns string containing the URL to reality data.\r\n */\r\n public async getServiceUrl(iTwinId: GuidString | undefined): Promise<string | undefined> {\r\n return this._rdSource.getServiceUrl(iTwinId);\r\n }\r\n /**\r\n * Returns the source implementation associated to this reality data connection\r\n */\r\n public get source(): RealityDataSource {\r\n return this._rdSource;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityDataConnection.js","sourceRoot":"","sources":["../../src/RealityDataConnection.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { RealityDataSourceKey, RealityDataSourceProps } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { RealityData } from \"./RealityDataAccessProps\";\r\nimport { RealityDataSource, realityDataSourceKeyToString } from \"./RealityDataSource\";\r\n\r\n/**\r\n * This interface provide methods used to access a reality data from ContextShare\r\n * @internal\r\n */\r\nexport interface RealityDataConnection {\r\n /** Metadata on the reality data source */\r\n readonly realityData: RealityData | undefined;\r\n /** The reality data type (e.g.: \"RealityMesh3DTiles\", OPC, Terrain3DTiles, Cesium3DTiles, ... )*/\r\n readonly realityDataType: string | undefined;\r\n /** The source provides access to the reality data provider services.*/\r\n readonly source: RealityDataSource;\r\n /**\r\n * This method returns the URL to obtain the Reality Data properties.\r\n * @param iTwinId id of associated iTwin project\r\n * @returns string containing the URL to reality data.\r\n */\r\n getServiceUrl(iTwinId: GuidString | undefined): Promise<string | undefined>;\r\n}\r\n\r\n/** @internal */\r\nexport namespace RealityDataConnection {\r\n /** Return an instance of a RealityDataConnection from a source key.\r\n * There will always be only one reality data connection for a corresponding reality data source key.\r\n * @internal\r\n */\r\n export async function fromSourceKey(rdSourceKey: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataConnection | undefined> {\r\n return RealityDataConnectionImpl.fromSourceKey(rdSourceKey, iTwinId);\r\n }\r\n}\r\n\r\n/**\r\n * This class encapsulates access to a reality data from ContextShare\r\n * There is a one to one relationship between a reality data and the instances of present class.\r\n * @internal\r\n */\r\nclass RealityDataConnectionImpl implements RealityDataConnection {\r\n private static _realityDataConnections = new Map<string, RealityDataConnection>();\r\n private _rd: RealityData | undefined;\r\n private _rdSource: RealityDataSource;\r\n\r\n private constructor(props: RealityDataSourceProps) {\r\n this._rdSource = RealityDataSource.fromProps(props);\r\n }\r\n public static async fromSourceKey(rdSourceKey: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataConnection | undefined> {\r\n // search to see if it was already created\r\n const rdSourceKeyString = realityDataSourceKeyToString(rdSourceKey);\r\n let rdConnection = RealityDataConnectionImpl._realityDataConnections.get(rdSourceKeyString);\r\n if (rdConnection)\r\n return rdConnection;\r\n // If not already in our list, create and add it to our list before returning it.\r\n rdConnection = await RealityDataConnectionImpl.createFromSourceKey(rdSourceKey, iTwinId);\r\n if (rdConnection)\r\n RealityDataConnectionImpl._realityDataConnections.set(rdSourceKeyString,rdConnection);\r\n return rdConnection;\r\n }\r\n /**\r\n * Create an instance of this class from a source key and iTwin context/\r\n * @alpha\r\n */\r\n public static async createFromSourceKey(sk: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataConnection | undefined> {\r\n const props: RealityDataSourceProps = {sourceKey: sk};\r\n const rdConnection = new RealityDataConnectionImpl(props);\r\n let tilesetUrl: string | undefined;\r\n try {\r\n await rdConnection.queryRealityData(iTwinId);\r\n tilesetUrl = await rdConnection._rdSource.getServiceUrl(iTwinId);\r\n } catch (e) {\r\n }\r\n\r\n return (tilesetUrl !== undefined) ? rdConnection : undefined;\r\n }\r\n /**\r\n * Query Reality Data from provider\r\n */\r\n private async queryRealityData(iTwinId: GuidString | undefined) {\r\n if (this._rdSource.isContextShare && !this._rd) {\r\n const token = await IModelApp.getAccessToken();\r\n if (token && this._rdSource.realityDataId) {\r\n if (undefined === IModelApp.realityDataAccess)\r\n throw new Error(\"Missing an implementation of RealityDataAccess on IModelApp, it is required to access reality data. Please provide an implementation to the IModelApp.startup using IModelAppOptions.realityDataAccess.\");\r\n this._rd = await IModelApp.realityDataAccess.getRealityData(token, iTwinId, this._rdSource.realityDataId);\r\n }\r\n }\r\n }\r\n /**\r\n * Returns Reality Data if available\r\n */\r\n public get realityData(): RealityData | undefined {\r\n return this._rd;\r\n }\r\n /**\r\n * Returns Reality Data type if available\r\n */\r\n public get realityDataType(): string | undefined {\r\n return this._rd?.type;\r\n }\r\n /**\r\n * This method returns the URL to obtain the Reality Data details.\r\n * @param iTwinId id of associated iTwin project\r\n * @returns string containing the URL to reality data.\r\n */\r\n public async getServiceUrl(iTwinId: GuidString | undefined): Promise<string | undefined> {\r\n return this._rdSource.getServiceUrl(iTwinId);\r\n }\r\n /**\r\n * Returns the source implementation associated to this reality data connection\r\n */\r\n public get source(): RealityDataSource {\r\n return this._rdSource;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewCreator3d.d.ts","sourceRoot":"","sources":["../../src/ViewCreator3d.ts"],"names":[],"mappings":"AAKA;;GAEG;AAOH,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAO5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;EAEE;AACF,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,+EAA+E;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAa;IAMZ,OAAO,CAAC,OAAO;IAJ3B;;;OAGG;gBACiB,OAAO,EAAE,gBAAgB;IAE7C;;;;;OAKG;IACU,iBAAiB,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAkB3G;;;;OAIG;YACW,qBAAqB;IA2GnC;;;OAGG;YACW,cAAc;IAwB5B;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,aAAa;IAc3B;;OAEG;IACH,OAAO,CAAC,aAAa,CAMnB;CACH"}
1
+ {"version":3,"file":"ViewCreator3d.d.ts","sourceRoot":"","sources":["../../src/ViewCreator3d.ts"],"names":[],"mappings":"AAKA;;GAEG;AAOH,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAO5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;EAEE;AACF,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,+EAA+E;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAa;IAMZ,OAAO,CAAC,OAAO;IAJ3B;;;OAGG;gBACiB,OAAO,EAAE,gBAAgB;IAE7C;;;;;OAKG;IACU,iBAAiB,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAkB3G;;;;OAIG;YACW,qBAAqB;IA2GnC;;;OAGG;YACW,cAAc;IAwB5B;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,aAAa;IAgB3B;;OAEG;IACH,OAAO,CAAC,aAAa,CAMnB;CACH"}
@@ -213,15 +213,17 @@ export class ViewCreator3d {
213
213
  * Get all PhysicalModel ids in the connection
214
214
  */
215
215
  async _getAllModels() {
216
- let query = "SELECT ECInstanceId FROM Bis.GeometricModel3D WHERE IsPrivate = false AND IsTemplate = false AND isNotSpatiallyLocated = false";
216
+ // Note: IsNotSpatiallyLocated was introduced in a later version of the BisCore ECSchema.
217
+ // If the iModel has an earlier version, the statement will throw because the property does not exist.
218
+ // If the iModel was created from an earlier version and later upgraded to a newer version, the property may be NULL for models created prior to the upgrade.
219
+ const select = "SELECT ECInstanceId FROM Bis.GeometricModel3D WHERE IsPrivate = false AND IsTemplate = false";
220
+ const spatialCriterion = "AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated = false)";
217
221
  let models = [];
218
222
  try {
219
- models = await this._executeQuery(query);
223
+ models = await this._executeQuery(`${select} ${spatialCriterion}`);
220
224
  }
221
225
  catch {
222
- // possible that the isNotSpatiallyLocated property is not available in the iModel's schema
223
- query = "SELECT ECInstanceId FROM Bis.GeometricModel3D WHERE IsPrivate = false AND IsTemplate = false";
224
- models = await this._executeQuery(query);
226
+ models = await this._executeQuery(select);
225
227
  }
226
228
  return models;
227
229
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ViewCreator3d.js","sourceRoot":"","sources":["../../src/ViewCreator3d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\n/*\r\nAPI for creating a 3D default view for an iModel.\r\nEither takes in a list of modelIds, or displays all 3D models by default.\r\n*/\r\n\r\nimport { Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Camera, CategorySelectorProps, Code, DisplayStyle3dProps, IModel, IModelReadRpcInterface, ModelSelectorProps, QueryRowFormat, RenderMode,\r\n ViewDefinition3dProps, ViewQueryParams, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Environment } from \"./DisplayStyleState\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { SpatialViewState } from \"./SpatialViewState\";\r\nimport { StandardViewId } from \"./StandardView\";\r\nimport { ViewState } from \"./ViewState\";\r\n\r\n/** Options for creating a [[ViewState3d]] via [[ViewCreator3d]].\r\n * @public\r\n*/\r\nexport interface ViewCreator3dOptions {\r\n /** Turn [[Camera]] on when generating the view. */\r\n cameraOn?: boolean;\r\n /** Turn [[SkyBox]] on when generating the view. */\r\n skyboxOn?: boolean;\r\n /** [[StandardViewId]] for the view state. */\r\n standardViewId?: StandardViewId;\r\n /** Merge in props from the seed view (default spatial view) of the iModel. */\r\n useSeedView?: boolean;\r\n /** Aspect ratio of [[Viewport]]. Required to fit contents of the model(s) in the initial state of the view. */\r\n vpAspect?: number;\r\n}\r\n\r\n/**\r\n * API for creating a 3D default [[ViewState3d]] for an iModel. @see [[ViewCreator2d]] to create a view for a 2d model.\r\n * Example usage:\r\n * ```ts\r\n * const viewCreator = new ViewCreator3d(imodel);\r\n * const defaultView = await viewCreator.createDefaultView({skyboxOn: true});\r\n * ```\r\n * @public\r\n */\r\nexport class ViewCreator3d {\r\n\r\n /**\r\n * Constructs a ViewCreator3d using an [[IModelConnection]].\r\n * @param _imodel [[IModelConnection]] to query for categories and/or models.\r\n */\r\n constructor(private _imodel: IModelConnection) { }\r\n\r\n /**\r\n * Creates a default [[ViewState3d]] based on the model ids passed in. If no model ids are passed in, all 3D models in the iModel are used.\r\n * @param [options] Options for creating the view.\r\n * @param [modelIds] Ids of models to display in the view.\r\n * @throws [IModelError]($common) If no 3d models are found in the iModel.\r\n */\r\n public async createDefaultView(options?: ViewCreator3dOptions, modelIds?: Id64String[]): Promise<ViewState> {\r\n const models = modelIds ?? await this._getAllModels();\r\n const props = await this._createViewStateProps(models, options);\r\n const viewState = SpatialViewState.createFromProps(props, this._imodel);\r\n try {\r\n await viewState.load();\r\n } catch {\r\n }\r\n\r\n if (options?.standardViewId)\r\n viewState.setStandardRotation(options.standardViewId);\r\n\r\n const range = viewState.computeFitRange();\r\n viewState.lookAtVolume(range, options?.vpAspect);\r\n\r\n return viewState;\r\n }\r\n\r\n /**\r\n * Generates a view state props object for creating a view. Merges display styles with a seed view if the options.useSeedView is true\r\n * @param models Models to put in view props\r\n * @param options view creation options like camera On and skybox On\r\n */\r\n private async _createViewStateProps(models: Id64String[], options?: ViewCreator3dOptions): Promise<ViewStateProps> {\r\n // Use dictionary model in all props\r\n const dictionaryId = IModel.dictionaryId;\r\n const categories: Id64Array = await this._getAllCategories();\r\n\r\n // model extents\r\n const modelExtents = new Range3d();\r\n if (models.length > 0) {\r\n const modelProps = await this._imodel.models.queryModelRanges(models);\r\n for (const props of modelProps)\r\n modelExtents.union(Range3d.fromJSON(props), modelExtents);\r\n }\r\n\r\n if (modelExtents.isNull)\r\n modelExtents.setFrom(this._imodel.projectExtents);\r\n\r\n let originX = modelExtents.low.x;\r\n let originY = modelExtents.low.y;\r\n const originZ = modelExtents.low.z;\r\n let deltaX = modelExtents.xLength();\r\n let deltaY = modelExtents.yLength();\r\n const deltaZ = modelExtents.zLength();\r\n\r\n // if vp aspect given, update model extents to fit view\r\n if (options?.vpAspect) {\r\n const modelAspect = deltaY / deltaX;\r\n\r\n if (modelAspect > options.vpAspect) {\r\n const xFix = deltaY / options.vpAspect;\r\n originX = originX - xFix / 2;\r\n deltaX = deltaX + xFix;\r\n } else if (modelAspect < options.vpAspect) {\r\n const yFix = deltaX * options.vpAspect;\r\n originY = originY - yFix / 2;\r\n deltaY = deltaY + yFix;\r\n }\r\n }\r\n\r\n const categorySelectorProps: CategorySelectorProps = {\r\n categories,\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:CategorySelector\",\r\n };\r\n\r\n const modelSelectorProps: ModelSelectorProps = {\r\n models,\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:ModelSelector\",\r\n };\r\n\r\n const cameraData = new Camera();\r\n const cameraOn = options?.cameraOn ? options.cameraOn : false;\r\n const viewDefinitionProps: ViewDefinition3dProps = {\r\n categorySelectorId: \"\",\r\n displayStyleId: \"\",\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n origin: { x: originX, y: originY, z: originZ },\r\n extents: { x: deltaX, y: deltaY, z: deltaZ },\r\n classFullName: \"BisCore:SpatialViewDefinition\",\r\n cameraOn,\r\n camera: {\r\n lens: cameraData.lens.toJSON(),\r\n focusDist: cameraData.focusDist,\r\n eye: cameraData.eye.toJSON(),\r\n },\r\n };\r\n\r\n const displayStyleProps: DisplayStyle3dProps = {\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:DisplayStyle\",\r\n jsonProperties: {\r\n styles: {\r\n viewflags: {\r\n renderMode: RenderMode.SmoothShade,\r\n noSourceLights: false,\r\n noCameraLights: false,\r\n noSolarLight: false,\r\n noConstruct: true,\r\n noTransp: false,\r\n visEdges: false,\r\n backgroundMap: this._imodel.isGeoLocated,\r\n },\r\n environment:\r\n options !== undefined &&\r\n options.skyboxOn !== undefined &&\r\n options.skyboxOn\r\n ? new Environment({ sky: { display: true } }).toJSON()\r\n : undefined,\r\n },\r\n },\r\n };\r\n\r\n const viewStateProps: ViewStateProps = {\r\n displayStyleProps,\r\n categorySelectorProps,\r\n modelSelectorProps,\r\n viewDefinitionProps,\r\n };\r\n\r\n // merge seed view props if needed\r\n return options?.useSeedView ? this._mergeSeedView(viewStateProps) : viewStateProps;\r\n }\r\n\r\n /**\r\n * Merges a seed view in the iModel with the passed view state props. It will be a no-op if there are no default 3D views in the iModel\r\n * @param viewStateProps Input view props to be merged\r\n */\r\n private async _mergeSeedView(viewStateProps: ViewStateProps): Promise<ViewStateProps> {\r\n const viewId = await this._getDefaultViewId();\r\n // Handle iModels without any default view id\r\n if (viewId === undefined)\r\n return viewStateProps;\r\n\r\n const seedViewState = (await this._imodel.views.load(viewId) as SpatialViewState);\r\n const seedViewStateProps = {\r\n categorySelectorProps: seedViewState.categorySelector.toJSON(),\r\n modelSelectorProps: seedViewState.modelSelector.toJSON(),\r\n viewDefinitionProps: seedViewState.toJSON(),\r\n displayStyleProps: seedViewState.displayStyle.toJSON(),\r\n };\r\n const mergedDisplayProps = seedViewStateProps.displayStyleProps;\r\n if (mergedDisplayProps.jsonProperties !== undefined) {\r\n mergedDisplayProps.jsonProperties.styles = {\r\n ...mergedDisplayProps.jsonProperties.styles,\r\n ...viewStateProps.displayStyleProps.jsonProperties!.styles,\r\n };\r\n }\r\n\r\n return { ...seedViewStateProps, ...viewStateProps, displayStyleProps: mergedDisplayProps };\r\n }\r\n\r\n /**\r\n * Get ID of default view.\r\n */\r\n private async _getDefaultViewId(): Promise<Id64String | undefined> {\r\n const viewId = await this._imodel.views.queryDefaultViewId();\r\n const params: ViewQueryParams = {};\r\n params.from = SpatialViewState.classFullName;\r\n params.where = `ECInstanceId=${viewId}`;\r\n\r\n // Check validity of default view\r\n const viewProps = await IModelReadRpcInterface.getClient().queryElementProps(this._imodel.getRpcProps(), params);\r\n if (viewProps.length === 0) {\r\n // Return the first view we can find\r\n const viewList = await this._imodel.views.getViewList({ wantPrivate: false });\r\n if (viewList.length === 0)\r\n return undefined;\r\n\r\n const spatialViewList = viewList.filter((value: IModelConnection.ViewSpec) => value.class.indexOf(\"Spatial\") !== -1);\r\n if (spatialViewList.length === 0)\r\n return undefined;\r\n\r\n return spatialViewList[0].id;\r\n }\r\n\r\n return viewId;\r\n }\r\n\r\n /**\r\n * Get all categories containing elements\r\n */\r\n private async _getAllCategories(): Promise<Id64Array> {\r\n // Only use categories with elements in them\r\n const query = `SELECT DISTINCT Category.Id AS id FROM BisCore.GeometricElement3d WHERE Category.Id IN (SELECT ECInstanceId FROM BisCore.SpatialCategory)`;\r\n const categories: Id64Array = await this._executeQuery(query);\r\n\r\n return categories;\r\n }\r\n\r\n /**\r\n * Get all PhysicalModel ids in the connection\r\n */\r\n private async _getAllModels(): Promise<Id64Array> {\r\n let query = \"SELECT ECInstanceId FROM Bis.GeometricModel3D WHERE IsPrivate = false AND IsTemplate = false AND isNotSpatiallyLocated = false\";\r\n let models = [];\r\n try {\r\n models = await this._executeQuery(query);\r\n } catch {\r\n // possible that the isNotSpatiallyLocated property is not available in the iModel's schema\r\n query = \"SELECT ECInstanceId FROM Bis.GeometricModel3D WHERE IsPrivate = false AND IsTemplate = false\";\r\n models = await this._executeQuery(query);\r\n }\r\n\r\n return models;\r\n }\r\n\r\n /**\r\n * Helper function to execute ECSql queries.\r\n */\r\n private _executeQuery = async (query: string) => {\r\n const rows = [];\r\n for await (const row of this._imodel.query(query, undefined, QueryRowFormat.UseJsPropertyNames))\r\n rows.push(row.id);\r\n\r\n return rows;\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewCreator3d.js","sourceRoot":"","sources":["../../src/ViewCreator3d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\n/*\r\nAPI for creating a 3D default view for an iModel.\r\nEither takes in a list of modelIds, or displays all 3D models by default.\r\n*/\r\n\r\nimport { Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Camera, CategorySelectorProps, Code, DisplayStyle3dProps, IModel, IModelReadRpcInterface, ModelSelectorProps, QueryRowFormat, RenderMode,\r\n ViewDefinition3dProps, ViewQueryParams, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Environment } from \"./DisplayStyleState\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { SpatialViewState } from \"./SpatialViewState\";\r\nimport { StandardViewId } from \"./StandardView\";\r\nimport { ViewState } from \"./ViewState\";\r\n\r\n/** Options for creating a [[ViewState3d]] via [[ViewCreator3d]].\r\n * @public\r\n*/\r\nexport interface ViewCreator3dOptions {\r\n /** Turn [[Camera]] on when generating the view. */\r\n cameraOn?: boolean;\r\n /** Turn [[SkyBox]] on when generating the view. */\r\n skyboxOn?: boolean;\r\n /** [[StandardViewId]] for the view state. */\r\n standardViewId?: StandardViewId;\r\n /** Merge in props from the seed view (default spatial view) of the iModel. */\r\n useSeedView?: boolean;\r\n /** Aspect ratio of [[Viewport]]. Required to fit contents of the model(s) in the initial state of the view. */\r\n vpAspect?: number;\r\n}\r\n\r\n/**\r\n * API for creating a 3D default [[ViewState3d]] for an iModel. @see [[ViewCreator2d]] to create a view for a 2d model.\r\n * Example usage:\r\n * ```ts\r\n * const viewCreator = new ViewCreator3d(imodel);\r\n * const defaultView = await viewCreator.createDefaultView({skyboxOn: true});\r\n * ```\r\n * @public\r\n */\r\nexport class ViewCreator3d {\r\n\r\n /**\r\n * Constructs a ViewCreator3d using an [[IModelConnection]].\r\n * @param _imodel [[IModelConnection]] to query for categories and/or models.\r\n */\r\n constructor(private _imodel: IModelConnection) { }\r\n\r\n /**\r\n * Creates a default [[ViewState3d]] based on the model ids passed in. If no model ids are passed in, all 3D models in the iModel are used.\r\n * @param [options] Options for creating the view.\r\n * @param [modelIds] Ids of models to display in the view.\r\n * @throws [IModelError]($common) If no 3d models are found in the iModel.\r\n */\r\n public async createDefaultView(options?: ViewCreator3dOptions, modelIds?: Id64String[]): Promise<ViewState> {\r\n const models = modelIds ?? await this._getAllModels();\r\n const props = await this._createViewStateProps(models, options);\r\n const viewState = SpatialViewState.createFromProps(props, this._imodel);\r\n try {\r\n await viewState.load();\r\n } catch {\r\n }\r\n\r\n if (options?.standardViewId)\r\n viewState.setStandardRotation(options.standardViewId);\r\n\r\n const range = viewState.computeFitRange();\r\n viewState.lookAtVolume(range, options?.vpAspect);\r\n\r\n return viewState;\r\n }\r\n\r\n /**\r\n * Generates a view state props object for creating a view. Merges display styles with a seed view if the options.useSeedView is true\r\n * @param models Models to put in view props\r\n * @param options view creation options like camera On and skybox On\r\n */\r\n private async _createViewStateProps(models: Id64String[], options?: ViewCreator3dOptions): Promise<ViewStateProps> {\r\n // Use dictionary model in all props\r\n const dictionaryId = IModel.dictionaryId;\r\n const categories: Id64Array = await this._getAllCategories();\r\n\r\n // model extents\r\n const modelExtents = new Range3d();\r\n if (models.length > 0) {\r\n const modelProps = await this._imodel.models.queryModelRanges(models);\r\n for (const props of modelProps)\r\n modelExtents.union(Range3d.fromJSON(props), modelExtents);\r\n }\r\n\r\n if (modelExtents.isNull)\r\n modelExtents.setFrom(this._imodel.projectExtents);\r\n\r\n let originX = modelExtents.low.x;\r\n let originY = modelExtents.low.y;\r\n const originZ = modelExtents.low.z;\r\n let deltaX = modelExtents.xLength();\r\n let deltaY = modelExtents.yLength();\r\n const deltaZ = modelExtents.zLength();\r\n\r\n // if vp aspect given, update model extents to fit view\r\n if (options?.vpAspect) {\r\n const modelAspect = deltaY / deltaX;\r\n\r\n if (modelAspect > options.vpAspect) {\r\n const xFix = deltaY / options.vpAspect;\r\n originX = originX - xFix / 2;\r\n deltaX = deltaX + xFix;\r\n } else if (modelAspect < options.vpAspect) {\r\n const yFix = deltaX * options.vpAspect;\r\n originY = originY - yFix / 2;\r\n deltaY = deltaY + yFix;\r\n }\r\n }\r\n\r\n const categorySelectorProps: CategorySelectorProps = {\r\n categories,\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:CategorySelector\",\r\n };\r\n\r\n const modelSelectorProps: ModelSelectorProps = {\r\n models,\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:ModelSelector\",\r\n };\r\n\r\n const cameraData = new Camera();\r\n const cameraOn = options?.cameraOn ? options.cameraOn : false;\r\n const viewDefinitionProps: ViewDefinition3dProps = {\r\n categorySelectorId: \"\",\r\n displayStyleId: \"\",\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n origin: { x: originX, y: originY, z: originZ },\r\n extents: { x: deltaX, y: deltaY, z: deltaZ },\r\n classFullName: \"BisCore:SpatialViewDefinition\",\r\n cameraOn,\r\n camera: {\r\n lens: cameraData.lens.toJSON(),\r\n focusDist: cameraData.focusDist,\r\n eye: cameraData.eye.toJSON(),\r\n },\r\n };\r\n\r\n const displayStyleProps: DisplayStyle3dProps = {\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:DisplayStyle\",\r\n jsonProperties: {\r\n styles: {\r\n viewflags: {\r\n renderMode: RenderMode.SmoothShade,\r\n noSourceLights: false,\r\n noCameraLights: false,\r\n noSolarLight: false,\r\n noConstruct: true,\r\n noTransp: false,\r\n visEdges: false,\r\n backgroundMap: this._imodel.isGeoLocated,\r\n },\r\n environment:\r\n options !== undefined &&\r\n options.skyboxOn !== undefined &&\r\n options.skyboxOn\r\n ? new Environment({ sky: { display: true } }).toJSON()\r\n : undefined,\r\n },\r\n },\r\n };\r\n\r\n const viewStateProps: ViewStateProps = {\r\n displayStyleProps,\r\n categorySelectorProps,\r\n modelSelectorProps,\r\n viewDefinitionProps,\r\n };\r\n\r\n // merge seed view props if needed\r\n return options?.useSeedView ? this._mergeSeedView(viewStateProps) : viewStateProps;\r\n }\r\n\r\n /**\r\n * Merges a seed view in the iModel with the passed view state props. It will be a no-op if there are no default 3D views in the iModel\r\n * @param viewStateProps Input view props to be merged\r\n */\r\n private async _mergeSeedView(viewStateProps: ViewStateProps): Promise<ViewStateProps> {\r\n const viewId = await this._getDefaultViewId();\r\n // Handle iModels without any default view id\r\n if (viewId === undefined)\r\n return viewStateProps;\r\n\r\n const seedViewState = (await this._imodel.views.load(viewId) as SpatialViewState);\r\n const seedViewStateProps = {\r\n categorySelectorProps: seedViewState.categorySelector.toJSON(),\r\n modelSelectorProps: seedViewState.modelSelector.toJSON(),\r\n viewDefinitionProps: seedViewState.toJSON(),\r\n displayStyleProps: seedViewState.displayStyle.toJSON(),\r\n };\r\n const mergedDisplayProps = seedViewStateProps.displayStyleProps;\r\n if (mergedDisplayProps.jsonProperties !== undefined) {\r\n mergedDisplayProps.jsonProperties.styles = {\r\n ...mergedDisplayProps.jsonProperties.styles,\r\n ...viewStateProps.displayStyleProps.jsonProperties!.styles,\r\n };\r\n }\r\n\r\n return { ...seedViewStateProps, ...viewStateProps, displayStyleProps: mergedDisplayProps };\r\n }\r\n\r\n /**\r\n * Get ID of default view.\r\n */\r\n private async _getDefaultViewId(): Promise<Id64String | undefined> {\r\n const viewId = await this._imodel.views.queryDefaultViewId();\r\n const params: ViewQueryParams = {};\r\n params.from = SpatialViewState.classFullName;\r\n params.where = `ECInstanceId=${viewId}`;\r\n\r\n // Check validity of default view\r\n const viewProps = await IModelReadRpcInterface.getClient().queryElementProps(this._imodel.getRpcProps(), params);\r\n if (viewProps.length === 0) {\r\n // Return the first view we can find\r\n const viewList = await this._imodel.views.getViewList({ wantPrivate: false });\r\n if (viewList.length === 0)\r\n return undefined;\r\n\r\n const spatialViewList = viewList.filter((value: IModelConnection.ViewSpec) => value.class.indexOf(\"Spatial\") !== -1);\r\n if (spatialViewList.length === 0)\r\n return undefined;\r\n\r\n return spatialViewList[0].id;\r\n }\r\n\r\n return viewId;\r\n }\r\n\r\n /**\r\n * Get all categories containing elements\r\n */\r\n private async _getAllCategories(): Promise<Id64Array> {\r\n // Only use categories with elements in them\r\n const query = `SELECT DISTINCT Category.Id AS id FROM BisCore.GeometricElement3d WHERE Category.Id IN (SELECT ECInstanceId FROM BisCore.SpatialCategory)`;\r\n const categories: Id64Array = await this._executeQuery(query);\r\n\r\n return categories;\r\n }\r\n\r\n /**\r\n * Get all PhysicalModel ids in the connection\r\n */\r\n private async _getAllModels(): Promise<Id64Array> {\r\n // Note: IsNotSpatiallyLocated was introduced in a later version of the BisCore ECSchema.\r\n // If the iModel has an earlier version, the statement will throw because the property does not exist.\r\n // If the iModel was created from an earlier version and later upgraded to a newer version, the property may be NULL for models created prior to the upgrade.\r\n const select = \"SELECT ECInstanceId FROM Bis.GeometricModel3D WHERE IsPrivate = false AND IsTemplate = false\";\r\n const spatialCriterion = \"AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated = false)\";\r\n let models = [];\r\n try {\r\n models = await this._executeQuery(`${select} ${spatialCriterion}`);\r\n } catch {\r\n models = await this._executeQuery(select);\r\n }\r\n\r\n return models;\r\n }\r\n\r\n /**\r\n * Helper function to execute ECSql queries.\r\n */\r\n private _executeQuery = async (query: string) => {\r\n const rows = [];\r\n for await (const row of this._imodel.query(query, undefined, QueryRowFormat.UseJsPropertyNames))\r\n rows.push(row.id);\r\n\r\n return rows;\r\n };\r\n}\r\n"]}
@@ -109,7 +109,7 @@ export class VariedTechnique {
109
109
  addShader(builder, flags, gl) {
110
110
  const descr = `${this._debugDescription}: ${flags.buildDescription()}`;
111
111
  builder.setDebugDescription(descr);
112
- if (System.instance.supportsLogZBuffer) {
112
+ if (System.instance.supportsLogZBuffer && !flags.isHilite) {
113
113
  addLogDepth(builder);
114
114
  assert(!builder.frag.requiresEarlyZWorkaround);
115
115
  if (System.instance.capabilities.driverBugs.fragDepthDoesNotDisableEarlyZ)
@@ -1 +1 @@
1
- {"version":3,"file":"Technique.js","sourceRoot":"","sources":["../../../../src/render/webgl/Technique.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAmB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACL,0BAA0B,EAAE,sCAAsC,EAAE,0BAA0B,EAAE,qCAAqC,EACrI,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,0BAA0B,EAA2B,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClK,OAAO,EAAE,kCAAkC,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,uBAAuB,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,wBAAwB,EAAE,EAAE,kCAAkC,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAgC,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAC2F,cAAc,GAC/G,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAe,MAAM,eAAe,CAAC;AAczE;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAG5B,iDAAiD;IACjD,YAAmB,OAAsB,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAE/D,SAAS,CAAC,MAAsB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,gBAAgB,CAAC,MAAc,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9B,cAAc,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,oBAA0B,CAAC,CAAC,CAAC;IAE7F,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7D,OAAO;QACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,cAAsB,IAAI,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;AAClF,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC,+BAA+B;AAC5D,MAAM,YAAY,GAAG,+CAA2D,CAAC;AACjF,MAAM,qBAAqB,GAAG,IAAI,cAAc,EAAE,CAAC;AACnD,MAAM,kBAAkB,GAAG,IAAI,cAAc,EAAE,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAgB,eAAe;IAsDnC,YAAsB,WAAmB;QArDxB,mBAAc,GAAoB,EAAE,CAAC;QACrC,sBAAiB,GAAsB,EAAE,CAAC;QAE3D;;;WAGG;QACO,iBAAY,GAAqB,EAAE,CAAC;QAwBtC,gBAAW,GAAG,KAAK,CAAC;QAuB1B,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,WAAW,CAAC;IAC3C,CAAC;IA9CM,cAAc;QACnB,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;YACzC,IAAI,OAAO,CAAC,OAAO,EAAE,oBAA0B;gBAC7C,WAAW,GAAG,KAAK,CAAC;SACvB;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB;YAC1C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACpB,WAAW,GAAG,KAAK,CAAC;QAExB,OAAO,WAAW,CAAC;IACrB,CAAC;IAES,kBAAkB;QAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7B,yCAAyC;QACzC,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,EAAE,gBAAgB,gBAAgB,oBAAoB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/K,CAAC;IAGD,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEtD,OAAO;QACZ,IAAI,IAAI,CAAC,WAAW;YAClB,OAAO;QAET,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;YACzC,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;SAClB;QAED,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAClD,MAAM,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC;YACpC,aAAa,CAAC,OAAO,EAAE,CAAC;SACzB;QAED,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IASS,SAAS,CAAC,OAAuB,EAAE,KAAqB,EAAE,EAAgB;QAClF,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACvE,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACtC,WAAW,CAAC,OAAO,CAAC,CAAC;YAErB,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,6BAA6B;gBACvE,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACtG;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAEpC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAEO,UAAU,CAAC,OAAuB,EAAE,KAAa,EAAE,EAAgB;QACzE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;QAEjD,2EAA2E;QAC3E,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QAE9C,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IAES,eAAe,CAAC,EAAgB,EAAE,SAAsB,EAAE,UAAwB,EAAE,MAA4E;QACxK,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC9C,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAES,oBAAoB,CAAC,OAAuB,EAAE,KAAqB,EAAE,EAAgB;QAC7F,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAES,YAAY,CAAC,OAAuB,EAAE,IAAiB;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,iBAAqB,IAAI,EAAE;YAC7B,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAC1C;aAAM;YACL,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7B,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAC5B;IACH,CAAC;IAEO,cAAc,CAAC,KAAqB;QAC1C,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,YAAY,gBAAqB,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAC/I,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,SAAS,CAAC,KAAqB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAkC,CAAC;QAEvC,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;YAC5B,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SACjD;QAED,IAAI,OAAO,KAAK,SAAS;YACvB,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oCAAoC;IAC7B,gBAAgB,CAAC,KAAa;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,oCAAoC;IAC7B,cAAc;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,iBAAiB;IACV,cAAc,CAAC,IAAsC;QAC1D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc;YACrC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;SACZ;IACH,CAAC;CACF;AAED,MAAM,gBAAiB,SAAQ,eAAe;IAc5C,YAAmB,EAAgB;QACjC,qDAAqD;QACrD,mEAAmE;QACnE,iDAAiD;QACjD,4BAA4B;QAC5B,KAAK,CAAC,gBAAgB,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,QAAQ,CAAC;YACxC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC;YACjD,cAAc,CAAC,eAAe,CAAC,4BAA4B,CAAC;YAC5D,cAAc,CAAC,eAAe,CAAC,0BAA0B,CAAC;YAC1D,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAClD,cAAc,CAAC,eAAe,CAAC,2BAA2B,CAAC;YAC3D,cAAc,CAAC,eAAe,CAAC,sCAAsC,CAAC;YACtE,cAAc,CAAC,eAAe,CAAC,mCAAmC,CAAC;YACnE,cAAc,CAAC,eAAe,CAAC,6BAA6B,CAAC;YAC7D,cAAc,CAAC,eAAe,CAAC,mBAAmB,CAAC;YACnD,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC;YAC7C,cAAc,CAAC,eAAe,CAAC,sBAAsB,CAAC;YACtD,cAAc,CAAC,eAAe,CAAC,gCAAgC,CAAC;YAChE,cAAc,CAAC,eAAe,CAAC,2BAA2B,CAAC;YAC3D,cAAc,CAAC,eAAe,CAAC,iCAAiC,CAAC;YACjE,cAAc,CAAC,eAAe,CAAC,2CAA2C,CAAC;YAC3E,cAAc,CAAC,eAAe,CAAC,sCAAsC,CAAC;YACtE,cAAc,CAAC,eAAe,CAAC,uBAAuB,CAAC;YACvD,cAAc,CAAC,eAAe,CAAC,gCAAgC,CAAC;YAChE,cAAc,CAAC,eAAe,CAAC,0CAA0C,CAAC;YAC1E,cAAc,CAAC,eAAe,CAAC,qCAAqC,CAAC;YACrE,cAAc,CAAC,eAAe,CAAC,2CAA2C,CAAC;YAC3E,cAAc,CAAC,eAAe,CAAC,qDAAqD,CAAC;YACrF,cAAc,CAAC,eAAe,CAAC,gDAAgD,CAAC;YAChF,cAAc,CAAC,eAAe,CAAC,iCAAiC,CAAC;YACjE,cAAc,CAAC,eAAe,CAAC,4BAA4B,CAAC;YAC5D,cAAc,CAAC,eAAe,CAAC,kCAAkC,CAAC;YAClE,cAAc,CAAC,eAAe,CAAC,4CAA4C,CAAC;YAC5E,cAAc,CAAC,eAAe,CAAC,uCAAuC,CAAC;YACvE,cAAc,CAAC,eAAe,CAAC,uBAAuB,CAAC;YACvD,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAClD,cAAc,CAAC,eAAe,CAAC,wBAAwB,CAAC;YACxD,cAAc,CAAC,eAAe,CAAC,kCAAkC,CAAC;YAClE,cAAc,CAAC,eAAe,CAAC,6BAA6B,CAAC;SAC9D,CAAC;QAEF,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,cAAmB,oBAAoB,CAAC,CAAC;YAC3E,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;gBACzE,KAAK,IAAI,UAAU,aAAkB,EAAE,UAAU,eAAoB,EAAE,UAAU,EAAE,EAAE;oBACnF,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;wBACzE,KAAK,IAAI,cAAc,aAAsB,EAAE,cAAc,eAAwB,EAAE,cAAc,EAAE,EAAE;4BACvG,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;gCACtC,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE;oCAC5D,IAAI,iBAAqB,WAAW,IAAI,eAAwB,cAAc,EAAE;wCAC9E,IAAI,gBAAmB,QAAQ,IAAI,gBAAqB,UAAU;4CAChE,SAAS,CAAC,4CAA4C;wCAExD,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;wCAC1D,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;wCAC5B,KAAK,CAAC,gBAAgB,GAAG,cAAc,CAAC;wCACxC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,YAAY,CAAC;wCAEzC,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;wCAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;qCACpC;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF;QAED,IAAI,CAAC,eAAe,CAAC,EAAE,2BAAoC,oBAAoB,CAAC,CAAC;QACjF,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,EAAE,EAAE;YACxD,KAAK,IAAI,UAAU,aAAkB,EAAE,UAAU,eAAoB,EAAE,UAAU,EAAE,EAAE;gBACnF,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;oBACzE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;wBACtC,IAAI,gBAAmB,QAAQ,IAAI,gBAAqB,UAAU;4BAChE,SAAS,CAAC,4CAA4C;wBAExD,KAAK,CAAC,KAAK,CAAC,WAAW,cAAkB,UAAU,EAAE,QAAQ,CAAC,CAAC;wBAC/D,KAAK,CAAC,YAAY,cAAmB,CAAC;wBACtC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;wBAE1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;wBAC5C,IAAI,KAAK,CAAC,aAAa;4BACrB,eAAe,CAAC,OAAO,CAAC,CAAC;wBAE3B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;qBACpC;iBACF;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IAEhD,kBAAkB,CAAC,KAAqB;QAC7C,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,YAAY,EAAE;YACtB,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAEhC,wCAAwC;YACxC,IAAI,KAAK,CAAC,QAAQ;gBAChB,OAAO,gBAAgB,CAAC,YAAY,CAAC;YAEvC,wEAAwE;YACxE,0IAA0I;YAC1I,IAAI,SAAS,GAAG,gBAAgB,CAAC,YAAY,GAAG,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,aAAa;gBACrB,SAAS,IAAI,CAAC,CAAC;YACjB,IAAI,KAAK,CAAC,YAAY;gBACpB,SAAS,IAAI,CAAC,CAAC;YACjB,IAAI,KAAK,CAAC,UAAU;gBAClB,SAAS,IAAI,CAAC,CAAC;YAEjB,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;YAC5C,OAAO,SAAS,GAAG,aAAa,CAAC;SAClC;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;SACtD;QAED,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,eAAwB,CAAC,CAAC;QAC5E,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC7F,KAAK,IAAI,gBAAgB,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC1D,KAAK,IAAI,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACxD,KAAK,IAAI,gBAAgB,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAC5D,KAAK,IAAI,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAExD,IAAI,KAAK,CAAC,gBAAgB;YACxB,KAAK,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC;;YAElG,KAAK,IAAI,gBAAgB,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QAE1D,OAAO,KAAK,CAAC;IACf,CAAC;;AA5JuB,yBAAQ,GAAG,CAAC,CAAC;AACb,8BAAa,GAAG,CAAC,CAAC;AAClB,4BAAW,GAAG,CAAC,CAAC;AAChB,2BAAU,GAAG,CAAC,CAAC;AACf,6BAAY,GAAG,CAAC,CAAC;AACjB,2BAAU,GAAG,EAAE,CAAC;AAChB,0BAAS,GAAG,EAAE,CAAC;AACf,iCAAgB,GAAG,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,wBAAwB;AAC3E,yBAAQ,GAAG,gBAAgB,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC;AACtG,4GAA4G;AAC5G,0HAA0H;AAClG,6BAAY,GAAG,gBAAgB,CAAC,QAAQ,GAAG,iBAAiB,CAAC;AAoJvF,MAAM,iBAAkB,SAAQ,eAAe;IAO7C,YAAmB,EAAgB;QACjC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,mCAAmC,CAAC;SACpE,CAAC;QAEF,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,cAAmB,qBAAqB,CAAC,CAAC;YAC5E,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;gBACtC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBACjD,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEjC,uDAAuD;gBACvD,MAAM,YAAY,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBACtD,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,sBAA0B,WAAW,EAAE;oBACzC,mBAAmB,CAAC,YAAY,EAAE,WAAW,kBAAiC,CAAC;oBAC/E,mBAAmB,CAAC,OAAO,EAAE,WAAW,kBAAiC,CAAC;oBAC1E,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpD;qBAAM;oBACL,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACnD,mBAAmB,CAAC,OAAO,EAAE,WAAW,eAA+B,CAAC;iBACzE;gBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;aACpC;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC;IAEjD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;SACvD;QAED,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAC/F,KAAK,IAAI,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QACzD,KAAK,IAAI,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;;AAvDuB,0BAAQ,GAAG,CAAC,CAAC;AACb,+BAAa,GAAG,CAAC,CAAC;AAClB,6BAAW,GAAG,CAAC,CAAC;AAChB,2BAAS,GAAG,CAAC,CAAC;AACd,0BAAQ,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAsDrF,MAAM,aAAc,SAAQ,eAAe;IAQzC,YAAmB,EAAgB,EAAE,eAAwB,KAAK;QAChE,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;gBACzE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;oBACtC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;oBACpE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;oBAC5B,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;oBACrF,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAEjC,uDAAuD;oBACvD,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC1F,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,sBAA0B,WAAW,EAAE;wBACzC,mBAAmB,CAAC,YAAY,EAAE,WAAW,kBAAiC,CAAC;wBAC/E,mBAAmB,CAAC,OAAO,EAAE,WAAW,kBAAiC,CAAC;wBAC1E,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;qBACpD;yBAAM;wBACL,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;wBACnD,mBAAmB,CAAC,OAAO,EAAE,WAAW,eAA+B,CAAC;qBACzE;oBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBACxC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;oBACpE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;oBAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpC;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjF,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC;QACvF,KAAK,IAAI,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QACrD,IAAI,KAAK,CAAC,UAAU;YAClB,KAAK,IAAI,aAAa,CAAC,UAAU,CAAC;QACpC,IAAI,KAAK,CAAC,WAAW;YACnB,KAAK,IAAI,aAAa,CAAC,WAAW,CAAC;QAErC,OAAO,KAAK,CAAC;IACf,CAAC;;AAtDuB,sBAAQ,GAAG,CAAC,CAAC;AACb,2BAAa,GAAG,CAAC,CAAC;AAClB,wBAAU,GAAG,CAAC,CAAC;AACf,yBAAW,GAAG,CAAC,CAAC;AAChB,uBAAS,GAAG,CAAC,CAAC;AAqDxC,MAAM,oBAAqB,SAAQ,eAAe;IAOhD,YAAmB,EAAgB;QACjC,KAAK,CAAC,CAAC,oBAAoB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC;QAE3D,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,cAAmB,wBAAwB,CAAC,CAAC;YAC/E,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;gBACtC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,MAAM,OAAO,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;gBACpD,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEjC,uDAAuD;gBACvD,MAAM,YAAY,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;gBACzD,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,sBAA0B,WAAW,EAAE;oBACzC,mBAAmB,CAAC,YAAY,EAAE,WAAW,iBAAgC,CAAC;oBAC9E,mBAAmB,CAAC,OAAO,EAAE,WAAW,iBAAgC,CAAC;oBACzE,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpD;qBAAM;oBACL,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACnD,mBAAmB,CAAC,OAAO,EAAE,WAAW,eAA+B,CAAC;iBACzE;gBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;aACpC;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,aAAa,CAAC,CAAC,CAAC;IAEpD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,oBAAoB,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;SAC1D;QAED,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QACrG,KAAK,IAAI,oBAAoB,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QAC5D,KAAK,IAAI,oBAAoB,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;;AAlDuB,6BAAQ,GAAG,CAAC,CAAC;AACb,kCAAa,GAAG,CAAC,CAAC;AAClB,gCAAW,GAAG,CAAC,CAAC;AAChB,8BAAS,GAAG,CAAC,CAAC;AACd,6BAAQ,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAiDxF,MAAM,mBAAoB,SAAQ,eAAe;IAG/C,YAAmB,EAAgB;QACjC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAExC,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,0BAA0B,CAAC;SAC3D,CAAC;QAEF,KAAK,IAAI,WAAW,aAAkB,EAAE,WAAW,eAAoB,EAAE,WAAW,EAAE,EAAE;YACtF,IAAI,CAAC,eAAe,CAAC,EAAE,cAAkB,WAAW,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;YAClG,MAAM,KAAK,GAAG,qBAAqB,CAAC;YACpC,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;gBACzE,MAAM,sBAAsB,GAAG,iCAAyC,CAAC;gBACzE,KAAK,MAAM,WAAW,IAAI,sBAAsB,EAAE;oBAChD,KAAK,CAAC,KAAK,CAAC,WAAW,0BAAmC,QAAQ,CAAC,CAAC;oBACpE,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC;oBACjC,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACnF,IAAI,sBAA0B,WAAW,EAAE;wBACzC,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBAC1C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,iBAAsB,CAAC,IAAI,EAAE,EAAE;4BACzE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gCAC/D,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAa,CAAC,gBAAgB,CAAC,CAAC;4BACvE,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBACH,OAAO,CAAC,IAAI,CAAC,GAAG,4BAA0C,eAAe,CAAC,CAAC;qBAC5E;oBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpC;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC;IAEnD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ;YAChB,OAAO,mBAAmB,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;aACtD;YACH,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,KAAK,CAAC,YAAY;gBACpB,GAAG,EAAE,CAAC;YACR,IAAI,KAAK,CAAC,WAAW,iBAAqB;gBACxC,GAAG,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,CAAC,UAAU;gBAClB,GAAG,IAAI,CAAC,CAAC;YACX,OAAO,GAAG,CAAC;SACZ;IACH,CAAC;;AArDuB,4BAAQ,GAAG,CAAC,CAAC;AAwDvC,MAAM,oBAAqB,SAAQ,eAAe;IAGhD,YAAmB,EAAyB;QAC1C,KAAK,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,0BAA0B,CAAC;SAC3D,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,EAAE,0BAAmC,wBAAwB,CAAC,CAAC;QACpF,IAAI,CAAC,eAAe,CAAC,EAAE,2BAAoC,kCAAkC,CAAC,CAAC;QAC/F,KAAK,IAAI,WAAW,aAAkB,EAAE,WAAW,eAAoB,EAAE,WAAW,EAAE,EAAE;YACtF,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE;gBAC5D,KAAK,IAAI,UAAU,aAAkB,EAAE,UAAU,eAAoB,EAAE,UAAU,EAAE,EAAE;oBACnF,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;wBACzE,MAAM,KAAK,GAAG,qBAAqB,CAAC;wBACpC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;4BACtC,KAAK,CAAC,KAAK,CAAC,WAAW,cAAkB,UAAU,EAAE,QAAQ,CAAC,CAAC;4BAC/D,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC;4BACjC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,YAAY,CAAC;4BACzC,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;4BAEhD,IAAI,KAAK,CAAC,aAAa,EAAE;gCACvB,cAAc,CAAC,OAAO,CAAC,CAAC;gCACxB,eAAe,CAAC,OAAO,CAAC,CAAC;6BAC1B;;gCACC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;4BAE1C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;yBACpC;qBACF;iBACF;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,aAAa,CAAC,CAAC,CAAC;IAEpD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ;YAChB,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,CAAC,YAAY;YACpB,GAAG,EAAE,CAAC;QACR,IAAI,KAAK,CAAC,YAAY;YACpB,GAAG,IAAI,CAAC,CAAC;QACX,IAAI,KAAK,CAAC,aAAa;YACrB,GAAG,IAAI,CAAC,CAAC;QACX,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;QAC7B,IAAI,KAAK,CAAC,UAAU;YAClB,GAAG,IAAI,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC;IACb,CAAC;;AArDuB,iCAAY,GAAG,EAAE,CAAC;AAqE5C,MAAM,oBAAoB,GAAmC;IAC3D,2HAA2H;IAC3H,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IAClN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IAClN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IACnN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IACvN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IACxN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IACjN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IACjN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IAClN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IACtN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IAEvN,oDAAoD;IACpD,qGAAqG;IACrG,EAAE,WAAW,iBAAqB,EAAE;IACpC,EAAE,WAAW,cAAkB,EAAE;IACjC,EAAE,WAAW,wBAA4B,EAAE;IAC3C,EAAE,WAAW,kBAAsB,EAAE;IACrC,EAAE,WAAW,qBAAyB,EAAE;IACxC,EAAE,WAAW,oBAAwB,EAAE;IACvC,EAAE,WAAW,qBAAyB,EAAE;IAExC,mFAAmF;IACnF,EAAE,WAAW,8BAAiC,EAAE;IAChD,EAAE,WAAW,0BAA6B,EAAE;IAC5C,EAAE,WAAW,oBAAuB,EAAE;IACtC,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,4BAA+B,EAAE;IAC9C,EAAE,WAAW,8BAAkC,EAAE;IACjD,EAAE,WAAW,yBAA6B,EAAE;IAC5C,EAAE,WAAW,wCAA2C,EAAE;IAC1D,EAAE,WAAW,6BAAgC,EAAE;IAC/C,EAAE,WAAW,2CAA8C,EAAE;IAC7D,EAAE,WAAW,sCAAyC,EAAE;IACxD,EAAE,WAAW,uBAA0B,EAAE;IACzC,EAAE,WAAW,oCAAuC,EAAE;IACtD,EAAE,WAAW,wBAA2B,EAAE;IAC1C,EAAE,WAAW,iBAAoB,EAAE;IACnC,EAAE,WAAW,4BAA+B,EAAE;IAC9C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,eAAkB,EAAE;IACjC,EAAE,WAAW,0BAA6B,EAAE;IAC5C,EAAE,WAAW,wBAA2B,EAAE;IAC1C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,wBAA2B,EAAE;IAC1C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,oBAAwB,EAAE;CACxC,CAAC;AACF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,UAAU;IAyIrB;QAxIiB,UAAK,GAAG,IAAI,KAAK,EAAa,CAAC,CAAC,0FAA0F;QAC1H,yBAAoB,GAAG,IAAI,KAAK,EAAU,CAAC,CAAC,gEAAgE;QACrH,8BAAyB,GAAG,CAAC,CAAC;QAC9B,iBAAY,GAAG,CAAC,CAAC;IAqID,CAAC;IAnIlB,MAAM,CAAC,MAAM,CAAC,EAAgB;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,YAAY,CAAC,EAAe;QACjC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAEM,mBAAmB,CAAC,SAAoB,EAAE,IAAY;QAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO,EAAE,CAAC;QAEZ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,sBAAyB,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;IACvE,CAAC;IAEM,qBAAqB,CAAC,IAAY;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,sBAAyB,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAED,uCAAuC;IAChC,OAAO,CAAC,MAAc,EAAE,QAAsB,EAAE,UAAsB;QAC3E,MAAM,CAAC,mBAAoB,UAAU,EAAE,qBAAqB,CAAC,CAAC;QAE9D,KAAK,CAAC,IAAI,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,QAA+B,EAAE,EAAE;YACvF,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAC5B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC;IAED,0IAA0I;IACnI,2BAA2B,CAAC,MAAc,EAAE,WAAyB,EAAE,UAAsB;QAClG,oFAAoF;QACpF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,sFAAsF;IAC/E,IAAI,CAAC,MAAkB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,QAA+B,EAAE,EAAE;YAC9G,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7D,OAAO;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,qGAAqG;IAC9F,cAAc;QACnB,IAAI,WAAW,GAAG,IAAI,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;gBAC1B,WAAW,GAAG,KAAK,CAAC;aACrB;SACF;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,yHAAyH;IAClH,qBAAqB;QAC1B,IAAI,aAAa,kBAAwB,CAAC;QAC1C,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAElC,GAAG;YACD,IAAI,IAAI,CAAC,yBAAyB,IAAI,uBAAuB;gBAC3D,OAAO,KAAK,CAAC;YAEf,IAAI,MAAqB,CAAC;YAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE3C,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,EAAE,iEAAiE;gBACzG,MAAM,KAAK,GAAG,qBAAqB,CAAC;gBACpC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY,aAAgB,CAAC;gBAClI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;gBACjE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;gBACzD,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aAChC;iBAAM,EAAE,oGAAoG;gBAC3G,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;aACpC;YAED,IAAI,MAAM,CAAC,UAAU;gBACnB,qBAAqB,GAAG,IAAI,CAAC;iBAC1B;gBACH,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,qBAAqB,GAAG,KAAK,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE;gBACnC,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;aACvB;SACF,QAAQ,qBAAqB,EAAE;QAEhC,OAAO,aAAa,oBAA0B,CAAC;IACjD,CAAC;IAED,iBAAiB;IACV,oBAAoB,CAAC,IAAsC;QAChE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK;YAChC,IAAI,SAAS,YAAY,eAAe;gBACtC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAIO,kBAAkB,CAAC,EAAgB;QACzC,IAAI,CAAC,KAAK,8BAAiC,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,KAAK,4BAA+B,GAAG,IAAI,iBAAiB,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,KAAK,oBAAuB,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,0BAA6B,GAAG,IAAI,iBAAiB,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,KAAK,iBAAoB,GAAG,IAAI,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,4BAA+B,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,eAAkB,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,0BAA6B,GAAG,IAAI,iBAAiB,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,iBAAqB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,cAAkB,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,wBAA4B,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,kBAAsB,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,qBAAyB,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,oBAAwB,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,qBAAyB,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,oBAAwB,GAAG,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;QACxF,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB;YAChD,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;;YAE9F,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3G,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK,oCAAuC,GAAG,IAAI,iBAAiB,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtH,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,IAAI,CAAC,EAAE,cAAc,EAAE,EAAE;YAClE,MAAM,MAAM,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;SACxF;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,wBAA2B,EAAE,0CAA0C,CAAC,CAAC;IACnG,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, using } from \"@itwin/core-bentley\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { ClippingProgram, createClippingProgram } from \"./ClippingProgram\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands, DrawParams } from \"./DrawCommand\";\r\nimport { createAmbientOcclusionProgram } from \"./glsl/AmbientOcclusion\";\r\nimport { createBlurProgram } from \"./glsl/Blur\";\r\nimport { createClearPickAndColorProgram } from \"./glsl/ClearPickAndColor\";\r\nimport { createClearTranslucentProgram } from \"./glsl/ClearTranslucent\";\r\nimport { createCombine3TexturesProgram } from \"./glsl/Combine3Textures\";\r\nimport { createCombineTexturesProgram } from \"./glsl/CombineTextures\";\r\nimport { addEyeSpace, addFrustum, addShaderFlags } from \"./glsl/Common\";\r\nimport { createCompositeProgram } from \"./glsl/Composite\";\r\nimport { createCopyColorProgram } from \"./glsl/CopyColor\";\r\nimport { createCopyPickBuffersProgram } from \"./glsl/CopyPickBuffers\";\r\nimport {\r\n createVolClassBlendProgram, createVolClassColorUsingStencilProgram, createVolClassCopyZProgram, createVolClassCopyZUsingPointsProgram,\r\n createVolClassSetBlendProgram,\r\n} from \"./glsl/CopyStencil\";\r\nimport { createEdgeBuilder } from \"./glsl/Edge\";\r\nimport { createEVSMProgram } from \"./glsl/EVSMFromDepth\";\r\nimport { addFeatureId, addFeatureSymbology, addRenderOrder, addUniformFeatureSymbology, FeatureSymbologyOptions, mixFeatureColor } from \"./glsl/FeatureSymbology\";\r\nimport { addFragColorWithPreMultipliedAlpha, addPickBufferOutputs } from \"./glsl/Fragment\";\r\nimport { addLogDepth } from \"./glsl/LogarithmicDepthBuffer\";\r\nimport { addUnlitMonochrome } from \"./glsl/Monochrome\";\r\nimport createPlanarGridProgram from \"./glsl/PlanarGrid\";\r\nimport { createPointCloudBuilder, createPointCloudHiliter } from \"./glsl/PointCloud\";\r\nimport { createPointStringBuilder, createPointStringHiliter } from \"./glsl/PointString\";\r\nimport { createPolylineBuilder, createPolylineHiliter } from \"./glsl/Polyline\";\r\nimport createRealityMeshBuilder, { createClassifierRealityMeshHiliter, createRealityMeshHiliter } from \"./glsl/RealityMesh\";\r\nimport { createSkyBoxProgram } from \"./glsl/SkyBox\";\r\nimport { createSkySphereProgram } from \"./glsl/SkySphere\";\r\nimport { createSurfaceBuilder, createSurfaceHiliter } from \"./glsl/Surface\";\r\nimport { addTranslucency } from \"./glsl/Translucency\";\r\nimport { addModelViewMatrix } from \"./glsl/Vertex\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { ProgramBuilder, VariableType, VertexShaderComponent } from \"./ShaderBuilder\";\r\nimport { CompileStatus, ShaderProgram, ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport {\r\n FeatureMode, IsAnimated, IsClassified, IsEdgeTestNeeded, IsInstanced, IsShadowable, IsThematic, TechniqueFlags,\r\n} from \"./TechniqueFlags\";\r\nimport { computeCompositeTechniqueId, TechniqueId } from \"./TechniqueId\";\r\n\r\n/** Defines a rendering technique implemented using one or more shader programs.\r\n * @internal\r\n */\r\nexport interface Technique extends WebGLDisposable {\r\n getShader(flags: TechniqueFlags): ShaderProgram;\r\n getShaderByIndex(index: number): ShaderProgram;\r\n getShaderCount(): number;\r\n\r\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\r\n compileShaders(): boolean;\r\n}\r\n\r\n/** A rendering technique implemented using a single shader program, typically for some specialized purpose.\r\n * @internal\r\n */\r\nexport class SingularTechnique implements Technique {\r\n public readonly program: ShaderProgram;\r\n\r\n // Note: Technique assumes ownership of a program\r\n public constructor(program: ShaderProgram) { this.program = program; }\r\n\r\n public getShader(_flags: TechniqueFlags) { return this.program; }\r\n public getShaderByIndex(_index: number) { return this.program; }\r\n public getShaderCount() { return 1; }\r\n public compileShaders(): boolean { return this.program.compile() === CompileStatus.Success; }\r\n\r\n public get isDisposed(): boolean { return this.program.isDisposed; }\r\n\r\n public dispose(): void {\r\n dispose(this.program);\r\n }\r\n}\r\n\r\nfunction numFeatureVariants(numBaseShaders: number) { return numBaseShaders * 3; }\r\nconst numHiliteVariants = 2; // instanced and non-instanced.\r\nconst featureModes = [FeatureMode.None, FeatureMode.Pick, FeatureMode.Overrides];\r\nconst scratchTechniqueFlags = new TechniqueFlags();\r\nconst scratchHiliteFlags = new TechniqueFlags();\r\n\r\n/** A rendering technique implemented using multiple shader programs, selected based on TechniqueFlags.\r\n * @internal\r\n */\r\nexport abstract class VariedTechnique implements Technique {\r\n private readonly _basicPrograms: ShaderProgram[] = [];\r\n private readonly _clippingPrograms: ClippingProgram[] = [];\r\n\r\n /** TechniqueFlags identifying shader programs for which the fragment shader writes depth but does not contain any discards.\r\n * Buggy Intel HD 620/630 drivers incorrectly apply early-Z optimization in this case; we must insert a never-executed\r\n * conditional discard to prevent that.\r\n */\r\n protected _earlyZFlags: TechniqueFlags[] = [];\r\n\r\n public compileShaders(): boolean {\r\n let allCompiled = true;\r\n for (const program of this._basicPrograms) {\r\n if (program.compile() !== CompileStatus.Success)\r\n allCompiled = false;\r\n }\r\n\r\n for (const clipper of this._clippingPrograms)\r\n if (!clipper.compile())\r\n allCompiled = false;\r\n\r\n return allCompiled;\r\n }\r\n\r\n protected finishConstruction(): void {\r\n this._earlyZFlags.length = 0;\r\n\r\n // Confirm no empty entries in our array.\r\n let emptyShaderIndex = -1;\r\n assert(-1 === (emptyShaderIndex = this._basicPrograms.findIndex((prog) => undefined === prog)), `Shader index ${emptyShaderIndex} is undefined in ${this.constructor.name}`);\r\n }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n\r\n public dispose(): void {\r\n if (this._isDisposed)\r\n return;\r\n\r\n for (const program of this._basicPrograms) {\r\n assert(undefined !== program);\r\n dispose(program);\r\n }\r\n\r\n this._basicPrograms.length = 0;\r\n for (const clipShaderObj of this._clippingPrograms) {\r\n assert(undefined !== clipShaderObj);\r\n clipShaderObj.dispose();\r\n }\r\n\r\n this._clippingPrograms.length = 0;\r\n this._isDisposed = true;\r\n }\r\n\r\n protected constructor(numPrograms: number) {\r\n this._basicPrograms.length = numPrograms;\r\n }\r\n\r\n protected abstract computeShaderIndex(flags: TechniqueFlags): number;\r\n protected abstract get _debugDescription(): string;\r\n\r\n protected addShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGLContext): void {\r\n const descr = `${this._debugDescription}: ${flags.buildDescription()}`;\r\n builder.setDebugDescription(descr);\r\n\r\n if (System.instance.supportsLogZBuffer) {\r\n addLogDepth(builder);\r\n\r\n assert(!builder.frag.requiresEarlyZWorkaround);\r\n if (System.instance.capabilities.driverBugs.fragDepthDoesNotDisableEarlyZ)\r\n builder.frag.requiresEarlyZWorkaround = -1 !== this._earlyZFlags.findIndex((x) => x.equals(flags));\r\n }\r\n\r\n const index = this.getShaderIndex(flags);\r\n this.addProgram(builder, index, gl);\r\n\r\n assert(!builder.frag.requiresEarlyZWorkaround);\r\n }\r\n\r\n private addProgram(builder: ProgramBuilder, index: number, gl: WebGLContext): void {\r\n assert(this._basicPrograms[index] === undefined);\r\n this._basicPrograms[index] = builder.buildProgram(gl);\r\n assert(this._basicPrograms[index] !== undefined);\r\n\r\n // Clipping programs always include a discard, so never require workaround.\r\n builder.frag.requiresEarlyZWorkaround = false;\r\n\r\n assert(this._clippingPrograms[index] === undefined);\r\n this._clippingPrograms[index] = createClippingProgram(builder);\r\n assert(this._clippingPrograms[index] !== undefined);\r\n }\r\n\r\n protected addHiliteShader(gl: WebGLContext, instanced: IsInstanced, classified: IsClassified, create: (instanced: IsInstanced, classified: IsClassified) => ProgramBuilder): void {\r\n const builder = create(instanced, classified);\r\n scratchHiliteFlags.initForHilite(0, instanced, classified);\r\n this.addShader(builder, scratchHiliteFlags, gl);\r\n }\r\n\r\n protected addTranslucentShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGLContext): void {\r\n flags.isTranslucent = true;\r\n addTranslucency(builder);\r\n this.addShader(builder, flags, gl);\r\n }\r\n\r\n protected addFeatureId(builder: ProgramBuilder, feat: FeatureMode) {\r\n const frag = builder.frag;\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(frag);\r\n } else {\r\n const vert = builder.vert;\r\n addFrustum(builder);\r\n addEyeSpace(builder);\r\n addModelViewMatrix(vert);\r\n addRenderOrder(frag);\r\n addFeatureId(builder, false);\r\n addPickBufferOutputs(frag);\r\n }\r\n }\r\n\r\n private getShaderIndex(flags: TechniqueFlags) {\r\n assert(!flags.isHilite || (!flags.isTranslucent && (flags.isClassified === IsClassified.Yes || flags.hasFeatures)), \"invalid technique flags\");\r\n const index = this.computeShaderIndex(flags);\r\n assert(index < this._basicPrograms.length, \"shader index out of bounds\");\r\n return index;\r\n }\r\n\r\n public getShader(flags: TechniqueFlags): ShaderProgram {\r\n const index = this.getShaderIndex(flags);\r\n let program: ShaderProgram | undefined;\r\n\r\n if (flags.hasClip) {\r\n const entry = this._clippingPrograms[index];\r\n assert(undefined !== entry);\r\n program = entry.getProgram(flags.numClipPlanes);\r\n }\r\n\r\n if (program === undefined)\r\n program = this._basicPrograms[index];\r\n\r\n return program;\r\n }\r\n\r\n // NB: Will ignore clipping shaders.\r\n public getShaderByIndex(index: number): ShaderProgram {\r\n return this._basicPrograms[index];\r\n }\r\n\r\n // NB: Will ignore clipping shaders.\r\n public getShaderCount(): number {\r\n return this._basicPrograms.length;\r\n }\r\n\r\n /** For tests. */\r\n public forEachProgram(func: (program: ShaderProgram) => void): void {\r\n for (const basic of this._basicPrograms)\r\n func(basic);\r\n\r\n for (const clip of this._clippingPrograms) {\r\n const prog = clip.getProgram(1);\r\n assert(undefined !== prog);\r\n func(prog);\r\n }\r\n }\r\n}\r\n\r\nclass SurfaceTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kAnimated = 4;\r\n private static readonly _kShadowable = 8;\r\n private static readonly _kThematic = 16;\r\n private static readonly _kFeature = 24;\r\n private static readonly _kEdgeTestNeeded = SurfaceTechnique._kFeature * 3; // only when hasFeatures\r\n private static readonly _kHilite = SurfaceTechnique._kEdgeTestNeeded + SurfaceTechnique._kFeature * 2;\r\n // Classifiers are never animated or instanced. They do support shadows, thematic display, and translucency.\r\n // There are 3 base variations - 1 per feature mode - each with translucent/shadowed/thematic variants; plus 1 for hilite.\r\n private static readonly _kClassified = SurfaceTechnique._kHilite + numHiliteVariants;\r\n\r\n public constructor(gl: WebGLContext) {\r\n // 3 base classified variations - 1 per feature mode.\r\n // Plus thematic variant of each and shadowable variant of each = 9\r\n // Plus translucent variant of each of those = 18\r\n // Plus 1 hilite shader = 19\r\n super(SurfaceTechnique._kClassified + 19);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Animated\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Animated\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Shadowable-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Shadowable-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Shadowable-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Shadowable-Pick\"),\r\n ];\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, createSurfaceHiliter);\r\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n for (let edgeTestNeeded = IsEdgeTestNeeded.No; edgeTestNeeded <= IsEdgeTestNeeded.Yes; edgeTestNeeded++) {\r\n for (const featureMode of featureModes) {\r\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\r\n if (FeatureMode.None !== featureMode || IsEdgeTestNeeded.No === edgeTestNeeded) {\r\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\r\n continue; // currently this combination is disallowed.\r\n\r\n flags.reset(featureMode, instanced, shadowable, thematic);\r\n flags.isAnimated = iAnimate;\r\n flags.isEdgeTestNeeded = edgeTestNeeded;\r\n flags.isTranslucent = 1 === iTranslucent;\r\n\r\n const builder = createSurfaceBuilder(flags);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, createSurfaceHiliter);\r\n for (let translucent = 0; translucent < 2; translucent++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n for (const featureMode of featureModes) {\r\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\r\n continue; // currently this combination is disallowed.\r\n\r\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic);\r\n flags.isClassified = IsClassified.Yes;\r\n flags.isTranslucent = (0 !== translucent);\r\n\r\n const builder = createSurfaceBuilder(flags);\r\n if (flags.isTranslucent)\r\n addTranslucency(builder);\r\n\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"Surface\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n assert(!(flags.isThematic && flags.isShadowable));\r\n\r\n if (flags.isClassified) {\r\n assert(!flags.isAnimated);\r\n assert(!flags.isInstanced);\r\n assert(!flags.isEdgeTestNeeded);\r\n\r\n // First classified shader is for hilite\r\n if (flags.isHilite)\r\n return SurfaceTechnique._kClassified;\r\n\r\n // The rest are organized in 3 groups of 6 - one group per feature mode.\r\n // Each group contains opaque, translucent, opaque+thematic, translucent+thematic, opaque+shadowable, and translucent+shadowable variants.\r\n let baseIndex = SurfaceTechnique._kClassified + 1;\r\n if (flags.isTranslucent)\r\n baseIndex += 1;\r\n if (flags.isShadowable)\r\n baseIndex += 2;\r\n if (flags.isThematic)\r\n baseIndex += 4;\r\n\r\n const featureOffset = 6 * flags.featureMode;\r\n return baseIndex + featureOffset;\r\n } else if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return SurfaceTechnique._kHilite + flags.isInstanced;\r\n }\r\n\r\n assert(flags.hasFeatures || flags.isEdgeTestNeeded === IsEdgeTestNeeded.No);\r\n let index = flags.isTranslucent ? SurfaceTechnique._kTranslucent : SurfaceTechnique._kOpaque;\r\n index += SurfaceTechnique._kInstanced * flags.isInstanced;\r\n index += SurfaceTechnique._kAnimated * flags.isAnimated;\r\n index += SurfaceTechnique._kShadowable * flags.isShadowable;\r\n index += SurfaceTechnique._kThematic * flags.isThematic;\r\n\r\n if (flags.isEdgeTestNeeded)\r\n index += SurfaceTechnique._kEdgeTestNeeded + (flags.featureMode - 1) * SurfaceTechnique._kFeature;\r\n else\r\n index += SurfaceTechnique._kFeature * flags.featureMode;\r\n\r\n return index;\r\n }\r\n}\r\n\r\nclass PolylineTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kFeature = 4;\r\n private static readonly _kHilite = numFeatureVariants(PolylineTechnique._kFeature);\r\n\r\n public constructor(gl: WebGLContext) {\r\n super(PolylineTechnique._kHilite + numHiliteVariants);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\r\n ];\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, createPolylineHiliter);\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n const builder = createPolylineBuilder(instanced);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createPolylineBuilder(instanced);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"Polyline\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return PolylineTechnique._kHilite + flags.isInstanced;\r\n }\r\n\r\n let index = flags.isTranslucent ? PolylineTechnique._kTranslucent : PolylineTechnique._kOpaque;\r\n index += PolylineTechnique._kFeature * flags.featureMode;\r\n index += PolylineTechnique._kInstanced * flags.isInstanced;\r\n return index;\r\n }\r\n}\r\n\r\nclass EdgeTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kAnimated = 2;\r\n private static readonly _kInstanced = 4;\r\n private static readonly _kFeature = 8;\r\n private readonly _isSilhouette: boolean;\r\n\r\n public constructor(gl: WebGLContext, isSilhouette: boolean = false) {\r\n super(numFeatureVariants(EdgeTechnique._kFeature));\r\n this._isSilhouette = isSilhouette;\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n flags.isAnimated = iAnimate;\r\n const builder = createEdgeBuilder(isSilhouette, flags.isInstanced, flags.isAnimated);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createEdgeBuilder(isSilhouette, flags.isInstanced, flags.isAnimated);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n flags.isAnimated = iAnimate;\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return this._isSilhouette ? \"Silhouette\" : \"Edge\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n let index = flags.isTranslucent ? EdgeTechnique._kTranslucent : EdgeTechnique._kOpaque;\r\n index += EdgeTechnique._kFeature * flags.featureMode;\r\n if (flags.isAnimated)\r\n index += EdgeTechnique._kAnimated;\r\n if (flags.isInstanced)\r\n index += EdgeTechnique._kInstanced;\r\n\r\n return index;\r\n }\r\n}\r\n\r\nclass PointStringTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kFeature = 4;\r\n private static readonly _kHilite = numFeatureVariants(PointStringTechnique._kFeature);\r\n\r\n public constructor(gl: WebGLContext) {\r\n super((PointStringTechnique._kHilite + numHiliteVariants));\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, createPointStringHiliter);\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n const builder = createPointStringBuilder(instanced);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createPointStringBuilder(instanced);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Point);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Point);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"PointString\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return PointStringTechnique._kHilite + flags.isInstanced;\r\n }\r\n\r\n let index = flags.isTranslucent ? PointStringTechnique._kTranslucent : PointStringTechnique._kOpaque;\r\n index += PointStringTechnique._kFeature * flags.featureMode;\r\n index += PointStringTechnique._kInstanced * flags.isInstanced;\r\n return index;\r\n }\r\n}\r\n\r\nclass PointCloudTechnique extends VariedTechnique {\r\n private static readonly _kHilite = 8;\r\n\r\n public constructor(gl: WebGLContext) {\r\n super(PointCloudTechnique._kHilite + 2);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n ];\r\n\r\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\r\n this.addHiliteShader(gl, IsInstanced.No, iClassified, () => createPointCloudHiliter(iClassified));\r\n const flags = scratchTechniqueFlags;\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n const pointCloudFeatureModes = [FeatureMode.None, FeatureMode.Overrides];\r\n for (const featureMode of pointCloudFeatureModes) {\r\n flags.reset(featureMode, IsInstanced.No, IsShadowable.No, thematic);\r\n flags.isClassified = iClassified;\r\n const builder = createPointCloudBuilder(flags.isClassified, featureMode, thematic);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addUniformFeatureSymbology(builder, true);\r\n builder.vert.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asPointCloud!.overrideColorMix);\r\n });\r\n });\r\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, mixFeatureColor);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"PointCloud\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite)\r\n return PointCloudTechnique._kHilite + flags.isClassified;\r\n else {\r\n let ndx = 0;\r\n if (flags.isClassified)\r\n ndx++;\r\n if (flags.featureMode !== FeatureMode.None)\r\n ndx += 2;\r\n if (flags.isThematic)\r\n ndx += 4;\r\n return ndx;\r\n }\r\n }\r\n}\r\n\r\nclass RealityMeshTechnique extends VariedTechnique {\r\n private static readonly _numVariants = 50;\r\n\r\n public constructor(gl: WebGLRenderingContext) {\r\n super(RealityMeshTechnique._numVariants);\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n ];\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.No, createRealityMeshHiliter);\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, createClassifierRealityMeshHiliter);\r\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\r\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n const flags = scratchTechniqueFlags;\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic);\r\n flags.isClassified = iClassified;\r\n flags.isTranslucent = 1 === iTranslucent;\r\n const builder = createRealityMeshBuilder(flags);\r\n\r\n if (flags.isTranslucent) {\r\n addShaderFlags(builder);\r\n addTranslucency(builder);\r\n } else\r\n this.addFeatureId(builder, featureMode);\r\n\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"RealityMesh\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite)\r\n return flags.isClassified ? 1 : 0;\r\n let ndx = 2;\r\n if (flags.isClassified)\r\n ndx++;\r\n if (flags.isShadowable)\r\n ndx += 2;\r\n if (flags.isTranslucent)\r\n ndx += 4;\r\n ndx += 8 * flags.featureMode;\r\n if (flags.isThematic)\r\n ndx += 24;\r\n return ndx;\r\n }\r\n}\r\n\r\ninterface PrioritizedShaderVariation {\r\n featureMode: FeatureMode;\r\n isInstanced: IsInstanced;\r\n isShadowable: IsShadowable;\r\n isEdgeTestedNeeded: IsEdgeTestNeeded;\r\n isTranslucent: boolean;\r\n}\r\n\r\ninterface PrioritizedTechniqueOrShader {\r\n techniqueId: TechniqueId;\r\n specificShader?: PrioritizedShaderVariation; // if defined, only compile this specific shader variation for the technique; otherwise, compile all uncompiled shader variations for the technique\r\n}\r\n\r\nconst techniquesByPriority: PrioritizedTechniqueOrShader[] = [\r\n // Compile these specific shader variations first because they seem most likely to be used immediately upon opening a file.\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\r\n\r\n // Next, compile all shaders in specific techniques.\r\n // Do surfaces first because (1) they are the most commonly used and (2) they take longer to compile.\r\n { techniqueId: TechniqueId.Surface },\r\n { techniqueId: TechniqueId.Edge },\r\n { techniqueId: TechniqueId.SilhouetteEdge },\r\n { techniqueId: TechniqueId.Polyline },\r\n { techniqueId: TechniqueId.PointString },\r\n { techniqueId: TechniqueId.PointCloud },\r\n { techniqueId: TechniqueId.RealityMesh },\r\n\r\n // The following techniques take a trivial amount of time to compile - do them last\r\n { techniqueId: TechniqueId.OITClearTranslucent },\r\n { techniqueId: TechniqueId.CopyPickBuffers },\r\n { techniqueId: TechniqueId.CopyColor },\r\n { techniqueId: TechniqueId.CopyColorNoAlpha },\r\n { techniqueId: TechniqueId.ClearPickAndColor },\r\n { techniqueId: TechniqueId.CompositeTranslucent },\r\n { techniqueId: TechniqueId.CompositeHilite },\r\n { techniqueId: TechniqueId.CompositeHiliteAndTranslucent },\r\n { techniqueId: TechniqueId.CompositeOcclusion },\r\n { techniqueId: TechniqueId.CompositeTranslucentAndOcclusion },\r\n { techniqueId: TechniqueId.CompositeHiliteAndOcclusion },\r\n { techniqueId: TechniqueId.CompositeAll },\r\n { techniqueId: TechniqueId.VolClassColorUsingStencil },\r\n { techniqueId: TechniqueId.EVSMFromDepth },\r\n { techniqueId: TechniqueId.SkyBox },\r\n { techniqueId: TechniqueId.SkySphereGradient },\r\n { techniqueId: TechniqueId.SkySphereTexture },\r\n { techniqueId: TechniqueId.AmbientOcclusion },\r\n { techniqueId: TechniqueId.Blur },\r\n { techniqueId: TechniqueId.CombineTextures },\r\n { techniqueId: TechniqueId.VolClassCopyZ },\r\n { techniqueId: TechniqueId.VolClassSetBlend },\r\n { techniqueId: TechniqueId.VolClassBlend },\r\n { techniqueId: TechniqueId.Combine3Textures },\r\n { techniqueId: TechniqueId.PlanarGrid },\r\n];\r\nconst numTechniquesByPriority = techniquesByPriority.length;\r\n\r\n/** A collection of rendering techniques accessed by ID.\r\n * @internal\r\n */\r\nexport class Techniques implements WebGLDisposable {\r\n private readonly _list = new Array<Technique>(); // indexed by TechniqueId, which may exceed TechniqueId.NumBuiltIn for dynamic techniques.\r\n private readonly _dynamicTechniqueIds = new Array<string>(); // technique ID = (index in this array) + TechniqueId.NumBuiltIn\r\n private _techniqueByPriorityIndex = 0;\r\n private _shaderIndex = 0;\r\n\r\n public static create(gl: WebGLContext): Techniques {\r\n const techs = new Techniques();\r\n techs.initializeBuiltIns(gl);\r\n return techs;\r\n }\r\n\r\n public getTechnique(id: TechniqueId): Technique {\r\n assert(id < this._list.length, \"technique index out of bounds\");\r\n return this._list[id];\r\n }\r\n\r\n public get numTechniques(): number {\r\n return this._list.length;\r\n }\r\n\r\n public addDynamicTechnique(technique: Technique, name: string): TechniqueId {\r\n const id = this.getDynamicTechniqueId(name);\r\n if (undefined !== id)\r\n return id;\r\n\r\n this._dynamicTechniqueIds.push(name);\r\n this._list.push(technique);\r\n return TechniqueId.NumBuiltIn + this._dynamicTechniqueIds.length - 1;\r\n }\r\n\r\n public getDynamicTechniqueId(name: string): TechniqueId | undefined {\r\n const index = this._dynamicTechniqueIds.indexOf(name);\r\n return -1 !== index ? index + TechniqueId.NumBuiltIn + index : undefined;\r\n }\r\n\r\n /** Execute each command in the list */\r\n public execute(target: Target, commands: DrawCommands, renderPass: RenderPass) {\r\n assert(RenderPass.None !== renderPass, \"invalid render pass\");\r\n\r\n using(new ShaderProgramExecutor(target, renderPass), (executor: ShaderProgramExecutor) => {\r\n for (const command of commands)\r\n command.execute(executor);\r\n });\r\n System.instance.frameBufferStack.markTargetsDirty();\r\n }\r\n\r\n /** Execute the commands for a single given classification primitive (the first 3 commands should be a push, the primitive, then a pop) */\r\n public executeForIndexedClassifier(target: Target, cmdsByIndex: DrawCommands, renderPass: RenderPass) {\r\n // ###TODO: Disable shadows. Probably in the ClassifierTileTree's ViewFlagOverrides.\r\n this.execute(target, cmdsByIndex, renderPass);\r\n }\r\n\r\n /** Draw a single primitive. Usually used for special-purpose rendering techniques. */\r\n public draw(params: DrawParams): void {\r\n const tech = this.getTechnique(params.geometry.techniqueId);\r\n const program = tech.getShader(TechniqueFlags.defaults);\r\n using(new ShaderProgramExecutor(params.target, params.renderPass, program), (executor: ShaderProgramExecutor) => {\r\n assert(executor.isValid);\r\n if (executor.isValid) {\r\n executor.draw(params);\r\n }\r\n });\r\n System.instance.frameBufferStack.markTargetsDirty();\r\n }\r\n\r\n public get isDisposed(): boolean { return 0 === this._list.length; }\r\n\r\n public dispose(): void {\r\n for (const tech of this._list)\r\n dispose(tech);\r\n this._list.length = 0;\r\n }\r\n\r\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\r\n public compileShaders(): boolean {\r\n let allCompiled = true;\r\n\r\n for (const tech of this._list) {\r\n if (!tech.compileShaders()) {\r\n allCompiled = false;\r\n }\r\n }\r\n\r\n return allCompiled;\r\n }\r\n\r\n /** Compile shader of next highest priority. Called when possible during an idle situation before any viewports exist. */\r\n public idleCompileNextShader(): boolean {\r\n let compileStatus = CompileStatus.Success;\r\n let wasPreviouslyCompiled = false;\r\n\r\n do {\r\n if (this._techniqueByPriorityIndex >= numTechniquesByPriority)\r\n return false;\r\n\r\n let shader: ShaderProgram;\r\n let numShaders = 0;\r\n\r\n const pTech = techniquesByPriority[this._techniqueByPriorityIndex];\r\n const tech = this._list[pTech.techniqueId];\r\n\r\n if (pTech.specificShader !== undefined) { // if this entry consists of a specific shader, just compile that\r\n const flags = scratchTechniqueFlags;\r\n flags.reset(pTech.specificShader.featureMode, pTech.specificShader.isInstanced, pTech.specificShader.isShadowable, IsThematic.No);\r\n flags.isEdgeTestNeeded = pTech.specificShader.isEdgeTestedNeeded;\r\n flags.isTranslucent = pTech.specificShader.isTranslucent;\r\n shader = tech.getShader(flags);\r\n } else { // if this entry only contains a techniqueId, then compile all uncompiled shaders for that technique\r\n shader = tech.getShaderByIndex(this._shaderIndex);\r\n this._shaderIndex++;\r\n numShaders = tech.getShaderCount();\r\n }\r\n\r\n if (shader.isCompiled)\r\n wasPreviouslyCompiled = true;\r\n else {\r\n compileStatus = shader.compile();\r\n wasPreviouslyCompiled = false;\r\n }\r\n\r\n if (this._shaderIndex >= numShaders) {\r\n this._techniqueByPriorityIndex++;\r\n this._shaderIndex = 0;\r\n }\r\n } while (wasPreviouslyCompiled);\r\n\r\n return compileStatus === CompileStatus.Success;\r\n }\r\n\r\n /** For tests. */\r\n public forEachVariedProgram(func: (program: ShaderProgram) => void): void {\r\n for (const technique of this._list)\r\n if (technique instanceof VariedTechnique)\r\n technique.forEachProgram(func);\r\n }\r\n\r\n private constructor() { }\r\n\r\n private initializeBuiltIns(gl: WebGLContext): void {\r\n this._list[TechniqueId.OITClearTranslucent] = new SingularTechnique(createClearTranslucentProgram(gl));\r\n this._list[TechniqueId.ClearPickAndColor] = new SingularTechnique(createClearPickAndColorProgram(gl));\r\n this._list[TechniqueId.CopyColor] = new SingularTechnique(createCopyColorProgram(gl));\r\n this._list[TechniqueId.CopyColorNoAlpha] = new SingularTechnique(createCopyColorProgram(gl, false));\r\n this._list[TechniqueId.CopyPickBuffers] = new SingularTechnique(createCopyPickBuffersProgram(gl));\r\n this._list[TechniqueId.EVSMFromDepth] = new SingularTechnique(createEVSMProgram(gl));\r\n this._list[TechniqueId.SkyBox] = new SingularTechnique(createSkyBoxProgram(gl));\r\n this._list[TechniqueId.SkySphereGradient] = new SingularTechnique(createSkySphereProgram(gl, true));\r\n this._list[TechniqueId.SkySphereTexture] = new SingularTechnique(createSkySphereProgram(gl, false));\r\n this._list[TechniqueId.AmbientOcclusion] = new SingularTechnique(createAmbientOcclusionProgram(gl));\r\n this._list[TechniqueId.Blur] = new SingularTechnique(createBlurProgram(gl));\r\n this._list[TechniqueId.CombineTextures] = new SingularTechnique(createCombineTexturesProgram(gl));\r\n this._list[TechniqueId.Combine3Textures] = new SingularTechnique(createCombine3TexturesProgram(gl));\r\n this._list[TechniqueId.Surface] = new SurfaceTechnique(gl);\r\n this._list[TechniqueId.Edge] = new EdgeTechnique(gl, false);\r\n this._list[TechniqueId.SilhouetteEdge] = new EdgeTechnique(gl, true);\r\n this._list[TechniqueId.Polyline] = new PolylineTechnique(gl);\r\n this._list[TechniqueId.PointString] = new PointStringTechnique(gl);\r\n this._list[TechniqueId.PointCloud] = new PointCloudTechnique(gl);\r\n this._list[TechniqueId.RealityMesh] = new RealityMeshTechnique(gl);\r\n this._list[TechniqueId.PlanarGrid] = new SingularTechnique(createPlanarGridProgram(gl));\r\n if (System.instance.capabilities.supportsFragDepth)\r\n this._list[TechniqueId.VolClassCopyZ] = new SingularTechnique(createVolClassCopyZProgram(gl));\r\n else\r\n this._list[TechniqueId.VolClassCopyZ] = new SingularTechnique(createVolClassCopyZUsingPointsProgram(gl));\r\n this._list[TechniqueId.VolClassSetBlend] = new SingularTechnique(createVolClassSetBlendProgram(gl));\r\n this._list[TechniqueId.VolClassBlend] = new SingularTechnique(createVolClassBlendProgram(gl));\r\n this._list[TechniqueId.VolClassColorUsingStencil] = new SingularTechnique(createVolClassColorUsingStencilProgram(gl));\r\n\r\n for (let compositeFlags = 1; compositeFlags <= 7; compositeFlags++) {\r\n const techId = computeCompositeTechniqueId(compositeFlags);\r\n this._list[techId] = new SingularTechnique(createCompositeProgram(compositeFlags, gl));\r\n }\r\n\r\n assert(this._list.length === TechniqueId.NumBuiltIn, \"unexpected number of built-in techniques\");\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Technique.js","sourceRoot":"","sources":["../../../../src/render/webgl/Technique.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAmB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACL,0BAA0B,EAAE,sCAAsC,EAAE,0BAA0B,EAAE,qCAAqC,EACrI,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,0BAA0B,EAA2B,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClK,OAAO,EAAE,kCAAkC,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,uBAAuB,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,wBAAwB,EAAE,EAAE,kCAAkC,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAgC,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAC2F,cAAc,GAC/G,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAe,MAAM,eAAe,CAAC;AAczE;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAG5B,iDAAiD;IACjD,YAAmB,OAAsB,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAE/D,SAAS,CAAC,MAAsB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,gBAAgB,CAAC,MAAc,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9B,cAAc,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,oBAA0B,CAAC,CAAC,CAAC;IAE7F,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7D,OAAO;QACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,cAAsB,IAAI,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;AAClF,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC,+BAA+B;AAC5D,MAAM,YAAY,GAAG,+CAA2D,CAAC;AACjF,MAAM,qBAAqB,GAAG,IAAI,cAAc,EAAE,CAAC;AACnD,MAAM,kBAAkB,GAAG,IAAI,cAAc,EAAE,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAgB,eAAe;IAsDnC,YAAsB,WAAmB;QArDxB,mBAAc,GAAoB,EAAE,CAAC;QACrC,sBAAiB,GAAsB,EAAE,CAAC;QAE3D;;;WAGG;QACO,iBAAY,GAAqB,EAAE,CAAC;QAwBtC,gBAAW,GAAG,KAAK,CAAC;QAuB1B,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,WAAW,CAAC;IAC3C,CAAC;IA9CM,cAAc;QACnB,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;YACzC,IAAI,OAAO,CAAC,OAAO,EAAE,oBAA0B;gBAC7C,WAAW,GAAG,KAAK,CAAC;SACvB;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB;YAC1C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACpB,WAAW,GAAG,KAAK,CAAC;QAExB,OAAO,WAAW,CAAC;IACrB,CAAC;IAES,kBAAkB;QAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7B,yCAAyC;QACzC,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,EAAE,gBAAgB,gBAAgB,oBAAoB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/K,CAAC;IAGD,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEtD,OAAO;QACZ,IAAI,IAAI,CAAC,WAAW;YAClB,OAAO;QAET,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;YACzC,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;SAClB;QAED,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAClD,MAAM,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC;YACpC,aAAa,CAAC,OAAO,EAAE,CAAC;SACzB;QAED,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IASS,SAAS,CAAC,OAAuB,EAAE,KAAqB,EAAE,EAAgB;QAClF,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACvE,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACzD,WAAW,CAAC,OAAO,CAAC,CAAC;YAErB,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,6BAA6B;gBACvE,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACtG;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAEpC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAEO,UAAU,CAAC,OAAuB,EAAE,KAAa,EAAE,EAAgB;QACzE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;QAEjD,2EAA2E;QAC3E,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QAE9C,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IAES,eAAe,CAAC,EAAgB,EAAE,SAAsB,EAAE,UAAwB,EAAE,MAA4E;QACxK,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC9C,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAES,oBAAoB,CAAC,OAAuB,EAAE,KAAqB,EAAE,EAAgB;QAC7F,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAES,YAAY,CAAC,OAAuB,EAAE,IAAiB;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,iBAAqB,IAAI,EAAE;YAC7B,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAC1C;aAAM;YACL,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7B,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAC5B;IACH,CAAC;IAEO,cAAc,CAAC,KAAqB;QAC1C,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,YAAY,gBAAqB,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAC/I,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,SAAS,CAAC,KAAqB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAkC,CAAC;QAEvC,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;YAC5B,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SACjD;QAED,IAAI,OAAO,KAAK,SAAS;YACvB,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oCAAoC;IAC7B,gBAAgB,CAAC,KAAa;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,oCAAoC;IAC7B,cAAc;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,iBAAiB;IACV,cAAc,CAAC,IAAsC;QAC1D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc;YACrC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;SACZ;IACH,CAAC;CACF;AAED,MAAM,gBAAiB,SAAQ,eAAe;IAc5C,YAAmB,EAAgB;QACjC,qDAAqD;QACrD,mEAAmE;QACnE,iDAAiD;QACjD,4BAA4B;QAC5B,KAAK,CAAC,gBAAgB,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,QAAQ,CAAC;YACxC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC;YACjD,cAAc,CAAC,eAAe,CAAC,4BAA4B,CAAC;YAC5D,cAAc,CAAC,eAAe,CAAC,0BAA0B,CAAC;YAC1D,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAClD,cAAc,CAAC,eAAe,CAAC,2BAA2B,CAAC;YAC3D,cAAc,CAAC,eAAe,CAAC,sCAAsC,CAAC;YACtE,cAAc,CAAC,eAAe,CAAC,mCAAmC,CAAC;YACnE,cAAc,CAAC,eAAe,CAAC,6BAA6B,CAAC;YAC7D,cAAc,CAAC,eAAe,CAAC,mBAAmB,CAAC;YACnD,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC;YAC7C,cAAc,CAAC,eAAe,CAAC,sBAAsB,CAAC;YACtD,cAAc,CAAC,eAAe,CAAC,gCAAgC,CAAC;YAChE,cAAc,CAAC,eAAe,CAAC,2BAA2B,CAAC;YAC3D,cAAc,CAAC,eAAe,CAAC,iCAAiC,CAAC;YACjE,cAAc,CAAC,eAAe,CAAC,2CAA2C,CAAC;YAC3E,cAAc,CAAC,eAAe,CAAC,sCAAsC,CAAC;YACtE,cAAc,CAAC,eAAe,CAAC,uBAAuB,CAAC;YACvD,cAAc,CAAC,eAAe,CAAC,gCAAgC,CAAC;YAChE,cAAc,CAAC,eAAe,CAAC,0CAA0C,CAAC;YAC1E,cAAc,CAAC,eAAe,CAAC,qCAAqC,CAAC;YACrE,cAAc,CAAC,eAAe,CAAC,2CAA2C,CAAC;YAC3E,cAAc,CAAC,eAAe,CAAC,qDAAqD,CAAC;YACrF,cAAc,CAAC,eAAe,CAAC,gDAAgD,CAAC;YAChF,cAAc,CAAC,eAAe,CAAC,iCAAiC,CAAC;YACjE,cAAc,CAAC,eAAe,CAAC,4BAA4B,CAAC;YAC5D,cAAc,CAAC,eAAe,CAAC,kCAAkC,CAAC;YAClE,cAAc,CAAC,eAAe,CAAC,4CAA4C,CAAC;YAC5E,cAAc,CAAC,eAAe,CAAC,uCAAuC,CAAC;YACvE,cAAc,CAAC,eAAe,CAAC,uBAAuB,CAAC;YACvD,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAClD,cAAc,CAAC,eAAe,CAAC,wBAAwB,CAAC;YACxD,cAAc,CAAC,eAAe,CAAC,kCAAkC,CAAC;YAClE,cAAc,CAAC,eAAe,CAAC,6BAA6B,CAAC;SAC9D,CAAC;QAEF,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,cAAmB,oBAAoB,CAAC,CAAC;YAC3E,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;gBACzE,KAAK,IAAI,UAAU,aAAkB,EAAE,UAAU,eAAoB,EAAE,UAAU,EAAE,EAAE;oBACnF,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;wBACzE,KAAK,IAAI,cAAc,aAAsB,EAAE,cAAc,eAAwB,EAAE,cAAc,EAAE,EAAE;4BACvG,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;gCACtC,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE;oCAC5D,IAAI,iBAAqB,WAAW,IAAI,eAAwB,cAAc,EAAE;wCAC9E,IAAI,gBAAmB,QAAQ,IAAI,gBAAqB,UAAU;4CAChE,SAAS,CAAC,4CAA4C;wCAExD,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;wCAC1D,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;wCAC5B,KAAK,CAAC,gBAAgB,GAAG,cAAc,CAAC;wCACxC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,YAAY,CAAC;wCAEzC,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;wCAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;qCACpC;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF;QAED,IAAI,CAAC,eAAe,CAAC,EAAE,2BAAoC,oBAAoB,CAAC,CAAC;QACjF,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,EAAE,EAAE;YACxD,KAAK,IAAI,UAAU,aAAkB,EAAE,UAAU,eAAoB,EAAE,UAAU,EAAE,EAAE;gBACnF,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;oBACzE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;wBACtC,IAAI,gBAAmB,QAAQ,IAAI,gBAAqB,UAAU;4BAChE,SAAS,CAAC,4CAA4C;wBAExD,KAAK,CAAC,KAAK,CAAC,WAAW,cAAkB,UAAU,EAAE,QAAQ,CAAC,CAAC;wBAC/D,KAAK,CAAC,YAAY,cAAmB,CAAC;wBACtC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;wBAE1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;wBAC5C,IAAI,KAAK,CAAC,aAAa;4BACrB,eAAe,CAAC,OAAO,CAAC,CAAC;wBAE3B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;qBACpC;iBACF;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IAEhD,kBAAkB,CAAC,KAAqB;QAC7C,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,YAAY,EAAE;YACtB,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAEhC,wCAAwC;YACxC,IAAI,KAAK,CAAC,QAAQ;gBAChB,OAAO,gBAAgB,CAAC,YAAY,CAAC;YAEvC,wEAAwE;YACxE,0IAA0I;YAC1I,IAAI,SAAS,GAAG,gBAAgB,CAAC,YAAY,GAAG,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,aAAa;gBACrB,SAAS,IAAI,CAAC,CAAC;YACjB,IAAI,KAAK,CAAC,YAAY;gBACpB,SAAS,IAAI,CAAC,CAAC;YACjB,IAAI,KAAK,CAAC,UAAU;gBAClB,SAAS,IAAI,CAAC,CAAC;YAEjB,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;YAC5C,OAAO,SAAS,GAAG,aAAa,CAAC;SAClC;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;SACtD;QAED,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,eAAwB,CAAC,CAAC;QAC5E,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC7F,KAAK,IAAI,gBAAgB,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC1D,KAAK,IAAI,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACxD,KAAK,IAAI,gBAAgB,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAC5D,KAAK,IAAI,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAExD,IAAI,KAAK,CAAC,gBAAgB;YACxB,KAAK,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC;;YAElG,KAAK,IAAI,gBAAgB,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QAE1D,OAAO,KAAK,CAAC;IACf,CAAC;;AA5JuB,yBAAQ,GAAG,CAAC,CAAC;AACb,8BAAa,GAAG,CAAC,CAAC;AAClB,4BAAW,GAAG,CAAC,CAAC;AAChB,2BAAU,GAAG,CAAC,CAAC;AACf,6BAAY,GAAG,CAAC,CAAC;AACjB,2BAAU,GAAG,EAAE,CAAC;AAChB,0BAAS,GAAG,EAAE,CAAC;AACf,iCAAgB,GAAG,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,wBAAwB;AAC3E,yBAAQ,GAAG,gBAAgB,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC;AACtG,4GAA4G;AAC5G,0HAA0H;AAClG,6BAAY,GAAG,gBAAgB,CAAC,QAAQ,GAAG,iBAAiB,CAAC;AAoJvF,MAAM,iBAAkB,SAAQ,eAAe;IAO7C,YAAmB,EAAgB;QACjC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,mCAAmC,CAAC;SACpE,CAAC;QAEF,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,cAAmB,qBAAqB,CAAC,CAAC;YAC5E,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;gBACtC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBACjD,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEjC,uDAAuD;gBACvD,MAAM,YAAY,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBACtD,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,sBAA0B,WAAW,EAAE;oBACzC,mBAAmB,CAAC,YAAY,EAAE,WAAW,kBAAiC,CAAC;oBAC/E,mBAAmB,CAAC,OAAO,EAAE,WAAW,kBAAiC,CAAC;oBAC1E,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpD;qBAAM;oBACL,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACnD,mBAAmB,CAAC,OAAO,EAAE,WAAW,eAA+B,CAAC;iBACzE;gBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;aACpC;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC;IAEjD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;SACvD;QAED,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAC/F,KAAK,IAAI,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QACzD,KAAK,IAAI,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;;AAvDuB,0BAAQ,GAAG,CAAC,CAAC;AACb,+BAAa,GAAG,CAAC,CAAC;AAClB,6BAAW,GAAG,CAAC,CAAC;AAChB,2BAAS,GAAG,CAAC,CAAC;AACd,0BAAQ,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAsDrF,MAAM,aAAc,SAAQ,eAAe;IAQzC,YAAmB,EAAgB,EAAE,eAAwB,KAAK;QAChE,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;gBACzE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;oBACtC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;oBACpE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;oBAC5B,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;oBACrF,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAEjC,uDAAuD;oBACvD,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC1F,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,sBAA0B,WAAW,EAAE;wBACzC,mBAAmB,CAAC,YAAY,EAAE,WAAW,kBAAiC,CAAC;wBAC/E,mBAAmB,CAAC,OAAO,EAAE,WAAW,kBAAiC,CAAC;wBAC1E,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;qBACpD;yBAAM;wBACL,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;wBACnD,mBAAmB,CAAC,OAAO,EAAE,WAAW,eAA+B,CAAC;qBACzE;oBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBACxC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;oBACpE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;oBAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpC;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjF,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC;QACvF,KAAK,IAAI,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QACrD,IAAI,KAAK,CAAC,UAAU;YAClB,KAAK,IAAI,aAAa,CAAC,UAAU,CAAC;QACpC,IAAI,KAAK,CAAC,WAAW;YACnB,KAAK,IAAI,aAAa,CAAC,WAAW,CAAC;QAErC,OAAO,KAAK,CAAC;IACf,CAAC;;AAtDuB,sBAAQ,GAAG,CAAC,CAAC;AACb,2BAAa,GAAG,CAAC,CAAC;AAClB,wBAAU,GAAG,CAAC,CAAC;AACf,yBAAW,GAAG,CAAC,CAAC;AAChB,uBAAS,GAAG,CAAC,CAAC;AAqDxC,MAAM,oBAAqB,SAAQ,eAAe;IAOhD,YAAmB,EAAgB;QACjC,KAAK,CAAC,CAAC,oBAAoB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC;QAE3D,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,KAAK,IAAI,SAAS,aAAiB,EAAE,SAAS,eAAmB,EAAE,SAAS,EAAE,EAAE;YAC9E,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,cAAmB,wBAAwB,CAAC,CAAC;YAC/E,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;gBACtC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,MAAM,OAAO,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;gBACpD,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEjC,uDAAuD;gBACvD,MAAM,YAAY,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;gBACzD,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,sBAA0B,WAAW,EAAE;oBACzC,mBAAmB,CAAC,YAAY,EAAE,WAAW,iBAAgC,CAAC;oBAC9E,mBAAmB,CAAC,OAAO,EAAE,WAAW,iBAAgC,CAAC;oBACzE,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpD;qBAAM;oBACL,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACnD,mBAAmB,CAAC,OAAO,EAAE,WAAW,eAA+B,CAAC;iBACzE;gBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,yBAAiC,CAAC;gBACpE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;aACpC;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,aAAa,CAAC,CAAC,CAAC;IAEpD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,oBAAoB,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;SAC1D;QAED,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QACrG,KAAK,IAAI,oBAAoB,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QAC5D,KAAK,IAAI,oBAAoB,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;;AAlDuB,6BAAQ,GAAG,CAAC,CAAC;AACb,kCAAa,GAAG,CAAC,CAAC;AAClB,gCAAW,GAAG,CAAC,CAAC;AAChB,8BAAS,GAAG,CAAC,CAAC;AACd,6BAAQ,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAiDxF,MAAM,mBAAoB,SAAQ,eAAe;IAG/C,YAAmB,EAAgB;QACjC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAExC,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,0BAA0B,CAAC;SAC3D,CAAC;QAEF,KAAK,IAAI,WAAW,aAAkB,EAAE,WAAW,eAAoB,EAAE,WAAW,EAAE,EAAE;YACtF,IAAI,CAAC,eAAe,CAAC,EAAE,cAAkB,WAAW,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;YAClG,MAAM,KAAK,GAAG,qBAAqB,CAAC;YACpC,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;gBACzE,MAAM,sBAAsB,GAAG,iCAAyC,CAAC;gBACzE,KAAK,MAAM,WAAW,IAAI,sBAAsB,EAAE;oBAChD,KAAK,CAAC,KAAK,CAAC,WAAW,0BAAmC,QAAQ,CAAC,CAAC;oBACpE,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC;oBACjC,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACnF,IAAI,sBAA0B,WAAW,EAAE;wBACzC,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBAC1C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,iBAAsB,CAAC,IAAI,EAAE,EAAE;4BACzE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gCAC/D,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAa,CAAC,gBAAgB,CAAC,CAAC;4BACvE,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBACH,OAAO,CAAC,IAAI,CAAC,GAAG,4BAA0C,eAAe,CAAC,CAAC;qBAC5E;oBAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBACpC;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC;IAEnD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ;YAChB,OAAO,mBAAmB,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;aACtD;YACH,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,KAAK,CAAC,YAAY;gBACpB,GAAG,EAAE,CAAC;YACR,IAAI,KAAK,CAAC,WAAW,iBAAqB;gBACxC,GAAG,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,CAAC,UAAU;gBAClB,GAAG,IAAI,CAAC,CAAC;YACX,OAAO,GAAG,CAAC;SACZ;IACH,CAAC;;AArDuB,4BAAQ,GAAG,CAAC,CAAC;AAwDvC,MAAM,oBAAqB,SAAQ,eAAe;IAGhD,YAAmB,EAAyB;QAC1C,KAAK,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,CAAC,eAAe,CAAC,yBAAyB,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC,0BAA0B,CAAC;SAC3D,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,EAAE,0BAAmC,wBAAwB,CAAC,CAAC;QACpF,IAAI,CAAC,eAAe,CAAC,EAAE,2BAAoC,kCAAkC,CAAC,CAAC;QAC/F,KAAK,IAAI,WAAW,aAAkB,EAAE,WAAW,eAAoB,EAAE,WAAW,EAAE,EAAE;YACtF,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE;gBAC5D,KAAK,IAAI,UAAU,aAAkB,EAAE,UAAU,eAAoB,EAAE,UAAU,EAAE,EAAE;oBACnF,KAAK,IAAI,QAAQ,aAAgB,EAAE,QAAQ,eAAkB,EAAE,QAAQ,EAAE,EAAE;wBACzE,MAAM,KAAK,GAAG,qBAAqB,CAAC;wBACpC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;4BACtC,KAAK,CAAC,KAAK,CAAC,WAAW,cAAkB,UAAU,EAAE,QAAQ,CAAC,CAAC;4BAC/D,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC;4BACjC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,YAAY,CAAC;4BACzC,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;4BAEhD,IAAI,KAAK,CAAC,aAAa,EAAE;gCACvB,cAAc,CAAC,OAAO,CAAC,CAAC;gCACxB,eAAe,CAAC,OAAO,CAAC,CAAC;6BAC1B;;gCACC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;4BAE1C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;yBACpC;qBACF;iBACF;aACF;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAc,iBAAiB,KAAK,OAAO,aAAa,CAAC,CAAC,CAAC;IAEpD,kBAAkB,CAAC,KAAqB;QAC7C,IAAI,KAAK,CAAC,QAAQ;YAChB,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,CAAC,YAAY;YACpB,GAAG,EAAE,CAAC;QACR,IAAI,KAAK,CAAC,YAAY;YACpB,GAAG,IAAI,CAAC,CAAC;QACX,IAAI,KAAK,CAAC,aAAa;YACrB,GAAG,IAAI,CAAC,CAAC;QACX,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;QAC7B,IAAI,KAAK,CAAC,UAAU;YAClB,GAAG,IAAI,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC;IACb,CAAC;;AArDuB,iCAAY,GAAG,EAAE,CAAC;AAqE5C,MAAM,oBAAoB,GAAmC;IAC3D,2HAA2H;IAC3H,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IAClN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IAClN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IACnN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IACvN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;IACxN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IACjN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IACjN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,cAAkB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IAClN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,YAAqB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IACtN,EAAE,WAAW,iBAAqB,EAAE,cAAc,EAAE,EAAE,WAAW,mBAAuB,EAAE,WAAW,YAAgB,EAAE,YAAY,YAAiB,EAAE,kBAAkB,aAAsB,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IAEvN,oDAAoD;IACpD,qGAAqG;IACrG,EAAE,WAAW,iBAAqB,EAAE;IACpC,EAAE,WAAW,cAAkB,EAAE;IACjC,EAAE,WAAW,wBAA4B,EAAE;IAC3C,EAAE,WAAW,kBAAsB,EAAE;IACrC,EAAE,WAAW,qBAAyB,EAAE;IACxC,EAAE,WAAW,oBAAwB,EAAE;IACvC,EAAE,WAAW,qBAAyB,EAAE;IAExC,mFAAmF;IACnF,EAAE,WAAW,8BAAiC,EAAE;IAChD,EAAE,WAAW,0BAA6B,EAAE;IAC5C,EAAE,WAAW,oBAAuB,EAAE;IACtC,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,4BAA+B,EAAE;IAC9C,EAAE,WAAW,8BAAkC,EAAE;IACjD,EAAE,WAAW,yBAA6B,EAAE;IAC5C,EAAE,WAAW,wCAA2C,EAAE;IAC1D,EAAE,WAAW,6BAAgC,EAAE;IAC/C,EAAE,WAAW,2CAA8C,EAAE;IAC7D,EAAE,WAAW,sCAAyC,EAAE;IACxD,EAAE,WAAW,uBAA0B,EAAE;IACzC,EAAE,WAAW,oCAAuC,EAAE;IACtD,EAAE,WAAW,wBAA2B,EAAE;IAC1C,EAAE,WAAW,iBAAoB,EAAE;IACnC,EAAE,WAAW,4BAA+B,EAAE;IAC9C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,eAAkB,EAAE;IACjC,EAAE,WAAW,0BAA6B,EAAE;IAC5C,EAAE,WAAW,wBAA2B,EAAE;IAC1C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,wBAA2B,EAAE;IAC1C,EAAE,WAAW,2BAA8B,EAAE;IAC7C,EAAE,WAAW,oBAAwB,EAAE;CACxC,CAAC;AACF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,UAAU;IAyIrB;QAxIiB,UAAK,GAAG,IAAI,KAAK,EAAa,CAAC,CAAC,0FAA0F;QAC1H,yBAAoB,GAAG,IAAI,KAAK,EAAU,CAAC,CAAC,gEAAgE;QACrH,8BAAyB,GAAG,CAAC,CAAC;QAC9B,iBAAY,GAAG,CAAC,CAAC;IAqID,CAAC;IAnIlB,MAAM,CAAC,MAAM,CAAC,EAAgB;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,YAAY,CAAC,EAAe;QACjC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAEM,mBAAmB,CAAC,SAAoB,EAAE,IAAY;QAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO,EAAE,CAAC;QAEZ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,sBAAyB,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;IACvE,CAAC;IAEM,qBAAqB,CAAC,IAAY;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,sBAAyB,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAED,uCAAuC;IAChC,OAAO,CAAC,MAAc,EAAE,QAAsB,EAAE,UAAsB;QAC3E,MAAM,CAAC,mBAAoB,UAAU,EAAE,qBAAqB,CAAC,CAAC;QAE9D,KAAK,CAAC,IAAI,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,QAA+B,EAAE,EAAE;YACvF,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAC5B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC;IAED,0IAA0I;IACnI,2BAA2B,CAAC,MAAc,EAAE,WAAyB,EAAE,UAAsB;QAClG,oFAAoF;QACpF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,sFAAsF;IAC/E,IAAI,CAAC,MAAkB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,QAA+B,EAAE,EAAE;YAC9G,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7D,OAAO;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,qGAAqG;IAC9F,cAAc;QACnB,IAAI,WAAW,GAAG,IAAI,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;gBAC1B,WAAW,GAAG,KAAK,CAAC;aACrB;SACF;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,yHAAyH;IAClH,qBAAqB;QAC1B,IAAI,aAAa,kBAAwB,CAAC;QAC1C,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAElC,GAAG;YACD,IAAI,IAAI,CAAC,yBAAyB,IAAI,uBAAuB;gBAC3D,OAAO,KAAK,CAAC;YAEf,IAAI,MAAqB,CAAC;YAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE3C,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,EAAE,iEAAiE;gBACzG,MAAM,KAAK,GAAG,qBAAqB,CAAC;gBACpC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY,aAAgB,CAAC;gBAClI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;gBACjE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;gBACzD,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aAChC;iBAAM,EAAE,oGAAoG;gBAC3G,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;aACpC;YAED,IAAI,MAAM,CAAC,UAAU;gBACnB,qBAAqB,GAAG,IAAI,CAAC;iBAC1B;gBACH,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,qBAAqB,GAAG,KAAK,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE;gBACnC,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;aACvB;SACF,QAAQ,qBAAqB,EAAE;QAEhC,OAAO,aAAa,oBAA0B,CAAC;IACjD,CAAC;IAED,iBAAiB;IACV,oBAAoB,CAAC,IAAsC;QAChE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK;YAChC,IAAI,SAAS,YAAY,eAAe;gBACtC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAIO,kBAAkB,CAAC,EAAgB;QACzC,IAAI,CAAC,KAAK,8BAAiC,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,KAAK,4BAA+B,GAAG,IAAI,iBAAiB,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,KAAK,oBAAuB,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,0BAA6B,GAAG,IAAI,iBAAiB,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,KAAK,iBAAoB,GAAG,IAAI,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,4BAA+B,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,eAAkB,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,0BAA6B,GAAG,IAAI,iBAAiB,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,iBAAqB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,cAAkB,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,wBAA4B,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,kBAAsB,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,qBAAyB,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,oBAAwB,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,qBAAyB,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,oBAAwB,GAAG,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;QACxF,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB;YAChD,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;;YAE9F,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3G,IAAI,CAAC,KAAK,2BAA8B,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,wBAA2B,GAAG,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK,oCAAuC,GAAG,IAAI,iBAAiB,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtH,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,IAAI,CAAC,EAAE,cAAc,EAAE,EAAE;YAClE,MAAM,MAAM,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;SACxF;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,wBAA2B,EAAE,0CAA0C,CAAC,CAAC;IACnG,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, using } from \"@itwin/core-bentley\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { ClippingProgram, createClippingProgram } from \"./ClippingProgram\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands, DrawParams } from \"./DrawCommand\";\r\nimport { createAmbientOcclusionProgram } from \"./glsl/AmbientOcclusion\";\r\nimport { createBlurProgram } from \"./glsl/Blur\";\r\nimport { createClearPickAndColorProgram } from \"./glsl/ClearPickAndColor\";\r\nimport { createClearTranslucentProgram } from \"./glsl/ClearTranslucent\";\r\nimport { createCombine3TexturesProgram } from \"./glsl/Combine3Textures\";\r\nimport { createCombineTexturesProgram } from \"./glsl/CombineTextures\";\r\nimport { addEyeSpace, addFrustum, addShaderFlags } from \"./glsl/Common\";\r\nimport { createCompositeProgram } from \"./glsl/Composite\";\r\nimport { createCopyColorProgram } from \"./glsl/CopyColor\";\r\nimport { createCopyPickBuffersProgram } from \"./glsl/CopyPickBuffers\";\r\nimport {\r\n createVolClassBlendProgram, createVolClassColorUsingStencilProgram, createVolClassCopyZProgram, createVolClassCopyZUsingPointsProgram,\r\n createVolClassSetBlendProgram,\r\n} from \"./glsl/CopyStencil\";\r\nimport { createEdgeBuilder } from \"./glsl/Edge\";\r\nimport { createEVSMProgram } from \"./glsl/EVSMFromDepth\";\r\nimport { addFeatureId, addFeatureSymbology, addRenderOrder, addUniformFeatureSymbology, FeatureSymbologyOptions, mixFeatureColor } from \"./glsl/FeatureSymbology\";\r\nimport { addFragColorWithPreMultipliedAlpha, addPickBufferOutputs } from \"./glsl/Fragment\";\r\nimport { addLogDepth } from \"./glsl/LogarithmicDepthBuffer\";\r\nimport { addUnlitMonochrome } from \"./glsl/Monochrome\";\r\nimport createPlanarGridProgram from \"./glsl/PlanarGrid\";\r\nimport { createPointCloudBuilder, createPointCloudHiliter } from \"./glsl/PointCloud\";\r\nimport { createPointStringBuilder, createPointStringHiliter } from \"./glsl/PointString\";\r\nimport { createPolylineBuilder, createPolylineHiliter } from \"./glsl/Polyline\";\r\nimport createRealityMeshBuilder, { createClassifierRealityMeshHiliter, createRealityMeshHiliter } from \"./glsl/RealityMesh\";\r\nimport { createSkyBoxProgram } from \"./glsl/SkyBox\";\r\nimport { createSkySphereProgram } from \"./glsl/SkySphere\";\r\nimport { createSurfaceBuilder, createSurfaceHiliter } from \"./glsl/Surface\";\r\nimport { addTranslucency } from \"./glsl/Translucency\";\r\nimport { addModelViewMatrix } from \"./glsl/Vertex\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { ProgramBuilder, VariableType, VertexShaderComponent } from \"./ShaderBuilder\";\r\nimport { CompileStatus, ShaderProgram, ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport {\r\n FeatureMode, IsAnimated, IsClassified, IsEdgeTestNeeded, IsInstanced, IsShadowable, IsThematic, TechniqueFlags,\r\n} from \"./TechniqueFlags\";\r\nimport { computeCompositeTechniqueId, TechniqueId } from \"./TechniqueId\";\r\n\r\n/** Defines a rendering technique implemented using one or more shader programs.\r\n * @internal\r\n */\r\nexport interface Technique extends WebGLDisposable {\r\n getShader(flags: TechniqueFlags): ShaderProgram;\r\n getShaderByIndex(index: number): ShaderProgram;\r\n getShaderCount(): number;\r\n\r\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\r\n compileShaders(): boolean;\r\n}\r\n\r\n/** A rendering technique implemented using a single shader program, typically for some specialized purpose.\r\n * @internal\r\n */\r\nexport class SingularTechnique implements Technique {\r\n public readonly program: ShaderProgram;\r\n\r\n // Note: Technique assumes ownership of a program\r\n public constructor(program: ShaderProgram) { this.program = program; }\r\n\r\n public getShader(_flags: TechniqueFlags) { return this.program; }\r\n public getShaderByIndex(_index: number) { return this.program; }\r\n public getShaderCount() { return 1; }\r\n public compileShaders(): boolean { return this.program.compile() === CompileStatus.Success; }\r\n\r\n public get isDisposed(): boolean { return this.program.isDisposed; }\r\n\r\n public dispose(): void {\r\n dispose(this.program);\r\n }\r\n}\r\n\r\nfunction numFeatureVariants(numBaseShaders: number) { return numBaseShaders * 3; }\r\nconst numHiliteVariants = 2; // instanced and non-instanced.\r\nconst featureModes = [FeatureMode.None, FeatureMode.Pick, FeatureMode.Overrides];\r\nconst scratchTechniqueFlags = new TechniqueFlags();\r\nconst scratchHiliteFlags = new TechniqueFlags();\r\n\r\n/** A rendering technique implemented using multiple shader programs, selected based on TechniqueFlags.\r\n * @internal\r\n */\r\nexport abstract class VariedTechnique implements Technique {\r\n private readonly _basicPrograms: ShaderProgram[] = [];\r\n private readonly _clippingPrograms: ClippingProgram[] = [];\r\n\r\n /** TechniqueFlags identifying shader programs for which the fragment shader writes depth but does not contain any discards.\r\n * Buggy Intel HD 620/630 drivers incorrectly apply early-Z optimization in this case; we must insert a never-executed\r\n * conditional discard to prevent that.\r\n */\r\n protected _earlyZFlags: TechniqueFlags[] = [];\r\n\r\n public compileShaders(): boolean {\r\n let allCompiled = true;\r\n for (const program of this._basicPrograms) {\r\n if (program.compile() !== CompileStatus.Success)\r\n allCompiled = false;\r\n }\r\n\r\n for (const clipper of this._clippingPrograms)\r\n if (!clipper.compile())\r\n allCompiled = false;\r\n\r\n return allCompiled;\r\n }\r\n\r\n protected finishConstruction(): void {\r\n this._earlyZFlags.length = 0;\r\n\r\n // Confirm no empty entries in our array.\r\n let emptyShaderIndex = -1;\r\n assert(-1 === (emptyShaderIndex = this._basicPrograms.findIndex((prog) => undefined === prog)), `Shader index ${emptyShaderIndex} is undefined in ${this.constructor.name}`);\r\n }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n\r\n public dispose(): void {\r\n if (this._isDisposed)\r\n return;\r\n\r\n for (const program of this._basicPrograms) {\r\n assert(undefined !== program);\r\n dispose(program);\r\n }\r\n\r\n this._basicPrograms.length = 0;\r\n for (const clipShaderObj of this._clippingPrograms) {\r\n assert(undefined !== clipShaderObj);\r\n clipShaderObj.dispose();\r\n }\r\n\r\n this._clippingPrograms.length = 0;\r\n this._isDisposed = true;\r\n }\r\n\r\n protected constructor(numPrograms: number) {\r\n this._basicPrograms.length = numPrograms;\r\n }\r\n\r\n protected abstract computeShaderIndex(flags: TechniqueFlags): number;\r\n protected abstract get _debugDescription(): string;\r\n\r\n protected addShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGLContext): void {\r\n const descr = `${this._debugDescription}: ${flags.buildDescription()}`;\r\n builder.setDebugDescription(descr);\r\n\r\n if (System.instance.supportsLogZBuffer && !flags.isHilite) {\r\n addLogDepth(builder);\r\n\r\n assert(!builder.frag.requiresEarlyZWorkaround);\r\n if (System.instance.capabilities.driverBugs.fragDepthDoesNotDisableEarlyZ)\r\n builder.frag.requiresEarlyZWorkaround = -1 !== this._earlyZFlags.findIndex((x) => x.equals(flags));\r\n }\r\n\r\n const index = this.getShaderIndex(flags);\r\n this.addProgram(builder, index, gl);\r\n\r\n assert(!builder.frag.requiresEarlyZWorkaround);\r\n }\r\n\r\n private addProgram(builder: ProgramBuilder, index: number, gl: WebGLContext): void {\r\n assert(this._basicPrograms[index] === undefined);\r\n this._basicPrograms[index] = builder.buildProgram(gl);\r\n assert(this._basicPrograms[index] !== undefined);\r\n\r\n // Clipping programs always include a discard, so never require workaround.\r\n builder.frag.requiresEarlyZWorkaround = false;\r\n\r\n assert(this._clippingPrograms[index] === undefined);\r\n this._clippingPrograms[index] = createClippingProgram(builder);\r\n assert(this._clippingPrograms[index] !== undefined);\r\n }\r\n\r\n protected addHiliteShader(gl: WebGLContext, instanced: IsInstanced, classified: IsClassified, create: (instanced: IsInstanced, classified: IsClassified) => ProgramBuilder): void {\r\n const builder = create(instanced, classified);\r\n scratchHiliteFlags.initForHilite(0, instanced, classified);\r\n this.addShader(builder, scratchHiliteFlags, gl);\r\n }\r\n\r\n protected addTranslucentShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGLContext): void {\r\n flags.isTranslucent = true;\r\n addTranslucency(builder);\r\n this.addShader(builder, flags, gl);\r\n }\r\n\r\n protected addFeatureId(builder: ProgramBuilder, feat: FeatureMode) {\r\n const frag = builder.frag;\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(frag);\r\n } else {\r\n const vert = builder.vert;\r\n addFrustum(builder);\r\n addEyeSpace(builder);\r\n addModelViewMatrix(vert);\r\n addRenderOrder(frag);\r\n addFeatureId(builder, false);\r\n addPickBufferOutputs(frag);\r\n }\r\n }\r\n\r\n private getShaderIndex(flags: TechniqueFlags) {\r\n assert(!flags.isHilite || (!flags.isTranslucent && (flags.isClassified === IsClassified.Yes || flags.hasFeatures)), \"invalid technique flags\");\r\n const index = this.computeShaderIndex(flags);\r\n assert(index < this._basicPrograms.length, \"shader index out of bounds\");\r\n return index;\r\n }\r\n\r\n public getShader(flags: TechniqueFlags): ShaderProgram {\r\n const index = this.getShaderIndex(flags);\r\n let program: ShaderProgram | undefined;\r\n\r\n if (flags.hasClip) {\r\n const entry = this._clippingPrograms[index];\r\n assert(undefined !== entry);\r\n program = entry.getProgram(flags.numClipPlanes);\r\n }\r\n\r\n if (program === undefined)\r\n program = this._basicPrograms[index];\r\n\r\n return program;\r\n }\r\n\r\n // NB: Will ignore clipping shaders.\r\n public getShaderByIndex(index: number): ShaderProgram {\r\n return this._basicPrograms[index];\r\n }\r\n\r\n // NB: Will ignore clipping shaders.\r\n public getShaderCount(): number {\r\n return this._basicPrograms.length;\r\n }\r\n\r\n /** For tests. */\r\n public forEachProgram(func: (program: ShaderProgram) => void): void {\r\n for (const basic of this._basicPrograms)\r\n func(basic);\r\n\r\n for (const clip of this._clippingPrograms) {\r\n const prog = clip.getProgram(1);\r\n assert(undefined !== prog);\r\n func(prog);\r\n }\r\n }\r\n}\r\n\r\nclass SurfaceTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kAnimated = 4;\r\n private static readonly _kShadowable = 8;\r\n private static readonly _kThematic = 16;\r\n private static readonly _kFeature = 24;\r\n private static readonly _kEdgeTestNeeded = SurfaceTechnique._kFeature * 3; // only when hasFeatures\r\n private static readonly _kHilite = SurfaceTechnique._kEdgeTestNeeded + SurfaceTechnique._kFeature * 2;\r\n // Classifiers are never animated or instanced. They do support shadows, thematic display, and translucency.\r\n // There are 3 base variations - 1 per feature mode - each with translucent/shadowed/thematic variants; plus 1 for hilite.\r\n private static readonly _kClassified = SurfaceTechnique._kHilite + numHiliteVariants;\r\n\r\n public constructor(gl: WebGLContext) {\r\n // 3 base classified variations - 1 per feature mode.\r\n // Plus thematic variant of each and shadowable variant of each = 9\r\n // Plus translucent variant of each of those = 18\r\n // Plus 1 hilite shader = 19\r\n super(SurfaceTechnique._kClassified + 19);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Animated\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Animated\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Animated-Shadowable-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Animated-Shadowable-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Instanced-Shadowable-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Pick\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Shadowable\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Shadowable-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Translucent-Shadowable-Pick\"),\r\n ];\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, createSurfaceHiliter);\r\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n for (let edgeTestNeeded = IsEdgeTestNeeded.No; edgeTestNeeded <= IsEdgeTestNeeded.Yes; edgeTestNeeded++) {\r\n for (const featureMode of featureModes) {\r\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\r\n if (FeatureMode.None !== featureMode || IsEdgeTestNeeded.No === edgeTestNeeded) {\r\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\r\n continue; // currently this combination is disallowed.\r\n\r\n flags.reset(featureMode, instanced, shadowable, thematic);\r\n flags.isAnimated = iAnimate;\r\n flags.isEdgeTestNeeded = edgeTestNeeded;\r\n flags.isTranslucent = 1 === iTranslucent;\r\n\r\n const builder = createSurfaceBuilder(flags);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, createSurfaceHiliter);\r\n for (let translucent = 0; translucent < 2; translucent++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n for (const featureMode of featureModes) {\r\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\r\n continue; // currently this combination is disallowed.\r\n\r\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic);\r\n flags.isClassified = IsClassified.Yes;\r\n flags.isTranslucent = (0 !== translucent);\r\n\r\n const builder = createSurfaceBuilder(flags);\r\n if (flags.isTranslucent)\r\n addTranslucency(builder);\r\n\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"Surface\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n assert(!(flags.isThematic && flags.isShadowable));\r\n\r\n if (flags.isClassified) {\r\n assert(!flags.isAnimated);\r\n assert(!flags.isInstanced);\r\n assert(!flags.isEdgeTestNeeded);\r\n\r\n // First classified shader is for hilite\r\n if (flags.isHilite)\r\n return SurfaceTechnique._kClassified;\r\n\r\n // The rest are organized in 3 groups of 6 - one group per feature mode.\r\n // Each group contains opaque, translucent, opaque+thematic, translucent+thematic, opaque+shadowable, and translucent+shadowable variants.\r\n let baseIndex = SurfaceTechnique._kClassified + 1;\r\n if (flags.isTranslucent)\r\n baseIndex += 1;\r\n if (flags.isShadowable)\r\n baseIndex += 2;\r\n if (flags.isThematic)\r\n baseIndex += 4;\r\n\r\n const featureOffset = 6 * flags.featureMode;\r\n return baseIndex + featureOffset;\r\n } else if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return SurfaceTechnique._kHilite + flags.isInstanced;\r\n }\r\n\r\n assert(flags.hasFeatures || flags.isEdgeTestNeeded === IsEdgeTestNeeded.No);\r\n let index = flags.isTranslucent ? SurfaceTechnique._kTranslucent : SurfaceTechnique._kOpaque;\r\n index += SurfaceTechnique._kInstanced * flags.isInstanced;\r\n index += SurfaceTechnique._kAnimated * flags.isAnimated;\r\n index += SurfaceTechnique._kShadowable * flags.isShadowable;\r\n index += SurfaceTechnique._kThematic * flags.isThematic;\r\n\r\n if (flags.isEdgeTestNeeded)\r\n index += SurfaceTechnique._kEdgeTestNeeded + (flags.featureMode - 1) * SurfaceTechnique._kFeature;\r\n else\r\n index += SurfaceTechnique._kFeature * flags.featureMode;\r\n\r\n return index;\r\n }\r\n}\r\n\r\nclass PolylineTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kFeature = 4;\r\n private static readonly _kHilite = numFeatureVariants(PolylineTechnique._kFeature);\r\n\r\n public constructor(gl: WebGLContext) {\r\n super(PolylineTechnique._kHilite + numHiliteVariants);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\r\n ];\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, createPolylineHiliter);\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n const builder = createPolylineBuilder(instanced);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createPolylineBuilder(instanced);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"Polyline\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return PolylineTechnique._kHilite + flags.isInstanced;\r\n }\r\n\r\n let index = flags.isTranslucent ? PolylineTechnique._kTranslucent : PolylineTechnique._kOpaque;\r\n index += PolylineTechnique._kFeature * flags.featureMode;\r\n index += PolylineTechnique._kInstanced * flags.isInstanced;\r\n return index;\r\n }\r\n}\r\n\r\nclass EdgeTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kAnimated = 2;\r\n private static readonly _kInstanced = 4;\r\n private static readonly _kFeature = 8;\r\n private readonly _isSilhouette: boolean;\r\n\r\n public constructor(gl: WebGLContext, isSilhouette: boolean = false) {\r\n super(numFeatureVariants(EdgeTechnique._kFeature));\r\n this._isSilhouette = isSilhouette;\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n flags.isAnimated = iAnimate;\r\n const builder = createEdgeBuilder(isSilhouette, flags.isInstanced, flags.isAnimated);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createEdgeBuilder(isSilhouette, flags.isInstanced, flags.isAnimated);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n flags.isAnimated = iAnimate;\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return this._isSilhouette ? \"Silhouette\" : \"Edge\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n let index = flags.isTranslucent ? EdgeTechnique._kTranslucent : EdgeTechnique._kOpaque;\r\n index += EdgeTechnique._kFeature * flags.featureMode;\r\n if (flags.isAnimated)\r\n index += EdgeTechnique._kAnimated;\r\n if (flags.isInstanced)\r\n index += EdgeTechnique._kInstanced;\r\n\r\n return index;\r\n }\r\n}\r\n\r\nclass PointStringTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kFeature = 4;\r\n private static readonly _kHilite = numFeatureVariants(PointStringTechnique._kFeature);\r\n\r\n public constructor(gl: WebGLContext) {\r\n super((PointStringTechnique._kHilite + numHiliteVariants));\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, createPointStringHiliter);\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n const builder = createPointStringBuilder(instanced);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createPointStringBuilder(instanced);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Point);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Point);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"PointString\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return PointStringTechnique._kHilite + flags.isInstanced;\r\n }\r\n\r\n let index = flags.isTranslucent ? PointStringTechnique._kTranslucent : PointStringTechnique._kOpaque;\r\n index += PointStringTechnique._kFeature * flags.featureMode;\r\n index += PointStringTechnique._kInstanced * flags.isInstanced;\r\n return index;\r\n }\r\n}\r\n\r\nclass PointCloudTechnique extends VariedTechnique {\r\n private static readonly _kHilite = 8;\r\n\r\n public constructor(gl: WebGLContext) {\r\n super(PointCloudTechnique._kHilite + 2);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n ];\r\n\r\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\r\n this.addHiliteShader(gl, IsInstanced.No, iClassified, () => createPointCloudHiliter(iClassified));\r\n const flags = scratchTechniqueFlags;\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n const pointCloudFeatureModes = [FeatureMode.None, FeatureMode.Overrides];\r\n for (const featureMode of pointCloudFeatureModes) {\r\n flags.reset(featureMode, IsInstanced.No, IsShadowable.No, thematic);\r\n flags.isClassified = iClassified;\r\n const builder = createPointCloudBuilder(flags.isClassified, featureMode, thematic);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addUniformFeatureSymbology(builder, true);\r\n builder.vert.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asPointCloud!.overrideColorMix);\r\n });\r\n });\r\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, mixFeatureColor);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"PointCloud\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite)\r\n return PointCloudTechnique._kHilite + flags.isClassified;\r\n else {\r\n let ndx = 0;\r\n if (flags.isClassified)\r\n ndx++;\r\n if (flags.featureMode !== FeatureMode.None)\r\n ndx += 2;\r\n if (flags.isThematic)\r\n ndx += 4;\r\n return ndx;\r\n }\r\n }\r\n}\r\n\r\nclass RealityMeshTechnique extends VariedTechnique {\r\n private static readonly _numVariants = 50;\r\n\r\n public constructor(gl: WebGLRenderingContext) {\r\n super(RealityMeshTechnique._numVariants);\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n ];\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.No, createRealityMeshHiliter);\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, createClassifierRealityMeshHiliter);\r\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\r\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n const flags = scratchTechniqueFlags;\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic);\r\n flags.isClassified = iClassified;\r\n flags.isTranslucent = 1 === iTranslucent;\r\n const builder = createRealityMeshBuilder(flags);\r\n\r\n if (flags.isTranslucent) {\r\n addShaderFlags(builder);\r\n addTranslucency(builder);\r\n } else\r\n this.addFeatureId(builder, featureMode);\r\n\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"RealityMesh\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n if (flags.isHilite)\r\n return flags.isClassified ? 1 : 0;\r\n let ndx = 2;\r\n if (flags.isClassified)\r\n ndx++;\r\n if (flags.isShadowable)\r\n ndx += 2;\r\n if (flags.isTranslucent)\r\n ndx += 4;\r\n ndx += 8 * flags.featureMode;\r\n if (flags.isThematic)\r\n ndx += 24;\r\n return ndx;\r\n }\r\n}\r\n\r\ninterface PrioritizedShaderVariation {\r\n featureMode: FeatureMode;\r\n isInstanced: IsInstanced;\r\n isShadowable: IsShadowable;\r\n isEdgeTestedNeeded: IsEdgeTestNeeded;\r\n isTranslucent: boolean;\r\n}\r\n\r\ninterface PrioritizedTechniqueOrShader {\r\n techniqueId: TechniqueId;\r\n specificShader?: PrioritizedShaderVariation; // if defined, only compile this specific shader variation for the technique; otherwise, compile all uncompiled shader variations for the technique\r\n}\r\n\r\nconst techniquesByPriority: PrioritizedTechniqueOrShader[] = [\r\n // Compile these specific shader variations first because they seem most likely to be used immediately upon opening a file.\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\r\n\r\n // Next, compile all shaders in specific techniques.\r\n // Do surfaces first because (1) they are the most commonly used and (2) they take longer to compile.\r\n { techniqueId: TechniqueId.Surface },\r\n { techniqueId: TechniqueId.Edge },\r\n { techniqueId: TechniqueId.SilhouetteEdge },\r\n { techniqueId: TechniqueId.Polyline },\r\n { techniqueId: TechniqueId.PointString },\r\n { techniqueId: TechniqueId.PointCloud },\r\n { techniqueId: TechniqueId.RealityMesh },\r\n\r\n // The following techniques take a trivial amount of time to compile - do them last\r\n { techniqueId: TechniqueId.OITClearTranslucent },\r\n { techniqueId: TechniqueId.CopyPickBuffers },\r\n { techniqueId: TechniqueId.CopyColor },\r\n { techniqueId: TechniqueId.CopyColorNoAlpha },\r\n { techniqueId: TechniqueId.ClearPickAndColor },\r\n { techniqueId: TechniqueId.CompositeTranslucent },\r\n { techniqueId: TechniqueId.CompositeHilite },\r\n { techniqueId: TechniqueId.CompositeHiliteAndTranslucent },\r\n { techniqueId: TechniqueId.CompositeOcclusion },\r\n { techniqueId: TechniqueId.CompositeTranslucentAndOcclusion },\r\n { techniqueId: TechniqueId.CompositeHiliteAndOcclusion },\r\n { techniqueId: TechniqueId.CompositeAll },\r\n { techniqueId: TechniqueId.VolClassColorUsingStencil },\r\n { techniqueId: TechniqueId.EVSMFromDepth },\r\n { techniqueId: TechniqueId.SkyBox },\r\n { techniqueId: TechniqueId.SkySphereGradient },\r\n { techniqueId: TechniqueId.SkySphereTexture },\r\n { techniqueId: TechniqueId.AmbientOcclusion },\r\n { techniqueId: TechniqueId.Blur },\r\n { techniqueId: TechniqueId.CombineTextures },\r\n { techniqueId: TechniqueId.VolClassCopyZ },\r\n { techniqueId: TechniqueId.VolClassSetBlend },\r\n { techniqueId: TechniqueId.VolClassBlend },\r\n { techniqueId: TechniqueId.Combine3Textures },\r\n { techniqueId: TechniqueId.PlanarGrid },\r\n];\r\nconst numTechniquesByPriority = techniquesByPriority.length;\r\n\r\n/** A collection of rendering techniques accessed by ID.\r\n * @internal\r\n */\r\nexport class Techniques implements WebGLDisposable {\r\n private readonly _list = new Array<Technique>(); // indexed by TechniqueId, which may exceed TechniqueId.NumBuiltIn for dynamic techniques.\r\n private readonly _dynamicTechniqueIds = new Array<string>(); // technique ID = (index in this array) + TechniqueId.NumBuiltIn\r\n private _techniqueByPriorityIndex = 0;\r\n private _shaderIndex = 0;\r\n\r\n public static create(gl: WebGLContext): Techniques {\r\n const techs = new Techniques();\r\n techs.initializeBuiltIns(gl);\r\n return techs;\r\n }\r\n\r\n public getTechnique(id: TechniqueId): Technique {\r\n assert(id < this._list.length, \"technique index out of bounds\");\r\n return this._list[id];\r\n }\r\n\r\n public get numTechniques(): number {\r\n return this._list.length;\r\n }\r\n\r\n public addDynamicTechnique(technique: Technique, name: string): TechniqueId {\r\n const id = this.getDynamicTechniqueId(name);\r\n if (undefined !== id)\r\n return id;\r\n\r\n this._dynamicTechniqueIds.push(name);\r\n this._list.push(technique);\r\n return TechniqueId.NumBuiltIn + this._dynamicTechniqueIds.length - 1;\r\n }\r\n\r\n public getDynamicTechniqueId(name: string): TechniqueId | undefined {\r\n const index = this._dynamicTechniqueIds.indexOf(name);\r\n return -1 !== index ? index + TechniqueId.NumBuiltIn + index : undefined;\r\n }\r\n\r\n /** Execute each command in the list */\r\n public execute(target: Target, commands: DrawCommands, renderPass: RenderPass) {\r\n assert(RenderPass.None !== renderPass, \"invalid render pass\");\r\n\r\n using(new ShaderProgramExecutor(target, renderPass), (executor: ShaderProgramExecutor) => {\r\n for (const command of commands)\r\n command.execute(executor);\r\n });\r\n System.instance.frameBufferStack.markTargetsDirty();\r\n }\r\n\r\n /** Execute the commands for a single given classification primitive (the first 3 commands should be a push, the primitive, then a pop) */\r\n public executeForIndexedClassifier(target: Target, cmdsByIndex: DrawCommands, renderPass: RenderPass) {\r\n // ###TODO: Disable shadows. Probably in the ClassifierTileTree's ViewFlagOverrides.\r\n this.execute(target, cmdsByIndex, renderPass);\r\n }\r\n\r\n /** Draw a single primitive. Usually used for special-purpose rendering techniques. */\r\n public draw(params: DrawParams): void {\r\n const tech = this.getTechnique(params.geometry.techniqueId);\r\n const program = tech.getShader(TechniqueFlags.defaults);\r\n using(new ShaderProgramExecutor(params.target, params.renderPass, program), (executor: ShaderProgramExecutor) => {\r\n assert(executor.isValid);\r\n if (executor.isValid) {\r\n executor.draw(params);\r\n }\r\n });\r\n System.instance.frameBufferStack.markTargetsDirty();\r\n }\r\n\r\n public get isDisposed(): boolean { return 0 === this._list.length; }\r\n\r\n public dispose(): void {\r\n for (const tech of this._list)\r\n dispose(tech);\r\n this._list.length = 0;\r\n }\r\n\r\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\r\n public compileShaders(): boolean {\r\n let allCompiled = true;\r\n\r\n for (const tech of this._list) {\r\n if (!tech.compileShaders()) {\r\n allCompiled = false;\r\n }\r\n }\r\n\r\n return allCompiled;\r\n }\r\n\r\n /** Compile shader of next highest priority. Called when possible during an idle situation before any viewports exist. */\r\n public idleCompileNextShader(): boolean {\r\n let compileStatus = CompileStatus.Success;\r\n let wasPreviouslyCompiled = false;\r\n\r\n do {\r\n if (this._techniqueByPriorityIndex >= numTechniquesByPriority)\r\n return false;\r\n\r\n let shader: ShaderProgram;\r\n let numShaders = 0;\r\n\r\n const pTech = techniquesByPriority[this._techniqueByPriorityIndex];\r\n const tech = this._list[pTech.techniqueId];\r\n\r\n if (pTech.specificShader !== undefined) { // if this entry consists of a specific shader, just compile that\r\n const flags = scratchTechniqueFlags;\r\n flags.reset(pTech.specificShader.featureMode, pTech.specificShader.isInstanced, pTech.specificShader.isShadowable, IsThematic.No);\r\n flags.isEdgeTestNeeded = pTech.specificShader.isEdgeTestedNeeded;\r\n flags.isTranslucent = pTech.specificShader.isTranslucent;\r\n shader = tech.getShader(flags);\r\n } else { // if this entry only contains a techniqueId, then compile all uncompiled shaders for that technique\r\n shader = tech.getShaderByIndex(this._shaderIndex);\r\n this._shaderIndex++;\r\n numShaders = tech.getShaderCount();\r\n }\r\n\r\n if (shader.isCompiled)\r\n wasPreviouslyCompiled = true;\r\n else {\r\n compileStatus = shader.compile();\r\n wasPreviouslyCompiled = false;\r\n }\r\n\r\n if (this._shaderIndex >= numShaders) {\r\n this._techniqueByPriorityIndex++;\r\n this._shaderIndex = 0;\r\n }\r\n } while (wasPreviouslyCompiled);\r\n\r\n return compileStatus === CompileStatus.Success;\r\n }\r\n\r\n /** For tests. */\r\n public forEachVariedProgram(func: (program: ShaderProgram) => void): void {\r\n for (const technique of this._list)\r\n if (technique instanceof VariedTechnique)\r\n technique.forEachProgram(func);\r\n }\r\n\r\n private constructor() { }\r\n\r\n private initializeBuiltIns(gl: WebGLContext): void {\r\n this._list[TechniqueId.OITClearTranslucent] = new SingularTechnique(createClearTranslucentProgram(gl));\r\n this._list[TechniqueId.ClearPickAndColor] = new SingularTechnique(createClearPickAndColorProgram(gl));\r\n this._list[TechniqueId.CopyColor] = new SingularTechnique(createCopyColorProgram(gl));\r\n this._list[TechniqueId.CopyColorNoAlpha] = new SingularTechnique(createCopyColorProgram(gl, false));\r\n this._list[TechniqueId.CopyPickBuffers] = new SingularTechnique(createCopyPickBuffersProgram(gl));\r\n this._list[TechniqueId.EVSMFromDepth] = new SingularTechnique(createEVSMProgram(gl));\r\n this._list[TechniqueId.SkyBox] = new SingularTechnique(createSkyBoxProgram(gl));\r\n this._list[TechniqueId.SkySphereGradient] = new SingularTechnique(createSkySphereProgram(gl, true));\r\n this._list[TechniqueId.SkySphereTexture] = new SingularTechnique(createSkySphereProgram(gl, false));\r\n this._list[TechniqueId.AmbientOcclusion] = new SingularTechnique(createAmbientOcclusionProgram(gl));\r\n this._list[TechniqueId.Blur] = new SingularTechnique(createBlurProgram(gl));\r\n this._list[TechniqueId.CombineTextures] = new SingularTechnique(createCombineTexturesProgram(gl));\r\n this._list[TechniqueId.Combine3Textures] = new SingularTechnique(createCombine3TexturesProgram(gl));\r\n this._list[TechniqueId.Surface] = new SurfaceTechnique(gl);\r\n this._list[TechniqueId.Edge] = new EdgeTechnique(gl, false);\r\n this._list[TechniqueId.SilhouetteEdge] = new EdgeTechnique(gl, true);\r\n this._list[TechniqueId.Polyline] = new PolylineTechnique(gl);\r\n this._list[TechniqueId.PointString] = new PointStringTechnique(gl);\r\n this._list[TechniqueId.PointCloud] = new PointCloudTechnique(gl);\r\n this._list[TechniqueId.RealityMesh] = new RealityMeshTechnique(gl);\r\n this._list[TechniqueId.PlanarGrid] = new SingularTechnique(createPlanarGridProgram(gl));\r\n if (System.instance.capabilities.supportsFragDepth)\r\n this._list[TechniqueId.VolClassCopyZ] = new SingularTechnique(createVolClassCopyZProgram(gl));\r\n else\r\n this._list[TechniqueId.VolClassCopyZ] = new SingularTechnique(createVolClassCopyZUsingPointsProgram(gl));\r\n this._list[TechniqueId.VolClassSetBlend] = new SingularTechnique(createVolClassSetBlendProgram(gl));\r\n this._list[TechniqueId.VolClassBlend] = new SingularTechnique(createVolClassBlendProgram(gl));\r\n this._list[TechniqueId.VolClassColorUsingStencil] = new SingularTechnique(createVolClassColorUsingStencilProgram(gl));\r\n\r\n for (let compositeFlags = 1; compositeFlags <= 7; compositeFlags++) {\r\n const techId = computeCompositeTechniqueId(compositeFlags);\r\n this._list[techId] = new SingularTechnique(createCompositeProgram(compositeFlags, gl));\r\n }\r\n\r\n assert(this._list.length === TechniqueId.NumBuiltIn, \"unexpected number of built-in techniques\");\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RealityModelTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealityModelTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.ts"],"names":[],"mappings":"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"}
@@ -710,14 +710,19 @@ export class RealityModelTileClient {
710
710
  }
711
711
  async _doRequest(url, responseType) {
712
712
  var _a;
713
- const authToken = (_a = this._requestAuthorization) !== null && _a !== void 0 ? _a : (await IModelApp.getAccessToken());
714
- const options = {
713
+ let options = {
715
714
  method: "GET",
716
715
  responseType,
717
- headers: {
718
- authorization: authToken,
719
- },
720
716
  };
717
+ const authToken = (_a = this._requestAuthorization) !== null && _a !== void 0 ? _a : (await IModelApp.getAccessToken());
718
+ if (authToken) {
719
+ options = {
720
+ ...options,
721
+ headers: {
722
+ authorization: authToken,
723
+ },
724
+ };
725
+ }
721
726
  const data = await request(url, options);
722
727
  return data.body;
723
728
  }