From 583262f5f0cf2cf57f639665c310d4395409b7d7 Mon Sep 17 00:00:00 2001 From: Linehu Date: Sat, 3 Oct 2026 00:30:54 +0800 Subject: [PATCH] feat: SKEL skeleton instrumentation - designed-but-unimplemented paths panic - hypercall.c: 5 Phase 1.3 stubs -> HCALL-E01..E05 panic (no NOSYS return) - drr_stub.c: snapshot alloc fail -> DRR-E01; new skeletons DRR-E02 root key seal, DRR-E03 task kill crypto erase, DRR-E04/E05 segment/system rollback, DRR-E06/E07 driver recovery ops dispatch - sched.c: enable fail -> SCH-E02 panic (no silent demo skip) - dkm/kernel_api.c: D1 hot-unload DKM-E01, D2 bare code loader DKM-E02, SIPI AP wake DKM-E03 skeletons - virtio_net tx/rx stubs -> VNET-E01/E02; ath9k tx stub -> ATH-E01; xhci port reset -> XHC-E01; nvme MSI/MSI-X fail -> NVME-E01..E03 (no silent polling downgrade); e1000 MAC fallback -> E1K-E01 - pe_shim unimpl API -> PE-E01; PE ordinal import -> PE-E02 - kernel/main.c: lib sync / vscode install fail -> LNX-E01/E02 - NEW brand/brand.c (E1 boot anim BRAND-E01, E2 time egg BRAND-E02) and pkg/pkg.c (pacman skeleton PKG-E01..03), wired into UTSM MAKEFILE - Deliberate design-internal fallbacks kept and documented (VMX skip, bzImage skip, KDE fallback, boot-module fallback, apic->PIC route) --- CODE/DKM/ath9k/ath9k.c | 11 ++++-- CODE/DKM/e1000/e1000.c | 7 ++-- CODE/DKM/nvme/nvme.c | 13 +++++-- CODE/DKM/virtio_net/virtio_net.c | 16 ++++---- CODE/DKM/xhci/xhci.c | 3 +- CODE/UTSM/MAKEFILE | 2 +- CODE/UTSM/brand/brand.c | 30 +++++++++++++++ CODE/UTSM/brand/brand.d | 5 +++ CODE/UTSM/dkm/kernel_api.c | 30 +++++++++++++++ CODE/UTSM/dkm/kernel_api.o | Bin 6656 -> 7392 bytes CODE/UTSM/drr/drr_stub.c | 61 +++++++++++++++++++++++++++++- CODE/UTSM/drr/drr_stub.d | 11 +++--- CODE/UTSM/drr/drr_stub.o | Bin 27216 -> 28800 bytes CODE/UTSM/kernel/main.c | 15 ++++++-- CODE/UTSM/kernel/main.d | 22 ++++++----- CODE/UTSM/kernel/main.o | Bin 22032 -> 22232 bytes CODE/UTSM/pe/pe_loader.c | 7 +++- CODE/UTSM/pe/pe_loader.d | 14 +++++++ CODE/UTSM/pe/pe_shim.c | 9 ++++- CODE/UTSM/pe/pe_shim.d | 11 ++++++ CODE/UTSM/pkg/pkg.c | 38 +++++++++++++++++++ CODE/UTSM/pkg/pkg.d | 5 +++ CODE/UTSM/sched/sched.c | 5 ++- CODE/UTSM/sched/sched.d | 13 ++++--- CODE/UTSM/vmm/hypercall.c | 25 +++++++----- CODE/UTSM/vmm/hypercall.d | 17 +++++++++ CODE/dsk/main.c | 3 +- CODE/dsk/main.o | Bin 4474232 -> 4474200 bytes SYSTEM/boot/utsm.elf | Bin 971176 -> 971808 bytes SYSTEM/driver/block/nvme.drv | Bin 74816 -> 75088 bytes SYSTEM/driver/block/xhci.drv | Bin 48832 -> 48816 bytes SYSTEM/driver/net/ath9k.drv | Bin 14760 -> 14976 bytes SYSTEM/driver/net/e1000.drv | Bin 18568 -> 18632 bytes SYSTEM/driver/net/virtio_net.drv | Bin 32704 -> 32944 bytes SYSTEM/system/deshab64/deshab.elf | Bin 4470184 -> 4470152 bytes 35 files changed, 316 insertions(+), 57 deletions(-) create mode 100644 CODE/UTSM/brand/brand.c create mode 100644 CODE/UTSM/brand/brand.d create mode 100644 CODE/UTSM/pe/pe_loader.d create mode 100644 CODE/UTSM/pe/pe_shim.d create mode 100644 CODE/UTSM/pkg/pkg.c create mode 100644 CODE/UTSM/pkg/pkg.d create mode 100644 CODE/UTSM/vmm/hypercall.d diff --git a/CODE/DKM/ath9k/ath9k.c b/CODE/DKM/ath9k/ath9k.c index 561e771..c33e974 100644 --- a/CODE/DKM/ath9k/ath9k.c +++ b/CODE/DKM/ath9k/ath9k.c @@ -531,8 +531,11 @@ static void ath9k_rx_drain(void) { * 真实硬件验证后增量完善。 */ static void ath9k_set_channel(u8 channel) { - (void)channel; - /* TODO: 完整 ath9k 信道切换序列(参考 ar9002_hw_set_channel) */ + /* TODO: 完整 ath9k 信道切换序列(参考 ar9002_hw_set_channel)。 + * 严格错误策略插桩:本序列是占位最小实现,若上层依赖"信道已真正 + * 切换"的语义(如定向扫描),调用方必须走 panic 版本接口—— + * 当前扫描状态机明确容忍近似信道,此处保留最小序列并打点。 */ + raw_hex("[ath9k] set_channel (minimal sequence), ch=", channel); /* 触发 RFBUS 请求,等待 grant */ ath9k_reg_write(AR_PHY_RFBUS_REQ, 0x1); dkm_delay_us(5); @@ -601,9 +604,11 @@ static int ath9k_is_wireless_impl(void *ctx) { return 1; } -/* ath9k 当前不支持 TX(仅扫描) */ +/* ath9k 当前不支持 TX(仅扫描)——严格错误策略插桩:上层若真把帧交给 + * 只会扫描的无线驱动,panic 而非静默丢包(ATH-E01)。 */ static int ath9k_tx_stub(void *ctx, const void *packet, u32 length) { (void)ctx; (void)packet; (void)length; + g_log->panic("ATH-E01 TX NOT IMPLEMENTED (scan-only driver got a tx)"); return -1; } diff --git a/CODE/DKM/e1000/e1000.c b/CODE/DKM/e1000/e1000.c index fafbfe1..c975c6d 100644 --- a/CODE/DKM/e1000/e1000.c +++ b/CODE/DKM/e1000/e1000.c @@ -735,11 +735,12 @@ int driver_init(const struct dkm_kernel_api *api, raw_log("[e1000] MAC from RAL/RAH\n"); } - /* 仍为全 0 或多播位错误时使用与虚拟机配置一致的回退 MAC */ + /* 仍为全 0 或多播位错误时——严格错误策略插桩:MAC 读不到 = 网卡 + * 身份不可知,零降级 panic(E1K-E01),不再用硬编码 MAC 冒充。 */ if ((mac[0]==0&&mac[1]==0&&mac[2]==0&&mac[3]==0&&mac[4]==0&&mac[5]==0) || (mac[0] & 1)) { - mac[0]=0x52; mac[1]=0x54; mac[2]=0x00; mac[3]=0x12; mac[4]=0x34; mac[5]=0x56; - raw_log("[e1000] using fallback MAC 52:54:00:12:34:56\n"); + raw_log("[e1000] MAC read failed (zero/multicast)\n"); + g_log->panic("E1K-E01 MAC READ FAILED"); } raw_mac("[e1000] MAC=", mac); diff --git a/CODE/DKM/nvme/nvme.c b/CODE/DKM/nvme/nvme.c index d0557c1..57609b7 100644 --- a/CODE/DKM/nvme/nvme.c +++ b/CODE/DKM/nvme/nvme.c @@ -920,13 +920,17 @@ static int nvme_msix_program(const struct dkm_kernel_api *api, * 页属性 PCD|PWT (UC), MSI-X 表访问不要求 cache 一致性操作。 */ volatile u32 *tbl = (volatile u32 *)api->mm_map_mmio(tbl_phys, 4096); if (!tbl) { - g_log->warn("[nvme] MSI-X: table MMIO map failed; polling"); + /* 严格错误策略插桩:MSI-X 表映射失败不允许静默转轮询(NVME-E01) */ + g_log->error("[nvme] MSI-X: table MMIO map failed"); + g_log->panic("NVME-E01 MSIX TABLE MAP FAILED"); return 0; } int vector = api->irq_vector_alloc(); if (vector < 0 || vector > 255) { - g_log->warn("[nvme] MSI-X: vector alloc failed; polling"); + /* 严格错误策略插桩:向量分配失败不允许静默转轮询(NVME-E02) */ + g_log->error("[nvme] MSI-X: vector alloc failed"); + g_log->panic("NVME-E02 VECTOR ALLOC FAILED"); return 0; } log_dec("[nvme] MSI-X vector=", (u64)vector); @@ -958,7 +962,10 @@ static int nvme_msix_program(const struct dkm_kernel_api *api, log_hex("[nvme] MSI-X readback entry vctl=", rb_vc); if (!(rb_ctl & 0x8000u) || rb_a0 != addr || rb_a1 != 0 || (rb_d & 0xffu) != ((u32)vector & 0xffu) || (rb_vc & 1u)) { - g_log->warn("[nvme] MSI-X: readback mismatch; rolling back"); + /* 严格错误策略插桩:MSI-X 编程回读不符 = 硬件/虚拟机拒绝消息中断, + * 不允许静默回滚转轮询(NVME-E03)。 */ + g_log->error("[nvme] MSI-X: readback mismatch"); + g_log->panic("NVME-E03 MSIX READBACK MISMATCH"); u32 rb = dkm_pci_read(bus, dev, func, (u8)cap); rb = (rb & 0x0000ffffu) | (msg_ctl << 16); /* 恢复原 msg_ctl */ dkm_pci_write(bus, dev, func, (u8)cap, rb); diff --git a/CODE/DKM/virtio_net/virtio_net.c b/CODE/DKM/virtio_net/virtio_net.c index 88b675c..24ccf77 100644 --- a/CODE/DKM/virtio_net/virtio_net.c +++ b/CODE/DKM/virtio_net/virtio_net.c @@ -775,19 +775,21 @@ static void virtio_net_selftest(void) { log_hex("[virtio_net] selftest rx frames seen=", frames); } -/* ================= stub(初始化失败时的安全占位,与历史行为一致) ================= */ +/* ================= stub(初始化失败时的安全占位) ================= + * 严格错误策略插桩:占位不再静默丢包/静默无数据——一旦被上层调用 + * (即有人真的把流量交给未协商 virtqueue 的设备),立即莲花 panic。 + * 正常路径 netman 因 flags 缺 LINK_UP 不会选中本驱动,stub 不触发。 */ static int virtio_net_tx_stub(void *ctx, const void *packet, u32 length) { - (void)ctx; - (void)packet; - log_hex("[virtio_net] tx stub: packet dropped, len=", length); + (void)ctx; (void)packet; + log_hex("[virtio_net] tx stub hit, len=", length); + g_log->panic("VNET-E01 TX VIRTQUEUE NOT IMPLEMENTED (stub tx called)"); return 0; } static int virtio_net_rx_poll_stub(void *ctx, void *buffer, u32 capacity, u32 *out_length) { - (void)ctx; - (void)buffer; - (void)capacity; + (void)ctx; (void)buffer; (void)capacity; + g_log->panic("VNET-E02 RX VIRTQUEUE NOT IMPLEMENTED (stub rx called)"); if (out_length) *out_length = 0; return 0; } diff --git a/CODE/DKM/xhci/xhci.c b/CODE/DKM/xhci/xhci.c index 63613b7..aa17e24 100644 --- a/CODE/DKM/xhci/xhci.c +++ b/CODE/DKM/xhci/xhci.c @@ -2073,7 +2073,8 @@ int driver_init(const struct dkm_kernel_api *api, /* Port Reset */ if (xhci_reset_port(port) != 0) { - g_log->warn("[xhci] port reset failed; skipping"); + /* 严格错误策略插桩:端口复位失败 = 设备不可用,零降级 panic */ + g_log->panic("XHC-E01 PORT RESET FAILED"); continue; } g_log->info("[xhci] port reset OK"); diff --git a/CODE/UTSM/MAKEFILE b/CODE/UTSM/MAKEFILE index fd66494..06e191c 100644 --- a/CODE/UTSM/MAKEFILE +++ b/CODE/UTSM/MAKEFILE @@ -9,7 +9,7 @@ CFLAGS := -target x86_64-unknown-none -std=c11 -ffreestanding -fno-builtin -fno- ASFLAGS := -target x86_64-unknown-none -ffreestanding -fno-pic -fno-pie -mcmodel=kernel -mno-red-zone -mno-sse -mno-sse2 -mno-mmx -msoft-float -m64 -Iinclude -I../utsm-ipc LDFLAGS := -nostdlib -static -z max-page-size=0x1000 -T linker.ld -C_SOURCES := $(wildcard arch/x86_64/*.c kernel/*.c runtime/*.c mm/*.c core/*.c crypto/*.c pckc/*.c utrw/*.c drr/*.c sched/*.c dkm/*.c test/*.c vmm/*.c pe/*.c) +C_SOURCES := $(wildcard arch/x86_64/*.c kernel/*.c runtime/*.c mm/*.c core/*.c crypto/*.c pckc/*.c utrw/*.c drr/*.c sched/*.c dkm/*.c test/*.c vmm/*.c pe/*.c brand/*.c pkg/*.c) S_SOURCES := $(wildcard arch/x86_64/*.S vmm/*.S sched/*.S) OBJECTS := $(C_SOURCES:.c=.o) $(S_SOURCES:.S=.o) DEPS := $(C_SOURCES:.c=.d) diff --git a/CODE/UTSM/brand/brand.c b/CODE/UTSM/brand/brand.c new file mode 100644 index 0000000..2afd50f --- /dev/null +++ b/CODE/UTSM/brand/brand.c @@ -0,0 +1,30 @@ +/* =================================================================== + * brand.c — 五期 E 系列:品牌体验骨架 + * + * 设计已定、实现未做的品牌项,全部立骨架 + 调用即莲花 panic。 + * 骨架不接线:当前启动走静态 Logo(DSK),接线上屏是后续任务。 + * + * E1 启动莲花动画:静态 Logo → 分瓣绽放动画(时间轴设计见 + * docs/ROADMAP_INSANE.md E1)。实现前调用即 panic。 + * E2 假想时光键彩蛋:特定按键序列触发"时光倒流"演出(回放最近 + * 一段帧缓冲历史,DRR checkpoint 帧源)。实现前调用即 panic。 + * =================================================================== */ + +#include +#include +#include + +/* E1: 启动莲花动画(brand-E 系列) */ +void brand_lotus_boot_anim(u32 hold_ms) { + (void)hold_ms; + log_error("[BRAND] lotus boot animation requested"); + panic_full("BRAND-E01 LOTUS BOOT ANIM NOT IMPLEMENTED", + "E1 petal-bloom boot animation: designed, not implemented", 0); +} + +/* E2: 假想时光键彩蛋(Ctrl+Alt+Shift+T 时光倒流演出) */ +void brand_time_egg_trigger(void) { + log_error("[BRAND] time egg triggered"); + panic_full("BRAND-E02 TIME EGG NOT IMPLEMENTED", + "E2 imaginary time-key easter egg: designed, not implemented", 0); +} diff --git a/CODE/UTSM/brand/brand.d b/CODE/UTSM/brand/brand.d new file mode 100644 index 0000000..54a571d --- /dev/null +++ b/CODE/UTSM/brand/brand.d @@ -0,0 +1,5 @@ +brand/brand.o: brand\brand.c include\utsm\types.h include\utsm\panic.h \ + include\utsm\log.h +include\utsm\types.h: +include\utsm\panic.h: +include\utsm\log.h: diff --git a/CODE/UTSM/dkm/kernel_api.c b/CODE/UTSM/dkm/kernel_api.c index e0b9c72..af9bf9b 100644 --- a/CODE/UTSM/dkm/kernel_api.c +++ b/CODE/UTSM/dkm/kernel_api.c @@ -177,3 +177,33 @@ void dkm_fill_platform_info(void) { /* D3: 按名导出表挂入 kernel_api(尾部追加,ABI 兼容) */ g_kernel_api.kapi = &g_kapi_table; } + +/* =================================================================== + * 严格错误策略插桩:设计已定但未实现的 DKM 能力,建立代码骨架, + * 调用即莲花 panic(DKM-E 系列)。当前无调用方(骨架)。 + * =================================================================== */ + +/* D1: DKM 驱动热卸载(引用计数)。driver_desc 已有 NO_UNLOAD 标志位, + * 但卸载路径本身(refcount + driver_exit + 段回收)未实现。 */ +void dkm_unload_driver(u32 driver_index) { + (void)driver_index; + panic_full("DKM-E01 DRIVER HOT UNLOAD NOT IMPLEMENTED", + "refcount unload path: designed (D1), not implemented", 0); +} + +/* D2: 裸机器码加载器(无 ELF 头,直接映射 .text blob 到可执行页跳转)。 + * SAS-R0 单地址空间下合法;加载器未实现。 */ +void *dkm_load_bare_code(const void *blob, u64 size) { + (void)blob; (void)size; + panic_full("DKM-E02 BARE CODE LOADER NOT IMPLEMENTED", + "headerless machine-code loader: designed (D2), not implemented", 0); + return 0; +} + +/* 多核:SIPI 唤醒 AP(apic.drv 注释预留)。BSP-only 是当前既定边界, + * 一旦被调用即 panic 而非静默单核继续。 */ +void dkm_sipi_wake_ap(u32 lapic_id, u64 entry_eip) { + (void)lapic_id; (void)entry_eip; + panic_full("DKM-E03 SIPI AP WAKE NOT IMPLEMENTED", + "AP startup framework: designed, not implemented (BSP-only)", 0); +} diff --git a/CODE/UTSM/dkm/kernel_api.o b/CODE/UTSM/dkm/kernel_api.o index 6f68e620beecd3e53d2197cdbbbc6bee73fda29d..e75898c0e5fded52a0532ff0ea359fcd7c4763cb 100644 GIT binary patch delta 1866 zcmZ{kO>7%Q6vubAP8^#L=c9Pm5j0b&4R#tQafk7Ac{Q|nk*T;TDKj-U-Daw)fiESAS+%MUMObWd>@j_k#V4lNk;K7?XpANJ<=A-gpgyiAru3LnGUsLsi}?y$ z%r6v-G%FgF%s!Sj%h{*$W|{?Kkx)O&7b+~9D=wHhGhZ>&O68TK+u|7bM)zm4{?!(+)Y7EQA0=mA}B zV)fv>Trof`aSf#{QOP2zeLQTL;Nr zXtdJ6??h3E;>PD~*)`!4(BY=pD37ZA!&Do4MRZ#5p(g$skE4F1iJ#{8$diKa5_NtN z`Wl>cPpd5|Ty;MYxXg=pqF9LT5WWwLHcGyQlYD(0I=q^7^}e-Uu+|m0-j*WY!y(Tg z*LWEiCPueJ^d1qt$vtxXqB&U!t4o^C zGzdq%aq{@ao8D6{Qio+9)xHo#ZsQ5Kl^M+B21%b5xzZGT$&M*MHSx28{|bkEwCWc9 zosu_1^v))Jx2WP5+{Jaf`R|XLw)ILpDDnFx9+LQ@HXl{6P@fc-5ed#fcs|e!sgT_G z16cP_at&A5@_kihLKnBw_=&Wiv2(thqu}rnp+DNBch1+7631t5hu^3m MJxq+0fkvR`Z}8++TL1t6 delta 1169 zcmZ9MO=wd=5P)~rq)lE^tj*8nf*jMCz#owDuG|cn}Zupod~1@t__m#A_?mnSJ~0qZ4-K%{M=p9bVEnFy2>9 ziF#xqv%+f^MNzS%$wpd^%LY&ZG>KXuIw&HFT8-o_tcobnsn_*LvryrubG-KS~i3zh)We@1-gaLs># zzlYC$X|`i-H`a{m+!0;-8n_{OS?OC!Pb>XQ=}V-cY7D`6hX>2?lE-I7;P|ExF*AEHDQYDHzv!iNc>INVwISsVZ7&ca7s zoMy>u|FVly|GGVMg%w=^DmbG3>n`pdXxzmq|G4&VyEx@LgH~Of@=t4jM%n(Yn>jal zsuO5HDj3!NOKpj#U@~NhB7^x*PTXX$g61v*Bb*bn4Dx8^8C*fL$lzf(7yhVgqxP-U z*3z&Vw!*7Al5#~d&>6A9EgczfMY3=(vY#iQ6v=o}=}Z=$M83hKG;42Ukwe~m&hJ3e zl>W`2U0eqqJIo)$V5~pAsDD!_uN@1Zp+)&@mqoRmg}Im%4FOBBB!2)+a(2QxIt$Qa z$#j8UClWoE?QFRYeg$Ke6a_Dott5Y;`YZ=w$vPx@+h85p2=v6IxYve%9T6CgcX0t@ Z2z~{j98dBon2SsQOq<<40q^2_{sBUpw*mkF diff --git a/CODE/UTSM/drr/drr_stub.c b/CODE/UTSM/drr/drr_stub.c index 4094407..8199176 100644 --- a/CODE/UTSM/drr/drr_stub.c +++ b/CODE/UTSM/drr/drr_stub.c @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -317,13 +318,71 @@ void drr_init(void) { log_info("[DRR] snapshot region ok"); log_hex64("[DRR] pages=", 1 + 128); } else { - log_warn("[DRR] snapshot region unavailable (metadata-only mode)"); + /* 严格错误策略插桩:快照区是 DRR 页回滚的前提,缺失即降级 + * metadata-only——按零降级原则直接 panic(DRR-E01)。 */ + panic_full("DRR-E01 SNAPSHOT REGION ALLOC FAILED", + "snapshot dma pages unavailable; metadata-only mode is forbidden", 0); } } log_info("[DRR] init ok"); } +/* =================================================================== + * 严格错误策略插桩:设计已定但未实现的 DRR 能力,建立代码骨架, + * 调用即 panic(DRR-E2x 系列)。当前无调用方(骨架)。 + * =================================================================== */ + +/* Root key 持久化(sealed disk region):drr_init 可重入要求 root key + * 跨 emergency reset 固化。当前实现走内存 fallback key(见 + * drr_root_key_generate),sealed disk 尚未落盘。 */ +void drr_root_key_seal_to_disk(void) { + panic_full("DRR-E02 ROOT KEY SEAL NOT IMPLEMENTED", + "sealed disk region for root key persistence: designed, not implemented", 0); +} + +/* task_kill crypto erase:任务被杀时 key_epoch++ 并擦除其密钥材料。 + * 当前 task_exit 只回收 slot,不做 crypto erase。 */ +void drr_task_kill_crypto_erase(u32 task_slot) { + (void)task_slot; + panic_full("DRR-E03 TASK KILL CRYPTO ERASE NOT IMPLEMENTED", + "key_epoch++ erase on task kill: designed, not implemented", 0); +} + +/* segment/system 级回滚入口(R4 遗留):页级回滚已实现, + * segment/system 级接口的调用方尚未接线。 */ +void drr_rollback_segment(u32 seg_slot) { + (void)seg_slot; + panic_full("DRR-E04 SEGMENT ROLLBACK NOT IMPLEMENTED", + "segment-level rollback: designed (R4), not verified/implemented", 0); +} + +void drr_rollback_system(void) { + panic_full("DRR-E05 SYSTEM ROLLBACK NOT IMPLEMENTED", + "system-level rollback: designed (R4), not verified/implemented", 0); +} + +/* DKM 驱动 recovery ops(DKM README 设计:quiesce/reset/reinit/dump_state)。 + * 驱动侧从未提供该回调表,DRR 亦未在恢复路径调用。 */ +typedef struct { + u32 magic; /* 'D','R','O','P' */ + u32 version; + void (*quiesce)(void *drv); + void (*reset)(void *drv); + void (*reinit)(void *drv); + void (*dump_state)(void *drv); +} dkm_driver_recovery_ops; + +void drr_driver_recovery_dispatch(const dkm_driver_recovery_ops *ops, void *drv) { + (void)drv; + if (!ops) { + panic_full("DRR-E06 DRIVER RECOVERY OPS MISSING", + "driver did not provide dkm_driver_recovery_ops", 0); + } + panic_full("DRR-E07 DRIVER RECOVERY NOT IMPLEMENTED", + "quiesce/reset/reinit dispatch: designed (DKM README), not implemented", 0); +} + const u64 *drr_get_root_key(void) { return g_drr.root_key; } diff --git a/CODE/UTSM/drr/drr_stub.d b/CODE/UTSM/drr/drr_stub.d index 8c79edc..5714c26 100644 --- a/CODE/UTSM/drr/drr_stub.d +++ b/CODE/UTSM/drr/drr_stub.d @@ -1,13 +1,14 @@ drr/drr_stub.o: drr\drr_stub.c include\utsm\drr.h include\utsm\types.h \ - include\utsm\config.h include\utsm\log.h include\utsm\dma.h \ - include\utsm\segment.h include\utsm\uuid.h include\utsm\status.h \ - include\utsm\capability.h include\utsm\dirty.h include\utsm\dkm.h \ - include\utsm\block.h include\utsm\net.h include\utsm\paging.h \ - include\utsm\crypto.h include\utsm\blake2b.h + include\utsm\config.h include\utsm\log.h include\utsm\panic.h \ + include\utsm\dma.h include\utsm\segment.h include\utsm\uuid.h \ + include\utsm\status.h include\utsm\capability.h include\utsm\dirty.h \ + include\utsm\dkm.h include\utsm\block.h include\utsm\net.h \ + include\utsm\paging.h include\utsm\crypto.h include\utsm\blake2b.h include\utsm\drr.h: include\utsm\types.h: include\utsm\config.h: include\utsm\log.h: +include\utsm\panic.h: include\utsm\dma.h: include\utsm\segment.h: include\utsm\uuid.h: diff --git a/CODE/UTSM/drr/drr_stub.o b/CODE/UTSM/drr/drr_stub.o index 064fe45c7630aac9f5f50146170fc631c5511221..354fb6ec6d28d7040998651e48398b5e8f74d020 100644 GIT binary patch delta 9317 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 delta 7769 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 diff --git a/CODE/UTSM/kernel/main.c b/CODE/UTSM/kernel/main.c index 648078b..d23b28c 100644 --- a/CODE/UTSM/kernel/main.c +++ b/CODE/UTSM/kernel/main.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -427,14 +428,22 @@ void kernel_main(void) { if (g_compat_linux_lib_sync) { int lsrc = lxc_sync_lib_dir(g_compat_linux_guest_path); if (lsrc == 0) log_info("[UTSM] lib sync ok"); - else log_warn("[UTSM] lib sync skipped (non-fatal)"); + else { + /* 严格错误策略插桩:lib 同步失败零降级(LNX-E01) */ + panic_full("LNX-E01 LIB SYNC FAILED", + "FAT32 lib dir sync to Linux guest failed", 0); + } } /* VSCode Phase 5: tarball module 存在时装到 guest /opt/vscode - * (已安装则秒跳过;失败不阻断启动,桌面降级显示未安装) */ + * (已安装则秒跳过;失败零降级 panic) */ if (g_compat_vscode_install) { int vsrc = lxc_vscode_install(); if (vsrc == 0) log_info("[UTSM] vscode ready"); - else log_warn("[UTSM] vscode install skipped (non-fatal)"); + else { + /* 严格错误策略插桩:VSCode 安装失败零降级(LNX-E02) */ + panic_full("LNX-E02 VSCODE INSTALL FAILED", + "vscode tarball install into guest failed", 0); + } } } else { log_error("[UTSM] Linux launch failed"); diff --git a/CODE/UTSM/kernel/main.d b/CODE/UTSM/kernel/main.d index 25513df..f4c041a 100644 --- a/CODE/UTSM/kernel/main.d +++ b/CODE/UTSM/kernel/main.d @@ -1,17 +1,19 @@ kernel/main.o: kernel\main.c include\utsm\log.h include\utsm\types.h \ - include\utsm\arena.h include\utsm\utsm.h include\utsm\status.h \ - include\utsm\config.h include\utsm\uuid.h include\utsm\process.h \ - include\utsm\capability.h include\utsm\segment.h include\utsm\dirty.h \ - include\utsm\utrw.h include\utsm\vmm.h include\utsm\linux_loader.h \ - include\utsm\ipc_shm.h ..\utsm-ipc\ipc_proto.h \ - include\utsm\hypercall.h include\utsm\drr.h include\utsm\sched_ext.h \ - include\utsm\sched.h include\utsm\dkm.h include\utsm\dma.h \ - include\utsm\block.h include\utsm\net.h include\utsm\paging.h \ - include\utsm\idt.h include\utsm\dsk.h include\utsm\linux_compat.h \ - include\utsm\xj380_loader.h include\utsm\instr.h kernel\ini_parser.h \ + include\utsm\panic.h include\utsm\arena.h include\utsm\utsm.h \ + include\utsm\status.h include\utsm\config.h include\utsm\uuid.h \ + include\utsm\process.h include\utsm\capability.h \ + include\utsm\segment.h include\utsm\dirty.h include\utsm\utrw.h \ + include\utsm\vmm.h include\utsm\linux_loader.h include\utsm\ipc_shm.h \ + ..\utsm-ipc\ipc_proto.h include\utsm\hypercall.h include\utsm\drr.h \ + include\utsm\sched_ext.h include\utsm\sched.h include\utsm\dkm.h \ + include\utsm\dma.h include\utsm\block.h include\utsm\net.h \ + include\utsm\paging.h include\utsm\idt.h include\utsm\dsk.h \ + include\utsm\linux_compat.h include\utsm\xj380_loader.h \ + include\utsm\instr.h kernel\ini_parser.h \ kernel\..\arch\x86_64\limine.h kernel\..\pe\pe_dll_manager.h include\utsm\log.h: include\utsm\types.h: +include\utsm\panic.h: include\utsm\arena.h: include\utsm\utsm.h: include\utsm\status.h: diff --git a/CODE/UTSM/kernel/main.o b/CODE/UTSM/kernel/main.o index 3bf6dc09e851ff766487c48c50990cb9b3b59b74..1adfdd7e283b899319d6467255e1e2ae4d01aa51 100644 GIT binary patch delta 1441 zcmZuwZA@Eb6u#%mIxZ8}E}Ji9sl71v(Mo&UZAx66Pzt?tw3X6!S+htfP+XUWF(`EP zW2|N-B>n()%nZgQhkEQ%F_)*_`dpnoLbMv0} zp7WghoadhV-to8K>&q~{i>(OGny<4kFJ)P8`OZBpi;E1kpJn&r)g)2lmc{FG#(q-) zenD;d=DLliFa4d%6)G$Lw{m5amfXv^lEO)?QM-RNm+Pfw-Do^56HD{j=QJZ8-yuu0 z&CYw=jeH>NbMh{S+tb{{xE#SfyZJ=Ci|>gK@Pp~TZa#U8_r&{#PVi3;#RijnZ#15W z^)QD+!GQNEet59^SWk=}h(&wSOrCT%e=y*DvZZL$*j4$=P*hHfi82It&qb8>b8eI&sc$hkJh=!?5%^kFyVraHy5vhG7OU zVi7u!gU5LRN|m}Rd?$Q@`YI9jVYG_qwIvLrV@j9?g^Rhn zpTr4@dQ?;y9Ic?CViGP?rQjvXPCHlIU=B0Y1YVP4X{Ndq;CEcECiwZb3II6?w-s+y zB-m;yz@glA*0eysf^_3TjR=%{6i6J$ND_OZ#eY?!SVV-;FebE*8{X;wjlx;^gF(S^Jr=m z=phL=itr&$HIB)IP66J$Ek0} z$pd5X2AWz0xQ5}@MZI1Rfotc!=Iqg#MvU*ouA+iSAWVmP)bH^=B?`4QgI4 z4$<|Onr|&)>r{KS7v)c?`LLoPR)l&~^r);sKU{=@dXk=%QFsA$UZP)8Yh<04d-VK@ z4lgM`qN6Elvf6`E%zNcNu0Prr?~e2iC8VwX0T#~TM1XLQ_>?l{dz=l_!w_Zzb==JM zeC`z5gGRWF{vd&?7!TId|9d*PlYYmgAmQ3J<*ROBHdx1QHJ~}P1HMInh_D$0W_1tZ esgM?)#|fIS`S2n|FW^#$aHEF&gS#*rGX4vi(0t4Q delta 1339 zcmZuwZERCz6u#$fWxX&)yOG=$fwmjVK49G2{b1-1*KNQZ`-*cd*`iV^8#e=6=P-;vvK|5{9!tOSV)#=)dcj1*cc--CZu49U!}`T^PcxT z&vVXs&wG0A%`24rkdn3H6MYNyUx+lP=f&>Lp8EDoMqs&ZsI%$QWwwo|YkSSd4+@1< zqSPiL zJ32Pna3Xd(Hc}_pK9lj|V}nEfQ$w-Asdd=!Xq-Jq{x4d;FTd-c*O1x~rOTk5GDYCs zc}KeH5CoBbGjRJ}k)~b7s|4XWeWp`}WOy30fNjT3!qP*i1>nq+jJc}nkUry-N+N1$4xwCU?JkjwMc#p2x({c7Dl zqODk|Pf!4{-3e;McdSF`-IJgmT;HS7F}NEvdKm+(lSr|C4=b$G2=0}|j1wJuC)rqH z<0~h=H;rCJ7Jqi)1?6ZU?X=z`ad!>b#A_?B-)+1CF;%{xhK%Y|nM4ez8o7~D75u0; zaZ~N5W(0!?>c{&*jmD5?eO7<8@yktgMVB7GMdEK8@N4rVZP8<)5+V(p|IK<&LgV4j=n>=(E8N;Zha&#v zz>^(Ed6*VD6z*`2wFmCbS$YwvPKC}P+nEW<_6Qndv5nV11xx%kzFPGk_S{q>*Cl&* z+pNeDL0*5`QB7Frl7p@5V%zLj^sK`b8}Bo7M%S^K5>CuAXs~n=*>2gp@X);t%&k_t z4C;|Lx4X>%{uBfuqF48PQl#JR9T$xuxWHEx!ChVxx>H #include +#include #include /* 合成 shim 地址范围(32位解释器用):0x00010000..0x0001FFFF */ @@ -202,7 +203,11 @@ static void resolve_imports(u8 *image, u64 image_base_actual, const char *func_name = 0; if (thunk & 0x80000000ULL) { - /* 序号导入:暂不支持,记为未实现 */ + /* 严格错误策略插桩:序号导入是未实现路径,零降级 panic + * (PE-E02)。shim 表按名称索引,序号导入无法解析语义。 */ + log_error("[PE] ordinal import encountered"); + panic_full("PE-E02 ORDINAL IMPORT NOT IMPLEMENTED", + "PE import by ordinal: designed, not implemented", 0); func_name = "#ordinal"; } else { /* 名称导入:thunk 是 IMAGE_IMPORT_BY_NAME 的 RVA */ diff --git a/CODE/UTSM/pe/pe_loader.d b/CODE/UTSM/pe/pe_loader.d new file mode 100644 index 0000000..a4c7fd3 --- /dev/null +++ b/CODE/UTSM/pe/pe_loader.d @@ -0,0 +1,14 @@ +pe/pe_loader.o: pe\pe_loader.c pe\pe_loader.h include\utsm\types.h \ + include\utsm\pe.h pe\pe_shim.h pe\pe_dll_manager.h pe\x86emu32.h \ + pe\..\include\utsm\pe.h include\utsm\arena.h include\utsm\log.h \ + include\utsm\panic.h +pe\pe_loader.h: +include\utsm\types.h: +include\utsm\pe.h: +pe\pe_shim.h: +pe\pe_dll_manager.h: +pe\x86emu32.h: +pe\..\include\utsm\pe.h: +include\utsm\arena.h: +include\utsm\log.h: +include\utsm\panic.h: diff --git a/CODE/UTSM/pe/pe_shim.c b/CODE/UTSM/pe/pe_shim.c index 1a11ac5..c5fa1fa 100644 --- a/CODE/UTSM/pe/pe_shim.c +++ b/CODE/UTSM/pe/pe_shim.c @@ -29,6 +29,7 @@ #include "../include/utsm/pe.h" /* P5: pe_window_host */ #include #include +#include #include #include "../arch/x86_64/limine.h" @@ -1753,11 +1754,15 @@ static u64 __attribute__((ms_abi)) shim_SetDIBitsToDevice( return copied; } -/* 未实现 stub(64位)— 日志告警(含调用点返回地址)并返回 0 */ +/* 未实现 stub(64位)——严格错误策略插桩:PE 应用调到 shim 表未覆盖的 + * API = 未实现路径,按零降级原则 panic(PE-E01),不再告警返回 0。 + * shim 表没有的 API 一旦被调用,PE 程序的语义已经是错的。 */ static u64 __attribute__((ms_abi)) shim_unimpl64(u64 a0, u64 a1, u64 a2, u64 a3) { (void)a0; (void)a1; (void)a2; (void)a3; - log_warn("[PE] unimplemented API called"); + log_error("[PE] unimplemented API called"); log_hex64("[PE] caller rip=", (u64)__builtin_return_address(0)); + panic_full("PE-E01 UNSHIMMED API CALLED", + "PE app imported an API outside the shim table: not implemented", 0); return 0; } diff --git a/CODE/UTSM/pe/pe_shim.d b/CODE/UTSM/pe/pe_shim.d new file mode 100644 index 0000000..69b3d78 --- /dev/null +++ b/CODE/UTSM/pe/pe_shim.d @@ -0,0 +1,11 @@ +pe/pe_shim.o: pe\pe_shim.c pe\pe_shim.h include\utsm\types.h \ + pe\pe_dll_manager.h pe\..\include\utsm\pe.h include\utsm\arena.h \ + include\utsm\log.h include\utsm\panic.h pe\..\arch\x86_64\limine.h +pe\pe_shim.h: +include\utsm\types.h: +pe\pe_dll_manager.h: +pe\..\include\utsm\pe.h: +include\utsm\arena.h: +include\utsm\log.h: +include\utsm\panic.h: +pe\..\arch\x86_64\limine.h: diff --git a/CODE/UTSM/pkg/pkg.c b/CODE/UTSM/pkg/pkg.c new file mode 100644 index 0000000..471b77a --- /dev/null +++ b/CODE/UTSM/pkg/pkg.c @@ -0,0 +1,38 @@ +/* =================================================================== + * pkg.c — 包管理器骨架(Pacman 五阶段方案,docs/STATUS.md) + * + * 设计已定(五阶段:清单 → 仓库索引 → 差分下载 → 安装事务 → + * 回滚钩子接 DRR),实现未动。建立代码骨架:调用即莲花 panic, + * 零降级零静默。 + * =================================================================== */ + +#include +#include +#include + +/* 阶段1: 从仓库清单解析包元数据(名称/版本/依赖/文件清单) */ +int pkg_query(const char *name) { + (void)name; + log_error("[PKG] query requested"); + panic_full("PKG-E01 PKG QUERY NOT IMPLEMENTED", + "pacman-style package query: designed (5-phase), not implemented", 0); + return -1; +} + +/* 阶段2+3: 仓库索引 + 差分下载 */ +int pkg_install(const char *name) { + (void)name; + log_error("[PKG] install requested"); + panic_full("PKG-E02 PKG INSTALL NOT IMPLEMENTED", + "package install transaction: designed (5-phase), not implemented", 0); + return -1; +} + +/* 阶段4+5: 安装事务 + DRR 回滚钩子 */ +int pkg_remove(const char *name) { + (void)name; + log_error("[PKG] remove requested"); + panic_full("PKG-E03 PKG REMOVE NOT IMPLEMENTED", + "package removal + DRR rollback hook: designed (5-phase), not implemented", 0); + return -1; +} diff --git a/CODE/UTSM/pkg/pkg.d b/CODE/UTSM/pkg/pkg.d new file mode 100644 index 0000000..47ba036 --- /dev/null +++ b/CODE/UTSM/pkg/pkg.d @@ -0,0 +1,5 @@ +pkg/pkg.o: pkg\pkg.c include\utsm\types.h include\utsm\panic.h \ + include\utsm\log.h +include\utsm\types.h: +include\utsm\panic.h: +include\utsm\log.h: diff --git a/CODE/UTSM/sched/sched.c b/CODE/UTSM/sched/sched.c index 3a75356..804fe7d 100644 --- a/CODE/UTSM/sched/sched.c +++ b/CODE/UTSM/sched/sched.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -630,7 +631,9 @@ void utsm_sched_demo_window(void) { log_hex64("[SCHED] demo tasks=", (u64)((a >= 0) + (b >= 0) + (c >= 0))); if (utsm_sched_enable(0) != 0) { - log_warn("[SCHED] enable failed, demo window skipped"); + /* 严格错误策略插桩:enable 失败不允许静默跳过演示窗口继续启动 */ + panic_full("SCH-E02 SCHED ENABLE FAILED", + "utsm_sched_enable failed; skipping demo window is forbidden", 0); return; } diff --git a/CODE/UTSM/sched/sched.d b/CODE/UTSM/sched/sched.d index e10c365..a3f5d94 100644 --- a/CODE/UTSM/sched/sched.d +++ b/CODE/UTSM/sched/sched.d @@ -1,14 +1,15 @@ sched/sched.o: sched\sched.c include\utsm\sched.h include\utsm\types.h \ - include\utsm\sched_ext.h include\utsm\log.h include\utsm\arena.h \ - include\utsm\config.h include\utsm\process.h include\utsm\uuid.h \ - include\utsm\capability.h include\utsm\status.h include\utsm\idt.h \ - include\utsm\drr.h include\utsm\lapic_timer.h include\utsm\dkm.h \ - include\utsm\dma.h include\utsm\block.h include\utsm\net.h \ - include\utsm\paging.h + include\utsm\sched_ext.h include\utsm\log.h include\utsm\panic.h \ + include\utsm\arena.h include\utsm\config.h include\utsm\process.h \ + include\utsm\uuid.h include\utsm\capability.h include\utsm\status.h \ + include\utsm\idt.h include\utsm\drr.h include\utsm\lapic_timer.h \ + include\utsm\dkm.h include\utsm\dma.h include\utsm\block.h \ + include\utsm\net.h include\utsm\paging.h include\utsm\sched.h: include\utsm\types.h: include\utsm\sched_ext.h: include\utsm\log.h: +include\utsm\panic.h: include\utsm\arena.h: include\utsm\config.h: include\utsm\process.h: diff --git a/CODE/UTSM/vmm/hypercall.c b/CODE/UTSM/vmm/hypercall.c index fca1d2f..228baa9 100644 --- a/CODE/UTSM/vmm/hypercall.c +++ b/CODE/UTSM/vmm/hypercall.c @@ -160,31 +160,37 @@ static long hcall_surface_info(u64 a0, u64 a1, u64 a2) { return UTSM_HCALL_OK; } +/* =================================================================== + * 严格错误策略插桩:Phase 1.3 设计已定但未实现的 hypercall, + * 一律 panic(HCALL-E 系列),零降级零 NOSYS 静默返回。 + * =================================================================== */ +#include + static long hcall_cap_validate(u64 a0, u64 a1, u64 a2) { - /* Phase 1.3: stub — capability validation not yet implemented */ (void)a0; (void)a1; (void)a2; - log_info("[HCALL] CAP_VALIDATE (stub)"); + panic_full("HCALL-E01 CAP_VALIDATE NOT IMPLEMENTED", + "capability validation hypercall: designed (Phase 1.3), not implemented", 0); return UTSM_HCALL_NOSYS; } static long hcall_utrw_read(u64 a0, u64 a1, u64 a2) { - /* Phase 1.3: stub — sealed memory read not yet implemented */ (void)a0; (void)a1; (void)a2; - log_info("[HCALL] UTRW_READ (stub)"); + panic_full("HCALL-E02 UTRW_READ NOT IMPLEMENTED", + "sealed memory read hypercall: designed (Phase 1.3), not implemented", 0); return UTSM_HCALL_NOSYS; } static long hcall_utrw_write(u64 a0, u64 a1, u64 a2) { - /* Phase 1.3: stub — sealed memory write not yet implemented */ (void)a0; (void)a1; (void)a2; - log_info("[HCALL] UTRW_WRITE (stub)"); + panic_full("HCALL-E03 UTRW_WRITE NOT IMPLEMENTED", + "sealed memory write hypercall: designed (Phase 1.3), not implemented", 0); return UTSM_HCALL_NOSYS; } static long hcall_drr_checkpoint(u64 a0, u64 a1, u64 a2) { - /* Phase 1.3: stub — DRR checkpoint trigger not yet implemented */ (void)a0; (void)a1; (void)a2; - log_info("[HCALL] DRR_CHECKPOINT (stub)"); + panic_full("HCALL-E04 DRR_CHECKPOINT NOT IMPLEMENTED", + "DRR checkpoint hypercall: designed (Phase 1.3), not implemented", 0); return UTSM_HCALL_NOSYS; } @@ -213,8 +219,9 @@ static long hcall_console_write(u64 a0, u64 a1, u64 a2) { } static long hcall_console_read(u64 a0, u64 a1, u64 a2) { - /* Phase 1.3: stub — console read not yet implemented */ (void)a0; (void)a1; (void)a2; + panic_full("HCALL-E05 CONSOLE_READ NOT IMPLEMENTED", + "console read hypercall: designed (Phase 1.3), not implemented", 0); return UTSM_HCALL_NOSYS; } diff --git a/CODE/UTSM/vmm/hypercall.d b/CODE/UTSM/vmm/hypercall.d new file mode 100644 index 0000000..910ef59 --- /dev/null +++ b/CODE/UTSM/vmm/hypercall.d @@ -0,0 +1,17 @@ +vmm/hypercall.o: vmm\hypercall.c include\utsm\hypercall.h \ + include\utsm\types.h include\utsm\vmx.h include\utsm\ept.h \ + include\utsm\vmm.h include\utsm\ipc_shm.h ..\utsm-ipc\ipc_proto.h \ + include\utsm\linux_compat.h include\utsm\linux_loader.h \ + include\utsm\log.h vmm\..\arch\x86_64\limine.h include\utsm\panic.h +include\utsm\hypercall.h: +include\utsm\types.h: +include\utsm\vmx.h: +include\utsm\ept.h: +include\utsm\vmm.h: +include\utsm\ipc_shm.h: +..\utsm-ipc\ipc_proto.h: +include\utsm\linux_compat.h: +include\utsm\linux_loader.h: +include\utsm\log.h: +vmm\..\arch\x86_64\limine.h: +include\utsm\panic.h: diff --git a/CODE/dsk/main.c b/CODE/dsk/main.c index 62e1321..3615a96 100644 --- a/CODE/dsk/main.c +++ b/CODE/dsk/main.c @@ -1327,10 +1327,11 @@ static int dsk_load_elf(u8 *data, u32 size, void **entry_out) { if (rela_off && rela_sz) { /* P0 修复: 边界检查 rela_off 和 rela_off+rela_sz 必须在 [min_vaddr, min_vaddr+isize) 内 */ if (rela_off < min_vaddr || rela_off >= min_vaddr + isize) { - logl("[DSK] ELF: rela_off out of bounds, skipping reloc"); + /* 严格错误策略:重定位表越界 = 镜像损坏,零降级 panic */ logh("[DSK] ELF: rela_off=", rela_off); logh("[DSK] ELF: min_vaddr=", min_vaddr); logh("[DSK] ELF: isize=", isize); + dsk_fatal("ELF-E01 RELA OUT OF BOUNDS"); continue; } if (rela_off + rela_sz > min_vaddr + isize) { diff --git a/CODE/dsk/main.o b/CODE/dsk/main.o index 315956cb0d16fe67e98a12d9ef5c883fca5dd9d7..273cb6208b0ebf42f0c2b830ba528f4729506096 100644 GIT binary patch delta 2243 zcmZ9NeM}Q)7{Koe0)lcB)Y1Z4a9WBVP!((E2f|(TkUI$~TVgg%lTD4uh9IRb3%U)R z-Y!O1V_x@$drFp7Pky_Q>HPa{4+I+%8!tHsvr`qh2U*Egu_rCA* z+|#>U^ousrb)dD7&F*rpY)I5AFJB7oY$$U?WUeA2v%Rt>DsyY2`laC?4vaSXD_h3( z#yU}H?v<4>+4(Hk*U+CMs@~phEqj(RlJb5Bw|_Cqz*%#*r1<-SKkv4@yT@M1UKY5} zuB9?}<~iT8VioJZQLVn`&JYi;WZ;mL2U^zGx?ZI=y6qU#Oc*GP1tO<)ou;Z%H^Hm} z{f$SfRLLE5HJ-KgNosTVu&Ij`)m_=5@>Fs@UCjkAOP=xIzm5L%d=taC`o$L!QMov1 z3-0yL6Gt`QDcCNSe_Y!Dm)$RPT_4;!M#c1r!kkY9S0vBNpxpF!>2p}u$9dr+yv+A4ks3io?c1u zwu*}XY?B)+fGvBp)4@NQW)!4~N|Y8mI-EpLUW|&)KOrPe9ud!Lc4+;v;JQHmnwuwe zT~cd%Bvn2uEtikc&Pb}al{V>6 z-UOBdD}a^2DxeHl4U_{Fp=f}w+ep5;%1^U-r8Nt@B`*60uT*ZYuH9s>USqGQu3ax| z40T@R(~?6y{rpH8`+#)a;@4U)S?N>AF!qUGhWT|W!>~*eGl`f7_+mDXln?M0>u)wg zCte4JiKXyOHWqIs=KG+JqQ-&Ql4@u#DX03EX-3XMOuaGD&<{yH)#IpRt2a+E zbQU>DwFBcbakVGO(BF~peQ3fl!ajgmX%<80;;b?(VLx$E?VDl5XQQ5topcZ%)z>gb zChAmN{Vi#ux-;8|C!j7ut&sCnpFs^Boj3}xJMAPw^^aIu5$YVgKc3`21U-PcU8se0 z7>9_!8py!}q{Db?F?^8#FLN;X#CC0$gHq0U1+hOM`f+fvK|>oM=JUchQN%vykr36pxrT6qUG_J_%x zWc2MHjK_ArgY6DsE3jDRCeFV~!myq7FVrQN?JgEoNZ2Q!i?D+^sE6OH*GDa1$hm#AZJ-$QJmH`Mloca&L=G#T5%XO6MKR|Y;{6UPtK{hs)W1 z`%KX%B$F5RvfZSO7uK3)=8(w9d>eVj3%P7NF$+Q&3^jD delta 2289 zcmZ9Ne@qis9Khcd6hx&UYAIALuvv;us6Sz95w6Uu+_^B+CB|)WDw~_L{OAE$f@DGC z&WjtabI)aeh;vI^vM9|mOX8M+E{ZcVl`NZX{)i5>NT$>+<;RrU_w~M=jZHqhyYJ`w z-uK=2Ug_n12Mi-Xdp=j}x38>EjJVI8^SxDHY8#b|<)aeUE0qjM#??dG*};>0B3{|u zrfFV}ptST#%0H6*kuO-^mn|yWIs~<%x2CPRm>732;s_CymY}G}UB2%dOs~{h-P~E1 zG0?nJGM;$Mx2;&l$yZ)fw>r~={VNH4MCDE><4aAeRJ~3s#zF=RomANMLM&P_z#;u2{1_u~1lE5fl`; zv+-T53k!6Ij(4!fYUvhKxl>R^gh@j}Psr+(;F|3@GU$#qU^mN*?f8CZ!sl_f?9*CcJaVaemM!Xgw15vsiM;*wz5yvbL6yWci+3m520(`e*J0?6rDotgn0Iom(5`TN~cq zUR%3;=Ns1gZ96<$X!Qj?Kk&%~J|zjxZ{X8Det0tXm>#&!uQp#Zv*SsKHTsv3AEy$+ zk%`1Y!`JyjZZXZd!JEuivviFEIW<|&T1%@yb35qv8+@U;9ravX>vXc7b&~p7R)n61 zEJH?iVC)9JA(5-0RsFn&`;fxMcc>rFK0Ht1ic z>oxPSbakSx$7vPQGoG5gaf+@B=zB~%QP0NNB@=bsL;bg*2`A`HmX&MLwFR?EaSNZ( z^gE!NXX^1h)OpxRCoN;TA8SlQor1HwX&uvNGWB=@>H^dq^a#^uQA0xc zh+8W_osG}8k#cuIN3ga7wJTMBJ{xr~y#;rUS>!Z6{u#QN>0P*ZF3vV2>9fb^0j4u> zYqL;4!qykj9;QXqHq;5&mIfMT`XFjNh9n73)^VB>g4S0CszN+XG&ke>#hsF!c(gvC z++X~Mtq#;nu*jRZhszmyU?Ik9v3LsR$DY`O{hEXE*h^}_w@~v`d;_-NupT#%nKb=A zZ!=%P{TZ=dF6M=3)qURN9z~4}C6)<#C(|$xD|-uHz(s5hRwut>{w?Z<<;;JhF2ZVm z;!~8;n@pEsPqR_q!!y%L(;tBT7)^kKPc7k8P~@vhZ|CD}AQG(U^}!n-V7Hx2Wy bQWzXA7%tH|HY}rlHuTak8;Yr;!e#ppIm@>R diff --git a/SYSTEM/boot/utsm.elf b/SYSTEM/boot/utsm.elf index ea4e2267b1560a3ccbce74b3111e4ec119744e21..c06017e60bf66a2aba9d96d089d4f95838980f4d 100755 GIT binary patch delta 103816 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 diff --git a/SYSTEM/driver/block/nvme.drv b/SYSTEM/driver/block/nvme.drv index 2413d9e2f8c35d530479e60f0986e262a2b01d36..c09391e050aa604a710dbe80c372cdcdb909c9ec 100644 GIT binary patch delta 9516 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 delta 9394 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 diff --git a/SYSTEM/driver/block/xhci.drv b/SYSTEM/driver/block/xhci.drv index 50927087f78f280d8668d3359a780faf6d2cd943..68c85cfc78b078cba41d3e5a78c89ea21b66594e 100644 GIT binary patch delta 1556 zcmZ8heN0C6c+oMR(#%O~BN;3z8k-4|&Dzfn*x{U#=m1VdA zj#@s7XUg8Dn+UFC3W7J;(g=ixg-QHFs&RlLF&LxcFC-)~#0AgewPy4t@ArH6{La1i zynBA_*nNKRKJQ9~w4oFqKrUN@V_HD0ib+a!KFrZ*9*b(aNt}1jWg(p@x%x6Yoq?p4PST+n__FA5bwn%K^s0Ew=K-IyuKclkj?Vrs-9zW zyMGQ9_UG-~o|9%s+*43goLH2zH>Wr;H_P&JPBt4X)`zee={WopR0jpPO7G_|<**2`C=tHI9EYC;cpkk+Y~W(XvIKwzCY2NIWcCUoWO5}@8uPqK zWMH#ZL@%(_w}|4IaFnQ=8IKY5GwC?dH)yZ!fK=3+5TOE%gmYL)n1(W;4JQe`xJt-j zN{uKahAVf>aS<^pM-uI(Cl#w}teQK1bq_Ap=%TGbIdh@N*B*kCSW>H_E3(&`AsM~3 zX8nOMb+e?{&71DsXeh^JU{;;ZUH}*nq#S=nm9IY#S3bToLXF>4>J+{YQdj&Z-rZ0agVY@5Xd0`E zs^#L;S>ReZ)_w9%9!{Xc-T|Xbc((zd9_4xw25_?83cZ+eiWq2tDX&c0(~MdA}Us z2b?@N4QA|aF_S+RTFA_-#6i|ALaoyb<0v^rp%c_%|47|j^iSCB)CntoFN8n6S$z?G zPLXPbRuL|tq16h_*x70pdi`xn-?2Hr2bWrP!mnzOlY-POsBhDe?~QF8;Ks=|GaN;2 zy9i^L)$SHX+jxs{K7-{&&RjH&3s*9KqCHfVFzVuWGmdjO4+Pg_Mfv0vt%7k$x}+w z=NBo7`7ZjGTvBG5Pr?BDnD$emBqm(G!NVN$eMZ02XtvZ%NBtJUqI>dzUkPDv^kym* z$X}3J$2?cN0HUz4&kAL1sIP%iA~5}0F3dCgwE_SKPJX!vchK{d8Ojj)ZNhS(KmOvB zW-4Y*z|MZ1@UKPbj?6+qAUL-y-oC$*{ v4Vz#;%7kM$yMe-piT)%d!qX^^n0VI!dZl>$Yb2S>DvT=W65;PCk8b-9J$9#A delta 1658 zcmZ`(YfKzf6rMA(zybz&l*y1rpleb#HH=_wi~WJ^k8Y<}EZ7D&wQLE`m8MX3=>};; z3RKqR*+T`k+JKMpC{(xC*lb$JZcRY2KfoBV#-t?@mG*~0tqGC3p6Lu)Ht8hueY@Xx z?z#8ed(V9KfcHJ%J5%8$k8uuQH~SkZW1s^o;tX4+rZ{@`x}H?1*%#e3P8`S$mjjb7 zouch+{PHO|b27T|TlB_xV}s+HH)2b?4G!UIyaBo}dBf(&?mq&7(&(fn8q9JwRP5MT zRatFMt}d~a*po{Ot;b4=cP85^tW{Ok<7FJXvj4|W{N_*sn>ZMuL!UW}ePwt0s<9lGujxDq+4P2R_`9tD z`Y_in(56}KCP+t*-DE8aQ->JhRbHFs6fufvWEdiciz>=V4)u zAl3xA7qx74*hTJ{pqyLPl$;y=HA4M|kBpVcsd`?uuRNkF8|02qbze}n5LM=;g5nc3 zWAQQZ_f-8wZf$GIm73|f|Cj-*K@%8Q*U4XasKeUY4p?CNH|qf|ptDYbtLUw>z!-|B z=9i99)u$-_e>eU_vn3Ro?^RNOmy{cwNRh1Tqku!4T8%AH&J#;;^&|i^Ya#! z*NXfLyIg|E=~XrS+4Zgo{VoY6ahY%eQ(7%Bgbl4GaZEeyjI{Ofleo|-h`ctJImnH| zm^J~PL1UXzrnk)m4up0Ie!}$jLGiY-Bzop0mDg5ylP$ORK*|kO<+zOXc8Jy?2K09d z%-7ioFu-!pQu#L!x&=NYoF#T&26&oHpGyKhN{4sf`wnK9zb6dH#F^eSid^Znzz=Bd zGwBnw#b;xBpMbu;StaPKn}V3%tqnP^{98F62Jkh54~X_K{e`PM1em{{J^?SVg#nsM z7s~jLa)3_^WqBWO1K7cwpOD+jhA;L2WZ%H_F z{DZ@zCUD~Ns6$-Uiqwcx)~NKrZfqD6M4i?N$?DGh=jNe@+)G;TJs0HWvxTv&a0p{5 zUkvKtSDe0P;vouSuWth%%Ga}?9G!%-IQr6c{Zf=upA{z^R=1#q$Ev@6AI%7`ZRj>W3 zX`$piY@>8z@`mGr>FhYCz8sv3rGwXus6Dxo>0uleW%)-)OOI!I{NJOj11>2uj5zLozhwC3xq?ipjVN@U2?~^u-vw_vpu*q*bxqHmhB_` zk+^GbeCVLOYj|*fbXb0B@2DJ+M-MnaU%q?86Oqw@hTYxrNOZKfe;^W%M~7tlp27Iw zp2!db_l-s4{ZU7)+&|E$4wrvJAY{$p7$~+@vO@kT@Q}|Kt#eYDc;@CPYINRB5xaB#NsEZXbOqz>eM`a8CL7l4n z2unV}+GM<&eFh>`R5~oQ4i;)Q~94MYh6RHHDe#HOhh|hdjnpGvh}E z|B(2G(1Cy9y!v#St!FaBbgbqG9vd6i9{+hhT5$-a1m-Y(Fw<>+XkfFBkOxt+sd zy0%m*Hs{Fs8rF;03outprJMibJp|ZArKz?59a{&Ai{eKh!uD>yODTFcGhgAGFv+}X zfp@d0;d}1Ine2WCmR+>%4KbX2XFzo3eleW_=G88X=Ols= z7w02x)xmMMn{3g+MYkI#VA)McZ;@*B#L43i2=Y8T35)0xJr}J(O9Ib7w1CKgnK`+`?N7M!yfAhk*ZK z(&d2{{7qz^4KA`HVFOa%WUzR1Nn$W=wZTBW#qgX!?qdjrx9Vkb#0!dbEu^e^SYW>? fFOY^N!-z;z6QB;{l*+JFD8Is(n|jZ>SZ`r delta 1159 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 delta 3712 zcmZ`+4Nz3q6@GVFbeEv8NWH#lI=dl3K74G?Un7p?%yemiqicvJJvyC&sp8Lu0^jqg2q&I zD$}Ts>BbE$dSg+iKG9_8<3=<(XYk7^$EXF_o7<&oe!P57_-WBdQ%V7%sIx+4t_bO zjeT3oIB^c2STyc%Ml(+6vFO!I=eRkA(B@E6Co)d_U=j{Hma+*r<50u0H6I3f6U7U!IjI|b;!@%WXnl~uG|mUClFrxYh8WR)aL@^?a9lc^1tTi01RUgv6#$ zkLgaUA)G8Cyi~%4!zaO0z}5W{yMUr@LIbj?X%FV~6Ppg&GOjL=*dVbw3}Ec{B({*) z-#{GMcO+J1{wuha@wzFA6`tps(~m`rvC?`~d=frR_-bfIpD##k^0=eoDD*Ak?GcI1 zq1bW4%|8YBB*fm6@L$sc*zm45i_qIi?;>1y7Gv>RIFuK<+S{bq_vyS`xDU_8-0rMo z7fM{hizw;c`*729F`cipc~+e8w$OT27Fsxr6}swbB+c98f9-v^>EXz?tl*9J;bvby zCC@v-^Ifi9B36ugG4=Q*G$8x*eCt(apN9@)JsB1&+`daQ+z126?j%-@JpgfJ?U@h8 zigTI^uH~F9hd!*=fQI$nWc!_D`!8nOH{bQ3E3r~JgbP1wEtygQmzHyNgTyYU8)O?W zFIV@@!X5-4vad?)Manz`VJ~k#FR}SF!yid_Bdzjh68@GsMObb~xR{d}!o^IA@y@q) zS;7Cea)7pipSGU}5JyD=PZ3u`66?2mSDt}}BF=Ut>wVCHN;};$B9Bn!zyPuZ5-V)! z5J$FIVnwV0E+4P!k=RM{@H*jQ2@lbf9hLN=uRlPukE^FmAUGN|2OyN%^L!QIAP1y($;r zRxx)yO-EaJh=H$!Ls5wXc9di~Z&RjLXei-ohorUB<~#}>j2TCLIw5D0`iqi2o7iin zUd^T(N%Sms))H{}IV%QM%GnCg{9IinDX){OAT*=$Nr<9y1N32go2kcrcL}3fDN4+G zgszmAl9{_q4SNlI82ffI&+%l`kQ7xzM?0Ei-;>yrG@_4_9zHiUaI-WM*M*gFwTliL z-A{@sHm}ot;6wH>v2GfT$(onyO$e8H+3msJvNeniK)jr*ZS>`_fw~jY8E~!evW=i& zy&amdHlT0CFW9HxtMKC2P`HAtP8z@lbDpt?*o)9xv58%QTd3Jcnqf&(2A%*{=hAll zNMduLA;4K9JQwh?IJ^Z+>lDNTo7fLQTUl$HKL@&2zM`I?AuXbNMo6o{ zSLtPS5U%8GGwiGMs=FxZi<0s(L{a$@xP{6+;H;{})o-ZsvKVw!{fqU$zE!O(6K<`l zWp1db_SzH|?5zGu6~Ctr8qGrN*@m-H1kE*^9RZ`Jl@$##?Rn<-CnLZ#7!12}PxE66_u7anw8vnx!*H$|} yt+G~P4)k&kky^Lyiz@K&g>ZyB4u#ydL=`*|T7`Qk9IAHRe%ul-AiE0masEHG>6-Td diff --git a/SYSTEM/driver/net/virtio_net.drv b/SYSTEM/driver/net/virtio_net.drv index 65e9a1e3c03bf4488dde9ad0a3c4d300a9047ed4..f4e617e94bf0a26cd9c6786e6274aea6742a6b0b 100644 GIT binary patch delta 1307 zcmah{ZA@EL7{2f6I(n3J#DN z6=tHi=Z~T>V^Q(X!kUw*$$kvx6sL=E)1YXAX^cNe41&f?5)Gcxi*cC6lbrMBeb4i} z-!toUW`vDfS>9kG_nfWT{gP1<$2~Wf66@Z(>@)7?E~<}x)IMJC9{cIA*FE<6e=zRn zzmIO8Go%vvYD z)<`tgs`fsuhFiM2+8)23uV_EeCfBa||DPNEhl?-lBYYtLm=TBaGtBA}ozXpNS6k0R z$lJdIZ)#?4**`#7DYWp>LKCr_3@3_gRDjtcjb6oSQIIaeR~)AhE)~b+d{e3_Nm{~W zv4YTnQ3~;;13QU1j4(UirN5AH#F?@Uxh2c=BeF_^G|&4>Gl-lRDGO3BPnHSgLo7Y) zk{{V2D^O*H0EPorm^VsMt$9=lCIo!*G{fz6b3`v-?QoE~(dc*4+kDc0i;-55Xbdt% z=C=iENzT?A7e=y4!Lv=HRLSK>uMzzWYW{^;GWf5}i()1Qel@g6qL@UhD`!z3U50vn z8I^j1Lud&r$O~uEZzv19Sfk93hehMx!s~4soxr8G^K=el?JlavmG&T=hP~qzb|>)* z9U{g!pX`hqs2^F~Q&foA?(?!$AJQGT(xc#H&k<_mYdzl>hX2qrdBc{@gbDG0xPPvv z&wDqpPwV#0XAEe<-x`x$WWtU0Y)YIW3X;sSnw;eQmJ4z#_tke2x z>A6cJ(5aPs87&dzU_$>@bsw9*ck4Z{Zn016spoC6-)qE$NF_5EV2(D^JG?XcA`>gQ z+P7Pt(W|lXoOlPL6+YIl7+AK3Q%Cp7pBAMZg^)a2AP4jcUPI1c0h5Xl7<4de6cd9E zI)jD567gmYm9S6@fguO`B!&qguEy|G;SQ_}S=qNSWDh&o$pHj}*z*h~hVT0uKL=uK delta 1039 zcmZ8fZA?>F818!tw09;-#c;)Jp>t93W4*0gumZML*lq=Ca#7Ch79}wnO(d{j2L2ebKVCCW@fO12$jhgFU@8b82&2#j{G=WmLMGy zWeN622Cw;IDWj|Wuqu>&Xb-DCHOo}4S!&`E0iTLJYw^KF{BBH#2gu9&cHSWAeugPx z&?;pdtcZ!AqZI>m2gyp6`Y~K7Qx0BKDs&Q3M9GV1n)j<*CcaB%K#Rz1#*UVVhf+8f zQG{$nSn$6ivYqnb(iG{6WU5x9PZQa+Y^p%JCevr=(G)f*VNmn1NeA9&&nV4@s~!@S zqGyjz8!){`r6b(8cUdM~N2o?;x1IcA%`TFzS%ZtBy;eqc?J2VJbG36sx6yZChCRyS zC-pI6PZ&Q`KSmTlD5`$k?=%Z>xc}eAq*Y)Fvr!pC(QHa%G^(;WCtuYd2EQNcn-pQI zo9{N)$M+U@OYpwUB*Vf!tpuSCpx9uy+ zW~J>kjYvYpL)aOOmz oiy0{I46tVgdIkJ$V0LRR#ybnxlz|Vr0xX?Gxqy=6=<{9 diff --git a/SYSTEM/system/deshab64/deshab.elf b/SYSTEM/system/deshab64/deshab.elf index b30bde7f88b694e9de8729ef1a905d577f07e3af..f6c486a5eea7e2f26660687e28aa61f6ec4de3da 100644 GIT binary patch delta 4786 zcmZ`-3s_TE^3Oymj~c^MBCmi5h{z*AM36v%L@$zvib1P&we`8atEAQ{1q>i*2*Qqn zy0&V4(W(Wxt)Q)nFJRkkrMkMcwyw6dUc{~Vs8XtC=iIn{|L@;#`Mw`#X3m_MIWu$4 zxlrF-Ev+C_4+E|ya+#}bVwQyc*lKqAW><%3MdlBqD3wS$ZtMb)bax1(H1sF@L7xXO z%3&o=agT$ESm9m(U*Z#YB^<;+k4Mo#=Ohxl&%HpcgtMyq1<_#B{BV)Uej(Ys5=}J8 z^6nJKNS=xro<87=Q#^~JHe6vkaisI;bak0TA}U08GNHdHJodzH7ljH0uPEtnUto+^ zfb^GhsP{?)Pb~3LKpt-O%7nA{y;m$8Lz#CmgkY6-EDYd}dyfX_#6F*0P=xOdDu+E7 z=34{Je6z0;z%D$du!9Vb4gM75{AxcLD7;0_#oiRM`PdtFyWJ5`7{2Gf1dii?fH%O0 zHwU-?$gwhT3D~eN@a@49J6OC`9^ytXn$Aev?u#M2VNFmF{F84C(gFN~f2f=Tuneb% zJcbqg)FJTz>1Ykz3!C})p#=c#xGyXp-o>Y3bD;$1gzuvO2SlX9Y+fHh$!}EMqaC56CEzB8#9U^Pxmj)PIS zE;$b_cQaO`2S7jElb+yxelw}a6|~fg^%UV#+6AqVk!PAZ!VZ*BPP1jLoXzR}1~#ejVVjd{d%IQbx&ut3T~|-P z*;L;)e)gDEKu6-rSey4fw#7R#HluF&DM+HXInBYfTmYQGEnKqC0;K6OnwBf+WIyPB zLTbTylT&8#Ti6;?2WK-j3fV&_mf5{zeQ6zw>Z#B^P$JQl*$ZMwwwsJRR}Ffux)8Io z)BINaRgCKEO*BxzUDJQJ+f`R+)i&Ij-2{tq^0-8hpk-Vr?8k%SUWNp8&IyG$jLHdg zIZob4mB$G=>*=_ClN010wnKE*$k{e6rz0igD_LmQNNXH==mTWY6t{5nMRA=3Q}jb& zKF-wpQ&raJLtzJQ*H=Ly#u)tIFPLqZG)h%V`k%RwzO}H`YC0fP$FQ~P<>dN=Go@5$ z7$A{YbvxX2+v-7H>O|QlXIJrpAqt$(Zt(G2MSByn$b?Sy&|FwAk(bV;$Vf?nG2?SW z$7~Z<{9a81Wk9$-Y&8;Q|d)lClhW>(P;*?w&5nK&*tf|9!;H#GEPmX}j6FnM7I zXEn77#^`4~_0@LK(^zcD4e~V5W*qyjbQ8skP{<93?@&Hr;iNvgRE4)aNq+LWv#OQ4 zH0M1^zb&xICh8ubfjVrjILLO0gU?oRE^wpBMf-~j!hFO*Bj>-Ea1CHD9+;G1Tx69< zy1MC#rqE|G`d<#($mk0WdK{zM9dtUQKXuTFjBaqyk&NCY(wZ%pm=_9wQ}Y7hD|{nw zF}UH6c{Q?W8)+wIYGO*|Tr8QKA0JHx?+SEOw}v%^w>azM$>h(fzLV|$v5c*9`n?ui zjd2i;DaHh9{Z(=-PRqMBlRf?xg3tEyC7w(W0_>r^nw@LCo)wVl~xR!F_ z5}85jJ|Sv2tB7d;O_bsH#sGIWiX+8EUiR-^v7aK*H9y|vs(5v1-o&i@J@nLcd)C`V1)zU(E<`k}X?JPL|vkO`PH%y_OD;%_q(I+6CT0*CktF zGQWF?55Pb?x^y$0vb<##5Rcz2Q$QB~>oU1C{MaIP=6@Eh-LTtR`lz+L9yyZxRv{Tq z`AIZffx}lUf_T1m#a4DHstWSL9{ibhIg+!W}&Gx4eNa-qCBK zWJPnRYA3{pOkIF0*NhENkwkQPa|#hJQ=0}di8B#Ccxg>DRAJRxO^|+u*b`gl(?F+{ zGoMjRpV77Evbf1g>{>fbdg~R`6(T6{a^YTBg~e}INbk%=w;~g)!Q!Gxa0f3GO(1$` zac)pL+3EJD>ULU90^OzG2sdL{kqb;zWEIvF8>GE+@LI76QZTNR*l@p&U1u1L-b1Xik7Bc->qRv1l4Okg2Y8yNb7J&TJ~lrLXOF z%Qxm;ke3}DWyTJ@O+94+tEq|J8=3RVOloN4+I8Zcq_-{U&|5}O znKbX??J@=G%OVw*SU&!*l0zXIZDphAtEa6jOnU22`0uh21C8@2g0xOCU#=7Rh;jqa zV`Eys9Ml5KL`d9eFVN9wBagUqm=&Z_fqIxMVs0fqoew9kM-qB%RxV2)4^vQHQ zUNH#5@M47$7T~WH-H^y%w@j7F{=~K$^trftF^;MH0QO-|Wd_XU<870HO1i$P0Pf-A zs-f^DAF{#X1X;L$V+4JGT-caTVGZB(kWJKX=no6{LtE8A9enezEv~ZOY%<)^C>nl& zKd^_snJ(b0eHtjh_x7zc-q4BZsOKzS3FjI_tz>#Y*~{2Utlm=CnPD4yBK5?o#gxW| zv1Cl~5uF~|m7N^`%?auPuDy*|yHMpYFa+n-E4>#clkWM0q)W|f@4ia9{`{7DximX1 z-QggWO+Kc{u1_3ExI=y_BASfUSbnz zY~uNj`%*FHkfOgmyS)v^9ZHY5YmjH&H9&_Uxz`{c+iP#@K3w*&z(k*`_JU=crLeeDNs>+y$6mg3eBK5|kTjB{+17%g*C?9H_)=3Q z9aUY&JoB5QC;@Zp<)sPqAW$`1=&W?&yG_0`-VDx$cCEa5`ACDj;nys4Y8sd>=UV3^ zxs!>Wct_&AXg4|5f}~)Q?Mfm)(r1EUB=Aio!Ce+0xyrFlCatpb1)FlL`Xuz=8~r-< z*20!<=^@~(%N3mEo<8#4OLA=2CqKn2ys0RJUK7=M?$KS&a=Ocp7&57hW9@ia=-J7v zu2hhyEt`k?Nu8+JWFP9QM&elJcOQtJESIt>Wjc+88jge7I$Ji?D#)eM@6}fSi zUbe@F-7hfW(L*lspCsa3d$^NAFco}r!5>vDx>mB}lgKQ!3ExsG^j2f5-fC#nk2Y*( z$<|wS)$;YHss8$YOLnOK)-C7kCk^nWKKX08`2dMC%!R!!rdw{=R#T57^H_7(tLXZK z`M_BcQ@T%6EO#xZ$<6Ejl-|qR#q`b#U@or;)5xW&wQC_gk)-i0op5%*w5%pJO|Ez_ z9|~#*`va?()l@HpIr#1%vKL8bah_aR%03GvM$U30V@gJThLOK@_`Z}rW3L`j(l_$c zBmOWI{fqSHv$<1=>7F;!-w?zp z9Ne4O(;7^F=X#tpE7C+g!wyn9D;C1Q-i75#tUfiUKgI5jZ6}))(}uA1qSkf#P$80O z-S;J}0Eoncr$%|{sIvs=CcEAGNr31^lf?I)8Y3Ot=|{~nDC08{vSb_|Osq2zP5hLz z^W6P(`Z3YEI92c@ojxNt*El&icT8|*u5r9JkN@oAt5QDqn_gd>&=VZ)f7WjI`5$m4 z`JFR%yXRSRZO{7J9w0~w{RsUDPJ|Z-&IA{NE5VKMB4GeQMi@wt6Wj?N1W$q&!JFVi z7)0O5J4D5h$IXrL=i?1q6smCSV9~@ zMTjRP5E2P$!bn0AVH6>mkU|(uNF`_pX@qpbON0zUW^-*%R;CKLy2~M2B~;e^MuXR^ zXaC0OFE*M)vNlAEAuy;pV~EzdKg2a>hilsb;_5txX=7nlbH*@j9b+#?YG*=mUGi}4 zSZJ&(8LpiV^Xs~XYtKP-^N}cRt}|rRxh801UAbrWxw?!5ZIbJM-OZ{iVJvwQ{jRM$ w$=J$gY-JrJ68rpLMRgg8+H?r6D{%}bX^{2|sgtU;X(Y{1(`0d7iCP=+A9$vqy8r+H delta 4806 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 VL#+Q!)T9wtsUl&GHD9HP_#fk`yP5z1