defi-dash-sdk 0.1.4 → 0.1.5

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 (216) hide show
  1. package/dist/esm/index.js +40 -0
  2. package/dist/esm/index.js.map +1 -0
  3. package/dist/esm/protocols/base-adapter.js +78 -0
  4. package/dist/esm/protocols/base-adapter.js.map +1 -0
  5. package/dist/esm/protocols/index.js +8 -0
  6. package/dist/esm/protocols/index.js.map +1 -0
  7. package/dist/esm/protocols/navi/adapter.js +393 -0
  8. package/dist/esm/protocols/navi/adapter.js.map +1 -0
  9. package/dist/{protocols/scallop.js → esm/protocols/scallop/adapter.js} +252 -95
  10. package/dist/esm/protocols/scallop/adapter.js.map +1 -0
  11. package/dist/{lib/scallop/flash-loan-client.js → esm/protocols/scallop/flash-loan.js} +63 -8
  12. package/dist/esm/protocols/scallop/flash-loan.js.map +1 -0
  13. package/dist/esm/protocols/scallop/index.js +6 -0
  14. package/dist/esm/protocols/scallop/index.js.map +1 -0
  15. package/dist/esm/protocols/scallop/types.js +67 -0
  16. package/dist/esm/protocols/scallop/types.js.map +1 -0
  17. package/dist/esm/protocols/suilend/adapter.js +464 -0
  18. package/dist/esm/protocols/suilend/adapter.js.map +1 -0
  19. package/dist/{lib → esm/protocols}/suilend/calculators.js +41 -51
  20. package/dist/esm/protocols/suilend/calculators.js.map +1 -0
  21. package/dist/esm/protocols/suilend/constants.js +159 -0
  22. package/dist/{lib/suilend/const.js.map → esm/protocols/suilend/constants.js.map} +1 -1
  23. package/dist/{lib/suilend/suilend.js → esm/protocols/suilend/types.js} +7 -13
  24. package/dist/esm/protocols/suilend/types.js.map +1 -0
  25. package/dist/esm/sdk.js +569 -0
  26. package/dist/esm/sdk.js.map +1 -0
  27. package/dist/esm/strategies/common.js +75 -0
  28. package/dist/esm/strategies/common.js.map +1 -0
  29. package/dist/esm/strategies/deleverage.js +218 -0
  30. package/dist/esm/strategies/deleverage.js.map +1 -0
  31. package/dist/esm/strategies/index.js +10 -0
  32. package/dist/esm/strategies/index.js.map +1 -0
  33. package/dist/esm/strategies/leverage-preview.js +117 -0
  34. package/dist/esm/strategies/leverage-preview.js.map +1 -0
  35. package/dist/esm/strategies/leverage-route.js +109 -0
  36. package/dist/esm/strategies/leverage-route.js.map +1 -0
  37. package/dist/esm/strategies/leverage.js +156 -0
  38. package/dist/esm/strategies/leverage.js.map +1 -0
  39. package/dist/esm/strategies/scallop-leverage.js +140 -0
  40. package/dist/esm/strategies/scallop-leverage.js.map +1 -0
  41. package/dist/esm/types/common.js +13 -0
  42. package/dist/esm/types/common.js.map +1 -0
  43. package/dist/esm/types/config.js +5 -0
  44. package/dist/esm/types/config.js.map +1 -0
  45. package/dist/esm/types/constants.js +128 -0
  46. package/dist/esm/types/constants.js.map +1 -0
  47. package/dist/esm/types/index.js +10 -0
  48. package/dist/esm/types/index.js.map +1 -0
  49. package/dist/esm/types/position.js +5 -0
  50. package/dist/esm/types/position.js.map +1 -0
  51. package/dist/esm/types/protocol.js +5 -0
  52. package/dist/esm/types/protocol.js.map +1 -0
  53. package/dist/esm/types/strategy.js +5 -0
  54. package/dist/esm/types/strategy.js.map +1 -0
  55. package/dist/esm/utils/calculations.js +33 -0
  56. package/dist/esm/utils/calculations.js.map +1 -0
  57. package/dist/esm/utils/coin.js +54 -0
  58. package/dist/esm/utils/coin.js.map +1 -0
  59. package/dist/esm/utils/errors.js +111 -0
  60. package/dist/esm/utils/errors.js.map +1 -0
  61. package/dist/esm/utils/execution.js +106 -0
  62. package/dist/esm/utils/execution.js.map +1 -0
  63. package/dist/{lib → esm}/utils/format.js +2 -6
  64. package/dist/esm/utils/format.js.map +1 -0
  65. package/dist/esm/utils/gas.js +38 -0
  66. package/dist/esm/utils/gas.js.map +1 -0
  67. package/dist/esm/utils/index.js +13 -0
  68. package/dist/esm/utils/index.js.map +1 -0
  69. package/dist/{lib → esm}/utils/logger.js +17 -31
  70. package/dist/esm/utils/logger.js.map +1 -0
  71. package/package.json +11 -2
  72. package/dist/__tests__/deleverageEstimate.unit.test.d.ts +0 -10
  73. package/dist/__tests__/deleverageEstimate.unit.test.d.ts.map +0 -1
  74. package/dist/__tests__/deleverageEstimate.unit.test.js +0 -116
  75. package/dist/__tests__/deleverageEstimate.unit.test.js.map +0 -1
  76. package/dist/__tests__/findBestLeverageRoute.test.d.ts +0 -12
  77. package/dist/__tests__/findBestLeverageRoute.test.d.ts.map +0 -1
  78. package/dist/__tests__/findBestLeverageRoute.test.js +0 -177
  79. package/dist/__tests__/findBestLeverageRoute.test.js.map +0 -1
  80. package/dist/__tests__/getAssetApy.test.d.ts +0 -2
  81. package/dist/__tests__/getAssetApy.test.d.ts.map +0 -1
  82. package/dist/__tests__/getAssetApy.test.js +0 -133
  83. package/dist/__tests__/getAssetApy.test.js.map +0 -1
  84. package/dist/__tests__/getAssetRiskParams.test.d.ts +0 -11
  85. package/dist/__tests__/getAssetRiskParams.test.d.ts.map +0 -1
  86. package/dist/__tests__/getAssetRiskParams.test.js +0 -183
  87. package/dist/__tests__/getAssetRiskParams.test.js.map +0 -1
  88. package/dist/__tests__/internal.getAssetApy.test.d.ts +0 -2
  89. package/dist/__tests__/internal.getAssetApy.test.d.ts.map +0 -1
  90. package/dist/__tests__/internal.getAssetApy.test.js +0 -140
  91. package/dist/__tests__/internal.getAssetApy.test.js.map +0 -1
  92. package/dist/__tests__/internal.getAssetRiskParams.test.d.ts +0 -22
  93. package/dist/__tests__/internal.getAssetRiskParams.test.d.ts.map +0 -1
  94. package/dist/__tests__/internal.getAssetRiskParams.test.js +0 -194
  95. package/dist/__tests__/internal.getAssetRiskParams.test.js.map +0 -1
  96. package/dist/__tests__/internal.getPosition.test.d.ts +0 -22
  97. package/dist/__tests__/internal.getPosition.test.d.ts.map +0 -1
  98. package/dist/__tests__/internal.getPosition.test.js +0 -153
  99. package/dist/__tests__/internal.getPosition.test.js.map +0 -1
  100. package/dist/__tests__/leveragePreview.unit.test.d.ts +0 -10
  101. package/dist/__tests__/leveragePreview.unit.test.d.ts.map +0 -1
  102. package/dist/__tests__/leveragePreview.unit.test.js +0 -168
  103. package/dist/__tests__/leveragePreview.unit.test.js.map +0 -1
  104. package/dist/__tests__/leverageRoute.unit.test.d.ts +0 -10
  105. package/dist/__tests__/leverageRoute.unit.test.d.ts.map +0 -1
  106. package/dist/__tests__/leverageRoute.unit.test.js +0 -159
  107. package/dist/__tests__/leverageRoute.unit.test.js.map +0 -1
  108. package/dist/__tests__/previewLeverage.test.d.ts +0 -13
  109. package/dist/__tests__/previewLeverage.test.d.ts.map +0 -1
  110. package/dist/__tests__/previewLeverage.test.js +0 -217
  111. package/dist/__tests__/previewLeverage.test.js.map +0 -1
  112. package/dist/__tests__/sdk.bestRoute.test.d.ts +0 -22
  113. package/dist/__tests__/sdk.bestRoute.test.d.ts.map +0 -1
  114. package/dist/__tests__/sdk.bestRoute.test.js +0 -186
  115. package/dist/__tests__/sdk.bestRoute.test.js.map +0 -1
  116. package/dist/__tests__/sdk.bestRoute.unit.test.d.ts +0 -16
  117. package/dist/__tests__/sdk.bestRoute.unit.test.d.ts.map +0 -1
  118. package/dist/__tests__/sdk.bestRoute.unit.test.js +0 -165
  119. package/dist/__tests__/sdk.bestRoute.unit.test.js.map +0 -1
  120. package/dist/__tests__/sdk.deleverage.test.d.ts +0 -21
  121. package/dist/__tests__/sdk.deleverage.test.d.ts.map +0 -1
  122. package/dist/__tests__/sdk.deleverage.test.js +0 -130
  123. package/dist/__tests__/sdk.deleverage.test.js.map +0 -1
  124. package/dist/__tests__/sdk.deleverage.unit.test.d.ts +0 -21
  125. package/dist/__tests__/sdk.deleverage.unit.test.d.ts.map +0 -1
  126. package/dist/__tests__/sdk.deleverage.unit.test.js +0 -141
  127. package/dist/__tests__/sdk.deleverage.unit.test.js.map +0 -1
  128. package/dist/__tests__/sdk.leverage.test.d.ts +0 -19
  129. package/dist/__tests__/sdk.leverage.test.d.ts.map +0 -1
  130. package/dist/__tests__/sdk.leverage.test.js +0 -188
  131. package/dist/__tests__/sdk.leverage.test.js.map +0 -1
  132. package/dist/__tests__/sdk.portfolio.test.d.ts +0 -17
  133. package/dist/__tests__/sdk.portfolio.test.d.ts.map +0 -1
  134. package/dist/__tests__/sdk.portfolio.test.js +0 -162
  135. package/dist/__tests__/sdk.portfolio.test.js.map +0 -1
  136. package/dist/__tests__/sdk.position.test.d.ts +0 -16
  137. package/dist/__tests__/sdk.position.test.d.ts.map +0 -1
  138. package/dist/__tests__/sdk.position.test.js +0 -193
  139. package/dist/__tests__/sdk.position.test.js.map +0 -1
  140. package/dist/__tests__/sdk.preview.test.d.ts +0 -23
  141. package/dist/__tests__/sdk.preview.test.d.ts.map +0 -1
  142. package/dist/__tests__/sdk.preview.test.js +0 -226
  143. package/dist/__tests__/sdk.preview.test.js.map +0 -1
  144. package/dist/__tests__/sdk.preview.unit.test.d.ts +0 -18
  145. package/dist/__tests__/sdk.preview.unit.test.d.ts.map +0 -1
  146. package/dist/__tests__/sdk.preview.unit.test.js +0 -175
  147. package/dist/__tests__/sdk.preview.unit.test.js.map +0 -1
  148. package/dist/__tests__/utils.normalizeCoinType.test.d.ts +0 -7
  149. package/dist/__tests__/utils.normalizeCoinType.test.d.ts.map +0 -1
  150. package/dist/__tests__/utils.normalizeCoinType.test.js +0 -42
  151. package/dist/__tests__/utils.normalizeCoinType.test.js.map +0 -1
  152. package/dist/lib/navi_calculations.d.ts +0 -76
  153. package/dist/lib/navi_calculations.d.ts.map +0 -1
  154. package/dist/lib/navi_calculations.js +0 -185
  155. package/dist/lib/navi_calculations.js.map +0 -1
  156. package/dist/lib/scallop/flash-loan-client.d.ts +0 -88
  157. package/dist/lib/scallop/flash-loan-client.d.ts.map +0 -1
  158. package/dist/lib/scallop/flash-loan-client.js.map +0 -1
  159. package/dist/lib/scallop/flash-loan.d.ts +0 -30
  160. package/dist/lib/scallop/flash-loan.d.ts.map +0 -1
  161. package/dist/lib/scallop/flash-loan.js +0 -61
  162. package/dist/lib/scallop/flash-loan.js.map +0 -1
  163. package/dist/lib/scallop/index.d.ts +0 -3
  164. package/dist/lib/scallop/index.d.ts.map +0 -1
  165. package/dist/lib/scallop/index.js +0 -7
  166. package/dist/lib/scallop/index.js.map +0 -1
  167. package/dist/lib/scallop/scallop-addresses.d.ts +0 -24
  168. package/dist/lib/scallop/scallop-addresses.d.ts.map +0 -1
  169. package/dist/lib/scallop/scallop-addresses.js +0 -67
  170. package/dist/lib/scallop/scallop-addresses.js.map +0 -1
  171. package/dist/lib/scallop/scallop-builder.d.ts +0 -96
  172. package/dist/lib/scallop/scallop-builder.d.ts.map +0 -1
  173. package/dist/lib/scallop/scallop-builder.js +0 -163
  174. package/dist/lib/scallop/scallop-builder.js.map +0 -1
  175. package/dist/lib/suilend/calculators.d.ts +0 -44
  176. package/dist/lib/suilend/calculators.d.ts.map +0 -1
  177. package/dist/lib/suilend/calculators.js.map +0 -1
  178. package/dist/lib/suilend/const.d.ts +0 -9
  179. package/dist/lib/suilend/const.d.ts.map +0 -1
  180. package/dist/lib/suilend/const.js +0 -164
  181. package/dist/lib/suilend/suilend.d.ts +0 -15
  182. package/dist/lib/suilend/suilend.d.ts.map +0 -1
  183. package/dist/lib/suilend/suilend.js.map +0 -1
  184. package/dist/lib/utils/coin.d.ts +0 -21
  185. package/dist/lib/utils/coin.d.ts.map +0 -1
  186. package/dist/lib/utils/coin.js +0 -50
  187. package/dist/lib/utils/coin.js.map +0 -1
  188. package/dist/lib/utils/format.d.ts +0 -24
  189. package/dist/lib/utils/format.d.ts.map +0 -1
  190. package/dist/lib/utils/format.js.map +0 -1
  191. package/dist/lib/utils/index.d.ts +0 -9
  192. package/dist/lib/utils/index.d.ts.map +0 -1
  193. package/dist/lib/utils/index.js +0 -25
  194. package/dist/lib/utils/index.js.map +0 -1
  195. package/dist/lib/utils/logger.d.ts +0 -30
  196. package/dist/lib/utils/logger.d.ts.map +0 -1
  197. package/dist/lib/utils/logger.js.map +0 -1
  198. package/dist/protocols/interface.d.ts +0 -129
  199. package/dist/protocols/interface.d.ts.map +0 -1
  200. package/dist/protocols/interface.js +0 -8
  201. package/dist/protocols/interface.js.map +0 -1
  202. package/dist/protocols/navi.d.ts +0 -34
  203. package/dist/protocols/navi.d.ts.map +0 -1
  204. package/dist/protocols/navi.js +0 -263
  205. package/dist/protocols/navi.js.map +0 -1
  206. package/dist/protocols/scallop.d.ts +0 -297
  207. package/dist/protocols/scallop.d.ts.map +0 -1
  208. package/dist/protocols/scallop.js.map +0 -1
  209. package/dist/protocols/suilend.d.ts +0 -29
  210. package/dist/protocols/suilend.d.ts.map +0 -1
  211. package/dist/protocols/suilend.js +0 -313
  212. package/dist/protocols/suilend.js.map +0 -1
  213. package/dist/types.d.ts +0 -188
  214. package/dist/types.d.ts.map +0 -1
  215. package/dist/types.js +0 -22
  216. package/dist/types.js.map +0 -1
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * DeFi Dash SDK - Scallop Protocol Adapter
4
3
  *
