amaran-light-cli 1.4.0 → 1.5.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.
- package/README.md +13 -18
- package/dist/__tests__/autoCct.test.js +2 -2
- package/dist/__tests__/autoCct.test.js.map +1 -1
- package/dist/__tests__/autostart.test.js +1 -1
- package/dist/__tests__/autostart.test.js.map +1 -1
- package/dist/__tests__/cctUtil.test.js +2 -2
- package/dist/__tests__/cctUtil.test.js.map +1 -1
- package/dist/__tests__/intensityApi.test.js +4 -1
- package/dist/__tests__/intensityApi.test.js.map +1 -1
- package/dist/__tests__/lightControl.test.js +1 -1
- package/dist/__tests__/lightControl.test.js.map +1 -1
- package/dist/__tests__/simulateSchedule.test.js +2 -2
- package/dist/__tests__/simulateSchedule.test.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/integration.test.js +1 -1
- package/dist/commands/__tests__/integration.test.js.map +1 -1
- package/dist/commands/cmdUtils.d.ts +23 -0
- package/dist/commands/cmdUtils.d.ts.map +1 -0
- package/dist/commands/cmdUtils.js +43 -0
- package/dist/commands/cmdUtils.js.map +1 -0
- package/dist/commands/daylightSimulation/autoCct.d.ts +5 -0
- package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -0
- package/dist/commands/{autoCct.js → daylightSimulation/autoCct.js} +12 -13
- package/dist/commands/daylightSimulation/autoCct.js.map +1 -0
- package/dist/commands/{graphSchedule.d.ts → daylightSimulation/graphSchedule.d.ts} +1 -1
- package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/graphSchedule.js +65 -0
- package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -0
- package/dist/commands/daylightSimulation/printSchedule.d.ts +5 -0
- package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/printSchedule.js +65 -0
- package/dist/commands/daylightSimulation/printSchedule.js.map +1 -0
- package/dist/commands/{service.d.ts → daylightSimulation/service.d.ts} +1 -1
- package/dist/commands/daylightSimulation/service.d.ts.map +1 -0
- package/dist/commands/{service.js → daylightSimulation/service.js} +47 -35
- package/dist/commands/daylightSimulation/service.js.map +1 -0
- package/dist/commands/{simulateSchedule.d.ts → daylightSimulation/simulateSchedule.d.ts} +1 -1
- package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/simulateSchedule.js +123 -0
- package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -0
- package/dist/commands/{cct.d.ts → deviceControl/cct.d.ts} +1 -1
- package/dist/commands/deviceControl/cct.d.ts.map +1 -0
- package/dist/commands/{cct.js → deviceControl/cct.js} +31 -36
- package/dist/commands/deviceControl/cct.js.map +1 -0
- package/dist/commands/{color.d.ts → deviceControl/color.d.ts} +1 -1
- package/dist/commands/deviceControl/color.d.ts.map +1 -0
- package/dist/commands/deviceControl/color.js +52 -0
- package/dist/commands/deviceControl/color.js.map +1 -0
- package/dist/commands/{config.d.ts → deviceControl/config.d.ts} +1 -1
- package/dist/commands/deviceControl/config.d.ts.map +1 -0
- package/dist/commands/{config.js → deviceControl/config.js} +11 -7
- package/dist/commands/deviceControl/config.js.map +1 -0
- package/dist/commands/{discover.d.ts → deviceControl/discover.d.ts} +1 -1
- package/dist/commands/deviceControl/discover.d.ts.map +1 -0
- package/dist/commands/{discover.js → deviceControl/discover.js} +8 -4
- package/dist/commands/deviceControl/discover.js.map +1 -0
- package/dist/commands/{hsi.d.ts → deviceControl/hsi.d.ts} +1 -1
- package/dist/commands/deviceControl/hsi.d.ts.map +1 -0
- package/dist/commands/deviceControl/hsi.js +50 -0
- package/dist/commands/deviceControl/hsi.js.map +1 -0
- package/dist/commands/{intensity.d.ts → deviceControl/intensity.d.ts} +1 -1
- package/dist/commands/deviceControl/intensity.d.ts.map +1 -0
- package/dist/commands/deviceControl/intensity.js +41 -0
- package/dist/commands/deviceControl/intensity.js.map +1 -0
- package/dist/commands/{list.d.ts → deviceControl/list.d.ts} +1 -1
- package/dist/commands/deviceControl/list.d.ts.map +1 -0
- package/dist/commands/{list.js → deviceControl/list.js} +7 -3
- package/dist/commands/deviceControl/list.js.map +1 -0
- package/dist/commands/{power.d.ts → deviceControl/power.d.ts} +1 -1
- package/dist/commands/deviceControl/power.d.ts.map +1 -0
- package/dist/commands/deviceControl/power.js +78 -0
- package/dist/commands/deviceControl/power.js.map +1 -0
- package/dist/commands/{status.d.ts → deviceControl/status.d.ts} +1 -1
- package/dist/commands/deviceControl/status.d.ts.map +1 -0
- package/dist/commands/deviceControl/status.js +48 -0
- package/dist/commands/deviceControl/status.js.map +1 -0
- package/dist/commands.d.ts +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +17 -43
- package/dist/commands.js.map +1 -1
- package/dist/daylightSimulation/cctUtil.d.ts +5 -0
- package/dist/daylightSimulation/cctUtil.d.ts.map +1 -0
- package/dist/daylightSimulation/cctUtil.js +163 -0
- package/dist/daylightSimulation/cctUtil.js.map +1 -0
- package/dist/{constants.d.ts → daylightSimulation/constants.d.ts} +0 -18
- package/dist/daylightSimulation/constants.d.ts.map +1 -0
- package/dist/{constants.js → daylightSimulation/constants.js} +0 -13
- package/dist/daylightSimulation/constants.js.map +1 -0
- package/dist/daylightSimulation/curves/approximations.d.ts +19 -0
- package/dist/daylightSimulation/curves/approximations.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/approximations.js +27 -0
- package/dist/daylightSimulation/curves/approximations.js.map +1 -0
- package/dist/daylightSimulation/curves/index.d.ts +15 -0
- package/dist/daylightSimulation/curves/index.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/index.js +56 -0
- package/dist/daylightSimulation/curves/index.js.map +1 -0
- package/dist/daylightSimulation/curves/mathematical.d.ts +15 -0
- package/dist/daylightSimulation/curves/mathematical.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/mathematical.js +33 -0
- package/dist/daylightSimulation/curves/mathematical.js.map +1 -0
- package/dist/daylightSimulation/curves/realistic.d.ts +43 -0
- package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/realistic.js +259 -0
- package/dist/daylightSimulation/curves/realistic.js.map +1 -0
- package/dist/daylightSimulation/geoipUtil.d.ts.map +1 -0
- package/dist/daylightSimulation/geoipUtil.js.map +1 -0
- package/dist/daylightSimulation/graphSchedule.d.ts +8 -0
- package/dist/daylightSimulation/graphSchedule.d.ts.map +1 -0
- package/dist/daylightSimulation/graphSchedule.js +94 -0
- package/dist/daylightSimulation/graphSchedule.js.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts +36 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.js +192 -0
- package/dist/daylightSimulation/scheduleMaker.js.map +1 -0
- package/dist/daylightSimulation/textSchedule.d.ts +9 -0
- package/dist/daylightSimulation/textSchedule.d.ts.map +1 -0
- package/dist/daylightSimulation/textSchedule.js +172 -0
- package/dist/daylightSimulation/textSchedule.js.map +1 -0
- package/dist/{cctUtil.d.ts → daylightSimulation/types.d.ts} +6 -5
- package/dist/daylightSimulation/types.d.ts.map +1 -0
- package/dist/daylightSimulation/types.js +16 -0
- package/dist/daylightSimulation/types.js.map +1 -0
- package/dist/deviceControl/autostart.d.ts.map +1 -0
- package/dist/deviceControl/autostart.js.map +1 -0
- package/dist/deviceControl/constants.d.ts +23 -0
- package/dist/deviceControl/constants.d.ts.map +1 -0
- package/dist/deviceControl/constants.js +20 -0
- package/dist/deviceControl/constants.js.map +1 -0
- package/dist/deviceControl/discovery.d.ts.map +1 -0
- package/dist/deviceControl/discovery.js.map +1 -0
- package/dist/deviceControl/lightControl.d.ts.map +1 -0
- package/dist/deviceControl/lightControl.js.map +1 -0
- package/dist/deviceControl/types.d.ts.map +1 -0
- package/dist/deviceControl/types.js.map +1 -0
- package/package.json +4 -1
- package/scripts/release.js +2 -2
- package/CHANGELOG.md +0 -67
- package/dist/autostart.d.ts.map +0 -1
- package/dist/autostart.js.map +0 -1
- package/dist/cctUtil.d.ts.map +0 -1
- package/dist/cctUtil.js +0 -435
- package/dist/cctUtil.js.map +0 -1
- package/dist/commands/autoCct.d.ts +0 -5
- package/dist/commands/autoCct.d.ts.map +0 -1
- package/dist/commands/autoCct.js.map +0 -1
- package/dist/commands/cct.d.ts.map +0 -1
- package/dist/commands/cct.js.map +0 -1
- package/dist/commands/color.d.ts.map +0 -1
- package/dist/commands/color.js +0 -57
- package/dist/commands/color.js.map +0 -1
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/discover.d.ts.map +0 -1
- package/dist/commands/discover.js.map +0 -1
- package/dist/commands/graphSchedule.d.ts.map +0 -1
- package/dist/commands/graphSchedule.js +0 -293
- package/dist/commands/graphSchedule.js.map +0 -1
- package/dist/commands/hsi.d.ts.map +0 -1
- package/dist/commands/hsi.js +0 -59
- package/dist/commands/hsi.js.map +0 -1
- package/dist/commands/intensity.d.ts.map +0 -1
- package/dist/commands/intensity.js +0 -50
- package/dist/commands/intensity.js.map +0 -1
- package/dist/commands/list.d.ts.map +0 -1
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/power.d.ts.map +0 -1
- package/dist/commands/power.js +0 -120
- package/dist/commands/power.js.map +0 -1
- package/dist/commands/printSchedule.d.ts +0 -5
- package/dist/commands/printSchedule.d.ts.map +0 -1
- package/dist/commands/printSchedule.js +0 -452
- package/dist/commands/printSchedule.js.map +0 -1
- package/dist/commands/service.d.ts.map +0 -1
- package/dist/commands/service.js.map +0 -1
- package/dist/commands/simulateSchedule.d.ts.map +0 -1
- package/dist/commands/simulateSchedule.js +0 -199
- package/dist/commands/simulateSchedule.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -48
- package/dist/commands/status.js.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/discovery.d.ts.map +0 -1
- package/dist/discovery.js.map +0 -1
- package/dist/geoipUtil.d.ts.map +0 -1
- package/dist/geoipUtil.js.map +0 -1
- package/dist/lightControl.d.ts.map +0 -1
- package/dist/lightControl.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{geoipUtil.d.ts → daylightSimulation/geoipUtil.d.ts} +0 -0
- /package/dist/{geoipUtil.js → daylightSimulation/geoipUtil.js} +0 -0
- /package/dist/{autostart.d.ts → deviceControl/autostart.d.ts} +0 -0
- /package/dist/{autostart.js → deviceControl/autostart.js} +0 -0
- /package/dist/{discovery.d.ts → deviceControl/discovery.d.ts} +0 -0
- /package/dist/{discovery.js → deviceControl/discovery.js} +0 -0
- /package/dist/{lightControl.d.ts → deviceControl/lightControl.d.ts} +0 -0
- /package/dist/{lightControl.js → deviceControl/lightControl.js} +0 -0
- /package/dist/{types.d.ts → deviceControl/types.d.ts} +0 -0
- /package/dist/{types.js → deviceControl/types.js} +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realistic daylight calculation functions based on sun position and atmospheric models.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Realistic daylight calculation based on sun altitude.
|
|
6
|
+
* @param altitude Sun altitude in radians
|
|
7
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
8
|
+
*/
|
|
9
|
+
export declare function calculateRealisticSunAltitude(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
|
|
10
|
+
/**
|
|
11
|
+
* CIE daylight model with atmospheric path modeling.
|
|
12
|
+
* @param altitude Sun altitude in radians
|
|
13
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
14
|
+
*/
|
|
15
|
+
export declare function calculateRealisticCIEDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
|
|
16
|
+
/**
|
|
17
|
+
* Perez daylight model with turbidity and atmospheric effects.
|
|
18
|
+
* @param altitude Sun altitude in radians
|
|
19
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateRealisticPerezDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
|
|
22
|
+
/**
|
|
23
|
+
* Physics-based Atmospheric model.
|
|
24
|
+
* Uses Beer-Lambert law for intensity and exponential decay for CCT.
|
|
25
|
+
* @param altitude Sun altitude in radians
|
|
26
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
27
|
+
*/
|
|
28
|
+
export declare function calculateRealisticPhysicsDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
|
|
29
|
+
/**
|
|
30
|
+
* Blackbody Sun model.
|
|
31
|
+
* Simulates the sun as a blackbody shifting through the atmosphere.
|
|
32
|
+
* @param altitude Sun altitude in radians
|
|
33
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
34
|
+
*/
|
|
35
|
+
export declare function calculateRealisticBlackbodyDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
|
|
36
|
+
/**
|
|
37
|
+
* Hazy/Turbid model.
|
|
38
|
+
* Simulates a sky with high particulate matter (smog/mist).
|
|
39
|
+
* @param altitude Sun altitude in radians
|
|
40
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
41
|
+
*/
|
|
42
|
+
export declare function calculateRealisticHazyDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
|
|
43
|
+
//# sourceMappingURL=realistic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realistic.d.ts","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/realistic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAwC9C;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAqC9C;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAsC9C;AAcD;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAmC9C;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CA8B9C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CA8B9C"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realistic daylight calculation functions based on sun position and atmospheric models.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Realistic daylight calculation based on sun altitude.
|
|
6
|
+
* @param altitude Sun altitude in radians
|
|
7
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
8
|
+
*/
|
|
9
|
+
export function calculateRealisticSunAltitude(altitude, maxAltitude) {
|
|
10
|
+
// Convert altitude to degrees for easier calculations
|
|
11
|
+
const altitudeDeg = (altitude * 180) / Math.PI;
|
|
12
|
+
const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
|
|
13
|
+
// CCT: Based on real-world color temperature at different sun angles
|
|
14
|
+
let cctFactor;
|
|
15
|
+
if (altitudeDeg < -6) {
|
|
16
|
+
cctFactor = 0; // Before civil twilight - minimum CCT
|
|
17
|
+
}
|
|
18
|
+
else if (altitudeDeg < 0) {
|
|
19
|
+
// Civil twilight: 4000-5000K range
|
|
20
|
+
cctFactor = 0.3 + ((altitudeDeg + 6) / 6) * 0.2; // 0.3 to 0.5
|
|
21
|
+
}
|
|
22
|
+
else if (altitudeDeg < 30) {
|
|
23
|
+
// Morning/afternoon: 5000-6500K
|
|
24
|
+
cctFactor = 0.5 + (altitudeDeg / 30) * 0.3; // 0.5 to 0.8
|
|
25
|
+
}
|
|
26
|
+
else if (altitudeDeg < 60) {
|
|
27
|
+
// High sun: 5500-7000K
|
|
28
|
+
cctFactor = 0.8 + ((altitudeDeg - 30) / 30) * 0.2; // 0.8 to 1.0
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Very high sun: 6500-7500K
|
|
32
|
+
cctFactor = 1.0;
|
|
33
|
+
}
|
|
34
|
+
// Calculate raw intensity factor based on absolute altitude
|
|
35
|
+
const calculateIntensity = (altDeg) => {
|
|
36
|
+
if (altDeg < -6)
|
|
37
|
+
return 0;
|
|
38
|
+
if (altDeg < 0)
|
|
39
|
+
return ((altDeg + 6) / 6) ** 2 * 0.05;
|
|
40
|
+
if (altDeg < 10)
|
|
41
|
+
return 0.05 + (altDeg / 10) * 0.15;
|
|
42
|
+
if (altDeg < 30)
|
|
43
|
+
return 0.2 + ((altDeg - 10) / 20) * 0.4;
|
|
44
|
+
return 0.6 + ((altDeg - 30) / 60) * 0.4;
|
|
45
|
+
};
|
|
46
|
+
const rawIntensity = calculateIntensity(altitudeDeg);
|
|
47
|
+
const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
|
|
48
|
+
// Normalize: Scale the current intensity so that at maxAltitude it reaches 1.0
|
|
49
|
+
let intensityFactor = maxDailyIntensity > 0.01 ? rawIntensity / maxDailyIntensity : 0;
|
|
50
|
+
intensityFactor = Math.min(1.0, intensityFactor);
|
|
51
|
+
return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* CIE daylight model with atmospheric path modeling.
|
|
55
|
+
* @param altitude Sun altitude in radians
|
|
56
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
57
|
+
*/
|
|
58
|
+
export function calculateRealisticCIEDaylight(altitude, maxAltitude) {
|
|
59
|
+
const altitudeDeg = (altitude * 180) / Math.PI;
|
|
60
|
+
const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
|
|
61
|
+
let cctFactor;
|
|
62
|
+
if (altitudeDeg < -6) {
|
|
63
|
+
cctFactor = 0;
|
|
64
|
+
}
|
|
65
|
+
else if (altitudeDeg < 0) {
|
|
66
|
+
cctFactor = 0.4 + ((altitudeDeg + 6) / 6) ** 1.5 * 0.2;
|
|
67
|
+
}
|
|
68
|
+
else if (altitudeDeg < 15) {
|
|
69
|
+
cctFactor = 0.6 - Math.sin((altitudeDeg * Math.PI) / 30) * 0.1;
|
|
70
|
+
}
|
|
71
|
+
else if (altitudeDeg < 45) {
|
|
72
|
+
cctFactor = 0.5 + ((altitudeDeg - 15) / 30) * 0.4;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
cctFactor = 0.9 + Math.min(0.1, ((altitudeDeg - 45) / 45) * 0.1);
|
|
76
|
+
}
|
|
77
|
+
const calculateRawIntensity = (altDeg) => {
|
|
78
|
+
if (altDeg < -6)
|
|
79
|
+
return 0;
|
|
80
|
+
if (altDeg < 0)
|
|
81
|
+
return ((altDeg + 6) / 6) ** 3 * 0.03;
|
|
82
|
+
if (altDeg < 15) {
|
|
83
|
+
const altRad = Math.max(0.01, (altDeg * Math.PI) / 180);
|
|
84
|
+
const airMass = 1 / Math.sin(altRad);
|
|
85
|
+
return Math.min(0.25, 1 / airMass ** 0.7);
|
|
86
|
+
}
|
|
87
|
+
if (altDeg < 40)
|
|
88
|
+
return 0.25 + ((altDeg - 15) / 25) * 0.55;
|
|
89
|
+
if (altDeg < 70)
|
|
90
|
+
return 0.8 + ((altDeg - 40) / 30) * 0.15;
|
|
91
|
+
return 0.95 + ((altDeg - 70) / 20) * 0.05;
|
|
92
|
+
};
|
|
93
|
+
const rawIntensity = calculateRawIntensity(altitudeDeg);
|
|
94
|
+
const maxDailyIntensity = calculateRawIntensity(maxAltitudeDeg);
|
|
95
|
+
const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
|
|
96
|
+
return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Perez daylight model with turbidity and atmospheric effects.
|
|
100
|
+
* @param altitude Sun altitude in radians
|
|
101
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
102
|
+
*/
|
|
103
|
+
export function calculateRealisticPerezDaylight(altitude, maxAltitude) {
|
|
104
|
+
const altitudeDeg = (altitude * 180) / Math.PI;
|
|
105
|
+
const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
|
|
106
|
+
let cctFactor;
|
|
107
|
+
if (altitudeDeg < -6) {
|
|
108
|
+
cctFactor = 0;
|
|
109
|
+
}
|
|
110
|
+
else if (altitudeDeg < 0) {
|
|
111
|
+
cctFactor = 0.35 + ((altitudeDeg + 6) / 6) ** 2 * 0.25;
|
|
112
|
+
}
|
|
113
|
+
else if (altitudeDeg < 25) {
|
|
114
|
+
const goldenHourEffect = Math.exp(-((altitudeDeg - 12.5) ** 2) / 100);
|
|
115
|
+
cctFactor = 0.6 - goldenHourEffect * 0.15 + (altitudeDeg / 25) * 0.3;
|
|
116
|
+
}
|
|
117
|
+
else if (altitudeDeg < 50) {
|
|
118
|
+
cctFactor = 0.75 + ((altitudeDeg - 25) / 25) * 0.2;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
cctFactor = Math.min(1.0, 0.95 + ((altitudeDeg - 50) / 40) * 0.05);
|
|
122
|
+
}
|
|
123
|
+
const calculateRawIntensity = (altDeg) => {
|
|
124
|
+
if (altDeg < -6)
|
|
125
|
+
return 0;
|
|
126
|
+
if (altDeg < 5)
|
|
127
|
+
return (Math.max(0, altDeg + 6) / 11) ** 4 * 0.15;
|
|
128
|
+
if (altDeg < 20) {
|
|
129
|
+
const zenithAngle = Math.max(0.01, ((90 - altDeg) * Math.PI) / 180);
|
|
130
|
+
const relativeLuminance = Math.exp(-0.2 / Math.max(0.01, Math.cos(zenithAngle)));
|
|
131
|
+
return Math.min(0.4, relativeLuminance * 0.35 + 0.05);
|
|
132
|
+
}
|
|
133
|
+
if (altDeg < 45)
|
|
134
|
+
return 0.25 + ((altDeg - 20) / 25) * 0.65;
|
|
135
|
+
if (altDeg < 80)
|
|
136
|
+
return 0.9 + ((altDeg - 45) / 35) * 0.1;
|
|
137
|
+
return 1.0;
|
|
138
|
+
};
|
|
139
|
+
const rawIntensity = calculateRawIntensity(altitudeDeg);
|
|
140
|
+
const maxDailyIntensity = calculateRawIntensity(maxAltitudeDeg);
|
|
141
|
+
const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
|
|
142
|
+
return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Kasten-Young air mass formula.
|
|
146
|
+
* Accurate even at low altitudes/horizon.
|
|
147
|
+
* @param altitudeDeg Altitude in degrees
|
|
148
|
+
*/
|
|
149
|
+
function calculateAirMass(altitudeDeg) {
|
|
150
|
+
// The Kasten-Young formula is valid for altitude > -0.5 deg.
|
|
151
|
+
// Below that, the atmosphere is essentially opaque for direct sunlight.
|
|
152
|
+
const gamma = Math.max(-0.5, altitudeDeg);
|
|
153
|
+
return 1 / (Math.sin((gamma * Math.PI) / 180) + 0.50572 * (gamma + 6.07995) ** -1.6364);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Physics-based Atmospheric model.
|
|
157
|
+
* Uses Beer-Lambert law for intensity and exponential decay for CCT.
|
|
158
|
+
* @param altitude Sun altitude in radians
|
|
159
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
160
|
+
*/
|
|
161
|
+
export function calculateRealisticPhysicsDaylight(altitude, maxAltitude) {
|
|
162
|
+
const altitudeDeg = (altitude * 180) / Math.PI;
|
|
163
|
+
const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
|
|
164
|
+
// CCT: Exponential approach to zenith CCT
|
|
165
|
+
// Factors: 0 at horizon/twilight, 1 at zenith
|
|
166
|
+
let cctFactor;
|
|
167
|
+
if (altitudeDeg < -6) {
|
|
168
|
+
cctFactor = 0;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
// k=0.05 gives a nice natural curve
|
|
172
|
+
cctFactor = 1 - Math.exp(-0.05 * (altitudeDeg + 6));
|
|
173
|
+
}
|
|
174
|
+
// Intensity: Beer-Lambert Law
|
|
175
|
+
// I = I0 * tau ^ m
|
|
176
|
+
const calculateIntensity = (altDeg) => {
|
|
177
|
+
if (altDeg < -6)
|
|
178
|
+
return 0;
|
|
179
|
+
// Direct Component (Beer-Lambert)
|
|
180
|
+
const m = calculateAirMass(altDeg);
|
|
181
|
+
const tau = 0.75; // Standard clear sky transmittance
|
|
182
|
+
const direct = tau ** m;
|
|
183
|
+
// Ambient Component (Diffuse twilight glow)
|
|
184
|
+
// Reaches ~5% of possible direct intensity at horizon
|
|
185
|
+
const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 2 * 0.05 : 0.05 + (altDeg / 90) * 0.05;
|
|
186
|
+
return direct + ambient;
|
|
187
|
+
};
|
|
188
|
+
const rawIntensity = calculateIntensity(altitudeDeg);
|
|
189
|
+
const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
|
|
190
|
+
const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
|
|
191
|
+
return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Blackbody Sun model.
|
|
195
|
+
* Simulates the sun as a blackbody shifting through the atmosphere.
|
|
196
|
+
* @param altitude Sun altitude in radians
|
|
197
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
198
|
+
*/
|
|
199
|
+
export function calculateRealisticBlackbodyDaylight(altitude, maxAltitude) {
|
|
200
|
+
const altitudeDeg = (altitude * 180) / Math.PI;
|
|
201
|
+
const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
|
|
202
|
+
let cctFactor;
|
|
203
|
+
if (altitudeDeg < -6) {
|
|
204
|
+
cctFactor = 0;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Shifts faster at the beginning, then stabilizes.
|
|
208
|
+
// Simulates the Rayleigh scattering effect where blue light is lost at low angles.
|
|
209
|
+
cctFactor = 1 - Math.exp(-0.08 * (altitudeDeg + 6));
|
|
210
|
+
}
|
|
211
|
+
const calculateIntensity = (altDeg) => {
|
|
212
|
+
if (altDeg < -6)
|
|
213
|
+
return 0;
|
|
214
|
+
const m = calculateAirMass(altDeg);
|
|
215
|
+
const tau = 0.7;
|
|
216
|
+
const direct = tau ** m;
|
|
217
|
+
// Blackbody ambient is slightly warmer/weaker initially
|
|
218
|
+
const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 2 * 0.04 : 0.04 + (altDeg / 90) * 0.04;
|
|
219
|
+
return direct + ambient;
|
|
220
|
+
};
|
|
221
|
+
const rawIntensity = calculateIntensity(altitudeDeg);
|
|
222
|
+
const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
|
|
223
|
+
const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
|
|
224
|
+
return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Hazy/Turbid model.
|
|
228
|
+
* Simulates a sky with high particulate matter (smog/mist).
|
|
229
|
+
* @param altitude Sun altitude in radians
|
|
230
|
+
* @param maxAltitude Maximum sun altitude for the day in radians
|
|
231
|
+
*/
|
|
232
|
+
export function calculateRealisticHazyDaylight(altitude, maxAltitude) {
|
|
233
|
+
const altitudeDeg = (altitude * 180) / Math.PI;
|
|
234
|
+
const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
|
|
235
|
+
let cctFactor;
|
|
236
|
+
if (altitudeDeg < -6) {
|
|
237
|
+
cctFactor = 0;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// Hazy skies have more scattering even at high angles,
|
|
241
|
+
// so CCT doesn't reach "pure blue" as easily (approximated by slower exponent)
|
|
242
|
+
cctFactor = 1 - Math.exp(-0.03 * (altitudeDeg + 6));
|
|
243
|
+
}
|
|
244
|
+
const calculateIntensity = (altDeg) => {
|
|
245
|
+
if (altDeg < -6)
|
|
246
|
+
return 0;
|
|
247
|
+
const m = calculateAirMass(altDeg);
|
|
248
|
+
const tau = 0.5; // Significant turbidity
|
|
249
|
+
const direct = tau ** m;
|
|
250
|
+
// Hazy ambient is stronger due to more scattering (Mie scattering)
|
|
251
|
+
const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 1.5 * 0.08 : 0.08 + (altDeg / 90) * 0.04;
|
|
252
|
+
return direct + ambient;
|
|
253
|
+
};
|
|
254
|
+
const rawIntensity = calculateIntensity(altitudeDeg);
|
|
255
|
+
const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
|
|
256
|
+
const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
|
|
257
|
+
return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=realistic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realistic.js","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/realistic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geoipUtil.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/geoipUtil.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgB9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geoipUtil.js","sourceRoot":"","sources":["../../src/daylightSimulation/geoipUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAS/B,MAAM,UAAU,iBAAiB,CAAC,EAAW;IAC3C,iFAAiF;IACjF,wCAAwC;IACxC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAC9C,4CAA4C;QAC5C,4BAA4B;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,EAAE,EAAE,GAAG,CAAC,EAAsB;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Schedule } from './scheduleMaker.js';
|
|
2
|
+
export interface GraphScheduleOptions {
|
|
3
|
+
width?: number;
|
|
4
|
+
height?: number;
|
|
5
|
+
metrics?: 'cct' | 'intensity' | 'both';
|
|
6
|
+
}
|
|
7
|
+
export declare function graphSchedule(schedule: Schedule, options?: GraphScheduleOptions): Promise<Buffer>;
|
|
8
|
+
//# sourceMappingURL=graphSchedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphSchedule.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/graphSchedule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;CACxC;AAyBD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2F3G"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ChartJSNodeCanvas } from 'chartjs-node-canvas';
|
|
2
|
+
const COLORS = [
|
|
3
|
+
'rgb(54, 162, 235)', // Blue
|
|
4
|
+
'rgb(255, 99, 132)', // Red
|
|
5
|
+
'rgb(75, 192, 192)', // Teal
|
|
6
|
+
'rgb(255, 205, 86)', // Yellow
|
|
7
|
+
'rgb(153, 102, 255)', // Purple
|
|
8
|
+
'rgb(255, 159, 64)', // Orange
|
|
9
|
+
'rgb(75, 192, 75)', // Green
|
|
10
|
+
'rgb(255, 0, 255)', // Magenta
|
|
11
|
+
];
|
|
12
|
+
export async function graphSchedule(schedule, options = {}) {
|
|
13
|
+
const width = options.width || 1200;
|
|
14
|
+
const height = options.height || 600;
|
|
15
|
+
const metrics = options.metrics || 'both';
|
|
16
|
+
const canvas = new ChartJSNodeCanvas({ width, height });
|
|
17
|
+
const datasets = [];
|
|
18
|
+
const labels = schedule.points.map((p) => {
|
|
19
|
+
if (p.time.getMinutes() === 0) {
|
|
20
|
+
return p.time.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
|
|
21
|
+
}
|
|
22
|
+
return '';
|
|
23
|
+
});
|
|
24
|
+
const showIntensity = metrics === 'intensity' || metrics === 'both';
|
|
25
|
+
const showCct = metrics === 'cct' || metrics === 'both';
|
|
26
|
+
schedule.curves.forEach((curve, index) => {
|
|
27
|
+
const color = schedule.curves.length > 1 ? COLORS[index % COLORS.length] : 'rgb(54, 162, 235)';
|
|
28
|
+
const cctColor = schedule.curves.length > 1 ? COLORS[index % COLORS.length] : 'rgb(255, 99, 132)';
|
|
29
|
+
if (showIntensity) {
|
|
30
|
+
datasets.push({
|
|
31
|
+
label: schedule.curves.length > 1 ? `${curve} (Int)` : 'Intensity (%)',
|
|
32
|
+
data: schedule.points.map((p) => (p.values.get(curve)?.intensity ?? 0) / 10),
|
|
33
|
+
borderColor: color,
|
|
34
|
+
backgroundColor: 'transparent',
|
|
35
|
+
yAxisID: 'y',
|
|
36
|
+
fill: false,
|
|
37
|
+
borderDash: showIntensity && showCct ? [5, 5] : [],
|
|
38
|
+
pointRadius: 0,
|
|
39
|
+
borderWidth: 2,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (showCct) {
|
|
43
|
+
datasets.push({
|
|
44
|
+
label: schedule.curves.length > 1 ? `${curve} (CCT)` : 'CCT (K)',
|
|
45
|
+
data: schedule.points.map((p) => p.values.get(curve)?.cct ?? 0),
|
|
46
|
+
borderColor: cctColor,
|
|
47
|
+
backgroundColor: 'transparent',
|
|
48
|
+
yAxisID: 'y1',
|
|
49
|
+
fill: false,
|
|
50
|
+
pointRadius: 0,
|
|
51
|
+
borderWidth: 2,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
const titleCurve = schedule.curves.length > 1 ? (schedule.curves.length === 7 ? 'All Curves' : 'Multiple Curves') : schedule.curves[0];
|
|
56
|
+
const configuration = {
|
|
57
|
+
type: 'line',
|
|
58
|
+
data: { labels, datasets },
|
|
59
|
+
options: {
|
|
60
|
+
plugins: {
|
|
61
|
+
title: {
|
|
62
|
+
display: true,
|
|
63
|
+
text: `Schedule: ${schedule.date.toDateString()} (Lat: ${schedule.lat.toFixed(2)}, Lon: ${schedule.lon.toFixed(2)}) - Curve: ${titleCurve}`,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
scales: {
|
|
67
|
+
x: {
|
|
68
|
+
ticks: {
|
|
69
|
+
autoSkip: false,
|
|
70
|
+
maxRotation: 45,
|
|
71
|
+
callback: (_val, index) => labels[index],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
y: {
|
|
75
|
+
type: 'linear',
|
|
76
|
+
display: true,
|
|
77
|
+
position: 'left',
|
|
78
|
+
title: { display: true, text: 'Intensity (%)' },
|
|
79
|
+
min: 0,
|
|
80
|
+
max: 100,
|
|
81
|
+
},
|
|
82
|
+
y1: {
|
|
83
|
+
type: 'linear',
|
|
84
|
+
display: true,
|
|
85
|
+
position: 'right',
|
|
86
|
+
title: { display: true, text: 'CCT (K)' },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
// biome-ignore lint/suspicious/noExplicitAny: Chart.js configuration type is complex
|
|
92
|
+
return await canvas.renderToBuffer(configuration);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=graphSchedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphSchedule.js","sourceRoot":"","sources":["../../src/daylightSimulation/graphSchedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CommandDeps } from './types.js';
|
|
2
|
+
export interface SchedulePoint {
|
|
3
|
+
time: Date;
|
|
4
|
+
values: Map<string, {
|
|
5
|
+
cct: number;
|
|
6
|
+
intensity: number;
|
|
7
|
+
}>;
|
|
8
|
+
isSpecial: boolean;
|
|
9
|
+
eventName?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface Schedule {
|
|
12
|
+
lat: number;
|
|
13
|
+
lon: number;
|
|
14
|
+
date: Date;
|
|
15
|
+
source: string;
|
|
16
|
+
points: SchedulePoint[];
|
|
17
|
+
curves: string[];
|
|
18
|
+
times: Record<string, Date | null | undefined>;
|
|
19
|
+
}
|
|
20
|
+
export interface MakeScheduleOptions {
|
|
21
|
+
lat?: string;
|
|
22
|
+
lon?: string;
|
|
23
|
+
date?: string;
|
|
24
|
+
intervalMinutes?: number;
|
|
25
|
+
curves?: string;
|
|
26
|
+
includeSpecialTimes?: boolean;
|
|
27
|
+
bufferMinutes?: number;
|
|
28
|
+
startTime?: Date;
|
|
29
|
+
endTime?: Date;
|
|
30
|
+
}
|
|
31
|
+
export declare class ScheduleMaker {
|
|
32
|
+
private deps;
|
|
33
|
+
constructor(deps: CommandDeps);
|
|
34
|
+
makeSchedule(options: MakeScheduleOptions): Promise<Schedule>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=scheduleMaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduleMaker.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/scheduleMaker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAc;gBAEd,IAAI,EAAE,WAAW;IAIvB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAkMpE"}
|