-98
aethelos-source/Makefile
-98
aethelos-source/Makefile
···
1
-
# Makefile for AethelOS
2
-
# The build incantations for awakening the system
3
-
4
-
.PHONY: all clean bootloader kernel groves runes test qemu
5
-
6
-
# Colors for output
7
-
COLOR_GREEN=\033[0;32m
8
-
COLOR_BLUE=\033[0;34m
9
-
COLOR_CYAN=\033[0;36m
10
-
COLOR_RESET=\033[0m
11
-
12
-
all: bootloader kernel groves runes
13
-
@echo "$(COLOR_GREEN)[] AethelOS build complete!$(COLOR_RESET)"
14
-
15
-
# Build the bootloader
16
-
bootloader:
17
-
@echo "$(COLOR_CYAN)[] Awakening the bootloader...$(COLOR_RESET)"
18
-
nasm -f bin awakening/boot.asm -o build/boot.bin
19
-
@echo "$(COLOR_GREEN)[] Bootloader ready$(COLOR_RESET)"
20
-
21
-
# Build the Heartwood kernel
22
-
kernel:
23
-
@echo "$(COLOR_CYAN)[] Building the Heartwood...$(COLOR_RESET)"
24
-
cd heartwood && cargo build --release
25
-
@echo "$(COLOR_GREEN)[] Heartwood compiled$(COLOR_RESET)"
26
-
27
-
# Build all Grove services
28
-
groves:
29
-
@echo "$(COLOR_CYAN)[] Growing the Groves...$(COLOR_RESET)"
30
-
cd groves/world-tree_grove && cargo build --release
31
-
cd groves/the-weave_grove && cargo build --release
32
-
cd groves/lanthir_grove && cargo build --release
33
-
cd groves/network_sprite && cargo build --release
34
-
@echo "$(COLOR_GREEN)[] Groves flourishing$(COLOR_RESET)"
35
-
36
-
# Build Ancient Runes libraries
37
-
runes:
38
-
@echo "$(COLOR_CYAN)[] Inscribing the Ancient Runes...$(COLOR_RESET)"
39
-
cd ancient-runes/corelib && cargo build --release
40
-
cd ancient-runes/weaving && cargo build --release
41
-
cd ancient-runes/script && cargo build --release
42
-
@echo "$(COLOR_GREEN)[] Runes inscribed$(COLOR_RESET)"
43
-
44
-
# Run tests
45
-
test:
46
-
@echo "$(COLOR_CYAN)[] Testing the Heartwood...$(COLOR_RESET)"
47
-
cd heartwood && cargo test
48
-
@echo "$(COLOR_GREEN)[] Tests complete$(COLOR_RESET)"
49
-
50
-
# Create build directory
51
-
build:
52
-
mkdir -p build
53
-
54
-
# Run in QEMU (requires bootable image)
55
-
qemu: build bootloader
56
-
@echo "$(COLOR_BLUE)[] Awakening in QEMU...$(COLOR_RESET)"
57
-
qemu-system-x86_64 -drive format=raw,file=build/boot.bin
58
-
59
-
# Clean build artifacts
60
-
clean:
61
-
@echo "$(COLOR_CYAN)[] Returning to the void...$(COLOR_RESET)"
62
-
cargo clean
63
-
rm -rf build
64
-
@echo "$(COLOR_GREEN)[] Clean complete$(COLOR_RESET)"
65
-
66
-
# Check code formatting
67
-
fmt:
68
-
cargo fmt --all
69
-
70
-
# Run clippy lints
71
-
clippy:
72
-
cargo clippy --all-targets --all-features
73
-
74
-
# Generate documentation
75
-
docs:
76
-
cargo doc --workspace --no-deps --open
77
-
78
-
# Show build information
79
-
info:
80
-
@echo "$(COLOR_BLUE)=====================================$(COLOR_RESET)"
81
-
@echo "$(COLOR_BLUE) AethelOS Build System$(COLOR_RESET)"
82
-
@echo "$(COLOR_BLUE)=====================================$(COLOR_RESET)"
83
-
@echo "Version: 0.1.0-alpha"
84
-
@echo "Language: Rust $(shell rustc --version | cut -d' ' -f2)"
85
-
@echo ""
86
-
@echo "Available targets:"
87
-
@echo " all - Build everything"
88
-
@echo " bootloader - Build the awakening sequence"
89
-
@echo " kernel - Build the Heartwood"
90
-
@echo " groves - Build all Grove services"
91
-
@echo " runes - Build Ancient Runes libraries"
92
-
@echo " test - Run tests"
93
-
@echo " qemu - Run in QEMU emulator"
94
-
@echo " clean - Remove build artifacts"
95
-
@echo " fmt - Format code"
96
-
@echo " clippy - Run lints"
97
-
@echo " docs - Generate documentation"
98
-
@echo "$(COLOR_BLUE)=====================================$(COLOR_RESET)"
+78
-37
aethelos-source/README.md
+78
-37
aethelos-source/README.md
···
106
106
└── script/ # Shell API
107
107
```
108
108
109
-
## Building
109
+
## Building and Running
110
110
111
111
### Prerequisites
112
112
113
-
- Rust 1.75 or later
114
-
- NASM (for boot.asm)
115
-
- QEMU (for testing)
113
+
- **Rust nightly** (for unstable features)
114
+
- **GRUB** and **grub-mkrescue** (for creating bootable ISO)
115
+
- **QEMU** (for testing)
116
+
- **WSL** or Linux environment (for ISO creation)
116
117
117
118
### Build Commands
118
119
119
120
```bash
120
-
# Build the entire workspace
121
-
cargo build --release
121
+
# Build the kernel (from heartwood directory)
122
+
cd heartwood
123
+
cargo build --bin heartwood --target x86_64-aethelos.json
122
124
123
-
# Build just the kernel
124
-
cd heartwood
125
-
cargo build --release
125
+
# Create bootable ISO (from aethelos-source root)
126
+
cp target/x86_64-aethelos/debug/heartwood isodir/boot/aethelos/heartwood.bin
127
+
grub-mkrescue -o aethelos.iso isodir
126
128
127
-
# Build a specific Grove
128
-
cd groves/world-tree_grove
129
-
cargo build --release
129
+
# Run in QEMU
130
+
qemu-system-x86_64 -cdrom aethelos.iso -serial file:serial.log -m 256M
130
131
```
131
132
132
-
### Running in QEMU
133
+
### Windows Build Script
133
134
134
-
```bash
135
-
# Assemble the bootloader
136
-
nasm -f bin awakening/boot.asm -o boot.bin
137
-
138
-
# Create a bootable disk image
139
-
# (Additional steps would be needed for a complete bootable image)
140
-
141
-
# Run in QEMU
142
-
qemu-system-x86_64 -drive format=raw,file=boot.bin
135
+
```cmd
136
+
@echo off
137
+
cd heartwood
138
+
cargo build --bin heartwood --target x86_64-aethelos.json
139
+
cd ..
140
+
wsl bash -c "cp target/x86_64-aethelos/debug/heartwood isodir/boot/aethelos/heartwood.bin && grub-mkrescue -o aethelos.iso isodir"
141
+
"C:\Program Files\qemu\qemu-system-x86_64.exe" -cdrom aethelos.iso -m 256M
143
142
```
144
143
145
144
## Key Innovations
···
193
192
194
193
## Current Status
195
194
196
-
**Version 0.1.0-alpha** - "The First Breath"
195
+
**Version 0.1.0-alpha** - "The First Awakening"
196
+
197
+
AethelOS now boots successfully with a working interactive shell! This milestone demonstrates core multitasking and I/O capabilities.
198
+
199
+
### ✅ Currently Working
200
+
201
+
**Boot & Initialization:**
202
+
- Multiboot2 bootloader integration with GRUB
203
+
- VGA text mode initialization (80x25, Code Page 437)
204
+
- Serial port debugging output
205
+
- IDT (Interrupt Descriptor Table) setup
206
+
- PIC (Programmable Interrupt Controller) initialization
207
+
- GDT (Global Descriptor Table) configuration
208
+
209
+
**Threading & Scheduling:**
210
+
- Thread creation and management (Loom of Fate)
211
+
- Cooperative multitasking (threads yield voluntarily)
212
+
- Context switching with proper stack alignment
213
+
- Three system threads running:
214
+
- **Idle Thread**: Low-priority background thread
215
+
- **Keyboard Thread**: Processes keyboard input
216
+
- **Shell Thread**: Interactive command prompt (Eldarin)
217
+
- Thread-safe spinlocks with interrupt management
218
+
219
+
**I/O Systems:**
220
+
- Keyboard interrupt handler (scancode processing)
221
+
- VGA text output with cursor control
222
+
- Interactive shell prompt accepting input
223
+
- Serial port logging for debugging
224
+
225
+
**Memory Management:**
226
+
- Bump allocator for kernel heap
227
+
- Per-thread stack allocation (16KB stacks)
228
+
- IRQ-safe mutex implementation
197
229
198
-
This is a foundational implementation demonstrating the core architecture and philosophy. Currently implemented:
230
+
### 🚧 Partially Implemented
231
+
232
+
- Basic keyboard input (no full scancode translation yet)
233
+
- Shell framework (command parsing not yet implemented)
234
+
- Harmony-based scheduling metrics (calculated but not yet used)
235
+
- Thread priority system (defined but not affecting scheduling)
236
+
237
+
### ❌ Not Yet Implemented
199
238
200
-
✅ Complete architectural design
201
-
✅ Heartwood kernel structure (Nexus, Loom of Fate, Mana Pool, Attunement)
202
-
✅ All Grove services (stubs)
203
-
✅ Ancient Runes libraries (basic implementations)
204
-
✅ Boot sequence design
239
+
- **Nexus (IPC)**: Message passing between threads/processes
240
+
- **Mana Pool**: Capability-based memory management
241
+
- **World-Tree Grove**: Query-based filesystem
242
+
- **The Weave**: Vector graphics compositor
243
+
- **Network Sprite**: Network stack
244
+
- User-space processes (currently only kernel threads)
245
+
- Virtual memory management (MMU)
246
+
- Most device drivers
205
247
206
-
### Not Yet Implemented
248
+
### Recent Milestones
207
249
208
-
- Actual hardware initialization
209
-
- Real memory allocator (currently using placeholder bump allocator)
210
-
- Complete interrupt handling
211
-
- Physical device drivers
212
-
- Full filesystem implementation
213
-
- Graphics rendering pipeline
214
-
- Network stack
250
+
**January 2025:**
251
+
- ✅ First successful boot with shell prompt
252
+
- ✅ Fixed critical timer interrupt deadlock (removed preemption)
253
+
- ✅ Implemented proper x86-64 stack alignment (16n-8)
254
+
- ✅ IRQ-safe mutex with proper lock release
255
+
- ✅ Cooperative multitasking working correctly
215
256
216
257
## Why AethelOS?
217
258
-1
aethelos-source/serial.log
-1
aethelos-source/serial.log
···
1
-
BSLSR12AB~b$%$%$%$%$%$%~VWG+@$%#E[~]DCVWG+@$%#E[~]DMNa[]bcdeOPQRSDVWG+@$%#E[~]DEVWG+@$%#E[~]Dnxsu!FVWG+@$%#E[~]DGVWG+@$%#E[~]D1Aa[]b[]c[]defghijBCDy3VWG+@$%#E[~]D[]VWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DMmMm[][]VWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DMmMm[]VWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DMmMmVWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DVWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DVWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DVWG+@$%#E[~]DHVWG+@$%#E[~]DIVWG+@$%#E[~]DVWG+@$%#E[~]DVWG+@$%#E[~]DVWG+@$%#E[~]DM...mM....mM....mM....mM....mVWG+@$%#E[~]DVWG+@$%#E[~]DVWG+@$%#E[~^]DJVWG+@$%#E[~^]DLVWG+@$%#E[~^]DMmMmMmMmMmMVWG+@$%#E[~^]DKVWG+@$%#E[~^]DVWG+@$%#E[~^]D3HXY!SI.P1[]2345LCKVWG+@$%#E[~^]DP12345LCT+VWG+@$%#E[~^]D*VWG+@$%#E[~^]D1VWG+@$%#E[~^]D2VWG+@$%#E[~^]D3VWG+@$%#E[~^]D4VWG+@$%#E[~^]D5VWG+@$%#E[~^]D6VWG+@$%#E[~^]D7VWG+@$%#E[~^]D8VWG+@$%#E[~^]D9VWG+@$%#E[~^]D0VWG+@$%#E[~^]D!VWG+@$%#E[~^]D>VWG+@$%#E[~^]DP12345LCR6yh.P12345LCR6P1[]Mm-2345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P1[]Mm-2345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P1[]Mm-2345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P1[]Mm-2345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P1[]M.m-2345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCVWG+@$%#E[~]DR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]D!MmVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#@$%#@$%#@$%#E[~^]DVWG+@$%#MmMmMmMmMmMmMmMmMmMmMmMm@$%#@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]D>VWG+@$%#E[~^]DP12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6