@@ -12,53 +11,22 @@
12
11
  * - Staked obligations are "locked" and cannot perform borrow/withdraw operations
13
12
  * - This adapter automatically unstakes/restakes obligations when needed
14
13
  */
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.ScallopAdapter = exports.SCALLOP_COIN_TYPE_MAP = void 0;
17
- const utils_1 = require("@mysten/sui/utils");
18
- const sui_scallop_sdk_1 = require("@scallop-io/sui-scallop-sdk");
19
- const types_1 = require("../types");
20
- const utils_2 = require("../utils");
21
- const const_1 = require("../lib/suilend/const");
22
- const sdk_ts_1 = require("@7kprotocol/sdk-ts");
23
- /**
24
- * Coin type mappings for Scallop
25
- *
26
- * Maps full coin types to Scallop's internal coin names.
27
- * Required for operations like deposit, withdraw, borrow, repay.
28
- */
29
- const COIN_TYPE_MAP = {
30
- // Native SUI
31
- "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI": "sui",
32
- // Stablecoins
33
- "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC": "usdc",
34
- "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN": "wusdc",
35
- "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN": "wusdt",
36
- // Wrapped assets
37
- "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN": "weth",
38
- "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN": "wbtc",
39
- // BTC variants
40
- "0xaafb102dd0902f5055cadecd687fb5b71ca82ef0e0285d90afde828ec58ca96b::btc::BTC": "xbtc",
41
- "0x5d89b60f87e587b54e5f87886356b0af23ce41dff56e506c6a47e8125c965a9d::lbtc::LBTC": "lbtc",
42
- // Protocol tokens
43
- "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS": "cetus",
44
- "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA": "sca",
45
- "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP": "deep",
46
- "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD": "fud",
47
- // Liquid staking tokens
48
- "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI": "afsui",
49
- "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI": "hasui",
50
- "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT": "vsui",
51
- // Spring SUI
52
- "0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2cb9377d060bef4bf::spring_sui::SPRING_SUI": "ssui",
53
- };
54
- exports.SCALLOP_COIN_TYPE_MAP = COIN_TYPE_MAP;
14
+ import { SUI_CLOCK_OBJECT_ID } from "@mysten/sui/utils";
15
+ import { Scallop } from "@scallop-io/sui-scallop-sdk";
16
+ import { USDC_COIN_TYPE, LendingProtocol, } from "../../types";
17
+ import { normalizeCoinType } from "../../utils";
18
+ import { getReserveByCoinType } from "../suilend/constants";
19
+ import { getTokenPrice } from "@7kprotocol/sdk-ts";
20
+ import { COIN_TYPE_MAP, SCALLOP_COIN_TYPE_MAP, } from "./types";
21
+ // Re-export for backwards compatibility
22
+ export { SCALLOP_COIN_TYPE_MAP };
55
23
  /**
56
24
  * Scallop lending protocol adapter
57
25
  *
58
26
  * Addresses are fetched dynamically from Scallop SDK at initialization,
59
27
  * so they stay up-to-date when Scallop upgrades their contracts.
60
28
  */
