@geotechcli/core 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/agents/brain.d.ts +39 -0
  2. package/dist/agents/brain.d.ts.map +1 -0
  3. package/dist/agents/brain.js +339 -0
  4. package/dist/agents/brain.js.map +1 -0
  5. package/dist/agents/bridge-tools.d.ts +2 -0
  6. package/dist/agents/bridge-tools.d.ts.map +1 -0
  7. package/dist/agents/bridge-tools.js +170 -0
  8. package/dist/agents/bridge-tools.js.map +1 -0
  9. package/dist/agents/data-tools.d.ts +2 -0
  10. package/dist/agents/data-tools.d.ts.map +1 -0
  11. package/dist/agents/data-tools.js +309 -0
  12. package/dist/agents/data-tools.js.map +1 -0
  13. package/dist/agents/filesystem-tools.d.ts +2 -0
  14. package/dist/agents/filesystem-tools.d.ts.map +1 -0
  15. package/dist/agents/filesystem-tools.js +267 -0
  16. package/dist/agents/filesystem-tools.js.map +1 -0
  17. package/dist/agents/guardrails.d.ts +17 -0
  18. package/dist/agents/guardrails.d.ts.map +1 -0
  19. package/dist/agents/guardrails.js +260 -0
  20. package/dist/agents/guardrails.js.map +1 -0
  21. package/dist/agents/orchestrator.d.ts +9 -0
  22. package/dist/agents/orchestrator.d.ts.map +1 -0
  23. package/dist/agents/orchestrator.js +136 -0
  24. package/dist/agents/orchestrator.js.map +1 -0
  25. package/dist/agents/safety.d.ts +9 -0
  26. package/dist/agents/safety.d.ts.map +1 -0
  27. package/dist/agents/safety.js +40 -0
  28. package/dist/agents/safety.js.map +1 -0
  29. package/dist/agents/sandbox.d.ts +34 -0
  30. package/dist/agents/sandbox.d.ts.map +1 -0
  31. package/dist/agents/sandbox.js +235 -0
  32. package/dist/agents/sandbox.js.map +1 -0
  33. package/dist/agents/swarm.d.ts +25 -0
  34. package/dist/agents/swarm.d.ts.map +1 -0
  35. package/dist/agents/swarm.js +434 -0
  36. package/dist/agents/swarm.js.map +1 -0
  37. package/dist/agents/tools.d.ts +37 -0
  38. package/dist/agents/tools.d.ts.map +1 -0
  39. package/dist/agents/tools.js +451 -0
  40. package/dist/agents/tools.js.map +1 -0
  41. package/dist/bridge/index.d.ts +52 -0
  42. package/dist/bridge/index.d.ts.map +1 -0
  43. package/dist/bridge/index.js +195 -0
  44. package/dist/bridge/index.js.map +1 -0
  45. package/dist/config/index.d.ts +106 -0
  46. package/dist/config/index.d.ts.map +1 -0
  47. package/dist/config/index.js +217 -0
  48. package/dist/config/index.js.map +1 -0
  49. package/dist/db/index.d.ts +4 -0
  50. package/dist/db/index.d.ts.map +1 -0
  51. package/dist/db/index.js +4 -0
  52. package/dist/db/index.js.map +1 -0
  53. package/dist/db/redis.d.ts +14 -0
  54. package/dist/db/redis.d.ts.map +1 -0
  55. package/dist/db/redis.js +204 -0
  56. package/dist/db/redis.js.map +1 -0
  57. package/dist/db/supabase.d.ts +57 -0
  58. package/dist/db/supabase.d.ts.map +1 -0
  59. package/dist/db/supabase.js +156 -0
  60. package/dist/db/supabase.js.map +1 -0
  61. package/dist/db/users.d.ts +50 -0
  62. package/dist/db/users.d.ts.map +1 -0
  63. package/dist/db/users.js +132 -0
  64. package/dist/db/users.js.map +1 -0
  65. package/dist/export/index.d.ts +51 -0
  66. package/dist/export/index.d.ts.map +1 -0
  67. package/dist/export/index.js +126 -0
  68. package/dist/export/index.js.map +1 -0
  69. package/dist/geo/bearing-capacity.d.ts +60 -0
  70. package/dist/geo/bearing-capacity.d.ts.map +1 -0
  71. package/dist/geo/bearing-capacity.js +195 -0
  72. package/dist/geo/bearing-capacity.js.map +1 -0
  73. package/dist/geo/classification.d.ts +107 -0
  74. package/dist/geo/classification.d.ts.map +1 -0
  75. package/dist/geo/classification.js +261 -0
  76. package/dist/geo/classification.js.map +1 -0
  77. package/dist/geo/index.d.ts +9 -0
  78. package/dist/geo/index.d.ts.map +1 -0
  79. package/dist/geo/index.js +9 -0
  80. package/dist/geo/index.js.map +1 -0
  81. package/dist/geo/lateral-earth-pressure.d.ts +75 -0
  82. package/dist/geo/lateral-earth-pressure.d.ts.map +1 -0
  83. package/dist/geo/lateral-earth-pressure.js +219 -0
  84. package/dist/geo/lateral-earth-pressure.js.map +1 -0
  85. package/dist/geo/liquefaction.d.ts +65 -0
  86. package/dist/geo/liquefaction.d.ts.map +1 -0
  87. package/dist/geo/liquefaction.js +163 -0
  88. package/dist/geo/liquefaction.js.map +1 -0
  89. package/dist/geo/pile-capacity.d.ts +91 -0
  90. package/dist/geo/pile-capacity.d.ts.map +1 -0
  91. package/dist/geo/pile-capacity.js +233 -0
  92. package/dist/geo/pile-capacity.js.map +1 -0
  93. package/dist/geo/settlement.d.ts +119 -0
  94. package/dist/geo/settlement.d.ts.map +1 -0
  95. package/dist/geo/settlement.js +184 -0
  96. package/dist/geo/settlement.js.map +1 -0
  97. package/dist/geo/slope-stability.d.ts +82 -0
  98. package/dist/geo/slope-stability.d.ts.map +1 -0
  99. package/dist/geo/slope-stability.js +214 -0
  100. package/dist/geo/slope-stability.js.map +1 -0
  101. package/dist/geo/tunnel/index.d.ts +2 -0
  102. package/dist/geo/tunnel/index.d.ts.map +1 -0
  103. package/dist/geo/tunnel/index.js +2 -0
  104. package/dist/geo/tunnel/index.js.map +1 -0
  105. package/dist/geo/tunnel/tbm.d.ts +135 -0
  106. package/dist/geo/tunnel/tbm.d.ts.map +1 -0
  107. package/dist/geo/tunnel/tbm.js +268 -0
  108. package/dist/geo/tunnel/tbm.js.map +1 -0
  109. package/dist/index.d.ts +20 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +33 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/ingest/ags.d.ts +42 -0
  114. package/dist/ingest/ags.d.ts.map +1 -0
  115. package/dist/ingest/ags.js +133 -0
  116. package/dist/ingest/ags.js.map +1 -0
  117. package/dist/ingest/cpt.d.ts +47 -0
  118. package/dist/ingest/cpt.d.ts.map +1 -0
  119. package/dist/ingest/cpt.js +112 -0
  120. package/dist/ingest/cpt.js.map +1 -0
  121. package/dist/ingest/index.d.ts +3 -0
  122. package/dist/ingest/index.d.ts.map +1 -0
  123. package/dist/ingest/index.js +3 -0
  124. package/dist/ingest/index.js.map +1 -0
  125. package/dist/llm/index.d.ts +5 -0
  126. package/dist/llm/index.d.ts.map +1 -0
  127. package/dist/llm/index.js +4 -0
  128. package/dist/llm/index.js.map +1 -0
  129. package/dist/llm/middleware/metering.d.ts +55 -0
  130. package/dist/llm/middleware/metering.d.ts.map +1 -0
  131. package/dist/llm/middleware/metering.js +191 -0
  132. package/dist/llm/middleware/metering.js.map +1 -0
  133. package/dist/llm/middleware/persistent-usage.d.ts +7 -0
  134. package/dist/llm/middleware/persistent-usage.d.ts.map +1 -0
  135. package/dist/llm/middleware/persistent-usage.js +108 -0
  136. package/dist/llm/middleware/persistent-usage.js.map +1 -0
  137. package/dist/llm/middleware/retry.d.ts +7 -0
  138. package/dist/llm/middleware/retry.d.ts.map +1 -0
  139. package/dist/llm/middleware/retry.js +29 -0
  140. package/dist/llm/middleware/retry.js.map +1 -0
  141. package/dist/llm/providers/anthropic.d.ts +10 -0
  142. package/dist/llm/providers/anthropic.d.ts.map +1 -0
  143. package/dist/llm/providers/anthropic.js +107 -0
  144. package/dist/llm/providers/anthropic.js.map +1 -0
  145. package/dist/llm/providers/hosted-beta.d.ts +10 -0
  146. package/dist/llm/providers/hosted-beta.d.ts.map +1 -0
  147. package/dist/llm/providers/hosted-beta.js +106 -0
  148. package/dist/llm/providers/hosted-beta.js.map +1 -0
  149. package/dist/llm/providers/huggingface.d.ts +37 -0
  150. package/dist/llm/providers/huggingface.d.ts.map +1 -0
  151. package/dist/llm/providers/huggingface.js +133 -0
  152. package/dist/llm/providers/huggingface.js.map +1 -0
  153. package/dist/llm/providers/openai-compatible.d.ts +27 -0
  154. package/dist/llm/providers/openai-compatible.d.ts.map +1 -0
  155. package/dist/llm/providers/openai-compatible.js +99 -0
  156. package/dist/llm/providers/openai-compatible.js.map +1 -0
  157. package/dist/llm/providers/zhipu.d.ts +10 -0
  158. package/dist/llm/providers/zhipu.d.ts.map +1 -0
  159. package/dist/llm/providers/zhipu.js +81 -0
  160. package/dist/llm/providers/zhipu.js.map +1 -0
  161. package/dist/llm/router.d.ts +35 -0
  162. package/dist/llm/router.d.ts.map +1 -0
  163. package/dist/llm/router.js +109 -0
  164. package/dist/llm/router.js.map +1 -0
  165. package/dist/llm/types.d.ts +63 -0
  166. package/dist/llm/types.d.ts.map +1 -0
  167. package/dist/llm/types.js +38 -0
  168. package/dist/llm/types.js.map +1 -0
  169. package/dist/meta/index.d.ts +12 -0
  170. package/dist/meta/index.d.ts.map +1 -0
  171. package/dist/meta/index.js +8 -0
  172. package/dist/meta/index.js.map +1 -0
  173. package/dist/meta/metadata.json +46 -0
  174. package/dist/report/index.d.ts +20 -0
  175. package/dist/report/index.d.ts.map +1 -0
  176. package/dist/report/index.js +58 -0
  177. package/dist/report/index.js.map +1 -0
  178. package/dist/standards/index.d.ts +23 -0
  179. package/dist/standards/index.d.ts.map +1 -0
  180. package/dist/standards/index.js +89 -0
  181. package/dist/standards/index.js.map +1 -0
  182. package/dist/storage/index.d.ts +114 -0
  183. package/dist/storage/index.d.ts.map +1 -0
  184. package/dist/storage/index.js +465 -0
  185. package/dist/storage/index.js.map +1 -0
  186. package/dist/vision/index.d.ts +80 -0
  187. package/dist/vision/index.d.ts.map +1 -0
  188. package/dist/vision/index.js +298 -0
  189. package/dist/vision/index.js.map +1 -0
  190. package/dist/vision/parse.d.ts +20 -0
  191. package/dist/vision/parse.d.ts.map +1 -0
  192. package/dist/vision/parse.js +75 -0
  193. package/dist/vision/parse.js.map +1 -0
  194. package/package.json +55 -0
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ export declare const LiquefactionInputSchema: z.ZodObject<{
3
+ layers: z.ZodArray<z.ZodObject<{
4
+ depth: z.ZodNumber;
5
+ sptN: z.ZodNumber;
6
+ finesContent: z.ZodDefault<z.ZodNumber>;
7
+ unitWeight: z.ZodDefault<z.ZodNumber>;
8
+ waterTableDepth: z.ZodDefault<z.ZodNumber>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ depth: number;
11
+ unitWeight: number;
12
+ waterTableDepth: number;
13
+ sptN: number;
14
+ finesContent: number;
15
+ }, {
16
+ depth: number;
17
+ sptN: number;
18
+ unitWeight?: number | undefined;
19
+ waterTableDepth?: number | undefined;
20
+ finesContent?: number | undefined;
21
+ }>, "many">;
22
+ earthquakeMagnitude: z.ZodNumber;
23
+ pga: z.ZodNumber;
24
+ method: z.ZodDefault<z.ZodEnum<["boulanger-idriss-2014", "nceer"]>>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ method: "boulanger-idriss-2014" | "nceer";
27
+ layers: {
28
+ depth: number;
29
+ unitWeight: number;
30
+ waterTableDepth: number;
31
+ sptN: number;
32
+ finesContent: number;
33
+ }[];
34
+ earthquakeMagnitude: number;
35
+ pga: number;
36
+ }, {
37
+ layers: {
38
+ depth: number;
39
+ sptN: number;
40
+ unitWeight?: number | undefined;
41
+ waterTableDepth?: number | undefined;
42
+ finesContent?: number | undefined;
43
+ }[];
44
+ earthquakeMagnitude: number;
45
+ pga: number;
46
+ method?: "boulanger-idriss-2014" | "nceer" | undefined;
47
+ }>;
48
+ export type LiquefactionInput = z.infer<typeof LiquefactionInputSchema>;
49
+ export interface LiquefactionLayerResult {
50
+ depth: number;
51
+ N160: number;
52
+ N160cs: number;
53
+ CSR: number;
54
+ CRR: number;
55
+ factorOfSafety: number;
56
+ potential: 'LOW' | 'MODERATE' | 'HIGH' | 'SEVERE';
57
+ }
58
+ export interface LiquefactionResult {
59
+ method: string;
60
+ layers: LiquefactionLayerResult[];
61
+ estimatedSettlement: number;
62
+ steps: string[];
63
+ }
64
+ export declare function calculateLiquefaction(input: LiquefactionInput): LiquefactionResult;
65
+ //# sourceMappingURL=liquefaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquefaction.d.ts","sourceRoot":"","sources":["../../src/geo/liquefaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;CACnD;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AA2ID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA4DlF"}
@@ -0,0 +1,163 @@
1
+ import { z } from 'zod';
2
+ // ---------------------------------------------------------------------------
3
+ // Input schemas
4
+ // ---------------------------------------------------------------------------
5
+ export const LiquefactionInputSchema = z.object({
6
+ layers: z.array(z.object({
7
+ depth: z.number().positive().describe('Layer mid-depth (m)'),
8
+ sptN: z.number().nonnegative().describe('Measured SPT N-value'),
9
+ finesContent: z.number().min(0).max(100).default(5).describe('Fines content FC (%)'),
10
+ unitWeight: z.number().positive().default(18).describe('Total unit weight γ (kN/m³)'),
11
+ waterTableDepth: z.number().nonnegative().default(1).describe('Depth to water table (m)'),
12
+ })).min(1),
13
+ earthquakeMagnitude: z.number().min(4).max(9.5).describe('Moment magnitude Mw'),
14
+ pga: z.number().positive().describe('Peak ground acceleration amax (g)'),
15
+ method: z.enum(['boulanger-idriss-2014', 'nceer']).default('boulanger-idriss-2014'),
16
+ });
17
+ // ---------------------------------------------------------------------------
18
+ // SPT corrections
19
+ // ---------------------------------------------------------------------------
20
+ function correctSPT(N, depth, gamma, waterTableDepth) {
21
+ const sigmaV = gamma * depth;
22
+ const u = depth > waterTableDepth ? 9.81 * (depth - waterTableDepth) : 0;
23
+ const sigmaVPrime = Math.max(sigmaV - u, 1);
24
+ // Overburden correction CN (Liao & Whitman 1986)
25
+ const pa = 101.325; // atmospheric pressure kPa
26
+ const CN = Math.min(Math.sqrt(pa / sigmaVPrime), 1.7);
27
+ // Energy ratio correction (assume standard 60% energy)
28
+ const CE = 1.0;
29
+ const CB = 1.0; // standard borehole
30
+ const CR = depth < 3 ? 0.75 : depth < 4 ? 0.8 : depth < 6 ? 0.85 : depth < 10 ? 0.95 : 1.0;
31
+ const CS = 1.0; // standard sampler
32
+ const N160 = N * CN * CE * CB * CR * CS;
33
+ return { N160, sigmaV, sigmaVPrime };
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Fines content correction
37
+ // ---------------------------------------------------------------------------
38
+ function finesCorrection(N160, FC) {
39
+ // Boulanger & Idriss 2014 fines correction
40
+ const deltaN = Math.exp(1.63 + 9.7 / (FC + 0.01) - (15.7 / (FC + 0.01)) ** 2);
41
+ return N160 + deltaN;
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // CSR calculation (simplified procedure)
45
+ // ---------------------------------------------------------------------------
46
+ function calculateCSR(sigmaV, sigmaVPrime, amax, depth) {
47
+ // Stress reduction factor rd (Idriss 1999)
48
+ let rd;
49
+ if (depth <= 9.15) {
50
+ rd = 1.0 - 0.00765 * depth;
51
+ }
52
+ else if (depth <= 23) {
53
+ rd = 1.174 - 0.0267 * depth;
54
+ }
55
+ else {
56
+ rd = 0.744 - 0.008 * depth;
57
+ }
58
+ rd = Math.max(rd, 0.1);
59
+ return 0.65 * (sigmaV / sigmaVPrime) * amax * rd;
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // CRR calculation (Boulanger & Idriss 2014)
63
+ // ---------------------------------------------------------------------------
64
+ function calculateCRR_BI2014(N160cs, Mw) {
65
+ // CRR7.5 from Boulanger & Idriss 2014 deterministic curve
66
+ const x = N160cs / 14.1;
67
+ const CRR75 = Math.exp(x + (x ** 2) / 2.67 - (x ** 3) / 3.0 + (x ** 4) / 4.0 - 2.8);
68
+ // Magnitude scaling factor MSF (Boulanger & Idriss 2014)
69
+ const MSF = 6.9 * Math.exp(-Mw / 4.0) - 0.058;
70
+ const MSFclamped = Math.max(Math.min(MSF, 2.0), 0.8);
71
+ return CRR75 * MSFclamped;
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // CRR calculation (NCEER simplified — Seed et al. 1985 / Youd et al. 2001)
75
+ // ---------------------------------------------------------------------------
76
+ function calculateCRR_NCEER(N160cs, Mw) {
77
+ if (N160cs >= 30) {
78
+ return 99; // too dense to liquefy
79
+ }
80
+ const CRR75 = 1 / (34 - N160cs) +
81
+ N160cs / 135 +
82
+ 50 / (10 * N160cs + 45) ** 2 -
83
+ 1 / 200;
84
+ // MSF (Idriss 1999)
85
+ const MSF = Math.min(Math.pow(10, 2.24) / Math.pow(Mw, 2.56), 2.0);
86
+ return CRR75 * MSF;
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // Settlement estimation (Ishihara & Yoshimine 1992)
90
+ // ---------------------------------------------------------------------------
91
+ function estimateSettlement(layers, thicknesses) {
92
+ let totalSettlement = 0;
93
+ for (let i = 0; i < layers.length; i++) {
94
+ const FS = layers[i].factorOfSafety;
95
+ if (FS >= 1.2)
96
+ continue;
97
+ // Volumetric strain as function of FS
98
+ let epsilonV;
99
+ if (FS < 0.5) {
100
+ epsilonV = 5.0;
101
+ }
102
+ else if (FS < 0.8) {
103
+ epsilonV = 3.0;
104
+ }
105
+ else if (FS < 1.0) {
106
+ epsilonV = 1.5;
107
+ }
108
+ else {
109
+ epsilonV = 0.5;
110
+ }
111
+ totalSettlement += (epsilonV / 100) * (thicknesses[i] ?? 2) * 1000;
112
+ }
113
+ return Math.round(totalSettlement);
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Main calculation
117
+ // ---------------------------------------------------------------------------
118
+ export function calculateLiquefaction(input) {
119
+ const v = LiquefactionInputSchema.parse(input);
120
+ const steps = [];
121
+ const results = [];
122
+ steps.push(`Method: ${v.method === 'boulanger-idriss-2014' ? 'Boulanger & Idriss (2014)' : 'NCEER Simplified (Youd et al. 2001)'}`);
123
+ steps.push(`Mw = ${v.earthquakeMagnitude}, amax = ${v.pga}g`);
124
+ const thicknesses = [];
125
+ for (const layer of v.layers) {
126
+ const { N160, sigmaV, sigmaVPrime } = correctSPT(layer.sptN, layer.depth, layer.unitWeight, layer.waterTableDepth);
127
+ const N160cs = finesCorrection(N160, layer.finesContent);
128
+ const CSR = calculateCSR(sigmaV, sigmaVPrime, v.pga, layer.depth);
129
+ const CRR = v.method === 'boulanger-idriss-2014'
130
+ ? calculateCRR_BI2014(N160cs, v.earthquakeMagnitude)
131
+ : calculateCRR_NCEER(N160cs, v.earthquakeMagnitude);
132
+ const FS = Math.round((CRR / CSR) * 100) / 100;
133
+ let potential;
134
+ if (FS > 1.3)
135
+ potential = 'LOW';
136
+ else if (FS > 1.0)
137
+ potential = 'MODERATE';
138
+ else if (FS > 0.7)
139
+ potential = 'HIGH';
140
+ else
141
+ potential = 'SEVERE';
142
+ results.push({
143
+ depth: layer.depth,
144
+ N160: Math.round(N160 * 10) / 10,
145
+ N160cs: Math.round(N160cs * 10) / 10,
146
+ CSR: Math.round(CSR * 1000) / 1000,
147
+ CRR: Math.round(CRR * 1000) / 1000,
148
+ factorOfSafety: FS,
149
+ potential,
150
+ });
151
+ thicknesses.push(2); // default 2m layer thickness
152
+ steps.push(` z=${layer.depth}m: N₁₆₀=${N160.toFixed(1)}, (N₁)₆₀cs=${N160cs.toFixed(1)}, CSR=${CSR.toFixed(3)}, CRR=${CRR.toFixed(3)}, FS=${FS.toFixed(2)} → ${potential}`);
153
+ }
154
+ const estimatedSettlement = estimateSettlement(results, thicknesses);
155
+ steps.push(`Estimated liquefaction-induced settlement: ${estimatedSettlement} mm`);
156
+ return {
157
+ method: v.method,
158
+ layers: results,
159
+ estimatedSettlement,
160
+ steps,
161
+ };
162
+ }
163
+ //# sourceMappingURL=liquefaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquefaction.js","sourceRoot":"","sources":["../../src/geo/liquefaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { z } from 'zod';
2
+ export declare const PileCapacityInputSchema: z.ZodObject<{
3
+ pileDiameter: z.ZodNumber;
4
+ pileLength: z.ZodNumber;
5
+ pileType: z.ZodDefault<z.ZodEnum<["driven", "bored", "cfa"]>>;
6
+ pileShape: z.ZodDefault<z.ZodEnum<["circular", "square", "h-section"]>>;
7
+ layers: z.ZodArray<z.ZodObject<{
8
+ thickness: z.ZodNumber;
9
+ soilType: z.ZodEnum<["clay", "sand", "silt", "gravel", "rock"]>;
10
+ undrained_shear_strength: z.ZodOptional<z.ZodNumber>;
11
+ friction_angle: z.ZodOptional<z.ZodNumber>;
12
+ unit_weight: z.ZodDefault<z.ZodNumber>;
13
+ spt_n: z.ZodOptional<z.ZodNumber>;
14
+ Ko: z.ZodOptional<z.ZodNumber>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ thickness: number;
17
+ soilType: "rock" | "clay" | "sand" | "silt" | "gravel";
18
+ unit_weight: number;
19
+ undrained_shear_strength?: number | undefined;
20
+ friction_angle?: number | undefined;
21
+ spt_n?: number | undefined;
22
+ Ko?: number | undefined;
23
+ }, {
24
+ thickness: number;
25
+ soilType: "rock" | "clay" | "sand" | "silt" | "gravel";
26
+ undrained_shear_strength?: number | undefined;
27
+ friction_angle?: number | undefined;
28
+ unit_weight?: number | undefined;
29
+ spt_n?: number | undefined;
30
+ Ko?: number | undefined;
31
+ }>, "many">;
32
+ waterTableDepth: z.ZodDefault<z.ZodNumber>;
33
+ factorOfSafety: z.ZodDefault<z.ZodNumber>;
34
+ method: z.ZodDefault<z.ZodEnum<["alpha", "beta", "spt-meyerhof", "auto"]>>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ method: "auto" | "alpha" | "beta" | "spt-meyerhof";
37
+ factorOfSafety: number;
38
+ waterTableDepth: number;
39
+ layers: {
40
+ thickness: number;
41
+ soilType: "rock" | "clay" | "sand" | "silt" | "gravel";
42
+ unit_weight: number;
43
+ undrained_shear_strength?: number | undefined;
44
+ friction_angle?: number | undefined;
45
+ spt_n?: number | undefined;
46
+ Ko?: number | undefined;
47
+ }[];
48
+ pileDiameter: number;
49
+ pileLength: number;
50
+ pileType: "driven" | "bored" | "cfa";
51
+ pileShape: "square" | "circular" | "h-section";
52
+ }, {
53
+ layers: {
54
+ thickness: number;
55
+ soilType: "rock" | "clay" | "sand" | "silt" | "gravel";
56
+ undrained_shear_strength?: number | undefined;
57
+ friction_angle?: number | undefined;
58
+ unit_weight?: number | undefined;
59
+ spt_n?: number | undefined;
60
+ Ko?: number | undefined;
61
+ }[];
62
+ pileDiameter: number;
63
+ pileLength: number;
64
+ method?: "auto" | "alpha" | "beta" | "spt-meyerhof" | undefined;
65
+ factorOfSafety?: number | undefined;
66
+ waterTableDepth?: number | undefined;
67
+ pileType?: "driven" | "bored" | "cfa" | undefined;
68
+ pileShape?: "square" | "circular" | "h-section" | undefined;
69
+ }>;
70
+ export type PileCapacityInput = z.infer<typeof PileCapacityInputSchema>;
71
+ export interface PileCapacityResult {
72
+ method: string;
73
+ pileType: string;
74
+ pileDiameter: number;
75
+ pileLength: number;
76
+ shaftResistance: number;
77
+ baseResistance: number;
78
+ ultimateCapacity: number;
79
+ allowableCapacity: number;
80
+ factorOfSafety: number;
81
+ shaftFrictionPerLayer: Array<{
82
+ depth: number;
83
+ thickness: number;
84
+ soilType: string;
85
+ unitShaftFriction: number;
86
+ shaftResistance: number;
87
+ }>;
88
+ steps: string[];
89
+ }
90
+ export declare function calculatePileCapacity(input: PileCapacityInput): PileCapacityResult;
91
+ //# sourceMappingURL=pile-capacity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pile-capacity.d.ts","sourceRoot":"","sources":["../../src/geo/pile-capacity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,KAAK,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAqDD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAwJlF"}
@@ -0,0 +1,233 @@
1
+ import { z } from 'zod';
2
+ // ---------------------------------------------------------------------------
3
+ // Pile Capacity — Axial capacity of single piles
4
+ //
5
+ // Methods:
6
+ // - α-method (Tomlinson) for cohesive soils (undrained)
7
+ // - β-method (Burland) for cohesionless soils (drained)
8
+ // - SPT-based (Meyerhof 1976) for driven piles in sand/gravel
9
+ // - API RP 2GEO for offshore piles
10
+ //
11
+ // References:
12
+ // - Tomlinson, M.J. (1971). "Some effects of pile driving on skin friction."
13
+ // - Burland, J.B. (1973). "Shaft friction of piles in clay."
14
+ // - Meyerhof, G.G. (1976). "Bearing capacity and settlement of pile foundations."
15
+ // - API RP 2GEO (2014). "Geotechnical and Foundation Design Considerations."
16
+ // - Eurocode 7 (EN 1997-1:2004), Section 7.6
17
+ // ---------------------------------------------------------------------------
18
+ export const PileCapacityInputSchema = z.object({
19
+ pileDiameter: z.number().positive().describe('Pile diameter or width (m)'),
20
+ pileLength: z.number().positive().describe('Embedded pile length L (m)'),
21
+ pileType: z.enum(['driven', 'bored', 'cfa']).default('driven'),
22
+ pileShape: z.enum(['circular', 'square', 'h-section']).default('circular'),
23
+ layers: z.array(z.object({
24
+ thickness: z.number().positive().describe('Layer thickness (m)'),
25
+ soilType: z.enum(['clay', 'sand', 'silt', 'gravel', 'rock']),
26
+ undrained_shear_strength: z.number().min(0).optional().describe('Su or cu (kPa) — for cohesive soils'),
27
+ friction_angle: z.number().min(0).max(50).optional().describe('φ\' (degrees) — for granular soils'),
28
+ unit_weight: z.number().positive().default(18).describe('γ (kN/m³)'),
29
+ spt_n: z.number().min(0).optional().describe('SPT N-value'),
30
+ Ko: z.number().positive().optional().describe('At-rest earth pressure coefficient'),
31
+ })).min(1),
32
+ waterTableDepth: z.number().min(0).default(999).describe('Water table depth (m)'),
33
+ factorOfSafety: z.number().positive().default(2.5),
34
+ method: z.enum(['alpha', 'beta', 'spt-meyerhof', 'auto']).default('auto'),
35
+ });
36
+ function degToRad(deg) {
37
+ return (deg * Math.PI) / 180;
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // α coefficients (Tomlinson 1971, updated API RP 2GEO)
41
+ // ---------------------------------------------------------------------------
42
+ function getAlpha(su, pileType) {
43
+ // API RP 2GEO / Tomlinson correlation
44
+ if (pileType === 'driven') {
45
+ if (su <= 25)
46
+ return 1.0;
47
+ if (su <= 50)
48
+ return 1.0 - 0.5 * (su - 25) / 25;
49
+ if (su <= 100)
50
+ return 0.5;
51
+ if (su <= 200)
52
+ return 0.5 - 0.1 * (su - 100) / 100;
53
+ return 0.4;
54
+ }
55
+ // Bored piles: lower α values
56
+ if (su <= 25)
57
+ return 0.7;
58
+ if (su <= 50)
59
+ return 0.7 - 0.3 * (su - 25) / 25;
60
+ if (su <= 100)
61
+ return 0.4;
62
+ if (su <= 200)
63
+ return 0.4 - 0.1 * (su - 100) / 100;
64
+ return 0.3;
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // β coefficients (Burland 1973)
68
+ // ---------------------------------------------------------------------------
69
+ function getBeta(phi, depth, pileType) {
70
+ const phiRad = degToRad(phi);
71
+ const Ko = 1 - Math.sin(phiRad);
72
+ const KoMultiplier = pileType === 'driven' ? 1.5 : 1.0;
73
+ const delta = pileType === 'driven' ? phi * 0.75 : phi * 0.67; // interface friction
74
+ return KoMultiplier * Ko * Math.tan(degToRad(delta));
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Base bearing capacity factor Nq (Berezantsev 1961)
78
+ // ---------------------------------------------------------------------------
79
+ function getBaseNq(phi) {
80
+ const phiRad = degToRad(phi);
81
+ if (phi === 0)
82
+ return 1;
83
+ return Math.exp(Math.PI * Math.tan(phiRad)) * Math.pow(Math.tan(degToRad(45 + phi / 2)), 2);
84
+ }
85
+ // ---------------------------------------------------------------------------
86
+ // Main calculation
87
+ // ---------------------------------------------------------------------------
88
+ export function calculatePileCapacity(input) {
89
+ const v = PileCapacityInputSchema.parse(input);
90
+ const steps = [];
91
+ const { pileDiameter: D, pileLength: L, pileType, layers, waterTableDepth: gwt, factorOfSafety: FS } = v;
92
+ // Pile geometry
93
+ const Ap = v.pileShape === 'circular'
94
+ ? Math.PI * (D / 2) ** 2
95
+ : v.pileShape === 'square'
96
+ ? D * D
97
+ : D * 0.3; // H-section approximate
98
+ const perimeter = v.pileShape === 'circular'
99
+ ? Math.PI * D
100
+ : v.pileShape === 'square'
101
+ ? 4 * D
102
+ : 2 * (D + 0.3); // H-section approximate
103
+ steps.push(`Pile: ${pileType} ${v.pileShape}, D=${D}m, L=${L}m`);
104
+ steps.push(`Base area Ab=${Ap.toFixed(4)} m², Perimeter P=${perimeter.toFixed(3)} m`);
105
+ // Auto-select method based on dominant soil type
106
+ let method = v.method;
107
+ if (method === 'auto') {
108
+ const dominantSoil = layers.reduce((a, b) => b.thickness > a.thickness ? b : a);
109
+ if (dominantSoil.soilType === 'clay' || dominantSoil.soilType === 'silt') {
110
+ method = 'alpha';
111
+ }
112
+ else if (dominantSoil.spt_n !== undefined) {
113
+ method = 'spt-meyerhof';
114
+ }
115
+ else {
116
+ method = 'beta';
117
+ }
118
+ steps.push(`Auto-selected method: ${method} (dominant soil: ${dominantSoil.soilType})`);
119
+ }
120
+ // Process layers
121
+ let totalShaft = 0;
122
+ let currentDepth = 0;
123
+ const shaftFrictionPerLayer = [];
124
+ for (const layer of layers) {
125
+ const layerBottom = currentDepth + layer.thickness;
126
+ // Only process portion of layer within pile length
127
+ if (currentDepth >= L)
128
+ break;
129
+ const effectiveThickness = Math.min(layer.thickness, L - currentDepth);
130
+ const midDepth = currentDepth + effectiveThickness / 2;
131
+ // Effective stress at mid-depth
132
+ const sigma_v = layer.unit_weight * midDepth;
133
+ const u = midDepth > gwt ? 9.81 * (midDepth - gwt) : 0;
134
+ const sigma_v_eff = Math.max(sigma_v - u, 1);
135
+ let fs = 0; // unit shaft friction (kPa)
136
+ if (method === 'alpha' && layer.undrained_shear_strength !== undefined) {
137
+ const su = layer.undrained_shear_strength;
138
+ const alpha = getAlpha(su, pileType);
139
+ fs = alpha * su;
140
+ steps.push(` Layer ${currentDepth.toFixed(1)}-${(currentDepth + effectiveThickness).toFixed(1)}m: α=${alpha.toFixed(2)}, Su=${su} kPa → fs=${fs.toFixed(1)} kPa`);
141
+ }
142
+ else if (method === 'beta' && layer.friction_angle !== undefined) {
143
+ const phi = layer.friction_angle;
144
+ const beta = getBeta(phi, midDepth, pileType);
145
+ fs = beta * sigma_v_eff;
146
+ // Limit shaft friction per API RP 2GEO
147
+ fs = Math.min(fs, 115);
148
+ steps.push(` Layer ${currentDepth.toFixed(1)}-${(currentDepth + effectiveThickness).toFixed(1)}m: β=${beta.toFixed(3)}, σ'v=${sigma_v_eff.toFixed(1)} kPa → fs=${fs.toFixed(1)} kPa`);
149
+ }
150
+ else if (method === 'spt-meyerhof' && layer.spt_n !== undefined) {
151
+ const N = layer.spt_n;
152
+ if (layer.soilType === 'clay' || layer.soilType === 'silt') {
153
+ // Meyerhof: fs = N/2 for clay (kPa), limited
154
+ fs = Math.min(N / 2, 100);
155
+ }
156
+ else {
157
+ // Meyerhof: fs = 2N for sand (kPa), limited
158
+ fs = Math.min(2 * N, 200);
159
+ }
160
+ steps.push(` Layer ${currentDepth.toFixed(1)}-${(currentDepth + effectiveThickness).toFixed(1)}m: SPT N=${N} → fs=${fs.toFixed(1)} kPa`);
161
+ }
162
+ else {
163
+ // Fallback: use whichever parameter is available
164
+ if (layer.undrained_shear_strength !== undefined) {
165
+ const alpha = getAlpha(layer.undrained_shear_strength, pileType);
166
+ fs = alpha * layer.undrained_shear_strength;
167
+ }
168
+ else if (layer.friction_angle !== undefined) {
169
+ const beta = getBeta(layer.friction_angle, midDepth, pileType);
170
+ fs = Math.min(beta * sigma_v_eff, 115);
171
+ }
172
+ steps.push(` Layer ${currentDepth.toFixed(1)}-${(currentDepth + effectiveThickness).toFixed(1)}m: fs=${fs.toFixed(1)} kPa (fallback)`);
173
+ }
174
+ const Qs_layer = fs * perimeter * effectiveThickness;
175
+ totalShaft += Qs_layer;
176
+ shaftFrictionPerLayer.push({
177
+ depth: currentDepth,
178
+ thickness: effectiveThickness,
179
+ soilType: layer.soilType,
180
+ unitShaftFriction: Math.round(fs * 10) / 10,
181
+ shaftResistance: Math.round(Qs_layer * 10) / 10,
182
+ });
183
+ currentDepth = layerBottom;
184
+ }
185
+ // Base resistance
186
+ const baseLayer = layers[layers.length - 1];
187
+ const sigma_v_base = baseLayer.unit_weight * L;
188
+ const u_base = L > gwt ? 9.81 * (L - gwt) : 0;
189
+ const sigma_v_eff_base = Math.max(sigma_v_base - u_base, 1);
190
+ let Qb = 0;
191
+ if (method === 'alpha' && baseLayer.undrained_shear_strength !== undefined) {
192
+ const Nc = 9; // bearing capacity factor for deep foundations in clay
193
+ const qb = Nc * baseLayer.undrained_shear_strength;
194
+ Qb = qb * Ap;
195
+ steps.push(`Base: Nc=${Nc}, Su=${baseLayer.undrained_shear_strength} kPa → qb=${qb.toFixed(0)} kPa, Qb=${Qb.toFixed(0)} kN`);
196
+ }
197
+ else if (baseLayer.friction_angle !== undefined) {
198
+ const Nq = getBaseNq(baseLayer.friction_angle);
199
+ let qb = Nq * sigma_v_eff_base;
200
+ // API limit for driven piles
201
+ const qb_limit = pileType === 'driven' ? 12000 : 5000;
202
+ qb = Math.min(qb, qb_limit);
203
+ Qb = qb * Ap;
204
+ steps.push(`Base: Nq=${Nq.toFixed(1)}, σ'v=${sigma_v_eff_base.toFixed(0)} kPa → qb=${qb.toFixed(0)} kPa, Qb=${Qb.toFixed(0)} kN`);
205
+ }
206
+ else if (baseLayer.spt_n !== undefined) {
207
+ // Meyerhof SPT-based: qb = 400*N*Ab/D for driven, 133*N*Ab/D for bored
208
+ const factor = pileType === 'driven' ? 400 : 133;
209
+ let qb = factor * baseLayer.spt_n;
210
+ qb = Math.min(qb, pileType === 'driven' ? 12000 : 5000);
211
+ Qb = qb * Ap;
212
+ steps.push(`Base (SPT): qb=${factor}×N=${qb.toFixed(0)} kPa, Qb=${Qb.toFixed(0)} kN`);
213
+ }
214
+ const Qu = totalShaft + Qb;
215
+ const Qa = Qu / FS;
216
+ steps.push(`Total shaft Qs = ${totalShaft.toFixed(0)} kN`);
217
+ steps.push(`Total base Qb = ${Qb.toFixed(0)} kN`);
218
+ steps.push(`Ultimate Qu = ${Qu.toFixed(0)} kN, Allowable Qa = ${Qa.toFixed(0)} kN (FS=${FS})`);
219
+ return {
220
+ method,
221
+ pileType,
222
+ pileDiameter: D,
223
+ pileLength: L,
224
+ shaftResistance: Math.round(totalShaft),
225
+ baseResistance: Math.round(Qb),
226
+ ultimateCapacity: Math.round(Qu),
227
+ allowableCapacity: Math.round(Qa),
228
+ factorOfSafety: FS,
229
+ shaftFrictionPerLayer,
230
+ steps,
231
+ };
232
+ }
233
+ //# sourceMappingURL=pile-capacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pile-capacity.js","sourceRoot":"","sources":["../../src/geo/pile-capacity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,iDAAiD;AACjD,EAAE;AACF,WAAW;AACX,0DAA0D;AAC1D,0DAA0D;AAC1D,gEAAgE;AAChE,qCAAqC;AACrC,EAAE;AACF,cAAc;AACd,+EAA+E;AAC/E,+DAA+D;AAC/D,oFAAoF;AACpF,+EAA+E;AAC/E,+CAA+C;AAC/C,8EAA8E;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC1E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACxE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACtG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACnG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QACpE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC3D,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KACpF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACV,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACjF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC1E,CAAC,CAAC;AAwBH,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,8EAA8E;AAC9E,uDAAuD;AACvD,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,EAAU,EAAE,QAAgB;IAC5C,sCAAsC;IACtC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,EAAE,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC;QACzB,IAAI,EAAE,IAAI,EAAE;YAAE,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,EAAE,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QAC1B,IAAI,EAAE,IAAI,GAAG;YAAE,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACnD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,8BAA8B;IAC9B,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IACzB,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAChD,IAAI,EAAE,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAC1B,IAAI,EAAE,IAAI,GAAG;QAAE,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAS,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,QAAgB;IAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,MAAM,KAAK,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,qBAAqB;IACpF,OAAO,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAE9E,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,MAAM,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAEzG,gBAAgB;IAChB,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,KAAK,UAAU;QACnC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ;YACxB,CAAC,CAAC,CAAC,GAAG,CAAC;YACP,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,wBAAwB;IAEvC,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,KAAK,UAAU;QAC1C,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QACb,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ;YACxB,CAAC,CAAC,CAAC,GAAG,CAAC;YACP,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,wBAAwB;IAE7C,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtF,iDAAiD;IACjD,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACzE,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;aAAM,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,GAAG,cAAc,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,oBAAoB,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC1F,CAAC;IAED,iBAAiB;IACjB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,qBAAqB,GAAgD,EAAE,CAAC;IAE9E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;QACnD,mDAAmD;QACnD,IAAI,YAAY,IAAI,CAAC;YAAE,MAAM;QAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,YAAY,GAAG,kBAAkB,GAAG,CAAC,CAAC;QAEvD,gCAAgC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC7C,MAAM,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7C,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,4BAA4B;QAExC,IAAI,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YACvE,MAAM,EAAE,GAAG,KAAK,CAAC,wBAAwB,CAAC;YAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACrC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACrK,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC;YACjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,EAAE,GAAG,IAAI,GAAG,WAAW,CAAC;YACxB,uCAAuC;YACvC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzL,CAAC;aAAM,IAAI,MAAM,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAClE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACtB,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC3D,6CAA6C;gBAC7C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,4CAA4C;gBAC5C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5I,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,IAAI,KAAK,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;gBACjE,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,wBAAwB,CAAC;YAC9C,CAAC;iBAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/D,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC1I,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,GAAG,SAAS,GAAG,kBAAkB,CAAC;QACrD,UAAU,IAAI,QAAQ,CAAC;QAEvB,qBAAqB,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,kBAAkB;YAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE;YAC3C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE;SAChD,CAAC,CAAC;QAEH,YAAY,GAAG,WAAW,CAAC;IAC7B,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAE5D,IAAI,EAAE,GAAG,CAAC,CAAC;IAEX,IAAI,MAAM,KAAK,OAAO,IAAI,SAAS,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;QAC3E,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,uDAAuD;QACrE,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,wBAAwB,CAAC;QACnD,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,SAAS,CAAC,wBAAwB,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/H,CAAC;SAAM,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC/C,IAAI,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC;QAC/B,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC5B,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpI,CAAC;SAAM,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACzC,uEAAuE;QACvE,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC;QAClC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnB,KAAK,CAAC,IAAI,CAAC,oBAAoB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAE/F,OAAO;QACL,MAAM;QACN,QAAQ;QACR,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACvC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,cAAc,EAAE,EAAE;QAClB,qBAAqB;QACrB,KAAK;KACN,CAAC;AACJ,CAAC"}