61
- class ScallopAdapter {
29
+ export class ScallopAdapter {
62
30
  constructor() {
63
31
  this.name = "scallop";
64
32
  /**
@@ -84,13 +52,20 @@ class ScallopAdapter {
84
52
  this.pendingObligationKey = null;
85
53
  this.pendingHotPotato = null;
86
54
  this.pendingUserAddress = null;
55
+ /**
56
+ * Track obligations that have been unstaked in the current PTB.
57
+ * Prevents duplicate unstake calls within the same transaction.
58
+ */
59
+ this.unstakedObligationsInPTB = new Set();
87
60
  }
88
61
  async initialize(suiClient) {
89
62
  this.suiClient = suiClient;
90
63
  // Initialize Scallop SDK
91
- this.scallop = new sui_scallop_sdk_1.Scallop({ networkType: "mainnet" });
64
+ this.scallop = new Scallop({ networkType: "mainnet" });
92
65
  await this.scallop.init();
93
66
  this.query = await this.scallop.createScallopQuery();
67
+ // Must call query.init() to populate internal whitelist Sets used by market queries
68
+ await this.query.init();
94
69
  // Fetch addresses from SDK (always up-to-date with protocol upgrades)
95
70
  const addresses = this.scallop.client.address.getAddresses();
96
71
  if (!addresses) {
@@ -99,7 +74,7 @@ class ScallopAdapter {
99
74
  this.populateAddresses(addresses);
100
75
  // Build coin mappings
101
76
  for (const [coinType, coinName] of Object.entries(COIN_TYPE_MAP)) {
102
- const normalized = (0, utils_2.normalizeCoinType)(coinType);
77
+ const normalized = normalizeCoinType(coinType);
103
78
  this.coinTypeToNameMap[normalized] = coinName;
104
79
  this.coinNameToTypeMap[coinName] = normalized;
105
80
  }
@@ -133,7 +108,6 @@ class ScallopAdapter {
133
108
  subsTable: addresses.vesca.subsTable,
134
109
  subsWhitelist: addresses.vesca.subsWhitelist,
135
110
  };
136
- console.log(`[ScallopAdapter] Loaded addresses - Core pkg: ${this.coreAddresses.protocolPkg.slice(0, 10)}..., BorrowIncentive pkg: ${this.borrowIncentiveAddresses.pkg.slice(0, 10)}...`);
137
111
  }
138
112
  /**
139
113
  * Get current addresses (for external use/debugging)
@@ -152,7 +126,7 @@ class ScallopAdapter {
152
126
  }
153
127
  }
154
128
  getCoinName(coinType) {
155
- const normalized = (0, utils_2.normalizeCoinType)(coinType);
129
+ const normalized = normalizeCoinType(coinType);
156
130
  const name = this.coinTypeToNameMap[normalized];
157
131
  if (!name) {
158
132
  throw new Error(`Unknown coin type for Scallop: ${coinType}`);
@@ -177,52 +151,61 @@ class ScallopAdapter {
177
151
  const obligation = await this.query.queryObligation(obligations[0].id);
178
152
  if (!obligation)
179
153
  return null;
180
- let collateral = null;
181
- let debt = null;
182
154
  const collaterals = obligation.collaterals || [];
183
- const debts = obligation.debts || [];
184
- if (collaterals.length > 0) {
185
- const col = collaterals[0];
186
- const coinType = (0, utils_2.normalizeCoinType)(col.coinType || col.type || "");
187
- const reserve = (0, const_1.getReserveByCoinType)(coinType);
155
+ const debtItems = obligation.debts || [];
156
+ // Build all supply positions
157
+ const supplies = await Promise.all(collaterals.map(async (col) => {
158
+ const rawCoinType = col.coinType || col.type?.name || "";
159
+ const coinType = normalizeCoinType(rawCoinType);
160
+ const reserve = getReserveByCoinType(coinType);
188
161
  const decimals = reserve?.decimals || 9;
189
162
  const amount = BigInt(col.amount || col.depositAmount || 0);
190
- const price = await (0, sdk_ts_1.getTokenPrice)(coinType);
191
- collateral = {
163
+ const price = await getTokenPrice(coinType);
164
+ return {
192
165
  amount,
193
166
  symbol: reserve?.symbol || this.getCoinName(coinType).toUpperCase(),
194
167
  coinType,
195
168
  decimals,
196
169
  valueUsd: (Number(amount) / Math.pow(10, decimals)) * price,
197
170
  };
198
- }
199
- if (debts.length > 0) {
200
- const d = debts[0];
201
- const coinType = (0, utils_2.normalizeCoinType)(d.coinType || d.type || "");
202
- const reserve = (0, const_1.getReserveByCoinType)(coinType);
171
+ }));
172
+ // Build all borrow positions
173
+ const allBorrows = await Promise.all(debtItems.map(async (d) => {
174
+ const rawCoinType = d.coinType || d.type?.name || "";
175
+ const coinType = normalizeCoinType(rawCoinType);
176
+ const reserve = getReserveByCoinType(coinType);
203
177
  const decimals = reserve?.decimals || 6;
204
178
  const amount = BigInt(d.amount || d.borrowAmount || 0);
205
- const price = await (0, sdk_ts_1.getTokenPrice)(coinType);
206
- debt = {
179
+ const price = await getTokenPrice(coinType);
180
+ return {
207
181
  amount,
208
182
  symbol: reserve?.symbol || "USDC",
209
183
  coinType,
210
184
  decimals,
211
185
  valueUsd: (Number(amount) / Math.pow(10, decimals)) * price,
212
186
  };
213
- }
187
+ }));
188
+ // Primary = largest by USD value
189
+ const collateral = [...supplies].sort((a, b) => b.valueUsd - a.valueUsd)[0] ?? null;
214
190
  if (!collateral)
215
191
  return null;
192
+ const debt = allBorrows.length > 0
193
+ ? [...allBorrows].sort((a, b) => b.valueUsd - a.valueUsd)[0]
194
+ : null;
195
+ const totalSupplyUsd = supplies.reduce((s, p) => s + p.valueUsd, 0);
196
+ const totalDebtUsd = allBorrows.reduce((s, p) => s + p.valueUsd, 0);
216
197
  return {
217
198
  collateral,
218
199
  debt: debt || {
219
200
  amount: 0n,
220
201
  symbol: "USDC",
221
- coinType: types_1.USDC_COIN_TYPE,
202
+ coinType: USDC_COIN_TYPE,
222
203
  decimals: 6,
223
204
  valueUsd: 0,
224
205
  },
225
- netValueUsd: collateral.valueUsd - (debt?.valueUsd || 0),
206
+ supplies,
207
+ borrows: allBorrows,
208
+ netValueUsd: totalSupplyUsd - totalDebtUsd,
226
209
  };
227
210
  }
228
211
  // ============================================================================
@@ -267,7 +250,7 @@ class ScallopAdapter {
267
250
  */
268
251
  borrowFromObligation(tx, obligation, obligationKey, amount, coinType) {
269
252
  const clockRef = tx.sharedObjectRef({
270
- objectId: utils_1.SUI_CLOCK_OBJECT_ID,
253
+ objectId: SUI_CLOCK_OBJECT_ID,
271
254
  mutable: false,
272
255
  initialSharedVersion: "1",
273
256
  });
@@ -292,7 +275,7 @@ class ScallopAdapter {
292
275
  */
293
276
  repayDebt(tx, obligation, coin, coinType) {
294
277
  const clockRef = tx.sharedObjectRef({
295
- objectId: utils_1.SUI_CLOCK_OBJECT_ID,
278
+ objectId: SUI_CLOCK_OBJECT_ID,
296
279
  mutable: false,
297
280
  initialSharedVersion: "1",
298
281
  });
@@ -316,10 +299,17 @@ class ScallopAdapter {
316
299
  *
317
300
  * This must be called before borrow or withdraw on a locked obligation.
318
301
  * Error 770 (0x302) indicates the obligation is locked.
302
+ *
303
+ * This method tracks unstaked obligations to prevent duplicate unstake calls
304
+ * within the same PTB.
319
305
  */
320
306
  unstakeObligation(tx, obligationId, obligationKeyId) {
307
+ // Skip if already unstaked in this PTB
308
+ if (this.unstakedObligationsInPTB.has(obligationId)) {
309
+ return;
310
+ }
321
311
  const clockRef = tx.sharedObjectRef({
322
- objectId: utils_1.SUI_CLOCK_OBJECT_ID,
312
+ objectId: SUI_CLOCK_OBJECT_ID,
323
313
  mutable: false,
324
314
  initialSharedVersion: "1",
325
315
  });
@@ -336,6 +326,8 @@ class ScallopAdapter {
336
326
  clockRef,
337
327
  ],
338
328
  });
329
+ // Mark as unstaked in this PTB
330
+ this.unstakedObligationsInPTB.add(obligationId);
339
331
  }
340
332
  /**
341
333
  * Stake obligation to borrow incentive (locks it for rewards)
@@ -344,7 +336,7 @@ class ScallopAdapter {
344
336
  */
345
337
  stakeObligation(tx, obligationId, obligationKeyId) {
346
338
  const clockRef = tx.sharedObjectRef({
347
- objectId: utils_1.SUI_CLOCK_OBJECT_ID,
339
+ objectId: SUI_CLOCK_OBJECT_ID,
348
340
  mutable: false,
349
341
  initialSharedVersion: "1",
350
342
  });
@@ -381,12 +373,15 @@ class ScallopAdapter {
381
373
  *
382
374
  * Call this if a transaction fails after deposit() but before borrow()
383
375
  * to reset the adapter state.
376
+ *
377
+ * Also clears the unstaked obligations tracking for the next PTB.
384
378
  */
385
379
  clearPendingState() {
386
380
  this.pendingObligation = null;
387
381
  this.pendingObligationKey = null;
388
382
  this.pendingHotPotato = null;
389
383
  this.pendingUserAddress = null;
384
+ this.unstakedObligationsInPTB.clear();
390
385
  }
391
386
  /**
392
387
  * Check if there's a pending obligation (for debugging)
@@ -399,7 +394,7 @@ class ScallopAdapter {
399
394
  // ============================================================================
400
395
  async deposit(tx, coin, coinType, userAddress) {
401
396
  this.ensureInitialized();
402
- const normalized = (0, utils_2.normalizeCoinType)(coinType);
397
+ const normalized = normalizeCoinType(coinType);
403
398
  const obligations = await this.query.getObligations(userAddress);
404
399
  if (obligations.length > 0) {
405
400
  // Use existing obligation
@@ -433,7 +428,7 @@ class ScallopAdapter {
433
428
  */
434
429
  async withdraw(tx, coinType, amount, userAddress) {
435
430
  this.ensureInitialized();
436
- const normalized = (0, utils_2.normalizeCoinType)(coinType);
431
+ const normalized = normalizeCoinType(coinType);
437
432
  const obligations = await this.query.getObligations(userAddress);
438
433
  if (obligations.length === 0) {
439
434
  throw new Error("No obligation found for withdrawal");
@@ -447,7 +442,7 @@ class ScallopAdapter {
447
442
  this.unstakeObligation(tx, obligationId, obligationKeyId);
448
443
  }
449
444
  const clockRef = tx.sharedObjectRef({
450
- objectId: utils_1.SUI_CLOCK_OBJECT_ID,
445
+ objectId: SUI_CLOCK_OBJECT_ID,
451
446
  mutable: false,
452
447
  initialSharedVersion: "1",
453
448
  });
@@ -481,7 +476,7 @@ class ScallopAdapter {
481
476
  */
482
477
  async borrow(tx, coinType, amount, userAddress, _skipOracle) {
483
478
  this.ensureInitialized();
484
- const normalized = (0, utils_2.normalizeCoinType)(coinType);
479
+ const normalized = normalizeCoinType(coinType);
485
480
  const obligations = await this.query.getObligations(userAddress);
486
481
  // Check if we have a pending obligation from deposit in same transaction
487
482
  if (obligations.length === 0 &&
@@ -517,8 +512,8 @@ class ScallopAdapter {
517
512
  /**
518
513
  * Repay debt to obligation
519
514
  *
520
- * Note: Repay is typically NOT locked by borrow incentive, so this
521
- * should work even on locked obligations.
515
+ * IMPORTANT: Repay operations also require the obligation to be unlocked!
516
+ * This method automatically unstakes locked obligations before repaying.
522
517
  *
523
518
  * @param tx - Transaction to add calls to
524
519
  * @param coinType - Type of coin to repay
@@ -527,17 +522,39 @@ class ScallopAdapter {
527
522
  */
528
523
  async repay(tx, coinType, coin, userAddress) {
529
524
  this.ensureInitialized();
530
- const normalized = (0, utils_2.normalizeCoinType)(coinType);
525
+ const normalized = normalizeCoinType(coinType);
531
526
  const obligations = await this.query.getObligations(userAddress);
532
527
  if (obligations.length === 0) {
533
528
  throw new Error("No obligation found for repayment");
534
529
  }
535
- const obligationId = obligations[0].id;
530
+ const obligation = obligations[0];
531
+ const obligationId = obligation.id;
532
+ const obligationKeyId = obligation.keyId;
533
+ const isLocked = obligation.locked;
534
+ // Auto-unstake if obligation is locked (required for repay operations)
535
+ if (isLocked) {
536
+ this.unstakeObligation(tx, obligationId, obligationKeyId);
537
+ }
536
538
  this.repayDebt(tx, tx.object(obligationId), coin, normalized);
537
539
  }
538
- async refreshOracles(_tx, _coinTypes, _userAddress) {
539
- // Scallop oracle refresh is embedded in borrow/withdraw calls via xOracle
540
- // No separate refresh needed for basic operations
540
+ async refreshOracles(tx, coinTypes, _userAddress) {
541
+ this.ensureInitialized();
542
+ // Convert coinTypes to Scallop coin names
543
+ const coinNames = coinTypes
544
+ .map((ct) => {
545
+ const normalized = normalizeCoinType(ct);
546
+ return this.coinTypeToNameMap[normalized];
547
+ })
548
+ .filter(Boolean);
549
+ if (coinNames.length === 0)
550
+ return;
551
+ // Create Scallop builder and inject existing Transaction into its txBlock.
552
+ // This makes updateAssetPricesQuick() append oracle refresh commands
553
+ // directly into the provided PTB.
554
+ const builder = await this.scallop.createScallopBuilder();
555
+ const scallopTx = builder.createTxBlock();
556
+ scallopTx.txBlock = tx;
557
+ await scallopTx.updateAssetPricesQuick(coinNames);
541
558
  }
542
559
  /**
543
560
  * Get all obligations for a user with their locked status
@@ -570,11 +587,11 @@ class ScallopAdapter {
570
587
  return null;
571
588
  const oblData = obligationData;
572
589
  const collaterals = (oblData.collaterals || []).map((col) => ({
573
- coinType: (0, utils_2.normalizeCoinType)(col.coinType || col.type || ""),
590
+ coinType: normalizeCoinType(col.coinType || col.type?.name || ""),
574
591
  amount: String(col.amount || col.depositAmount || 0),
575
592
  }));
576
593
  const debts = (oblData.debts || []).map((d) => ({
577
- coinType: (0, utils_2.normalizeCoinType)(d.coinType || d.type || ""),
594
+ coinType: normalizeCoinType(d.coinType || d.type?.name || ""),
578
595
  amount: String(d.amount || d.borrowAmount || 0),
579
596
  }));
580
597
  return {
@@ -586,7 +603,7 @@ class ScallopAdapter {
586
603
  async getAccountPortfolio(address) {
587
604
  this.ensureInitialized();
588
605
  const emptyPortfolio = {
589
- protocol: types_1.LendingProtocol.Scallop,
606
+ protocol: LendingProtocol.Scallop,
590
607
  address,
591
608
  healthFactor: Infinity,
592
609
  netValueUsd: 0,
@@ -607,15 +624,15 @@ class ScallopAdapter {
607
624
  const collaterals = oblData.collaterals || [];
608
625
  const debts = oblData.debts || [];
609
626
  for (const col of collaterals) {
610
- const coinType = (0, utils_2.normalizeCoinType)(col.coinType || col.type || "");
611
- const reserve = (0, const_1.getReserveByCoinType)(coinType);
627
+ const coinType = normalizeCoinType(col.coinType || col.type?.name || "");
628
+ const reserve = getReserveByCoinType(coinType);
612
629
  const decimals = reserve?.decimals || 9;
613
630
  const amount = Number(col.amount || col.depositAmount || 0) / Math.pow(10, decimals);
614
- const price = await (0, sdk_ts_1.getTokenPrice)(coinType);
631
+ const price = await getTokenPrice(coinType);
615
632
  const valueUsd = amount * price;
616
633
  totalCollateralUsd += valueUsd;
617
634
  positions.push({
618
- protocol: types_1.LendingProtocol.Scallop,
635
+ protocol: LendingProtocol.Scallop,
619
636
  coinType,
620
637
  symbol: reserve?.symbol || "UNKNOWN",
621
638
  side: "supply",
@@ -625,15 +642,15 @@ class ScallopAdapter {
625
642
  });
626
643
  }
627
644
  for (const d of debts) {
628
- const coinType = (0, utils_2.normalizeCoinType)(d.coinType || d.type || "");
629
- const reserve = (0, const_1.getReserveByCoinType)(coinType);
645
+ const coinType = normalizeCoinType(d.coinType || d.type?.name || "");
646
+ const reserve = getReserveByCoinType(coinType);
630
647
  const decimals = reserve?.decimals || 6;
631
648
  const amount = Number(d.amount || d.borrowAmount || 0) / Math.pow(10, decimals);
632
- const price = await (0, sdk_ts_1.getTokenPrice)(coinType);
649
+ const price = await getTokenPrice(coinType);
633
650
  const valueUsd = amount * price;
634
651
  totalDebtUsd += valueUsd;
635
652
  positions.push({
636
- protocol: types_1.LendingProtocol.Scallop,
653
+ protocol: LendingProtocol.Scallop,
637
654
  coinType,
638
655
  symbol: reserve?.symbol || "USDC",
639
656
  side: "borrow",
@@ -643,7 +660,7 @@ class ScallopAdapter {
643
660
  });
644
661
  }
645
662
  return {
646
- protocol: types_1.LendingProtocol.Scallop,
663
+ protocol: LendingProtocol.Scallop,
647
664
  address,
648
665
  healthFactor: totalDebtUsd > 0 ? totalCollateralUsd / totalDebtUsd : Infinity,
649
666
  netValueUsd: totalCollateralUsd - totalDebtUsd,
@@ -662,7 +679,7 @@ class ScallopAdapter {
662
679
  * @returns Scallop coin name (e.g., "sui") or undefined if not found
663
680
  */
664
681
  getCoinNameFromType(coinType) {
665
- const normalized = (0, utils_2.normalizeCoinType)(coinType);
682
+ const normalized = normalizeCoinType(coinType);
666
683
  return this.coinTypeToNameMap[normalized];
667
684
  }
668
685
  /**
@@ -767,6 +784,146 @@ class ScallopAdapter {
767
784
  this.ensureInitialized();
768
785
  return this.suiClient;
769
786
  }
787
+ /**
788
+ * Get asset risk parameters for leverage calculations
789
+ *
790
+ * Queries on-chain risk_models table directly from the Scallop Market object,
791
+ * bypassing the SDK's buggy queryMarket() (isLayerZeroAsset crash).
792
+ *
793
+ * On-chain layout:
794
+ * Market → risk_models (Table) → [TypeName key] → RiskModel
795
+ * RiskModel fields are FixedPoint32 (u64 / 2^32 → 0-1 decimal)
796
+ */
797
+ async getAssetRiskParams(coinType) {
798
+ this.ensureInitialized();
799
+ const FALLBACK = {
800
+ ltv: 0.5,
801
+ liquidationThreshold: 0.6,
802
+ liquidationBonus: 0.05,
803
+ maxMultiplier: 2.0,
804
+ };
805
+ const normalized = normalizeCoinType(coinType);
806
+ try {
807
+ // Step 1: Get risk_models table ID from Market object
808
+ const marketObj = await this.suiClient.getObject({
809
+ id: this.coreAddresses.market,
810
+ options: { showContent: true },
811
+ });
812
+ const marketFields = marketObj.data?.content?.fields;
813
+ const riskModelTableId = marketFields?.risk_models?.fields?.table?.fields?.id?.id;
814
+ if (!riskModelTableId)
815
+ return FALLBACK;
816
+ // Step 2: Query risk model for the coin type
817
+ // Dynamic field key: coin type without "0x" prefix
818
+ const coinTypeKey = normalized.startsWith("0x")
819
+ ? normalized.slice(2)
820
+ : normalized;
821
+ const resp = await this.suiClient.getDynamicFieldObject({
822
+ parentId: riskModelTableId,
823
+ name: {
824
+ type: "0x1::type_name::TypeName",
825
+ value: { name: coinTypeKey },
826
+ },
827
+ });
828
+ const rm = resp.data?.content?.fields?.value?.fields;
829
+ if (!rm)
830
+ return FALLBACK;
831
+ // Step 3: Parse FixedPoint32 values (u64 / 2^32)
832
+ const DIVISOR = 2 ** 32;
833
+ const ltv = Number(rm.collateral_factor?.fields?.value) / DIVISOR;
834
+ const liquidationThreshold = Number(rm.liquidation_factor?.fields?.value) / DIVISOR;
835
+ const liquidationBonus = Number(rm.liquidation_discount?.fields?.value) / DIVISOR;
836
+ if (isNaN(ltv) || ltv <= 0 || ltv >= 1)
837
+ return FALLBACK;
838
+ const maxMultiplier = 1 / (1 - ltv);
839
+ return {
840
+ ltv,
841
+ liquidationThreshold,
842
+ liquidationBonus,
843
+ maxMultiplier,
844
+ };
845
+ }
846
+ catch {
847
+ return FALLBACK;
848
+ }
849
+ }
850
+ /**
851
+ * Get current supply/borrow APY for an asset.
852
+ *
853
+ * Uses Scallop's queryMarket() which returns pool data including:
854
+ * - supplyApr / supplyApy: computed from the interest rate model
855
+ * - borrowApr / borrowApy: current borrow rate
856
+ * - spool reward APY is included when available from query
857
+ */
858
+ async getAssetApy(coinType) {
859
+ this.ensureInitialized();
860
+ const normalized = normalizeCoinType(coinType);
861
+ const coinName = this.coinTypeToNameMap[normalized];
862
+ if (!coinName) {
863
+ throw new Error(`Scallop: coin type not found in mapping: ${normalized}`);
864
+ }
865
+ try {
866
+ // Bypass an SDK bug in isLayerZeroAsset by calling the indexer directly.
867
+ // query.indexer.getMarketPool fetches from Scallop REST API (/api/market/migrate)
868
+ // without going through the broken ScallopUtils code path.
869
+ const pool = await this.query.indexer.getMarketPool(coinName);
870
+ if (!pool) {
871
+ throw new Error(`Scallop: market pool not found for ${coinName}`);
872
+ }
873
+ // Scallop SDK calculates these from the interest rate model + utilization
874
+ // Values are 0-1 decimals already (e.g., 0.05 = 5%)
875
+ // pool.borrowApy from the indexer is the base (gross) borrow rate.
876
+ const supplyApy = pool.supplyApy ?? 0;
877
+ const grossBorrowApy = pool.borrowApy ?? 0;
878
+ // Spool supply reward APY if available
879
+ const rewardApy = pool.rewardApy ?? 0;
880
+ // Borrow incentive rewards (sSUI, sSCA, ...) reduce the effective borrow cost.
881
+ // The REST API returns pool.rewards[] where each entry has rewardApr (0-1 decimal).
882
+ // The SDK getBorrowIncentivePool() has an internal bug, so we fetch directly from
883
+ // the Scallop REST API as a reliable fallback.
884
+ let borrowRewardApy = 0;
885
+ try {
886
+ let rewards = [];
887
+ // Try SDK indexer first
888
+ try {
889
+ const borrowIncentivePool = await this.query.indexer.getBorrowIncentivePool(coinName);
890
+ rewards =
891
+ borrowIncentivePool?.rewards ??
892
+ Object.values(borrowIncentivePool?.points ?? {});
893
+ }
894
+ catch {
895
+ // SDK failed — fall through to REST API fetch
896
+ }
897
+ // Fallback: fetch REST API directly (handles SDK getBorrowIncentivePools bug)
898
+ if (rewards.length === 0) {
899
+ const resp = await fetch("https://sdk.api.scallop.io/api/borrowIncentivePools/migrate");
900
+ if (resp.ok) {
901
+ const data = await resp.json();
902
+ const pool = Object.values(data).find((p) => p?.coinName === coinName);
903
+ rewards = pool?.rewards ?? [];
904
+ }
905
+ }
906
+ for (const reward of rewards) {
907
+ if (reward && typeof reward.rewardApr === "number") {
908
+ borrowRewardApy += reward.rewardApr;
909
+ }
910
+ }
911
+ }
912
+ catch {
913
+ // borrow incentive data unavailable — use 0
914
+ }
915
+ return {
916
+ supplyApy,
917
+ rewardApy,
918
+ totalSupplyApy: supplyApy + rewardApy,
919
+ // Net borrow cost: gross APR minus borrow incentive rebates
920
+ borrowApy: Math.max(0, grossBorrowApy - borrowRewardApy),
921
+ borrowRewardApy,
922
+ };
923
+ }
924
+ catch (err) {
925
+ throw new Error(`Scallop: failed to get APY for ${coinName}: ${err}`);
926
+ }
927
+ }
770
928
  }
771
- exports.ScallopAdapter = ScallopAdapter;
772
- //# sourceMappingURL=scallop.js.map
929
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/protocols/scallop/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAgB,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAML,cAAc,EAEd,eAAe,GAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,aAAa,EACb,qBAAqB,GAItB,MAAM,SAAS,CAAC;AAEjB,wCAAwC;AACxC,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAA3B;QACW,SAAI,GAAG,SAAS,CAAC;QAE1B;;;;WAIG;QACM,0BAAqB,GAAG,KAAK,CAAC;QAK/B,gBAAW,GAAG,KAAK,CAAC;QAOpB,sBAAiB,GAA2B,EAAE,CAAC;QAC/C,sBAAiB,GAA2B,EAAE,CAAC;QAEvD;;;;;;;;;WASG;QACK,sBAAiB,GAAQ,IAAI,CAAC;QAC9B,yBAAoB,GAAQ,IAAI,CAAC;QACjC,qBAAgB,GAAQ,IAAI,CAAC;QAC7B,uBAAkB,GAAkB,IAAI,CAAC;QAEjD;;;WAGG;QACK,6BAAwB,GAAgB,IAAI,GAAG,EAAE,CAAC;IA2kC5D,CAAC;IAzkCC,KAAK,CAAC,UAAU,CAAC,SAAoB;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,yBAAyB;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACrD,oFAAoF;QACpF,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAExB,sEAAsE;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAElC,sBAAsB;QACtB,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;YAC9C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAc;QACtC,0BAA0B;QAC1B,IAAI,CAAC,aAAa,GAAG;YACnB,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE;YACxD,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO;YAC/B,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM;YAC7B,oBAAoB,EAAE,SAAS,CAAC,IAAI,CAAC,oBAAoB;YACzD,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YACvC,qBAAqB,EAAE,SAAS,CAAC,IAAI,CAAC,qBAAqB;SAC5D,CAAC;QAEF,6BAA6B;QAC7B,IAAI,CAAC,wBAAwB,GAAG;YAC9B,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,EAAE;YACjC,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,MAAM;YACxC,cAAc,EAAE,SAAS,CAAC,eAAe,CAAC,cAAc;YACxD,iBAAiB,EAAE,SAAS,CAAC,eAAe,CAAC,iBAAiB;SAC/D,CAAC;QAEF,kBAAkB;QAClB,IAAI,CAAC,cAAc,GAAG;YACpB,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;YAC9B,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ;YAClC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK;YAC5B,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS;YACpC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC,aAAa;SAC7C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QAKV,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,eAAe,EAAE,IAAI,CAAC,wBAAwB;YAC9C,KAAK,EAAE,IAAI,CAAC,cAAc;SAC3B,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,+EAA+E;IAC/E,8CAA8C;IAC9C,+EAA+E;IAE/E,KAAK,CAAC,WAAW,CAAC,WAAmB;QACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,WAAW,GAAI,UAAkB,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAI,UAAkB,CAAC,KAAK,IAAI,EAAE,CAAC;QAElD,6BAA6B;QAC7B,MAAM,QAAQ,GAAoB,MAAM,OAAO,CAAC,GAAG,CACjD,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAQ,EAAE,EAAE;YACjC,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO;gBACL,MAAM;gBACN,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;gBACnE,QAAQ;gBACR,QAAQ;gBACR,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK;aAC5D,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,6BAA6B;QAC7B,MAAM,UAAU,GAAoB,MAAM,OAAO,CAAC,GAAG,CACnD,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAM,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACrD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO;gBACL,MAAM;gBACN,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM;gBACjC,QAAQ;gBACR,QAAQ;gBACR,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK;aAC5D,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,iCAAiC;QACjC,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACpF,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEpE,OAAO;YACL,UAAU;YACV,IAAI,EAAE,IAAI,IAAI;gBACZ,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,cAAc;gBACxB,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,CAAC;aACZ;YACD,QAAQ;YACR,OAAO,EAAE,UAAU;YACnB,WAAW,EAAE,cAAc,GAAG,YAAY;SAC3C,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,8DAA8D;IAC9D,+EAA+E;IAE/E;;OAEG;IACK,cAAc,CAAC,EAAe;QACpC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,oCAAoC;YAC7E,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SACnD,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,EAAe,EACf,UAAe,EACf,SAAc;QAEd,EAAE,CAAC,QAAQ,CAAC;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,sCAAsC;YAC/E,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CACnB,EAAe,EACf,UAAe,EACf,IAAS,EACT,QAAgB;QAEhB,EAAE,CAAC,QAAQ,CAAC;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,0CAA0C;YACnF,aAAa,EAAE,CAAC,QAAQ,CAAC;YACzB,SAAS,EAAE;gBACT,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACrC,UAAU;gBACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBACpC,IAAI;aACL;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,oBAAoB,CAC1B,EAAe,EACf,UAAe,EACf,aAAkB,EAClB,MAAc,EACd,QAAgB;QAEhB,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC;YAClC,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,KAAK;YACd,oBAAoB,EAAE,GAAG;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,kBAAkB;YAC3D,aAAa,EAAE,CAAC,QAAQ,CAAC;YACzB,SAAS,EAAE;gBACT,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACrC,UAAU;gBACV,aAAa;gBACb,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBACpC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC;gBAClD,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;gBACnB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACrC,QAAQ;aACT;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,SAAS,CACf,EAAe,EACf,UAAe,EACf,IAAS,EACT,QAAgB;QAEhB,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC;YAClC,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,KAAK;YACd,oBAAoB,EAAE,GAAG;SAC1B,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,gBAAgB;YACzD,aAAa,EAAE,CAAC,QAAQ,CAAC;YACzB,SAAS,EAAE;gBACT,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACrC,UAAU;gBACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBACpC,IAAI;gBACJ,QAAQ;aACT;SACF,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,6DAA6D;IAC7D,+EAA+E;IAE/E;;;;;;;;OAQG;IACH,iBAAiB,CACf,EAAe,EACf,YAAoB,EACpB,eAAuB;QAEvB,uCAAuC;QACvC,IAAI,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC;YAClC,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,KAAK;YACd,oBAAoB,EAAE,GAAG;SAC1B,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,oBAAoB;YAChE,SAAS,EAAE;gBACT,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;gBAC/C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;gBACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;gBAC1D,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC1B,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;gBACvB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;gBACxC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;gBAC5C,QAAQ;aACT;SACF,CAAC,CAAC;QAEH,+BAA+B;QAC/B,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,eAAe,CACb,EAAe,EACf,YAAoB,EACpB,eAAuB;QAEvB,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC;YAClC,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,KAAK;YACd,oBAAoB,EAAE,GAAG;SAC1B,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,eAAe;YAC3D,SAAS,EAAE;gBACT,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;gBAC/C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;gBACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;gBAC1D,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC1B,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;gBACvB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;gBACnD,QAAQ;aACT;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QAC3C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAC9C,EAAE,EAAE,YAAY;YAChB,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;SAC/B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,KAAK,YAAY,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAa,CAAC;YACnD,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB;QACf,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC;IACzC,CAAC;IAED,+EAA+E;IAC/E,kCAAkC;IAClC,+EAA+E;IAE/E,KAAK,CAAC,OAAO,CACX,EAAe,EACf,IAAS,EACT,QAAgB,EAChB,WAAmB;QAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,0BAA0B;YAC1B,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,0EAA0E;YAC1E,6DAA6D;YAC7D,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAErD,kDAAkD;YAClD,+DAA+D;YAC/D,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;YACpC,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC;YAC1C,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAClC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,QAAQ,CACZ,EAAe,EACf,QAAgB,EAChB,MAAc,EACd,WAAmB;QAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;QAEnC,oEAAoE;QACpE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC;YAClC,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,KAAK;YACd,oBAAoB,EAAE,GAAG;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,4CAA4C;YACrF,aAAa,EAAE,CAAC,UAAU,CAAC;YAC3B,SAAS,EAAE;gBACT,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACrC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;gBACvB,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC1B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBACpC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC;gBAClD,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACrC,QAAQ;aACT;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,CACV,EAAe,EACf,QAAgB,EAChB,MAAc,EACd,WAAmB,EACnB,WAAqB;QAErB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjE,yEAAyE;QACzE,IACE,WAAW,CAAC,MAAM,KAAK,CAAC;YACxB,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,oBAAoB;YACzB,IAAI,CAAC,gBAAgB,EACrB,CAAC;YACD,6DAA6D;YAC7D,0DAA0D;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CACtC,EAAE,EACF,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,oBAAoB,EACzB,MAAM,CAAC,MAAM,CAAC,EACd,UAAU,CACX,CAAC;YAEF,iEAAiE;YACjE,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzE,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,kBAAmB,CAAC,CAAC;YAE1E,gCAAgC;YAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAE/B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;QAEnC,oEAAoE;QACpE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,oBAAoB,CAC9B,EAAE,EACF,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EACvB,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAC1B,MAAM,CAAC,MAAM,CAAC,EACd,UAAU,CACX,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,KAAK,CACT,EAAe,EACf,QAAgB,EAChB,IAAS,EACT,WAAmB;QAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;QAEnC,uEAAuE;QACvE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,EAAe,EACf,SAAmB,EACnB,YAAoB;QAEpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,0CAA0C;QAC1C,MAAM,SAAS,GAAG,SAAS;aACxB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACV,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEnC,2EAA2E;QAC3E,qEAAqE;QACrE,kCAAkC;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1C,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;QAEvB,MAAM,SAAS,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,WAAmB;QAOtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK;SAC1B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,YAAoB;QAW7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;SACtC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,OAAO,GAAG,cAAqB,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YACjE,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACjE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;SACrD,CAAC,CAAC,CAAC;QAEJ,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACnD,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YAC7D,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;SAChD,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,WAAW;YACX,KAAK;YACL,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,cAAc,GAAqB;YACvC,QAAQ,EAAE,eAAe,CAAC,OAAO;YACjC,OAAO;YACP,YAAY,EAAE,QAAQ;YACtB,WAAW,EAAE,CAAC;YACd,kBAAkB,EAAE,CAAC;YACrB,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,EAAE;SACd,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC;QAEpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU;YAAE,OAAO,cAAc,CAAC;QAEvC,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,MAAM,OAAO,GAAG,UAAiB,CAAC;QAClC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAElC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GACV,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;YAEhC,kBAAkB,IAAI,QAAQ,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC;gBACb,QAAQ,EAAE,eAAe,CAAC,OAAO;gBACjC,QAAQ;gBACR,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,SAAS;gBACpC,IAAI,EAAE,QAAQ;gBACd,MAAM;gBACN,QAAQ;gBACR,GAAG,EAAE,CAAC;aACP,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GACV,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;YAEhC,YAAY,IAAI,QAAQ,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC;gBACb,QAAQ,EAAE,eAAe,CAAC,OAAO;gBACjC,QAAQ;gBACR,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM;gBACjC,IAAI,EAAE,QAAQ;gBACd,MAAM;gBACN,QAAQ;gBACR,GAAG,EAAE,CAAC;aACP,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,eAAe,CAAC,OAAO;YACjC,OAAO;YACP,YAAY,EACV,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ;YACjE,WAAW,EAAE,kBAAkB,GAAG,YAAY;YAC9C,kBAAkB;YAClB,YAAY;YACZ,SAAS;SACV,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,kCAAkC;IAClC,+EAA+E;IAE/E;;;;;OAKG;IACH,mBAAmB,CAAC,QAAgB;QAClC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACH,aAAa;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,eAAe;QACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,WAAmB;QAO5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxD,IACE,OAAO;gBACP,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAC5D,CAAC;gBACD,OAAO;oBACL,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,yBAAyB,CAC7B,EAAe,EACf,WAAmB;QAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAElC,gEAAgE;QAChE,8DAA8D;QAC9D,gEAAgE;QAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,yCAAyC;YACzC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAoB;YAChC,GAAG,EAAE,GAAG;YACR,oBAAoB,EAAE,GAAG;YACzB,gBAAgB,EAAE,IAAI;YACtB,aAAa,EAAE,GAAG;SACnB,CAAC;QAEF,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,sDAAsD;YACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBAC/C,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;gBAC7B,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;aAC/B,CAAC,CAAC;YACH,MAAM,YAAY,GAAI,SAAS,CAAC,IAAI,EAAE,OAAe,EAAE,MAAM,CAAC;YAC9D,MAAM,gBAAgB,GACpB,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC3D,IAAI,CAAC,gBAAgB;gBAAE,OAAO,QAAQ,CAAC;YAEvC,6CAA6C;YAC7C,mDAAmD;YACnD,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC7C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrB,CAAC,CAAC,UAAU,CAAC;YAEf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;gBACtD,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE;oBACJ,IAAI,EAAE,0BAA0B;oBAChC,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;iBAC7B;aACF,CAAC,CAAC;YAEH,MAAM,EAAE,GAAI,IAAI,CAAC,IAAI,EAAE,OAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;YAC9D,IAAI,CAAC,EAAE;gBAAE,OAAO,QAAQ,CAAC;YAEzB,iDAAiD;YACjD,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;YAClE,MAAM,oBAAoB,GACxB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;YACzD,MAAM,gBAAgB,GACpB,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;YAE3D,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBAAE,OAAO,QAAQ,CAAC;YAExD,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAEpC,OAAO;gBACL,GAAG;gBACH,oBAAoB;gBACpB,gBAAgB;gBAChB,aAAa;aACd,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC;YACH,yEAAyE;YACzE,kFAAkF;YAClF,2DAA2D;YAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE9D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,0EAA0E;YAC1E,oDAAoD;YACpD,mEAAmE;YACnE,MAAM,SAAS,GAAW,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAW,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YAEnD,uCAAuC;YACvC,MAAM,SAAS,GAAY,IAAY,CAAC,SAAS,IAAI,CAAC,CAAC;YAEvD,+EAA+E;YAC/E,oFAAoF;YACpF,kFAAkF;YAClF,+CAA+C;YAC/C,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,OAAO,GAAU,EAAE,CAAC;gBAExB,wBAAwB;gBACxB,IAAI,CAAC;oBACH,MAAM,mBAAmB,GACvB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;oBAC5D,OAAO;wBACJ,mBAA2B,EAAE,OAAO;4BACrC,MAAM,CAAC,MAAM,CAAE,mBAA2B,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBAAC,MAAM,CAAC;oBACP,8CAA8C;gBAChD,CAAC;gBAED,8EAA8E;gBAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB,6DAA6D,CAC9D,CAAC;oBACF,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;wBACZ,MAAM,IAAI,GAAwB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;wBACpD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CACnC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CACrC,CAAC;wBACF,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;oBAChC,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;wBACnD,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;YAC9C,CAAC;YAED,OAAO;gBACL,SAAS;gBACT,SAAS;gBACT,cAAc,EAAE,SAAS,GAAG,SAAS;gBACrC,4DAA4D;gBAC5D,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC;gBACxD,eAAe;aAChB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;CACF"}