From d522c15f7545bd901cb4cbd443f198861b9014af Mon Sep 17 00:00:00 2001 From: user Date: Tue, 21 Jul 2026 19:14:20 +0200 Subject: [PATCH] feat: add lab-rv32i-c-smalloc-sbrk-libc card --- .gitignore | 10 + Makefile | 161 + README.md | 59 + crt0.S | 36 + doc/generated/main.pdf | Bin 0 -> 307444 bytes doc/generated/main.tex | 593 ++++ doc/generated/main.upb | 0 ...1-47826ae5-6370-5ac2-bd91-9acb89116d40.pdf | Bin 0 -> 307444 bytes json/card_source.json | 962 ++++++ json/card_spec.json | 366 +++ link/hazard3_c09.ld | 93 + scripts/build_new_card.sh | 9 + scripts/render_card_layouts.sh | 9 + scripts/render_new_pdf.sh | 11 + scripts/run_tests.sh | 8 + src/runtime/c09_bounded_sbrk.c | 81 + src/runtime/c09_bounded_sbrk.h | 18 + src/runtime/c09_smalloc.c | 83 + src/runtime/c09_smalloc.h | 24 + src/tasks/task01_libc_without_heap.c | 31 + src/tasks/task02_malloc_requires_sbrk.c | 12 + src/tasks/task03_bounded_sbrk.c | 93 + src/tasks/task04_smalloc.c | 110 + src/tasks/task05_picolibc_malloc.c | 88 + tests/check_archive_maps.sh | 21 + tests/check_card.sh | 80 + tests/check_elf.sh | 42 + tests/test_host.sh | 28 + web/app.css | 1 + web/app.js | 61 + web/card-data.json | 2821 +++++++++++++++++ web/index.html | 15 + web/style.css | 39 + 33 files changed, 5965 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 crt0.S create mode 100644 doc/generated/main.pdf create mode 100644 doc/generated/main.tex create mode 100644 doc/generated/main.upb create mode 100644 doc/pdf/mpabi-inf-c-09-smalloc-sbrk-libc-v00.01-47826ae5-6370-5ac2-bd91-9acb89116d40.pdf create mode 100644 json/card_source.json create mode 100644 json/card_spec.json create mode 100644 link/hazard3_c09.ld create mode 100755 scripts/build_new_card.sh create mode 100755 scripts/render_card_layouts.sh create mode 100755 scripts/render_new_pdf.sh create mode 100755 scripts/run_tests.sh create mode 100644 src/runtime/c09_bounded_sbrk.c create mode 100644 src/runtime/c09_bounded_sbrk.h create mode 100644 src/runtime/c09_smalloc.c create mode 100644 src/runtime/c09_smalloc.h create mode 100644 src/tasks/task01_libc_without_heap.c create mode 100644 src/tasks/task02_malloc_requires_sbrk.c create mode 100644 src/tasks/task03_bounded_sbrk.c create mode 100644 src/tasks/task04_smalloc.c create mode 100644 src/tasks/task05_picolibc_malloc.c create mode 100755 tests/check_archive_maps.sh create mode 100755 tests/check_card.sh create mode 100755 tests/check_elf.sh create mode 100755 tests/test_host.sh create mode 100644 web/app.css create mode 100644 web/app.js create mode 100644 web/card-data.json create mode 100644 web/index.html create mode 100644 web/style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fb50895 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/build/ +/host-build/ +__pycache__/ +*.pyc +/doc/generated/*.aux +/doc/generated/*.fdb_latexmk +/doc/generated/*.fls +/doc/generated/*.log +/doc/generated/*.out +/doc/generated/*.upa diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..468ec37 --- /dev/null +++ b/Makefile @@ -0,0 +1,161 @@ +RISCV_PREFIX ?= riscv64-unknown-elf- + +CC := $(RISCV_PREFIX)gcc +OBJCOPY := $(RISCV_PREFIX)objcopy +OBJDUMP := $(RISCV_PREFIX)objdump +READELF := $(RISCV_PREFIX)readelf +NM := $(RISCV_PREFIX)nm +SIZE := $(RISCV_PREFIX)size +HOST_CC ?= cc + +LOCAL_RV_ENV := $(abspath ../../../../../edu/rv32i-hazard3-student-env) +ifneq ($(wildcard /opt/rv-env/vendor/Hazard3/test/sim/common/init.S),) + RV_ENV_ROOT ?= /opt/rv-env +else + RV_ENV_ROOT ?= $(LOCAL_RV_ENV) +endif +H3_ROOT ?= $(RV_ENV_ROOT)/vendor/Hazard3 +H3_COMMON ?= $(H3_ROOT)/test/sim/common +H3_INIT ?= $(H3_COMMON)/init.S +LOCAL_H3_TB := $(H3_ROOT)/test/sim/tb_verilator/tb +PREBUILT_H3_TB := $(abspath ../../freertos/lab-rv32i-freertos-c-scheduler/vendor/Hazard3/test/sim/tb_verilator/tb) +H3_TB ?= $(if $(wildcard $(LOCAL_H3_TB)),$(LOCAL_H3_TB),$(if $(wildcard $(PREBUILT_H3_TB)),$(PREBUILT_H3_TB),$(LOCAL_H3_TB))) +H3_TB_DIR ?= $(dir $(H3_TB)) + +PROFILE ?= observe +ifeq ($(PROFILE),observe) + OPTFLAGS := -O0 -fno-omit-frame-pointer -fno-inline -fno-optimize-sibling-calls + DBGFLAGS := -g3 -ggdb +else ifeq ($(PROFILE),debug) + OPTFLAGS := -Og -fno-omit-frame-pointer -fno-optimize-sibling-calls + DBGFLAGS := -g3 -ggdb +else ifeq ($(PROFILE),release) + OPTFLAGS := -Os + DBGFLAGS := +else + $(error PROFILE must be observe, debug or release) +endif + +ARCH ?= rv32i_zicsr_zifencei +ABI ?= ilp32 +BUILD_ROOT ?= build +HOST_BUILD_ROOT ?= host-build +LINKER_SCRIPT := link/hazard3_c09.ld + +TASK01 := task01_libc_without_heap +TASK02 := task02_malloc_requires_sbrk +TASK03 := task03_bounded_sbrk +TASK04 := task04_smalloc +TASK05 := task05_picolibc_malloc +SUCCESS_TASKS := $(TASK01) $(TASK03) $(TASK04) $(TASK05) + +RV_CFLAGS := -std=c11 -march=$(ARCH) -mabi=$(ABI) -nostdlib -nostartfiles \ + -ffreestanding -fno-builtin -fno-stack-protector \ + -ffunction-sections -fdata-sections $(OPTFLAGS) $(DBGFLAGS) \ + -Wall -Wextra -Wpedantic -Werror -Isrc/runtime +RV_LDFLAGS := -Wl,--no-relax -Wl,--gc-sections -T$(LINKER_SCRIPT) +RV_LIBS := -Wl,--start-group -lc -lgcc -Wl,--end-group +HOST_CFLAGS := -std=c11 -DC09_HOST=1 -DHOST_PRINTF=1 -fno-builtin \ + $(OPTFLAGS) $(DBGFLAGS) -Wall -Wextra -Wpedantic -Werror -Isrc/runtime + +.PHONY: all tasks host check full-check clean check-support \ + task1 task2 task3 task4 task5 t1 t2 t3 t4 t5 \ + host-test expected-fail archive-map check-elf testbench hazard3-test card card-check + +all: tasks +tasks: $(SUCCESS_TASKS) +host: $(addprefix $(HOST_BUILD_ROOT)/,$(addsuffix /prog,$(SUCCESS_TASKS))) + +task1 t1: $(TASK01) +task2 t2: expected-fail +task3 t3: $(TASK03) +task4 t4: $(TASK04) +task5 t5: $(TASK05) + +check-support: + @test -f "$(H3_INIT)" || { echo "Missing Hazard3 init.S: $(H3_INIT)" >&2; exit 1; } + @test -f "$(LINKER_SCRIPT)" || { echo "Missing $(LINKER_SCRIPT)" >&2; exit 1; } + +define rv_task_rules +$(1): $(BUILD_ROOT)/$(1)/prog.bin $(BUILD_ROOT)/$(1)/prog.lst + +$(BUILD_ROOT)/$(1)/prog.elf: crt0.S $(H3_INIT) $(LINKER_SCRIPT) $(2) | check-support + mkdir -p $$(@D) + $(CC) $(RV_CFLAGS) $(RV_LDFLAGS) -Wl,-Map,$(BUILD_ROOT)/$(1)/prog.map \ + -o $$@ $(H3_INIT) crt0.S $(2) $(RV_LIBS) + $(SIZE) -A -x $$@ + +$(BUILD_ROOT)/$(1)/prog.bin: $(BUILD_ROOT)/$(1)/prog.elf + $(OBJCOPY) -O binary $$< $$@ + +$(BUILD_ROOT)/$(1)/prog.lst: $(BUILD_ROOT)/$(1)/prog.elf + $(OBJDUMP) -d -S -M no-aliases,numeric $$< > $$@ + +$(HOST_BUILD_ROOT)/$(1)/prog: $(2) + mkdir -p $$(@D) + $(HOST_CC) $(HOST_CFLAGS) -o $$@ $(2) +endef + +$(eval $(call rv_task_rules,$(TASK01),src/tasks/$(TASK01).c)) +$(eval $(call rv_task_rules,$(TASK03),src/tasks/$(TASK03).c src/runtime/c09_bounded_sbrk.c)) +$(eval $(call rv_task_rules,$(TASK04),src/tasks/$(TASK04).c src/runtime/c09_bounded_sbrk.c src/runtime/c09_smalloc.c)) +$(eval $(call rv_task_rules,$(TASK05),src/tasks/$(TASK05).c)) + +$(BUILD_ROOT)/$(TASK02)/task.o: src/tasks/$(TASK02).c + mkdir -p $(@D) + $(CC) $(RV_CFLAGS) -c -o $@ $< + +expected-fail: $(BUILD_ROOT)/$(TASK02)/task.o | check-support + @set -eu; \ + log="$(BUILD_ROOT)/$(TASK02)/expected-link-failure.log"; \ + elf="$(BUILD_ROOT)/$(TASK02)/must-not-exist.elf"; \ + rm -f "$$elf" "$$log"; \ + set +e; \ + $(CC) $(RV_CFLAGS) $(RV_LDFLAGS) -Wl,--wrap=sbrk \ + -Wl,-Map,$(BUILD_ROOT)/$(TASK02)/expected-link-failure.map \ + -o "$$elf" $(H3_INIT) crt0.S $(BUILD_ROOT)/$(TASK02)/task.o \ + $(RV_LIBS) >"$$log" 2>&1; \ + status=$$?; \ + set -e; \ + if [ "$$status" -eq 0 ]; then \ + echo "FAIL: Task02 unexpectedly linked" >&2; rm -f "$$elf"; exit 1; \ + fi; \ + test ! -e "$$elf"; \ + grep -q "undefined reference to.*__wrap_sbrk" "$$log"; \ + grep -q "libc_stdlib_malloc.c.o" "$$log"; \ + echo "PASS Task02: controlled link failure (__wrap_sbrk missing)" + +host-test: host + ./tests/test_host.sh --already-built + +archive-map: $(BUILD_ROOT)/$(TASK01)/prog.elf $(BUILD_ROOT)/$(TASK05)/prog.elf + ./tests/check_archive_maps.sh + +check-elf: tasks + ./tests/check_elf.sh + +testbench: + @if [ ! -x "$(H3_TB)" ]; then $(MAKE) -C "$(H3_TB_DIR)"; fi + @test -x "$(H3_TB)" + +hazard3-test: tasks testbench + @set -eu; \ + for task in $(SUCCESS_TASKS); do \ + echo "RUN Hazard3 $$task"; \ + "$(H3_TB)" --bin "$(abspath $(BUILD_ROOT))/$$task/prog.bin" \ + --cycles 1000000 --cpuret; \ + done + +card: + ./scripts/build_new_card.sh + GITEA_SHA=$${GITEA_SHA:-0000000000000000000000000000000000000000} \ + ./scripts/render_new_pdf.sh + +card-check: card + ./tests/check_card.sh + +check: host-test expected-fail archive-map check-elf +full-check: check hazard3-test card-check + +clean: + rm -rf $(BUILD_ROOT) $(HOST_BUILD_ROOT) diff --git a/README.md b/README.md new file mode 100644 index 0000000..f24138b --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# C09 — `smalloc`, `sbrk` i minimalne libc + +Pięć krótkich eksperymentów rozdziela trzy warstwy, które łatwo pomylić: +funkcję biblioteczną niewymagającą sterty, kontrakt `malloc` → `sbrk` oraz +politykę prostego alokatora przyrostowego. Karta używa rzeczywistego toolchaina +GCC 15.2 z picolibc dla RV32I/Hazard3. + +## Przykłady + +| Task | Pytanie rozstrzygane przez program | Wynik | +|---|---|---| +| 01 | Czy każda funkcja libc wymaga sterty? | `strlen.c.o` trafia do mapy, człony `malloc`/`sbrk` nie. | +| 02 | Co się stanie bez dostawcy `sbrk`? | Kontrolowany błąd linkera: brak `__wrap_sbrk`. | +| 03 | Jaki jest minimalny bezpieczny kontrakt przesuwania break? | `heap_start <= brk <= heap_end`; błąd nie przesuwa break. | +| 04 | Co naprawdę gwarantuje `smalloc`? | Nagłówek przed payloadem, 16 B alignment, append-only, tylko reset całej areny. | +| 05 | Jak zachowuje się prawdziwe `malloc/free` picolibc? | Dwa rozłączne bloki, zapis/odczyt, `free`; implementacja pozostaje czarną skrzynką. | + +Każdy przykład na karcie ma dokładnie widoki A1–A8. A3 jest oznaczony +`N/D`, bo w żadnym przykładzie nie ma callbacku, ISR ani dynamicznego wyboru +wykonawcy. Task02 nie ma A6 runtime, ponieważ zgodnie z celem nie powstaje ELF. + +## Ważne nazwy symboli + +`vendor/Hazard3/test/sim/common/init.S` definiuje `_sbrk` z podkreśleniem. +Picolibc w tym toolchainie definiuje i wywołuje `sbrk` bez podkreślenia. +Są to różne symbole; Task05 celowo zachowuje oba w jednym ELF-ie. Task03 i +Task04 używają nazwy `c09_sbrk`, aby nie podszywać się pod libc. + +Własny skrypt `link/hazard3_c09.ld` udostępnia picolibc symbole +`__heap_start` i `__heap_end`, rezerwuje 64 KiB na stos przy końcu 16 MiB RAM +i zatrzymuje linkowanie przez `ASSERT`, jeżeli sterta nachodzi na stos. + +## Budowanie i dowody + +```bash +make host-test +make expected-fail +make tasks archive-map check-elf +make hazard3-test +make card-check +``` + +`make task2` ma zakończyć się sukcesem jako test, ale zapisany w logu link +programu ma zakończyć się porażką. Nie jest to zepsuty build: flaga +`--wrap=sbrk` przekierowuje odwołanie picolibc na celowo niezdefiniowany +`__wrap_sbrk`, dzięki czemu zależność jest dowodzona deterministycznie. + +Udane obrazy RV32I znajdują się w `build//` jako ELF, BIN, listing i +mapa linkera. Task02 ma tylko obiekt, mapę częściowego linku i +`expected-link-failure.log`; plik `must-not-exist.elf` jest zabroniony przez +test. + +## Zakres modelu `smalloc` + +`c09_smalloc` jest celowo mały: wyrównuje całkowity blok do 16 B, zapisuje +16-bajtowy nagłówek bezpośrednio przed payloadem i dopisuje kolejny blok na +końcu. Nie ma `c09_sfree`, listy wolnych bloków, split ani coalescing. +`c09_smalloc_reset` unieważnia całą arenę naraz i służy tylko do kontrolowanego +ćwiczenia. Task05 nie wyciąga z tego modelu wniosków o wnętrzu picolibc. diff --git a/crt0.S b/crt0.S new file mode 100644 index 0000000..b6e3fb2 --- /dev/null +++ b/crt0.S @@ -0,0 +1,36 @@ + .section .text.startup,"ax",@progbits + .global _start + .type _start, @function + +_start: +.option push +.option norelax + la gp, __global_pointer$ +.option pop + + /* One static TLS block is enough for this single-hart lab. */ + la tp, __tls_start + + la a0, __tbss_start + la a1, __tbss_end +clear_tbss: + bgeu a0, a1, finish_tbss + sb zero, 0(a0) + addi a0, a0, 1 + j clear_tbss +finish_tbss: + + la a0, __bss_start + la a1, __bss_end +clear_bss: + bgeu a0, a1, finish_bss + sb zero, 0(a0) + addi a0, a0, 1 + j clear_bss +finish_bss: + + call main + tail _exit + + .size _start, .-_start + diff --git a/doc/generated/main.pdf b/doc/generated/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e5fa5802b2c28ffdf452806000c4d6f621aef754 GIT binary patch literal 307444 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
  • ex_vLUf2ND9$XP>%t2>F+@@6 zmx0o-V~$K?hdUZlL5r#0@^K0FgFmTcVNr?@XMHn(KaIitaIu7c1dvqWEBHE;suvpdSx_m-|-3N(ox5v%?qG*oy-3vIzbaw^G;|xP z86ILwJT%0z{r8~=(u}>`1_(N|64~Zt%ltcpT};ah9NVW%Wj#Ejtn_bdTrg!nZ`Idg6`dpnj+5a7c~<#L!&q zDoX?auyFtO)OqlP;fr*Xsr`Grr892mi7K`&wH?TP2)ukEur&KxET%t&jzQNrPwU)( z*IVp!D1Gz>Q;)(y<*F}ZGy^GB)oQkdtIrzk6NXRSQK8C}t0R?hs~x&i`_5GEV$8s@ z>0An8c$z-^c`z>5+h7*~_%*Wo<6`)DnD72VvErLY(@_X5B`cw48|0BRW-qEgb*ftqxiIC)l5vq@FiX}2K z&b4|tuRH5?9Zif*91irbkzQXM935@_{I#<7dqwGC_>=RFE&yNIQ#PLe`ycoUDJjF8 zxM%%;;VbTcchCO8S3UyxO4)zlD?5t}zyC*kWvSx-i?0~}C%)qF$mi_O*RRXvoGEek z5xsvnPoCI7_>Mm6dO!9{fE5djX^YqhQpQt}zTm>6{4r!YKl?egn^I%wBTrvJzkc3` zXq?x^d_>RxHNH~uANYz%=4$#S>HijAk?0Eb*tx0yAMusTAXAc-#s9=tE=m6n_{#jh z@Rh4WQhj_pC z?%Um*{Tp9-;Xjoj;Qn;=%An@4d+OgJ*r830_`+D1lJQa3$nXG-Q;YqHPlArbfR4WK zijLv=@^iE6;r;;)otY=;0X(u7EteR%{u92CG17BVRg&Wgt)eP5ft$+(i=t0&N00Kp zsrY`l5Pd_N^3;+$tJuVHVD+zh=D~m&ExmxXZTtXWLLQ3A_BO`LWKc8!AW$%S+ zT5`wEYFU;Nm(=jvDihY{&?LK*`-gpU=H7Z{Sv&@K|NQ-&oyr<-CMY5jXK3?#ftRWt zqoJZ9(MoAo))WW7cu-S(PY$3s;4fkuG{w?2(%J!Tm2 zQ+4n24_@6-5a=dvVwA<}qfX**Sia6G?GJOT0oGRkdx>=-z-9PS;u*%kCIdV54@W1+ zDK27@*xm?M8A`H6ET2Le1mgR|aUJkDmzzXFz*$Lr2IDX?&(g{;sJ%mpXI_kmscn;8Ek@{XKOp*zG^=!Z z$j5L*5SXP0100dF?k}BfWK`#HR6#%c!&oYuWFADeR&c8sUoAiC}zIk>lMLq!90{C3wZ2w?5b-m=P=3IOWY|4?d z0d2A%<;Xjgo%M_yL_(>ofUXj@Kl~v{;!V0|8QILg5Q%)opJAh3$2oeOk*BK!6fGYS zA~p9r-#P?@{bdQ;7uJQzer%Wh!b#MpYTmRQ{|{xsp&7re5%#GJ!2#G61`miVjLev8 zsqhXoVTsWwS?~j*A3EkSkpw}OYj*|u$OFwNlOQ6&fH?q!jk%9i@vR*Zua{2_{-_0m zy>CC`(k`mik5{Qv@>$L6Y;(h5Ba$^YgA)X`n3_Y|z!W4oh>adEYkcousaIu)9Z`b7 z2}9r_f*P>;s5UgPWt*$i?T34R|dOA{{RH zC&qkWUSzP;1cj>X0=y!xwOd<){$vd}WF7EzP7kr~?sY0RjW`jQ3nb zI>iXU`tkhy0D=bOoH2r++-EQtWQf~<2hl<_nKZZLK(u0Lz63NB4K8g^3({;!hX7ol z1rq?O(SxFoXU?$?{^lz)Vi`~>03D}#3B3B`C2joVCG9PxFoiW_7L9x{tihqOz!H;G z2!u%@_w%~K?X8PUnd~h?^Oz%opuGBacnvO_KmlSH$RS`rol!GCs7>pJ*LbnbxL}2u z-I6Qqa2OTd*FpqDJ^+zo9x?M#MBQB7`Kn7wZRz&QQA}UVMYM7PynKV44B~g&-)K=aS+wg zQsVuIZEqtBb|qBc*5bWjQg55~1T)A{j8O06G=;Fw*?EHc5h-n_P#mx-je6Eki?A+J z&-Pg!24qzi1p<+Q@*R<_wg!;MFt&D0Pw)bA(Y3HClR(QyyQH(;>3;WH!r*`zKpBaH z(Ij?yeuVQaa6nW_16kSnwWOaXk*`W?!+>>c-Fg7P0)7wMRiFf(fxj;yWidwxBt)D% z=?J=X!|>$jg-=$n0LBZqNo-N#%0h!~D;M@oW&x+-re z5=>n=c~Fe@Q_5@v&vf;v0T+Z?9!#Ok5*G0FLFB!rz%#It#qbvZZc!o!hAbiio%)Zl z_|K5dXV2urq@n=uL)P47zb;T3>Ah5&Na-arlzJ0_e&mcSV2 z@=p>3lH)hw002aSP%9GzJ=5VxuS_qZr&zQvMldl3giWXdxJZUUZWe;Ul>mGn&}C}c z&1!NH8i8$D#Z)-PNzMwI*(WaC)us_efUiQn3aD%4fc#>n6zM;Tw0NFJ5Y!ddc?JM1 zVrziC^E6oMOc8L~{y8{^;1Anx(}HpLv9iqupwGa{oI#aAMS7HrU@pE&AhptS+zyNF zw+2fVVxg6bsFvY=caRCtXCD9qCHbm&MJK?mbT?uLOL@TgD!GCK{xOcs%$NvPd_Q-3 zW|k({PDLp-Q7@))@>K%B+Q0tYeoM4`M0iQ6NZodm@{fp?rWlxjB0&(IlKC)vpXdW0 zF!GQC^ExT<25)&SN<1g{^DXBfrLvWK6jW?Lj=Vh>*uZ52Feo6eBLRYrb8p~>#w{%- zH4Jo}ThysZ1Gd)G4qwN`6RCh}6lvgQYxOUy&1&jFbDL1`HC&v#yzrLPa`+wx1AYWK zR5$_UsSJl!3NVC)AdxYnVDPJ)SSw;?cqI`-*gI0JuV7hZJgh-iYe3#z#EbN61Lik-?x8I1Q~}{HS7O zN7GC{IvnNi7HKgK*xFmCBqI~l(T+DtJ$u?rB>Ou>lqKvZXQ>|1WA5*Q=X~gIK7E#2 zEd3Q*_uK5FasOn==H``YEWynj<6i;)KA7wN@U#wHIMbeC^lNlN(DHe6ds z@+cUr-ufnz%X!ybkM@*QR$sMx9-Q&^q;4jummmBmzGC!$gRguq_;2{i>3CUBf7k3A zQNMwok-rpn2PKBqu+@3lYyNugHjPdEanLe8DcSTm^B8OHKfdbKb>Ori5vbWc@7a<3 zY<*xp(eH9rJXmPu{UkC|BIu{^7E#{W5N1GEn}_8i*3$}`6CK^d=ILRoEw?AEO&KuTL?Mht5S-qkuW$gczBJ*7KuX5wYO2sO=WM;$-9Nk`AM~)`x_bt|D*N#({4U`hZJiF86MY zEa)vRwjR!3H*n8b?C$l4E>ewOzY0Ai5?q~;W-Oa6p1-Ww^1eAZW?ARGaXei4Z4clp z2Uo|3@p|X`C98EbHmPB6cZolP-Vh!! zYtmY)eQ4ACN^oHC+{dxMy0!e$eYdB-uApK_ZJ}wQqQ7~tYue85B3Rrvjt{*H)s*qk)?hs0+k*pD;M#YS#bthF zDNgps1?=C49$FuYH_y%K{~0X0{ZrQPX@;kSKJ=IOo!OTjl{7X(6>6D&v6)}Qd=KnD zPXbThjUR0BeL?T^<+0@W@AOt+uB``ezQ3u7Q$~wy&)f60qr7{EgqLP7Ow?YOWTu;B zG!3pUavPDos(9z)Ui)Rvak*b)u5k00j+5BcuV;T5%SA1Eyd6wEd!hv0Ggsd#&>Xhz zGPtJ>EIxVO^O*Do$M=tS+zU2WvcR z%9Dl2nXZvgF;agNJe@>>>)QZJgbbPQid^u4+%o|RMZ&H4|1K_CAX)S zIzBEoAd_?Pz{R;rOj%0BcvxKV32%ZyLY!O>j<_Z?imms69AqC4Bg7I?dIb3v-wj8` zv&k95kr`9`3Mf%N5pdENTg@k^CaW$1SvQ+OvXpFW5}2i!b&yzgOz8y^vvRy>2ZpQ~_?z`;q|uqERr`R_;qEydjttS~m=4Q;i?9Kr5vTNTY@0QZP}u zY*T5~mk}bduf}lWB91`o%!2SQilmjnC0MDG39L%$~I~yPZ`LtYz?_XV@##!0Xl0LWd^6 zBUR%l&stiu-oiVql(qp$8sjK5SP-63hMUuk1DQwy+#U2qFLrsNHV-gLCzvVr{=GGZQ zj_rb&CUV*JXFxa#2I5Sb&wyPFO7)CQFd*Te5`?NgC$8Mnz-A^qLdibjxxI@CE5Z7J zYo8_PBF@BC&feKMj%M{jEwNUxvsz)}6ufMHuUuTIWW^*2w4Z|EZLq}XWaAZgQbVAx zBWPpha&U82i?Ce8{;4^`$H2~vVna)pu%w^ssw)aS($m zcU^qEqt_Lrd2vnJZw{(-V zx}xDYg_!#U1s_=nJ&UK-xPX#28{(pt=Dbmd2oO$J=^bHO z5E6q2f*w>d#Mq*sOeM^+z}>HRN#Vl&Oz3`7lse!JD;ZK>*b#|C(-n!)=z=>rUBv-# zK`b~C!7->n2LxpYc3jpTo(mK!M!`8&WYRv0s?L70m>5PZio{MWw){Zy2x^Q(HeM(D z7|IgpC1G-evJvB8M~w*z3k`2($U_tcFONOY2mD(m@MVVOn=t(>+L*#p+#K9utWQWm z_z!tP*}NP))}0cpuuDUDh>IXxEgO$D(jj0X;z$;@0Y{^)1j(9#x`1g>h~*+N@Q^VR zR=CkQ5~HvhU}EWWI+51<|VCp3F!>o5#-qOsi8PKjg z_Rjbtv?q`fGIIY{(Jz}l(A4&nrqvm141TUii~%B+>+4G7LyP~bcm zKE(qHluOKj{K{Q0T_ZN`;3`3xV`yXQOYi6}6b9H<+M}?)FqqZk;K}+F225NZq4nc4 zmf$7qvhCP7cYp{cXMhWT1Iz9a)Wk;UttmM&RcK(7ch?}@SOnoNro?-~vOxa;I+}+) z@=A^Hwpdy}hP)SdjIK{l!Kmd5vGYxF+qr%-t3g&v3c`Qo;^v4HVU5t+BL|cSWwU|z zEiA<1(-(x}mEg$|*aZktZQ?U%gU}duai&c*bxc8V*oKF9paKN+^@XE2*=YLAm;1Cy ztUO$1%zC7Xt|MT6-jX}4dO*f-;(_|=5@RZgvG#R&hDGBtfUHWfLhUV0o|J-V&{UOW znWT^!wL7IL$XX8ObU@}5VfA|2Bl$BJ%nF9F)0mGzZ~w`N*uUkxQ9xsM;^0Al%YnX1 zWV3g&g91l^eDNt^;ak^(V%8FSr0^D&3kwe%$QI80TG(-sN2s%OTIfGDVF8f@jfy`1fZo(Axv^zrxGiV7!F$OO4-M}AN^Ooj*s*aH>3bSPda-`3Ztj@l7dvx&lWyD|u#)%fLw}JJY z3P`BI3}%miV3&rB{j<-4xp+BxAe>oYWaYbUe6j)1R~KryJ^~x(ZAJ#fB)iUFKRkSn z^x)s&4Ybt$zlyA1Hn7wldZVa-n8nS*%lTN0_1(i8bw8076GsSV_1wU3*#<+?&{)## z?@}G|{bKPVyJ?&uhLapi4Q7 z@9=ubeerhy8kxC;8nbLfjM3M@Cf}(+MxNNC3f7O12#23LBgIvn@F8#D*>fM~O|_z3 zZ<4&KFAv2sy#4nr{#>tg_5FQeGP=WSr`p&mi~r}ES^xcIPhrlyX->GizfwTo-`U^5 z=p|wo0Mo5T$}8B?f>#*7d0q~=A@Ugg8FIr0Q@_4nJWjYSaI;LYuY@&ai?%%RK3cmI z9*=$MJ?ZUyWN!8{MF6K>vUZtGCn`UvuH)mn0xt>awb#+>sV`6a`YfGx#n@j|2WjqT zr!Agdxi#sRvPF~1%RM6+ik@U&o)z;+`=0oE=7k7hYQ*_|r|#9pUg2wL1MOJtJtGkr znmIpdHuYle)?+mP(|hmyJp@D~#y9Vs_bhMcif6`&)mHkgbMY92xzDt(cR2@d_yNa6n5y|g!`)~sn1UP0Cdh6F1d$u0+x{;A3JH9eO+_z(auEo#q z%v$d>n&Uy@#L30Y-Cf1};hnRI%(lkTQg>Ynzh^ zR#Kkz3%FsW%Lo?~RJ1OR@0F^(T%ON;dLCCWNb%xTErNX;ao~JLQ;VnzVXoM$*&9?3 z4OM7NQOvO9RCQ0)-+h@aEHfUHmpB-d#-wb&Js{#KvnA~^&uYgLa&+k->CvvL#$fh$ zA)(Lsv9*#+c<1hg&pFfdNcY^IX*8ATdoM*^_Y}qV<1L>>Ir;C2pY)`wvVKj`riE$# zD)L(NptN(Zjzy=&%3)0B1Vtx!dI(%UEkS4YB^IB`NVim$E1r(n#?14 z7g_6S5u??^1tGi#G^tY!pX2U5z2_ZkNFH^$dib%UfQkR+`tmh?Ty1|d{YcF~pSj7n zfk+0`#~;r&3t{Rc^43Z3q6*&K6wY{=@{C_9x{;%$TL zY>A9P`7h@&4IN~b(F(^e)81{dJ%}!FH+&cE!4OxRbzKyy?k{<<`E%R3-ZXCS+}=k_ za#2NSHU7zptt$3#zPAQlp0e?5X$e6h>%G$}y)V6cTL%*vGq}5Znrg25tzTbDEUQ;o;y>>KlUH56 zsdIYgs}T#Wn{K&4g$(DJ-#gpfNTfOS`0B=AB0=|9+sW}wn(tCYmq3BG{nay}mwo#I zkGdOZEFfwUjK4~I$dCamcO5Z3FFG0rv0Rv$=!Jt?T5S$$U2(xB_^9i^v0+jr-ptK_D z2TR-{nXEJ|N>LU&hO3vy-5`aH@9x+O%?%dF0|?G?HddhG@E8lTHdMBq8>M(O%0hkx zlD1$(DQ;jx!+g9cA_9i!dG4?G zv}QT0ph!=WK+HC=7Q#JJMC-zsWjdh6Dxmr94-#I-+}`=^0`1rdLh$$C{L@DKcP)gIrHT42G0V;% z1Rs_R5xW^?*%O7}pT^-U?O_Uu7wXheG6?kLQMzX#j4eZCGkT{>*29DfRssz<7H;pX z4?-|G$Uqz%P+^A((2h+?b5=oS6@kZSvez;&Y9A;ITX<4b62}*Z^Z>hi=AETv@&mNy ztd7_!Dzgw4;Dh{@0FggJv?~h9!FnShEXkTf7>y99QY45X9;oX$8JH3fLM+?u%ZW~eYSpcuWKECf`c ztpj?wFbK|EhQ+ppkB%+GM)1+XfhupuWPk?X4V=fpd|4St*a!uLrTiTthaJS$z}a3Y zgoN(DM1^^S%~^r1H}J(r8|d0PWup-*t`HWbduBPQ%tY*tIAlZeFr}H>NA?-+8rS#Z zJY)@qh2cS1MnGnr%2=%5LzyDifVL7Wx0$($K*afz$>Xg9JIC3Mp;Le*zXm65NI+P6 zDeLpoR7$#=H?a?dA^4j#(t**^iq4NA_+MzG^mSzvzfC|_IzY1MX%FDP^ismwGKz|0 zP;zEsl;SWd2Jt&I1`da!Yd~lmP87Tp2hNIyLGa1&q@~pq%Kajh9_D`}!!u_!0TD%a z@X0gdwJUx@!oolx3USq;J$)LP&T*)`53!lBxQvP$J$j#+RwfYB4Rc{w3YXt?F7sQ~Mp0a5sp zn0Ky2LmnYevWYTD2%b>BxSC^?gjEnZ1xvf4g)B@72(BoZL9UVqV9Iu z#$2?rpyaU8Wa1>irAx@QxeJVcJUvr-W!X#>cE%w!h&tkOh7 zI!uv~HcTO-oSn}0vM`26(vax8Ou$F(bjAyTk-Q=$(6wCf!V95C$5sX*$lalAwk9}X z8D%yr8YC9d7HFu87K&^T2q6_Fd2Y%L`;oUbgl$s}%zPp1FPY@Uu*_NQfV9AX24>B| zPH=FR&-E~|Vx$N@8x|k{#YcZ>q0M>aph~R}mLf{PkdlLan1Hfu(wKV+L?HOK;E`*l z=vc*IM4U1f#k&!nL>f!%5n^*o#Xtl(85Wy7(B*(WME(ZE7DWk_XU1gMu|V3LaipMO zK);&-ndJxp0RG(=4#afT0lAr)#(WZs4U^9x3lK22`18gM$PAZHBijX$h`9K8S8>nn9 zN&7b)>~@TpG%O5*`qG6-VxxkQ9;0Q2#F_Y>s>&MVva?QX;718~BSXyXrFWQs)6R$D zOmWJ})%$Ylm2*F^nQMVBP7vZu%gU;X)d^EyqB7OuRA>8*6kJkfvB+8_5%&$U^AvA#*yIB85qB z2OpJcjjWQ7!J-bx*L3ZbDZ#LP9CU0G1OX)Z$a-*FXA=eyw+aop(*YV~<3`0wadqAf zGW(2ZvKuVeT_PZNbK{tA67a>XK`GwnE`_|D5>>{D4Ipdl%qHtpL@B^X_8{%ptQfMN zcnE&QK%jr4$gpwCZ3plzkyP~wWEQN^Kp2prm(NWwv2#I)xVIoSQO@=~S?*577H|?r z2UI>MAj3}lo;j;2Q)E47TPIy8Vg*QkK-!F31!JotxAyhTM9(64|#qeNmc z^%g2mPTjeuij4sR7j~Chiiq?BJS3j3P1ZOJ5$AJz7-BK?6CQHM3fh5BXl|*2$Hzp6 zgpgK3A7Pf;?BtyBIXV@AVHf`npxALiWp24eW+6O+twJ{l9G7@w%m)eifc_RT zj@6D4MZxfOAuQ&1%vpbfBGFJB^K>G<(s(k8cjlqb=K>ubG0C@+v@1?Y!SJ7eC_4Tr zCLtI@;I~~!mL9#ljN6GpO2fz$AuM2}p>GI0V93H!83P8F6=19fh7wuqtdbW3&I<$& zRb-PkT!4xGp@_H*EVc%^b_{S(RS$&1gN@{88gQaU(m)K*tz1MPqHisIS_KG-)rzGCH?Zvj-)EiR}Uxd%-9c5zAtoH;g?vss=Yv`E}KX*Cf zRn=Pf^{VxpxF~uq0w;!kYK~R+ES1R8Ehyn;*Do`T*SjPoFZ>a3Xu?ag!2hoX0pM6Et^IuSdTf+Iim3`^)gtlIKVDD0FRklE#+&rfV+QL4AQ?zSgj>F_xdeBk7v~vA~ z#_t)~V_#aai(&WG^3em;2pekJr!_FGd&$+9dku}AJ+a@e|NOc0`Z#7H-+4mBvJO~U zRaGK9QTb-64BP!ByLzchXuh!FrWnWBQSGZ}+r1B(k#wFF_ zI##*q->HhKSYIv$y!mxo3rw2co?)YMy3m1mlr2-bY{K zjgaLOYMX>c&}}KBVT}XM&%CdsjMRBO*%Q29MJ!58I741>;7>)OdzhUj?-E;CfC>V; z-;LglSEaF5E?AfOAP1eQO^8$wv#f$uz326 zH}bLyUxT)>y7A9x8mK7ykHAgYLpvWuP2|j7+Ru&E;vdV7G#31j#YN@eO>e*L7n1(h-Z1;OiPlzU?hPs5sh79yMdt@>BE}C4Ydh90{KURI)^t<1c%X`2 zpsSfbPdy>fC@(zleU6Ij=94>fkh>`jDLOe%6^eC zlDv&h18dP}NvCzFL~ zlOMu5HJgm>ZxZypPmP&f`*@CAgs;!0=>MkNdvsdX7izOT_`7N}^vIvu?@6n~o3{+3 zcXc|(R}OXv2OeoRvvAR-*yvhl&8~m{6;CAx_g_*XH$2=H7C0IW56no`Xq?B*X8kc{ zH2K(L)YqzTbJe>kO?`u|>`AD`>hCJa3T6L>okUkpKfac|X8vjJylUF0$w#i=@>(@o zvJeJm2lJ1YUyG1jZDYp^bx6KE5lhGnmLOzb;<~16QGe|CCv|U`dkb zdx`-gvfodn-YC>Ze|qxtla+c+UXbQ;zRU?no-wR&i#IXWQM@o_Q0qXTF_gN~+lFe6@9GqE7%JN_McnF*Fdlbxr%xex$|0luZL>Re=M-7NDUVy z{CqMvvb~r||M&XBc{e46|J%h1-%w4d&FZzzz)O*Fyr~me4_y6C^_sNran(~jxEy`m zi{7z>!|EHBK1K%hw)QuMZ!+T+o=0+~TLm-i|CShCUY|~&D0?uU_T8qx(l@aik$e2Z zx@0GMx7q#3xJAa^&G3Wf4rkr|xOWr&J2+=`cEUy~KcQR>!w#i{ZhAt(v3HHPLw$kB z7Z>xop}}1-9jCeS+UQEV`8RMQHr0irPpoOnlD2f()0=OmET&y+8J=`G*SIyT8M;lJ z;JWkDJoxO{vI92K(kds>dgSC;off^@k|CtZ^}}aYS99_mL7dOcs?lk(g8vrfy#GXU zW6-K-iP8Dv@>n30B~I`DzPXmS51<-ptk8Y@!<2|{sqIP1Nk=C{#0?SEw-EE zuqih;;dHqtn`|y*aLS`7zT~IeOIM{h-;;+m=e=L7$5^hnw@-=h&D-a`8h5RvpmLXe z5GGz%A|>keH0NzXP{@q-j=6PB*&V7EZ0fXCccf+}f@<3aMSsi00P7?aNoGS*Hzg7;Z-nR{6zPvt9)l-ko_SefTP&6qsc))`YLH zcPQiVBk^$j@$zY2^;erW9!vWcE@CGXkJuBV>uhwczJ!$T7hGHoZuf|J@k^Ktu#5R0 zEc2_(sYncYNn7=fKGd5Ov#D(%Y8_A?qOKZEp1eo13V9wpKbfdJN&c9$_~uCA8J zkeEN$0+9(P1?IWc>29%GjrX&$ZZbkfR65)q>Q$V2BuIGDc55vy3<;o&Xbq`Of0`_8 zTb~TdocLaBjYq5xWiW{QpKmYNSa2u~QLpa(eYu0D8h?KORY)qGRef(ZQO%#byWusT zY+~;wH%<4{IJ=ww`1OG^IrXvdVK;J?(p}jhQn4%K z`+bM2_Ujyu8I!&r*{RP77uKB?&Y3;b`vhbhb~D(xB64#!W=nJyS!Epi`gz3giO=Te zvG4Kz{YmKP@*`&Ut=xnpNuE7l{UM6zZPO+nSFU6Zu?oEw3MKi&9&;E+H7cg0#&CgvGhQ%ZYMbNrjNDY>h;DVeMJgPYtfr!dKrMGexK z+)Afj6Vs4C+`cgkxh=(;MtY>RG{uvLj|o{Ki@*Mmd|gY58`pSRH^+kKRgh{}3CZ~# zO2d0I*9dtYC7C&Bvkee)cQZ?E)_pv7UcTXbLTt)jGCF!5EY#E;Kc9#FA`?6+tZTUQ zlPgC0O_=Iihlh1(GsgMne#?oK7_Bcv_dZ*6@)+RX7pwd1XQRBG&sYAzoOm#D^ZccY zE4+%=oH+Ku;#?Vlvhr8Q61ko4y=$(`89cjLSP1-;x$|D$1v9wC~0z;X=@M_(k$4-Md@d zbmFD%{?^9v>5%`~@?YK||7N-2PUC8t)0F~=O9u-vxE5+;1dGryl=@%P&MSL=0OcsN@3pIc2m8aOE9O=M4eLPas# zT;cObA~mz|aPE!8tG{AK>uURT{nIyp+l@@=D`rLR^nCXXopG%q81x%|mOlPg)9CpS z_SiFBDxjpRE2iQ2b2=lV^jiwArjbyYs)8exouQC%jV`s-yrz-gYa_?=cE_5ZgpD&? zI`cgHJ=aFXWs&@zzB0dlbNFV>a1p$y8~gCQ&}3+lI}%Y|8#&+a6J6H7;4|d(<^J3G zF{8ZF0B`T=n`3oJQXNc&(ddM#Edt3Td0gJmb-_D-@ zUwXk*ZQbSZ`C?9yZN{TD$`fP#Un}Di-j7o24e(o?>gf)`7Y1%B@h`s(7^i90i)S{z z5pv(Q-F#P6_Xq#elRC$V`IZ+9`NkWLSKxgUmN;iF-sqr{K3USeNP^6xFWf0?f{z*g z=wo&pKWAa_t7oQ_2a+5-u%=egQ`OI3I~txepRIV3`h-uvpyN=4_b8vSygczRey`>U zm8d_RJ3X)Ua!=OX2N_gP+fPmN_7WW2Y2GEU5Ba(*yLE*UFs}zD*6fmtTIiZP`e=Ce ze>u$^YVu3>@$r=E*>foHe#~OU*+3CAX&mBK`)u27;KKa$-u%E1lgV>S-MAF-we#AH z*1QSMs%FJ>{>vP%JT}$soldRv_f`+y9I)1?Z9MIM|EFat_D9Q1?2m=DxQdp?U)JvJ zy=wkA`efhrIPcfsj~j3}d;i~$hNm113)}fCMS*Ree=jQ(hWw{ne;N3mAzy=s0g$*~4g>LyC-w!jO1XeZsZOg>dhJ7WG}qyIo`X{!?PUDmT-=_nq>7 zIM!@?HO~L8)R+@Q&uB(Ue&02q%4n=JJ+c>O!A>f>Nl|STJgsRfBlvDt(z944JSXyL z@Dk&ndvJBV`sMNXgc19I`bY6MdN!gndCH&jpN2;YCi=$>Q1F+y*PL%u>xmeDZ}0lM z7J_S@IXd2RqEuhlWXt%$l0QhlCcKVL!uOE5w6l1QZno<;i{z*f@m9B_&gQS?m1?V+ z*Ak@+@|Ooc)hK)UZ@yyqO|38LBv-=*)K*smwj{5#-rEo?LL2JdHs$ry-uC7ySeT2Yg4t_x=H)sAAf2Lv#T#r&kI|O zR-$iS?dOuI|LNKiM|f22ef`nv@>XdiFR!ZcRk`9xLs8lm+|Wc^TvXKO?{;dlazSf% z#Cd|W@DQP|YxI*2k2O*DFK_LhX6)xqJ@lAN^SBW!{Nr48@CeD` z@Z9@3_us7a7XPD&te)+C{!-?AX0Ix3k><5P!TTc>9jEszW>!+O%Q3raUyOK~BzZG` zWp1`HIUGEC{*Yes!_0Tyx!CXRO`#5{{?AGoOjJ1|QjGGg`L|6-3{Eq?dGN9*YM)}_ zFO&Mjv&97Y@2u_qXkbid&B~wJ+g_hO^5%Sn$TFQzQzQ4g7;W}jzUmyLzbom#>bD-+ zGp9$5oeG!PfL*^Q!YPj$GCu9}BA2{hrGM}QueL0Tw_Nhx>2Q`F_X9g^kMH+4CbAUf z=+^By<9WrTsI1?QN#_WbgyQ3`W+apNPq?dVpgk&;ue4aM<$RPaBq#;xIbLTdaaF5l&qy;U{O24{F}Jv-;j3J3Abi=%Mq zC)a+T+v^Kbi@o2v4Doc4l2PvzO>(~`b$t^x)9m`Uq!Rd|0n|q*^P#pNc*(#%{-`BS zvT2mqYd=b0Mz?-k@@;*!r(E)uy+m^h?V`4-{UH7LbK}g?52pIKT{nl*VM38T<+Eg6 zPZBpwD~yW8IE&?*W4`go@_pXHsI_2;+>0Mp&x<5VXYc>D%?SNWST(TGa>vc=D zU(Y!8{s#G4_4Sxqov)Ivp0Df|o@Ac#Q1>Z6PM)ji5y#D(G$%`NnAke|JUQje*f-xK zf)890*vtH!JLh6La&?=~{f&+;tFGSlo=<4+-v)YZBHnpA`9aeB(4PwZfCpyIXkcVX z(2BXRZ*F)i=Vd(?vEg`Hx%=(Uwc%jFvh}=wfni~1A0ivLoH2BeF4Br&8a^w5d~_W#RP0Q3DbO=FO|B*cxK@g8N!k6RghCibL25$(wx|sQETIJw|>w_`oFY*iiGzo<8gs5|4jrr6F z{sQ@Nx*;2Onk#3E`pM~$mg5+ki4}_Qk{9+r)7A%`Cr+047r9(Dl(;(`b()?;P)W-gH#R;7G1?UGQ1cHZ5-$+MKJz(!T%BJc5ols?qz&_suUJ9=Lk5 zcK808>&rCsYnZv02>X_)lfD#6Q?a(8?02e(;eHh&`Q?t-Rh`$_8E2E)&UWRo3%%Io zte7v|(}}8~s@|@b7uUbk*E1&$fA-e3ysA5mY87v>O8R*XmU?#dE2X&z$cI;3b*pBw z=4wg(-@DhH0;gJy92vqdN+jn=Ia|?xg8dDW@74Lx6D+je2mrGe*8d;k?mMiBuU`~> z=v_jONC~}2m);CWm0kq_At1e@RB6G0pmdNfy@P;&NC)YNARUz^AYD30k#ZOQ-o5uZ z=RNoCbMHTw=LuPvOvx(WwI(x@&m?=*n?2`!8u+AgW4A4%7r)`?Oh{Aeqh+PkllNAs z5}Etzl?ycQ0(wb*dXX;FwOxpwU(UU^Ta-Nh833EB;Nvqa`i?S8$3wX%>3>*q?%x~i z{Q%!Ty@GJw*ZThN*DH(u4_7Pe`?^`f`L!$^^qx8s@@v8c1q80ISN3@F6fPkkLddUf z?PB}X4lX1hAollS=KmA^$JEjFRs+>Vh51J4VL7S0y+MctD98 z+f~}N-5Km4_SmnrVKkP|@Ip~4%sb=xI*fFJFij?b@fq59xH~^de{SY00R)jaftejf zkqX6NtN`o*)0%tIr?uN5MMA9kXuf+-IIZv$=`f)}KSo5ouwJ+`;;UE1$_|NdP{mju zYIkI-Zx`DcF3JgTT5W`OWXBUzq*;wea={XP zVh}9Z3%L>T2E#*wSecVX; zs4^7Iq*W5mk+(Zs;0-f-3^>FXR;#N3dw7Vj!GD~~fd4bY4YepgNx&%cp;m!X(N1SS z4L6*}@4n3%-YWee)0IMagIp%l>%MsAXusi~@UmqKS66L@*2)dlKhaxTg1Zr2rBka# zBnjo`NYOWgq*`U}ou3%f%{i7d=T&WcB^X;dvB5G%6r)M%U8`tPT|()6`og{Pf-D~ zCUwGLUvWmFtUAmdhbS&-ZTT3AjcW1Eb0bk>G?%f{>0(tN!y z50#!&i*bkz29y_$84J5fZmyKs)SeG-(hh1}!nVYg)_Q}A!%|$7<`e3oG;1d|${WAs zZ)lWiBwQ8e9XmGZ{4u|DLv&H<Bh=n5IG*;J9C=v9{jjc) zqk@BpoWpNaYSpj*OVgtrbA93V?`czm(rnxENSiJ$zdfTw>g1s17srN z8_lE59VQC2p^;f1c7zJHULP?9H0~(03ZpQ5S zbbDyf#UC1{b)$UT*0T%FU?Qd zRO)Edc18M$COGSIFtQ?8Jh}a)%cgi6A7?FEUm(Lb&L@h*n#8r%?6*>-?=x<5v8={{ z6Aywb`TEG9k6Y-V-SC;c0Cm)H{;}9$HcVa1si!S6=;oEs_8z@ruq*~ja&lO zf&q(^j{?t;xSez}EvOvg>E{cDzn)`uYCvYtJxw7wt$sq|QkldCk~d4S1G!O|_kR?R z^=os)j-NjM&*d&qIdj{OPp+i5W~oMhO&q-Ww&!0ocB;vNe}|w^Jw!ZV$eUg6P5){W zvHi_ap?r{2(ouDv?AYILzc@Xpj37KVuoYdHu|})WL@G22-oNrx*P>W#cxtEiK`C_L zMO~!Z%>|*3>!lWEmSk#i+;PVIzmkp3&^GxcD|+Z0u1cM`4wGvXN$s>*d=J8qp^$#} z?|TtKV2?lm?rP~kC@uY;`w61rV*ls+32*+L2^{-c`wMp(MN-XSS;cr?tXxi|Hkkc$ z<<9>z6IgW31iopT<@$FfussJ-m(cy(5Mw-5N6ee+r6J<8fhH&D0h1wE+*4%Qv z2?O$x!s>}|St<=KvU{|S5ydZs^=WkqTF1lLx!9;&^zvKd(7l*C%fiD2Id)VQDzn89 zCL-Ek9;0lYm-^$hI)(2_*)ZjEBcS9OJ`(SibTkX2atweEDE;c%!NYpAARL_k10xxm z)F*Td5+8zRN-hlT;fDq|C`TY#2+`B^i2A4lY$sE=4b`5=4JzJ>qD;9>_&c@(O$I0!b#NQFb z!QB1`e84n({vQOu2W%&@V{Q)SsHPddA4)S`LdUxB4k2793;|DlA-HfNT7-OcyDk8+ z+Ls6@B{US`#?Z+WQnH^))F+IH{)9;f10V1)8Ic0@Nbt_BeTc9ER;#NDR-Bh`@UA5a zN>74#DjdvXiBfzjz0gF1i7_&w5FX9pzoZS1Rg^~Yf(%_T&W+EOFp_N6=m&0F59=*?Jp$(2UfdhP&3^w5eC0C3$8@_Ld@uic;b2~hPky6%F-D0BMNKb9NC1Ki1K}O zI@CML;}m z96)9eOdh4&3SL;K-7X6JFZ`h?`)b43`eOOHj;GGV4ESUth#S%j;V%nNGY*7^N0j@) z%B2v5f-nTU5e>k=4I@ZPxjf>Y@WN>^RDv;-T)FCL$*%$nBx)F&1VJGj%$kdVO+=*7 zUEOZ^Ng5Th7%}5Upg>8f_4BuCF=>iZLTQd3@Bx2(;(=1BU=<^15ssahBPGMv4&IMH zJWx?hEGQ01dylb&4w=@^&}jMgBztE4E($vU6DCs<#-%eoR2;T{z41=ZH0duW$XjzA zB>U-F*dQ!0o@((x!BcTKPLfv^M=Xyp8PyPlodHlMyC{6Q_@VFc7b41~y!`W%zd17% z&=8@y?I5KVsA6MU#N8pxR|f~!8Ce{|?*EAc#`|F2zcvHeRi;A6+)eJ!1f zu@-_ib8Zjer6jEfZE>nZ7%ESWpB##)=fUns=gaI{27uZ#tK+IlKjck$tX*q{-QQuj zxfb^AQ5ks6COH_wjKWppj9S-rrA89Ra0k(UX@RJ|((G4srFNs*YNgp2U&V>gk#>+) zEv(iXIoCKK!dnPIHCCX0U4iZI3l5JrR!BNAq3pKKc0HGxkipcg|B%x! zlPL~SG!$9&-lME*=4_I)8?l2#C}XKeGq~yO1}n3Y)?dS?ix>|;5Wlp8W2(bV6)_jm zeh}En!=-_N>B!aEm-ABA-~uijEe*N(?%D^G1{p_oVf{~;&X%G!dfY|9V2-(fWQ9T* zG|;;~9mh#Hn7YdZJ9NI7Wc@^)-lOX9Be($*kp-#?i_?S_@ohA?(i^ypoN3|DlquYI zjF=-EGzU3v-XS@WO7wwf4q<-1^8@3r4`>W8&%(915Qc0PVT4EH$lnu&s8+RGUPxnX zt`ZpC)j|{tlPL{R#EQNp#GiQC0(+fijWS{%hP=$c)&2>L(LPMIfL&}qk4%K(9ya$& z_FP$?4l#cp=0=~)l&OwGpYdNm*Oobf59nh!3L7D{24er~UW@Y3K;%(Bnz zW!VNqpyJOH6>2Z((%1AcrcAy3@9$%|`BUTnDZ~(dB@Ah@MY%nr-QAL4=(EB zTXJ4bBg62mGg|pDc8SIJ>t1V&a?FdD-}bZxC1gFK=wpnmdOO*^?%5gj?=5iu@~J13 zVjxqAHXn_^g#!Pwq671FONTfuGzh-bU)jCU)p}xKkl%Rof$K`nm#v^zc^1(Ba9Ze<&up2y0$K zd`2?I;g<&GrHRA=+sQ7$YmJSvmFFD##!it3JJF&G(}Jt2m;Sq)ysKlWmeYO=GexDG zMF%Cnq6hC?$rh-bUeayas2I!#BuRX?_~VznYIH((wZFXZap7Wzv~Jb-*h~V;E8&w@ znr(z$srviPT=NIrNF9H{tK&*V>#NqgMmHzqKK zlwtO+PxF5;f$kSOr+=Bi1i%EA{2LSa+niym_~S>q+zaXCY|*8im;MC5==LQ7PS^PV zXC~0(-Q^^OHnbPD;5COiwU7 zHt=lYW74c}VXz;AvyQA;4|mjL+~<2c=9vZbPn-(ltO9!I>^R`RPzcTZ$*f`fXO%EUSxv?aWcO#c=rFBOwKp3%m2o6yZz^*KS=+Y7j!8*dKM$Rc zX&ocuk3^3jJ0DkX{7wrjZXC34+TLh2`jEbK;o0!uZH#7*hm1>fOxTFfQa)GGok!6+ z>MH_oku*}52~#`+b>DAkrq?X29X_2+wEb_CK*{sXPUX|(RxNN8J3a3p*)?X~CG!Fm zbE6JI|0iZ&r)lDznX@-lfU9>AV;#R=#&4mse!sO>E%T3B{Py-=HF?jsHXBW=CNIy8 z9Xu#XKRoYVv1^-=(&Fda&dhB7UHQg5bGGFx-Kp(VP-WSZApc*CtD2MTWj-Bg#zFN> zu2GJ|CM=I0WNp%ZC2zdlf_v$Aa^W2mNT3<5^`|Cpugi9t(ZKeyO2+{(GB>XVo znCw;3mKAXc<33{=-NxGjUE4Qym&YyLx>m=9>uPbSXFNxq8^Xe``-~6tt<8S-)OKA8#t&{Y^le0IN0^*?qPv;pgU~%NGt!&h^9YF?28xdkM@q zL=UrPo{waXc&L3j&M&q?UZ?fDS18lacXO>{Lq)v2qGk6Vr=5~U+eNbZ+zlsAr;+9XMrIGGN`tev;L45n`rOLF*Y~+Rw2u=Q!Y1 zvKXj?JvQndv6hD{l35+?XOy^eMFIkMQ3SUsQtY&RY(@$@e4gdPhif_z!6^JXCIln^->CR=$8R zM4B?i2+9e3H~}V{h3Zhs($jRsQQ!i?{VA{ECw#`xy(pUq6g|HBS5$}3!CSa?UAqGR zTLJC54n%=;jT0#+afdzcVz*8nszSxR1Ue72~ry%Yt@FZE|7bt+r&Tf1o#*+BCri%`6V6jn^d^{eRu2< z*|0xy3Xpja0vro8n~sxD`q#)Ad!;%Xwo-wB0C(t~L7}emJN8tUgp(e%2-G^h`oDa# zfVK{JFb+HL%!XqQK9d7jZtfv+#*-5J?fZ6xyEy`G^e6%V|EZWDhqdsnp+fH+b&@Q> z^lSfV)DVDxm=r<=upJUgY#?D?PrO#;IDBm4GTIe}ZxaIq3g7uJB>18(1o4gV`LH2i z19KV5`3k35TjTUCf8YXG5DF{SM_ArfN5%pX%O%4$>D&PJv$Dg&olk(Qknp*eDY9yn z6^L7*aw&wzIe3Uy}tcKtj+z5J=EZf)4TFhch)$X+w9gSy@dY(T`um#b&I3nkCgrlQ#2& zg`&*yBP%;aaHDess)$2TSorFkQMUeX%a~%*IuMSSOM5(mO!T3t>2@Uj8nrzL=?;35 zBlTo|%85LI2Bt|ErzR2#R7`FIkSX9RSN;Xr^)XLks_#6@m>P zr(j+0JK8}-@e>N;2B6y8ODM553k2-gDRH;i6HV%;6XiBS6fHXBC~*PfX!jAP$NQ@= zd*!jnwfR+rmHCkY)svm0ozkof7u1;|e9mWF@1ip`F?jcd{KWeX_&OD?ntQ061ChF& zCNdlJA=uQhu^Amdoh72=91g(EpfSn++JK>Q0^GzQI!I_FCdH?}3}>u|{7v*N%7b~b z;TZ&I8AR&; z50y(KR966`qa&{%c(pfC-htlayrwFF-1wY_>b~&I+mHNx)H52$Dpnnscy2pdk1Mh% zI;7nbo86EQxP1$$-Ex#Y^a^so1$;h-u*d~bBMuC}f7RU?4z5O9NINmwf#^;O_xp*u zI#yiVT+kdsQK-K(pqv_;z`J^FSgk(c(n=v*KnxY}TLoEFkRxDpvirFjxT)fR61)rK zwHVMEm<2{Ya9(dedqM~1B*IDjoh1~-LbyyFZIu7$@Lpzc%^tQi_`brsNZ>=FRX?^1 zNkR&vc9`(7)A%wG1Ks4W+IG<&Or(Qtz|ji}X^cO)5q5(o94w(ni4 z{F6e%2>03hk;l}8SnqEW=d%g&@kQ(@$yqk*KvRrxRMnFT(DedrJ)rA|NK&Qa5W1{wbxY)g&29Z6(@ zkaq*jEGKani-1l}M?o~i@f!seqI2c9mW=G$sP(L*!H9nk2!Mbn zY>$Us6{5Q8?^EHvVvE=VQlL*CKq6lQL^lq=!GCuSXspSXPz3@;iK^;#SOj}GNxHa5 z0E~0C;^N;KSQ0re|pZB;bGEM*qbEk^6xuA=hDIs*LpaWfHWD zrNkwP@5q*0yvbw5imk*ZFrvjtoObQNauUxV>cjh+#2%02vUPI^=tz@Ov%%dsG4_%Wa0`2BauQT9ya)$-PJv~BRsmsgQ=0r1BW4Irc(BC< z6TAur7{Pl8e^*_(;aq%tNlFaV(TIvIIL_cvbxJbPT)F>q%F@%){8<(EisPvb!>NB= z?sw^GBeQabd1v4ux4aC~mkH4eMe=luvwB>HT3dT! zI}9aTv_uW3l9$fb&s&WLS$4jDRBB3cH3U~$wlPy(HrzdPzr@B94lu^kuk4XDIBjY+ zd|K9VH6Q4I?(ccf9cUU|-E$4`1$L=jB-s8)Na>jm*gO0+A0sv*lzBt%p`=$IHlLoS4BQ-ynM)7I?8nP|r0MYIXwJ9f?etWB?}`S+BHbm894NU-3`DUa38;!*mBcnI^c}5?#9!5 z68*$4C}L6*UTdeT`T2GH`aqi|N$BU-lUYR*@x6<}@P~%j)$CJ~HXbeWpG8f%zv`5= zz8pEfg&A8+~OH3*Y{w1oi_ZP^S5K>pzsh-g)Yy>mvz&mB6g>YbCJYS_vGyRsvU7x=#l# zP8a$o(#sO2PWLvKJ|wUHml7!PKPZ99|Em%>*ZjXx0$*%?C~_Ur3Jj_-Pkxp@a4>d$ zNc8NC^{#)w#hK69qU(b%U$mUt5B@tP@b`Zzfo0nu{qIVk6;J{L+oXeVty=v2T6|@1 zZfu@^c74EaZl;m-h1&n@&>^|ah5o8;*i~zJ@{z0S#FgH&Bl&Xg>CL>0(Z;i^&5gjz zbLk)-QRB_mGJMC)WdR3&g1)`XkscbndOJIp`3d}+D>Z5IYyv`{jnuT$pRMK7iGeX& z^PjdAT3M}^1rB8zm*Y0!_CEwM3rLRL0afpLm=dPaLg$D?9&HHh45P_F#^r zEky%duRa6K%6gOqjKCoC-)wVpu+ww@CoR(*$xrGH#;i?D;CeU8ZNa)|smI(?9fqQLT|NWmC zfw#nxcIN*8BapYW$3cwtBBf-eF*;8*zm^y)M38e5qXUCsu1SreKYigqSZ``2ieQ-HaXlowY|k zSYwnJb3b1Ye>h)NhXy~EqwX_Vwx)VCg#Ep$GmiqL>T7xQJ5@s)-~|@8hjXhw!6Ne< zH45(=%^wnAR^xt7<{OftA1P|DyBxb@kFr~K$X4H|MFdN7-NFuc0lpb;ZLsPX>w6e7 zp1lUj1cbm`mJ$L{4(9+tj{T@c0NpYC_)FrgW7N5cz*B(`sJ8ZB$zl}j1S9wUOI+rz zM?eS^N4UYJfNO`*@honxr~B2Xd@kO_f6Ow4f3QHr&jbeOKgsO=_~sDE9^j-+g0-(F`feXNJ{}{^}E&q9hiGCWte~t_%ARp0!lQV$^EXKy)cYU zi%0=kirckUi+BozKu{>G_Z(0|eMe|kX&EM^3ijN%vg;DLu+wDkrzI)}Dqugz6CeP? z8&pVk8*><-jJjCOF2%T(b$VFw&0sZ>Kzl3t>j)05A7WQNf}q8(;j$tQp9LtKm1dm) ztbloiS>_|r3kX>U$p+1KZoWipu$?J+D z+&)d3G~^Se>r?Lolr0blYXDGGrEKcv|`r;fOytY7?ui`9D1J10DHkK=d8km$I zx4>FN9|adn@(ve(B5y6_=!!W+pTwnw2Lhh%_8~go04Qg+GGr9*z6*wM7-%F2E9PjG zL7=8uq*c;5!Lf!I@O%RZ{?J=IaZ)UV_GiD~JPZih4gz5!-NXPM23a+?Ja`Gs*n@-| z(8$-HpAPbG`%2A%z3NU!FvT9f)m4wTN0H-eDYT8K!F;@CRnN z9l!$nIND`d`&Lv9lf!`y81d;L{9!gNlt>?o*|`>>&+UL%Yz25;C5|QR0oEd=1EQmz zdaW6dei1k1Rg4TNMqVAF!Jg&xEmgJ@7mJK7)5#;M9S|8{vqk{Qd^L{v>W>Mz zjTrMscD<@aa2$hrpcWzHHPs5&AE5x=r$WjnEQJj8TEq|U?`ML~bm}#7eih*4 z{^iqnq0WXR;S5ulWQdj58rUw@IVkMJJ(_y^>xz7y#&R_x=G+J1yo8EXHCm0O=i@`3i>EpSd`X%?wFZDzvc{XFzK%rG=UsU@ew`NC1W90(d{(Lo};^ z2$^SIS~vhlLkhx>zH(AtBCm@UJ~bXndRCAL2w%o)nA_87(dB%Hip9A4SD&JYPWJRt{s1+#V11 z`6n4~dI;g5k!dHqPg)fM)}b>2S(TD$k5?m6=*NMQOCMs-dt%^gc0iaGlr*~B@;Jl` zfUH>J2YN5<;hb!XY+P2D9STM~9*m8}3%!#`8~d+GYrYP_G{lFHO8zp`5a<&6#?K%9Ss#t}Sj zZ}v79z6C^}iFq!%t`*mVYbVT^VWaYRg(# zvo|lmk32jCO+FX*SklUZd$(In?ItWG%n?{?C~AIe`*btx#{tLV{rpe+Uoy3o?DO{8 z=ry9XoX<2bw@x%h-)N~am>8Ki+^-(5Kj>e3d0KkqVca#dl{dJ_TK1{sFphid*m}+C zQ^5J})Be5wfi{NYKlWv#KEZtPT&8!UGIW(5JxerHHuj4zG(Ww%Otd-NnXQm|##Of4 zS*kfYGv?{2+M<1;$tViDpZT+>mA`Vn`E22&yPxk>iOSf+`2%*+*H_hPnp5dsf~mYi zAv(?Y{I5itTTjym9|g{-oImMpn2m`WRyF#R*=hyOb}ty6I96Ty-$4OltoWdCt&!ad~p`_yLXTyjbGOA2Z?gA-53CvPM7HqhTD^BI*L?X|Dfz<1mPYm6N+Mn~=h3+7u}o+heE{pS&10HHn&UXy zvNX%Dy)>0`bUPcCnsG0f_d3l!_i?{0oYSJ=S{pl^?Br_=*xNW7lGU~05;9;s5aJ@L zDUw}D9CnFX)anhAy0o{Yxi?Q~mJiQNdbYvz-e69!=Yea&m)`1!R39<4w1OH3y%k)o6PeOR1X_f2Q^@$!0? zX6f&zt4t*Xv{`@pwOjMRMFw2GiKfJHskq$Jw;YM>ZkW;5p?0(`&&E3M z3Eb2wBP|+4KQnn_!+7E>*uS1gd&PB2#QND3ed8yG3tLK+~QvUq#%z0eZ;69tPwU@* zzQ(x8Q9Hc!HGk+%Y!3Eo1Nc3`%&XrenI-+oj*%s=&{r?Z7?{W&x951>P0+ULG#sY; z?}fm7e}zD%Ya#H5_WxE0)cd~`0vp<{i2he0kmmmvA&}-d6YFC~bS$JmnYE2294!oq z3&({U#GCx87S^y7vg^tnR)!iv@jLXeu;a2zlobl$;b>z>+**+`>j?(BOBND0j0Yz_ zJ!GfG%946`LrE4LH~d0?{0~$qgt5I#8&^Olb1ij9j4W)KASC=QOQg7PyFxDpY>y6` zYzjb2^k}kGjB>c2*7gntlA2IJ5X@pE(xD$Q*nSWpL2F@orU2U$N5^FVr0eMsAo{T5 z{P6|c<%0p02B9#+fYq%LrnVVl^9tXKWMxFh{RG64KQxR6fPozt?Okrc0z9o`3ev!q zOHzXE0i}$8;?C?oq(enW5$5h39MJ*fqKX&+@*5B(>LI2u3Yid zMlk@Lat<$vug30u7%%!)G8-z4c^R?Y%q?KZM7-&aj&R3A%1?$tCnq5kQ!#MBpLM7> zD5TiA;IpiR3Gkf2mDDK(=>>H>rX;b(fXQdf5}6{>q4FI!C8dr`X$BAZH2}hDV}Xuy zdMOZplT1k{FOw{Xm?<6x)VXVG65vTcp<%X#_!N0JI?$1XN`K-_r;7Z zGj_Knwl0-nj1(Af$1w3b!nZ-0wL>U?Uj}xz@0fui9GS%L)WMTec!>2EYSO{8uoMRF zk~2`@FjC~6>d_KeA!Ja1281e^-a;y9L9Tr`q;oKQ@f(EV2)jcC%soQkSNH@-O%V*p zu4SlFJP;kl6k(d*0r?1YtXeWKWl=_`$t{^+Mukw2oCH`}80`RZQZXgH2kQr-o`dO^ zr>8VX)+^>n^&yZsJv5m_v_SO=w!laLSRa?0hD54i)SnX4z9l$ozBxXDEFsg!SvV`e zGm!=)OiU*C!b!29WQOxhtoh#93+iB!&OMcIVFEaCC`V1RFMbA zLM`E}3P1^zpl>)6WN%1`R)V49d@uy0Nqb=tFnks!EF>!?MEy`$rt^szG1-HAusxCB zg+pS&5l?8(D?4HWW?HK*-{9M{ExjbZSbn4(*m9AAi@>wu0xE6$ z3o5f1R2`^S$jBYD3S3xbn3X#81je!sFvtzKdJ3gQKJzMx zB|je~AZqWz2Wp%gP~*hgcL{IxpihA<_!su_Q<}sVP{PLPK#O38M|c6fF&^dq%Igiu z6~oI<6<~`pfQq9-vN{48PXbMrbq_Ywey#Z-JF4k=R3<0y=tN_wsQ(8I$Q;S4gpTXN z7Z|A_Q<4VC*#L$OG*52hDi%Tw>g!M(oHR6r;z6sB1O?JOZf`V8SSN!y~qM}~IZgjtF=%W&(*`L5oCc>x^pA9yU= zmyFe~E;B+;BAfs?t6i!XO2Yi0zX*lB)3zv9+?n8mSly+F5Nx&~5?mzs$E`dDrX6NS z75KSVWt)8DPv77O36NEQk@A7sdInU}GXR`|{z?xZn6+Ur00wq~j9vSi*G&@uj&Y`h zDRz-A4d)0^=qyyJ5HN^jWEPhB@~~)0d}a_li|PO)3|UL%3xN|WL$TvP?d6g{*d4IY z*U9UOWCpRfh6f|Nz-Rslsj7n!XB1F>9i{G4fdE(SUy!FRQ=|%aa6|$TnoKoRfNln= z5OS+s!51x1osSX_+8enu+XX%nm}`wCIN}T+Y!RY9&ihXw1B;DE1RmMPf{qKvPcexM zx7S7OX=|xG9-|=78&^nF1h=Y)%KV{{hxeGako_kECL(-ol!CdTR)NO+5PN`E25xzM z)CA1k3g)))lgCa-3nx?5QgPBY_t@M2bd$Bdgv#=(D^u8eoR07hERprpT~$xyh>38* zkvR|ncWP|GkGxE1dJ4<0BTyw9VQA+a+HfRZC~T4izwaRcciL@Z#|feA~^m%kop$gZxHz~H!kKuvbYLz60? zEUGsIbyNvmK80=7C_qzT80s0cz-RP9FF<18(sCg%9Tx~o0+0e%F<^q)KVJ4^AaM0j zCO4Us_VGJZ8027&c0ytOGWaYFcow+{%*6a%pe5Z7ju0XS#2pwyLHz6kyD=S8{WItg z01tSr1WMenV5NhHt0zH~@;NOe1%HW4;JSz?0ss|4QE&_3cVIy(C;Lad5nBhD64uHQ8&uxlPrykCy^8DMrhLSU`-5W!!d2TfoLU+5?Aa*M}G zDZULlT+*&85L``kUAy_jmf}dJNcB%}b~G0L0s*xpt{|QGTYMLc(0}oONLD&v$o`cA zkw$IIkvuZjG~jhihc76Q3YPo+b^od)5ilJ*C`%3@-~r*0X!_tdXb8MKfho*W$TC;( zSL`bjH&^zqe|W%aMbN_X>$Mb!PchjEWmN*SXYq3Z>6YMsctAiU!q;!6_8`KsK|=@9 ztODIN4~UMlgAjX0;trX7jEcagkO8#m5}*)e+5v3}a|hLVEC+MPkr^W(L?e&opd$dA z<--$j_d@|55R|)gyGo`qbWgXPFgID3f$traCw3eU-~oSPD0oN*?>b0^s6>vk2r6KN zD{w-Pst_poDDeNVA{imgBvXwi$;CnNhQIfZ z+p;-zw6vc#u^!M}swE`eJ!mpN$Fu)y1jn%ddOxE9XPQ zmgmF+=QdT47xGgq4qHnf6G&&F+mdYa?|cj|^}fM$iHDL`E?fc&uZ6(hTdSmox+`}y z?#pc7_;zbxp?-$z*P01li)U5l;Liw=?J5bJdvCh2&0Dv|l!fgFI7Jx@B+T-@&mWwx z{Oqr3OG#`M)wFqx$H92xQ-*(5+C;169V!eswWntgsx%pLD}-D9qoC+?Ys zzJelSzl(F$=W}k-QxzGwk5g*+>Zc10_IW$mTUf=lig)y4e z!DCDd_rg&Gc1B+yUzUKw?(1*pbGg(Xbou+h-EJ!&?e)U!!4!XIIyg8HU39Q~r2A>kR`Iv& zKm*0pww2U3UDZ>IZCK{lw=-l)r^UBc%xfQn@j11|Z0g!#!j_X{R-Bb>PKWiT!~EyuEmr-s(ETlk#!Q!_?E%MQt!XB!c)gb3g_qwao-Twa zlFMF7FR}c-p`~#amUN&f-Ao^lrb#_kV_obfX`X4`Z$Gy`5RXkYXi)z+iO4YSK)R`I>Inp>eM^0p#^?4pGjge@kE#uKG z`8!UDdD!<%E7spAU@UU>X_7V>*^T<3MrhqMbVxr@+QAhkGH3PbW&UvY9KD1brhlUQ zE7YPIR{=HaQK?L+TlzDtQ%jQX@1K|ch#Yq`@b@Kc^crTM#L<}BNSvgYE%8qAmS{oqG`4JDFwzlh8gcfy>p%|K9^NgSPHSZ*%AbKrR>7AE`+$KbkVvgK}N%OQ+ z9mC;L;^(JF95s$Jeiwrd_sjGpEw1QpNST!L2lTFuHf{$v-1~A~WUZ}qn}fF~=hEjC zVf0@arPwBMNg*!yPi$2eu$e6e`+uZPTaPPe|<#B|Y?u~&Xxv3ka+L0#DW;^dAr*3@58ue~?_iQ9$W++cM z{%t~`OR2g-ymKEb@@KEUHK`u$8nQ}xz5=reou|Q!a{x3`+Kz6`su`&_V4|z^m}cD z3sb(P{XcEw=r?)oOy^IQGJx~9l^u(N``f=g5JlS`8A`>c}I7|*P%ReR~_xa<_Hr>!Vjde9%i3)UG`Ys3-0yx z%FVs*ko*3+BSqS3>>}Q6cYa|Xo2#Ol+l6227f-Dkv`)Rho1+UA_-4+stidJ!Je`lfFnuD@l|r*(_A`5h z_GkNzpT9FW^PG14y%oQSS6p2^@yaw2J2?N9*736t|`C&De>6;7O?KRqR!n%;aFqAv8;N}f&(5;}Bft^0QGL(hF~&8@0}yDwVn zZwY*mGCA@~51TV2J(?U8`8#& ziO}!8$7=r3D@y-^mn(Y*B~r8LmuE^FT6fehXU%eUkuCNQZdHn{bw2j=>~Uls_ojcc zl}y#s3`B>ElfJhatLaI%j|@%9+m0VicFJ2w%9(Mx{l<@3%#>G* zsPa?Kozv1>y~&NNp-V=tAQjgKgR;vp(^560dt}qT<1MKkTE{k@l($B59TP{Z-*v?sJnq&U7_8ubfE+^Y1@v&(BcM1f1DJDa-ENNgG9&n+K$Y#k+q^ruJK9ea7ka%(?kdqYq+DMAd$9 z*XVc)Z{1tCD0=dADDccoGP%ZcYS8CF1;ZYa38n%m8ht{CvBmeMjh#b8-0(pSs;Jm z|M9|)tL{L&Md2#n6PagmpKJ9NKaY`s&PDF0#i+CsU(VG0r^TuHwFxSt{%x#Je|Q(C z%}D2Jx^At^nVoS?JdTf4ko)#Pqh&w@c0pf2rtGP=((yx9_v!kIJ*o5UDkK3)?S2Yk5^IS?VeBJrPk#3ubaOOi1cNI zSLzFKiF`xxt_=&h2eqd0na=g=@dx&}n6D}u-k<)4m4+JnHXFVDVYN2{cj{+e-qq$K zq7PzSXzv`>W455&AclwH9@EB~zb46MFcpCZQvUs5c;}m?#}k=!)3`%|XPza$IvpfQ zc9NzQrRMzJzkab?Xm8rwP{8>1tsQ3H+1^u;BfKgv%HMjQJ8h!1YxkL7bs_iLp;WAq zrO1Jni~1}44?SLGNncw&Up)2*D0{t`Uf+<|b)wV|<;cbC2?P`+$i@moD ziz50Tz9n1%S6HPMsU@UiVd;>Nlx`4-rIAv)Vd+jO>5>MeyE{ch8l)Sf8=mp^|KIQK z7x(qN{=L{eb7syp@y(ezXFkV?E{7;R2fMDY&~dK!r*qA6ermfyqM#{Ws@_ATbiP_- zxy45lD`!*L_pD|%mu7B*;stfY;Oy zncR+^GsnlIMVa$aoeJ?qKKz@HeN)D2Ni$XS$n_0g+S$zu6V^@Jw~>8pi%?q>m=B)$ z(8ABTzNzlpt%VaZy7gpFE1T4+Ztcg=PWG?E^=EdJ(?nK?iwI2)Yr(t2&W)uFI-eua zG3y0dLT;g~%pi=4ug$1St5vzm4x*KcbhiEsDPf-K^3r0);mY=yXT1ib1rI-sPT!4I zQz#rzp60y$$<($m@7j>eAhqz>c9A>as<2rj)dhTHtG6?w_e?S{)zp=Ha^i3A(xBYQ zbDzws2`1^K5m}0nhF7mUdku7s49rbEL8GJU^cm0r{ zIhO9sT(%P3^vP#F@@Ca`p3-IY+<}*Eh*9bH494}_4-1o8PBDmz%*-^hwyUfC#mB$5 zCwubeV{&yon{+A@XM>WI_Rn%|8vOoBSY2EV+M$z-y|X#pms<6ix@%xzWnfIa5F$yy z)5_r7C5y@A^zj~WnO)QJWneeGSJ~I3Xw|n9M`}xlkZ4fcut@`mPfqi-H*$VPq!fzh zFKC3C(j$MbYBU|qxrzjRv1&BiPid=@HpmRTfjh6ApO^A(A}Q@QGTmQq_F1l7ov-|! z%r3H57bb4jDykzjBOm>_0Qti1j<*p}w=d9)?;z9Jm)SJZZ9R1(@=o`RBG)ZdIPnfHOFxtJ)}6481! zAz7tQN=^!z*RSkf&;9+>Cl|-Hdu08I=Lak=xz=VH9~jV3Hecir_O)2MXr{}Q>U$m(*q0u;58C*)y&ok?-5#_-wQXuSP~1P} zT=g!UsazDkpR!)jTyLGd3o*<{)RQ?jW7te?a;hZVxt(}p5Przl6!=S7G)U>>>r<^e zCiRE<_jb079!rD83qdY(q8S%F_YL3M{($bDi({1JH@&CcI$6eh5wj&*`Q_}uaD&QY z=WPb@`y(DU7mDDcoJ;z>F_ZA5Uj_O>a_=G+$-Y!m+>Mz1YDn_5xs$DT*}Rv=<*|RG z-pN3@6`#6PU(VNc%&Tr%%aIsqV(z)qV&f}lU2$~t=aMRP0*W`^nI-7mY$}K=l6vNA z8gmo#wuEtm=N6$fwlFpx**7ty;1TTx44%0AIpdy}orsxNpN%{9+V&?_S1mfnd0_4q1 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 z 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�#`ms|a`}3mE3#SXo(Rkw#5rS$VSJB0PX=&n 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 literal 0 HcmV?d00001 diff --git a/doc/generated/main.tex b/doc/generated/main.tex new file mode 100644 index 0000000..f8f54d2 --- /dev/null +++ b/doc/generated/main.tex @@ -0,0 +1,593 @@ +% Generated from json/card_source.json by tools/render_card.py. +% Do not edit manually; update the JSON and regenerate. + +\documentclass[12pt,a4paper]{article} + +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage[utf8]{inputenc} +\usepackage[polish]{babel} +\usepackage{csquotes} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{xcolor} +\usepackage[a4paper,left=2.15cm,right=2.15cm,top=0.5cm,bottom=0.5cm,headheight=24mm,headsep=3mm,includehead]{geometry} +\usepackage{eso-pic} +\usepackage{marginnote} +\usepackage{array} +\usepackage{tabularx} +\usepackage{graphicx} +\usepackage{pdflscape} +\usepackage{float} +\usepackage{silence} +\WarningFilter{soulutf8}{This package is obsolete} +\usepackage{pdfcomment} +\usepackage{enumitem} +\usepackage{needspace} +\usepackage{fancyhdr} +\usepackage{lastpage} +\usepackage{microtype} +\usepackage[most]{tcolorbox} +\usepackage{qrcode} +\IfFileExists{references.bib}{% + \usepackage[backend=biber,style=numeric,sorting=none]{biblatex}% + \addbibresource{references.bib}% +}{} + +\hypersetup{hidelinks} + +\IfFileExists{build-meta.tex}{% + \input{build-meta.tex}% +}{% + \newcommand{\BuildCommit}{lokalna}% +} + +\newcommand{\DocumentAuthor}{M. Pabiszczak} +\newcommand{\DocumentYear}{2026} +\newcommand{\CardSeries}{c} +\newcommand{\CardNumber}{09} +\newcommand{\CardCount}{13} +\newcommand{\CardSlug}{smalloc-sbrk-libc} +\newcommand{\CardVersion}{v00.01} +\newcommand{\DocumentUUID}{47826ae5-6370-5ac2-bd91-9acb89116d40} + +\newcommand{\EmptyCheck}{\(\square\)} +\newcommand{\EscAnswerLines}[1][3]{\par\noindent\dotfill\par\noindent\dotfill\par\noindent\dotfill} +\newcommand{\EscWriteRow}[1][2.8em]{\rule{0pt}{#1}} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0.45em} +\setlength{\headheight}{24mm} +\setlength{\headsep}{3mm} +\setlength{\footskip}{8mm} +\setlength{\marginparwidth}{1.5cm} +\setlength{\marginparsep}{0.25cm} +\renewcommand{\arraystretch}{1.22} +% Margin separator lines disabled for layout trial. + +\newcommand{\ESCPageResourceHeader}{% + \begingroup% + \setlength{\parskip}{0pt}% + \setlength{\fboxsep}{0pt}% + \setlength{\fboxrule}{0.35pt}% + \setlength{\arrayrulewidth}{0.35pt}% + \noindent\fbox{% + \begin{minipage}[c][23.5mm][c]{\dimexpr\textwidth-2\fboxrule\relax}% + \begin{minipage}[c][23mm][c]{24mm}\centering% + \href{https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-smalloc-sbrk-libc}{\qrcode[level=L,height=22mm]{https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-smalloc-sbrk-libc}}% + \end{minipage}% + \vrule width0.35pt% + \begin{minipage}[c][23mm][c]{\dimexpr\linewidth-48mm-0.7pt\relax}% + \setlength{\tabcolsep}{0pt}% + \renewcommand{\arraystretch}{0}% + \begin{tabularx}{\linewidth}{@{}p{\dimexpr0.50000000\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.15126050\linewidth-\arrayrulewidth\relax}|X@{}}% + \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries TITLE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{7.7}{7.9}\selectfont\ttfamily\bfseries smalloc, sbrk i minimalne libc}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries VER.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.6}{6.8}\selectfont\ttfamily\bfseries v00.01}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries DATETIME}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries 2026-07-20T00:00:00+02:00}\hspace{0.45mm}}\par} \\% + \end{tabularx}% + \par\nointerlineskip% + \hrule height0.35pt% + \nointerlineskip% + \begin{tabularx}{\linewidth}{@{}p{\dimexpr0.50000000\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.25210084\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.14285714\linewidth-\arrayrulewidth\relax}|X@{}}% + \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries PROJECT}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{7.7}{7.9}\selectfont\ttfamily\bfseries Freestanding C na RV32I}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries SERIES}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries C · Freestanding RV32I and K\&R}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries CARD}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries 09/13}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries SHEET}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries \thepage/\pageref{LastPage}}\hspace{0.45mm}}\par} \\% + \end{tabularx}% + \par\nointerlineskip% + \hrule height0.35pt% + \nointerlineskip% + \begin{tabularx}{\linewidth}{@{}p{\dimexpr0.05882353\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.05042017\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.14705882\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.09243697\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.07563025\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.07563025\linewidth-\arrayrulewidth\relax}|X@{}}% + \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries SUBJ.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries Inf.}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries PROG.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries CORE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries SCOPE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries LEVEL}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries POS.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hbox to\linewidth{\hspace{0.35mm}{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries GITEA UUID}\hfill{\fontsize{3.4}{3.75}\selectfont\ttfamily 47826ae5-6370-5ac2-bd91-9acb89116d40}\hspace{0.35mm}}\par\nointerlineskip\hbox to\linewidth{\hspace{0.35mm}{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries CARD UUID} {\fontsize{3.4}{3.75}\selectfont\ttfamily 8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0}\hfill{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries AUTHOR M. Pabiszczak}\hspace{0.35mm}}} \\% + \end{tabularx}% + \par\nointerlineskip% + \hrule height0.35pt% + \nointerlineskip% + \begin{tabularx}{\linewidth}{@{}X@{}}% + \parbox[c][3.46276mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{4.5}{4.85}\selectfont\ttfamily\bfseries GITEA} {\fontsize{4.5}{4.85}\selectfont\ttfamily\href{https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-smalloc-sbrk-libc}{\nolinkurl{https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-smalloc-sbrk-libc}}}} \\% + \end{tabularx}% + \par\nointerlineskip% + \hrule height0.35pt% + \nointerlineskip% + \begin{tabularx}{\linewidth}{@{}X@{}}% + \parbox[c][3.46276mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{4.5}{4.85}\selectfont\ttfamily\bfseries HTML} {\fontsize{4.5}{4.85}\selectfont\ttfamily\href{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0}{\nolinkurl{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0}}}} \\% + \end{tabularx}% + \end{minipage}% + \vrule width0.35pt% + \begin{minipage}[c][23mm][c]{24mm}\centering% + \href{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0}{\qrcode[level=L,height=22mm]{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0}}% + \end{minipage}% + \end{minipage}% + }% + \endgroup% +} + +\pagestyle{fancy} +\fancyhf{} +\fancyhead[C]{\ESCPageResourceHeader} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} + +\newcommand{\ESCMarginTag}[4]{% + \hspace*{#1}\textcolor{#2}{#3~#4}% +} +\newcommand{\ESCSectionBlockStart}{% + \Needspace{8\baselineskip}% + \par\vspace{0.35em}% + \noindent\textcolor{black!28}{\rule{\textwidth}{0.35pt}}% + \par\vspace{0.15em}% +} +\newcommand{\ESCSectionBlockEnd}{% + \par\vspace{0.45em}% +} +\newcommand{\ESCTinyStepSeparator}{% + \par\vspace{0.10em}% + \noindent{\color{black!18}\leaders\hbox{\rule{0.60em}{0.22pt}\hspace{0.38em}}\hfill\kern0pt}% + \par\vspace{0.10em}% +} +\newtcolorbox{ESCTaskFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black,boxsep=0pt,left=1.4mm,right=1.4mm,top=0.8mm,bottom=0.8mm,colbacktitle=black!7,coltitle=black,title={\ttfamily\bfseries TASK\quad #1}} +\newtcolorbox{ESCBlockFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black!55,boxsep=0pt,left=1.0mm,right=1.0mm,top=0.6mm,bottom=0.6mm,colbacktitle=black!4,coltitle=black,title={\ttfamily\bfseries BLOCK\quad #1}} +\newtcolorbox{ESCStepFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black!28,boxsep=0pt,left=0.8mm,right=0.8mm,top=0.45mm,bottom=0.45mm,colbacktitle=black!2,coltitle=black,title={\ttfamily STEP\quad #1}} +\newtcolorbox{ESCConclusionFrame}{enhanced,breakable,arc=0pt,boxrule=0.45pt,colback=blue!2,colframe=blue!45!black,boxsep=0pt,left=1.2mm,right=1.2mm,top=0.7mm,bottom=0.7mm,colbacktitle=blue!7,coltitle=black,title={\ttfamily\bfseries WNIOSEK}} + +\newcommand{\ESCLearningTreeWidget}{% + \reversemarginpar + \marginnote[% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \begin{minipage}[t]{\marginparwidth}% + \raggedright + {\bfseries\textcolor{black!65}{TECH}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \hspace*{0.28em}\textcolor{orange!85!black}{EK~LOCAL~C}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.01}{Uczeń porównuje mapę linkera, kontrolowany błąd symbolu, globalne checkpointy, wynik hosta i\textCR kod wyjścia Hazard3, a wnioski ogranicza do naprawdę zmierzonych własności.}}\par% + \hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~C}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.01}{Kod, przewidywanie i pomiar tworzą jeden dowód.}}\par% + \end{minipage}% + }% + \end{minipage}% + ]{} + \normalmarginpar + + \marginnote{% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \hspace*{0.06cm}% + \begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}% + \raggedright + {\bfseries\textcolor{black!65}{OG}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \hspace*{0.28em}\textcolor{green!50!black}{EN~LOCAL~EN~C}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.01}{Uczeń wyprowadza osobno: wybór członu archiwum, wiązanie symbolu dostawcy pamięci oraz\textCR inwarianty polityki alokacji, zamiast nazywać wszystkie trzy mechanizmy stertą.}}\par% + \hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~KW~C}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.01}{Kod, przewidywanie i pomiar tworzą jeden dowód.}}\par% + \end{minipage}% + }% + \end{minipage}% + } + +} + +\begin{document} +\sloppy + +\vspace{1.0em} +\noindent{\Large\bfseries Cel karty}\par +\vspace{0.35em} +Uczeń rozdziela wybór funkcji z archiwum libc, kontrakt dostawcy pamięci sbrk i politykę alokatora. Najpierw dowodzi, że strlen nie potrzebuje sterty, potem kontrolowanie zrywa zależność malloc do sbrk, buduje ograniczony model break i wyrównany smalloc, a na końcu traktuje prawdziwe malloc/free picolibc jako czarną skrzynkę sprawdzaną przez kontrakt. + +\vspace{0.8em} +\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}} +\vspace{0.7em} +\noindent{\Large\bfseries Zakres i zachowane przykłady}\par +\vspace{0.35em} +Pięć zachowanych przykładów działa na hoście i RV32I tam, gdzie istnieje program uruchamialny. Task02 jest zamierzonym expected-fail linkera i nie ma obrazu runtime. W aktualnym GCC 15.2 biblioteka to picolibc: jej malloc odwołuje się do sbrk, podczas gdy vendorowy init.S Hazard3 definiuje inny symbol \_sbrk. Własny linker ogranicza stertę symbolami \_\_heap\_start i \_\_heap\_end oraz rezerwuje 64 KiB stosu.\par\textbf{Układ każdego przykładu:} pełny profil A1--A8; widok N/D ma jawny powód, a diagram nie jest wymagany, gdy tekst daje lepszy dowód. +\vspace{0.55em} +\small\begin{tabularx}{\textwidth}{@{}>{\ttfamily\raggedright\arraybackslash}p{1.10cm}>{\ttfamily\raggedright\arraybackslash}p{1.45cm}X>{\raggedright\arraybackslash}p{2.50cm}@{}} +\textbf{K\&R} & \textbf{Numer tasku} & \textbf{Najważniejsza idea} & \textbf{Priorytet} \\ \hline +\hline +\textbf{\texttt{7.8}} & \textbf{\texttt{Task01}} & \textbf{libc.a: wybór strlen.c.o} & \textbf{kluczowe} \\ \hline +\hline +\textbf{\texttt{5.4 + ABI}} & \textbf{\texttt{Task02}} & \textbf{expected-fail: malloc -> sbrk} & \textbf{kluczowe} \\ \hline +\hline +\textbf{\texttt{5.4}} & \textbf{\texttt{Task03}} & \textbf{ograniczony break i atomowy błąd} & \textbf{kluczowe} \\ \hline +\hline +\textbf{\texttt{5.4}} & \textbf{\texttt{Task04}} & \textbf{nagłówek, alignment i reset areny} & \textbf{kluczowe} \\ \hline +\hline +\textbf{\texttt{7.8 + ABI}} & \textbf{\texttt{Task05}} & \textbf{malloc/free picolibc jako black box} & \textbf{kluczowe} \\ \hline +\end{tabularx} +\normalsize + + +\vspace{0.8em} +\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}} + +\clearpage + +\ESCSectionBlockStart +\section{1 — Funkcja z libc nie oznacza automatycznie sterty} +\reversemarginpar +\marginnote[% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \begin{minipage}[t]{\marginparwidth}% + \raggedright + {\bfseries\textcolor{black!65}{TECH}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +]{}[-3.1em] +\normalmarginpar + +\marginnote{% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \hspace*{0.06cm}% + \begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}% + \raggedright + {\bfseries\textcolor{black!65}{OG}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +}[-3.1em] + + +Archiwum \texttt{libc.a} nie jest włączane do programu w całości. Linker pobiera człon, który rozwiązuje potrzebny symbol, a następne człony tylko wtedy, gdy pojawią się kolejne nierozwiązane odwołania. Dlatego bezpośrednie wywołanie \texttt{strlen} z opcją \texttt{-fno-builtin} wybiera \texttt{strlen.c.o}, lecz nie wybiera \texttt{libc\_stdlib\_malloc.c.o} ani \texttt{libc\_misc\_picosbrk.c.o}. Dowodem jest mapa linkera, a nie samo dołączenie nagłówka \texttt{string.h}. + +Task01 rozstrzyga wyłącznie tę zależność. Nie dowodzi, że każda funkcja tekstowa jest bezkosztowa ani że całe libc nie używa pamięci dynamicznej. +\ESCSectionBlockEnd + +\ESCSectionBlockStart +\section{2 — malloc potrzebuje sbrk, lecz \_sbrk to inna nazwa} +\reversemarginpar +\marginnote[% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \begin{minipage}[t]{\marginparwidth}% + \raggedright + {\bfseries\textcolor{black!65}{TECH}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +]{}[-3.1em] +\normalmarginpar + +\marginnote{% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \hspace*{0.06cm}% + \begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}% + \raggedright + {\bfseries\textcolor{black!65}{OG}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +}[-3.1em] + + +W badanym GCC 15.2 używane jest \textbf{picolibc}, nie newlib. Człon \texttt{libc\_stdlib\_malloc.c.o} ma niezdefiniowane odwołanie do \texttt{sbrk}. Picolibc może dostarczyć je z \texttt{libc\_misc\_picosbrk.c.o}; ten kod opiera granice na symbolach linkera \texttt{\_\_heap\_start} i \texttt{\_\_heap\_end}. Z kolei \texttt{vendor/Hazard3/.../init.S} definiuje \texttt{\_sbrk} z jednym podkreśleniem. Dla linkera są to dwa różne symbole, więc mogą współistnieć w Task05. + +Task02 używa \texttt{--wrap=sbrk}: każde odwołanie do \texttt{sbrk} zostaje skierowane do celowo brakującego \texttt{\_\_wrap\_sbrk}. Oczekiwany błąd jest kontrolowanym testem krawędzi \texttt{malloc -> sbrk}, a nie awarią całego projektu. +\ESCSectionBlockEnd + +\ESCSectionBlockStart +\section{3 — Od alloc z K\&R 5.4 do bounded sbrk i smalloc} +\reversemarginpar +\marginnote[% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \begin{minipage}[t]{\marginparwidth}% + \raggedright + {\bfseries\textcolor{black!65}{TECH}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +]{}[-3.1em] +\normalmarginpar + +\marginnote{% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \hspace*{0.06cm}% + \begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}% + \raggedright + {\bfseries\textcolor{black!65}{OG}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +}[-3.1em] + + +Liniowy \texttt{alloc} z K\&R 5.4 przesuwa wskaźnik w stałej tablicy. Jest prosty, ale nie odzyskuje dowolnego bloku, nie wybiera najlepszego dopasowania, nie dzieli i nie scala wolnych obszarów. \texttt{afree} może cofnąć wskaźnik jedynie do adresu należącego do areny, więc bez dyscypliny stosowej łatwo unieważnić późniejsze przydziały. Historyczna tablica bajtów nie jest też ogólną deklaracją wyrównania dla każdego typu. + +Task03 zachowuje istotę modelu, lecz jawnie wymusza \texttt{heap\_start <= brk <= heap\_end}; odrzucona operacja nie zmienia break. Task04 dodaje 16-bajtowe wyrównanie i 16-bajtowy nagłówek bezpośrednio przed payloadem. Nadal jest to alokator append-only: nie ma \texttt{sfree}, listy wolnych bloków, split ani coalescing. Jedyną operacją odzyskania jest reset całej areny, który unieważnia wszystkie wcześniejsze wskaźniki. +\ESCSectionBlockEnd + +\ESCSectionBlockStart +\section{4 — Prawdziwe malloc/free jako czarna skrzynka} +\reversemarginpar +\marginnote[% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \begin{minipage}[t]{\marginparwidth}% + \raggedright + {\bfseries\textcolor{black!65}{TECH}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +]{}[-3.1em] +\normalmarginpar + +\marginnote{% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \hspace*{0.06cm}% + \begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}% + \raggedright + {\bfseries\textcolor{black!65}{OG}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +}[-3.1em] + + +Task05 nie zakłada, że picolibc ma taki sam nagłówek lub strategię jak \texttt{c09\_smalloc}. Program sprawdza tylko publiczny kontrakt potrzebny klientowi: dwa udane przydziały dają używalne, rozłączne obszary; zapisane bajty można odczytać; adresy spełniają mierzone wyrównanie; oba bloki są przekazane do \texttt{free}. Nie odczytuje pamięci po \texttt{free} i nie wymaga ponownego użycia tego samego adresu. + +Minimalny startup ustawia \texttt{gp}, pojedynczą bazę TLS \texttt{tp}, zeruje \texttt{.tbss} i \texttt{.bss}, a następnie wywołuje \texttt{main}. Skrypt linkera pozostawia \texttt{\_\_heap\_end} 64 KiB przed \texttt{\_\_stack\_top} i ma \texttt{ASSERT} zatrzymujący obraz, gdy sekcje zajmą zarezerwowany obszar. +\ESCSectionBlockEnd + +\clearpage +\ESCSectionBlockStart +\section{Zadania — zachowane przykłady w profilu A1–A8} +\reversemarginpar +\marginnote[% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \begin{minipage}[t]{\marginparwidth}% + \raggedright + {\bfseries\textcolor{black!65}{TECH}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +]{}[-3.1em] +\normalmarginpar + +\marginnote{% + \begin{minipage}{\marginparwidth}% + \raggedright + {\fontsize{3.55}{3.95}\selectfont\ttfamily + \hspace*{0.06cm}% + \begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}% + \raggedright + {\bfseries\textcolor{black!65}{OG}\par}% + \vspace{0.08em}% + \hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par% + \end{minipage}% + }% + \end{minipage}% +}[-3.1em] + + +\begin{ESCTaskFrame}{TASK01 · strlen z libc bez sterty} +{\scriptsize\ttfamily 839b8401-9f15-5edc-a214-176c06ba5cb1}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — klient, archiwum i brak dostawcy pamięci} +\textbf{Zachowany przykład:} \texttt{src/tasks/task01\_libc\_without\_heap.c}.\par Klient wywołuje publiczne \texttt{strlen}. Granicą systemu jest linker wybierający potrzebny człon \texttt{libc.a}; Task01 nie deklaruje ani nie wywołuje \texttt{malloc}, \texttt{free} lub \texttt{sbrk}. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — jedna krawędź symboliczna} +Przy \texttt{-fno-builtin} obiekt tasku zachowuje niezdefiniowany symbol \texttt{strlen}. Linker rozwiązuje go przez \texttt{strlen.c.o}. Ten człon nie tworzy następnej krawędzi do alokatora, dlatego graf zależności kończy się bez warstwy sterty. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · N/D} +\textbf{N/D.} strlen i checkpoint są wywołaniami bezpośrednimi; program nie ma callbacku, ISR, wskaźnika funkcji ani dynamicznego wyboru implementacji. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — dwa niezależne warunki sukcesu} +Warunek wykonania to długość 16 dla napisu \texttt{picolibc-no-heap}. Warunek obrazu to obecność wyłącznie potrzebnego członu tekstowego i brak trzech nazw członów związanych z przydziałem. Sam kod wyjścia nie zastępuje kontroli mapy. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — kompilacja, selekcja archiwum, wywołanie} +Kompilator pozostawia call do \texttt{strlen}; linker przegląda archiwum i pobiera \texttt{strlen.c.o}; startup uruchamia \texttt{main}; funkcja oblicza 16; checkpoint publikuje wynik; \texttt{main} zwraca 0. Każdy etap ma inny artefakt dowodowy. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · N/D} +\textbf{N/D.} Program wykonuje jednorazowy, czysty pomiar długości i nie ma domenowego obiektu przechodzącego przez istotne stany ani zasobu o cyklu życia. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — global i mapa odpowiadają na inne pytania} +W \texttt{task01\_debug\_checkpoint} global \texttt{g\_task01\_length} ma wartość 16, a \texttt{g\_task01\_pass} wartość 1. Osobno \texttt{prog.map} wskazuje \texttt{libc.a(strlen.c.o)}; test mapy odrzuca każdą nazwę członu heap. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — płać za osiągalne symbole, nie za nagłówek} +Dla archiwum statycznego właściwym wzorcem audytu jest śledzenie nierozwiązanych symboli i pobranych członów. \texttt{\#include } dostarcza deklarację; nie jest poleceniem dołączenia całej implementacji libc. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Przed linkowaniem przewidź, które człony \texttt{libc.a} są potrzebne przez bezpośrednie \texttt{strlen}. Uruchom program, a potem w mapie udowodnij obecność \texttt{strlen.c.o} i nieobecność członów malloc, free oraz picosbrk. +\par\textbf{Evidence:} Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę. +\par\textbf{Acceptance:} Host i Hazard3: length=16, pass=1, kod 0. Mapa RV32I zawiera libc.a(strlen.c.o), ale nie zawiera libc\_stdlib\_malloc.c.o, libc\_stdlib\_free.c.o ani libc\_misc\_picosbrk.c.o. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK01 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. Wynik programu hostowego}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. Wynik RV32I i kod wyjścia}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\par\noindent\dotfill\par\noindent\dotfill +\end{ESCBlockFrame} +\end{ESCTaskFrame} +\clearpage +\begin{ESCTaskFrame}{TASK02 · Kontrolowany brak dostawcy sbrk} +{\scriptsize\ttfamily 9c55597f-3145-5744-b13e-f1c0ee83abc8}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — kontrolowane przecięcie granicy platformy} +\textbf{Zachowany przykład:} \texttt{src/tasks/task02\_malloc\_requires\_sbrk.c}.\par Kod klienta żąda 16 B przez \texttt{malloc}. Opcja linkera przechwytuje wyłącznie symbol dostawcy pamięci, dzięki czemu testuje granicę libc--platforma bez usuwania lub modyfikowania systemowego archiwum. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — caller, człon malloc i brakujący wrapper} +Obiekt tasku wnosi odwołanie do \texttt{malloc}; linker pobiera \texttt{libc\_stdlib\_malloc.c.o}. Jego odwołania do \texttt{sbrk} są przez \texttt{--wrap} przepisywane na \texttt{\_\_wrap\_sbrk}. Żaden obiekt celowo nie definiuje tej ostatniej nazwy. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · N/D} +\textbf{N/D.} Wywołanie malloc jest bezpośrednie, a --wrap jest transformacją nazw podczas linkowania, nie mechanizmem callbacku, ISR ani dynamicznego dispatchu w programie. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — porażka ma precyzyjną sygnaturę} +Sukces testu oznacza jednocześnie: obiekt C powstał, link zwrócił status różny od zera, diagnostyka zawiera \texttt{\_\_wrap\_sbrk} oraz nazwę członu malloc, a końcowy ELF nie istnieje. Inny błąd linkera nie spełnia kryterium. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — expected-fail jako kontrolowany przebieg} +Skrypt usuwa stary artefakt, kompiluje task, uruchamia link w trybie dopuszczającym błąd, zapisuje status i log, po czym przywraca rygor \texttt{set -e}. Dopiero cztery asercje zamieniają oczekiwaną porażkę programu w sukces testu. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · N/D} +\textbf{N/D.} Linkowanie kończy się przed utworzeniem obrazu wykonywalnego, więc nie istnieje runtime, breakpoint ani obiekt domenowy zmieniający stan w czasie wykonania. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — dowodem jest diagnostyka przed runtime} +Odczytaj \texttt{expected-link-failure.log}: cztery relokacje z \texttt{libc\_stdlib\_malloc.c.o} wskazują brak \texttt{\_\_wrap\_sbrk}. Następnie sprawdź nieobecność \texttt{must-not-exist.elf}; nie wolno wymyślać wartości runtime dla nieistniejącego programu. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — test negatywny musi odrzucać zły powód} +Wzorzec expected-fail wymaga konkretnej sygnatury błędu i braku produktu końcowego. Sam warunek „polecenie nie przeszło” byłby za słaby, bo zaliczyłby literówkę, brak kompilatora lub błędny skrypt linkera. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Narysuj łańcuch \texttt{main -> malloc -> sbrk}. Następnie uruchom \texttt{make expected-fail} i wyjaśnij, dlaczego \texttt{--wrap=sbrk} zmienia ostatnią krawędź na \texttt{\_\_wrap\_sbrk}, dlaczego brak ELF jest wynikiem poprawnym oraz czego ten test nie mówi o runtime. +\par\textbf{Evidence:} Przewidywana brakująca nazwa, status kompilacji obiektu, niezerowy status linkera, cytat dwóch sygnatur z logu oraz sprawdzenie, że końcowy ELF nie istnieje. +\par\textbf{Acceptance:} Kompilacja task.o kończy się sukcesem. Link ma niezerowy status, log wymienia libc\_stdlib\_malloc.c.o i undefined reference to \_\_wrap\_sbrk, a must-not-exist.elf nie istnieje. Nie wykonuje się testu host ani Hazard3. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK02 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. Wynik kompilacji task.o}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. Status i sygnatury błędu linkera}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\par\noindent\dotfill\par\noindent\dotfill +\end{ESCBlockFrame} +\end{ESCTaskFrame} +\clearpage +\begin{ESCTaskFrame}{TASK03 · Bounded sbrk i atomowy błąd} +{\scriptsize\ttfamily 5a69ff6d-bda9-5b20-a18c-a8da2f88c64a}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — model oddzielony od libc} +\textbf{Zachowane materiały:} \texttt{src/tasks/task03\_bounded\_sbrk.c}, \texttt{src/runtime/c09\_bounded\_sbrk.c}, \texttt{src/runtime/c09\_bounded\_sbrk.h}, \texttt{link/hazard3\_c09.ld}.\par Task03 eksportuje nazwę \texttt{c09\_sbrk}, aby nie przejąć symbolu \texttt{sbrk} picolibc. Na hoście granice obejmują statyczną arenę 512 B; na RV32I pochodzą z linkera. Ten sam algorytm widzi tylko trzy adresy. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — start, break i end} +Stan ma jedną zmienną \texttt{g\_c09\_break} oraz niezmienne granice \texttt{start} i \texttt{end}. Każdy poprawny stan spełnia \texttt{start <= break <= end}; wolny obszar ma rozmiar \texttt{end-break}, a zajęty prefiks \texttt{break-start}. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · N/D} +\textbf{N/D.} Wszystkie operacje c09\_sbrk i gettery są wywoływane bezpośrednio; nie ma callbacku, ISR, tablicy funkcji ani wyboru implementacji w runtime. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — tabela pięciu przejść} +Od offsetu 0 operacje dają kolejno: \texttt{+16 -> 16}, \texttt{+24 -> 40}, zbyt duży wzrost \texttt{-> 40}, \texttt{-8 -> 32}, zejście o 33 \texttt{-> 32}. Udany call zwraca stary break; porażka zwraca wszystkie bity ustawione. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — najpierw zakres, potem commit} +Dla wzrostu kod porównuje wielkość z \texttt{end-current}; dla spadku oblicza bezpiecznie moduł także dla \texttt{PTRDIFF\_MIN} i porównuje go z \texttt{current-start}. Dopiero po zaliczeniu warunku zapisuje \texttt{g\_c09\_break=next}. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · AKTYWNE — VALID pozostaje VALID także po odrzuceniu} +Break przechodzi przez offsety \texttt{0 -> 16 -> 40 -> 40 -> 32 -> 32}. Obie porażki są samopętlą stanu: zmienia się wynik operacji, ale nie break. Nie ma przejścia do wartości poniżej start ani powyżej end. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — offsety zamiast niestabilnych adresów} +Checkpoint publikuje cztery offsety \texttt{40,40,32,32} oraz flagi \texttt{preserved=1} i \texttt{bounds=1}. Adresy bezwzględne hosta mogą się zmieniać przez ASLR, dlatego dowód porównuje różnice względem startu. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — validate then commit} +Wzorzec silnej gwarancji błędu brzmi: najpierw policz bez przepełnienia, następnie sprawdź granice, a dopiero potem zmień jedyny stan. Wskaźnik break pozostaje obserwowalnie niezmieniony po odrzuconej operacji. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Zapisz stan break po sekwencji \texttt{+16,+24,fail,-8,fail}. Dla obu porażek wskaż sprawdzaną granicę i udowodnij, że zwrot \texttt{(void *)-1} nie zmienia break. Porównaj stałe offsety hosta i RV32I. +\par\textbf{Evidence:} Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę. +\par\textbf{Acceptance:} Host i Hazard3: grow=40, rejected\_grow=40, shrink=32, rejected\_shrink=32, preserved=1, bounds=1, pass=1 i kod 0. Linker: \_\_heap\_start oraz \_\_heap\_end są wyrównane do 16 B, \_\_heap\_end == \_\_stack\_bottom. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK03 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. Wynik programu hostowego}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. Wynik RV32I i kod wyjścia}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\par\noindent\dotfill\par\noindent\dotfill +\end{ESCBlockFrame} +\end{ESCTaskFrame} +\clearpage +\begin{ESCTaskFrame}{TASK04 · Wyrównany smalloc append-only} +{\scriptsize\ttfamily e745e1ea-9494-5b75-9596-816022153237}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — API ma celowo małą władzę} +\textbf{Zachowane materiały:} \texttt{src/tasks/task04\_smalloc.c}, \texttt{src/runtime/c09\_smalloc.c}, \texttt{src/runtime/c09\_smalloc.h}, \texttt{src/runtime/c09\_bounded\_sbrk.c}, \texttt{src/runtime/c09\_bounded\_sbrk.h}.\par Klient może przydzielić payload i zresetować całą arenę. Nie może zwolnić jednego bloku ani przekazać modelowi wskaźnika do picolibc. \texttt{c09\_smalloc} pobiera surowy fragment wyłącznie przez ograniczone \texttt{c09\_sbrk}. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — 16 B metadanych bezpośrednio przed payloadem} +Nagłówek ma cztery pola \texttt{uint32\_t}: magic, requested, reserved i sequence. Jego rozmiar wynosi 16 B. Zwrócony adres to \texttt{header+1}; inspekcja kontrolnie cofa się o dokładnie jeden rzeczywisty nagłówek. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · N/D} +\textbf{N/D.} smalloc, inspect, reset i c09\_sbrk są zwykłymi wywołaniami bezpośrednimi; przykład nie zawiera callbacku, ISR ani dynamicznie wybieranej strategii. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — geometria dwóch bloków} +Żądanie 1 B daje \texttt{align16(16+1)=32}; żądanie 17 B daje \texttt{align16(16+17)=48}. Pierwszy payload leży 16 B od startu, drugi 48 B od startu, więc ich delta wynosi 32 B. Oba adresy są wielokrotnością 16. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — size, align, reserve, header, payload} +Kod odrzuca zero i przepełnienie, zaokrągla sumę nagłówka i żądania, sprawdza reprezentowalność jako \texttt{ptrdiff\_t}, rezerwuje cały blok jednym \texttt{c09\_sbrk}, zapisuje cztery pola nagłówka i dopiero wtedy zwraca payload. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · AKTYWNE — EMPTY, TWO BLOCKS, RESET} +Arena przechodzi \texttt{EMPTY -> seq1 -> seq1+seq2}. Brak indywidualnego free oznacza, że break tylko rośnie. \texttt{c09\_smalloc\_reset} wykonuje jedno przejście z dowolnej zawartości do EMPTY i unieważnia oba wskaźniki naraz. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — pamięć potwierdza header przed payloadem} +W checkpointcie odczytaj \texttt{first-16}: słowo magic to \texttt{0x534D414C}, requested=1, reserved=32, sequence=1. Pod \texttt{second-16} odpowiednie wartości to 17, 48 i 2. Globale potwierdzają deltę 32 i reset. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — bump allocator z jawną granicą użycia} +Append-only arena jest wartościowa dla fazowego scratch storage, gdy wszystkie obiekty mają wspólny czas życia. Nie zastępuje ogólnego malloc: brak selekcji, ponownego użycia pojedynczych luk, split, coalescing i niezależnego free. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Dla żądań 1 B i 17 B wyprowadź rozmiar nagłówka, rezerwację po align-up, adres obu payloadów i zmianę break. Wskaż, dlaczego brak \texttt{c09\_sfree} jest częścią kontraktu, a reset areny nie jest odpowiednikiem \texttt{free(pointer)}. +\par\textbf{Evidence:} Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę. +\par\textbf{Acceptance:} Host i Hazard3: header=16, first=32, second=48, delta=32, aligned=1, metadata=1, append=1, reset=1, pass=1 i kod 0. Nagłówki mają sequence 1 i 2; po resecie pierwszy payload wraca pod poprzedni pierwszy adres. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK04 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. Wynik programu hostowego}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. Wynik RV32I i kod wyjścia}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\par\noindent\dotfill\par\noindent\dotfill +\end{ESCBlockFrame} +\end{ESCTaskFrame} +\clearpage +\begin{ESCTaskFrame}{TASK05 · malloc/free picolibc jako czarna skrzynka} +{\scriptsize\ttfamily 9a7174f1-efb7-5c18-afbe-1a34ee6da0b7}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — klient nie zna wnętrza picolibc} +\textbf{Zachowane materiały:} \texttt{src/tasks/task05\_picolibc\_malloc.c}, \texttt{crt0.S}, \texttt{link/hazard3\_c09.ld}.\par Kod tasku używa tylko \texttt{malloc} i \texttt{free}. Linker łączy picolibc z platformą przez \texttt{sbrk} oraz symbole granic. Vendorowe \texttt{\_sbrk} pozostaje osobnym, nieużywanym przez malloc symbolem startu Hazard3. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — obraz składa się z czterech warstw} +ELF zawiera klienta, człony \texttt{malloc/free}, człon \texttt{picosbrk} i platformowy startup. Skrypt linkera dostarcza \texttt{\_\_heap\_start/\_\_heap\_end}; crt0 ustawia \texttt{gp/tp} i zeruje BSS/TBSS. Mapa pokazuje, który obiekt wniósł każdy publiczny symbol. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · N/D} +\textbf{N/D.} Klient wywołuje malloc i free bezpośrednio; badany przebieg nie przekazuje callbacku, nie obsługuje ISR i nie wybiera alokatora przez tablicę funkcji. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — kontrakt dwóch niezależnych payloadów} +Program żąda 13 B i 29 B, zapisuje dwie różne sekwencje, sumuje odczytane bajty do 4612 i sprawdza rozłączność półotwartych zakresów adresów. Mierzy co najmniej 8-bajtowe wyrównanie, ale nie narzuca odległości między blokami. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — allocate, use, verify, release} +Po dwóch udanych przydziałach kod zapisuje i natychmiast odczytuje oba zakresy, oblicza checksum i warunki adresowe, zwalnia najpierw drugi, potem pierwszy blok, ustawia \texttt{freed=1} i zatrzymuje się w checkpointcie. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · AKTYWNE — własność payloadu kończy się w free} +Każdy wskaźnik przechodzi od braku zasobu do stanu OWNED po udanym malloc, następnie USED po zapisie i RELEASED po free. Program nie dereferencjuje wskaźnika w RELEASED i nie bada, czy następny malloc odzyska ten sam adres. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — wykonanie plus audyt ELF} +Hazard3 kończy program kodem 0; globale pokazują checksum 4612, rozłączność, alignment i oba free. \texttt{nm} musi równocześnie pokazać \texttt{\_sbrk} oraz \texttt{sbrk}, a mapa trzy człony picolibc związane z malloc, free i dostawcą pamięci. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — test kontraktu bez zgadywania implementacji} +Poprawny test czarnej skrzynki wymusza własności API, ale nie zależy od prywatnego nagłówka, kierunku wzrostu sterty, dokładnej delty adresów ani ponownego użycia po free. Dzięki temu pozostaje wartościowy po zmianie implementacji libc. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Nie zakładając formatu nagłówka libc, wypisz własności możliwe do sprawdzenia przez klienta dwóch przydziałów. Uruchom host i Hazard3, sprawdź checksum oraz mapę, a w ELF wykaż współistnienie vendorowego \texttt{\_sbrk} i picolibc \texttt{sbrk}. +\par\textbf{Evidence:} Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę. +\par\textbf{Acceptance:} Host i Hazard3: nonnull=1, delta\_nonzero=1, checksum=4612, nonoverlap=1, aligned=1, freed=1, pass=1 i kod 0. Mapa RV32I zawiera libc\_stdlib\_malloc.c.o, libc\_stdlib\_free.c.o i libc\_misc\_picosbrk.c.o. ELF definiuje \_sbrk, sbrk, malloc, free, \_\_heap\_start i \_\_heap\_end. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK05 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. Wynik programu hostowego}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. Wynik RV32I i kod wyjścia}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\par\noindent\dotfill\par\noindent\dotfill +\end{ESCBlockFrame} +\end{ESCTaskFrame} +\ESCSectionBlockEnd + +\end{document} diff --git a/doc/generated/main.upb b/doc/generated/main.upb new file mode 100644 index 0000000..e69de29 diff --git a/doc/pdf/mpabi-inf-c-09-smalloc-sbrk-libc-v00.01-47826ae5-6370-5ac2-bd91-9acb89116d40.pdf b/doc/pdf/mpabi-inf-c-09-smalloc-sbrk-libc-v00.01-47826ae5-6370-5ac2-bd91-9acb89116d40.pdf new file mode 100644 index 0000000000000000000000000000000000000000..af0966260aad3bc64939d136174d8bc25d53f792 GIT binary patch literal 307444 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

  • ex_vLUf2ND9$XP>%t2>F+@@6 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%0AIpdy}orsxNpN%{9+V&?_S1mfnd0_4q1 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 z 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�#`ms|a`}3mE3#SXo(Rkw#5rS$VSJB0PX=&n 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 F{|C5)o7eyV literal 0 HcmV?d00001 diff --git a/json/card_source.json b/json/card_source.json new file mode 100644 index 0000000..4fcb244 --- /dev/null +++ b/json/card_source.json @@ -0,0 +1,962 @@ +{ + "$schema": "../../../tools/card-layouts/schemas/card-source.schema.json", + "schema": "esc-card-source.v1", + "card": { + "id": "mpabi-inf-c-09-smalloc-sbrk-libc", + "series": "c", + "series_title": "C · Freestanding RV32I and K&R", + "number": "09", + "count": "13", + "slug": "smalloc-sbrk-libc", + "title": "smalloc, sbrk i minimalne libc", + "topic": "K&R 5.4 i 7.8: granica libc, bounded sbrk, prosty smalloc oraz malloc/free picolibc", + "project": "Freestanding C na RV32I", + "subject": "Informatyka", + "level": "Rok 1 · C09 · RV32I/Hazard3", + "revision_date": "2026-07-20T00:00:00+02:00", + "status": "Gotowa", + "version": "v00.01", + "uuid": "47826ae5-6370-5ac2-bd91-9acb89116d40", + "author": "M. Pabiszczak", + "year": "2026" + }, + "generated": { + "tex": "doc/generated/main.tex", + "html": "web/index.html", + "html_css": "web/style.css", + "html_tree_inspector": false, + "react_app": true + }, + "render_dictionary": false, + "template": "templates/karta-klasyczna.json", + "title_block": { + "category": "KARTA PRACY · INFORMATYKA", + "prepared_by": "M. Pabiszczak", + "prepared_on": "2026-07-20T00:00:00+02:00", + "title": "smalloc, sbrk i minimalne libc", + "url": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0", + "repository_url": "https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-smalloc-sbrk-libc", + "url_host_uuid": "dce7fb9d-7b2f-5d49-96a2-3a30d3070b84", + "url_domain": "mpabi.pl", + "doc_uuid": "8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0", + "revision": "v00.01", + "issued_on": "2026-07-20T00:00:00+02:00", + "series": "C-09", + "document_type": "karta pracy", + "tool": "card-layouts", + "show_qr": true, + "show_repository_qr": true, + "height_cm": 2.6, + "repeat_on_every_page": true, + "replace_front_matter": true + }, + "front_page_break": true, + "front_page_scope": { + "title": "Cel karty", + "content_tex": "Uczeń rozdziela wybór funkcji z archiwum libc, kontrakt dostawcy pamięci sbrk i politykę alokatora. Najpierw dowodzi, że strlen nie potrzebuje sterty, potem kontrolowanie zrywa zależność malloc do sbrk, buduje ograniczony model break i wyrównany smalloc, a na końcu traktuje prawdziwe malloc/free picolibc jako czarną skrzynkę sprawdzaną przez kontrakt.", + "scope_title": "Zakres i zachowane przykłady", + "scope_content_tex": "Pięć zachowanych przykładów działa na hoście i RV32I tam, gdzie istnieje program uruchamialny. Task02 jest zamierzonym expected-fail linkera i nie ma obrazu runtime. W aktualnym GCC 15.2 biblioteka to picolibc: jej malloc odwołuje się do sbrk, podczas gdy vendorowy init.S Hazard3 definiuje inny symbol \\_sbrk. Własny linker ogranicza stertę symbolami \\_\\_heap\\_start i \\_\\_heap\\_end oraz rezerwuje 64 KiB stosu.\\par\\textbf{Układ każdego przykładu:} pełny profil A1--A8; widok N/D ma jawny powód, a diagram nie jest wymagany, gdy tekst daje lepszy dowód.", + "scope_table": { + "headers": [ + "K&R", + "Numer tasku", + "Najważniejsza idea", + "Priorytet" + ], + "rows": [ + { + "chapter": "7.8", + "task": "Task01", + "idea_tex": "libc.a: wybór strlen.c.o", + "priority": "kluczowe", + "key": true + }, + { + "chapter": "5.4 + ABI", + "task": "Task02", + "idea_tex": "expected-fail: malloc -> sbrk", + "priority": "kluczowe", + "key": true + }, + { + "chapter": "5.4", + "task": "Task03", + "idea_tex": "ograniczony break i atomowy błąd", + "priority": "kluczowe", + "key": true + }, + { + "chapter": "5.4", + "task": "Task04", + "idea_tex": "nagłówek, alignment i reset areny", + "priority": "kluczowe", + "key": true + }, + { + "chapter": "7.8 + ABI", + "task": "Task05", + "idea_tex": "malloc/free picolibc jako black box", + "priority": "kluczowe", + "key": true + } + ] + } + }, + "side_margin_tree_layout": { + "columns": [ + { + "id": "zawodowe", + "label": "TECH", + "side": "left", + "tree": "WE -> EK -> KW", + "description": "Kod C, ABI i obserwacja RV32I." + }, + { + "id": "ogolne", + "label": "OG", + "side": "right", + "tree": "WE -> EN -> KW", + "description": "Przewidywanie, pomiar i wniosek." + } + ] + }, + "learning_effects": { + "C09.EN01": { + "bloom_level": "Analiza", + "label": "Trzy warstwy jednego przydziału", + "text": "Uczeń wyprowadza osobno: wybór członu archiwum, wiązanie symbolu dostawcy pamięci oraz inwarianty polityki alokacji, zamiast nazywać wszystkie trzy mechanizmy stertą.", + "assessment_criteria": [ + "C09.KW01" + ] + }, + "C09.EK01": { + "bloom_level": "Zastosowanie", + "label": "Dowód z mapy, stanu i wykonania", + "text": "Uczeń porównuje mapę linkera, kontrolowany błąd symbolu, globalne checkpointy, wynik hosta i kod wyjścia Hazard3, a wnioski ogranicza do naprawdę zmierzonych własności.", + "assessment_criteria": [ + "C09.KW01" + ] + } + }, + "assessment_criteria": { + "C09.KW01": { + "text": "Task01: length=16, strlen.c.o obecny, człony malloc/free/picosbrk nieobecne. Task02: link kończy się niezerowo przez brak __wrap_sbrk, powstaje log, ale nie ELF. Task03: offset break 40 po wzroście, 40 po odrzuconym wzroście, 32 po skurczeniu i 32 po odrzuconym zejściu poniżej początku; granice są zachowane. Task04: header=16, rezerwacje 32 i 48, delta payloadów 32, alignment=16, kolejność append-only i reset całej areny. Task05: dwa niepuste, rozłączne i co najmniej 8-bajtowo wyrównane bloki, checksum=4612, oba free wykonane; mapa zawiera malloc/free/picosbrk, a ELF równocześnie _sbrk i sbrk. Wszystkie uruchamialne programy host i Hazard3 zwracają 0.", + "learning_effects": [ + "C09.EN01", + "C09.EK01" + ] + } + }, + "educational_requirements": { + "C09.WE01": { + "text": "Czytanie mapy linkera i symboli ELF, bezpieczna arytmetyka granic, wyrównanie bloków oraz rozróżnienie modelu dydaktycznego od kontraktu prawdziwej biblioteki.", + "label": "K&R 5.4 i 7.8: granica libc, bounded sbrk, prosty smalloc oraz malloc/free picolibc", + "learning_effects": [ + "C09.EN01", + "C09.EK01" + ], + "learning_tree": { + "schema": "we-learning-tree.v1", + "policy": "Najpierw przewidywanie, następnie wykonanie i odczyt dowodu.", + "ogolne": [ + { + "effect_ref": "C09.EN01", + "display": "EN C09 01", + "source": "LOCAL", + "official": "C", + "local": "01", + "kind": "EN", + "tree_id": "C09.WE01.OG.LOCAL.C.01", + "text": "Uczeń wyprowadza osobno: wybór członu archiwum, wiązanie symbolu dostawcy pamięci oraz inwarianty polityki alokacji, zamiast nazywać wszystkie trzy mechanizmy stertą.", + "kw": [ + { + "criterion_ref": "C09.KW01", + "display": "KW C09 01", + "source": "LOCAL", + "kind": "KW", + "official": "C", + "local": "01", + "text": "Kod, przewidywanie i pomiar tworzą jeden dowód." + } + ] + } + ], + "zawodowe": [ + { + "effect_ref": "C09.EK01", + "display": "EK C09 01", + "source": "LOCAL", + "official": "C", + "local": "01", + "kind": "EK", + "tree_id": "C09.WE01.TECH.LOCAL.C.01", + "text": "Uczeń porównuje mapę linkera, kontrolowany błąd symbolu, globalne checkpointy, wynik hosta i kod wyjścia Hazard3, a wnioski ogranicza do naprawdę zmierzonych własności.", + "kw": [ + { + "criterion_ref": "C09.KW01", + "display": "KW C09 01", + "source": "LOCAL", + "kind": "KW", + "official": "C", + "local": "01", + "text": "Kod, przewidywanie i pomiar tworzą jeden dowód." + } + ] + } + ] + } + } + }, + "sections": [ + { + "title": "1 — Funkcja z libc nie oznacza automatycznie sterty", + "order": 10, + "content_kind": "prose", + "page_orientation": "portrait", + "content_tex": "Archiwum \\texttt{libc.a} nie jest włączane do programu w całości. Linker pobiera człon, który rozwiązuje potrzebny symbol, a następne człony tylko wtedy, gdy pojawią się kolejne nierozwiązane odwołania. Dlatego bezpośrednie wywołanie \\texttt{strlen} z opcją \\texttt{-fno-builtin} wybiera \\texttt{strlen.c.o}, lecz nie wybiera \\texttt{libc\\_stdlib\\_malloc.c.o} ani \\texttt{libc\\_misc\\_picosbrk.c.o}. Dowodem jest mapa linkera, a nie samo dołączenie nagłówka \\texttt{string.h}.\n\nTask01 rozstrzyga wyłącznie tę zależność. Nie dowodzi, że każda funkcja tekstowa jest bezkosztowa ani że całe libc nie używa pamięci dynamicznej.", + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_refs": [ + "C09.KW01" + ] + }, + { + "title": "2 — malloc potrzebuje sbrk, lecz _sbrk to inna nazwa", + "order": 20, + "content_kind": "prose", + "page_orientation": "portrait", + "content_tex": "W badanym GCC 15.2 używane jest \\textbf{picolibc}, nie newlib. Człon \\texttt{libc\\_stdlib\\_malloc.c.o} ma niezdefiniowane odwołanie do \\texttt{sbrk}. Picolibc może dostarczyć je z \\texttt{libc\\_misc\\_picosbrk.c.o}; ten kod opiera granice na symbolach linkera \\texttt{\\_\\_heap\\_start} i \\texttt{\\_\\_heap\\_end}. Z kolei \\texttt{vendor/Hazard3/.../init.S} definiuje \\texttt{\\_sbrk} z jednym podkreśleniem. Dla linkera są to dwa różne symbole, więc mogą współistnieć w Task05.\n\nTask02 używa \\texttt{--wrap=sbrk}: każde odwołanie do \\texttt{sbrk} zostaje skierowane do celowo brakującego \\texttt{\\_\\_wrap\\_sbrk}. Oczekiwany błąd jest kontrolowanym testem krawędzi \\texttt{malloc -> sbrk}, a nie awarią całego projektu.", + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_refs": [ + "C09.KW01" + ] + }, + { + "title": "3 — Od alloc z K&R 5.4 do bounded sbrk i smalloc", + "order": 30, + "content_kind": "prose", + "page_orientation": "portrait", + "content_tex": "Liniowy \\texttt{alloc} z K\\&R 5.4 przesuwa wskaźnik w stałej tablicy. Jest prosty, ale nie odzyskuje dowolnego bloku, nie wybiera najlepszego dopasowania, nie dzieli i nie scala wolnych obszarów. \\texttt{afree} może cofnąć wskaźnik jedynie do adresu należącego do areny, więc bez dyscypliny stosowej łatwo unieważnić późniejsze przydziały. Historyczna tablica bajtów nie jest też ogólną deklaracją wyrównania dla każdego typu.\n\nTask03 zachowuje istotę modelu, lecz jawnie wymusza \\texttt{heap\\_start <= brk <= heap\\_end}; odrzucona operacja nie zmienia break. Task04 dodaje 16-bajtowe wyrównanie i 16-bajtowy nagłówek bezpośrednio przed payloadem. Nadal jest to alokator append-only: nie ma \\texttt{sfree}, listy wolnych bloków, split ani coalescing. Jedyną operacją odzyskania jest reset całej areny, który unieważnia wszystkie wcześniejsze wskaźniki.", + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_refs": [ + "C09.KW01" + ] + }, + { + "title": "4 — Prawdziwe malloc/free jako czarna skrzynka", + "order": 40, + "content_kind": "prose", + "page_orientation": "portrait", + "content_tex": "Task05 nie zakłada, że picolibc ma taki sam nagłówek lub strategię jak \\texttt{c09\\_smalloc}. Program sprawdza tylko publiczny kontrakt potrzebny klientowi: dwa udane przydziały dają używalne, rozłączne obszary; zapisane bajty można odczytać; adresy spełniają mierzone wyrównanie; oba bloki są przekazane do \\texttt{free}. Nie odczytuje pamięci po \\texttt{free} i nie wymaga ponownego użycia tego samego adresu.\n\nMinimalny startup ustawia \\texttt{gp}, pojedynczą bazę TLS \\texttt{tp}, zeruje \\texttt{.tbss} i \\texttt{.bss}, a następnie wywołuje \\texttt{main}. Skrypt linkera pozostawia \\texttt{\\_\\_heap\\_end} 64 KiB przed \\texttt{\\_\\_stack\\_top} i ma \\texttt{ASSERT} zatrzymujący obraz, gdy sekcje zajmą zarezerwowany obszar.", + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_refs": [ + "C09.KW01" + ] + }, + { + "title": "Zadania — zachowane przykłady w profilu A1–A8", + "order": 50, + "content_kind": "tasks", + "page_orientation": "portrait", + "task_refs": [ + "task01", + "task02", + "task03", + "task04", + "task05" + ], + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_refs": [ + "C09.KW01" + ] + } + ], + "tasks": { + "task01": { + "title": "strlen z libc bez sterty", + "uuid": "839b8401-9f15-5edc-a214-176c06ba5cb1", + "prompt_tex": "Przed linkowaniem przewidź, które człony \\texttt{libc.a} są potrzebne przez bezpośrednie \\texttt{strlen}. Uruchom program, a potem w mapie udowodnij obecność \\texttt{strlen.c.o} i nieobecność członów malloc, free oraz picosbrk.", + "criterion": "Host i Hazard3: length=16, pass=1, kod 0. Mapa RV32I zawiera libc.a(strlen.c.o), ale nie zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o ani libc_misc_picosbrk.c.o.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — klient, archiwum i brak dostawcy pamięci", + "content_tex": "Klient wywołuje publiczne \\texttt{strlen}. Granicą systemu jest linker wybierający potrzebny człon \\texttt{libc.a}; Task01 nie deklaruje ani nie wywołuje \\texttt{malloc}, \\texttt{free} lub \\texttt{sbrk}." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — jedna krawędź symboliczna", + "content_tex": "Przy \\texttt{-fno-builtin} obiekt tasku zachowuje niezdefiniowany symbol \\texttt{strlen}. Linker rozwiązuje go przez \\texttt{strlen.c.o}. Ten człon nie tworzy następnej krawędzi do alokatora, dlatego graf zależności kończy się bez warstwy sterty." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "strlen i checkpoint są wywołaniami bezpośrednimi; program nie ma callbacku, ISR, wskaźnika funkcji ani dynamicznego wyboru implementacji." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — dwa niezależne warunki sukcesu", + "content_tex": "Warunek wykonania to długość 16 dla napisu \\texttt{picolibc-no-heap}. Warunek obrazu to obecność wyłącznie potrzebnego członu tekstowego i brak trzech nazw członów związanych z przydziałem. Sam kod wyjścia nie zastępuje kontroli mapy." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — kompilacja, selekcja archiwum, wywołanie", + "content_tex": "Kompilator pozostawia call do \\texttt{strlen}; linker przegląda archiwum i pobiera \\texttt{strlen.c.o}; startup uruchamia \\texttt{main}; funkcja oblicza 16; checkpoint publikuje wynik; \\texttt{main} zwraca 0. Każdy etap ma inny artefakt dowodowy." + }, + { + "id": "A6", + "status": "unavailable", + "title": "STATE", + "reason": "Program wykonuje jednorazowy, czysty pomiar długości i nie ma domenowego obiektu przechodzącego przez istotne stany ani zasobu o cyklu życia." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — global i mapa odpowiadają na inne pytania", + "content_tex": "W \\texttt{task01\\_debug\\_checkpoint} global \\texttt{g\\_task01\\_length} ma wartość 16, a \\texttt{g\\_task01\\_pass} wartość 1. Osobno \\texttt{prog.map} wskazuje \\texttt{libc.a(strlen.c.o)}; test mapy odrzuca każdą nazwę członu heap." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — płać za osiągalne symbole, nie za nagłówek", + "content_tex": "Dla archiwum statycznego właściwym wzorcem audytu jest śledzenie nierozwiązanych symboli i pobranych członów. \\texttt{\\#include } dostarcza deklarację; nie jest poleceniem dołączenia całej implementacji libc." + } + ], + "flow": [ + { + "kind": "block", + "id": "task01.a1", + "title": "A1 CONTEXT · AKTYWNE — klient, archiwum i brak dostawcy pamięci", + "content_tex": "\\textbf{Zachowany przykład:} \\texttt{src/tasks/task01\\_libc\\_without\\_heap.c}.\\par Klient wywołuje publiczne \\texttt{strlen}. Granicą systemu jest linker wybierający potrzebny człon \\texttt{libc.a}; Task01 nie deklaruje ani nie wywołuje \\texttt{malloc}, \\texttt{free} lub \\texttt{sbrk}." + }, + { + "kind": "block", + "id": "task01.a2", + "title": "A2 STRUCTURE · AKTYWNE — jedna krawędź symboliczna", + "content_tex": "Przy \\texttt{-fno-builtin} obiekt tasku zachowuje niezdefiniowany symbol \\texttt{strlen}. Linker rozwiązuje go przez \\texttt{strlen.c.o}. Ten człon nie tworzy następnej krawędzi do alokatora, dlatego graf zależności kończy się bez warstwy sterty." + }, + { + "kind": "block", + "id": "task01.a3", + "title": "A3 DISPATCH · N/D", + "content_tex": "\\textbf{N/D.} strlen i checkpoint są wywołaniami bezpośrednimi; program nie ma callbacku, ISR, wskaźnika funkcji ani dynamicznego wyboru implementacji." + }, + { + "kind": "block", + "id": "task01.a4", + "title": "A4 APPLICATION · AKTYWNE — dwa niezależne warunki sukcesu", + "content_tex": "Warunek wykonania to długość 16 dla napisu \\texttt{picolibc-no-heap}. Warunek obrazu to obecność wyłącznie potrzebnego członu tekstowego i brak trzech nazw członów związanych z przydziałem. Sam kod wyjścia nie zastępuje kontroli mapy." + }, + { + "kind": "block", + "id": "task01.a5", + "title": "A5 FLOW · AKTYWNE — kompilacja, selekcja archiwum, wywołanie", + "content_tex": "Kompilator pozostawia call do \\texttt{strlen}; linker przegląda archiwum i pobiera \\texttt{strlen.c.o}; startup uruchamia \\texttt{main}; funkcja oblicza 16; checkpoint publikuje wynik; \\texttt{main} zwraca 0. Każdy etap ma inny artefakt dowodowy." + }, + { + "kind": "block", + "id": "task01.a6", + "title": "A6 STATE · N/D", + "content_tex": "\\textbf{N/D.} Program wykonuje jednorazowy, czysty pomiar długości i nie ma domenowego obiektu przechodzącego przez istotne stany ani zasobu o cyklu życia." + }, + { + "kind": "block", + "id": "task01.a7", + "title": "A7 RUNTIME · AKTYWNE — global i mapa odpowiadają na inne pytania", + "content_tex": "W \\texttt{task01\\_debug\\_checkpoint} global \\texttt{g\\_task01\\_length} ma wartość 16, a \\texttt{g\\_task01\\_pass} wartość 1. Osobno \\texttt{prog.map} wskazuje \\texttt{libc.a(strlen.c.o)}; test mapy odrzuca każdą nazwę członu heap." + }, + { + "kind": "block", + "id": "task01.a8", + "title": "A8 PATTERNS · AKTYWNE — płać za osiągalne symbole, nie za nagłówek", + "content_tex": "Dla archiwum statycznego właściwym wzorcem audytu jest śledzenie nierozwiązanych symboli i pobranych członów. \\texttt{\\#include } dostarcza deklarację; nie jest poleceniem dołączenia całej implementacji libc." + }, + { + "kind": "exercise", + "id": "task01.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Przed linkowaniem przewidź, które człony \\texttt{libc.a} są potrzebne przez bezpośrednie \\texttt{strlen}. Uruchom program, a potem w mapie udowodnij obecność \\texttt{strlen.c.o} i nieobecność członów malloc, free oraz picosbrk.", + "evidence_tex": "Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę.", + "criterion": "Host i Hazard3: length=16, pass=1, kod 0. Mapa RV32I zawiera libc.a(strlen.c.o), ale nie zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o ani libc_misc_picosbrk.c.o." + }, + { + "kind": "block", + "id": "task01.worksheet", + "title": "TASK01 · Zapis dowodu ucznia", + "content_tex": "\\textbf{1. Przewidywanie przed uruchomieniem}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{2. Wynik programu hostowego}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. Wynik RV32I i kod wyjścia}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\\par\\noindent\\dotfill\\par\\noindent\\dotfill" + } + ], + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_ref": "C09.KW01" + }, + "task02": { + "title": "Kontrolowany brak dostawcy sbrk", + "uuid": "9c55597f-3145-5744-b13e-f1c0ee83abc8", + "prompt_tex": "Narysuj łańcuch \\texttt{main -> malloc -> sbrk}. Następnie uruchom \\texttt{make expected-fail} i wyjaśnij, dlaczego \\texttt{--wrap=sbrk} zmienia ostatnią krawędź na \\texttt{\\_\\_wrap\\_sbrk}, dlaczego brak ELF jest wynikiem poprawnym oraz czego ten test nie mówi o runtime.", + "criterion": "Kompilacja task.o kończy się sukcesem. Link ma niezerowy status, log wymienia libc_stdlib_malloc.c.o i undefined reference to __wrap_sbrk, a must-not-exist.elf nie istnieje. Nie wykonuje się testu host ani Hazard3.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — kontrolowane przecięcie granicy platformy", + "content_tex": "Kod klienta żąda 16 B przez \\texttt{malloc}. Opcja linkera przechwytuje wyłącznie symbol dostawcy pamięci, dzięki czemu testuje granicę libc--platforma bez usuwania lub modyfikowania systemowego archiwum." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — caller, człon malloc i brakujący wrapper", + "content_tex": "Obiekt tasku wnosi odwołanie do \\texttt{malloc}; linker pobiera \\texttt{libc\\_stdlib\\_malloc.c.o}. Jego odwołania do \\texttt{sbrk} są przez \\texttt{--wrap} przepisywane na \\texttt{\\_\\_wrap\\_sbrk}. Żaden obiekt celowo nie definiuje tej ostatniej nazwy." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "Wywołanie malloc jest bezpośrednie, a --wrap jest transformacją nazw podczas linkowania, nie mechanizmem callbacku, ISR ani dynamicznego dispatchu w programie." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — porażka ma precyzyjną sygnaturę", + "content_tex": "Sukces testu oznacza jednocześnie: obiekt C powstał, link zwrócił status różny od zera, diagnostyka zawiera \\texttt{\\_\\_wrap\\_sbrk} oraz nazwę członu malloc, a końcowy ELF nie istnieje. Inny błąd linkera nie spełnia kryterium." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — expected-fail jako kontrolowany przebieg", + "content_tex": "Skrypt usuwa stary artefakt, kompiluje task, uruchamia link w trybie dopuszczającym błąd, zapisuje status i log, po czym przywraca rygor \\texttt{set -e}. Dopiero cztery asercje zamieniają oczekiwaną porażkę programu w sukces testu." + }, + { + "id": "A6", + "status": "unavailable", + "title": "STATE", + "reason": "Linkowanie kończy się przed utworzeniem obrazu wykonywalnego, więc nie istnieje runtime, breakpoint ani obiekt domenowy zmieniający stan w czasie wykonania." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — dowodem jest diagnostyka przed runtime", + "content_tex": "Odczytaj \\texttt{expected-link-failure.log}: cztery relokacje z \\texttt{libc\\_stdlib\\_malloc.c.o} wskazują brak \\texttt{\\_\\_wrap\\_sbrk}. Następnie sprawdź nieobecność \\texttt{must-not-exist.elf}; nie wolno wymyślać wartości runtime dla nieistniejącego programu." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — test negatywny musi odrzucać zły powód", + "content_tex": "Wzorzec expected-fail wymaga konkretnej sygnatury błędu i braku produktu końcowego. Sam warunek „polecenie nie przeszło” byłby za słaby, bo zaliczyłby literówkę, brak kompilatora lub błędny skrypt linkera." + } + ], + "flow": [ + { + "kind": "block", + "id": "task02.a1", + "title": "A1 CONTEXT · AKTYWNE — kontrolowane przecięcie granicy platformy", + "content_tex": "\\textbf{Zachowany przykład:} \\texttt{src/tasks/task02\\_malloc\\_requires\\_sbrk.c}.\\par Kod klienta żąda 16 B przez \\texttt{malloc}. Opcja linkera przechwytuje wyłącznie symbol dostawcy pamięci, dzięki czemu testuje granicę libc--platforma bez usuwania lub modyfikowania systemowego archiwum." + }, + { + "kind": "block", + "id": "task02.a2", + "title": "A2 STRUCTURE · AKTYWNE — caller, człon malloc i brakujący wrapper", + "content_tex": "Obiekt tasku wnosi odwołanie do \\texttt{malloc}; linker pobiera \\texttt{libc\\_stdlib\\_malloc.c.o}. Jego odwołania do \\texttt{sbrk} są przez \\texttt{--wrap} przepisywane na \\texttt{\\_\\_wrap\\_sbrk}. Żaden obiekt celowo nie definiuje tej ostatniej nazwy." + }, + { + "kind": "block", + "id": "task02.a3", + "title": "A3 DISPATCH · N/D", + "content_tex": "\\textbf{N/D.} Wywołanie malloc jest bezpośrednie, a --wrap jest transformacją nazw podczas linkowania, nie mechanizmem callbacku, ISR ani dynamicznego dispatchu w programie." + }, + { + "kind": "block", + "id": "task02.a4", + "title": "A4 APPLICATION · AKTYWNE — porażka ma precyzyjną sygnaturę", + "content_tex": "Sukces testu oznacza jednocześnie: obiekt C powstał, link zwrócił status różny od zera, diagnostyka zawiera \\texttt{\\_\\_wrap\\_sbrk} oraz nazwę członu malloc, a końcowy ELF nie istnieje. Inny błąd linkera nie spełnia kryterium." + }, + { + "kind": "block", + "id": "task02.a5", + "title": "A5 FLOW · AKTYWNE — expected-fail jako kontrolowany przebieg", + "content_tex": "Skrypt usuwa stary artefakt, kompiluje task, uruchamia link w trybie dopuszczającym błąd, zapisuje status i log, po czym przywraca rygor \\texttt{set -e}. Dopiero cztery asercje zamieniają oczekiwaną porażkę programu w sukces testu." + }, + { + "kind": "block", + "id": "task02.a6", + "title": "A6 STATE · N/D", + "content_tex": "\\textbf{N/D.} Linkowanie kończy się przed utworzeniem obrazu wykonywalnego, więc nie istnieje runtime, breakpoint ani obiekt domenowy zmieniający stan w czasie wykonania." + }, + { + "kind": "block", + "id": "task02.a7", + "title": "A7 RUNTIME · AKTYWNE — dowodem jest diagnostyka przed runtime", + "content_tex": "Odczytaj \\texttt{expected-link-failure.log}: cztery relokacje z \\texttt{libc\\_stdlib\\_malloc.c.o} wskazują brak \\texttt{\\_\\_wrap\\_sbrk}. Następnie sprawdź nieobecność \\texttt{must-not-exist.elf}; nie wolno wymyślać wartości runtime dla nieistniejącego programu." + }, + { + "kind": "block", + "id": "task02.a8", + "title": "A8 PATTERNS · AKTYWNE — test negatywny musi odrzucać zły powód", + "content_tex": "Wzorzec expected-fail wymaga konkretnej sygnatury błędu i braku produktu końcowego. Sam warunek „polecenie nie przeszło” byłby za słaby, bo zaliczyłby literówkę, brak kompilatora lub błędny skrypt linkera." + }, + { + "kind": "exercise", + "id": "task02.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Narysuj łańcuch \\texttt{main -> malloc -> sbrk}. Następnie uruchom \\texttt{make expected-fail} i wyjaśnij, dlaczego \\texttt{--wrap=sbrk} zmienia ostatnią krawędź na \\texttt{\\_\\_wrap\\_sbrk}, dlaczego brak ELF jest wynikiem poprawnym oraz czego ten test nie mówi o runtime.", + "evidence_tex": "Przewidywana brakująca nazwa, status kompilacji obiektu, niezerowy status linkera, cytat dwóch sygnatur z logu oraz sprawdzenie, że końcowy ELF nie istnieje.", + "criterion": "Kompilacja task.o kończy się sukcesem. Link ma niezerowy status, log wymienia libc_stdlib_malloc.c.o i undefined reference to __wrap_sbrk, a must-not-exist.elf nie istnieje. Nie wykonuje się testu host ani Hazard3." + }, + { + "kind": "block", + "id": "task02.worksheet", + "title": "TASK02 · Zapis dowodu ucznia", + "content_tex": "\\textbf{1. Przewidywanie przed uruchomieniem}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{2. Wynik kompilacji task.o}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. Status i sygnatury błędu linkera}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\\par\\noindent\\dotfill\\par\\noindent\\dotfill" + } + ], + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_ref": "C09.KW01" + }, + "task03": { + "title": "Bounded sbrk i atomowy błąd", + "uuid": "5a69ff6d-bda9-5b20-a18c-a8da2f88c64a", + "prompt_tex": "Zapisz stan break po sekwencji \\texttt{+16,+24,fail,-8,fail}. Dla obu porażek wskaż sprawdzaną granicę i udowodnij, że zwrot \\texttt{(void *)-1} nie zmienia break. Porównaj stałe offsety hosta i RV32I.", + "criterion": "Host i Hazard3: grow=40, rejected_grow=40, shrink=32, rejected_shrink=32, preserved=1, bounds=1, pass=1 i kod 0. Linker: __heap_start oraz __heap_end są wyrównane do 16 B, __heap_end == __stack_bottom.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — model oddzielony od libc", + "content_tex": "Task03 eksportuje nazwę \\texttt{c09\\_sbrk}, aby nie przejąć symbolu \\texttt{sbrk} picolibc. Na hoście granice obejmują statyczną arenę 512 B; na RV32I pochodzą z linkera. Ten sam algorytm widzi tylko trzy adresy." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — start, break i end", + "content_tex": "Stan ma jedną zmienną \\texttt{g\\_c09\\_break} oraz niezmienne granice \\texttt{start} i \\texttt{end}. Każdy poprawny stan spełnia \\texttt{start <= break <= end}; wolny obszar ma rozmiar \\texttt{end-break}, a zajęty prefiks \\texttt{break-start}." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "Wszystkie operacje c09_sbrk i gettery są wywoływane bezpośrednio; nie ma callbacku, ISR, tablicy funkcji ani wyboru implementacji w runtime." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — tabela pięciu przejść", + "content_tex": "Od offsetu 0 operacje dają kolejno: \\texttt{+16 -> 16}, \\texttt{+24 -> 40}, zbyt duży wzrost \\texttt{-> 40}, \\texttt{-8 -> 32}, zejście o 33 \\texttt{-> 32}. Udany call zwraca stary break; porażka zwraca wszystkie bity ustawione." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — najpierw zakres, potem commit", + "content_tex": "Dla wzrostu kod porównuje wielkość z \\texttt{end-current}; dla spadku oblicza bezpiecznie moduł także dla \\texttt{PTRDIFF\\_MIN} i porównuje go z \\texttt{current-start}. Dopiero po zaliczeniu warunku zapisuje \\texttt{g\\_c09\\_break=next}." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — VALID pozostaje VALID także po odrzuceniu", + "content_tex": "Break przechodzi przez offsety \\texttt{0 -> 16 -> 40 -> 40 -> 32 -> 32}. Obie porażki są samopętlą stanu: zmienia się wynik operacji, ale nie break. Nie ma przejścia do wartości poniżej start ani powyżej end." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — offsety zamiast niestabilnych adresów", + "content_tex": "Checkpoint publikuje cztery offsety \\texttt{40,40,32,32} oraz flagi \\texttt{preserved=1} i \\texttt{bounds=1}. Adresy bezwzględne hosta mogą się zmieniać przez ASLR, dlatego dowód porównuje różnice względem startu." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — validate then commit", + "content_tex": "Wzorzec silnej gwarancji błędu brzmi: najpierw policz bez przepełnienia, następnie sprawdź granice, a dopiero potem zmień jedyny stan. Wskaźnik break pozostaje obserwowalnie niezmieniony po odrzuconej operacji." + } + ], + "flow": [ + { + "kind": "block", + "id": "task03.a1", + "title": "A1 CONTEXT · AKTYWNE — model oddzielony od libc", + "content_tex": "\\textbf{Zachowane materiały:} \\texttt{src/tasks/task03\\_bounded\\_sbrk.c}, \\texttt{src/runtime/c09\\_bounded\\_sbrk.c}, \\texttt{src/runtime/c09\\_bounded\\_sbrk.h}, \\texttt{link/hazard3\\_c09.ld}.\\par Task03 eksportuje nazwę \\texttt{c09\\_sbrk}, aby nie przejąć symbolu \\texttt{sbrk} picolibc. Na hoście granice obejmują statyczną arenę 512 B; na RV32I pochodzą z linkera. Ten sam algorytm widzi tylko trzy adresy." + }, + { + "kind": "block", + "id": "task03.a2", + "title": "A2 STRUCTURE · AKTYWNE — start, break i end", + "content_tex": "Stan ma jedną zmienną \\texttt{g\\_c09\\_break} oraz niezmienne granice \\texttt{start} i \\texttt{end}. Każdy poprawny stan spełnia \\texttt{start <= break <= end}; wolny obszar ma rozmiar \\texttt{end-break}, a zajęty prefiks \\texttt{break-start}." + }, + { + "kind": "block", + "id": "task03.a3", + "title": "A3 DISPATCH · N/D", + "content_tex": "\\textbf{N/D.} Wszystkie operacje c09\\_sbrk i gettery są wywoływane bezpośrednio; nie ma callbacku, ISR, tablicy funkcji ani wyboru implementacji w runtime." + }, + { + "kind": "block", + "id": "task03.a4", + "title": "A4 APPLICATION · AKTYWNE — tabela pięciu przejść", + "content_tex": "Od offsetu 0 operacje dają kolejno: \\texttt{+16 -> 16}, \\texttt{+24 -> 40}, zbyt duży wzrost \\texttt{-> 40}, \\texttt{-8 -> 32}, zejście o 33 \\texttt{-> 32}. Udany call zwraca stary break; porażka zwraca wszystkie bity ustawione." + }, + { + "kind": "block", + "id": "task03.a5", + "title": "A5 FLOW · AKTYWNE — najpierw zakres, potem commit", + "content_tex": "Dla wzrostu kod porównuje wielkość z \\texttt{end-current}; dla spadku oblicza bezpiecznie moduł także dla \\texttt{PTRDIFF\\_MIN} i porównuje go z \\texttt{current-start}. Dopiero po zaliczeniu warunku zapisuje \\texttt{g\\_c09\\_break=next}." + }, + { + "kind": "block", + "id": "task03.a6", + "title": "A6 STATE · AKTYWNE — VALID pozostaje VALID także po odrzuceniu", + "content_tex": "Break przechodzi przez offsety \\texttt{0 -> 16 -> 40 -> 40 -> 32 -> 32}. Obie porażki są samopętlą stanu: zmienia się wynik operacji, ale nie break. Nie ma przejścia do wartości poniżej start ani powyżej end." + }, + { + "kind": "block", + "id": "task03.a7", + "title": "A7 RUNTIME · AKTYWNE — offsety zamiast niestabilnych adresów", + "content_tex": "Checkpoint publikuje cztery offsety \\texttt{40,40,32,32} oraz flagi \\texttt{preserved=1} i \\texttt{bounds=1}. Adresy bezwzględne hosta mogą się zmieniać przez ASLR, dlatego dowód porównuje różnice względem startu." + }, + { + "kind": "block", + "id": "task03.a8", + "title": "A8 PATTERNS · AKTYWNE — validate then commit", + "content_tex": "Wzorzec silnej gwarancji błędu brzmi: najpierw policz bez przepełnienia, następnie sprawdź granice, a dopiero potem zmień jedyny stan. Wskaźnik break pozostaje obserwowalnie niezmieniony po odrzuconej operacji." + }, + { + "kind": "exercise", + "id": "task03.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Zapisz stan break po sekwencji \\texttt{+16,+24,fail,-8,fail}. Dla obu porażek wskaż sprawdzaną granicę i udowodnij, że zwrot \\texttt{(void *)-1} nie zmienia break. Porównaj stałe offsety hosta i RV32I.", + "evidence_tex": "Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę.", + "criterion": "Host i Hazard3: grow=40, rejected_grow=40, shrink=32, rejected_shrink=32, preserved=1, bounds=1, pass=1 i kod 0. Linker: __heap_start oraz __heap_end są wyrównane do 16 B, __heap_end == __stack_bottom." + }, + { + "kind": "block", + "id": "task03.worksheet", + "title": "TASK03 · Zapis dowodu ucznia", + "content_tex": "\\textbf{1. Przewidywanie przed uruchomieniem}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{2. Wynik programu hostowego}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. Wynik RV32I i kod wyjścia}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\\par\\noindent\\dotfill\\par\\noindent\\dotfill" + } + ], + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_ref": "C09.KW01" + }, + "task04": { + "title": "Wyrównany smalloc append-only", + "uuid": "e745e1ea-9494-5b75-9596-816022153237", + "prompt_tex": "Dla żądań 1 B i 17 B wyprowadź rozmiar nagłówka, rezerwację po align-up, adres obu payloadów i zmianę break. Wskaż, dlaczego brak \\texttt{c09\\_sfree} jest częścią kontraktu, a reset areny nie jest odpowiednikiem \\texttt{free(pointer)}.", + "criterion": "Host i Hazard3: header=16, first=32, second=48, delta=32, aligned=1, metadata=1, append=1, reset=1, pass=1 i kod 0. Nagłówki mają sequence 1 i 2; po resecie pierwszy payload wraca pod poprzedni pierwszy adres.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — API ma celowo małą władzę", + "content_tex": "Klient może przydzielić payload i zresetować całą arenę. Nie może zwolnić jednego bloku ani przekazać modelowi wskaźnika do picolibc. \\texttt{c09\\_smalloc} pobiera surowy fragment wyłącznie przez ograniczone \\texttt{c09\\_sbrk}." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — 16 B metadanych bezpośrednio przed payloadem", + "content_tex": "Nagłówek ma cztery pola \\texttt{uint32\\_t}: magic, requested, reserved i sequence. Jego rozmiar wynosi 16 B. Zwrócony adres to \\texttt{header+1}; inspekcja kontrolnie cofa się o dokładnie jeden rzeczywisty nagłówek." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "smalloc, inspect, reset i c09_sbrk są zwykłymi wywołaniami bezpośrednimi; przykład nie zawiera callbacku, ISR ani dynamicznie wybieranej strategii." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — geometria dwóch bloków", + "content_tex": "Żądanie 1 B daje \\texttt{align16(16+1)=32}; żądanie 17 B daje \\texttt{align16(16+17)=48}. Pierwszy payload leży 16 B od startu, drugi 48 B od startu, więc ich delta wynosi 32 B. Oba adresy są wielokrotnością 16." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — size, align, reserve, header, payload", + "content_tex": "Kod odrzuca zero i przepełnienie, zaokrągla sumę nagłówka i żądania, sprawdza reprezentowalność jako \\texttt{ptrdiff\\_t}, rezerwuje cały blok jednym \\texttt{c09\\_sbrk}, zapisuje cztery pola nagłówka i dopiero wtedy zwraca payload." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — EMPTY, TWO BLOCKS, RESET", + "content_tex": "Arena przechodzi \\texttt{EMPTY -> seq1 -> seq1+seq2}. Brak indywidualnego free oznacza, że break tylko rośnie. \\texttt{c09\\_smalloc\\_reset} wykonuje jedno przejście z dowolnej zawartości do EMPTY i unieważnia oba wskaźniki naraz." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — pamięć potwierdza header przed payloadem", + "content_tex": "W checkpointcie odczytaj \\texttt{first-16}: słowo magic to \\texttt{0x534D414C}, requested=1, reserved=32, sequence=1. Pod \\texttt{second-16} odpowiednie wartości to 17, 48 i 2. Globale potwierdzają deltę 32 i reset." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — bump allocator z jawną granicą użycia", + "content_tex": "Append-only arena jest wartościowa dla fazowego scratch storage, gdy wszystkie obiekty mają wspólny czas życia. Nie zastępuje ogólnego malloc: brak selekcji, ponownego użycia pojedynczych luk, split, coalescing i niezależnego free." + } + ], + "flow": [ + { + "kind": "block", + "id": "task04.a1", + "title": "A1 CONTEXT · AKTYWNE — API ma celowo małą władzę", + "content_tex": "\\textbf{Zachowane materiały:} \\texttt{src/tasks/task04\\_smalloc.c}, \\texttt{src/runtime/c09\\_smalloc.c}, \\texttt{src/runtime/c09\\_smalloc.h}, \\texttt{src/runtime/c09\\_bounded\\_sbrk.c}, \\texttt{src/runtime/c09\\_bounded\\_sbrk.h}.\\par Klient może przydzielić payload i zresetować całą arenę. Nie może zwolnić jednego bloku ani przekazać modelowi wskaźnika do picolibc. \\texttt{c09\\_smalloc} pobiera surowy fragment wyłącznie przez ograniczone \\texttt{c09\\_sbrk}." + }, + { + "kind": "block", + "id": "task04.a2", + "title": "A2 STRUCTURE · AKTYWNE — 16 B metadanych bezpośrednio przed payloadem", + "content_tex": "Nagłówek ma cztery pola \\texttt{uint32\\_t}: magic, requested, reserved i sequence. Jego rozmiar wynosi 16 B. Zwrócony adres to \\texttt{header+1}; inspekcja kontrolnie cofa się o dokładnie jeden rzeczywisty nagłówek." + }, + { + "kind": "block", + "id": "task04.a3", + "title": "A3 DISPATCH · N/D", + "content_tex": "\\textbf{N/D.} smalloc, inspect, reset i c09\\_sbrk są zwykłymi wywołaniami bezpośrednimi; przykład nie zawiera callbacku, ISR ani dynamicznie wybieranej strategii." + }, + { + "kind": "block", + "id": "task04.a4", + "title": "A4 APPLICATION · AKTYWNE — geometria dwóch bloków", + "content_tex": "Żądanie 1 B daje \\texttt{align16(16+1)=32}; żądanie 17 B daje \\texttt{align16(16+17)=48}. Pierwszy payload leży 16 B od startu, drugi 48 B od startu, więc ich delta wynosi 32 B. Oba adresy są wielokrotnością 16." + }, + { + "kind": "block", + "id": "task04.a5", + "title": "A5 FLOW · AKTYWNE — size, align, reserve, header, payload", + "content_tex": "Kod odrzuca zero i przepełnienie, zaokrągla sumę nagłówka i żądania, sprawdza reprezentowalność jako \\texttt{ptrdiff\\_t}, rezerwuje cały blok jednym \\texttt{c09\\_sbrk}, zapisuje cztery pola nagłówka i dopiero wtedy zwraca payload." + }, + { + "kind": "block", + "id": "task04.a6", + "title": "A6 STATE · AKTYWNE — EMPTY, TWO BLOCKS, RESET", + "content_tex": "Arena przechodzi \\texttt{EMPTY -> seq1 -> seq1+seq2}. Brak indywidualnego free oznacza, że break tylko rośnie. \\texttt{c09\\_smalloc\\_reset} wykonuje jedno przejście z dowolnej zawartości do EMPTY i unieważnia oba wskaźniki naraz." + }, + { + "kind": "block", + "id": "task04.a7", + "title": "A7 RUNTIME · AKTYWNE — pamięć potwierdza header przed payloadem", + "content_tex": "W checkpointcie odczytaj \\texttt{first-16}: słowo magic to \\texttt{0x534D414C}, requested=1, reserved=32, sequence=1. Pod \\texttt{second-16} odpowiednie wartości to 17, 48 i 2. Globale potwierdzają deltę 32 i reset." + }, + { + "kind": "block", + "id": "task04.a8", + "title": "A8 PATTERNS · AKTYWNE — bump allocator z jawną granicą użycia", + "content_tex": "Append-only arena jest wartościowa dla fazowego scratch storage, gdy wszystkie obiekty mają wspólny czas życia. Nie zastępuje ogólnego malloc: brak selekcji, ponownego użycia pojedynczych luk, split, coalescing i niezależnego free." + }, + { + "kind": "exercise", + "id": "task04.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Dla żądań 1 B i 17 B wyprowadź rozmiar nagłówka, rezerwację po align-up, adres obu payloadów i zmianę break. Wskaż, dlaczego brak \\texttt{c09\\_sfree} jest częścią kontraktu, a reset areny nie jest odpowiednikiem \\texttt{free(pointer)}.", + "evidence_tex": "Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę.", + "criterion": "Host i Hazard3: header=16, first=32, second=48, delta=32, aligned=1, metadata=1, append=1, reset=1, pass=1 i kod 0. Nagłówki mają sequence 1 i 2; po resecie pierwszy payload wraca pod poprzedni pierwszy adres." + }, + { + "kind": "block", + "id": "task04.worksheet", + "title": "TASK04 · Zapis dowodu ucznia", + "content_tex": "\\textbf{1. Przewidywanie przed uruchomieniem}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{2. Wynik programu hostowego}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. Wynik RV32I i kod wyjścia}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\\par\\noindent\\dotfill\\par\\noindent\\dotfill" + } + ], + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_ref": "C09.KW01" + }, + "task05": { + "title": "malloc/free picolibc jako czarna skrzynka", + "uuid": "9a7174f1-efb7-5c18-afbe-1a34ee6da0b7", + "prompt_tex": "Nie zakładając formatu nagłówka libc, wypisz własności możliwe do sprawdzenia przez klienta dwóch przydziałów. Uruchom host i Hazard3, sprawdź checksum oraz mapę, a w ELF wykaż współistnienie vendorowego \\texttt{\\_sbrk} i picolibc \\texttt{sbrk}.", + "criterion": "Host i Hazard3: nonnull=1, delta_nonzero=1, checksum=4612, nonoverlap=1, aligned=1, freed=1, pass=1 i kod 0. Mapa RV32I zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o i libc_misc_picosbrk.c.o. ELF definiuje _sbrk, sbrk, malloc, free, __heap_start i __heap_end.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — klient nie zna wnętrza picolibc", + "content_tex": "Kod tasku używa tylko \\texttt{malloc} i \\texttt{free}. Linker łączy picolibc z platformą przez \\texttt{sbrk} oraz symbole granic. Vendorowe \\texttt{\\_sbrk} pozostaje osobnym, nieużywanym przez malloc symbolem startu Hazard3." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — obraz składa się z czterech warstw", + "content_tex": "ELF zawiera klienta, człony \\texttt{malloc/free}, człon \\texttt{picosbrk} i platformowy startup. Skrypt linkera dostarcza \\texttt{\\_\\_heap\\_start/\\_\\_heap\\_end}; crt0 ustawia \\texttt{gp/tp} i zeruje BSS/TBSS. Mapa pokazuje, który obiekt wniósł każdy publiczny symbol." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "Klient wywołuje malloc i free bezpośrednio; badany przebieg nie przekazuje callbacku, nie obsługuje ISR i nie wybiera alokatora przez tablicę funkcji." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — kontrakt dwóch niezależnych payloadów", + "content_tex": "Program żąda 13 B i 29 B, zapisuje dwie różne sekwencje, sumuje odczytane bajty do 4612 i sprawdza rozłączność półotwartych zakresów adresów. Mierzy co najmniej 8-bajtowe wyrównanie, ale nie narzuca odległości między blokami." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — allocate, use, verify, release", + "content_tex": "Po dwóch udanych przydziałach kod zapisuje i natychmiast odczytuje oba zakresy, oblicza checksum i warunki adresowe, zwalnia najpierw drugi, potem pierwszy blok, ustawia \\texttt{freed=1} i zatrzymuje się w checkpointcie." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — własność payloadu kończy się w free", + "content_tex": "Każdy wskaźnik przechodzi od braku zasobu do stanu OWNED po udanym malloc, następnie USED po zapisie i RELEASED po free. Program nie dereferencjuje wskaźnika w RELEASED i nie bada, czy następny malloc odzyska ten sam adres." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — wykonanie plus audyt ELF", + "content_tex": "Hazard3 kończy program kodem 0; globale pokazują checksum 4612, rozłączność, alignment i oba free. \\texttt{nm} musi równocześnie pokazać \\texttt{\\_sbrk} oraz \\texttt{sbrk}, a mapa trzy człony picolibc związane z malloc, free i dostawcą pamięci." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — test kontraktu bez zgadywania implementacji", + "content_tex": "Poprawny test czarnej skrzynki wymusza własności API, ale nie zależy od prywatnego nagłówka, kierunku wzrostu sterty, dokładnej delty adresów ani ponownego użycia po free. Dzięki temu pozostaje wartościowy po zmianie implementacji libc." + } + ], + "flow": [ + { + "kind": "block", + "id": "task05.a1", + "title": "A1 CONTEXT · AKTYWNE — klient nie zna wnętrza picolibc", + "content_tex": "\\textbf{Zachowane materiały:} \\texttt{src/tasks/task05\\_picolibc\\_malloc.c}, \\texttt{crt0.S}, \\texttt{link/hazard3\\_c09.ld}.\\par Kod tasku używa tylko \\texttt{malloc} i \\texttt{free}. Linker łączy picolibc z platformą przez \\texttt{sbrk} oraz symbole granic. Vendorowe \\texttt{\\_sbrk} pozostaje osobnym, nieużywanym przez malloc symbolem startu Hazard3." + }, + { + "kind": "block", + "id": "task05.a2", + "title": "A2 STRUCTURE · AKTYWNE — obraz składa się z czterech warstw", + "content_tex": "ELF zawiera klienta, człony \\texttt{malloc/free}, człon \\texttt{picosbrk} i platformowy startup. Skrypt linkera dostarcza \\texttt{\\_\\_heap\\_start/\\_\\_heap\\_end}; crt0 ustawia \\texttt{gp/tp} i zeruje BSS/TBSS. Mapa pokazuje, który obiekt wniósł każdy publiczny symbol." + }, + { + "kind": "block", + "id": "task05.a3", + "title": "A3 DISPATCH · N/D", + "content_tex": "\\textbf{N/D.} Klient wywołuje malloc i free bezpośrednio; badany przebieg nie przekazuje callbacku, nie obsługuje ISR i nie wybiera alokatora przez tablicę funkcji." + }, + { + "kind": "block", + "id": "task05.a4", + "title": "A4 APPLICATION · AKTYWNE — kontrakt dwóch niezależnych payloadów", + "content_tex": "Program żąda 13 B i 29 B, zapisuje dwie różne sekwencje, sumuje odczytane bajty do 4612 i sprawdza rozłączność półotwartych zakresów adresów. Mierzy co najmniej 8-bajtowe wyrównanie, ale nie narzuca odległości między blokami." + }, + { + "kind": "block", + "id": "task05.a5", + "title": "A5 FLOW · AKTYWNE — allocate, use, verify, release", + "content_tex": "Po dwóch udanych przydziałach kod zapisuje i natychmiast odczytuje oba zakresy, oblicza checksum i warunki adresowe, zwalnia najpierw drugi, potem pierwszy blok, ustawia \\texttt{freed=1} i zatrzymuje się w checkpointcie." + }, + { + "kind": "block", + "id": "task05.a6", + "title": "A6 STATE · AKTYWNE — własność payloadu kończy się w free", + "content_tex": "Każdy wskaźnik przechodzi od braku zasobu do stanu OWNED po udanym malloc, następnie USED po zapisie i RELEASED po free. Program nie dereferencjuje wskaźnika w RELEASED i nie bada, czy następny malloc odzyska ten sam adres." + }, + { + "kind": "block", + "id": "task05.a7", + "title": "A7 RUNTIME · AKTYWNE — wykonanie plus audyt ELF", + "content_tex": "Hazard3 kończy program kodem 0; globale pokazują checksum 4612, rozłączność, alignment i oba free. \\texttt{nm} musi równocześnie pokazać \\texttt{\\_sbrk} oraz \\texttt{sbrk}, a mapa trzy człony picolibc związane z malloc, free i dostawcą pamięci." + }, + { + "kind": "block", + "id": "task05.a8", + "title": "A8 PATTERNS · AKTYWNE — test kontraktu bez zgadywania implementacji", + "content_tex": "Poprawny test czarnej skrzynki wymusza własności API, ale nie zależy od prywatnego nagłówka, kierunku wzrostu sterty, dokładnej delty adresów ani ponownego użycia po free. Dzięki temu pozostaje wartościowy po zmianie implementacji libc." + }, + { + "kind": "exercise", + "id": "task05.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Nie zakładając formatu nagłówka libc, wypisz własności możliwe do sprawdzenia przez klienta dwóch przydziałów. Uruchom host i Hazard3, sprawdź checksum oraz mapę, a w ELF wykaż współistnienie vendorowego \\texttt{\\_sbrk} i picolibc \\texttt{sbrk}.", + "evidence_tex": "Przewidywany wynik, odczyt programu hostowego wraz z kodem powrotu, wartość obiektu wynikowego w obrazie RV32I oraz krótki wniosek wyjaśniający zgodność albo różnicę.", + "criterion": "Host i Hazard3: nonnull=1, delta_nonzero=1, checksum=4612, nonoverlap=1, aligned=1, freed=1, pass=1 i kod 0. Mapa RV32I zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o i libc_misc_picosbrk.c.o. ELF definiuje _sbrk, sbrk, malloc, free, __heap_start i __heap_end." + }, + { + "kind": "block", + "id": "task05.worksheet", + "title": "TASK05 · Zapis dowodu ucznia", + "content_tex": "\\textbf{1. Przewidywanie przed uruchomieniem}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{2. Wynik programu hostowego}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. Wynik RV32I i kod wyjścia}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar}\\par\\noindent\\dotfill\\par\\noindent\\dotfill" + } + ], + "educational_requirement_refs": [ + "C09.WE01" + ], + "learning_effect_refs": [ + "C09.EN01", + "C09.EK01" + ], + "assessment_criterion_ref": "C09.KW01" + } + }, + "tasks_order": [ + "task01", + "task02", + "task03", + "task04", + "task05" + ] +} diff --git a/json/card_spec.json b/json/card_spec.json new file mode 100644 index 0000000..64f2521 --- /dev/null +++ b/json/card_spec.json @@ -0,0 +1,366 @@ +{ + "card": { + "number": "09", + "slug": "smalloc-sbrk-libc", + "title": "smalloc, sbrk i minimalne libc", + "topic": "K&R 5.4 i 7.8: granica libc, bounded sbrk, prosty smalloc oraz malloc/free picolibc", + "status": "Gotowa", + "version": "v00.01", + "revision_date": "2026-07-20T00:00:00+02:00" + }, + "front": { + "goal": "Uczeń rozdziela wybór funkcji z archiwum libc, kontrakt dostawcy pamięci sbrk i politykę alokatora. Najpierw dowodzi, że strlen nie potrzebuje sterty, potem kontrolowanie zrywa zależność malloc do sbrk, buduje ograniczony model break i wyrównany smalloc, a na końcu traktuje prawdziwe malloc/free picolibc jako czarną skrzynkę sprawdzaną przez kontrakt.", + "scope": "Pięć zachowanych przykładów działa na hoście i RV32I tam, gdzie istnieje program uruchamialny. Task02 jest zamierzonym expected-fail linkera i nie ma obrazu runtime. W aktualnym GCC 15.2 biblioteka to picolibc: jej malloc odwołuje się do sbrk, podczas gdy vendorowy init.S Hazard3 definiuje inny symbol \\_sbrk. Własny linker ogranicza stertę symbolami \\_\\_heap\\_start i \\_\\_heap\\_end oraz rezerwuje 64 KiB stosu." + }, + "learning": { + "reasoning_label": "Trzy warstwy jednego przydziału", + "reasoning": "Uczeń wyprowadza osobno: wybór członu archiwum, wiązanie symbolu dostawcy pamięci oraz inwarianty polityki alokacji, zamiast nazywać wszystkie trzy mechanizmy stertą.", + "practice_label": "Dowód z mapy, stanu i wykonania", + "practice": "Uczeń porównuje mapę linkera, kontrolowany błąd symbolu, globalne checkpointy, wynik hosta i kod wyjścia Hazard3, a wnioski ogranicza do naprawdę zmierzonych własności.", + "criterion": "Task01: length=16, strlen.c.o obecny, człony malloc/free/picosbrk nieobecne. Task02: link kończy się niezerowo przez brak __wrap_sbrk, powstaje log, ale nie ELF. Task03: offset break 40 po wzroście, 40 po odrzuconym wzroście, 32 po skurczeniu i 32 po odrzuconym zejściu poniżej początku; granice są zachowane. Task04: header=16, rezerwacje 32 i 48, delta payloadów 32, alignment=16, kolejność append-only i reset całej areny. Task05: dwa niepuste, rozłączne i co najmniej 8-bajtowo wyrównane bloki, checksum=4612, oba free wykonane; mapa zawiera malloc/free/picosbrk, a ELF równocześnie _sbrk i sbrk. Wszystkie uruchamialne programy host i Hazard3 zwracają 0.", + "requirement": "Czytanie mapy linkera i symboli ELF, bezpieczna arytmetyka granic, wyrównanie bloków oraz rozróżnienie modelu dydaktycznego od kontraktu prawdziwej biblioteki." + }, + "sections": [ + { + "title": "1 — Funkcja z libc nie oznacza automatycznie sterty", + "content_tex": "Archiwum \\texttt{libc.a} nie jest włączane do programu w całości. Linker pobiera człon, który rozwiązuje potrzebny symbol, a następne człony tylko wtedy, gdy pojawią się kolejne nierozwiązane odwołania. Dlatego bezpośrednie wywołanie \\texttt{strlen} z opcją \\texttt{-fno-builtin} wybiera \\texttt{strlen.c.o}, lecz nie wybiera \\texttt{libc\\_stdlib\\_malloc.c.o} ani \\texttt{libc\\_misc\\_picosbrk.c.o}. Dowodem jest mapa linkera, a nie samo dołączenie nagłówka \\texttt{string.h}.\n\nTask01 rozstrzyga wyłącznie tę zależność. Nie dowodzi, że każda funkcja tekstowa jest bezkosztowa ani że całe libc nie używa pamięci dynamicznej." + }, + { + "title": "2 — malloc potrzebuje sbrk, lecz _sbrk to inna nazwa", + "content_tex": "W badanym GCC 15.2 używane jest \\textbf{picolibc}, nie newlib. Człon \\texttt{libc\\_stdlib\\_malloc.c.o} ma niezdefiniowane odwołanie do \\texttt{sbrk}. Picolibc może dostarczyć je z \\texttt{libc\\_misc\\_picosbrk.c.o}; ten kod opiera granice na symbolach linkera \\texttt{\\_\\_heap\\_start} i \\texttt{\\_\\_heap\\_end}. Z kolei \\texttt{vendor/Hazard3/.../init.S} definiuje \\texttt{\\_sbrk} z jednym podkreśleniem. Dla linkera są to dwa różne symbole, więc mogą współistnieć w Task05.\n\nTask02 używa \\texttt{--wrap=sbrk}: każde odwołanie do \\texttt{sbrk} zostaje skierowane do celowo brakującego \\texttt{\\_\\_wrap\\_sbrk}. Oczekiwany błąd jest kontrolowanym testem krawędzi \\texttt{malloc -> sbrk}, a nie awarią całego projektu." + }, + { + "title": "3 — Od alloc z K&R 5.4 do bounded sbrk i smalloc", + "content_tex": "Liniowy \\texttt{alloc} z K\\&R 5.4 przesuwa wskaźnik w stałej tablicy. Jest prosty, ale nie odzyskuje dowolnego bloku, nie wybiera najlepszego dopasowania, nie dzieli i nie scala wolnych obszarów. \\texttt{afree} może cofnąć wskaźnik jedynie do adresu należącego do areny, więc bez dyscypliny stosowej łatwo unieważnić późniejsze przydziały. Historyczna tablica bajtów nie jest też ogólną deklaracją wyrównania dla każdego typu.\n\nTask03 zachowuje istotę modelu, lecz jawnie wymusza \\texttt{heap\\_start <= brk <= heap\\_end}; odrzucona operacja nie zmienia break. Task04 dodaje 16-bajtowe wyrównanie i 16-bajtowy nagłówek bezpośrednio przed payloadem. Nadal jest to alokator append-only: nie ma \\texttt{sfree}, listy wolnych bloków, split ani coalescing. Jedyną operacją odzyskania jest reset całej areny, który unieważnia wszystkie wcześniejsze wskaźniki." + }, + { + "title": "4 — Prawdziwe malloc/free jako czarna skrzynka", + "content_tex": "Task05 nie zakłada, że picolibc ma taki sam nagłówek lub strategię jak \\texttt{c09\\_smalloc}. Program sprawdza tylko publiczny kontrakt potrzebny klientowi: dwa udane przydziały dają używalne, rozłączne obszary; zapisane bajty można odczytać; adresy spełniają mierzone wyrównanie; oba bloki są przekazane do \\texttt{free}. Nie odczytuje pamięci po \\texttt{free} i nie wymaga ponownego użycia tego samego adresu.\n\nMinimalny startup ustawia \\texttt{gp}, pojedynczą bazę TLS \\texttt{tp}, zeruje \\texttt{.tbss} i \\texttt{.bss}, a następnie wywołuje \\texttt{main}. Skrypt linkera pozostawia \\texttt{\\_\\_heap\\_end} 64 KiB przed \\texttt{\\_\\_stack\\_top} i ma \\texttt{ASSERT} zatrzymujący obraz, gdy sekcje zajmą zarezerwowany obszar." + } + ], + "tasks": [ + { + "id": "task01", + "chapter": "7.8", + "title": "strlen z libc bez sterty", + "idea_tex": "libc.a: wybór strlen.c.o", + "priority": "kluczowe", + "key": true, + "source": "src/tasks/task01_libc_without_heap.c", + "prompt_tex": "Przed linkowaniem przewidź, które człony \\texttt{libc.a} są potrzebne przez bezpośrednie \\texttt{strlen}. Uruchom program, a potem w mapie udowodnij obecność \\texttt{strlen.c.o} i nieobecność członów malloc, free oraz picosbrk.", + "criterion": "Host i Hazard3: length=16, pass=1, kod 0. Mapa RV32I zawiera libc.a(strlen.c.o), ale nie zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o ani libc_misc_picosbrk.c.o.", + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — klient, archiwum i brak dostawcy pamięci", + "content_tex": "Klient wywołuje publiczne \\texttt{strlen}. Granicą systemu jest linker wybierający potrzebny człon \\texttt{libc.a}; Task01 nie deklaruje ani nie wywołuje \\texttt{malloc}, \\texttt{free} lub \\texttt{sbrk}." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — jedna krawędź symboliczna", + "content_tex": "Przy \\texttt{-fno-builtin} obiekt tasku zachowuje niezdefiniowany symbol \\texttt{strlen}. Linker rozwiązuje go przez \\texttt{strlen.c.o}. Ten człon nie tworzy następnej krawędzi do alokatora, dlatego graf zależności kończy się bez warstwy sterty." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "strlen i checkpoint są wywołaniami bezpośrednimi; program nie ma callbacku, ISR, wskaźnika funkcji ani dynamicznego wyboru implementacji." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — dwa niezależne warunki sukcesu", + "content_tex": "Warunek wykonania to długość 16 dla napisu \\texttt{picolibc-no-heap}. Warunek obrazu to obecność wyłącznie potrzebnego członu tekstowego i brak trzech nazw członów związanych z przydziałem. Sam kod wyjścia nie zastępuje kontroli mapy." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — kompilacja, selekcja archiwum, wywołanie", + "content_tex": "Kompilator pozostawia call do \\texttt{strlen}; linker przegląda archiwum i pobiera \\texttt{strlen.c.o}; startup uruchamia \\texttt{main}; funkcja oblicza 16; checkpoint publikuje wynik; \\texttt{main} zwraca 0. Każdy etap ma inny artefakt dowodowy." + }, + { + "id": "A6", + "status": "unavailable", + "title": "STATE", + "reason": "Program wykonuje jednorazowy, czysty pomiar długości i nie ma domenowego obiektu przechodzącego przez istotne stany ani zasobu o cyklu życia." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — global i mapa odpowiadają na inne pytania", + "content_tex": "W \\texttt{task01\\_debug\\_checkpoint} global \\texttt{g\\_task01\\_length} ma wartość 16, a \\texttt{g\\_task01\\_pass} wartość 1. Osobno \\texttt{prog.map} wskazuje \\texttt{libc.a(strlen.c.o)}; test mapy odrzuca każdą nazwę członu heap." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — płać za osiągalne symbole, nie za nagłówek", + "content_tex": "Dla archiwum statycznego właściwym wzorcem audytu jest śledzenie nierozwiązanych symboli i pobranych członów. \\texttt{\\#include } dostarcza deklarację; nie jest poleceniem dołączenia całej implementacji libc." + } + ] + }, + { + "id": "task02", + "chapter": "5.4 + ABI", + "title": "Kontrolowany brak dostawcy sbrk", + "idea_tex": "expected-fail: malloc -> sbrk", + "priority": "kluczowe", + "key": true, + "source": "src/tasks/task02_malloc_requires_sbrk.c", + "prompt_tex": "Narysuj łańcuch \\texttt{main -> malloc -> sbrk}. Następnie uruchom \\texttt{make expected-fail} i wyjaśnij, dlaczego \\texttt{--wrap=sbrk} zmienia ostatnią krawędź na \\texttt{\\_\\_wrap\\_sbrk}, dlaczego brak ELF jest wynikiem poprawnym oraz czego ten test nie mówi o runtime.", + "evidence_tex": "Przewidywana brakująca nazwa, status kompilacji obiektu, niezerowy status linkera, cytat dwóch sygnatur z logu oraz sprawdzenie, że końcowy ELF nie istnieje.", + "worksheet_step2": "Wynik kompilacji task.o", + "worksheet_step3": "Status i sygnatury błędu linkera", + "criterion": "Kompilacja task.o kończy się sukcesem. Link ma niezerowy status, log wymienia libc_stdlib_malloc.c.o i undefined reference to __wrap_sbrk, a must-not-exist.elf nie istnieje. Nie wykonuje się testu host ani Hazard3.", + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — kontrolowane przecięcie granicy platformy", + "content_tex": "Kod klienta żąda 16 B przez \\texttt{malloc}. Opcja linkera przechwytuje wyłącznie symbol dostawcy pamięci, dzięki czemu testuje granicę libc--platforma bez usuwania lub modyfikowania systemowego archiwum." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — caller, człon malloc i brakujący wrapper", + "content_tex": "Obiekt tasku wnosi odwołanie do \\texttt{malloc}; linker pobiera \\texttt{libc\\_stdlib\\_malloc.c.o}. Jego odwołania do \\texttt{sbrk} są przez \\texttt{--wrap} przepisywane na \\texttt{\\_\\_wrap\\_sbrk}. Żaden obiekt celowo nie definiuje tej ostatniej nazwy." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "Wywołanie malloc jest bezpośrednie, a --wrap jest transformacją nazw podczas linkowania, nie mechanizmem callbacku, ISR ani dynamicznego dispatchu w programie." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — porażka ma precyzyjną sygnaturę", + "content_tex": "Sukces testu oznacza jednocześnie: obiekt C powstał, link zwrócił status różny od zera, diagnostyka zawiera \\texttt{\\_\\_wrap\\_sbrk} oraz nazwę członu malloc, a końcowy ELF nie istnieje. Inny błąd linkera nie spełnia kryterium." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — expected-fail jako kontrolowany przebieg", + "content_tex": "Skrypt usuwa stary artefakt, kompiluje task, uruchamia link w trybie dopuszczającym błąd, zapisuje status i log, po czym przywraca rygor \\texttt{set -e}. Dopiero cztery asercje zamieniają oczekiwaną porażkę programu w sukces testu." + }, + { + "id": "A6", + "status": "unavailable", + "title": "STATE", + "reason": "Linkowanie kończy się przed utworzeniem obrazu wykonywalnego, więc nie istnieje runtime, breakpoint ani obiekt domenowy zmieniający stan w czasie wykonania." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — dowodem jest diagnostyka przed runtime", + "content_tex": "Odczytaj \\texttt{expected-link-failure.log}: cztery relokacje z \\texttt{libc\\_stdlib\\_malloc.c.o} wskazują brak \\texttt{\\_\\_wrap\\_sbrk}. Następnie sprawdź nieobecność \\texttt{must-not-exist.elf}; nie wolno wymyślać wartości runtime dla nieistniejącego programu." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — test negatywny musi odrzucać zły powód", + "content_tex": "Wzorzec expected-fail wymaga konkretnej sygnatury błędu i braku produktu końcowego. Sam warunek „polecenie nie przeszło” byłby za słaby, bo zaliczyłby literówkę, brak kompilatora lub błędny skrypt linkera." + } + ] + }, + { + "id": "task03", + "chapter": "5.4", + "title": "Bounded sbrk i atomowy błąd", + "idea_tex": "ograniczony break i atomowy błąd", + "priority": "kluczowe", + "key": true, + "sources": [ + "src/tasks/task03_bounded_sbrk.c", + "src/runtime/c09_bounded_sbrk.c", + "src/runtime/c09_bounded_sbrk.h", + "link/hazard3_c09.ld" + ], + "prompt_tex": "Zapisz stan break po sekwencji \\texttt{+16,+24,fail,-8,fail}. Dla obu porażek wskaż sprawdzaną granicę i udowodnij, że zwrot \\texttt{(void *)-1} nie zmienia break. Porównaj stałe offsety hosta i RV32I.", + "criterion": "Host i Hazard3: grow=40, rejected_grow=40, shrink=32, rejected_shrink=32, preserved=1, bounds=1, pass=1 i kod 0. Linker: __heap_start oraz __heap_end są wyrównane do 16 B, __heap_end == __stack_bottom.", + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — model oddzielony od libc", + "content_tex": "Task03 eksportuje nazwę \\texttt{c09\\_sbrk}, aby nie przejąć symbolu \\texttt{sbrk} picolibc. Na hoście granice obejmują statyczną arenę 512 B; na RV32I pochodzą z linkera. Ten sam algorytm widzi tylko trzy adresy." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — start, break i end", + "content_tex": "Stan ma jedną zmienną \\texttt{g\\_c09\\_break} oraz niezmienne granice \\texttt{start} i \\texttt{end}. Każdy poprawny stan spełnia \\texttt{start <= break <= end}; wolny obszar ma rozmiar \\texttt{end-break}, a zajęty prefiks \\texttt{break-start}." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "Wszystkie operacje c09_sbrk i gettery są wywoływane bezpośrednio; nie ma callbacku, ISR, tablicy funkcji ani wyboru implementacji w runtime." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — tabela pięciu przejść", + "content_tex": "Od offsetu 0 operacje dają kolejno: \\texttt{+16 -> 16}, \\texttt{+24 -> 40}, zbyt duży wzrost \\texttt{-> 40}, \\texttt{-8 -> 32}, zejście o 33 \\texttt{-> 32}. Udany call zwraca stary break; porażka zwraca wszystkie bity ustawione." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — najpierw zakres, potem commit", + "content_tex": "Dla wzrostu kod porównuje wielkość z \\texttt{end-current}; dla spadku oblicza bezpiecznie moduł także dla \\texttt{PTRDIFF\\_MIN} i porównuje go z \\texttt{current-start}. Dopiero po zaliczeniu warunku zapisuje \\texttt{g\\_c09\\_break=next}." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — VALID pozostaje VALID także po odrzuceniu", + "content_tex": "Break przechodzi przez offsety \\texttt{0 -> 16 -> 40 -> 40 -> 32 -> 32}. Obie porażki są samopętlą stanu: zmienia się wynik operacji, ale nie break. Nie ma przejścia do wartości poniżej start ani powyżej end." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — offsety zamiast niestabilnych adresów", + "content_tex": "Checkpoint publikuje cztery offsety \\texttt{40,40,32,32} oraz flagi \\texttt{preserved=1} i \\texttt{bounds=1}. Adresy bezwzględne hosta mogą się zmieniać przez ASLR, dlatego dowód porównuje różnice względem startu." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — validate then commit", + "content_tex": "Wzorzec silnej gwarancji błędu brzmi: najpierw policz bez przepełnienia, następnie sprawdź granice, a dopiero potem zmień jedyny stan. Wskaźnik break pozostaje obserwowalnie niezmieniony po odrzuconej operacji." + } + ] + }, + { + "id": "task04", + "chapter": "5.4", + "title": "Wyrównany smalloc append-only", + "idea_tex": "nagłówek, alignment i reset areny", + "priority": "kluczowe", + "key": true, + "sources": [ + "src/tasks/task04_smalloc.c", + "src/runtime/c09_smalloc.c", + "src/runtime/c09_smalloc.h", + "src/runtime/c09_bounded_sbrk.c", + "src/runtime/c09_bounded_sbrk.h" + ], + "prompt_tex": "Dla żądań 1 B i 17 B wyprowadź rozmiar nagłówka, rezerwację po align-up, adres obu payloadów i zmianę break. Wskaż, dlaczego brak \\texttt{c09\\_sfree} jest częścią kontraktu, a reset areny nie jest odpowiednikiem \\texttt{free(pointer)}.", + "criterion": "Host i Hazard3: header=16, first=32, second=48, delta=32, aligned=1, metadata=1, append=1, reset=1, pass=1 i kod 0. Nagłówki mają sequence 1 i 2; po resecie pierwszy payload wraca pod poprzedni pierwszy adres.", + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — API ma celowo małą władzę", + "content_tex": "Klient może przydzielić payload i zresetować całą arenę. Nie może zwolnić jednego bloku ani przekazać modelowi wskaźnika do picolibc. \\texttt{c09\\_smalloc} pobiera surowy fragment wyłącznie przez ograniczone \\texttt{c09\\_sbrk}." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — 16 B metadanych bezpośrednio przed payloadem", + "content_tex": "Nagłówek ma cztery pola \\texttt{uint32\\_t}: magic, requested, reserved i sequence. Jego rozmiar wynosi 16 B. Zwrócony adres to \\texttt{header+1}; inspekcja kontrolnie cofa się o dokładnie jeden rzeczywisty nagłówek." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "smalloc, inspect, reset i c09_sbrk są zwykłymi wywołaniami bezpośrednimi; przykład nie zawiera callbacku, ISR ani dynamicznie wybieranej strategii." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — geometria dwóch bloków", + "content_tex": "Żądanie 1 B daje \\texttt{align16(16+1)=32}; żądanie 17 B daje \\texttt{align16(16+17)=48}. Pierwszy payload leży 16 B od startu, drugi 48 B od startu, więc ich delta wynosi 32 B. Oba adresy są wielokrotnością 16." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — size, align, reserve, header, payload", + "content_tex": "Kod odrzuca zero i przepełnienie, zaokrągla sumę nagłówka i żądania, sprawdza reprezentowalność jako \\texttt{ptrdiff\\_t}, rezerwuje cały blok jednym \\texttt{c09\\_sbrk}, zapisuje cztery pola nagłówka i dopiero wtedy zwraca payload." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — EMPTY, TWO BLOCKS, RESET", + "content_tex": "Arena przechodzi \\texttt{EMPTY -> seq1 -> seq1+seq2}. Brak indywidualnego free oznacza, że break tylko rośnie. \\texttt{c09\\_smalloc\\_reset} wykonuje jedno przejście z dowolnej zawartości do EMPTY i unieważnia oba wskaźniki naraz." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — pamięć potwierdza header przed payloadem", + "content_tex": "W checkpointcie odczytaj \\texttt{first-16}: słowo magic to \\texttt{0x534D414C}, requested=1, reserved=32, sequence=1. Pod \\texttt{second-16} odpowiednie wartości to 17, 48 i 2. Globale potwierdzają deltę 32 i reset." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — bump allocator z jawną granicą użycia", + "content_tex": "Append-only arena jest wartościowa dla fazowego scratch storage, gdy wszystkie obiekty mają wspólny czas życia. Nie zastępuje ogólnego malloc: brak selekcji, ponownego użycia pojedynczych luk, split, coalescing i niezależnego free." + } + ] + }, + { + "id": "task05", + "chapter": "7.8 + ABI", + "title": "malloc/free picolibc jako czarna skrzynka", + "idea_tex": "malloc/free picolibc jako black box", + "priority": "kluczowe", + "key": true, + "sources": [ + "src/tasks/task05_picolibc_malloc.c", + "crt0.S", + "link/hazard3_c09.ld" + ], + "prompt_tex": "Nie zakładając formatu nagłówka libc, wypisz własności możliwe do sprawdzenia przez klienta dwóch przydziałów. Uruchom host i Hazard3, sprawdź checksum oraz mapę, a w ELF wykaż współistnienie vendorowego \\texttt{\\_sbrk} i picolibc \\texttt{sbrk}.", + "criterion": "Host i Hazard3: nonnull=1, delta_nonzero=1, checksum=4612, nonoverlap=1, aligned=1, freed=1, pass=1 i kod 0. Mapa RV32I zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o i libc_misc_picosbrk.c.o. ELF definiuje _sbrk, sbrk, malloc, free, __heap_start i __heap_end.", + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — klient nie zna wnętrza picolibc", + "content_tex": "Kod tasku używa tylko \\texttt{malloc} i \\texttt{free}. Linker łączy picolibc z platformą przez \\texttt{sbrk} oraz symbole granic. Vendorowe \\texttt{\\_sbrk} pozostaje osobnym, nieużywanym przez malloc symbolem startu Hazard3." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — obraz składa się z czterech warstw", + "content_tex": "ELF zawiera klienta, człony \\texttt{malloc/free}, człon \\texttt{picosbrk} i platformowy startup. Skrypt linkera dostarcza \\texttt{\\_\\_heap\\_start/\\_\\_heap\\_end}; crt0 ustawia \\texttt{gp/tp} i zeruje BSS/TBSS. Mapa pokazuje, który obiekt wniósł każdy publiczny symbol." + }, + { + "id": "A3", + "status": "unavailable", + "title": "DISPATCH", + "reason": "Klient wywołuje malloc i free bezpośrednio; badany przebieg nie przekazuje callbacku, nie obsługuje ISR i nie wybiera alokatora przez tablicę funkcji." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — kontrakt dwóch niezależnych payloadów", + "content_tex": "Program żąda 13 B i 29 B, zapisuje dwie różne sekwencje, sumuje odczytane bajty do 4612 i sprawdza rozłączność półotwartych zakresów adresów. Mierzy co najmniej 8-bajtowe wyrównanie, ale nie narzuca odległości między blokami." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — allocate, use, verify, release", + "content_tex": "Po dwóch udanych przydziałach kod zapisuje i natychmiast odczytuje oba zakresy, oblicza checksum i warunki adresowe, zwalnia najpierw drugi, potem pierwszy blok, ustawia \\texttt{freed=1} i zatrzymuje się w checkpointcie." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — własność payloadu kończy się w free", + "content_tex": "Każdy wskaźnik przechodzi od braku zasobu do stanu OWNED po udanym malloc, następnie USED po zapisie i RELEASED po free. Program nie dereferencjuje wskaźnika w RELEASED i nie bada, czy następny malloc odzyska ten sam adres." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — wykonanie plus audyt ELF", + "content_tex": "Hazard3 kończy program kodem 0; globale pokazują checksum 4612, rozłączność, alignment i oba free. \\texttt{nm} musi równocześnie pokazać \\texttt{\\_sbrk} oraz \\texttt{sbrk}, a mapa trzy człony picolibc związane z malloc, free i dostawcą pamięci." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — test kontraktu bez zgadywania implementacji", + "content_tex": "Poprawny test czarnej skrzynki wymusza własności API, ale nie zależy od prywatnego nagłówka, kierunku wzrostu sterty, dokładnej delty adresów ani ponownego użycia po free. Dzięki temu pozostaje wartościowy po zmianie implementacji libc." + } + ] + } + ] +} diff --git a/link/hazard3_c09.ld b/link/hazard3_c09.ld new file mode 100644 index 0000000..2fb29d7 --- /dev/null +++ b/link/hazard3_c09.ld @@ -0,0 +1,93 @@ +OUTPUT_FORMAT("elf32-littleriscv") +OUTPUT_ARCH(riscv) +ENTRY(_start) + +MEMORY +{ + RAM (rwx) : ORIGIN = 0x80000000, LENGTH = 16M +} + +PHDRS +{ + text PT_LOAD FLAGS(5); /* read + execute */ + data PT_LOAD FLAGS(6); /* read + write */ + tls PT_TLS FLAGS(4); /* TLS template */ +} + +SECTIONS +{ + . = ORIGIN(RAM); + + .text : ALIGN(4) + { + KEEP(*(.vectors)) + *(.text.startup .text.startup.*) + *(.text .text.*) + } > RAM :text + + .rodata : ALIGN(4) + { + *(.rodata .rodata.*) + } > RAM :text + + .data : ALIGN(16) + { + __data_start = .; + *(.data .data.*) + *(.sdata .sdata.*) + __data_end = .; + } > RAM :data + + .tdata : ALIGN(16) + { + __tls_start = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __tdata_end = .; + } > RAM :data :tls + + .tbss (NOLOAD) : ALIGN(16) + { + __tbss_start = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) + *(.tcommon) + __tbss_end = .; + } > RAM :data :tls + + /* GNU ld does not advance the normal location counter for TLS NOBITS. */ + .tbss_space (NOLOAD) : ALIGN(16) + { + . = ADDR(.tbss) + SIZEOF(.tbss); + } > RAM :data + + .bss (NOLOAD) : ALIGN(16) + { + __bss_start = .; + *(.bss .bss.* COMMON) + *(.sbss .sbss.*) + __bss_end = .; + } > RAM :data + + . = ALIGN(16); + __heap_start = .; + _end = __heap_start; + PROVIDE(end = __heap_start); + + __stack_top = ORIGIN(RAM) + LENGTH(RAM); + __stack_reserve = 64K; + __stack_bottom = __stack_top - __stack_reserve; + __heap_end = __stack_bottom; + __global_pointer$ = __data_start + 0x800; + + /DISCARD/ : + { + *(.comment) + *(.note .note.*) + } +} + +ASSERT(__heap_start <= __heap_end, + "C09: heap overlaps the reserved 64 KiB stack") +ASSERT((__heap_start & 15) == 0, + "C09: __heap_start must be 16-byte aligned") +ASSERT((__heap_end & 15) == 0, + "C09: __heap_end must be 16-byte aligned") diff --git a/scripts/build_new_card.sh b/scripts/build_new_card.sh new file mode 100755 index 0000000..025f724 --- /dev/null +++ b/scripts/build_new_card.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh +set -eu + +script_dir=$(CDPATH= cd "$(dirname "$0")" && pwd) +repo_root=$(CDPATH= cd "$script_dir/.." && pwd) +layouts_root=$repo_root/../../../tools/card-layouts + +python3 "$layouts_root/tools/build_kr_c_card.py" "$repo_root" +exec "$script_dir/render_card_layouts.sh" diff --git a/scripts/render_card_layouts.sh b/scripts/render_card_layouts.sh new file mode 100755 index 0000000..3a5cdae --- /dev/null +++ b/scripts/render_card_layouts.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh +set -eu + +script_dir=$(CDPATH= cd "$(dirname "$0")" && pwd) +repo_root=$(CDPATH= cd "$script_dir/.." && pwd) +layouts_root=$repo_root/../../../tools/card-layouts + +exec python3 "$layouts_root/tools/render_card.py" "$repo_root" "$@" + diff --git a/scripts/render_new_pdf.sh b/scripts/render_new_pdf.sh new file mode 100755 index 0000000..f17b6b9 --- /dev/null +++ b/scripts/render_new_pdf.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env sh +set -eu + +script_dir=$(CDPATH= cd "$(dirname "$0")" && pwd) +repo_root=$(CDPATH= cd "$script_dir/.." && pwd) +layouts_root=$repo_root/../../../tools/card-layouts + +: "${GITEA_SHA:=0000000000000000000000000000000000000000}" +export GITEA_SHA +exec "$layouts_root/tools/render_card_pdf_preserving.sh" "$repo_root" + diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh new file mode 100755 index 0000000..c603363 --- /dev/null +++ b/scripts/run_tests.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env sh +set -eu + +script_dir=$(CDPATH= cd "$(dirname "$0")" && pwd) +repo_root=$(CDPATH= cd "$script_dir/.." && pwd) + +exec make -C "$repo_root" full-check + diff --git a/src/runtime/c09_bounded_sbrk.c b/src/runtime/c09_bounded_sbrk.c new file mode 100644 index 0000000..e2dd2f7 --- /dev/null +++ b/src/runtime/c09_bounded_sbrk.c @@ -0,0 +1,81 @@ +#include "c09_bounded_sbrk.h" + +#if defined(C09_HOST) +enum { C09_HOST_ARENA_BYTES = 512 }; + +static _Alignas(16) unsigned char g_c09_host_arena[C09_HOST_ARENA_BYTES]; +#else +extern unsigned char __heap_start[]; +extern unsigned char __heap_end[]; +#endif + +static uintptr_t g_c09_break; + +static uintptr_t arena_start(void) +{ +#if defined(C09_HOST) + return (uintptr_t)&g_c09_host_arena[0]; +#else + return (uintptr_t)__heap_start; +#endif +} + +static uintptr_t arena_end(void) +{ +#if defined(C09_HOST) + return (uintptr_t)&g_c09_host_arena[C09_HOST_ARENA_BYTES]; +#else + return (uintptr_t)__heap_end; +#endif +} + +void c09_sbrk_reset(void) +{ + g_c09_break = arena_start(); +} + +uintptr_t c09_sbrk_start_address(void) +{ + return arena_start(); +} + +uintptr_t c09_sbrk_end_address(void) +{ + return arena_end(); +} + +uintptr_t c09_sbrk_current_address(void) +{ + return g_c09_break == 0U ? arena_start() : g_c09_break; +} + +void *c09_sbrk(ptrdiff_t increment) +{ + const uintptr_t start = arena_start(); + const uintptr_t end = arena_end(); + const uintptr_t current = c09_sbrk_current_address(); + uintptr_t magnitude; + uintptr_t next; + + if (current < start || current > end) { + return (void *)(uintptr_t)-1; + } + + if (increment >= 0) { + magnitude = (uintptr_t)increment; + if (magnitude > end - current) { + return (void *)(uintptr_t)-1; + } + next = current + magnitude; + } else { + /* This form is defined even for PTRDIFF_MIN. */ + magnitude = (uintptr_t)(-(increment + 1)) + 1U; + if (magnitude > current - start) { + return (void *)(uintptr_t)-1; + } + next = current - magnitude; + } + + g_c09_break = next; + return (void *)current; +} diff --git a/src/runtime/c09_bounded_sbrk.h b/src/runtime/c09_bounded_sbrk.h new file mode 100644 index 0000000..e05b8cc --- /dev/null +++ b/src/runtime/c09_bounded_sbrk.h @@ -0,0 +1,18 @@ +#ifndef C09_BOUNDED_SBRK_H +#define C09_BOUNDED_SBRK_H + +#include +#include + +/* + * Model used by Task03 and Task04. Its name is deliberately not `sbrk`: + * Task05 must resolve the real picolibc symbol from libc.a. + */ +void c09_sbrk_reset(void); +void *c09_sbrk(ptrdiff_t increment); +uintptr_t c09_sbrk_start_address(void); +uintptr_t c09_sbrk_end_address(void); +uintptr_t c09_sbrk_current_address(void); + +#endif + diff --git a/src/runtime/c09_smalloc.c b/src/runtime/c09_smalloc.c new file mode 100644 index 0000000..2b6a55b --- /dev/null +++ b/src/runtime/c09_smalloc.c @@ -0,0 +1,83 @@ +#include "c09_smalloc.h" + +#include "c09_bounded_sbrk.h" + +typedef struct { + uint32_t magic; + uint32_t requested_bytes; + uint32_t reserved_bytes; + uint32_t sequence; +} C09SmallocHeader; + +typedef char c09_header_must_be_sixteen_bytes[ + sizeof(C09SmallocHeader) == C09_SMALLOC_HEADER_BYTES ? 1 : -1 +]; + +static uint32_t g_c09_sequence; + +static int aligned_total(size_t requested_bytes, size_t *result) +{ + const size_t header_bytes = sizeof(C09SmallocHeader); + const size_t mask = C09_SMALLOC_ALIGNMENT - 1U; + size_t unaligned; + + if (requested_bytes == 0U || requested_bytes > UINT32_MAX || + requested_bytes > (size_t)-1 - header_bytes) { + return 0; + } + unaligned = header_bytes + requested_bytes; + if (unaligned > (size_t)-1 - mask) { + return 0; + } + *result = (unaligned + mask) & ~mask; + return 1; +} + +void c09_smalloc_reset(void) +{ + c09_sbrk_reset(); + g_c09_sequence = 0U; +} + +void *c09_smalloc(size_t requested_bytes) +{ + C09SmallocHeader *header; + size_t reserved_bytes; + + if (!aligned_total(requested_bytes, &reserved_bytes) || + reserved_bytes > UINT32_MAX || reserved_bytes > (size_t)PTRDIFF_MAX) { + return (void *)0; + } + + header = (C09SmallocHeader *)c09_sbrk((ptrdiff_t)reserved_bytes); + if (header == (void *)(uintptr_t)-1) { + return (void *)0; + } + + header->magic = C09_SMALLOC_MAGIC; + header->requested_bytes = (uint32_t)requested_bytes; + header->reserved_bytes = (uint32_t)reserved_bytes; + header->sequence = ++g_c09_sequence; + return (void *)(header + 1); +} + +int c09_smalloc_inspect(const void *payload, C09SmallocInfo *result) +{ + const C09SmallocHeader *header; + + if (payload == (const void *)0 || result == (C09SmallocInfo *)0) { + return 0; + } + header = ((const C09SmallocHeader *)payload) - 1; + if (header->magic != C09_SMALLOC_MAGIC || + header->reserved_bytes < sizeof(C09SmallocHeader) || + (header->reserved_bytes % C09_SMALLOC_ALIGNMENT) != 0U) { + return 0; + } + + result->magic = header->magic; + result->requested_bytes = header->requested_bytes; + result->reserved_bytes = header->reserved_bytes; + result->sequence = header->sequence; + return 1; +} diff --git a/src/runtime/c09_smalloc.h b/src/runtime/c09_smalloc.h new file mode 100644 index 0000000..d89073b --- /dev/null +++ b/src/runtime/c09_smalloc.h @@ -0,0 +1,24 @@ +#ifndef C09_SMALLOC_H +#define C09_SMALLOC_H + +#include +#include + +enum { + C09_SMALLOC_ALIGNMENT = 16, + C09_SMALLOC_HEADER_BYTES = 16, + C09_SMALLOC_MAGIC = 0x534D414CU +}; + +typedef struct { + uint32_t magic; + uint32_t requested_bytes; + uint32_t reserved_bytes; + uint32_t sequence; +} C09SmallocInfo; + +void c09_smalloc_reset(void); +void *c09_smalloc(size_t requested_bytes); +int c09_smalloc_inspect(const void *payload, C09SmallocInfo *result); + +#endif diff --git a/src/tasks/task01_libc_without_heap.c b/src/tasks/task01_libc_without_heap.c new file mode 100644 index 0000000..2871044 --- /dev/null +++ b/src/tasks/task01_libc_without_heap.c @@ -0,0 +1,31 @@ +#include +#include + +#if defined(HOST_PRINTF) +#include +#endif + +char g_task01_text[] = "picolibc-no-heap"; +volatile size_t g_task01_length; +volatile int g_task01_pass; + +__attribute__((noinline)) void task01_debug_checkpoint(void) +{ +#if defined(__GNUC__) + __asm__ volatile("" ::: "memory"); +#endif +} + +int main(void) +{ + /* -fno-builtin makes this a real archive call, visible in prog.map. */ + g_task01_length = strlen(g_task01_text); + g_task01_pass = g_task01_length == 16U; + + task01_debug_checkpoint(); + +#if defined(HOST_PRINTF) + printf("length=%zu pass=%d\n", g_task01_length, g_task01_pass); +#endif + return g_task01_pass ? 0 : 1; +} diff --git a/src/tasks/task02_malloc_requires_sbrk.c b/src/tasks/task02_malloc_requires_sbrk.c new file mode 100644 index 0000000..36ca304 --- /dev/null +++ b/src/tasks/task02_malloc_requires_sbrk.c @@ -0,0 +1,12 @@ +#include +#include + +volatile void *g_task02_result; + +int main(void) +{ + /* This source is compiled, then deliberately linked with --wrap=sbrk. */ + g_task02_result = malloc(16U); + return g_task02_result == (void *)0; +} + diff --git a/src/tasks/task03_bounded_sbrk.c b/src/tasks/task03_bounded_sbrk.c new file mode 100644 index 0000000..64504fd --- /dev/null +++ b/src/tasks/task03_bounded_sbrk.c @@ -0,0 +1,93 @@ +#include +#include + +#include "c09_bounded_sbrk.h" + +#if defined(HOST_PRINTF) +#include +#endif + +volatile size_t g_task03_after_grow; +volatile size_t g_task03_after_failed_grow; +volatile size_t g_task03_after_shrink; +volatile size_t g_task03_after_failed_shrink; +volatile int g_task03_failures_preserve_break; +volatile int g_task03_bounds_hold; +volatile int g_task03_pass; + +__attribute__((noinline)) void task03_debug_checkpoint(void) +{ +#if defined(__GNUC__) + __asm__ volatile("" ::: "memory"); +#endif +} + +int main(void) +{ + const uintptr_t failed = (uintptr_t)-1; + uintptr_t start; + uintptr_t end; + uintptr_t before_failure; + uintptr_t before_underflow; + uintptr_t current; + size_t remaining; + size_t used; + void *first; + void *second; + void *rejected_grow; + void *old_break; + void *rejected_shrink; + + c09_sbrk_reset(); + start = c09_sbrk_start_address(); + end = c09_sbrk_end_address(); + + first = c09_sbrk(16); + second = c09_sbrk(24); + current = c09_sbrk_current_address(); + g_task03_after_grow = (size_t)(current - start); + + remaining = (size_t)(end - current); + before_failure = current; + rejected_grow = c09_sbrk((ptrdiff_t)(remaining + 1U)); + current = c09_sbrk_current_address(); + g_task03_after_failed_grow = (size_t)(current - start); + + old_break = c09_sbrk(-8); + current = c09_sbrk_current_address(); + g_task03_after_shrink = (size_t)(current - start); + + used = (size_t)(current - start); + before_underflow = current; + rejected_shrink = c09_sbrk(-(ptrdiff_t)(used + 1U)); + current = c09_sbrk_current_address(); + g_task03_after_failed_shrink = (size_t)(current - start); + + g_task03_failures_preserve_break = + (uintptr_t)rejected_grow == failed && + g_task03_after_failed_grow == (size_t)(before_failure - start) && + (uintptr_t)rejected_shrink == failed && + g_task03_after_failed_shrink == (size_t)(before_underflow - start); + g_task03_bounds_hold = start <= current && current <= end; + g_task03_pass = + (uintptr_t)first == start && + (uintptr_t)second == start + 16U && + (uintptr_t)old_break == start + 40U && + g_task03_after_grow == 40U && + g_task03_after_shrink == 32U && + g_task03_failures_preserve_break && + g_task03_bounds_hold; + + task03_debug_checkpoint(); + +#if defined(HOST_PRINTF) + printf( + "grow=%zu rejected_grow=%zu shrink=%zu rejected_shrink=%zu " + "preserved=%d bounds=%d pass=%d\n", + g_task03_after_grow, g_task03_after_failed_grow, + g_task03_after_shrink, g_task03_after_failed_shrink, + g_task03_failures_preserve_break, g_task03_bounds_hold, + g_task03_pass); +#endif + return g_task03_pass ? 0 : 1; +} diff --git a/src/tasks/task04_smalloc.c b/src/tasks/task04_smalloc.c new file mode 100644 index 0000000..dd8c7be --- /dev/null +++ b/src/tasks/task04_smalloc.c @@ -0,0 +1,110 @@ +#include +#include + +#include "c09_bounded_sbrk.h" +#include "c09_smalloc.h" + +#if defined(HOST_PRINTF) +#include +#endif + +volatile size_t g_task04_header_bytes; +volatile size_t g_task04_first_reserved; +volatile size_t g_task04_second_reserved; +volatile size_t g_task04_payload_delta; +volatile int g_task04_aligned; +volatile int g_task04_header_before_payload; +volatile int g_task04_reset_rewinds_arena; +volatile int g_task04_append_only; +volatile int g_task04_pass; + +__attribute__((noinline)) void task04_debug_checkpoint(void) +{ +#if defined(__GNUC__) + __asm__ volatile("" ::: "memory"); +#endif +} + +int main(void) +{ + C09SmallocInfo first_info; + C09SmallocInfo second_info; + unsigned char *first; + unsigned char *second; + unsigned char *after_reset; + uintptr_t break_before_reset; + uintptr_t break_after_reset; + size_t index; + int bytes_hold = 1; + + c09_smalloc_reset(); + first = (unsigned char *)c09_smalloc(1U); + second = (unsigned char *)c09_smalloc(17U); + if (first == (unsigned char *)0 || second == (unsigned char *)0) { + return 1; + } + + first[0] = 0x5AU; + for (index = 0U; index < 17U; ++index) { + second[index] = (unsigned char)(0x80U + index); + } + bytes_hold = first[0] == 0x5AU; + for (index = 0U; index < 17U; ++index) { + if (second[index] != (unsigned char)(0x80U + index)) { + bytes_hold = 0; + } + } + + if (!c09_smalloc_inspect(first, &first_info) || + !c09_smalloc_inspect(second, &second_info)) { + return 2; + } + + g_task04_header_bytes = C09_SMALLOC_HEADER_BYTES; + g_task04_first_reserved = first_info.reserved_bytes; + g_task04_second_reserved = second_info.reserved_bytes; + g_task04_payload_delta = (size_t)((uintptr_t)second - (uintptr_t)first); + g_task04_aligned = + ((uintptr_t)first % C09_SMALLOC_ALIGNMENT) == 0U && + ((uintptr_t)second % C09_SMALLOC_ALIGNMENT) == 0U; + g_task04_header_before_payload = + first_info.magic == C09_SMALLOC_MAGIC && + first_info.requested_bytes == 1U && + first_info.sequence == 1U && + second_info.magic == C09_SMALLOC_MAGIC && + second_info.requested_bytes == 17U && + second_info.sequence == 2U; + g_task04_append_only = + (uintptr_t)second > (uintptr_t)first && + g_task04_payload_delta == first_info.reserved_bytes; + + break_before_reset = c09_sbrk_current_address(); + c09_smalloc_reset(); + break_after_reset = c09_sbrk_current_address(); + after_reset = (unsigned char *)c09_smalloc(1U); + g_task04_reset_rewinds_arena = + break_before_reset > break_after_reset && after_reset == first; + + g_task04_pass = + g_task04_header_bytes == 16U && + g_task04_first_reserved == 32U && + g_task04_second_reserved == 48U && + g_task04_payload_delta == 32U && + g_task04_aligned && g_task04_header_before_payload && + g_task04_append_only && g_task04_reset_rewinds_arena && + bytes_hold; + + task04_debug_checkpoint(); + +#if defined(HOST_PRINTF) + printf( + "header=%zu first=%zu second=%zu delta=%zu aligned=%d " + "metadata=%d append=%d reset=%d pass=%d\n", + g_task04_header_bytes, g_task04_first_reserved, + g_task04_second_reserved, g_task04_payload_delta, + g_task04_aligned, g_task04_header_before_payload, + g_task04_append_only, g_task04_reset_rewinds_arena, + g_task04_pass); +#endif + return g_task04_pass ? 0 : 1; +} diff --git a/src/tasks/task05_picolibc_malloc.c b/src/tasks/task05_picolibc_malloc.c new file mode 100644 index 0000000..6783f0f --- /dev/null +++ b/src/tasks/task05_picolibc_malloc.c @@ -0,0 +1,88 @@ +#include +#include +#include + +#if defined(HOST_PRINTF) +#include +#endif + +volatile uintptr_t g_task05_first_address; +volatile uintptr_t g_task05_second_address; +volatile size_t g_task05_address_delta; +volatile uint32_t g_task05_checksum; +volatile int g_task05_nonoverlap; +volatile int g_task05_aligned; +volatile int g_task05_freed; +volatile int g_task05_pass; + +__attribute__((noinline)) void task05_debug_checkpoint(void) +{ +#if defined(__GNUC__) + __asm__ volatile("" ::: "memory"); +#endif +} + +int main(void) +{ + unsigned char *first = (unsigned char *)malloc(13U); + unsigned char *second = (unsigned char *)malloc(29U); + uintptr_t first_end; + uintptr_t second_end; + uint32_t checksum = 0U; + uint32_t expected = 0U; + size_t index; + + if (first == (unsigned char *)0 || second == (unsigned char *)0) { + free(second); + free(first); + return 1; + } + + for (index = 0U; index < 13U; ++index) { + first[index] = (unsigned char)(0x20U + index); + } + for (index = 0U; index < 29U; ++index) { + second[index] = (unsigned char)(0x80U + index); + } + for (index = 0U; index < 13U; ++index) { + checksum += first[index]; + expected += (uint32_t)(0x20U + index); + } + for (index = 0U; index < 29U; ++index) { + checksum += second[index]; + expected += (uint32_t)(0x80U + index); + } + + g_task05_first_address = (uintptr_t)first; + g_task05_second_address = (uintptr_t)second; + g_task05_address_delta = g_task05_first_address < g_task05_second_address + ? (size_t)(g_task05_second_address - g_task05_first_address) + : (size_t)(g_task05_first_address - g_task05_second_address); + first_end = g_task05_first_address + 13U; + second_end = g_task05_second_address + 29U; + g_task05_nonoverlap = + first_end <= g_task05_second_address || + second_end <= g_task05_first_address; + g_task05_aligned = + (g_task05_first_address % 8U) == 0U && + (g_task05_second_address % 8U) == 0U; + g_task05_checksum = checksum; + g_task05_pass = checksum == expected && + g_task05_nonoverlap && g_task05_aligned; + + free(second); + free(first); + g_task05_freed = 1; + + task05_debug_checkpoint(); + +#if defined(HOST_PRINTF) + printf( + "nonnull=1 delta_nonzero=%d checksum=%u nonoverlap=%d " + "aligned=%d freed=%d pass=%d\n", + g_task05_address_delta != 0U, g_task05_checksum, + g_task05_nonoverlap, g_task05_aligned, g_task05_freed, + g_task05_pass); +#endif + return g_task05_pass && g_task05_freed ? 0 : 2; +} diff --git a/tests/check_archive_maps.sh b/tests/check_archive_maps.sh new file mode 100755 index 0000000..80ab975 --- /dev/null +++ b/tests/check_archive_maps.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +task01_map="$root/build/task01_libc_without_heap/prog.map" +task05_map="$root/build/task05_picolibc_malloc/prog.map" + +grep -q 'libc.a(strlen.c.o)' "$task01_map" +if grep -Eq 'libc_stdlib_malloc.c.o|libc_stdlib_free.c.o|libc_misc_picosbrk.c.o' "$task01_map"; then + echo 'FAIL Task01: heap-related archive member entered the image' >&2 + exit 1 +fi + +for member in libc_stdlib_malloc.c.o libc_stdlib_free.c.o libc_misc_picosbrk.c.o; do + grep -q "$member" "$task05_map" +done + +printf '%s\n' \ + 'PASS Task01 map: strlen.c.o present, malloc/free/picosbrk absent' \ + 'PASS Task05 map: malloc/free/picosbrk archive members present' + diff --git a/tests/check_card.sh b/tests/check_card.sh new file mode 100755 index 0000000..f4035b8 --- /dev/null +++ b/tests/check_card.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +pdf_count="$(find "$root/doc/pdf" -maxdepth 1 -type f -name '*.pdf' | wc -l)" +[[ "$pdf_count" -eq 1 ]] + +python3 - "$root/json/card_source.json" "$root/web/card-data.json" <<'PY' +import json +import sys + +with open(sys.argv[1], encoding="utf-8") as stream: + card = json.load(stream) +with open(sys.argv[2], encoding="utf-8") as stream: + web = json.load(stream) + +assert card["tasks_order"] == [f"task{number:02d}" for number in range(1, 6)] +blocks = [] +flow_ids = [] +for task_id in card["tasks_order"]: + task = card["tasks"][task_id] + viewpoints = task["viewpoints"] + assert [item["id"] for item in viewpoints] == [f"A{number}" for number in range(1, 9)] + assert len(viewpoints) == 8 + assert all(item["status"] in {"enabled", "unavailable"} for item in viewpoints) + assert all(item.get("id") for item in task["flow"]) + flow_ids.extend(item["id"] for item in task["flow"]) + blocks.extend(item for item in task["flow"] if item["id"].startswith(task_id + ".a")) +assert len(blocks) == 40 +assert len(flow_ids) == len(set(flow_ids)) +task02_proof = next( + item for item in card["tasks"]["task02"]["flow"] + if item["id"] == "task02.proof" +) +assert "programu hostowego" not in task02_proof["evidence_tex"] +assert "brakująca nazwa" in task02_proof["evidence_tex"] + +def viewpoint_ids(value): + if isinstance(value, dict): + identifier = value.get("id") + if isinstance(identifier, str) and identifier.rsplit(".", 1)[-1] in { + f"a{number}" for number in range(1, 9) + }: + yield identifier + for child in value.values(): + yield from viewpoint_ids(child) + elif isinstance(value, list): + for child in value: + yield from viewpoint_ids(child) + +web_ids = list(viewpoint_ids(web)) +assert len(web_ids) == 40 +assert len(set(web_ids)) == 40 +print("PASS card JSON: 5 tasks x exact A1-A8 = 40 viewpoint blocks") +PY + +tex_viewpoints="$(rg -o '\\begin\{ESCBlockFrame\}\{A[1-8] ' \ + "$root/doc/generated/main.tex" | wc -l)" +[[ "$tex_viewpoints" -eq 40 ]] +for viewpoint in {1..8}; do + count="$(rg -o "\\\\begin\\{ESCBlockFrame\\}\\{A${viewpoint} " \ + "$root/doc/generated/main.tex" | wc -l)" + [[ "$count" -eq 5 ]] +done + +tex_count="$(rg -o '\\textbf\{N/D\.\}' "$root/doc/generated/main.tex" | wc -l)" +[[ "$tex_count" -ge 6 ]] +qpdf --check "$root"/doc/pdf/*.pdf +rg -q 'task02\.a6' "$root/json/card_source.json" + +pdf_text="$(mktemp)" +trap 'rm -f -- "$pdf_text"' EXIT +pdftotext "$root"/doc/pdf/*.pdf "$pdf_text" +pdf_viewpoints="$(rg -o 'BLOCK A[1-8]' "$pdf_text" | wc -l)" +[[ "$pdf_viewpoints" -eq 40 ]] +if rg -qi 'anonymous|anonimowy|bez nazwy' "$pdf_text"; then + echo 'FAIL card: anonymous block marker found' >&2 + exit 1 +fi +printf 'PASS card artifacts: TeX, web and one valid PDF\n' diff --git a/tests/check_elf.sh b/tests/check_elf.sh new file mode 100755 index 0000000..1d60623 --- /dev/null +++ b/tests/check_elf.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +nm_tool="${RISCV_PREFIX:-riscv64-unknown-elf-}nm" +readelf_tool="${RISCV_PREFIX:-riscv64-unknown-elf-}readelf" + +symbol_value() { + "$nm_tool" -n "$1" | awk -v wanted="$2" '$3 == wanted { print $1; exit }' +} + +for task in \ + task01_libc_without_heap \ + task03_bounded_sbrk \ + task04_smalloc \ + task05_picolibc_malloc; do + elf="$root/build/$task/prog.elf" + start_hex="$(symbol_value "$elf" __heap_start)" + end_hex="$(symbol_value "$elf" __heap_end)" + stack_bottom_hex="$(symbol_value "$elf" __stack_bottom)" + reset_hex="$(symbol_value "$elf" .reset_handler)" + [[ -n "$start_hex" && -n "$end_hex" && -n "$stack_bottom_hex" ]] + [[ "$reset_hex" == "80000040" ]] + (( 16#$start_hex <= 16#$end_hex )) + (( 16#$end_hex == 16#$stack_bottom_hex )) + (( (16#$start_hex & 15) == 0 )) + (( (16#$end_hex & 15) == 0 )) + "$readelf_tool" -h "$elf" | grep -q 'Class:.*ELF32' + if "$readelf_tool" -lW "$elf" | grep -Eq 'LOAD.*RWE'; then + echo "FAIL $task: writable and executable LOAD segment" >&2 + exit 1 + fi +done + +task05="$root/build/task05_picolibc_malloc/prog.elf" +for symbol in _sbrk sbrk malloc free __heap_start __heap_end; do + [[ -n "$(symbol_value "$task05" "$symbol")" ]] +done + +printf '%s\n' \ + 'PASS linker: reset=0x80000040; bounded aligned heap; no RWX LOAD segment' \ + 'PASS Task05 ELF: vendor _sbrk and picolibc sbrk coexist' diff --git a/tests/test_host.sh b/tests/test_host.sh new file mode 100755 index 0000000..6ceb790 --- /dev/null +++ b/tests/test_host.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +if [[ "${1:-}" != "--already-built" ]]; then + make -C "$root" PROFILE=observe host >/dev/null +fi + +check_output() { + local program="$1" expected="$2" actual + actual="$($program)" + if [[ "$actual" != "$expected" ]]; then + printf 'FAIL %s\nexpected: %s\nactual: %s\n' \ + "$program" "$expected" "$actual" >&2 + return 1 + fi + printf 'PASS %s: %s\n' "$(basename -- "$(dirname -- "$program")")" "$actual" +} + +check_output "$root/host-build/task01_libc_without_heap/prog" \ + 'length=16 pass=1' +check_output "$root/host-build/task03_bounded_sbrk/prog" \ + 'grow=40 rejected_grow=40 shrink=32 rejected_shrink=32 preserved=1 bounds=1 pass=1' +check_output "$root/host-build/task04_smalloc/prog" \ + 'header=16 first=32 second=48 delta=32 aligned=1 metadata=1 append=1 reset=1 pass=1' +check_output "$root/host-build/task05_picolibc_malloc/prog" \ + 'nonnull=1 delta_nonzero=1 checksum=4612 nonoverlap=1 aligned=1 freed=1 pass=1' + diff --git a/web/app.css b/web/app.css new file mode 100644 index 0000000..eac8d78 --- /dev/null +++ b/web/app.css @@ -0,0 +1 @@ +.paper{display:flex;flex-direction:column;gap:3.3cm}.paper>.sheet,.paper>.sheet-spread>.sheet{width:210mm;height:297mm;min-height:297mm;max-height:297mm;margin:0 auto;overflow:hidden}.paper>.sheet.sheet--landscape,.paper>.sheet-spread>.sheet.sheet--landscape{width:297mm;min-width:297mm;max-width:297mm;height:210mm;min-height:210mm;max-height:210mm}.paper>.sheet>.sheet-content,.paper>.sheet-spread>.sheet>.sheet-content{height:297mm;min-height:297mm;max-height:297mm;overflow-x:hidden;overflow-y:hidden}.paper>.sheet.sheet--landscape>.sheet-content,.paper>.sheet-spread>.sheet.sheet--landscape>.sheet-content{height:210mm;min-height:210mm;max-height:210mm}.sheet-spread{display:contents}.paper.is-diagram-spread .sheet-spread{display:grid;grid-template-columns:repeat(var(--spread-columns, 1),max-content);width:max-content;max-width:none;margin:0 auto;align-items:flex-start;gap:2mm;zoom:var(--spread-fit-scale, 1)}.paper.is-diagram-spread .sheet-spread>.sheet{flex:0 0 auto}.viewer-chrome{position:sticky;top:0;z-index:80;width:100%}.viewer-action-toast{position:absolute;z-index:12;right:9px;bottom:9px;max-width:min(720px,calc(100vw - 18px));box-sizing:border-box;overflow:hidden;border:1px solid #42b8e7;border-radius:3px;background:#102c38ee;color:#dff7ff;padding:5px 9px;box-shadow:0 4px 14px #0007;text-overflow:ellipsis;white-space:nowrap;font:750 10px/1.25 ui-monospace,monospace}.viewer-chrome .topbar{position:sticky;top:0;z-index:90}.viewpoint-bar{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:1px;min-height:31px;border-top:1px solid #9aa8ae;border-bottom:1px solid #718087;background:#718087;box-shadow:0 2px 5px #0002}.viewpoint-bar button{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:5px;min-width:0;border:0;background:#f7f9fa;color:#1f3038;padding:5px 7px;text-align:left;cursor:pointer}.viewpoint-bar button:hover,.viewpoint-bar button:focus-visible{z-index:1;background:#e9f3f7;outline:2px solid #287495;outline-offset:-2px}.viewpoint-bar button[aria-current=location]{background:#dcecf3;box-shadow:inset 0 -3px #167ca4}.viewpoint-bar button>span{color:#1b6785;font:850 10px/1 ui-monospace,monospace}.viewpoint-bar button>strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:750 10px/1.1 system-ui,sans-serif}.viewpoint-bar button.is-unavailable{background:#eef0f1;color:#5d686d;cursor:not-allowed}.viewpoint-bar button.is-unavailable>span{color:#68747a}.viewpoint-bar button.is-unavailable>small{border:1px solid #9da7ab;border-radius:2px;padding:1px 3px;font:750 7px/1 ui-monospace,monospace}.card-library-toggle{display:inline-flex;align-items:center;flex:none;height:28px;gap:6px;border:1px solid #6e7d84;border-radius:3px;background:#f6f8f9;color:#26373f;padding:2px 8px;font:750 11px/1 ui-monospace,monospace;cursor:pointer}.card-library-toggle:hover,.card-library-toggle:focus-visible{border-color:#1d7799;background:#edf7fa;outline:none}.card-library-toggle.is-active{border-color:#126d8f;background:#174f67;color:#fff}.card-library-toggle-icon{font:700 16px/1 system-ui,sans-serif}.card-library-toggle kbd{color:#267697;font:inherit}.card-library-toggle.is-active kbd{color:#aee9ff}:root{--side-panel-top: 36px;--side-panel-width: min(960px, calc(100vw - 28px) );--side-panel-trigger-length: 56px}.side-panel-dock{position:fixed;z-index:240;top:var(--side-panel-top);bottom:0;width:0;pointer-events:none}.side-panel-dock--left{left:0}.side-panel-dock--right{right:0}.side-panel-rail{position:fixed;z-index:243;top:calc(var(--side-panel-top) + 8px);display:flex;width:13px;flex-direction:column;gap:10px;pointer-events:auto}.side-panel-dock--left .side-panel-rail{left:0}.side-panel-dock--right .side-panel-rail{right:0}.side-panel-trigger{--side-panel-accent: #167ca4;position:relative;display:grid;width:13px;height:var(--side-panel-trigger-length);place-items:center;border:0;border-radius:0;background:transparent;padding:0;cursor:pointer}.side-panel-trigger:before{content:"";display:block;width:3px;height:calc(var(--side-panel-trigger-length) - 8px);border-radius:999px;background:var(--side-panel-accent);box-shadow:0 0 0 1px #ffffff73,0 3px 10px -5px var(--side-panel-accent);opacity:.78;transition:width .14s ease,opacity .14s ease,box-shadow .14s ease}.side-panel-trigger:hover:before,.side-panel-trigger:focus-visible:before,.side-panel-trigger.is-open:before{width:4px;opacity:1}.side-panel-trigger.is-pinned:before{width:5px;box-shadow:0 0 0 1px #ffffff9e,0 3px 12px -4px var(--side-panel-accent)}.side-panel-trigger:focus-visible{outline:2px solid var(--side-panel-accent);outline-offset:-2px}.side-panel-trigger>span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.side-panel{position:fixed;z-index:241;top:var(--side-panel-top);bottom:0;display:flex;width:var(--side-panel-width);max-width:calc(100vw - 20px);box-sizing:border-box;flex-direction:column;overflow:hidden;border-color:#819098;background:#f7f9fa;color:#17252c;pointer-events:none;transition:transform .18s cubic-bezier(.22,.78,.24,1);will-change:transform}.side-panel-dock--left .side-panel{left:0;border-right:1px solid #819098;box-shadow:15px 0 34px -24px #101b218c;transform:translate(calc(-100% - 14px))}.side-panel-dock--right .side-panel{right:0;border-left:1px solid #819098;box-shadow:-15px 0 34px -24px #101b218c;transform:translate(calc(100% + 14px))}.side-panel.is-open{transform:translate(0);pointer-events:auto}.side-panel:after{content:"";position:absolute;top:10px;width:4px;height:48px;border-radius:999px;background:var(--side-panel-accent);pointer-events:none}.side-panel-dock--left .side-panel:after{right:-2px}.side-panel-dock--right .side-panel:after{left:-2px}.side-panel-header{display:flex;min-height:38px;box-sizing:border-box;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid #aebbc1;background:#e7edef;padding:4px 7px 4px 10px}.side-panel-header>div:first-child{display:flex;min-width:0;align-items:baseline;gap:7px}.side-panel-header small{color:#52666f;font:600 16px/1 ui-monospace,monospace;letter-spacing:.08em}.side-panel-header strong{overflow:hidden;color:#11191d;text-overflow:ellipsis;white-space:nowrap;font:600 16px/1.2 system-ui,sans-serif}.side-panel-actions{display:flex;flex:none;gap:4px}.side-panel-actions button{display:grid;min-width:38px;height:24px;place-items:center;border:1px solid #8b999f;border-radius:3px;background:#fff;color:#26373f;padding:0 6px;font:650 16px/1 ui-monospace,monospace;cursor:pointer}.side-panel-actions button:last-child{min-width:24px;padding:0;font-size:18px}.side-panel-actions button:hover,.side-panel-actions button:focus-visible,.side-panel-actions button.is-pinned{border-color:var(--side-panel-accent);background:#edf7fa;outline:none}.side-panel-body,.card-library-panel{display:flex;min-height:0;flex:1;flex-direction:column;overflow:hidden}.card-library-header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:18px 18px 15px;border-bottom:1px solid #bdc9ce;background:#e8eef1}.card-library-header small{color:#52666f;font:600 16px/1.25 ui-monospace,monospace;letter-spacing:.09em;text-transform:uppercase}.card-library-header h2{margin:4px 0 2px;font:750 22px/1.15 system-ui,sans-serif}.card-library-header p{margin:0;color:#607078;font:500 16px/1.35 system-ui,sans-serif}.card-library-header>button{display:grid;width:34px;height:34px;place-items:center;flex:none;border:1px solid #77878e;border-radius:3px;background:#fff;color:#25353c;padding:0;font:25px/1 system-ui,sans-serif;cursor:pointer}.card-library-header>button:hover,.card-library-header>button:focus-visible{border-color:#126d8f;background:#edf7fa;outline:2px solid #85c5dc;outline-offset:1px}.card-library-tree{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:6px 0 18px;scrollbar-color:#8a9aa1 #edf1f3}.card-library-tree details{border:0}.card-library-tree summary{display:grid;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:6px;min-height:30px;box-sizing:border-box;padding:5px 10px 5px 4px;list-style:none;cursor:pointer;user-select:none}.card-library-tree summary::-webkit-details-marker{display:none}.card-library-tree summary:hover,.card-library-tree summary:focus-visible{background:#eaf1f4;outline:none}.card-library-branch{color:#25363d;font:16px/1 ui-monospace,monospace;transform:rotate(-90deg);transition:transform .12s ease}.card-library-tree details[open]>summary .card-library-branch{transform:rotate(0)}.card-library-tree summary strong,.card-library-tree summary small{display:block}.card-library-tree summary strong{color:#070a0b;font:550 16px/1.3 system-ui,sans-serif}.card-library-tree summary small{margin-top:2px;color:#303b40;font:500 16px/1.25 ui-monospace,monospace;letter-spacing:.04em}.card-library-tree summary output{min-width:22px;color:#26363d;padding:0 2px;text-align:center;font:550 16px/1.2 ui-monospace,monospace}.card-library-subject>summary{min-height:42px;border-bottom:1px solid #9eacb2;background:#dfe8ec;padding:7px 14px}.card-library-subject>summary:hover,.card-library-subject>summary:focus-visible{background:#d5e1e5}.card-library-subject>summary strong{color:#000;font:600 16px/1.3 system-ui,sans-serif}.card-library-subject>summary small{color:#28353a;font:500 16px/1.25 ui-monospace,monospace}.card-library-level-list{margin-left:18px;border-left:1px solid #8e9da4}.card-library-level>summary{min-height:38px;border-bottom:1px solid #cbd4d8;padding-left:8px}.card-library-level>summary strong{color:#000;font:550 16px/1.3 system-ui,sans-serif}.card-library-series-list{margin-left:18px;border-left:1px solid #a5b1b6;padding:2px 0 6px}.card-library-series>summary{min-height:34px;padding-left:8px}.card-library-series>summary strong{color:#000;font:550 16px/1.3 system-ui,sans-serif}.card-library-series>summary small{color:#26343a;font:500 16px/1.25 ui-monospace,monospace}.card-library-cards,.card-library-tasks{list-style:none;margin-top:0;margin-bottom:2px;padding:0}.card-library-cards{margin-left:18px;border-left:1px solid #bac3c7}.card-library-card-entry{margin:0}.card-library-card{display:grid;grid-template-columns:19px minmax(0,1fr) auto;align-items:start;gap:5px;min-height:38px;box-sizing:border-box;border:0;border-left:3px solid transparent;color:#000;padding:5px 8px 5px 3px;text-decoration:none}.card-library-node{color:#536168;font:16px/1.35 ui-monospace,monospace}.card-library-card-copy,.card-library-card-copy strong,.card-library-card-copy>span{display:block;min-width:0}.card-library-card-copy strong{color:#000;font:550 16px/1.3 ui-monospace,monospace}.card-library-card-copy>span{margin-top:2px;color:#0b0d0e;font:500 16px/1.35 system-ui,sans-serif;white-space:normal}.card-library-card-meta{display:flex;align-items:flex-end;flex-direction:column;gap:2px}.card-library-card-meta small{color:#26343a;font:500 16px/1.25 ui-monospace,monospace}.card-library-card.is-available{cursor:pointer}.card-library-card.is-available:hover,.card-library-card.is-available:focus-visible{background:#eaf5f8;outline:none}.card-library-card.is-current{border-left-color:#16769b;background:#dff1f7}.card-library-card.is-current:hover,.card-library-card.is-current:focus-visible{background:#cfeaf3;outline:1px solid #5ba9c4;outline-offset:-1px}.card-library-card.is-unavailable{color:#000}.card-library-card.is-unavailable .card-library-card-copy strong,.card-library-card.is-unavailable .card-library-card-meta small{color:#1d292e}.card-library-card.is-unavailable .card-library-card-copy>span{color:#0b0d0e}.card-library-tasks{margin-left:36px;border-left:1px solid #c3cacc}.card-library-tasks li>a,.card-library-tasks li>span{display:grid;grid-template-columns:19px auto minmax(0,1fr);gap:5px;align-items:start;color:#000;padding:4px 8px 5px 3px;text-decoration:none}.card-library-tasks li>a:hover,.card-library-tasks li>a:focus-visible{background:#eaf5f8;outline:none}.card-library-tasks strong{color:#000;font:550 16px/1.35 ui-monospace,monospace}.card-library-tasks li>a>span:last-child,.card-library-tasks li>span>span:last-child{color:#111;font:500 16px/1.35 system-ui,sans-serif}.card-library-footer{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 16px;border-top:1px solid #bdc9ce;background:#edf1f3;color:#5a6a72;font:500 16px/1.3 system-ui,sans-serif}.card-library-footer span{display:inline-flex;align-items:center;gap:4px}.card-library-footer i{width:7px;height:7px;border-radius:50%;background:#929da2}.card-library-footer i.is-online{background:#26815b}.card-library-footer kbd{margin-left:auto;border:1px solid #a2afb5;border-radius:2px;background:#fff;padding:2px 5px;font:600 16px/1 ui-monospace,monospace}.card-library-treegrid{min-height:0;flex:1;overflow:auto;margin:8px;border:1px solid rgb(31 35 40 / 18%);border-radius:6px;background:#fff;scrollbar-color:#93a2a8 #edf1f2;scrollbar-width:thin}.card-library-treegrid-row{display:grid;min-width:760px;min-height:38px;box-sizing:border-box;grid-template-columns:minmax(500px,1fr) 110px 120px;align-items:stretch;border-bottom:1px solid rgb(31 35 40 / 9%);color:#273941;font:500 16px/1.25 ui-monospace,monospace}.card-library-treegrid-row>[role=gridcell],.card-library-treegrid-row>[role=columnheader]{display:flex;min-width:0;align-items:center;overflow:hidden;padding:7px 9px;text-overflow:ellipsis;white-space:nowrap}.card-library-treegrid-row>[role=gridcell]+[role=gridcell],.card-library-treegrid-row>[role=columnheader]+[role=columnheader]{border-left:1px solid rgb(31 35 40 / 9%)}.card-library-treegrid-head{position:sticky;z-index:3;top:0;min-height:34px;border-bottom-color:#1f232833;background:#eef1f2;color:#3e525b;font-weight:700;letter-spacing:.045em}.card-library-treegrid-row:not(.card-library-treegrid-head):hover{background:#1f23280a}.card-library-treegrid-row.is-subject{background:#dfe8e5}.card-library-treegrid-row.is-level{background:#f5f8f8}.card-library-treegrid-row.is-series{background:#f9fbfb}.card-library-treegrid-row.is-card{min-height:42px;background:#fff}.card-library-treegrid-row.is-task{background:#fbfcfc}.card-library-treegrid-row.is-current{box-shadow:inset 3px 0 #1680a5;background:#e1f1f6}.card-library-tree-title{gap:6px;padding-left:calc(8px + (var(--card-library-depth, 0) * 21px))!important;font-family:system-ui,sans-serif}.card-library-tree-expander{display:inline-grid;width:24px;height:24px;flex:none;place-items:center;border:0;background:transparent;color:#405961;padding:0;font:18px/1 ui-monospace,monospace;cursor:pointer}.card-library-tree-expander:hover,.card-library-tree-expander:focus-visible{background:#165d6b1a;color:#165d6b;outline:1px solid rgb(22 93 107 / 28%)}.card-library-tree-expander.is-empty{cursor:default}.card-library-tree-link,.card-library-tree-label{display:flex;min-width:0;align-items:baseline;gap:7px;overflow:hidden;color:#10181c;text-decoration:none;white-space:nowrap}.card-library-tree-link:hover,.card-library-tree-link:focus-visible{color:#075d7c;outline:none;text-decoration:underline;text-underline-offset:2px}.card-library-tree-link strong,.card-library-tree-label strong{flex:none;color:inherit;font:700 16px/1.25 ui-monospace,monospace}.card-library-tree-link>span,.card-library-tree-label>span{min-width:0;overflow:hidden;color:inherit;text-overflow:ellipsis;white-space:nowrap;font:500 16px/1.25 system-ui,sans-serif}.card-library-treegrid-row.is-subject .card-library-tree-label strong,.card-library-treegrid-row.is-level .card-library-tree-label strong,.card-library-treegrid-row.is-series .card-library-tree-label strong{font-family:system-ui,sans-serif;font-weight:650}.card-library-tree-state{display:inline-flex;min-width:76px;min-height:24px;box-sizing:border-box;align-items:center;justify-content:center;border:1px solid transparent;border-radius:5px;color:#33474f;padding:2px 7px;font:650 14px/1 ui-monospace,monospace;white-space:nowrap}.card-library-tree-state[data-state=current]{border-color:#3184a0;background:#e9f5f8;color:#075d7c}.card-library-tree-state[data-state=online]{border-color:#4b9a7a;background:#edf8f2;color:#176144}.card-library-tree-state[data-state=plan]{border-color:#c59a49;background:#fff7e5;color:#775313}.card-library-treegrid-row.is-unavailable .card-library-tree-label,.card-library-treegrid-row.is-unavailable .card-library-tree-label strong{color:#10181c}.side-toc,.side-progress{min-height:0;flex:1;overflow-y:auto;background:#fff;color:#11191d}.side-toc>header,.side-progress>header{padding:16px 18px 13px;border-bottom:1px solid #bdc9ce;background:#f0f4f5}.side-toc>header small,.side-progress>header small{color:#53666f;font:750 9px/1 ui-monospace,monospace;letter-spacing:.08em}.side-toc>header h2,.side-progress>header h2{margin:4px 0 0;color:#10181c;font:750 21px/1.15 system-ui,sans-serif}.side-toc ol{margin:0;padding:7px 0 20px;list-style:none}.side-toc li{border-bottom:1px solid #e2e7e9}.side-toc a{display:grid;grid-template-columns:34px minmax(0,1fr);gap:9px;align-items:baseline;padding:10px 16px;color:#11191d;text-decoration:none}.side-toc a:hover,.side-toc a:focus-visible{background:#eaf5f8;outline:none}.side-toc a span{color:#267493;font:800 10px/1 ui-monospace,monospace}.side-toc a strong{font:650 13px/1.3 system-ui,sans-serif}.side-progress-summary{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:16px;border:1px solid #b6c2c7;background:#f4f7f8;padding:14px;font:650 13px/1.3 system-ui,sans-serif}.side-progress-summary strong{color:#1d617b;font:850 20px/1 ui-monospace,monospace}.side-progress-links{display:grid;gap:8px;padding:0 16px 18px}.side-progress-links a{border:1px solid #87979e;border-radius:3px;background:#fff;color:#174f67;padding:10px 12px;text-decoration:none;font:700 12px/1.2 system-ui,sans-serif}.side-progress-links a:hover,.side-progress-links a:focus-visible{border-color:#167ca4;background:#edf7fa;outline:none}.side-progress-error{margin:0 16px 14px;border-left:3px solid #a52d2d;background:#fff1f1;color:#7d1f1f;padding:8px 10px;font:12px/1.35 system-ui,sans-serif}.classroom-panel{display:flex;min-height:0;flex:1;flex-direction:column;overflow:hidden;background:#f7f9fa;color:#11191d}.classroom-treegrid{min-height:0;flex:1;overflow:auto;margin:8px;border:1px solid rgb(31 35 40 / 18%);border-radius:6px;background:#fff;scrollbar-color:#93a2a8 #edf1f2;scrollbar-width:thin}.classroom-treegrid-row{display:grid;min-width:920px;box-sizing:border-box;grid-template-columns:minmax(410px,1fr) 100px 150px 150px 110px;align-items:center;border-bottom:1px solid rgb(31 35 40 / 8%);color:#273941;font:500 16px/1.25 ui-monospace,monospace}.classroom-treegrid-row>[role=gridcell],.classroom-treegrid-row>[role=columnheader]{min-width:0;overflow:hidden;padding:8px;text-overflow:ellipsis;white-space:nowrap}.classroom-treegrid-row>[role=gridcell]+[role=gridcell],.classroom-treegrid-row>[role=columnheader]+[role=columnheader]{border-left:1px solid rgb(31 35 40 / 8%)}.classroom-treegrid-head{position:sticky;z-index:2;top:0;border-bottom-color:#1f23282e;background:#eef1f2;color:#3e525b;font-weight:650;letter-spacing:.04em}.classroom-node-row:hover{background:#1f23280a}.classroom-node-row.is-class{background:#dfe8e5}.classroom-node-row.is-student{background:#f8faf9}.classroom-node-row.is-task{background:#edf3f5}.classroom-node-row.is-block,.classroom-node-row.is-exercises{background:#f5f7f8}.classroom-node-row.is-phase{background:#fafbfb}.classroom-node-title{display:flex;align-items:center;gap:6px;padding-left:calc(8px + (var(--classroom-depth, 0) * 20px))!important;font-family:system-ui,sans-serif}.classroom-node-title strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:500}.classroom-node-row.is-class .classroom-node-title strong,.classroom-node-row.is-student .classroom-node-title strong,.classroom-node-row.is-task .classroom-node-title strong{font-weight:650}.classroom-expander{display:inline-grid;width:24px;height:24px;flex:none;place-items:center;border:0;background:transparent;color:#405961;padding:0;font:18px/1 ui-monospace,monospace;cursor:pointer}.classroom-expander:hover,.classroom-expander:focus-visible{background:#165d6b1a;color:#165d6b;outline:1px solid rgb(22 93 107 / 28%)}.classroom-expander.is-empty{cursor:default}.classroom-status,.classroom-sync,.classroom-visit,.classroom-commit{display:inline-flex;min-width:92px;box-sizing:border-box;align-items:center;justify-content:center;border:1px solid;border-radius:5px;padding:4px 6px;font:550 16px/1 ui-monospace,monospace;letter-spacing:.015em}.classroom-status[data-status=online]{border-color:#6b9a87;background:#e7f4ee;color:#155e43}.classroom-status[data-status=away]{border-color:#baa06a;background:#fff5d9;color:#765510}.classroom-status[data-status=offline]{border-color:#a5afb3;background:#f0f2f3;color:#596970}.classroom-status[data-status=error]{border-color:#bd7b7b;background:#fff0f0;color:#8c2929}.classroom-sync[data-sync=follow]{border-color:#6c98aa;background:#e8f3f7;color:#155c77}.classroom-sync[data-sync=paused]{border-color:#baa06a;background:#fff6df;color:#765510}.classroom-sync[data-sync=local]{border-color:#9a86ae;background:#f4eef9;color:#65427c}.classroom-visit[data-visit=present],.classroom-commit[data-commit=committed]{border-color:#6b9a87;background:#e7f4ee;color:#155e43}.classroom-visit[data-visit=missed],.classroom-commit[data-commit=missing]{border-color:#bd7b7b;background:#fff0f0;color:#8c2929}.classroom-visit[data-visit=pending],.classroom-commit[data-commit=working]{border-color:#baa06a;background:#fff6df;color:#765510}.classroom-legend{display:flex;flex:none;flex-wrap:wrap;gap:7px 12px;border-top:1px solid #aebbc1;background:#edf1f2;padding:9px 11px;color:#485c65;font:500 16px/1.35 system-ui,sans-serif}.classroom-legend span{display:inline-flex;align-items:center;gap:4px}.classroom-legend i{width:12px;height:12px;border:1px solid #73858c;border-radius:50%;background:#aeb7bb}.classroom-legend i[data-status=online]{border-color:#3e7c63;background:#45a27b}.classroom-legend i[data-status=away]{border-color:#a0782d;background:#dcae51}.classroom-legend i[data-status=offline]{border-color:#859399;background:#b6c0c4}.classroom-legend b{color:#65427c;font:600 16px/1 ui-monospace,monospace}.viewer-chrome.is-nvim-fit{display:flex;width:100%;height:100vh;height:100dvh;max-height:100dvh;flex-direction:column;overflow:hidden;background:#11171a}.viewer-chrome.is-nvim-fit .topbar,.viewer-chrome.is-nvim-fit .viewpoint-bar,.viewer-chrome.is-nvim-fit .allocator-panel{flex:none}.viewer-chrome.is-nvim-fit .nvim-panel{display:flex;min-height:0;flex:1;flex-direction:column}.viewer-chrome.is-nvim-fit .nvim-screen-scroll{min-height:0;height:auto!important;flex:1}.viewer-chrome.is-nvim-fit .nvim-resize-handle{display:none}.viewer-chrome.is-nvim-fit .nvim-screen-stage{width:100%;height:100%;margin:0;zoom:1}.viewer-chrome.is-nvim-fit .nvim-screen-content{right:1mm;overflow:hidden;scrollbar-width:none}.viewer-chrome.is-nvim-fit .nvim-screen-grid{display:flex;width:100%;min-height:0;height:100%;align-items:center;justify-content:center}.viewer-chrome.is-nvim-fit .nvim-screen{width:auto!important;height:auto!important;max-width:100%;max-height:100%}.viewer-chrome.is-nvim-fit .nvim-screen-content::-webkit-scrollbar{display:none}.topbar-nvim-section{display:flex;align-items:center;min-width:0;gap:6px}.nvim-toolbar-boundary{flex:none;color:#6f7d83;font:700 14px/1 ui-monospace,monospace}.nvim-toolbar-context{flex:none;width:5ch;color:#263238;font:800 12px/1 ui-monospace,monospace;letter-spacing:.08em;text-align:center}.nvim-toolbar-actions{display:flex;align-items:center;gap:3px}.nvim-toolbar-button{display:inline-flex;align-items:center}.nvim-toolbar-key{flex:0 0 2ch;color:#267697;font:inherit;text-align:center}.nvim-toolbar-label{flex:0 0 5ch;max-width:5ch;overflow:hidden;text-align:left;white-space:nowrap}.topbar-nvim-meta{display:flex;align-items:baseline;min-width:0;max-width:min(44vw,720px);gap:6px}.topbar-nvim-meta strong,.topbar-nvim-meta small{overflow:auto;text-overflow:ellipsis;white-space:nowrap}.topbar-nvim-meta strong{color:#263238;font:700 12px/1.25 system-ui,sans-serif}.topbar-nvim-meta small{color:#66747a;font:500 10px/1.25 system-ui,sans-serif}.viewer-nvim-toggle{border:1px solid #68747a;border-radius:3px;background:#fff;color:#263238;padding:2px 8px;font:650 16px/1.3 system-ui,sans-serif;cursor:pointer}.viewer-nvim-toggle[aria-pressed=true]{border-color:#267697;background:#eaf6fb;color:#174d64}.allocator-panel{width:100%;box-sizing:border-box;border-top:1px solid #40515a;border-bottom:1px solid #40515a;background:#f7f9f5;color:#182127;box-shadow:0 4px 12px #0002;font:11px/1.25 system-ui,sans-serif}.allocator-panel>header{display:grid;grid-template-columns:125px minmax(260px,auto) 1fr;gap:8px;align-items:baseline;min-height:22px;padding:3px 8px;border-bottom:1px solid #b7c1c4;background:#e8eef0}.allocator-panel>header>span{color:#166987;font:800 9px/1.2 ui-monospace,monospace;letter-spacing:.06em}.allocator-panel>header>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:750 11px/1.2 ui-monospace,monospace}.allocator-panel>header>small{overflow:hidden;color:#536168;text-overflow:ellipsis;white-space:nowrap}.allocator-panel-body{display:grid;grid-template-columns:230px minmax(420px,1fr) minmax(310px,.8fr);gap:9px;align-items:stretch;padding:5px 8px 7px}.allocator-metrics{display:grid;grid-template-columns:1fr 1fr;gap:3px 8px;margin:0}.allocator-metrics>div{min-width:0;border-left:2px solid #8ea2ab;padding-left:5px}.allocator-metrics dt{color:#627077;font:750 7px/1.2 ui-monospace,monospace;letter-spacing:.05em}.allocator-metrics dd{margin:1px 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:700 10px/1.2 ui-monospace,monospace}.allocator-arena-view{min-width:0}.allocator-arena-view.is-inactive{opacity:.42}.allocator-arena-labels{display:flex;justify-content:space-between;gap:8px;margin-bottom:3px;color:#536168;font:700 8px/1.2 ui-monospace,monospace}.allocator-arena-labels strong{color:#075f80}.allocator-pinned-arena{position:relative;display:grid;grid-template-columns:repeat(var(--allocator-size),minmax(2px,1fr));height:32px;border:1px solid #28343a;background:#fff}.allocator-pinned-arena i{min-width:0;border-right:1px solid #e1e5e6;background:#fbfcfc}.allocator-pinned-arena i:nth-child(8n){border-right-color:#87969d}.allocator-pinned-arena i.is-allocated{border-right-color:#b2d8e6;background:#43a8ce}.allocator-cursor{position:absolute;z-index:2;top:-4px;bottom:-4px;width:2px;background:#d02d25;transform:translate(-1px);box-shadow:0 0 0 1px #fff9}.allocator-cursor:before{content:"allocp";position:absolute;top:1px;left:4px;color:#8d1d17;font:800 7px/1 ui-monospace,monospace}.allocator-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 7px;min-width:0}.allocator-facts>div{display:flex;min-width:0;justify-content:space-between;gap:5px;border-bottom:1px dotted #b4bec2}.allocator-facts span{overflow:hidden;color:#46565e;text-overflow:ellipsis;white-space:nowrap}.allocator-facts code{overflow:hidden;color:#142e39;text-overflow:ellipsis;white-space:nowrap;font:700 9px/1.3 ui-monospace,monospace}.allocator-facts p{grid-column:1 / -1;margin:0;color:#647278}.nvim-panel{width:100%;box-sizing:border-box;border-bottom:1px solid #52616a;background:var(--desk, #eee);color:#e7eef1;box-shadow:0 5px 16px #0004;font:12px/1.3 system-ui,sans-serif}.nvim-status{flex:none;border:1px solid #66757c;border-radius:999px;padding:1px 6px;color:#c9d3d8;font:750 9px/1.35 ui-monospace,monospace;letter-spacing:.04em}.nvim-status--connected,.nvim-status--ready{border-color:#31a86d;background:#173b2a;color:#8aefb7}.nvim-status--connecting,.nvim-status--replaying,.nvim-status--verifying{border-color:#c38f2a;background:#3e321b;color:#ffd47d}.nvim-status--failed,.nvim-status--offline,.nvim-status--unselected{border-color:#a34b4b;background:#3b2020;color:#faa}.nvim-control-indicator{flex:none;border:1px solid #60747e;border-radius:3px;background:#222e34;color:#b9c6cc;padding:3px 8px;font:700 10px/1.2 ui-monospace,monospace;letter-spacing:.04em;white-space:nowrap;cursor:pointer}.nvim-control-indicator.is-active{border-color:#3cb3e2;background:#17465a;color:#d9f5ff}.nvim-control-indicator.is-engaged{box-shadow:inset 0 0 0 1px #8ee4ff}.nvim-work-indicator{flex:none;border:1px solid #7a878d;border-radius:3px;background:#f4f6f7;color:#56646a;padding:3px 8px;font:700 10px/1.2 ui-monospace,monospace;letter-spacing:.03em;white-space:nowrap;cursor:pointer}.nvim-work-indicator.is-active{border-color:#cf3d31;background:#fff0ee;color:#9f241b}.nvim-work-indicator.is-engaged{box-shadow:inset 0 0 0 1px #cf3d31}.nvim-work-indicator:disabled{border-color:#a8b0b4;background:#e6e9ea;color:#7c878c;cursor:not-allowed;opacity:.8}.nvim-height-toggle{flex:none;border:1px solid #75848b;border-radius:3px;background:#f4f6f7;color:#425159;padding:3px 8px;font:700 10px/1.2 ui-monospace,monospace;letter-spacing:.03em;white-space:nowrap;cursor:pointer}.nvim-height-toggle.is-active{border-color:#267697;background:#eaf6fb;color:#174d64}.topbar-nvim-section .nvim-toolbar-button{flex:0 0 9.5ch;width:9.5ch;min-width:9.5ch;max-width:9.5ch;height:24px;box-sizing:border-box;justify-content:flex-start;gap:.55ch;padding:2px .55ch;font:750 12px/1 ui-monospace,monospace;letter-spacing:0}.nvim-shortcut-strip{flex:none;color:#536168;font:650 10px/1.2 ui-monospace,monospace;white-space:nowrap}.nvim-shortcut-strip kbd{color:#263238;font:inherit}.nvim-screen-scroll{position:relative;width:100%;box-sizing:border-box;height:var(--nvim-panel-height, 75vh);max-height:none;min-height:240px;overflow:auto;overscroll-behavior:contain;background:var(--desk, #eee);outline:none;scrollbar-color:#58666d #171d20}.nvim-screen-stage{position:relative;width:210mm;margin:0 auto;background:#fff;zoom:var(--viewer-canvas-scale)}.nvim-screen-surface{position:absolute;inset:0 4mm;box-sizing:border-box;padding:1mm;background:#fff}.nvim-screen-frame{position:relative;height:100%;box-sizing:border-box;border:1px solid #267697;background:#101315;box-shadow:0 0 0 3px #000}.nvim-screen-scroll[data-sync=on] .nvim-screen-frame{border-color:#35b9ef}.nvim-screen-scroll[data-control=true] .nvim-screen-frame{box-shadow:0 0 0 3px #cf3d31}.nvim-screen-scroll[data-control=true]{cursor:text}.nvim-screen-content{position:absolute;inset:1mm -5mm 1mm 1mm;overflow-x:hidden;overflow-y:scroll;overscroll-behavior:contain;background:transparent;scrollbar-width:thin;scrollbar-color:#829097 #fff}.nvim-screen-grid{width:calc(100% - 6mm);min-height:100%;background:#101315}.nvim-screen-content::-webkit-scrollbar{width:.8mm}.nvim-screen-content::-webkit-scrollbar-track{background:#fff}.nvim-screen-content::-webkit-scrollbar-thumb{border:.12mm solid #fff;border-radius:99px;background:#829097}.nvim-screen-content::-webkit-scrollbar-thumb:hover{background:#aeb9be}.nvim-screen{display:block;max-width:none;margin:0;outline:none;image-rendering:auto}.nvim-screen:focus{box-shadow:none}.nvim-screen-empty{position:absolute;inset:0;display:grid;place-content:center;gap:5px;padding:16px;color:#9cabb2;text-align:center}.nvim-screen-empty strong{color:#e0e8eb;font:750 11px/1.3 ui-monospace,monospace}.nvim-resize-handle{position:relative;width:100%;height:12px;border-top:1px solid #46565e;background:#182126;cursor:ns-resize;touch-action:none}.nvim-resize-handle:after{content:"";position:absolute;top:4px;left:50%;width:min(160px,22vw);height:3px;border-radius:999px;background:#6c7e87;transform:translate(-50%)}.nvim-resize-handle:hover,.nvim-resize-handle:focus-visible{background:#23323a;outline:none}.nvim-resize-handle:hover:after,.nvim-resize-handle:focus-visible:after{background:#35b9ef}.shortcut-help-backdrop{position:fixed;z-index:200;inset:0;display:grid;place-items:center;padding:20px;background:#10171dcc}.shortcut-help{width:min(680px,calc(100vw - 40px));max-height:calc(100vh - 40px);overflow:auto;border:1px solid #71818a;border-radius:6px;background:#f8fafb;color:#172127;box-shadow:0 18px 60px #0008;font:14px/1.4 system-ui,sans-serif}.shortcut-help>header{display:flex;align-items:start;justify-content:space-between;gap:16px;padding:16px 18px;border-bottom:1px solid #c8d1d5;background:#e8eef1}.shortcut-help header small{color:#52646d;font:750 10px/1.2 ui-monospace,monospace;letter-spacing:.08em}.shortcut-help h2{margin:4px 0 0;font-size:17px}.shortcut-help header button{width:32px;height:32px;border:1px solid #71818a;border-radius:3px;background:#fff;font:22px/1 system-ui,sans-serif;cursor:pointer}.shortcut-help dl{margin:0;padding:10px 18px}.shortcut-help dl>div{display:grid;grid-template-columns:minmax(180px,.8fr) 1.5fr;gap:14px;align-items:center;padding:8px 0;border-bottom:1px solid #dde3e6}.shortcut-help dt,.shortcut-help dd{margin:0}.shortcut-help kbd{display:inline-block;border:1px solid #839198;border-bottom-width:2px;border-radius:3px;background:#fff;padding:3px 7px;font:700 12px/1.2 ui-monospace,monospace}.shortcut-help>p{margin:0;padding:4px 18px 16px;color:#526068}.memory-react{border:1px solid #555;background:#fff;font:14px/1.35 system-ui,sans-serif;padding:10px;color:#1b1b1b}.memory-react>header{display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid #bbb;padding-bottom:7px}.memory-react>header small{display:block;margin-bottom:2px;color:#555;font:700 10px/1.2 ui-monospace,monospace;letter-spacing:.08em}.memory-react h3{font-size:15px;margin:0}.memory-actions{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}.memory-actions button{border:1px solid #777;background:#fff;padding:4px 8px;cursor:pointer}.memory-actions button[aria-pressed=true]{background:#dff3fb;border-color:#237da1;font-weight:700}.memory-lanes{display:grid;grid-template-columns:repeat(auto-fit,minmax(125px,1fr));gap:6px;margin:8px 0}.memory-lane{min-width:0;display:flex;flex-direction:column;align-items:stretch;gap:3px;border:1px solid #999;background:#fafafa;padding:7px;text-align:left}.memory-lane.compile{background:#fff8dc}.memory-lane.bss{background:#edf7fb}.memory-lane.stack{background:#f3f8ef}.memory-lane.registers{background:#f4f4f4}.memory-lane.text{background:#f7f0fa}.memory-lane>b{font-size:11px;letter-spacing:.04em}.memory-lane button{border:1px solid transparent;background:transparent;padding:3px;text-align:left;cursor:pointer}.memory-lane button:hover,.memory-lane button.active{border-color:#238bb7;background:#fff}.memory-lane code{font-size:10px;white-space:normal}.arena-wrap{margin:12px 0 6px}.arena-label{display:flex;justify-content:space-between;margin-bottom:4px}.arena{--allocp: 0;--arena-size: 64;position:relative;display:grid;grid-template-columns:repeat(var(--arena-size),1fr);height:40px;border:1px solid #222;margin-bottom:28px}.arena i{border-right:1px solid #ddd}.arena .allocp{position:absolute;left:calc(var(--allocp) / var(--arena-size) * 100%);top:43px;transform:translate(-50%);color:#087da8;font:700 11px/1.2 ui-monospace,monospace;white-space:nowrap}.memory-stage{border-top:1px solid #ddd;padding-top:7px;margin:0}.memory-inspector{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;margin-top:7px;padding:7px;border-left:3px solid #238bb7;background:#f5fbfd}.memory-inspector strong{grid-row:1/3}.memory-inspector code{font-size:11px}.memory-inspector span{font-size:12px}.asset-static-fallback{display:none}.uml-react{border:1px solid #555;background:#fff;font:13px/1.35 system-ui,sans-serif;color:#1b1b1b}.uml-react>header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border-bottom:1px solid #bbb;background:#fafafa}.uml-react>header small{display:block;color:#555;font:700 10px/1.2 ui-monospace,monospace;letter-spacing:.06em}.uml-react h3{margin:2px 0 0;font-size:15px}.uml-actions{display:flex;gap:3px;flex-wrap:wrap;justify-content:flex-end}.uml-actions button{border:1px solid #aaa;border-radius:2px;background:#fcfcfc;color:#444;padding:2px 6px;font:600 10px/1.25 ui-monospace,monospace;cursor:pointer}.uml-actions button:hover{border-color:#64879a;background:#f5fafc}.uml-actions button[data-completed=true]{border-color:#62a47f;background:#edf8f1;color:#14613a}.uml-actions button[aria-pressed=true]{border-color:#287495;background:#edf7fb;color:#174d64;box-shadow:inset 0 0 0 1px #b9dce9}.uml-canvas{display:block;overflow-x:hidden;overflow-y:visible;box-sizing:border-box;padding:8px 10px;text-align:center}.uml-svg-host{width:max-content;min-width:100%}.uml-canvas img,.uml-svg-host svg{display:block;width:auto!important;max-width:none!important;height:auto!important;max-height:none;margin-inline:auto;object-fit:contain}.uml-svg-host{cursor:pointer}.uml-svg-host.is-tiled{position:relative;width:var(--uml-tile-page-width);min-width:var(--uml-tile-page-width);height:var(--uml-tile-page-height);overflow:hidden;cursor:default}.uml-svg-host.is-tiled>svg{position:absolute;top:var(--uml-tile-top);left:var(--uml-tile-left);margin:0}.uml-static-crop{position:absolute;top:var(--uml-tile-top);left:var(--uml-tile-left);overflow:hidden}.uml-static-crop>img{display:block;max-width:none!important;max-height:none!important;margin:0!important;object-fit:fill!important;transform-origin:0 0}.uml-tile-part{display:inline-block;margin-left:.65em;color:#607985;font:650 9px/1.2 ui-monospace,monospace;letter-spacing:.03em;white-space:nowrap}.uml-phase-actions>span{display:inline-flex;align-items:center;border:1px solid #9eb2bd;border-radius:2px;background:#f1f5f7;color:#3d5967;padding:2px 6px;font:700 10px/1.25 ui-monospace,monospace}.uml-stage-region{cursor:pointer;transition:fill .14s ease,stroke .14s ease,stroke-width .14s ease}.uml-stage-region-completed.uml-stage-region-bg{fill:#e7f6ed!important;fill-opacity:1!important;stroke:#258154!important;stroke-width:3px!important}.uml-stage-region-completed.uml-stage-region-outline{stroke:#258154!important;stroke-width:3px!important}.uml-stage-region-active.uml-stage-region-bg{fill:#e7f6fc!important;fill-opacity:1!important;stroke:#187ea7!important;stroke-width:3px!important}.uml-stage-region-active.uml-stage-region-outline{stroke:#187ea7!important;stroke-width:3px!important}.uml-stage-region-active.uml-stage-region-completed.uml-stage-region-bg{fill:#e7f6ed!important}.uml-stage-region:focus{outline:none;stroke:#005f87!important;stroke-width:4px!important}.uml-inline-warning{display:block;padding-top:5px;color:#8b2d20;font-size:11px}.uml-stage{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;margin:0 8px 8px;padding:8px;border-left:3px solid #315f78;background:#eef7fb}.uml-stage strong{grid-row:1/3}.uml-stage code{grid-column:2;font-size:11px}.uml-approval{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 8px 8px;padding-top:6px;border-top:1px solid #d2d2d2;color:#555;font-size:11px}.uml-approval button{flex:0 0 auto;border:1px solid #477a5d;border-radius:2px;background:#edf8f1;color:#174e30;padding:3px 7px;font:600 10px/1.25 system-ui,sans-serif;cursor:pointer}.uml-approval button:disabled{border-color:#bbb;background:#f3f3f3;color:#888;cursor:not-allowed}.uml-react>.uml-snapshot-header{display:block;padding:5px 8px 4px}.uml-header-first-line{display:flex;align-items:center;justify-content:space-between;gap:10px}.uml-header-first-line h3{flex:1 1 auto;min-width:0;margin:0;color:#20282c;text-align:left;font-size:12px;line-height:1.25}.uml-header-first-line h3>span{color:#245f7a;font-family:ui-monospace,monospace;letter-spacing:.04em}.uml-header-description{max-width:620px;margin:2px 0 0;color:#555;text-align:left;font-size:8px}.uml-header-navigation{display:flex;flex:0 0 auto;align-items:center;justify-content:flex-end;gap:6px}.uml-page-continuation{display:inline-flex;flex:0 0 auto;align-items:center;gap:2px;min-height:22px;border:1px solid #86a5b3;border-radius:3px;background:#edf7fa;padding:1px 5px;color:#126b8c;font:850 15px/1 ui-monospace,monospace;animation:uml-continuation-pulse 1.15s ease-in-out infinite alternate}.uml-page-continuation i{display:inline-grid;min-width:14px;place-items:center;font-style:normal}@keyframes uml-continuation-pulse{0%{border-color:#9fb5be;background:#f6fafb;color:#4c7180;box-shadow:none}to{border-color:#167ca4;background:#dff2f8;color:#075c7c;box-shadow:0 0 0 2px #8dcde433}}@media(prefers-reduced-motion:reduce){.uml-page-continuation{animation:none}}.uml-phase-actions,.uml-step-actions{display:flex;align-items:center;flex-wrap:wrap;gap:3px}.uml-phase-actions{flex:0 0 auto;flex-wrap:nowrap;justify-content:flex-end;white-space:nowrap}.uml-phase-actions button,.uml-step-actions button,.uml-edit-toggle,.uml-snapshot-cursor button{border:1px solid #aaa;border-radius:2px;background:#fff;color:#444;cursor:pointer;font:600 9px/1.2 ui-monospace,monospace}.uml-edit-toggle{min-width:42px;padding:3px 7px;border:1px solid #8a9ca5;border-radius:2px;background:#f7f9fa;color:#334d59;cursor:pointer;font:750 9px/1.2 ui-monospace,monospace;letter-spacing:.04em}.uml-edit-toggle.is-active{border-color:#b56b16;background:#fff3df;color:#713c00;box-shadow:inset 0 0 0 1px #f0c78f}.uml-phase-actions button{padding:3px 7px}.uml-phase-actions button[aria-pressed=true]{border-color:#287495;background:#edf7fb;color:#174d64}.uml-step-actions{min-height:0;padding:0;border:0;background:transparent}.uml-step-actions>span{margin-right:4px;color:#555;font:700 9px/1.2 ui-monospace,monospace}.uml-step-actions button{min-width:25px;padding:2px 4px}.uml-step-actions button[data-completed=true]{border-color:#62a47f;background:#edf8f1;color:#14613a}.uml-step-actions button[aria-pressed=true]{border-color:#287495;background:#287495;color:#fff}.uml-step-actions button[data-mode=CODE]:after,.uml-step-actions button[data-mode=RUN]:after{margin-left:3px;font-size:7px;letter-spacing:.02em}.uml-step-actions button[data-mode=CODE]:after{content:"C"}.uml-step-actions button[data-mode=RUN]:after{content:"R"}.uml-snapshot-layout{background:#fff;border-bottom:1px solid #ddd}.uml-step-canvas{min-width:0}.uml-step-canvas .uml-svg-host svg{max-height:none}.uml-step-hit{cursor:pointer;fill:transparent}.uml-step-hit-active{fill:#3ea6ce!important;fill-opacity:.08!important}.uml-step-element{transition:fill .12s ease,stroke .12s ease,stroke-width .12s ease}line.uml-step-element-completed:not(.uml-step-element-active){stroke:#258154!important;stroke-width:1.8px!important}polygon.uml-step-element-completed:not(.uml-step-element-active){fill:#258154!important;stroke:#258154!important}text.uml-step-element-completed:not(.uml-step-element-active){fill:#1d7049!important}line.uml-step-element-active{stroke:#087ca8!important;stroke-width:2.6px!important}polygon.uml-step-element-active{fill:#087ca8!important;stroke:#087ca8!important}text.uml-step-element-active{fill:#075d7d!important;font-weight:700!important}.uml-step-hit:focus{outline:none;stroke:#bd554d;stroke-width:.8px;stroke-dasharray:3 3}.uml-class-svg-active>g>*:not(.uml-class-focus-region):not(.uml-class-step-hit):not(.uml-layout-hit):not(.uml-layout-resize){opacity:.62;transition:opacity .12s ease}.uml-class-svg-active .uml-step-element:not(.uml-step-element-active){opacity:.98!important}.uml-class-svg-active text.uml-step-element-tone-a:not(.uml-step-element-active){fill:#174f69!important}.uml-class-svg-active text.uml-step-element-tone-b:not(.uml-step-element-active){fill:#586581!important}.uml-class-svg-active rect.uml-step-element-tone-a:not(.uml-step-element-active){fill:#eaf5f8!important;stroke:#3f7890!important}.uml-class-svg-active rect.uml-step-element-tone-b:not(.uml-step-element-active){fill:#f2eef8!important;stroke:#7b86a1!important}.uml-class-svg-active path.uml-step-element-tone-a:not(.uml-step-element-active),.uml-class-svg-active line.uml-step-element-tone-a:not(.uml-step-element-active),.uml-class-svg-active polygon.uml-step-element-tone-a:not(.uml-step-element-active){stroke:#3f7890!important}.uml-class-svg-active path.uml-step-element-tone-b:not(.uml-step-element-active),.uml-class-svg-active line.uml-step-element-tone-b:not(.uml-step-element-active),.uml-class-svg-active polygon.uml-step-element-tone-b:not(.uml-step-element-active){stroke:#7b86a1!important}.uml-class-svg-active .uml-step-element-active{opacity:1!important}.uml-class-svg-active text.uml-step-element-active{fill:#b42318!important;font-weight:700!important}.uml-class-svg-active path.uml-step-element-active,.uml-class-svg-active line.uml-step-element-active,.uml-class-svg-active polygon.uml-step-element-active,.uml-class-svg-active rect.uml-step-element-active{stroke:#bd554d!important;stroke-width:1.35px!important}.uml-class-svg-active polygon.uml-step-element-active{fill:#bd554d!important}.uml-class-focus-region{display:none}.uml-step-canvas.is-layout-editing{position:relative;touch-action:none;background-color:#fbfcfd;background-image:linear-gradient(#7d98a20d 1px,transparent 1px),linear-gradient(90deg,#7d98a20d 1px,transparent 1px);background-size:12px 12px}.uml-layout-editing .uml-step-hit,.uml-layout-editing .uml-class-focus-region{pointer-events:none}.uml-layout-hit{fill:#4e9ec4;fill-opacity:.035;stroke:#247a9e;stroke-width:1.1px;stroke-dasharray:5 3;vector-effect:non-scaling-stroke;cursor:grab;pointer-events:all}.uml-layout-hit:hover{fill-opacity:.09;stroke-width:1.6px}.uml-layout-hit.is-selected{fill:#f7a928;fill-opacity:.08;stroke:#b66b00;stroke-width:1.8px;stroke-dasharray:none}.uml-layout-hit:active{cursor:grabbing}.uml-layout-resize{fill:#fff;stroke:#b66b00;stroke-width:1.5px;vector-effect:non-scaling-stroke;cursor:nwse-resize;pointer-events:all}.uml-layout-editor{display:grid;grid-template-columns:minmax(140px,.8fr) minmax(240px,1.8fr) minmax(260px,1.4fr);gap:7px 10px;align-items:end;padding:8px 10px 9px;border-top:2px solid #b97822;background:#f7f5f0;color:#26343a;text-align:left;font:10px/1.3 system-ui,sans-serif}.uml-layout-editor-title{grid-column:1/-1;display:flex;align-items:baseline;gap:9px}.uml-layout-editor-title strong{color:#713c00;font:800 11px/1.2 ui-monospace,monospace;text-transform:uppercase}.uml-layout-editor-title span{color:#65737a}.uml-layout-editor-title b{margin-left:auto;color:#9c2f1b;font-size:9px}.uml-layout-editor label{display:grid;gap:2px;color:#52636b;font:700 8px/1.2 ui-monospace,monospace;text-transform:uppercase}.uml-layout-editor input,.uml-layout-editor select,.uml-layout-editor textarea{box-sizing:border-box;width:100%;min-width:0;border:1px solid #9ca9ae;border-radius:2px;background:#fff;color:#172126;padding:4px 5px;font:10px/1.25 ui-monospace,monospace;text-transform:none}.uml-layout-editor textarea{resize:vertical;line-height:1.35}.uml-layout-number-grid,.uml-layout-style-grid{display:grid;gap:5px}.uml-layout-number-grid{grid-template-columns:repeat(4,minmax(48px,1fr))}.uml-layout-style-grid{grid-template-columns:repeat(5,minmax(54px,1fr))}.uml-layout-editor-text{align-self:stretch}.uml-layout-editor input[type=color]{min-height:27px;padding:2px}.uml-layout-editor-actions{grid-column:1/-1;display:flex;gap:5px}.uml-layout-editor-actions button{border:1px solid #87979f;border-radius:2px;background:#fff;color:#283940;padding:4px 8px;cursor:pointer;font:700 9px/1.2 ui-monospace,monospace}.uml-layout-editor-actions button.is-primary{border-color:#287495;background:#287495;color:#fff}.uml-layout-editor-actions button.is-danger{margin-left:auto;border-color:#a26156;color:#812b1c}.uml-layout-editor-actions button:disabled{opacity:.45;cursor:not-allowed}.uml-layout-editor output{grid-column:1/-1;min-height:1.2em;color:#52636b;font:9px/1.25 ui-monospace,monospace}@media(max-width:900px){.uml-layout-editor{grid-template-columns:1fr}.uml-layout-editor-title,.uml-layout-editor-actions,.uml-layout-editor output{grid-column:1}}@media print{.uml-edit-toggle,.uml-layout-editor,.uml-layout-hit,.uml-layout-resize{display:none!important}}.uml-snapshot-panel{display:grid;gap:8px;min-width:0;padding:8px;background:#fafafa;font-size:10px}.uml-snapshot-panel>header{display:flex;justify-content:space-between;gap:8px;align-items:center}.uml-snapshot-panel>header>div:first-child>span,.uml-snapshot-panel>header>div:first-child>strong{display:block}.uml-snapshot-panel>header>div:first-child>span{color:#5a5a5a;font:700 9px/1.2 ui-monospace,monospace}.uml-snapshot-panel>header>div:first-child>strong{font-size:12px}.uml-snapshot-panel>header>div:first-child>strong code{display:inline-block;min-width:24px;color:#075d7d}.uml-snapshot-cursor{display:flex;align-items:center;gap:4px}.uml-snapshot-cursor button{width:23px;height:23px;padding:0}.uml-snapshot-cursor button:disabled{opacity:.35;cursor:default}.uml-snapshot-cursor output{min-width:34px;text-align:center;font:700 9px/1 ui-monospace,monospace}.uml-snapshot-description{margin:0;color:#333}.uml-snapshot-panel section{min-width:0;border:1px solid #d0d0d0;background:#fff;padding:7px}.uml-snapshot-panel h4{margin:0 0 4px;color:#315f78;font:700 9px/1.2 ui-monospace,monospace;text-transform:uppercase}.uml-state-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;min-width:0}.uml-snapshot-registers dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:3px;margin:0}.uml-snapshot-registers dl>div{display:grid;grid-template-columns:auto 1fr;gap:5px;min-width:0;padding:2px 4px;border-left:2px solid #bbb;background:#f6f6f6}.uml-snapshot-registers dl>div.primary{grid-column:1/-1;border-color:#287495;background:#edf7fb}.uml-snapshot-registers dt{color:#555;font-weight:700}.uml-snapshot-registers dd,.uml-snapshot-variables dd,.uml-snapshot-memory dd{min-width:0;margin:0;overflow-wrap:anywhere;text-align:right;font:600 9px/1.25 ui-monospace,monospace}.uml-snapshot-variables dl{display:grid;gap:3px;margin:0}.uml-snapshot-variables dl>div{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:5px;padding:3px 5px;border-left:2px solid #5f899b;background:#f5f8f9}.uml-snapshot-variables dt{font-weight:700}.uml-snapshot-variables dt small{display:block;color:#777;font:8px/1.2 ui-monospace,monospace}.uml-snapshot-variables [data-state=uninitialised],.uml-stack-lane article[data-state=uninitialised]{color:#777;background:#f5f5f5}.uml-snapshot-variables [data-state=uninitialised] dt:after,.uml-stack-lane article[data-state=uninitialised]>strong:after{content:" ?";color:#9a6a00}.uml-arena-snapshot>div{position:relative;height:10px;border:1px solid #666;background:repeating-linear-gradient(90deg,#fff 0 7px,#eee 7px 8px)}.uml-arena-snapshot>div span{display:block;height:100%;background:#b8ddeb}.uml-arena-snapshot>div i{position:absolute;top:-3px;bottom:-3px;width:2px;background:#075d7d;transform:translate(-1px)}.uml-arena-snapshot>p{display:grid;grid-template-columns:1fr auto 1fr;gap:4px;margin:3px 0;font-size:8px}.uml-arena-snapshot>p code:last-child{text-align:right}.uml-arena-bytes{display:block;margin-bottom:4px;overflow-wrap:anywhere;color:#666;font-size:8px}.uml-snapshot-memory dl{display:grid;gap:2px;margin:0}.uml-snapshot-memory dl>div{display:grid;grid-template-columns:1fr auto;gap:4px;padding-top:2px;border-top:1px solid #eee}.uml-snapshot-memory dt{font-weight:700}.uml-snapshot-memory dt small{display:block;color:#777;font:8px/1.2 ui-monospace,monospace}.uml-snapshot-stack>header{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.uml-snapshot-stack>header>p{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:4px 9px;margin:0;color:#555;font-size:8px}.uml-stack-axis{display:flex;justify-content:space-between;gap:8px;margin:3px 89px 2px;color:#777;font:8px/1.2 ui-monospace,monospace}.uml-stack-lane{display:flex;align-items:stretch;min-width:0;overflow-x:auto;border:1px solid #66757c;background:#eef1f2}.uml-stack-boundary{display:grid;place-content:center;flex:0 1 82px;min-width:64px;padding:5px;background:#273941;color:#fff;text-align:center;font:700 8px/1.25 ui-monospace,monospace}.uml-stack-boundary small{color:#a9d9eb;font-size:8px;text-transform:uppercase}.uml-stack-gap{display:grid;place-content:center;flex:.7 1 70px;min-width:60px;min-height:52px;border-right:1px dashed #9da8ad;color:#78858b;text-align:center;font:8px/1.2 ui-monospace,monospace}.uml-stack-gap strong,.uml-stack-gap small{display:block}.uml-stack-gap strong{color:#52636b}.uml-stack-gap small{color:#78858b;font-size:8px}.uml-stack-lane article{display:grid;align-content:center;flex:1 1 92px;min-width:76px;padding:5px 7px;border-right:1px solid #9da8ad;background:#fff;text-align:center}.uml-stack-lane article[data-state=initialised]{border-top:3px solid #2c8060}.uml-stack-lane article[data-state=saved]{border-top:3px solid #6d7196;background:#f7f6fb}.uml-stack-lane article strong,.uml-stack-lane article code,.uml-stack-lane article small{display:block;overflow-wrap:anywhere}.uml-stack-lane article strong{font:700 9px/1.2 ui-monospace,monospace}.uml-stack-lane article code{margin:2px 0;color:#1f4555;font-size:8px}.uml-stack-lane article small{color:#777;font:8px/1.2 ui-monospace,monospace}.uml-snapshot-observation p{margin:0 0 3px}.uml-snapshot-observation small{display:block;overflow-wrap:anywhere;color:#666;font:8px/1.3 ui-monospace,monospace}.task-conclusion{margin:8px 0 0;padding:7px 9px;border:1px solid #315f78;background:#f3f9fc}.task-conclusion>strong{display:block;margin-bottom:3px;color:#315f78;font:700 10px/1.2 ui-monospace,monospace}.task-conclusion p{margin:0}.asset-source-link{display:inline-block;margin:5px 0;color:#315f78;font:600 11px/1.3 system-ui,sans-serif}.section-sheet--asset .section-heading{align-items:baseline;margin:0 0 1.5mm}.section-sheet--asset .section-heading .section-index{margin-right:4mm;color:#68757b;font-size:10px;font-weight:600}.section-sheet--asset .section-heading .section-title{color:#20282c;font:750 13px/1.2 system-ui,sans-serif}.section-sheet--asset .card-section>p{max-width:110ch;margin:0 0 2mm;color:#58656b;font:9px/1.3 system-ui,sans-serif}.section-sheet--asset .card-asset{margin-top:2mm}.lesson-progress-control{display:inline-flex;align-items:center;margin-right:7px;padding:2px 7px;border:1px solid #8c8c8c;border-radius:12px;background:#fff;cursor:pointer}.lesson-progress-control:disabled{cursor:wait;opacity:.6}.lesson-progress-control[data-status=approved]{background:#e7f6ed;border-color:#18794e}.lesson-progress-topbar{display:flex;flex:none;align-items:center;gap:5px;min-width:0;padding-left:7px;border-left:1px solid #a9b3b8;color:#33444c;font:650 10px/1.2 system-ui,sans-serif;white-space:nowrap}.lesson-progress-topbar strong{color:#52636b;font:800 9px/1 ui-monospace,monospace;letter-spacing:.05em}.lesson-progress-topbar output{min-width:3.8ch;border:1px solid #91a1a8;border-radius:999px;background:#fff;padding:2px 6px;color:#1e566e;text-align:center;font:800 9px/1 ui-monospace,monospace}.lesson-progress-topbar a{color:#245f7a;text-decoration:none}.lesson-progress-topbar a:hover,.lesson-progress-topbar a:focus-visible{text-decoration:underline}.lesson-progress-error{color:#9b1c1c;font-weight:900}.step-row{display:flex;align-items:center;margin:4px 0}.section-anchor{position:relative;top:-45px}.app-load-error{max-width:760px;margin:10vh auto;padding:24px;border:1px solid #9b1c1c;background:#fff;font-family:system-ui,sans-serif}.app-load-error pre{white-space:pre-wrap}@media(max-width:800px){.viewpoint-bar{grid-template-columns:repeat(4,minmax(0,1fr))}.viewpoint-bar button{min-height:28px}.card-library-toggle>span:last-child{display:none}.card-library-toggle{gap:4px;padding-inline:6px}.topbar-nvim-meta{display:none}.topbar-nvim-section .nvim-control-indicator{max-width:42vw;overflow:hidden;text-overflow:ellipsis}.nvim-shortcut-strip,.nvim-work-indicator{display:none}.allocator-panel>header{grid-template-columns:auto 1fr}.allocator-panel>header>small{display:none}.allocator-panel-body{grid-template-columns:1fr}.allocator-metrics,.allocator-facts{display:none}.memory-lanes{grid-template-columns:1fr 1fr}.memory-react>header,.uml-react>header{align-items:flex-start;flex-direction:column}.uml-header-first-line,.uml-header-navigation{width:100%;align-items:flex-start;flex-direction:column}.uml-header-navigation{gap:4px}.memory-actions{justify-content:flex-start}.uml-snapshot-layout{display:block}.uml-step-canvas{border:0}.uml-phase-actions{width:100%;justify-content:flex-end}.uml-state-grid{grid-template-columns:1fr}.uml-snapshot-stack>header{align-items:flex-start;flex-direction:column}.uml-snapshot-stack>header>p{justify-content:flex-start}.uml-stack-axis{margin-right:0;margin-left:0}}@media print{@page card-portrait{size:A4 portrait;margin:0}@page card-landscape{size:A4 landscape;margin:0}.sheet--portrait{page:card-portrait}.sheet--landscape{page:card-landscape}.paper{display:block;gap:0}.paper>.sheet,.paper>.sheet>.sheet-content,.paper>.sheet-spread>.sheet,.paper>.sheet-spread>.sheet>.sheet-content{height:auto;min-height:0;max-height:none;overflow:visible}.sheet-spread{display:contents!important}.viewer-chrome,.side-panel-dock,.memory-react{display:none!important}.asset-static-fallback{display:block!important;width:100%}.uml-actions,.uml-phase-actions,.uml-step-actions,.uml-snapshot-panel,.uml-stage,.uml-approval,.asset-source-link,.lesson-progress-topbar,.lesson-progress-control,.uml-page-continuation{display:none!important}} diff --git a/web/app.js b/web/app.js new file mode 100644 index 0000000..c1573ef --- /dev/null +++ b/web/app.js @@ -0,0 +1,61 @@ +var Pp=Object.create;var ks=Object.defineProperty;var Tp=Object.getOwnPropertyDescriptor;var Mp=Object.getOwnPropertyNames;var Rp=Object.getPrototypeOf,Op=Object.prototype.hasOwnProperty;var $t=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var $p=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Mp(t))!Op.call(e,o)&&o!==n&&ks(e,o,{get:()=>t[o],enumerable:!(r=Tp(t,o))||r.enumerable});return e};var bo=(e,t,n)=>(n=e!=null?Pp(Rp(e)):{},$p(t||!e||!e.__esModule?ks(n,"default",{value:e,enumerable:!0}):n,e));var Rs=$t(W=>{"use strict";var xr=Symbol.for("react.element"),Ip=Symbol.for("react.portal"),Fp=Symbol.for("react.fragment"),Dp=Symbol.for("react.strict_mode"),jp=Symbol.for("react.profiler"),Up=Symbol.for("react.provider"),Vp=Symbol.for("react.context"),Bp=Symbol.for("react.forward_ref"),Hp=Symbol.for("react.suspense"),Kp=Symbol.for("react.memo"),Wp=Symbol.for("react.lazy"),Ss=Symbol.iterator;function Gp(e){return e===null||typeof e!="object"?null:(e=Ss&&e[Ss]||e["@@iterator"],typeof e=="function"?e:null)}var _s={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Cs=Object.assign,Ls={};function Vn(e,t,n){this.props=e,this.context=t,this.refs=Ls,this.updater=n||_s}Vn.prototype.isReactComponent={};Vn.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Vn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function zs(){}zs.prototype=Vn.prototype;function Qi(e,t,n){this.props=e,this.context=t,this.refs=Ls,this.updater=n||_s}var qi=Qi.prototype=new zs;qi.constructor=Qi;Cs(qi,Vn.prototype);qi.isPureReactComponent=!0;var Ns=Array.isArray,As=Object.prototype.hasOwnProperty,Xi={current:null},Ps={key:!0,ref:!0,__self:!0,__source:!0};function Ts(e,t,n){var r,o={},i=null,l=null;if(t!=null)for(r in t.ref!==void 0&&(l=t.ref),t.key!==void 0&&(i=""+t.key),t)As.call(t,r)&&!Ps.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(s===1)o.children=n;else if(1{"use strict";Os.exports=Rs()});var Ks=$t(le=>{"use strict";function nl(e,t){var n=e.length;e.push(t);e:for(;0>>1,o=e[r];if(0>>1;rEo(s,n))uEo(d,s)?(e[r]=d,e[u]=n,r=u):(e[r]=s,e[l]=n,r=l);else if(uEo(d,n))e[r]=d,e[u]=n,r=u;else break e}}return t}function Eo(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}typeof performance=="object"&&typeof performance.now=="function"?($s=performance,le.unstable_now=function(){return $s.now()}):(Ji=Date,Is=Ji.now(),le.unstable_now=function(){return Ji.now()-Is});var $s,Ji,Is,At=[],Zt=[],Zp=1,mt=null,Oe=3,Lo=!1,kn=!1,wr=!1,js=typeof setTimeout=="function"?setTimeout:null,Us=typeof clearTimeout=="function"?clearTimeout:null,Fs=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function rl(e){for(var t=wt(Zt);t!==null;){if(t.callback===null)Co(Zt);else if(t.startTime<=e)Co(Zt),t.sortIndex=t.expirationTime,nl(At,t);else break;t=wt(Zt)}}function ol(e){if(wr=!1,rl(e),!kn)if(wt(At)!==null)kn=!0,ll(il);else{var t=wt(Zt);t!==null&&al(ol,t.startTime-e)}}function il(e,t){kn=!1,wr&&(wr=!1,Us(kr),kr=-1),Lo=!0;var n=Oe;try{for(rl(t),mt=wt(At);mt!==null&&(!(mt.expirationTime>t)||e&&!Hs());){var r=mt.callback;if(typeof r=="function"){mt.callback=null,Oe=mt.priorityLevel;var o=r(mt.expirationTime<=t);t=le.unstable_now(),typeof o=="function"?mt.callback=o:mt===wt(At)&&Co(At),rl(t)}else Co(At);mt=wt(At)}if(mt!==null)var i=!0;else{var l=wt(Zt);l!==null&&al(ol,l.startTime-t),i=!1}return i}finally{mt=null,Oe=n,Lo=!1}}var zo=!1,_o=null,kr=-1,Vs=5,Bs=-1;function Hs(){return!(le.unstable_now()-Bse||125r?(e.sortIndex=n,nl(Zt,e),wt(At)===null&&e===wt(Zt)&&(wr?(Us(kr),kr=-1):wr=!0,al(ol,n-r))):(e.sortIndex=o,nl(At,e),kn||Lo||(kn=!0,ll(il))),e};le.unstable_shouldYield=Hs;le.unstable_wrapCallback=function(e){var t=Oe;return function(){var n=Oe;Oe=t;try{return e.apply(this,arguments)}finally{Oe=n}}}});var Gs=$t((uh,Ws)=>{"use strict";Ws.exports=Ks()});var Xd=$t(lt=>{"use strict";var Jp=No(),ot=Gs();function z(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Al=Object.prototype.hasOwnProperty,em=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ys={},Qs={};function tm(e){return Al.call(Qs,e)?!0:Al.call(Ys,e)?!1:em.test(e)?Qs[e]=!0:(Ys[e]=!0,!1)}function nm(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function rm(e,t,n,r){if(t===null||typeof t>"u"||nm(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function We(e,t,n,r,o,i,l){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=l}var Me={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Me[e]=new We(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Me[t]=new We(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Me[e]=new We(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Me[e]=new We(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Me[e]=new We(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Me[e]=new We(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Me[e]=new We(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Me[e]=new We(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Me[e]=new We(e,5,!1,e.toLowerCase(),null,!1,!1)});var ka=/[\-:]([a-z])/g;function Sa(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ka,Sa);Me[t]=new We(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ka,Sa);Me[t]=new We(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ka,Sa);Me[t]=new We(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Me[e]=new We(e,1,!1,e.toLowerCase(),null,!1,!1)});Me.xlinkHref=new We("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Me[e]=new We(e,1,!1,e.toLowerCase(),null,!0,!0)});function Na(e,t,n,r){var o=Me.hasOwnProperty(t)?Me[t]:null;(o!==null?o.type!==0:r||!(2s||o[l]!==i[s]){var u=` +`+o[l].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=l&&0<=s);break}}}finally{ul=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Pr(e):""}function om(e){switch(e.tag){case 5:return Pr(e.type);case 16:return Pr("Lazy");case 13:return Pr("Suspense");case 19:return Pr("SuspenseList");case 0:case 2:case 15:return e=cl(e.type,!1),e;case 11:return e=cl(e.type.render,!1),e;case 1:return e=cl(e.type,!0),e;default:return""}}function Rl(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Wn:return"Fragment";case Kn:return"Portal";case Pl:return"Profiler";case Ea:return"StrictMode";case Tl:return"Suspense";case Ml:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case nc:return(e.displayName||"Context")+".Consumer";case tc:return(e._context.displayName||"Context")+".Provider";case _a:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ca:return t=e.displayName||null,t!==null?t:Rl(e.type)||"Memo";case en:t=e._payload,e=e._init;try{return Rl(e(t))}catch{}}return null}function im(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Rl(t);case 8:return t===Ea?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function gn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function oc(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function lm(e){var t=oc(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(l){r=""+l,i.call(this,l)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(l){r=""+l},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Po(e){e._valueTracker||(e._valueTracker=lm(e))}function ic(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=oc(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function ii(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ol(e,t){var n=t.checked;return ve({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Xs(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=gn(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function lc(e,t){t=t.checked,t!=null&&Na(e,"checked",t,!1)}function $l(e,t){lc(e,t);var n=gn(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Il(e,t.type,n):t.hasOwnProperty("defaultValue")&&Il(e,t.type,gn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Zs(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Il(e,t,n){(t!=="number"||ii(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Tr=Array.isArray;function rr(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=To.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Kr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Or={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},am=["Webkit","ms","Moz","O"];Object.keys(Or).forEach(function(e){am.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Or[t]=Or[e]})});function cc(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Or.hasOwnProperty(e)&&Or[e]?(""+t).trim():t+"px"}function dc(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=cc(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var sm=ve({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function jl(e,t){if(t){if(sm[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(z(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(z(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(z(61))}if(t.style!=null&&typeof t.style!="object")throw Error(z(62))}}function Ul(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Vl=null;function La(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Bl=null,or=null,ir=null;function tu(e){if(e=uo(e)){if(typeof Bl!="function")throw Error(z(280));var t=e.stateNode;t&&(t=Mi(t),Bl(e.stateNode,e.type,t))}}function pc(e){or?ir?ir.push(e):ir=[e]:or=e}function mc(){if(or){var e=or,t=ir;if(ir=or=null,tu(e),t)for(e=0;e>>=0,e===0?32:31-(xm(e)/bm|0)|0}var Mo=64,Ro=4194304;function Mr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function ui(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,i=e.pingedLanes,l=n&268435455;if(l!==0){var s=l&~o;s!==0?r=Mr(s):(i&=l,i!==0&&(r=Mr(i)))}else l=n&~o,l!==0?r=Mr(l):i!==0&&(r=Mr(i));if(r===0)return 0;if(t!==0&&t!==r&&(t&o)===0&&(o=r&-r,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function ao(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-_t(t),e[t]=n}function Nm(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Ir),cu=" ",du=!1;function Mc(e,t){switch(e){case"keyup":return Zm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Rc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Gn=!1;function ef(e,t){switch(e){case"compositionend":return Rc(t);case"keypress":return t.which!==32?null:(du=!0,cu);case"textInput":return e=t.data,e===cu&&du?null:e;default:return null}}function tf(e,t){if(Gn)return e==="compositionend"||!$a&&Mc(e,t)?(e=Pc(),qo=Ma=on=null,Gn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=fu(n)}}function Fc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Fc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Dc(){for(var e=window,t=ii();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=ii(e.document)}return t}function Ia(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function df(e){var t=Dc(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Fc(n.ownerDocument.documentElement,n)){if(r!==null&&Ia(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=r.end===void 0?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=gu(n,i);var l=gu(n,r);o&&l&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==l.node||e.focusOffset!==l.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(l.node,l.offset)):(t.setEnd(l.node,l.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Yn=null,Ql=null,Dr=null,ql=!1;function hu(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ql||Yn==null||Yn!==ii(r)||(r=Yn,"selectionStart"in r&&Ia(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Dr&&Xr(Dr,r)||(Dr=r,r=pi(Ql,"onSelect"),0Xn||(e.current=na[Xn],na[Xn]=null,Xn--)}function ae(e,t){Xn++,na[Xn]=e.current,e.current=t}var hn={},De=vn(hn),Xe=vn(!1),An=hn;function cr(e,t){var n=e.type.contextTypes;if(!n)return hn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Ze(e){return e=e.childContextTypes,e!=null}function fi(){de(Xe),de(De)}function Eu(e,t,n){if(De.current!==hn)throw Error(z(168));ae(De,t),ae(Xe,n)}function Yc(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(z(108,im(e)||"Unknown",o));return ve({},n,r)}function gi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||hn,An=De.current,ae(De,e),ae(Xe,Xe.current),!0}function _u(e,t,n){var r=e.stateNode;if(!r)throw Error(z(169));n?(e=Yc(e,t,An),r.__reactInternalMemoizedMergedChildContext=e,de(Xe),de(De),ae(De,e)):de(Xe),ae(Xe,n)}var Ft=null,Ri=!1,wl=!1;function Qc(e){Ft===null?Ft=[e]:Ft.push(e)}function wf(e){Ri=!0,Qc(e)}function xn(){if(!wl&&Ft!==null){wl=!0;var e=0,t=ee;try{var n=Ft;for(ee=1;e>=l,o-=l,Dt=1<<32-_t(t)+o|n<R?(j=T,T=null):j=T.sibling;var I=g(p,T,h[R],k);if(I===null){T===null&&(T=j);break}e&&T&&I.alternate===null&&t(p,T),c=i(I,c,R),P===null?C=I:P.sibling=I,P=I,T=j}if(R===h.length)return n(p,T),pe&&Sn(p,R),C;if(T===null){for(;RR?(j=T,T=null):j=T.sibling;var ke=g(p,T,I.value,k);if(ke===null){T===null&&(T=j);break}e&&T&&ke.alternate===null&&t(p,T),c=i(ke,c,R),P===null?C=ke:P.sibling=ke,P=ke,T=j}if(I.done)return n(p,T),pe&&Sn(p,R),C;if(T===null){for(;!I.done;R++,I=h.next())I=y(p,I.value,k),I!==null&&(c=i(I,c,R),P===null?C=I:P.sibling=I,P=I);return pe&&Sn(p,R),C}for(T=r(p,T);!I.done;R++,I=h.next())I=f(T,p,R,I.value,k),I!==null&&(e&&I.alternate!==null&&T.delete(I.key===null?R:I.key),c=i(I,c,R),P===null?C=I:P.sibling=I,P=I);return e&&T.forEach(function(re){return t(p,re)}),pe&&Sn(p,R),C}function _(p,c,h,k){if(typeof h=="object"&&h!==null&&h.type===Wn&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Ao:e:{for(var C=h.key,P=c;P!==null;){if(P.key===C){if(C=h.type,C===Wn){if(P.tag===7){n(p,P.sibling),c=o(P,h.props.children),c.return=p,p=c;break e}}else if(P.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===en&&zu(C)===P.type){n(p,P.sibling),c=o(P,h.props),c.ref=Cr(p,P,h),c.return=p,p=c;break e}n(p,P);break}else t(p,P);P=P.sibling}h.type===Wn?(c=zn(h.props.children,p.mode,k,h.key),c.return=p,p=c):(k=oi(h.type,h.key,h.props,null,p.mode,k),k.ref=Cr(p,c,h),k.return=p,p=k)}return l(p);case Kn:e:{for(P=h.key;c!==null;){if(c.key===P)if(c.tag===4&&c.stateNode.containerInfo===h.containerInfo&&c.stateNode.implementation===h.implementation){n(p,c.sibling),c=o(c,h.children||[]),c.return=p,p=c;break e}else{n(p,c);break}else t(p,c);c=c.sibling}c=zl(h,p.mode,k),c.return=p,p=c}return l(p);case en:return P=h._init,_(p,c,P(h._payload),k)}if(Tr(h))return E(p,c,h,k);if(Sr(h))return b(p,c,h,k);Ko(p,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,c!==null&&c.tag===6?(n(p,c.sibling),c=o(c,h),c.return=p,p=c):(n(p,c),c=Ll(h,p.mode,k),c.return=p,p=c),l(p)):n(p,c)}return _}var pr=Jc(!0),ed=Jc(!1),vi=vn(null),xi=null,er=null,Ua=null;function Va(){Ua=er=xi=null}function Ba(e){var t=vi.current;de(vi),e._currentValue=t}function ia(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function ar(e,t){xi=e,Ua=er=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(qe=!0),e.firstContext=null)}function vt(e){var t=e._currentValue;if(Ua!==e)if(e={context:e,memoizedValue:t,next:null},er===null){if(xi===null)throw Error(z(308));er=e,xi.dependencies={lanes:0,firstContext:e}}else er=er.next=e;return t}var _n=null;function Ha(e){_n===null?_n=[e]:_n.push(e)}function td(e,t,n,r){var o=t.interleaved;return o===null?(n.next=n,Ha(t)):(n.next=o.next,o.next=n),t.interleaved=n,Ht(e,r)}function Ht(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var tn=!1;function Ka(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function nd(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ut(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function dn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(Y&2)!==0){var o=r.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Ht(e,n)}return o=r.interleaved,o===null?(t.next=t,Ha(r)):(t.next=o.next,o.next=t),r.interleaved=t,Ht(e,n)}function Zo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Aa(e,n)}}function Au(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var l={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?o=i=l:i=i.next=l,n=n.next}while(n!==null);i===null?o=i=t:i=i.next=t}else o=i=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function bi(e,t,n,r){var o=e.updateQueue;tn=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(s!==null){o.shared.pending=null;var u=s,d=u.next;u.next=null,l===null?i=d:l.next=d,l=u;var m=e.alternate;m!==null&&(m=m.updateQueue,s=m.lastBaseUpdate,s!==l&&(s===null?m.firstBaseUpdate=d:s.next=d,m.lastBaseUpdate=u))}if(i!==null){var y=o.baseState;l=0,m=d=u=null,s=i;do{var g=s.lane,f=s.eventTime;if((r&g)===g){m!==null&&(m=m.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var E=e,b=s;switch(g=t,f=n,b.tag){case 1:if(E=b.payload,typeof E=="function"){y=E.call(f,y,g);break e}y=E;break e;case 3:E.flags=E.flags&-65537|128;case 0:if(E=b.payload,g=typeof E=="function"?E.call(f,y,g):E,g==null)break e;y=ve({},y,g);break e;case 2:tn=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,g=o.effects,g===null?o.effects=[s]:g.push(s))}else f={eventTime:f,lane:g,tag:s.tag,payload:s.payload,callback:s.callback,next:null},m===null?(d=m=f,u=y):m=m.next=f,l|=g;if(s=s.next,s===null){if(s=o.shared.pending,s===null)break;g=s,s=g.next,g.next=null,o.lastBaseUpdate=g,o.shared.pending=null}}while(!0);if(m===null&&(u=y),o.baseState=u,o.firstBaseUpdate=d,o.lastBaseUpdate=m,t=o.shared.interleaved,t!==null){o=t;do l|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);Mn|=l,e.lanes=l,e.memoizedState=y}}function Pu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Sl.transition;Sl.transition={};try{e(!1),t()}finally{ee=n,Sl.transition=r}}function xd(){return xt().memoizedState}function Ef(e,t,n){var r=mn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},bd(e))wd(t,n);else if(n=td(e,t,n,r),n!==null){var o=Ke();Ct(n,e,r,o),kd(n,t,r)}}function _f(e,t,n){var r=mn(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(bd(e))wd(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var l=t.lastRenderedState,s=i(l,n);if(o.hasEagerState=!0,o.eagerState=s,Lt(s,l)){var u=t.interleaved;u===null?(o.next=o,Ha(t)):(o.next=u.next,u.next=o),t.interleaved=o;return}}catch{}finally{}n=td(e,t,o,r),n!==null&&(o=Ke(),Ct(n,e,r,o),kd(n,t,r))}}function bd(e){var t=e.alternate;return e===ye||t!==null&&t===ye}function wd(e,t){jr=ki=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function kd(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Aa(e,n)}}var Si={readContext:vt,useCallback:$e,useContext:$e,useEffect:$e,useImperativeHandle:$e,useInsertionEffect:$e,useLayoutEffect:$e,useMemo:$e,useReducer:$e,useRef:$e,useState:$e,useDebugValue:$e,useDeferredValue:$e,useTransition:$e,useMutableSource:$e,useSyncExternalStore:$e,useId:$e,unstable_isNewReconciler:!1},Cf={readContext:vt,useCallback:function(e,t){return Tt().memoizedState=[e,t===void 0?null:t],e},useContext:vt,useEffect:Mu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,ei(4194308,4,fd.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ei(4194308,4,e,t)},useInsertionEffect:function(e,t){return ei(4,2,e,t)},useMemo:function(e,t){var n=Tt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Tt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Ef.bind(null,ye,e),[r.memoizedState,e]},useRef:function(e){var t=Tt();return e={current:e},t.memoizedState=e},useState:Tu,useDebugValue:Ja,useDeferredValue:function(e){return Tt().memoizedState=e},useTransition:function(){var e=Tu(!1),t=e[0];return e=Nf.bind(null,e[1]),Tt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ye,o=Tt();if(pe){if(n===void 0)throw Error(z(407));n=n()}else{if(n=t(),Ae===null)throw Error(z(349));(Tn&30)!==0||ld(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Mu(sd.bind(null,r,i,e),[e]),r.flags|=2048,io(9,ad.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Tt(),t=Ae.identifierPrefix;if(pe){var n=jt,r=Dt;n=(r&~(1<<32-_t(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=ro++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),n==="select"&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[Mt]=t,e[eo]=r,Td(e,t,!1,!1),t.stateNode=e;e:{switch(l=Ul(n,r),n){case"dialog":ce("cancel",e),ce("close",e),o=r;break;case"iframe":case"object":case"embed":ce("load",e),o=r;break;case"video":case"audio":for(o=0;ogr&&(t.flags|=128,r=!0,Lr(i,!1),t.lanes=4194304)}else{if(!r)if(e=wi(l),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Lr(i,!0),i.tail===null&&i.tailMode==="hidden"&&!l.alternate&&!pe)return Ie(t),null}else 2*we()-i.renderingStartTime>gr&&n!==1073741824&&(t.flags|=128,r=!0,Lr(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(n=i.last,n!==null?n.sibling=l:t.child=l,i.last=l)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=we(),t.sibling=null,n=he.current,ae(he,r?n&1|2:n&1),t):(Ie(t),null);case 22:case 23:return is(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(tt&1073741824)!==0&&(Ie(t),t.subtreeFlags&6&&(t.flags|=8192)):Ie(t),null;case 24:return null;case 25:return null}throw Error(z(156,t.tag))}function Of(e,t){switch(Da(t),t.tag){case 1:return Ze(t.type)&&fi(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return mr(),de(Xe),de(De),Ya(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Ga(t),null;case 13:if(de(he),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(z(340));dr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return de(he),null;case 4:return mr(),null;case 10:return Ba(t.type._context),null;case 22:case 23:return is(),null;case 24:return null;default:return null}}var Go=!1,Fe=!1,$f=typeof WeakSet=="function"?WeakSet:Set,$=null;function tr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){be(e,t,r)}else n.current=null}function fa(e,t,n){try{n()}catch(r){be(e,t,r)}}var Hu=!1;function If(e,t){if(Xl=ci,e=Dc(),Ia(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var l=0,s=-1,u=-1,d=0,m=0,y=e,g=null;t:for(;;){for(var f;y!==n||o!==0&&y.nodeType!==3||(s=l+o),y!==i||r!==0&&y.nodeType!==3||(u=l+r),y.nodeType===3&&(l+=y.nodeValue.length),(f=y.firstChild)!==null;)g=y,y=f;for(;;){if(y===e)break t;if(g===n&&++d===o&&(s=l),g===i&&++m===r&&(u=l),(f=y.nextSibling)!==null)break;y=g,g=y.parentNode}y=f}n=s===-1||u===-1?null:{start:s,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(Zl={focusedElem:e,selectionRange:n},ci=!1,$=t;$!==null;)if(t=$,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,$=e;else for(;$!==null;){t=$;try{var E=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(E!==null){var b=E.memoizedProps,_=E.memoizedState,p=t.stateNode,c=p.getSnapshotBeforeUpdate(t.elementType===t.type?b:St(t.type,b),_);p.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var h=t.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(z(163))}}catch(k){be(t,t.return,k)}if(e=t.sibling,e!==null){e.return=t.return,$=e;break}$=t.return}return E=Hu,Hu=!1,E}function Ur(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&fa(t,n,i)}o=o.next}while(o!==r)}}function Ii(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ga(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Od(e){var t=e.alternate;t!==null&&(e.alternate=null,Od(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Mt],delete t[eo],delete t[ta],delete t[xf],delete t[bf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function $d(e){return e.tag===5||e.tag===3||e.tag===4}function Ku(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||$d(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function ha(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=mi));else if(r!==4&&(e=e.child,e!==null))for(ha(e,t,n),e=e.sibling;e!==null;)ha(e,t,n),e=e.sibling}function ya(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ya(e,t,n),e=e.sibling;e!==null;)ya(e,t,n),e=e.sibling}var Pe=null,Nt=!1;function Jt(e,t,n){for(n=n.child;n!==null;)Id(e,t,n),n=n.sibling}function Id(e,t,n){if(Rt&&typeof Rt.onCommitFiberUnmount=="function")try{Rt.onCommitFiberUnmount(zi,n)}catch{}switch(n.tag){case 5:Fe||tr(n,t);case 6:var r=Pe,o=Nt;Pe=null,Jt(e,t,n),Pe=r,Nt=o,Pe!==null&&(Nt?(e=Pe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Pe.removeChild(n.stateNode));break;case 18:Pe!==null&&(Nt?(e=Pe,n=n.stateNode,e.nodeType===8?bl(e.parentNode,n):e.nodeType===1&&bl(e,n),Qr(e)):bl(Pe,n.stateNode));break;case 4:r=Pe,o=Nt,Pe=n.stateNode.containerInfo,Nt=!0,Jt(e,t,n),Pe=r,Nt=o;break;case 0:case 11:case 14:case 15:if(!Fe&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var i=o,l=i.destroy;i=i.tag,l!==void 0&&((i&2)!==0||(i&4)!==0)&&fa(n,t,l),o=o.next}while(o!==r)}Jt(e,t,n);break;case 1:if(!Fe&&(tr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){be(n,t,s)}Jt(e,t,n);break;case 21:Jt(e,t,n);break;case 22:n.mode&1?(Fe=(r=Fe)||n.memoizedState!==null,Jt(e,t,n),Fe=r):Jt(e,t,n);break;default:Jt(e,t,n)}}function Wu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new $f),t.forEach(function(r){var o=Wf.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function kt(e,t){var n=t.deletions;if(n!==null)for(var r=0;ro&&(o=l),r&=~i}if(r=o,r=we()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Df(r/1960))-r,10e?16:e,ln===null)var r=!1;else{if(e=ln,ln=null,_i=0,(Y&6)!==0)throw Error(z(331));var o=Y;for(Y|=4,$=e.current;$!==null;){var i=$,l=i.child;if(($.flags&16)!==0){var s=i.deletions;if(s!==null){for(var u=0;uwe()-rs?Ln(e,0):ns|=n),Je(e,t)}function Kd(e,t){t===0&&((e.mode&1)===0?t=1:(t=Ro,Ro<<=1,(Ro&130023424)===0&&(Ro=4194304)));var n=Ke();e=Ht(e,t),e!==null&&(ao(e,t,n),Je(e,n))}function Kf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Kd(e,n)}function Wf(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(z(314))}r!==null&&r.delete(t),Kd(e,n)}var Wd;Wd=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Xe.current)qe=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return qe=!1,Mf(e,t,n);qe=(e.flags&131072)!==0}else qe=!1,pe&&(t.flags&1048576)!==0&&qc(t,yi,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;ti(e,t),e=t.pendingProps;var o=cr(t,De.current);ar(t,n),o=qa(null,t,r,e,o,n);var i=Xa();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ze(r)?(i=!0,gi(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Ka(t),o.updater=$i,t.stateNode=o,o._reactInternals=t,aa(t,r,e,n),t=ca(null,t,r,!0,i,n)):(t.tag=0,pe&&i&&Fa(t),He(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(ti(e,t),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=Yf(r),e=St(r,e),o){case 0:t=ua(null,t,r,e,n);break e;case 1:t=Uu(null,t,r,e,n);break e;case 11:t=Du(null,t,r,e,n);break e;case 14:t=ju(null,t,r,St(r.type,e),n);break e}throw Error(z(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:St(r,o),ua(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:St(r,o),Uu(e,t,r,o,n);case 3:e:{if(zd(t),e===null)throw Error(z(387));r=t.pendingProps,i=t.memoizedState,o=i.element,nd(e,t),bi(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=fr(Error(z(423)),t),t=Vu(e,t,r,n,o);break e}else if(r!==o){o=fr(Error(z(424)),t),t=Vu(e,t,r,n,o);break e}else for(nt=cn(t.stateNode.containerInfo.firstChild),rt=t,pe=!0,Et=null,n=ed(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(dr(),r===o){t=Kt(e,t,n);break e}He(e,t,r,n)}t=t.child}return t;case 5:return rd(t),e===null&&oa(t),r=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,l=o.children,Jl(r,o)?l=null:i!==null&&Jl(r,i)&&(t.flags|=32),Ld(e,t),He(e,t,l,n),t.child;case 6:return e===null&&oa(t),null;case 13:return Ad(e,t,n);case 4:return Wa(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=pr(t,null,r,n):He(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:St(r,o),Du(e,t,r,o,n);case 7:return He(e,t,t.pendingProps,n),t.child;case 8:return He(e,t,t.pendingProps.children,n),t.child;case 12:return He(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,ae(vi,r._currentValue),r._currentValue=l,i!==null)if(Lt(i.value,l)){if(i.children===o.children&&!Xe.current){t=Kt(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var s=i.dependencies;if(s!==null){l=i.child;for(var u=s.firstContext;u!==null;){if(u.context===r){if(i.tag===1){u=Ut(-1,n&-n),u.tag=2;var d=i.updateQueue;if(d!==null){d=d.shared;var m=d.pending;m===null?u.next=u:(u.next=m.next,m.next=u),d.pending=u}}i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),ia(i.return,n,t),s.lanes|=n;break}u=u.next}}else if(i.tag===10)l=i.type===t.type?null:i.child;else if(i.tag===18){if(l=i.return,l===null)throw Error(z(341));l.lanes|=n,s=l.alternate,s!==null&&(s.lanes|=n),ia(l,n,t),l=i.sibling}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===t){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}He(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,ar(t,n),o=vt(o),r=r(o),t.flags|=1,He(e,t,r,n),t.child;case 14:return r=t.type,o=St(r,t.pendingProps),o=St(r.type,o),ju(e,t,r,o,n);case 15:return _d(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:St(r,o),ti(e,t),t.tag=1,Ze(r)?(e=!0,gi(t)):e=!1,ar(t,n),Sd(t,r,o),aa(t,r,o,n),ca(null,t,r,!0,e,n);case 19:return Pd(e,t,n);case 22:return Cd(e,t,n)}throw Error(z(156,t.tag))};function Gd(e,t){return bc(e,t)}function Gf(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ht(e,t,n,r){return new Gf(e,t,n,r)}function as(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Yf(e){if(typeof e=="function")return as(e)?1:0;if(e!=null){if(e=e.$$typeof,e===_a)return 11;if(e===Ca)return 14}return 2}function fn(e,t){var n=e.alternate;return n===null?(n=ht(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function oi(e,t,n,r,o,i){var l=2;if(r=e,typeof e=="function")as(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case Wn:return zn(n.children,o,i,t);case Ea:l=8,o|=8;break;case Pl:return e=ht(12,n,t,o|2),e.elementType=Pl,e.lanes=i,e;case Tl:return e=ht(13,n,t,o),e.elementType=Tl,e.lanes=i,e;case Ml:return e=ht(19,n,t,o),e.elementType=Ml,e.lanes=i,e;case rc:return Di(n,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case tc:l=10;break e;case nc:l=9;break e;case _a:l=11;break e;case Ca:l=14;break e;case en:l=16,r=null;break e}throw Error(z(130,e==null?e:typeof e,""))}return t=ht(l,n,t,o),t.elementType=e,t.type=r,t.lanes=i,t}function zn(e,t,n,r){return e=ht(7,e,r,t),e.lanes=n,e}function Di(e,t,n,r){return e=ht(22,e,r,t),e.elementType=rc,e.lanes=n,e.stateNode={isHidden:!1},e}function Ll(e,t,n){return e=ht(6,e,null,t),e.lanes=n,e}function zl(e,t,n){return t=ht(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Qf(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=pl(0),this.expirationTimes=pl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=pl(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function ss(e,t,n,r,o,i,l,s,u){return e=new Qf(e,t,n,s,u),t===1?(t=1,i===!0&&(t|=8)):t=0,i=ht(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ka(i),e}function qf(e,t,n){var r=3{"use strict";function Zd(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Zd)}catch(e){console.error(e)}}Zd(),Jd.exports=Xd()});var np=$t(ps=>{"use strict";var tp=ep();ps.createRoot=tp.createRoot,ps.hydrateRoot=tp.hydrateRoot;var ph});var op=$t(Hi=>{"use strict";var tg=No(),ng=Symbol.for("react.element"),rg=Symbol.for("react.fragment"),og=Object.prototype.hasOwnProperty,ig=tg.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,lg={key:!0,ref:!0,__self:!0,__source:!0};function rp(e,t,n){var r,o={},i=null,l=null;n!==void 0&&(i=""+n),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(l=t.ref);for(r in t)og.call(t,r)&&!lg.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)o[r]===void 0&&(o[r]=t[r]);return{$$typeof:ng,type:e,key:i,ref:l,props:o,_owner:ig.current}}Hi.Fragment=rg;Hi.jsx=rp;Hi.jsxs=rp});var ms=$t((yh,ip)=>{"use strict";ip.exports=op()});var N=bo(No(),1),bp=bo(np(),1);var a=bo(ms(),1),wp={hidden:"UKRYTY",connecting:"\u0141\u0104CZENIE",connected:"ONLINE \xB7 LIVE",replaying:"ONLINE \xB7 REPLAY",verifying:"ONLINE \xB7 WERYFIKACJA",ready:"ONLINE \xB7 GOTOWY",failed:"ONLINE \xB7 B\u0141\u0104D STANU",offline:"OFFLINE \xB7 ZAPIS",unselected:"OFFLINE \xB7 BRAK CELU"},lp=.25,Fn=1,ap=4;function ag(e){let t=window.getComputedStyle(e).overflowY;return t==="auto"||t==="scroll"||t==="hidden"||t==="clip"}function kp(e){let t=e.getBoundingClientRect(),n=e.offsetHeight||e.clientHeight,r=n>0?t.height/n:1,o=t.top+e.clientTop*r;return{top:o,bottom:o+e.clientHeight*r}}function Sp(e){let t=document.querySelector(".viewer-chrome");if(t?.classList.contains("is-nvim-fit"))return null;let n=0,r=window.innerHeight;if(t){let o=t.getBoundingClientRect(),i=e.getBoundingClientRect();o.lefti.left&&o.bottom>0&&o.topFn?{top:n,bottom:r}:null}function sg(e){let t=Sp(e);if(!t)return null;let{top:n,bottom:r}=t;for(let o=e.parentElement;o&&o!==document.body&&o!==document.documentElement;o=o.parentElement){if(!ag(o))continue;let i=kp(o);n=Math.max(n,i.top),r=Math.min(r,i.bottom)}return r-n>Fn?{top:n,bottom:r}:null}function Gi(){return document.scrollingElement??document.documentElement}function ug(e){let t=[];for(let r=e.parentElement;r&&r!==document.body&&r!==document.documentElement;r=r.parentElement){let o=window.getComputedStyle(r).overflowY;(o==="auto"||o==="scroll")&&r.scrollHeight-r.clientHeight>1&&t.push(r)}let n=Gi();return t.includes(n)||t.push(n),t}function cg(e){if(e===Gi())return 1;let t=e.getBoundingClientRect(),n=e.offsetHeight||e.clientHeight,r=n>0?t.height/n:1;return Number.isFinite(r)&&r>0?r:1}function Ki(e,t){let n=e.style.scrollBehavior;e.style.scrollBehavior="auto",t.left!=null&&(e.scrollLeft=t.left),t.top!=null&&(e.scrollTop=t.top),e.style.scrollBehavior=n}function dg(e,t){let n=e.closest(".sheet-content");if(!n)return 0;let r=kp(n),o=0;if(r.bottom<=t.top?o=r.bottom-t.bottom:r.top>=t.bottom&&(o=r.top-t.top),Math.abs(o)<=Fn)return 0;let i=Gi(),l=i.scrollTop,s=Math.max(0,i.scrollHeight-i.clientHeight);return Ki(i,{top:Math.max(0,Math.min(s,l+o))}),i.scrollTop-l}function sp(e,t){let n=t;for(let r of ug(e)){if(Math.abs(n)<=Fn)break;let o=cg(r),i=Math.max(0,r.scrollHeight-r.clientHeight),l=r.scrollTop,s=Math.max(0,Math.min(i,l+n/o));Ki(r,{top:s}),n-=(r.scrollTop-l)*o}return t-n}function up(e,t){let n=e.getBoundingClientRect(),r=(n.top+n.bottom)/2,o=t.bottom-t.top,i=t.top+o*lp,l=t.bottom-o*lp;return rl?r-l:0}var Yt=({html:e,className:t})=>(0,a.jsx)("div",{className:t,dangerouslySetInnerHTML:{__html:e}});function Np(e,t){e.setAttribute("preserveAspectRatio","xMinYMin meet"),t&&(e.setAttribute("viewBox",`${t.x} ${t.y} ${t.width} ${t.height}`),e.setAttribute("width",`${t.width}px`),e.setAttribute("height",`${t.height}px`),e.dataset.tileIndex=String(t.index),e.dataset.tileRow=String(t.row),e.dataset.tileColumn=String(t.column))}function pg(e){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9_.:-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,120)||"uml-element"}function gs(e){let t=e;if(typeof t.getBBox!="function")return null;try{let n=t.getBBox();return[n.x,n.y,n.width,n.height].every(Number.isFinite)?{x:n.x,y:n.y,width:n.width,height:n.height}:null}catch{return null}}function mg(e){let t=gs(e);if(!t)return null;let n=Number(e.dataset.umlLayoutOriginX),r=Number(e.dataset.umlLayoutOriginY),o=Number(e.dataset.umlLayoutDx),i=Number(e.dataset.umlLayoutDy),l=Number(e.dataset.umlLayoutSx),s=Number(e.dataset.umlLayoutSy);return[n,r,o,i,l,s].every(Number.isFinite)?{x:n+(t.x-n)*l+o,y:r+(t.y-r)*s+i,width:t.width*l,height:t.height*s}:t}function Ep(e){e.dataset.umlLayoutRemembered!=="true"&&(e.dataset.umlLayoutRemembered="true",e.dataset.umlLayoutOriginalTransform=e.getAttribute("transform")??"",e.dataset.umlLayoutOriginalVisibility=e.getAttribute("visibility")??"",e.dataset.umlLayoutOriginalStyle=e.getAttribute("style")??"",e instanceof SVGTextElement&&(e.dataset.umlLayoutOriginalText=e.textContent??"",e.dataset.umlLayoutOriginalX=e.getAttribute("x")??"",e.dataset.umlLayoutOriginalTextAnchor=e.getAttribute("text-anchor")??"",e.dataset.umlLayoutOriginalFontFamily=e.getAttribute("font-family")??"",e.dataset.umlLayoutOriginalFontSize=e.getAttribute("font-size")??"",e.dataset.umlLayoutOriginalFontWeight=e.getAttribute("font-weight")??""),e instanceof SVGRectElement&&(e.dataset.umlLayoutOriginalFill=e.getAttribute("fill")??"",e.dataset.umlLayoutOriginalStroke=e.getAttribute("stroke")??"",e.dataset.umlLayoutOriginalStrokeWidth=e.getAttribute("stroke-width")??""))}function fg(e){e.querySelectorAll(".uml-layout-hit,.uml-layout-resize,.uml-layout-generated").forEach(t=>t.remove()),e.querySelectorAll("[data-uml-layout-remembered='true']").forEach(t=>{let n=(r,o)=>{o?t.setAttribute(r,o):t.removeAttribute(r)};n("transform",t.dataset.umlLayoutOriginalTransform),n("visibility",t.dataset.umlLayoutOriginalVisibility),n("style",t.dataset.umlLayoutOriginalStyle),t instanceof SVGTextElement&&(t.textContent=t.dataset.umlLayoutOriginalText??"",n("x",t.dataset.umlLayoutOriginalX),n("text-anchor",t.dataset.umlLayoutOriginalTextAnchor),n("font-family",t.dataset.umlLayoutOriginalFontFamily),n("font-size",t.dataset.umlLayoutOriginalFontSize),n("font-weight",t.dataset.umlLayoutOriginalFontWeight)),t instanceof SVGRectElement&&(n("fill",t.dataset.umlLayoutOriginalFill),n("stroke",t.dataset.umlLayoutOriginalStroke),n("stroke-width",t.dataset.umlLayoutOriginalStrokeWidth)),delete t.dataset.umlLayoutOriginX,delete t.dataset.umlLayoutOriginY,delete t.dataset.umlLayoutDx,delete t.dataset.umlLayoutDy,delete t.dataset.umlLayoutSx,delete t.dataset.umlLayoutSy,delete t.dataset.umlLayoutId})}function gg(e,t){let n=e.querySelector(":scope > g")??e,r=Array.from(n.children).filter(s=>s instanceof SVGElement),o=r.filter(s=>s instanceof SVGRectElement).map(s=>({rect:s,box:gs(s)})).filter(s=>!!(s.box&&s.box.width>=30&&s.box.height>=14)).sort((s,u)=>s.box.width*s.box.height-u.box.width*u.box.height),i=new Map;for(let s of r){let u=gs(s);if(!u)continue;let d=u.x+u.width/2,m=u.y+u.height/2,y=o.find(({box:g})=>d>=g.x-.5&&d<=g.x+g.width+.5&&m>=g.y-.5&&m<=g.y+g.height+.5);y&&i.set(s,y.rect)}let l=new Set;return o.map(({rect:s,box:u},d)=>{let m=r.filter(c=>i.get(c)===s);m.includes(s)||m.unshift(s);let y=m.filter(c=>c instanceof SVGTextElement).sort((c,h)=>Number(c.getAttribute("y"))-Number(h.getAttribute("y"))),g=(y[0]?.textContent??s.id??`element-${d+1}`).trim(),f=/^(\d{1,3})\b/.exec(g)?.[1]?.padStart(2,"0"),E=s.id||(f?t.get(f):"")||g,b=pg(E),_=b,p=2;for(;l.has(_);)_=`${b}-${p++}`;return l.add(_),m.forEach(Ep),{id:_,box:u,rect:s,members:m,texts:y}})}function po(e){let t=e.texts[0],n=e.rect.getAttribute("style")??"",r=i=>new RegExp(`${i}\\s*:\\s*([^;]+)`,"i").exec(n)?.[1]?.trim(),o=Number(t?.getAttribute("font-size")??12);return{...e.box,z:0,scale:1,rotation:0,text:{title:(e.texts[0]?.textContent??"").trim(),description:e.texts.slice(1).map(i=>(i.textContent??"").trim()).join(` +`),lines:e.texts.map(i=>(i.textContent??"").trim()),font_family:t?.getAttribute("font-family")??"Monospace",font_size:Number.isFinite(o)?o:12,font_weight:Number(t?.getAttribute("font-weight")??400)||400,align:"left"},style:{fill:e.rect.getAttribute("fill")??r("fill")??"#edf6fa",stroke:e.rect.getAttribute("stroke")??r("stroke")??"#2c7794",stroke_width:Number(e.rect.getAttribute("stroke-width")??r("stroke-width")??1.5)}}}function hg(e,t){let n=Math.max(12,Number(t.width)||e.box.width),r=Math.max(12,Number(t.height)||e.box.height),o=Number.isFinite(Number(t.x))?Number(t.x):e.box.x,i=Number.isFinite(Number(t.y))?Number(t.y):e.box.y,l=n/Math.max(1,e.box.width),s=r/Math.max(1,e.box.height),u=o-e.box.x,d=i-e.box.y,m=`translate(${u} ${d}) translate(${e.box.x} ${e.box.y}) scale(${l} ${s}) translate(${-e.box.x} ${-e.box.y})`;e.members.forEach(f=>{Ep(f);let E=f.dataset.umlLayoutOriginalTransform??"";f.setAttribute("transform",`${m}${E?` ${E}`:""}`),f.dataset.umlLayoutOriginX=String(e.box.x),f.dataset.umlLayoutOriginY=String(e.box.y),f.dataset.umlLayoutDx=String(u),f.dataset.umlLayoutDy=String(d),f.dataset.umlLayoutSx=String(l),f.dataset.umlLayoutSy=String(s),f.dataset.umlLayoutId=e.id});let y=t.text??{},g=y.lines??[y.title??"",...y.description?y.description.split(` +`):[]];e.texts.forEach((f,E)=>{E(e.tile?.page_height??0)?"landscape":"portrait",scale:1},elements:{},relations:{}}}function hs(e){if(!e)return{};let t=e.column===1&&e.columns>1?e.page_width-e.width:e.column===e.columns?0:Math.max(0,(e.page_width-e.width)/2),n=e.row===1&&e.rows>1?e.page_height-e.height:e.row===e.rows?0:Math.max(0,(e.page_height-e.height)/2);return{"--uml-tile-page-width":`${e.page_width}px`,"--uml-tile-page-height":`${e.page_height}px`,"--uml-tile-left":`${t}px`,"--uml-tile-top":`${n}px`}}function yg({html:e}){return(0,a.jsx)(Yt,{html:e})}function vg(e){let t=e.spread_count??1;if(t<=1)return null;let n=Math.max(1,Math.min(t,e.spread_index??1)),r=Math.max(1,Math.min(t,e.spread_columns??1)),o=n-1,i=Math.floor(o/r),l=o%r;return{left:l>0,right:l+10,down:n+r<=t,index:n,count:t}}function _p({continuation:e}){if(!e)return null;let t=[e.left&&["left","\u2190","kontynuacja po lewej"],e.up&&["up","\u2191","kontynuacja powy\u017Cej"],e.down&&["down","\u2193","kontynuacja poni\u017Cej"],e.right&&["right","\u2192","kontynuacja po prawej"]].filter(Boolean);return(0,a.jsx)("span",{className:"uml-page-continuation","aria-label":`Logiczny diagram: strona ${e.index} z ${e.count}`,title:`Ten sam diagram \xB7 strona ${e.index}/${e.count}`,children:t.map(([n,r,o])=>(0,a.jsx)("i",{"data-direction":n,"aria-label":o,children:r},n))})}function cp({side:e,html:t}){return(0,a.jsx)("aside",{className:`pdf-margin ${e}`,dangerouslySetInnerHTML:{__html:t}})}function ys({header:e,left:t="",right:n="",children:r,className:o=""}){return(0,a.jsx)("article",{className:`sheet ${o}`,children:(0,a.jsxs)("div",{className:"sheet-content",children:[(0,a.jsx)(yg,{html:e}),(0,a.jsx)(cp,{side:"left",html:t}),(0,a.jsx)("section",{className:"pdf-main card-section",children:r}),(0,a.jsx)(cp,{side:"right",html:n})]})})}function xg({viewpoints:e}){let t=e.filter(i=>i.status==="enabled"&&i.target_id),[n,r]=(0,N.useState)(t[0]?.id??"");(0,N.useEffect)(()=>{if(!t.length)return;let i=0,l=()=>{window.cancelAnimationFrame(i),i=window.requestAnimationFrame(()=>{let s=document.querySelector(".viewer-chrome")?.getBoundingClientRect().bottom??0,u=t.map(m=>({viewpoint:m,element:document.getElementById(m.target_id)})).filter(m=>!!m.element);if(!u.length)return;let d=u.reduce((m,y)=>{let g=Math.abs(y.element.getBoundingClientRect().top-s-18);return g{window.cancelAnimationFrame(i),window.removeEventListener("scroll",l),window.removeEventListener("resize",l)}},[e]);let o=i=>{if(i.status!=="enabled"||!i.target_id)return;let l=document.getElementById(i.target_id);if(!l)return;let u=document.querySelector(".viewer-chrome")?.getBoundingClientRect().height??0;r(i.id),window.scrollTo({top:Math.max(0,window.scrollY+l.getBoundingClientRect().top-u-8),behavior:"smooth"})};return(0,a.jsx)("nav",{className:"viewpoint-bar","aria-label":"Perspektywy architektury A1\u2013A8",children:e.map(i=>{let l=i.status==="unavailable";return(0,a.jsxs)("button",{type:"button",className:l?"is-unavailable":"","aria-current":!l&&n===i.id?"location":void 0,disabled:l,title:l?i.reason:i.subtitle,onClick:()=>o(i),children:[(0,a.jsx)("span",{children:i.id}),(0,a.jsx)("strong",{children:i.label}),l&&(0,a.jsx)("small",{children:"N/D"})]},i.id)})})}function bg({toc:e,libraryAvailable:t,libraryOpen:n,setLibraryOpen:r,scale:o,setScale:i,nvimVisible:l,setNvimVisible:s,nvimSyncMode:u,setNvimSyncMode:d,nvimControlMode:m,setNvimControlMode:y,nvimExpanded:g,setNvimExpanded:f,nvimFit:E,setNvimFit:b,allocatorVisible:_,setAllocatorVisible:p,hasAllocatorModel:c,diagramSpread:h,setDiagramSpread:k,hasDiagramSpread:C,nvimSummary:P,progress:T,progressError:R}){return(0,a.jsx)("nav",{className:"topbar",children:(0,a.jsxs)("div",{className:"topbar-inner",children:[t&&(0,a.jsxs)("button",{type:"button",className:`card-library-toggle${n?" is-active":""}`,"aria-controls":"side-panel-left-library","aria-expanded":n,"aria-label":n?"Alt+0: zamknij serie i karty":"Alt+0: poka\u017C serie i karty",title:n?"Alt+0 \xB7 Zamknij serie i karty":"Alt+0 \xB7 Serie i karty",onClick:()=>r(!n),children:[(0,a.jsx)("span",{"aria-hidden":"true",className:"card-library-toggle-icon",children:"\u2630"}),(0,a.jsx)("kbd",{children:"A0"}),(0,a.jsx)("span",{children:"KARTY"})]}),(0,a.jsxs)("details",{children:[(0,a.jsx)("summary",{children:"Spis tre\u015Bci"}),(0,a.jsx)("div",{className:"toc-links",children:e.map(j=>(0,a.jsx)("a",{href:`#${j.id}`,children:j.label},j.id))})]}),(0,a.jsxs)("div",{className:"topbar-nvim-section","aria-label":"Panel Neovima",children:[(0,a.jsx)("span",{className:"nvim-toolbar-boundary","aria-hidden":"true",children:"|"}),(0,a.jsx)("span",{className:"nvim-toolbar-context",children:"NVIM"}),(0,a.jsxs)("div",{className:"nvim-toolbar-actions","aria-label":"Narz\u0119dzia okna Neovima",children:[(0,a.jsxs)("button",{className:"viewer-nvim-toggle nvim-toolbar-button","aria-label":l?"Alt+1: ukryj Neovim":"Alt+1: poka\u017C Neovim",title:l?"Alt+1 \xB7 Ukryj Neovim":"Alt+1 \xB7 Poka\u017C Neovim","aria-pressed":l,onClick:()=>s(!l),children:[(0,a.jsx)("kbd",{className:"nvim-toolbar-key",children:"A1"}),(0,a.jsx)("span",{className:"nvim-toolbar-label",children:"PANEL"})]}),(0,a.jsxs)("button",{type:"button",className:`nvim-control-indicator nvim-toolbar-button${P.syncMode?" is-active":""}${P.syncReady?" is-engaged":""}`,"aria-label":`Alt+2: synchronizacja ${u?"w\u0142\u0105czona":"wy\u0142\u0105czona"}`,title:`Alt+2 \xB7 SYNC ${u?"ON":"OFF"}`,"aria-pressed":u,onClick:()=>d(!u),children:[(0,a.jsx)("kbd",{className:"nvim-toolbar-key",children:"A2"}),(0,a.jsx)("span",{className:"nvim-toolbar-label",children:"SYNC"})]}),(0,a.jsxs)("button",{type:"button",className:`nvim-work-indicator nvim-toolbar-button${m?" is-active":""}${P.controlEnabled?" is-engaged":""}`,"aria-label":`Alt+3: sterowanie ${u?m?"w\u0142\u0105czone":"wy\u0142\u0105czone":"niedost\u0119pne"}`,title:u?`Alt+3 \xB7 Sterowanie ${m?"ON":"OFF"}`:"Alt+3 \xB7 Sterowanie wymaga SYNC ON","aria-pressed":m,disabled:!u,onClick:()=>y(!m),children:[(0,a.jsx)("kbd",{className:"nvim-toolbar-key",children:"A3"}),(0,a.jsx)("span",{className:"nvim-toolbar-label",children:"CTRL"})]}),(0,a.jsxs)("button",{type:"button",className:`nvim-height-toggle nvim-toolbar-button${g?" is-active":""}`,"aria-label":`Alt+4: ${g?"przywr\xF3\u0107 normaln\u0105 wysoko\u015B\u0107":"ustaw wysoki panel"}`,title:g?"Alt+4 \xB7 Normalna wysoko\u015B\u0107":"Alt+4 \xB7 Wysoki panel 90%","aria-pressed":g,onClick:()=>f(!g),children:[(0,a.jsx)("kbd",{className:"nvim-toolbar-key",children:"A4"}),(0,a.jsx)("span",{className:"nvim-toolbar-label",children:"HIGH"})]}),(0,a.jsxs)("button",{type:"button",className:`nvim-height-toggle nvim-toolbar-button${E?" is-active":""}`,"aria-label":`Alt+5: automatyczne dopasowanie ${E?"w\u0142\u0105czone":"wy\u0142\u0105czone"}`,title:E?"Alt+5 \xB7 Wy\u0142\u0105cz auto-fit":"Alt+5 \xB7 Poka\u017C ca\u0142y Neovim","aria-pressed":E,onClick:()=>b(!E),children:[(0,a.jsx)("kbd",{className:"nvim-toolbar-key",children:"A5"}),(0,a.jsx)("span",{className:"nvim-toolbar-label",children:"FIT"})]}),c&&(0,a.jsxs)("button",{type:"button",className:`nvim-height-toggle nvim-toolbar-button${_?" is-active":""}`,"aria-label":`Alt+6: model alokatora ${_?"przypi\u0119ty":"ukryty"}`,title:_?"Alt+6 \xB7 Ukryj model alokatora":"Alt+6 \xB7 Przypnij model alokatora","aria-pressed":_,onClick:()=>p(!_),children:[(0,a.jsx)("kbd",{className:"nvim-toolbar-key",children:"A6"}),(0,a.jsx)("span",{className:"nvim-toolbar-label",children:"MODEL"})]}),C&&(0,a.jsxs)("button",{type:"button",className:`nvim-height-toggle nvim-toolbar-button${h?" is-active":""}`,"aria-label":`Alt+7: diagram UML ${h?"jako osobne kartki A4":"jako po\u0142\u0105czony spread"}`,title:h?"Alt+7 \xB7 Osobne kartki A4":"Alt+7 \xB7 Po\u0142\u0105cz strony UML","aria-pressed":h,onClick:()=>k(!h),children:[(0,a.jsx)("kbd",{className:"nvim-toolbar-key",children:"A7"}),(0,a.jsx)("span",{className:"nvim-toolbar-label",children:"UML"})]})]}),(0,a.jsx)("span",{className:"nvim-toolbar-boundary","aria-hidden":"true",children:"|"}),l&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:`nvim-status nvim-status--${P.state}`,children:wp[P.state]}),(0,a.jsxs)("span",{className:"topbar-nvim-meta",title:P.message,children:[(0,a.jsx)("strong",{children:P.instance??"Neovim MCP"}),P.detail&&(0,a.jsx)("small",{children:P.detail})]}),(0,a.jsxs)("span",{className:"nvim-shortcut-strip","aria-label":"Skr\xF3ty panelu Neovima",children:[(0,a.jsx)("kbd",{children:"F1"})," reset \xB7 ",(0,a.jsx)("kbd",{children:"F2"})," sync \xB7 ",(0,a.jsx)("kbd",{children:"Alt+W"})," okna \xB7 ",(0,a.jsx)("kbd",{children:"F12"})," skr\xF3ty"]})]})]}),(0,a.jsx)(Gg,{progress:T,error:R}),(0,a.jsxs)("div",{className:"viewer-zoom-controls",children:[(0,a.jsxs)("output",{className:"viewer-zoom-status",children:["P\u0142\xF3tno ",Math.round(o*100),"% \xB7 Tre\u015B\u0107 100%"]}),(0,a.jsx)("button",{className:"viewer-zoom-reset",onClick:()=>i(2.18),children:"Reset zoom"})]})]})})}function dp(e,t){for(let n of e.sections)for(let r of n.assets){let o=r.interactive;if(!(o?.kind!=="uml-sequence"||!o.phases?.length)&&!(t?.task.id&&o.task?.id!==t.task.id)&&!(t?.block.id&&o.block?.id!==t.block.id))for(let i of o.phases){if(t?.phase.id&&i.id!==t.phase.id)continue;let l=t?.step.id?i.steps.find(s=>s.id===t.step.id):i.steps[0];if(l)return{task:o.task??null,block:o.block??null,phase:{id:i.id,label:i.label},step:l,focusLevel:t?.focus_level??"step",activate:!1}}}return null}function wg({visible:e,model:t}){let[n,r]=(0,N.useState)(null);if((0,N.useEffect)(()=>{let g=f=>{r(f.detail??null)};return window.addEventListener("stem:nvim-step",g),r(dp(t)),fetch("/api/navigation/current",{cache:"no-store"}).then(f=>f.ok?f.json():Promise.reject()).then(f=>{let E=dp(t,f.current??null);E&&r(E)}).catch(()=>{}),()=>window.removeEventListener("stem:nvim-step",g)},[t]),!e)return null;let o=n?.focusLevel??"card",i=n?.step.snapshot?.memory.arena,l=!!(n&&o!=="card"&&o!=="task"),s=Math.max(1,Number(i?.size_bytes??64)),u=i?.offset==null?null:Math.max(0,Math.min(s,Number(i.offset))),d=i?.bytes.trim().split(/\s+/).filter(Boolean)??[],m=Math.min(s,64),y=n?[...(n.step.snapshot?.memory.items??[]).map(g=>({name:g.name,value:g.value})),...(n.step.snapshot?.frame.fields??[]).map(g=>({name:g.name,value:g.value}))].filter((g,f,E)=>E.findIndex(b=>b.name===g.name)===f).slice(0,8):[];return(0,a.jsxs)("section",{className:"allocator-panel","aria-label":"Przypi\u0119ty model alokatora",children:[(0,a.jsxs)("header",{children:[(0,a.jsx)("span",{children:"ALLOCATOR \xB7 PINNED"}),(0,a.jsx)("strong",{children:n?`${n.phase.label} \xB7 ${String(n.step.number).padStart(2,"0")} ${n.step.label}`:"Oczekiwanie na diagram UML"}),(0,a.jsx)("small",{children:l?n.step.snapshot?.description??n.step.description:"Wybierz co najmniej BLOCK. F2 wybierze jego pierwszy krok i wykona synchronizacj\u0119."})]}),(0,a.jsxs)("div",{className:"allocator-panel-body",children:[(0,a.jsxs)("dl",{className:"allocator-metrics",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:"FOCUS"}),(0,a.jsx)("dd",{children:o.toUpperCase()})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:"BASE"}),(0,a.jsx)("dd",{children:i?.base??"\u2014"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:"ALLOCP"}),(0,a.jsx)("dd",{children:i?.cursor??"\u2014"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:"USED / FREE"}),(0,a.jsx)("dd",{children:u==null?"\u2014":`${u} / ${s-u} B`})]})]}),(0,a.jsxs)("div",{className:`allocator-arena-view${l?"":" is-inactive"}`,children:[(0,a.jsxs)("div",{className:"allocator-arena-labels",children:[(0,a.jsx)("span",{children:"allocbuf[0]"}),(0,a.jsx)("strong",{children:u==null?"allocp jeszcze nieustawiony":`offset ${u}`}),(0,a.jsxs)("span",{children:["allocbuf[",s-1,"]"]})]}),(0,a.jsxs)("div",{className:"allocator-pinned-arena",style:{"--allocator-size":m},children:[Array.from({length:m},(g,f)=>(0,a.jsx)("i",{className:u!=null&&f(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:g.name}),(0,a.jsx)("code",{children:g.value})]},g.name)):(0,a.jsx)("p",{children:"Brak snapshotu."})})]})]})}var Wi=()=>({text:" ",highlight:0});function pp(e=1,t=1){return{width:e,height:t,cells:Array.from({length:t},()=>Array.from({length:e},Wi)),highlights:new Map,foreground:15263976,background:1053461,cursor:{row:0,column:0}}}function kg(e,t,n){if(t<=0||n<=0)return;let r=e.cells;e.width=t,e.height=n,e.cells=Array.from({length:n},(o,i)=>Array.from({length:t},(l,s)=>r[i]?.[s]??Wi()))}function Cp(e){return`stem-card:nvim-grid:${e}`}function Sg(e,t){if(t.width<=1||t.height<=1)return;let n={schema:"stem-nvim-grid.v1",snapshot_ref:e,saved_at:new Date().toISOString(),width:t.width,height:t.height,cells:t.cells.map(r=>r.map(o=>[o.text,o.highlight])),highlights:Array.from(t.highlights.entries()),foreground:t.foreground,background:t.background,cursor:{...t.cursor}};try{localStorage.setItem(Cp(e),JSON.stringify(n))}catch{}}function Lp(e,t){try{return e?.schema!=="stem-nvim-grid.v1"||e.snapshot_ref!==t||!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<2||e.height<2||e.width>400||e.height>200||e.cells.length!==e.height?null:{width:e.width,height:e.height,cells:e.cells.map(n=>n.map(([r,o])=>({text:typeof r=="string"?r:" ",highlight:Number.isInteger(o)?o:0}))),highlights:new Map(e.highlights),foreground:e.foreground,background:e.background,cursor:e.cursor}}catch{return null}}function Ng(e){try{return Lp(JSON.parse(localStorage.getItem(Cp(e))??"null"),e)}catch{return null}}async function mp(e){let t=e.snapshot_ref;if(!t)return null;let n=Ng(t);if(n)return n;let r=e.view?.recorded_grid_ref;if(!r||/^(?:[a-z]+:|\/\/)/i.test(r))return null;try{let o=await fetch(r,{cache:"no-store"});return o.ok?Lp(await o.json(),t):null}catch{return null}}var Eg=[1842207,12590120,3064446,16106001,1997028,9978299,702940,12631996,6184036,15545147,5759881,16311388,5349887,12607947,5231357,16184820];function go(e){let t=Number(e);if(!Number.isInteger(t)||t<0||t>255)return;if(t<16)return Eg[t];if(t<232){let r=t-16,o=[0,95,135,175,215,255],i=o[Math.floor(r/36)],l=o[Math.floor(r%36/6)],s=o[r%6];return i<<16|l<<8|s}let n=8+(t-232)*10;return n<<16|n<<8|n}function _g(e){if(!e||typeof e!="object")return null;let t=e;return Object.keys(t).length?{...t,foreground:go(t.foreground),background:go(t.background),special:go(t.special)}:null}function Cg(e){if(!e||typeof e!="object")return null;let t=e;return Object.keys(t).length?{...t}:null}function Lg(e,t){for(let n of t){if(!Array.isArray(n)||typeof n[0]!="string")continue;let r=n[0],o=n.slice(1);for(let i of o)if(Array.isArray(i)){if(r==="grid_resize"){let[l,s,u]=i.map(Number);l===1&&kg(e,s,u)}else if(r==="default_colors_set"){let l=Number(i[0]),s=Number(i[1]),u=l>=0?l:go(i[3]),d=s>=0?s:go(i[4]);typeof u=="number"&&Number.isFinite(u)&&u>=0&&(e.foreground=u),typeof d=="number"&&Number.isFinite(d)&&d>=0&&(e.background=d)}else if(r==="hl_attr_define"){let l=Number(i[0]),s=_g(i[2])??Cg(i[1]);Number.isInteger(l)&&s&&typeof s=="object"&&e.highlights.set(l,s)}else if(r==="grid_clear"&&Number(i[0])===1)e.cells=Array.from({length:e.height},()=>Array.from({length:e.width},Wi));else if(r==="grid_cursor_goto"&&Number(i[0])===1)e.cursor={row:Number(i[1]),column:Number(i[2])};else if(r==="grid_line"&&Number(i[0])===1){let l=Number(i[1]),s=Number(i[2]),u=i[3];if(!e.cells[l]||!Array.isArray(u))continue;let d=0;for(let m of u){if(!Array.isArray(m))continue;let y=typeof m[0]=="string"?m[0]:" ";Number.isInteger(m[1])&&(d=Number(m[1]));let g=Number.isInteger(m[2])?Number(m[2]):1;for(let f=0;f=0&&(e.cells[l][s]={text:y,highlight:d}),s+=1}}else if(r==="grid_scroll"&&Number(i[0])===1){let l=Number(i[1]),s=Number(i[2]),u=Number(i[3]),d=Number(i[4]),m=Number(i[5]),y=Number(i[6]),g=e.cells.map(f=>f.map(E=>({...E})));for(let f=l;f=l&&b=u&&_i.text||" ").join(""),r=[],o=0;for(;o=n&&t.cursor.rowR.column-T.column||T.row-R.row):["asm","reg","memory"].includes(C??"")&&k.sort((T,R)=>T.column-R.column||T.row-R.row);let P=k[Math.max(0,Number(d.occurrence??1)-1)];m=P?.row??-1,y=P?.column??-1,f=d.text.length}if(m<0||y<0||m>=t.height||y>=t.width)continue;let E=Math.max(0,Number(d.padding_cells??1)),b=Math.max(0,y-E)*i,_=Math.max(0,m-E)*l,p=Math.min(t.width-y+E,f+E*2)*i,c=Math.min(t.height-m+E,g+E*2)*l,h=s[u.tone??"danger"];if(o.strokeStyle=h,o.lineWidth=2,u.shape==="underline"?(o.beginPath(),o.moveTo(b,_+c-2),o.lineTo(b+p,_+c-2),o.stroke()):o.strokeRect(b+1,_+1,Math.max(1,p-2),Math.max(1,c-2)),u.label){o.font="700 10px system-ui, sans-serif";let k=o.measureText(u.label).width+8;o.fillStyle=h,o.fillRect(b+1,Math.max(0,_-15),k,14),o.fillStyle="#fff",o.fillText(u.label,b+5,Math.max(10,_-4))}}}function Tg(e){if(e.nativeEvent.isComposing||e.metaKey)return null;let n={Enter:"CR",Escape:"Esc",Backspace:"BS",Delete:"Del",Tab:"Tab",ArrowLeft:"Left",ArrowRight:"Right",ArrowUp:"Up",ArrowDown:"Down",Home:"Home",End:"End",PageUp:"PageUp",PageDown:"PageDown",Insert:"Insert"}[e.key]??(/^F\d{1,2}$/.test(e.key)?e.key:null),r=[e.ctrlKey?"C":"",e.altKey?"M":"",e.shiftKey&&n?"S":""].filter(Boolean).join("-");return n?`<${r?`${r}-`:""}${n}>`:e.key.length!==1?null:e.ctrlKey||e.altKey?`<${r}-${e.key==="<"?"lt":e.key}>`:e.key==="<"?"":e.key}function Mg({visible:e,syncMode:t,controlMode:n,expanded:r,fit:o,scale:i,onSummaryChange:l}){let s=(0,N.useRef)(null),u=(0,N.useRef)(null),d=(0,N.useRef)(null),m=(0,N.useRef)(0),y=(0,N.useRef)(0),g=(0,N.useRef)(0),f=(0,N.useRef)(pp()),E=(0,N.useRef)(null),b=(0,N.useRef)(null),_=(0,N.useRef)(null),p=(0,N.useRef)(0),c=(0,N.useRef)(null),h=(0,N.useRef)(null),[k,C]=(0,N.useState)(null),[P,T]=(0,N.useState)(!1),[R,j]=(0,N.useState)(0),[I,ke]=(0,N.useState)(!1),[re,G]=(0,N.useState)(()=>{let A=Number(localStorage.getItem("stem-card-nvim-height-vh"));return Number.isFinite(A)&&A>=25&&A<=90?A:75}),[U,Le]=(0,N.useState)({state:"hidden"}),[Ne,Q]=(0,N.useState)({state:"idle"}),et=Ne.state==="replaying"||Ne.state==="verifying",Ge=t&&U.state==="connected"&&!et,je=n&&I&&U.state==="connected"&&!et,me=()=>{s.current&&Pg(s.current,f.current,_.current===b.current?.step.snapshot_ref?b.current?.step.view?.annotations??[]:[])},Dn=()=>{m.current||(m.current=window.requestAnimationFrame(()=>{m.current=0,me()}))};if((0,N.useEffect)(()=>{let A=F=>{let B=F.detail;b.current=B,C(B),_.current=null;let te=B.step.snapshot_ref;if(U.state!=="connected"&&te&&mp(B.step).then(ie=>{!ie||b.current?.step.snapshot_ref!==te||(f.current=ie,T(!0),_.current=te,Q({state:"idle",snapshot_ref:te,message:"Pokazano ostatni zapisany, zweryfikowany ekran."}),me())}),me(),!B.activate)return;let at=B.step.mode??"RUN",zt=async()=>{if(!B.step.code_ref)return null;let ie=await fetch("/api/nvim/open",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({code_ref:B.step.code_ref,actor:document.documentElement.dataset.cardClientId??"browser"})}),q=await ie.json().catch(()=>({}));if(!ie.ok)throw new Error(q.message??q.error??`HTTP ${ie.status}`);return q};if(at==="CODE"||!te){zt().then(()=>{Q({state:"ready",phase:"code",message:B.step.code_ref?`Otwarto ${B.step.code_ref}; program nie zosta\u0142 zrestartowany.`:"Krok CODE nie ma przypisanego code_ref."})}).catch(ie=>{Q({state:"failed",phase:"code",message:ie instanceof Error?ie.message:String(ie)})});return}if(!e||U.state!=="connected"){Q({state:"failed",snapshot_ref:te,message:"Cel jest offline; pozostaje zapisany wynik tego kroku."});return}let Ee=zt(),ne=Math.max(p.current+1,Date.now());p.current=ne,c.current?.abort();let st=new AbortController;c.current=st,Q({state:"replaying",phase:"dispatch",generation:ne,snapshot_ref:te,message:"Resetuj\u0119 cel i odtwarzam wykonanie do wybranego kroku."});let Ye=0,wn=async()=>{try{let ie=await fetch("/api/checkpoint/status",{cache:"no-store",signal:st.signal});if(!ie.ok)return;let q=await ie.json(),bt=q.active?.generation===ne?q.active:null;if(!bt||p.current!==ne)return;Q({state:bt.phase==="verify"?"verifying":"replaying",phase:bt.phase,generation:ne,snapshot_ref:te,message:bt.message})}catch{}};Ye=window.setInterval(wn,120),wn(),Ee.then(()=>fetch("/api/checkpoint/activate",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({snapshot_ref:te,generation:ne}),signal:st.signal})).then(async ie=>{let q=await ie.json();if(p.current!==ne)return;if(!ie.ok||q.status!=="ready")throw new Error(q.message??`Replay zako\u0144czy\u0142 si\u0119 kodem HTTP ${ie.status}.`);let bt=d.current;if(bt?.readyState!==WebSocket.OPEN)throw new Error("Replay zako\u0144czony, ale most Neovima jest offline.");let fe=y.current;bt.send(JSON.stringify({type:"refresh"}));let Qt=Date.now()+1800;for(;y.current<=fe&&Date.now()window.setTimeout(qt,20));if(y.current<=fe)throw new Error("Neovim nie potwierdzi\u0142 pe\u0142nego redraw po replay.");if(p.current!==ne)return;_.current=te,Q({state:"ready",phase:q.phase,generation:ne,snapshot_ref:te,message:q.message??"Stan maszyny zosta\u0142 odtworzony i zweryfikowany."}),Sg(te,f.current),me(),await new Promise(qt=>window.requestAnimationFrame(()=>qt()));let jn=s.current;if(jn&&b.current?.step.snapshot_ref===te)try{fetch("/api/evidence",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({actor:document.documentElement.dataset.cardClientId??"browser",snapshot_ref:te,event_id:B.step.event_id??null,strategy_ref:B.step.strategy_ref??null,code_ref:B.step.code_ref??null,caption:`${String(B.step.number).padStart(2,"0")} ${B.step.label}`,data_url:jn.toDataURL("image/png")})}).catch(()=>{})}catch{}}).catch(ie=>{st.signal.aborted||p.current!==ne||(mp(B.step).then(q=>{!q||b.current?.step.snapshot_ref!==te||(f.current=q,T(!0),_.current=te,me())}),Q({state:"failed",generation:ne,snapshot_ref:te,message:ie instanceof Error?ie.message:String(ie)}))}).finally(()=>{window.clearInterval(Ye),c.current===st&&(c.current=null)})};return window.addEventListener("stem:nvim-step",A),()=>{window.removeEventListener("stem:nvim-step",A),c.current?.abort()}},[U.state,e]),(0,N.useEffect)(()=>{localStorage.setItem("stem-card-nvim-height-vh",re.toFixed(2))},[re]),(0,N.useEffect)(()=>{let A=window.requestAnimationFrame(me);return()=>window.cancelAnimationFrame(A)},[r,o,i]),(0,N.useEffect)(()=>{let A=()=>{let F=d.current;F?.readyState===WebSocket.OPEN&&F.send(JSON.stringify({type:"refresh"})),me()};return window.addEventListener("stem:nvim-refresh",A),()=>window.removeEventListener("stem:nvim-refresh",A)},[]),(0,N.useEffect)(()=>{let A=U.state;U.state==="connected"&&(A=Ne.state==="idle"?"connected":Ne.state),l({state:A,message:Ne.message??U.message,instance:U.target?.instance??U.target?.container_name,detail:[U.target?.profile??k?.step.view?.connection_ref,k?`${String(k.step.number).padStart(2,"0")} ${k.step.label}`:void 0,Ne.phase].filter(Boolean).join(" \xB7 "),syncMode:t,syncReady:Ge,controlMode:n,controlEnabled:je,screenCursor:{...f.current.cursor},grid:{columns:f.current.width,rows:f.current.height}})},[k,Ne,je,n,R,l,U,t,Ge]),(0,N.useEffect)(()=>()=>window.clearTimeout(g.current),[]),(0,N.useEffect)(()=>{if(!je)return;let A=F=>{let B=d.current;if(B?.readyState!==WebSocket.OPEN)return;if(F.altKey&&!F.ctrlKey&&!F.metaKey&&F.key.toLowerCase()==="w"){F.preventDefault(),F.stopImmediatePropagation(),F.repeat||B.send(JSON.stringify({type:"input",keys:""}));return}let te={ArrowLeft:"h",ArrowDown:"j",ArrowUp:"k",ArrowRight:"l"};F.altKey&&!F.ctrlKey&&!F.metaKey&&te[F.key]&&(F.preventDefault(),F.stopImmediatePropagation(),F.repeat||B.send(JSON.stringify({type:"input",keys:`${te[F.key]}`})))};return window.addEventListener("keydown",A,!0),()=>window.removeEventListener("keydown",A,!0)},[je]),(0,N.useEffect)(()=>{if(!e||!t){d.current?.close(),d.current=null,ke(!1),Le(e?{state:"offline",message:"SYNC OFF: pokazuj\u0119 zapisany ekran bez po\u0142\u0105czenia z kontenerem."}:{state:"hidden"});return}let A=!1,F=0,B=()=>{if(A)return;let te=window.location.protocol==="https:"?"wss:":"ws:",at=new WebSocket(`${te}//${window.location.host}/api/nvim-ui`);d.current=at,Le({state:"connecting"}),at.addEventListener("message",zt=>{try{let Ee=JSON.parse(String(zt.data));if(Ee.type==="status"){typeof Ee.epoch=="string"&&E.current&&E.current!==Ee.epoch&&(f.current=pp(),T(!1),_.current=null),typeof Ee.epoch=="string"&&(E.current=Ee.epoch),Le(Ee);return}Ee.type==="redraw"&&Array.isArray(Ee.events)&&(Lg(f.current,Ee.events),f.current.width>1&&f.current.height>1&&T(!0),Ee.events.some(ne=>Array.isArray(ne)&&ne[0]==="flush")&&(y.current+=1,Dn(),g.current||(g.current=window.setTimeout(()=>{g.current=0,j(ne=>ne+1)},120))))}catch{}}),at.addEventListener("close",()=>{d.current===at&&(d.current=null),A||(F=window.setTimeout(B,1200))}),at.addEventListener("error",()=>{Le(zt=>({...zt,state:"offline",message:"Most Neovima jest chwilowo niedost\u0119pny."}))})};return B(),()=>{A=!0,window.clearTimeout(F),window.cancelAnimationFrame(m.current),m.current=0,d.current?.close(),d.current=null}},[t,e]),!e)return null;let xe=A=>{let F=d.current;F?.readyState===WebSocket.OPEN&&F.send(JSON.stringify(A))},bn=A=>{let F=A.currentTarget.getBoundingClientRect();return{row:Math.max(0,Math.min(f.current.height-1,Math.floor((A.clientY-F.top)/F.height*f.current.height))),column:Math.max(0,Math.min(f.current.width-1,Math.floor((A.clientX-F.left)/F.width*f.current.width)))}},se=A=>[A.shiftKey?"S":"",A.ctrlKey?"C":"",A.altKey?"A":""].filter(Boolean).join("-");return(0,a.jsxs)("section",{className:"nvim-panel","aria-label":"Neovim po\u0142\u0105czony z kontenerem",onWheel:A=>{A.stopPropagation();let F=A.target;(!(F instanceof Element)||!F.closest(".nvim-screen-scroll"))&&A.preventDefault()},children:[(0,a.jsxs)("div",{ref:u,className:"nvim-screen-scroll",style:o?void 0:{height:`${r?90:re}vh`},"data-sync":t?"on":"off","data-control":je?"true":"false",tabIndex:0,onPointerEnter:A=>{ke(!0),A.currentTarget.focus({preventScroll:!0})},onPointerLeave:A=>{ke(!1),A.currentTarget.blur()},onMouseDown:A=>A.currentTarget.focus({preventScroll:!0}),onKeyDown:A=>{if(!je)return;let F=Tg(A);F&&(A.preventDefault(),A.stopPropagation(),xe({type:"input",keys:F}))},children:[(0,a.jsx)("div",{className:"nvim-screen-stage",style:o?void 0:{height:`${(r?90:re)/Math.max(i,.25)}vh`},children:(0,a.jsx)("div",{className:"nvim-screen-surface",children:(0,a.jsx)("div",{className:"nvim-screen-frame",children:(0,a.jsx)("div",{className:"nvim-screen-content",children:(0,a.jsx)("div",{className:"nvim-screen-grid",children:(0,a.jsx)("canvas",{ref:s,className:"nvim-screen",tabIndex:-1,"aria-label":je?"Interaktywny ekran Neovima":"Ekran Neovima",onMouseDown:A=>{if(!je||U.state!=="connected")return;A.preventDefault();let F=bn(A),B=A.button===1?"middle":A.button===2?"right":"left";xe({type:"mouse",button:B,action:"press",modifier:se(A),...F})},onMouseUp:A=>{if(!je||U.state!=="connected")return;A.preventDefault();let F=bn(A),B=A.button===1?"middle":A.button===2?"right":"left";xe({type:"mouse",button:B,action:"release",modifier:se(A),...F})},onWheel:A=>{if(!je||U.state!=="connected")return;A.preventDefault();let F=bn(A);xe({type:"mouse",button:"wheel",action:A.deltaY<0?"up":"down",modifier:se(A),...F})},onContextMenu:A=>je&&A.preventDefault()})})})})})}),!P&&(0,a.jsxs)("div",{className:"nvim-screen-empty",children:[(0,a.jsx)("strong",{children:wp[U.state]}),(0,a.jsx)("span",{children:U.message??"Oczekiwanie na ekran Neovima lub zapisany stan kroku."})]})]}),(0,a.jsx)("div",{className:"nvim-resize-handle",role:"separator","aria-label":"Zmie\u0144 wysoko\u015B\u0107 panelu Neovima","aria-orientation":"horizontal","aria-valuemin":25,"aria-valuemax":90,"aria-valuenow":Math.round(re),tabIndex:0,title:"Przeci\u0105gnij, aby zmieni\u0107 wysoko\u015B\u0107. Dwuklik: 75%.",onPointerDown:A=>{A.preventDefault(),h.current={y:A.clientY,heightVh:re},A.currentTarget.setPointerCapture(A.pointerId)},onPointerMove:A=>{let F=h.current;if(!F)return;let B=(A.clientY-F.y)/window.innerHeight*100;G(Math.max(25,Math.min(90,F.heightVh+B)))},onPointerUp:A=>{h.current=null,A.currentTarget.hasPointerCapture(A.pointerId)&&A.currentTarget.releasePointerCapture(A.pointerId)},onPointerCancel:()=>{h.current=null},onDoubleClick:()=>G(75),onKeyDown:A=>{if(A.key==="ArrowUp"||A.key==="ArrowDown"){A.preventDefault();let F=A.key==="ArrowUp"?-2:2;G(B=>Math.max(25,Math.min(90,B+F)))}else A.key==="Home"&&(A.preventDefault(),G(75))}})]})}function Rg({column:e,row:t}){return e==="chapter"||e==="task"||e==="version"?(0,a.jsx)("td",{children:(0,a.jsx)("code",{children:t[e]})}):e==="idea"?(0,a.jsx)("td",{dangerouslySetInnerHTML:{__html:t.idea_html}}):e==="status"?(0,a.jsx)("td",{children:(0,a.jsx)("span",{className:"scope-status","data-status":t.status,title:t.status,children:t.status_label})}):(0,a.jsx)("td",{children:t[e]})}function Og({front:e}){let t=e.scope_columns??["chapter","task","idea","priority"];return(0,a.jsxs)(ys,{header:e.header_html,left:e.left_margin_html,right:e.right_margin_html,className:"front-sheet",children:[(0,a.jsxs)("section",{className:"front-scope front-goal",children:[(0,a.jsx)("h2",{children:e.goal_title}),(0,a.jsx)(Yt,{html:e.goal_html})]}),(0,a.jsxs)("section",{className:"front-scope front-card-scope",children:[(0,a.jsx)("h2",{children:e.scope_title}),e.scope_html&&(0,a.jsx)(Yt,{html:e.scope_html}),(0,a.jsx)("div",{className:"scope-table-wrap",children:(0,a.jsxs)("table",{className:"scope-table scope-table--task",children:[(0,a.jsx)("thead",{children:(0,a.jsx)("tr",{children:e.scope_headers.map(n=>(0,a.jsx)("th",{children:n},n))})}),(0,a.jsx)("tbody",{children:e.scope_rows.map(n=>(0,a.jsx)("tr",{className:n.key?"scope-row--key":"",children:t.map(r=>(0,a.jsx)(Rg,{column:r,row:n},r))},`${n.chapter}-${n.task}`))})]})})]})]})}function $g({taskRef:e,step:t}){return(0,a.jsxs)("li",{id:`${e}-${t.id}`,children:[(0,a.jsx)("strong",{children:t.title}),(0,a.jsx)(Yt,{html:t.content_html})]})}function Ig({taskRef:e,block:t}){let n=t.kind==="exercise"?"\u0106wiczenie":"Block";return(0,a.jsxs)("section",{className:`task-block task-block--${t.kind}`,id:`${e}-${t.id}`,"data-stem-nav":"block",children:[(0,a.jsxs)("header",{children:[(0,a.jsx)("span",{children:n}),(0,a.jsx)("h4",{children:t.title})]}),(0,a.jsx)(Yt,{html:t.content_html}),t.steps.length>0&&(0,a.jsx)("ol",{className:"block-steps",children:t.steps.map(r=>(0,a.jsx)($g,{taskRef:e,step:r},r.id))})]})}function Fg({task:e}){return e.flow.length?(0,a.jsxs)("article",{className:"task-flow",id:e.ref,"data-stem-nav":"task",children:[(0,a.jsxs)("header",{className:"task-flow-header",children:[(0,a.jsx)("span",{children:e.ref.toUpperCase()}),(0,a.jsx)("h3",{children:e.title}),e.uuid&&(0,a.jsx)("code",{children:e.uuid})]}),e.flow.map(t=>(0,a.jsx)(Ig,{taskRef:e.ref,block:t},t.id)),(0,a.jsxs)("footer",{children:[(0,a.jsx)("strong",{children:"Task acceptance:"})," ",e.criterion]})]}):(0,a.jsxs)("article",{className:"task-legacy",id:e.ref,"data-stem-nav":"task",children:[(0,a.jsx)("strong",{children:e.ref.toUpperCase()}),(0,a.jsx)(Yt,{html:e.prompt_html??""}),(0,a.jsxs)("footer",{children:[(0,a.jsx)("strong",{children:"Task acceptance:"})," ",e.criterion]})]})}var fp={compile:"KOMPILACJA",bss:".BSS",stack:"STOS",registers:"REJESTRY",text:".TEXT"},gp=["#9bcfe2","#c4dfc0","#f4c889","#d2b6dc"];function Dg({config:e,title:t}){let n=e.arena_size??64,r=e.allocations??[5,7],o=e.symbols??[],i=`${e.storage_key??"allocator-memory-flow"}-stage`,[l,s]=(0,N.useState)(()=>Math.min(r.length,Number(localStorage.getItem(i)??0))),[u,d]=(0,N.useState)(o[0]?.id??"");(0,N.useEffect)(()=>localStorage.setItem(i,String(l)),[l,i]);let m=r.slice(0,l).reduce((_,p)=>_+p,0),y=o.find(_=>_.id===u)??o[0],g=Array.from({length:n},(_,p)=>p),f=_=>{let p=0;for(let c=0;co.some(p=>p.area===_));return(0,a.jsxs)("div",{className:"memory-react","aria-label":`Interaktywny diagram: ${t}`,children:[(0,a.jsxs)("header",{children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("small",{children:"INTERAKTYWNY MODEL PAMI\u0118CI"}),(0,a.jsx)("h3",{children:t})]}),(0,a.jsxs)("div",{className:"memory-actions",children:[(0,a.jsx)("button",{"aria-pressed":l===0,onClick:()=>s(0),children:"definicje / reset"}),r.map((_,p)=>(0,a.jsxs)("button",{"aria-pressed":l===p+1,onClick:()=>s(p+1),children:["alloc(",_,")"]},`${_}-${p}`))]})]}),(0,a.jsx)("div",{className:"memory-lanes",children:b.map(_=>(0,a.jsxs)("section",{className:`memory-lane ${_}`,children:[(0,a.jsx)("b",{children:fp[_]}),o.filter(p=>p.area===_).map(p=>(0,a.jsx)("button",{className:u===p.id?"active":"",onClick:()=>d(p.id),children:(0,a.jsx)("code",{children:p.declaration})},p.id))]},_))}),(0,a.jsxs)("div",{className:"arena-wrap",children:[(0,a.jsxs)("div",{className:"arena-label",children:[(0,a.jsxs)("code",{children:["allocbuf[",n,"]"]}),(0,a.jsxs)("span",{children:["u\u017Cyte ",m," B / wolne ",n-m," B"]})]}),(0,a.jsxs)("div",{className:"arena",style:{"--allocp":m,"--arena-size":n},children:[g.map(_=>{let p=f(_);return(0,a.jsx)("i",{style:p>=0?{background:gp[p%gp.length]}:void 0},_)}),(0,a.jsxs)("span",{className:"allocp",children:["allocp \u2191 ",m]})]})]}),(0,a.jsxs)("p",{className:"memory-stage",children:[(0,a.jsxs)("strong",{children:[l+1,"/",r.length+1]})," ",(0,a.jsx)("code",{children:E})]}),y&&(0,a.jsxs)("aside",{className:"memory-inspector",children:[(0,a.jsx)("strong",{children:y.id}),(0,a.jsx)("code",{children:y.declaration}),(0,a.jsx)("span",{children:y.description})]})]})}function jg({config:e,asset:t,progress:n,onSetStatus:r}){let o=e.stages??[],i=`${e.storage_key??t.label}-uml-stage`,l=(0,N.useRef)(null),[s,u]=(0,N.useState)(""),[d,m]=(0,N.useState)(!1),[y,g]=(0,N.useState)(!1),[f,E]=(0,N.useState)(()=>Math.max(0,Math.min(o.length-1,Number(localStorage.getItem(i)??0))));(0,N.useEffect)(()=>localStorage.setItem(i,String(f)),[f,i]),(0,N.useEffect)(()=>{let c=!0;return m(!1),fetch(t.href,{cache:"no-store"}).then(h=>{if(!h.ok)throw new Error(`HTTP ${h.status}`);return h.text()}).then(h=>{let k=new DOMParser().parseFromString(h,"image/svg+xml"),C=k.documentElement;if(C.nodeName.toLowerCase()!=="svg"||k.querySelector("parsererror"))throw new Error("Niepoprawny SVG");k.querySelectorAll("script, foreignObject").forEach(P=>P.remove()),Np(C,t.tile),c&&u(C.outerHTML)}).catch(()=>{c&&m(!0)}),()=>{c=!1}},[t.href,t.tile]),(0,N.useEffect)(()=>{let c=l.current?.querySelector("svg");if(!c)return;c.setAttribute("role","img"),c.setAttribute("aria-label",t.alt),c.querySelectorAll("[data-uml-stage]").forEach(C=>{C.classList.remove("uml-stage-region","uml-stage-region-bg","uml-stage-region-outline","uml-stage-region-active","uml-stage-region-completed"),C.removeAttribute("data-uml-stage"),C.removeAttribute("data-uml-stage-label"),C.removeAttribute("role"),C.removeAttribute("tabindex"),C.removeAttribute("aria-label")});let h=Array.from(c.querySelectorAll("text")),k=Array.from(c.querySelectorAll("rect"));o.forEach((C,P)=>{if(!C.svg_label)return;let T=h.find(G=>(G.textContent??"").trim().startsWith(C.svg_label)),R=Number(T?.getAttribute("y"));if(!T||!Number.isFinite(R))return;let j=k.map(G=>{let U=Number(G.getAttribute("y")),Le=Number(G.getAttribute("height")),Ne=Number(G.getAttribute("width")),Q=G.getAttribute("style")??"",et=Number(Q.match(/stroke-width:\s*([\d.]+)/)?.[1]??G.getAttribute("stroke-width")??0);return{rect:G,y:U,height:Le,width:Ne,strokeWidth:et,area:Ne*Le}}).filter(({y:G,height:U,width:Le,strokeWidth:Ne})=>Number.isFinite(G)&&Number.isFinite(U)&&Number.isFinite(Le)&&Ne>=2&&G<=R&&G+U>=R).sort((G,U)=>G.area-U.area),I=j[0];if(!I)return;let ke=j.filter(({y:G,height:U,width:Le})=>Math.abs(G-I.y)<.1&&Math.abs(U-I.height)<.1&&Math.abs(Le-I.width)<.1),re=!!(C.progress_id&&n?.items?.[C.progress_id]?.status==="approved");ke.forEach(({rect:G},U)=>{let Le=G.getAttribute("fill")!=="none";G.dataset.umlStage=String(P),G.dataset.umlStageLabel=C.label,G.classList.add("uml-stage-region",Le?"uml-stage-region-bg":"uml-stage-region-outline"),G.classList.toggle("uml-stage-region-active",P===f),G.classList.toggle("uml-stage-region-completed",re),U===0&&(G.setAttribute("role","button"),G.setAttribute("tabindex","0"),G.setAttribute("aria-label",`Poka\u017C etap ${C.label}`))})})},[t.alt,n,f,o,s]);let b=(c,h)=>{let k=l.current?.querySelector("svg");if(!k)return;let C=Array.from(k.querySelectorAll(".uml-stage-region-bg[data-uml-stage]")).filter(T=>{let R=T.getBoundingClientRect();return c>=R.left&&c<=R.right&&h>=R.top&&h<=R.bottom}).sort((T,R)=>{let j=T.getBoundingClientRect(),I=R.getBoundingClientRect();return j.width*j.height-I.width*I.height})[0],P=Number(C?.dataset.umlStage);Number.isInteger(P)&&E(P)},_=c=>{if(c.key!=="Enter"&&c.key!==" ")return;let h=c.target,k=Number(h.dataset?.umlStage);Number.isInteger(k)&&(c.preventDefault(),E(k))},p=o[f];return(0,a.jsxs)("div",{className:"uml-react",children:[(0,a.jsxs)("header",{children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("small",{children:"KANONICZNY DIAGRAM UML \xB7 PLANTUML"}),(0,a.jsx)("h3",{children:"Reset i dwa przydzia\u0142y liniowe"})]}),(0,a.jsx)("div",{className:"uml-actions",children:o.map((c,h)=>(0,a.jsxs)("button",{"aria-pressed":f===h,"data-completed":c.progress_id&&n?.items?.[c.progress_id]?.status==="approved"?"true":"false",onClick:()=>E(h),children:[c.progress_id&&n?.items?.[c.progress_id]?.status==="approved"&&(0,a.jsx)("span",{"aria-hidden":"true",children:"\u2713 "}),c.label]},c.id))})]}),(0,a.jsxs)("div",{ref:l,className:"uml-canvas",onClick:c=>b(c.clientX,c.clientY),onKeyDown:_,children:[s?(0,a.jsx)("div",{className:`uml-svg-host${t.tile?" is-tiled":""}`,style:hs(t.tile),dangerouslySetInnerHTML:{__html:s}}):(0,a.jsx)("img",{src:t.href,alt:t.alt}),d&&(0,a.jsx)("span",{className:"uml-inline-warning",children:"Widok statyczny \u2014 nie uda\u0142o si\u0119 wczyta\u0107 interaktywnego SVG."})]}),p&&(0,a.jsxs)("aside",{className:"uml-stage",children:[(0,a.jsx)("strong",{children:p.label}),(0,a.jsx)("span",{children:p.description}),p.code_ref&&(0,a.jsx)("code",{children:p.code_ref})]}),p?.progress_id&&(0,a.jsxs)("footer",{className:"uml-approval",children:[(0,a.jsx)("span",{children:n?.items?.[p.progress_id]?.status==="approved"?"Ten stan jest zatwierdzony i zapisany w JSON-ie zaj\u0119\u0107.":"Kursor wybiera stan; zatwierdzenie zapisuje go w JSON-ie zaj\u0119\u0107."}),(0,a.jsx)("button",{disabled:!n||y,onClick:async()=>{if(!p.progress_id||!n)return;let c=n.items?.[p.progress_id]?.status==="approved";g(!0);try{await r(p.progress_id,c?"pending":"approved")}finally{g(!1)}},children:y?"Zapisywanie\u2026":n?.items?.[p.progress_id]?.status==="approved"?"Cofnij zatwierdzenie":"Zatwierd\u017A stan"})]})]})}function Ug({config:e,asset:t,progress:n,onSetStatus:r,continuation:o}){let i=e.phases??[],l=i.flatMap(x=>x.steps.map(S=>({phase:x,step:S}))),s=`${e.storage_key??t.label}-uml-step`,u=`${e.storage_key??t.label}-navigation-level`,d=(0,N.useRef)(null),m=(0,N.useRef)(null),y=(0,N.useRef)(new Map),g=(0,N.useRef)(null),f=(0,N.useRef)(0),E=(0,N.useRef)(!1),b=(0,N.useRef)(null),_=(0,N.useRef)(!0),[p,c]=(0,N.useState)(""),[h,k]=(0,N.useState)(!1),[C,P]=(0,N.useState)(!1),[T,R]=(0,N.useState)(null),[j,I]=(0,N.useState)(null),[ke,re]=(0,N.useState)(!1),[G,U]=(0,N.useState)(""),[Le,Ne]=(0,N.useState)(!1),[Q,et]=(0,N.useState)(null),[Ge,je]=(0,N.useState)([]),[me,Dn]=(0,N.useState)(0),[xe,bn]=(0,N.useState)(()=>Math.max(0,Math.min(l.length-1,Number(localStorage.getItem(s)??0)))),[se,A]=(0,N.useState)(()=>{let x=localStorage.getItem(u);return x==="card"||x==="task"||x==="block"||x==="phase"||x==="step"||x==="snapshot"?x:"step"});(0,N.useEffect)(()=>localStorage.setItem(s,String(xe)),[xe,s]),(0,N.useEffect)(()=>localStorage.setItem(u,se),[se,u]),(0,N.useEffect)(()=>{let x=!0;return k(!1),fetch(t.href,{cache:"no-store"}).then(S=>{if(!S.ok)throw new Error(`HTTP ${S.status}`);return S.text()}).then(S=>{let M=new DOMParser().parseFromString(S,"image/svg+xml"),O=M.documentElement;if(O.nodeName.toLowerCase()!=="svg"||M.querySelector("parsererror"))throw new Error("Niepoprawny SVG");M.querySelectorAll("script, foreignObject").forEach(v=>v.remove()),Np(O,t.tile),x&&c(O.outerHTML)}).catch(()=>{x&&k(!0)}),()=>{x=!1}},[t.href,t.tile]),(0,N.useEffect)(()=>{let x=!0,S=fs(t,e);if(U("Wczytywanie uk\u0142adu\u2026"),Ne(!1),!t.source_href)return R(S),I(S),U("Brak \u017Ar\xF3d\u0142a PlantUML \u2014 zapis wy\u0142\u0105czony."),()=>{x=!1};let M=t.source_href.replace(/\.puml(?:\?.*)?$/,".layout.json");return fetch(`/api/uml-layout?source=${encodeURIComponent(t.source_href)}`,{cache:"no-store"}).then(async O=>{if(!O.ok)throw new Error(`HTTP ${O.status}`);return O.json()}).catch(async()=>{let O=await fetch(M,{cache:"no-store"});return O.ok?{layout:await O.json(),source_digest:"",stale:!1}:{layout:null,source_digest:"",stale:!1}}).then(O=>{if(!x)return;let v=O.layout??fs(t,e,O.source_digest??"");R(v),I(v),re(!1),Ne(!!O.stale),U(O.layout?"Uk\u0142ad wczytany z JSON.":"Uk\u0142ad PlantUML \u2014 brak r\u0119cznych zmian.")}).catch(O=>{x&&(R(S),I(S),U(`Nie wczytano uk\u0142adu: ${O instanceof Error?O.message:String(O)}`))}),()=>{x=!1}},[t.source_href,t.label,e.block?.id,e.task?.id]),(0,N.useEffect)(()=>{let x=m.current?.querySelector("svg");if(!x||!j)return;fg(x);let S=new Map(l.map(({step:L})=>[String(L.number).padStart(2,"0"),L.id])),M=gg(x,S),O=new Map(M.map(L=>[L.id,L]));y.current=O;let v=M.map(L=>L.id);je(L=>L.join("\0")===v.join("\0")?L:v),M.forEach(L=>{let H=j.elements[L.id];H&&hg(L,H)});let w=x.viewBox.baseVal;(j.canvas.width<=0||j.canvas.height<=0)&&I(L=>L&&{...L,canvas:{...L.canvas,width:w?.width||Number(x.getAttribute("width")?.replace("px",""))||0,height:w?.height||Number(x.getAttribute("height")?.replace("px",""))||0}})},[l,p,j]),(0,N.useEffect)(()=>{let x=m.current?.querySelector("svg");if(!x)return;let S=e.kind==="uml-class"&&x.contains(document.activeElement);x.setAttribute("role","img"),x.setAttribute("aria-label",t.alt),x.classList.toggle("uml-class-svg",e.kind==="uml-class"),x.classList.toggle("uml-class-svg-active",e.kind==="uml-class"&&se!=="card"),x.querySelectorAll(".uml-step-hit, .uml-class-focus-region").forEach(K=>K.remove()),x.querySelectorAll("[data-uml-step-element]").forEach(K=>{K.classList.remove("uml-step-element","uml-step-element-active","uml-step-element-completed","uml-step-element-tone-a","uml-step-element-tone-b"),K.removeAttribute("data-uml-step-element"),K.removeAttribute("data-uml-step-claim-area")});let M=Array.from(x.querySelectorAll("text")),O=Array.from(x.querySelectorAll("line")),v=Array.from(x.querySelectorAll("polygon"));if(e.kind==="uml-class"){let K=V=>V?mg(V):null,X=V=>{if(!V.length)return null;let oe=Math.min(...V.map(J=>J.x)),ct=Math.min(...V.map(J=>J.y)),Ue=Math.max(...V.map(J=>J.x+J.width)),ue=Math.max(...V.map(J=>J.y+J.height));return{x:oe,y:ct,width:Ue-oe,height:ue-ct}},D=Array.from(x.querySelectorAll("g > *")),Z=Array.from(x.querySelectorAll("[id]"));l.forEach(({step:V},oe)=>{let ct=V.svg_label??String(V.number).padStart(2,"0"),Ue=M.find(ge=>(ge.textContent??"").trim().startsWith(ct));if(!Ue)return;let ue=K(Ue);if(!ue)return;let J=Number(Ue.getAttribute("y")),Re=M.filter(ge=>Number.isFinite(J)&&Math.abs(Number(ge.getAttribute("y"))-J)<.8),Ve=V.svg_target?Z.find(ge=>ge.id===V.svg_target||ge.id.startsWith(`${V.svg_target}-`))??null:null,dt=K(Ve)??X(Re.map(ge=>K(ge)).filter(ge=>ge!==null))??ue,vr=Ve?.tagName.toLowerCase()==="rect",vs=Ve?[Ve,Ue]:Re;vr&&D.forEach(ge=>{let Xt=K(ge);if(!Xt||ge===Ve)return;let bs=Xt.x+Xt.width/2,ws=Xt.y+Xt.height/2;bs>=dt.x&&bs<=dt.x+dt.width&&ws>=dt.y&&ws<=dt.y+dt.height&&vs.push(ge)});let Ap=!!(V.progress_id&&n?.items?.[V.progress_id]?.status==="approved"),xs=Math.max(1,dt.width*dt.height);vs.forEach(ge=>{let Xt=Number(ge.dataset.umlStepClaimArea);Number.isFinite(Xt)&&Xt{let D=K.svg_label??String(K.number).padStart(2,"0"),Z=M.find(J=>(J.textContent??"").trim()===D),V=Number(Z?.getAttribute("y"));if(!Z||!Number.isFinite(V))return;let oe=V+5,ct=!!(K.progress_id&&n?.items?.[K.progress_id]?.status==="approved"),Ue=M.filter(J=>Math.abs(Number(J.getAttribute("y"))-V)<.8);Ue.push(...O.filter(J=>{let Re=Number(J.getAttribute("y1")),Ve=Number(J.getAttribute("y2"));return Number.isFinite(Re)&&Number.isFinite(Ve)&&Math.abs(Re-Ve)<.8&&Math.abs((Re+Ve)/2-oe)<=14})),Ue.push(...v.filter(J=>{let Re=(J.getAttribute("points")??"").trim().split(/\s+/).map(vr=>Number(vr.split(",")[1])).filter(Number.isFinite);if(!Re.length)return!1;let Ve=Math.min(...Re),dt=Math.max(...Re);return dt-Ve<=16&&Math.abs((Ve+dt)/2-oe)<=14})),Ue.forEach(J=>{J.dataset.umlStepElement=String(X),J.classList.add("uml-step-element"),J.classList.toggle("uml-step-element-active",X===xe),J.classList.toggle("uml-step-element-completed",ct)});let ue=document.createElementNS("http://www.w3.org/2000/svg","rect");ue.setAttribute("x",String(L)),ue.setAttribute("y",String(V-12)),ue.setAttribute("width",String(H)),ue.setAttribute("height","31"),ue.setAttribute("fill","transparent"),ue.setAttribute("pointer-events","all"),ue.setAttribute("role","button"),ue.setAttribute("tabindex","0"),ue.setAttribute("aria-label",`Poka\u017C krok ${String(K.number).padStart(2,"0")}: ${K.label}`),ue.dataset.umlStep=String(X),ue.classList.add("uml-step-hit"),ue.classList.toggle("uml-step-hit-active",se!=="card"&&X===xe),ue.classList.toggle("uml-step-hit-completed",ct),x.appendChild(ue)})},[t.alt,e.kind,l,se,n,xe,p,j]),(0,N.useEffect)(()=>{let x=m.current?.querySelector("svg");if(x&&(x.querySelectorAll(".uml-layout-hit,.uml-layout-resize").forEach(S=>S.remove()),x.classList.toggle("uml-layout-editing",C),!(!C||!j)))for(let S of y.current.values()){let M=j.elements[S.id]??po(S),O=document.createElementNS("http://www.w3.org/2000/svg","rect");O.setAttribute("x",String(M.x)),O.setAttribute("y",String(M.y)),O.setAttribute("width",String(Math.max(12,M.width))),O.setAttribute("height",String(Math.max(12,M.height))),O.setAttribute("tabindex","0"),O.setAttribute("role","button"),O.setAttribute("aria-label",`Edytuj element UML ${S.id}`),O.dataset.umlLayoutId=S.id,O.dataset.umlLayoutAction="move",O.classList.add("uml-layout-hit"),S.id===Q&&O.classList.add("is-selected");let v=document.createElementNS("http://www.w3.org/2000/svg","title");if(v.textContent=`${S.id} \xB7 przeci\u0105gnij, aby zmieni\u0107 po\u0142o\u017Cenie`,O.appendChild(v),x.appendChild(O),S.id===Q){let w=Math.max(8,Math.min(14,Math.min(M.width,M.height)*.1)),L=document.createElementNS("http://www.w3.org/2000/svg","rect");L.setAttribute("x",String(M.x+M.width-w/2)),L.setAttribute("y",String(M.y+M.height-w/2)),L.setAttribute("width",String(w)),L.setAttribute("height",String(w)),L.dataset.umlLayoutId=S.id,L.dataset.umlLayoutAction="resize",L.classList.add("uml-layout-resize"),x.appendChild(L)}}},[p,C,j,Q,Ge]),(0,N.useEffect)(()=>{C&&(!Q||!y.current.has(Q))&&et(Ge[0]??null)},[C,Ge,Q]),(0,N.useEffect)(()=>{if(me===0||f.current===me)return;let x=!1,S=0,M=v=>{if(x)return;let w=m.current?.querySelector(`.uml-step-hit[data-uml-step="${xe}"]`);if(!w)return;if(document.querySelector(".viewer-chrome")?.classList.contains("is-nvim-fit")){f.current=me;return}let H=Sp(w);if(!H){f.current=me;return}let K=sg(w);if(!K){let Z=dg(w,H),V=Z===0?up(w,H):0,oe=Z===0?sp(w,V):Z;if(vFn){S=window.requestAnimationFrame(()=>M(v+1));return}f.current=me;return}let X=up(w,K);if(Math.abs(X)<=Fn){f.current=me;return}let D=sp(w,X);if(vFn){S=window.requestAnimationFrame(()=>M(v+1));return}f.current=me},O=window.requestAnimationFrame(()=>M(0));return()=>{x=!0,window.cancelAnimationFrame(O),window.cancelAnimationFrame(S)}},[me,xe,p]);let F=(x,S,M=se,O=!0)=>{let v={task:e.task??null,block:e.block??null,phase:{id:x.phase.id,label:x.phase.label},step:x.step,focusLevel:M,activate:S&&document.documentElement.dataset.nvimSyncMode==="on"},w=()=>{window.dispatchEvent(new CustomEvent("stem:nvim-step",{detail:v}))};if(!O){w();return}let L=fetch("/api/navigation/current",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({task:v.task,block:v.block,phase:v.phase,step:{id:v.step.id,number:v.step.number,label:v.step.label,mode:v.step.mode??(v.step.snapshot_ref?"RUN":"CODE"),code_ref:v.step.code_ref??null,event_id:v.step.event_id??null,strategy_ref:v.step.strategy_ref??null},snapshot_ref:v.step.snapshot_ref??null,focus_level:v.focusLevel,sync_requested:!!v.activate,actor:document.documentElement.dataset.cardClientId??"browser"})});v.activate?L.then(w,w):(w(),L.catch(()=>{}))},B=(x,S=!1,M=se,O=!0)=>{let v=Math.max(0,Math.min(l.length-1,x)),w=l[v];if(w){if(A(M),v===xe){F(w,S,M,O);return}Dn(L=>L+1),E.current=S,b.current=M,_.current=O,bn(v)}},te=(x,S)=>{let M=m.current?.querySelector("svg"),O=M?.getScreenCTM();if(!M||!O)return null;let v=M.createSVGPoint();return v.x=x,v.y=S,v.matrixTransform(O.inverse())},at=x=>{if(!C||!j)return;let S=x.target?.closest(".uml-layout-hit[data-uml-layout-id],.uml-layout-resize[data-uml-layout-id]"),M=S?.dataset.umlLayoutId,O=M?y.current.get(M):null,v=te(x.clientX,x.clientY);if(!M||!O||!v)return;x.preventDefault(),x.stopPropagation();let w=j.elements[M]??po(O);g.current={id:M,action:S?.dataset.umlLayoutAction==="resize"?"resize":"move",pointerId:x.pointerId,startX:v.x,startY:v.y,initial:w},et(M),I(L=>L&&{...L,elements:{...L.elements,[M]:w}}),x.currentTarget.setPointerCapture(x.pointerId)},zt=x=>{let S=g.current;if(!S||S.pointerId!==x.pointerId)return;let M=te(x.clientX,x.clientY);if(!M)return;x.preventDefault();let O=M.x-S.startX,v=M.y-S.startY,w=S.action==="resize"?{...S.initial,width:Math.max(24,S.initial.width+O),height:Math.max(18,S.initial.height+v)}:{...S.initial,x:S.initial.x+O,y:S.initial.y+v};I(L=>L&&{...L,elements:{...L.elements,[S.id]:w}}),re(!0)},Ee=x=>{let S=g.current;!S||S.pointerId!==x.pointerId||(g.current=null,x.currentTarget.hasPointerCapture(x.pointerId)&&x.currentTarget.releasePointerCapture(x.pointerId))},ne=(x,S)=>{let M=y.current.get(x);M&&(I(O=>{if(!O)return O;let v=O.elements[x]??po(M);return{...O,elements:{...O.elements,[x]:S(v)}}}),re(!0))},st=async()=>{if(!j||!t.source_href)return;let x=Object.fromEntries(Array.from(y.current.values()).map(M=>[M.id,j.elements[M.id]??po(M)])),S={...j,elements:x};U("Zapisywanie uk\u0142adu\u2026");try{let M=await fetch("/api/uml-layout",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({source:t.source_href,layout:S,actor:document.documentElement.dataset.cardClientId??"browser"})});if(!M.ok)throw new Error((await M.json().catch(()=>null))?.message??`HTTP ${M.status}`);let O=await M.json();R(O.layout),I(O.layout),re(!1),Ne(!1),U(`Zapisano ${Object.keys(O.layout.elements).length} element\xF3w w JSON.`)}catch(M){U(`B\u0142\u0105d zapisu: ${M instanceof Error?M.message:String(M)}`)}},Ye=()=>{T&&(I(T),re(!1),U("Przywr\xF3cono ostatnio zapisany uk\u0142ad."))},wn=async()=>{if(!(!t.source_href||!window.confirm("Usun\u0105\u0107 r\u0119czny uk\u0142ad i wr\xF3ci\u0107 do geometrii PlantUML?"))){U("Resetowanie uk\u0142adu\u2026");try{let x=await fetch(`/api/uml-layout?source=${encodeURIComponent(t.source_href)}&actor=${encodeURIComponent(document.documentElement.dataset.cardClientId??"browser")}`,{method:"DELETE"});if(!x.ok)throw new Error(`HTTP ${x.status}`);let S=fs(t,e,T?.source_digest??"");R(S),I(S),re(!1),et(null),U("Przywr\xF3cono automatyczny uk\u0142ad PlantUML.")}catch(x){U(`B\u0142\u0105d resetu: ${x instanceof Error?x.message:String(x)}`)}}},ie=(x,S)=>{if(C)return;let M=Array.from(m.current?.querySelectorAll(".uml-step-hit[data-uml-step]")??[]).filter(v=>{let w=v.getBoundingClientRect();return x>=w.left&&x<=w.right&&S>=w.top&&S<=w.bottom}).sort((v,w)=>{let L=v.getBoundingClientRect(),H=w.getBoundingClientRect();return Math.abs(S-(L.top+L.bottom)/2)-Math.abs(S-(H.top+H.bottom)/2)}),O=Number(M[0]?.dataset.umlStep);Number.isInteger(O)&&B(O,!1,"step")},q=x=>{if(C||x.key!=="Enter"&&x.key!==" ")return;let S=x.target,M=Number(S.dataset?.umlStep);Number.isInteger(M)&&(x.preventDefault(),B(M,x.key==="Enter","step"))},bt=x=>{let S=l.findIndex(M=>M.phase.id===x.id);S>=0&&B(S,!1,"phase")},fe=l[xe];if((0,N.useEffect)(()=>{fe&&(F(fe,E.current,b.current??se,_.current),E.current=!1,b.current=null,_.current=!0)},[fe?.phase.id,fe?.step.id,e.block]),(0,N.useEffect)(()=>{let x=S=>{let M=S.detail;if(!M||e.task?.id&&M.task.id!==e.task.id||e.block?.id&&M.block.id!==e.block.id)return;let O=l.findIndex(v=>v.phase.id===M.phase.id&&v.step.id===M.step.id);if(O<0){A("card");return}B(O,!1,M.focus_level,!1)};return window.addEventListener("stem:navigation-command",x),()=>window.removeEventListener("stem:navigation-command",x)},[e.block?.id,e.task?.id,l,se,xe]),(0,N.useEffect)(()=>{let x=S=>{if(S.metaKey||C||S.target?.closest("input, textarea, select, [contenteditable='true']"))return;let O=d.current;if(!O)return;let v=Array.from(document.querySelectorAll("[data-stem-nav='uml-block']")),w=window.innerHeight/2;if(v.sort((D,Z)=>{let V=D.getBoundingClientRect(),oe=Z.getBoundingClientRect();return Math.abs((V.top+V.bottom)/2-w)-Math.abs((oe.top+oe.bottom)/2-w)})[0]!==O)return;if(S.key==="Enter"&&S.ctrlKey&&!S.altKey&&!S.shiftKey){if(!fe?.step.progress_id||!n)return;S.preventDefault(),S.stopPropagation();let D=n.items?.[fe.step.progress_id]?.status==="approved";r(fe.step.progress_id,D?"pending":"approved");return}if(S.key==="Enter"&&!S.altKey&&!S.shiftKey){if(!fe)return;S.preventDefault(),S.stopPropagation(),F(fe,!0,se);return}let H=["card","task","block","phase","step","snapshot"];if((S.key==="ArrowLeft"||S.key==="ArrowRight"||S.key==="Escape")&&!S.altKey&&!S.ctrlKey&&!S.shiftKey){let D=S.key==="ArrowRight"?1:-1,Z=H[Math.max(0,Math.min(H.length-1,H.indexOf(se)+D))];S.preventDefault(),S.stopPropagation(),A(Z),fe&&F(fe,!1,Z);return}if(S.key!=="ArrowUp"&&S.key!=="ArrowDown"||se==="card"&&!S.altKey&&!S.ctrlKey&&!S.shiftKey)return;let K=S.key==="ArrowUp"?-1:1,X=se;if(S.altKey&&S.shiftKey&&!S.ctrlKey)X="snapshot";else if(S.ctrlKey&&S.shiftKey&&!S.altKey)X="step";else if(S.altKey&&!S.ctrlKey&&!S.shiftKey)X="task";else if(S.ctrlKey&&!S.altKey&&!S.shiftKey)X="block";else if(S.shiftKey&&!S.altKey&&!S.ctrlKey)X="phase";else if(S.altKey||S.ctrlKey||S.shiftKey)return;S.preventDefault(),S.stopPropagation(),fetch("/api/navigation/move",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({level:X,delta:K,sync_requested:!1,actor:document.documentElement.dataset.cardClientId??"browser"})}).then(D=>D.ok?D.json():Promise.reject(new Error(`HTTP ${D.status}`))).then(D=>{D.current&&window.dispatchEvent(new CustomEvent("stem:navigation-command",{detail:D.current}))}).catch(()=>{})};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[fe,l,se,r,n,C]),!fe)return null;let{phase:Qt,step:jn}=fe,qt=l.filter(x=>x.phase.id===Qt.id),ho=e.block?.label.match(/^A[1-8]\b/)?.[0]??"UML",yo=(e.title??e.block?.label??t.caption).replace(/^A[1-8]\s*[·—:-]\s*/i,""),Un=Q?y.current.get(Q)??null:null,ut=Un?j?.elements[Un.id]??po(Un):null;return(0,a.jsxs)("div",{ref:d,className:"uml-react uml-snapshot-react","data-stem-nav":"uml-block","data-task-id":e.task?.id,"data-block-id":e.block?.id,"data-navigation-level":se,children:[(0,a.jsxs)("header",{className:"uml-snapshot-header",children:[(0,a.jsxs)("div",{className:"uml-header-first-line",children:[(0,a.jsxs)("h3",{children:[(0,a.jsx)("span",{children:ho})," \u2014 ",yo,t.tile&&(0,a.jsxs)("small",{className:"uml-tile-part",children:["cz\u0119\u015B\u0107 ",t.tile.index,"/",t.tile.count," \xB7 r",t.tile.row," c",t.tile.column]})]}),(0,a.jsxs)("div",{className:"uml-header-navigation",children:[(0,a.jsx)(_p,{continuation:o}),t.source_href&&(0,a.jsx)("button",{className:`uml-edit-toggle${C?" is-active":""}`,"aria-pressed":C,title:"R\u0119czna edycja po\u0142o\u017Cenia i parametr\xF3w blok\xF3w UML",onClick:()=>P(x=>!x),children:C?"ZAMKNIJ EDIT":"EDIT"}),(0,a.jsx)("div",{className:"uml-phase-actions","aria-label":"Fazy diagramu",children:i.map(x=>(0,a.jsx)("button",{"aria-pressed":Qt.id===x.id,onClick:()=>bt(x),children:x.label},x.id))}),(0,a.jsx)("div",{className:"uml-step-actions","aria-label":`Checkpointy fazy ${Qt.label}`,children:qt.map(x=>{let S=l.indexOf(x),M=!!(x.step.progress_id&&n?.items?.[x.step.progress_id]?.status==="approved");return(0,a.jsx)("button",{"aria-label":`Krok ${x.step.number}: ${x.step.label}`,"aria-pressed":se!=="card"&&S===xe,"data-completed":M?"true":"false","data-mode":x.step.mode??"RUN",title:`${x.step.mode??"RUN"} \xB7 ${x.step.label}`,onClick:()=>B(S),children:String(x.step.number).padStart(2,"0")},x.step.id)})})]})]}),e.block?.description&&(0,a.jsx)("p",{className:"uml-header-description",children:e.block.description})]}),(0,a.jsxs)("div",{className:"uml-snapshot-layout",children:[(0,a.jsxs)("div",{ref:m,className:`uml-canvas uml-step-canvas${C?" is-layout-editing":""}`,onClick:x=>ie(x.clientX,x.clientY),onKeyDown:q,onPointerDown:at,onPointerMove:zt,onPointerUp:Ee,onPointerCancel:Ee,children:[p?(0,a.jsx)("div",{className:`uml-svg-host${t.tile?" is-tiled":""}`,style:hs(t.tile),dangerouslySetInnerHTML:{__html:p}}):(0,a.jsx)("img",{src:t.href,alt:t.alt}),h&&(0,a.jsx)("span",{className:"uml-inline-warning",children:"Widok statyczny \u2014 wybierz krok przyciskiem nad diagramem."})]}),C&&j&&(0,a.jsxs)("aside",{className:"uml-layout-editor","aria-label":"Edytor uk\u0142adu UML",children:[(0,a.jsxs)("div",{className:"uml-layout-editor-title",children:[(0,a.jsx)("strong",{children:"UML layout"}),(0,a.jsx)("span",{children:ke?"niezapisane zmiany":"zapisany"}),Le&&(0,a.jsx)("b",{children:"\u0179r\xF3d\u0142o PlantUML zmieni\u0142o si\u0119"})]}),(0,a.jsxs)("label",{children:["Element",(0,a.jsx)("select",{value:Q??"",onChange:x=>et(x.target.value||null),children:Ge.map(x=>(0,a.jsx)("option",{value:x,children:x},x))})]}),Q&&ut&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"uml-layout-number-grid",children:["x","y","width","height"].map(x=>(0,a.jsxs)("label",{children:[x,(0,a.jsx)("input",{type:"number",step:"1",min:x==="width"||x==="height"?12:void 0,value:Math.round(ut[x]*100)/100,onChange:S=>ne(Q,M=>({...M,[x]:Number(S.target.value)}))})]},x))}),(0,a.jsxs)("label",{className:"uml-layout-editor-text",children:["Tekst bloku \u2014 jeden wiersz SVG na lini\u0119",(0,a.jsx)("textarea",{rows:Math.max(3,Math.min(10,ut.text?.lines?.length??3)),value:(ut.text?.lines??[]).join(` +`),onChange:x=>ne(Q,S=>({...S,text:{...S.text,title:x.target.value.split(` +`)[0]??"",description:x.target.value.split(` +`).slice(1).join(` +`),lines:x.target.value.split(` +`)}}))})]}),(0,a.jsxs)("div",{className:"uml-layout-style-grid",children:[(0,a.jsxs)("label",{children:["Font",(0,a.jsx)("input",{type:"number",min:"4",max:"96",step:"0.5",value:ut.text?.font_size??12,onChange:x=>ne(Q,S=>({...S,text:{...S.text,font_size:Number(x.target.value)}}))})]}),(0,a.jsxs)("label",{children:["Wyr\xF3wnanie",(0,a.jsxs)("select",{value:ut.text?.align??"left",onChange:x=>ne(Q,S=>({...S,text:{...S.text,align:x.target.value}})),children:[(0,a.jsx)("option",{value:"left",children:"left"}),(0,a.jsx)("option",{value:"center",children:"center"}),(0,a.jsx)("option",{value:"right",children:"right"})]})]}),(0,a.jsxs)("label",{children:["Wype\u0142nienie",(0,a.jsx)("input",{type:"color",value:ut.style?.fill??"#edf6fa",onChange:x=>ne(Q,S=>({...S,style:{...S.style,fill:x.target.value}}))})]}),(0,a.jsxs)("label",{children:["Obramowanie",(0,a.jsx)("input",{type:"color",value:ut.style?.stroke??"#2c7794",onChange:x=>ne(Q,S=>({...S,style:{...S.style,stroke:x.target.value}}))})]}),(0,a.jsxs)("label",{children:["Linia",(0,a.jsx)("input",{type:"number",min:"0.5",max:"12",step:"0.25",value:ut.style?.stroke_width??1.5,onChange:x=>ne(Q,S=>({...S,style:{...S.style,stroke_width:Number(x.target.value)}}))})]})]})]}),(0,a.jsxs)("div",{className:"uml-layout-editor-actions",children:[(0,a.jsx)("button",{className:"is-primary",disabled:!ke,onClick:()=>void st(),children:"Zapisz uk\u0142ad"}),(0,a.jsx)("button",{disabled:!ke,onClick:Ye,children:"Cofnij zmiany"}),(0,a.jsx)("button",{className:"is-danger",onClick:()=>void wn(),children:"Reset PlantUML"})]}),(0,a.jsx)("output",{children:G})]})]})]})}function Vg(e){return e.config.phases?.length?(0,a.jsx)(Ug,{...e}):(0,a.jsx)(jg,{...e})}function Bg({asset:e,continuation:t}){let n=e.tile;if(!n)return(0,a.jsx)("img",{src:e.href,alt:e.alt,loading:"lazy"});let r=e.diagram_block_label?.match(/^A[1-8]\b/)?.[0]??e.diagram_title?.match(/^A[1-8]\b/)?.[0]??e.caption.match(/^A[1-8]\b/)?.[0]??"UML",o=(e.diagram_title??e.caption).replace(/^A[1-8]\s*[·—:-]\s*/i,"");return(0,a.jsxs)("div",{className:"uml-react uml-snapshot-react uml-static-tile",children:[(0,a.jsxs)("header",{className:"uml-snapshot-header",children:[(0,a.jsxs)("div",{className:"uml-header-first-line",children:[(0,a.jsxs)("h3",{children:[(0,a.jsx)("span",{children:r})," \u2014 ",o,(0,a.jsxs)("small",{className:"uml-tile-part",children:["cz\u0119\u015B\u0107 ",n.index,"/",n.count," \xB7 r",n.row," c",n.column]})]}),(0,a.jsxs)("div",{className:"uml-header-navigation",children:[(0,a.jsx)(_p,{continuation:t}),(0,a.jsx)("div",{className:"uml-phase-actions","aria-label":"Fazy logicznego diagramu",children:(e.diagram_phase_labels??[]).map(i=>(0,a.jsx)("span",{children:i},i))})]})]}),e.diagram_description&&(0,a.jsx)("p",{className:"uml-header-description",children:e.diagram_description})]}),(0,a.jsx)("div",{className:"uml-snapshot-layout",children:(0,a.jsx)("div",{className:"uml-canvas uml-step-canvas",children:(0,a.jsx)("div",{className:"uml-svg-host is-tiled is-static",style:hs(n),children:(0,a.jsx)("div",{className:"uml-static-crop",style:{width:`${n.width}px`,height:`${n.height}px`},children:(0,a.jsx)("img",{src:e.href,alt:e.alt,style:{width:`${n.full_width}px`,height:`${n.full_height}px`,transform:`translate(${-(n.x-n.full_x)}px, ${-(n.y-n.full_y)}px)`}})})})})})]})}function Hg({asset:e,number:t,progress:n,onSetStatus:r,continuation:o}){let i=e.interactive?.kind,l=!!i;return(0,a.jsxs)("figure",{className:`card-asset asset-${e.kind} ${l?"asset-interactive":""}`,id:e.label.replace(":","-"),children:[i==="uml-sequence"||i==="uml-class"?(0,a.jsx)(Vg,{config:e.interactive,asset:e,progress:n,onSetStatus:r,continuation:o}):i==="allocator-memory-flow"?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(Dg,{config:e.interactive,title:e.caption}),(0,a.jsx)("img",{className:"asset-static-fallback",src:e.href,alt:e.alt})]}):e.tile?(0,a.jsx)(Bg,{asset:e,continuation:o}):(0,a.jsx)("a",{href:e.href,target:"_blank",rel:"noopener",children:(0,a.jsx)("img",{src:e.href,alt:e.alt,loading:"lazy",style:{width:`${e.width*100}%`}})}),e.source_href&&(0,a.jsx)("a",{className:"asset-source-link",href:e.source_href,target:"_blank",rel:"noopener",children:"\u0179r\xF3d\u0142o PlantUML"}),(0,a.jsxs)("figcaption",{children:["Rys. ",e.figure_number??t,". ",e.caption]})]})}function Kg({steps:e,progress:t,onCycle:n}){if(!e.length)return null;let r={pending:"\u25CB niezatwierdzony",approved:"\u25CF zatwierdzony"};return(0,a.jsx)("div",{className:"step-map",children:e.map(o=>{let i=t?.items?.[o.id]?.status??"pending";return(0,a.jsxs)("div",{className:`step-row ${i==="approved"?"lesson-progress-completed":""}`,children:[(0,a.jsx)("button",{className:"lesson-progress-control","data-status":i,onClick:()=>n(o.id,i),disabled:!t,children:r[i]}),(0,a.jsx)("span",{className:"step-title",children:o.title})]},o.id)})})}function Wg({section:e,progress:t,onCycle:n,onSetStatus:r,figureOffset:o}){let i=vg(e);return(0,a.jsxs)(ys,{header:e.header_html,left:e.left_margin_html,right:e.right_margin_html,className:`section-sheet${e.assets.length?" section-sheet--asset":""} sheet--${e.page_orientation||"portrait"}`,children:[(0,a.jsx)("div",{id:e.id,className:"section-anchor"}),e.show_heading&&(0,a.jsxs)("h2",{className:"section-heading",children:[(0,a.jsx)("span",{className:"section-index",children:e.index}),(0,a.jsx)("span",{className:"section-title",children:e.title})]}),(0,a.jsx)(Kg,{steps:e.steps,progress:t,onCycle:n}),e.content_html&&(0,a.jsx)(Yt,{html:e.content_html}),(0,a.jsx)("div",{className:"tasks",children:e.tasks.map(l=>(0,a.jsx)(Fg,{task:l},l.ref))}),e.assets.map((l,s)=>(0,a.jsx)(Hg,{asset:l,number:o+s+1,progress:t,onSetStatus:r,continuation:i},l.label)),e.tasks.map(l=>l.conclusion_html&&(0,a.jsxs)("aside",{className:"task-conclusion",children:[(0,a.jsx)("strong",{children:"WNIOSEK"}),(0,a.jsx)(Yt,{html:l.conclusion_html})]},`${l.ref}-conclusion`))]})}function Gg({progress:e,error:t}){if(!e?.summary&&!t)return null;let n=e?.summary.counts;return(0,a.jsxs)("section",{className:"lesson-progress-topbar","aria-label":"Przebieg zaj\u0119\u0107",children:[(0,a.jsx)("strong",{children:"PRZEBIEG"}),n&&(0,a.jsxs)("output",{title:"Zatwierdzone kroki",children:[n.approved,"/",e.summary.total]}),t&&(0,a.jsx)("span",{className:"lesson-progress-error",title:t,children:"!"}),(0,a.jsx)("a",{href:"/api/report/teams.md",target:"_blank",rel:"noopener",title:"Otw\xF3rz raport do Teams",children:"Teams"}),(0,a.jsx)("a",{href:"/api/report/lesson.html",target:"_blank",rel:"noopener",title:"Otw\xF3rz \u015Blad lekcji ze zrzutami",children:"\u015Alad"})]})}var In=[{id:"u01",name:"Alicja Nowak",laptop:3,connection:"online",sync:"follow",position:"A5\xB708"},{id:"u02",name:"Bartosz Kowalski",laptop:7,connection:"online",sync:"follow",position:"A5\xB708"},{id:"u03",name:"Celina Wi\u015Bniewska",laptop:11,connection:"away",sync:"paused",position:"A5\xB705"},{id:"u04",name:"Dawid W\xF3jcik",laptop:14,connection:"offline",sync:"follow",position:"\u2014"},{id:"u05",name:"Emilia Kami\u0144ska",laptop:18,connection:"online",sync:"local",position:"A3\xB702"},{id:"u06",name:"Filip Lewandowski",laptop:22,connection:"error",sync:"follow",position:"A5\xB706"},{id:"u07",name:"Gabriela Zieli\u0144ska",laptop:24,connection:"online",sync:"follow",position:"A5\xB708"}];function Yg(e){let t=new Map,n=(r,o)=>{let i=r.trim()||"task",l=t.get(i);return l||(l={id:i,label:o.trim()||i.toUpperCase(),blocks:[],exercises:[]},t.set(i,l)),l};for(let r of e.sections){for(let o of r.assets){let i=o.interactive;if(!i?.task||!i.block)continue;let l=n(i.task.id,i.task.label),s=`diagram:${i.block.id}`,u=l.blocks.find(d=>d.id===s);u||(u={id:s,label:i.block.label,kind:"diagram",phases:[],steps:[]},l.blocks.push(u));for(let d of i.phases??[]){let m=u.phases.find(y=>y.id===d.id);m||(m={...d,steps:[]},u.phases.push(m));for(let y of d.steps)m.steps.some(g=>g.id===y.id)||m.steps.push(y)}}for(let o of r.tasks){let i=n(o.ref,o.title);i.label=o.title||i.label;for(let l of o.flow){if(l.kind==="exercise"){i.exercises.some(u=>u.id===l.id)||i.exercises.push(l);continue}let s=`flow:${l.id}`;i.blocks.some(u=>u.id===s)||i.blocks.push({id:s,label:l.title,kind:"flow",phases:[],steps:l.steps.map((u,d)=>({id:u.id,number:d+1,label:u.title,description:u.title,mode:"RUN"}))})}}}return[...t.values()]}function hp({side:e,panels:t,activeId:n,pinnedId:r,onActiveChange:o,onPinnedChange:i}){let l=(0,N.useRef)(0),s=t.find(f=>f.id===n)??null,u=(0,N.useCallback)(()=>{window.clearTimeout(l.current)},[]),d=(0,N.useCallback)(()=>{u(),!r&&(l.current=window.setTimeout(()=>o(null),150))},[u,o,r]),m=(0,N.useCallback)(f=>{u(),r||o(f)},[u,o,r]),y=(0,N.useCallback)(f=>{if(u(),r===f){i(null),o(null);return}i(f),o(f)},[u,o,i,r]),g=(0,N.useCallback)(()=>{u(),i(null),o(null)},[u,o,i]);return(0,N.useEffect)(()=>()=>window.clearTimeout(l.current),[]),t.length?(0,a.jsxs)("div",{className:`side-panel-dock side-panel-dock--${e}`,"data-side":e,children:[(0,a.jsx)("nav",{className:"side-panel-rail","aria-label":`Panele ${e==="left"?"lewe":"prawe"}`,children:t.map(f=>{let E=n===f.id,b=r===f.id;return(0,a.jsx)("button",{type:"button",className:`side-panel-trigger${E?" is-open":""}${b?" is-pinned":""}`,style:{"--side-panel-accent":f.accent},"aria-controls":`side-panel-${e}-${f.id}`,"aria-expanded":E,"aria-pressed":b,"aria-label":`${f.title}: ${b?"odpnij":"przypnij"} panel`,title:`${f.title} \xB7 ${b?"Fixed":"Auto"}`,onMouseEnter:()=>m(f.id),onMouseLeave:d,onFocus:()=>m(f.id),onClick:()=>y(f.id),children:(0,a.jsx)("span",{children:f.railLabel})},f.id)})}),(0,a.jsx)("aside",{id:s?`side-panel-${e}-${s.id}`:void 0,className:`side-panel${s?" is-open":""}`,"aria-hidden":!s,"aria-label":s?.title,style:s?{"--side-panel-accent":s.accent}:void 0,onMouseEnter:u,onMouseLeave:d,onFocusCapture:u,children:s&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("header",{className:"side-panel-header",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("small",{children:e==="left"?"LEWY PANEL":"PRAWY PANEL"}),(0,a.jsx)("strong",{children:s.title})]}),(0,a.jsxs)("div",{className:"side-panel-actions",children:[(0,a.jsx)("button",{type:"button",className:r===s.id?"is-pinned":"",onClick:()=>y(s.id),title:r===s.id?"Tryb Fixed \u2014 kliknij, aby przej\u015B\u0107 do Auto":"Tryb Auto \u2014 kliknij, aby przypi\u0105\u0107",children:r===s.id?"Fixed":"Auto"}),(0,a.jsx)("button",{type:"button",onClick:g,"aria-label":`Zamknij ${s.title}`,children:"\xD7"})]})]}),(0,a.jsx)("div",{className:"side-panel-body",children:s.content})]})})]}):null}function fo({id:e,depth:t,kind:n,title:r,label:o,refValue:i,stateValue:l,stateKind:s,hasChildren:u=!1,expanded:d=!1,onToggle:m,href:y,current:g=!1,unavailable:f=!1,onNavigate:E}){let b=y?(0,a.jsx)("a",{className:"card-library-tree-link",href:y,onClick:E,"aria-current":g?"page":void 0,title:g?"Poka\u017C bie\u017C\u0105c\u0105 kart\u0119":`Otw\xF3rz: ${r}`,children:o}):(0,a.jsx)("span",{className:"card-library-tree-label",title:r,children:o});return(0,a.jsxs)("div",{className:`card-library-treegrid-row is-${n}${g?" is-current":""}${f?" is-unavailable":""}`,role:"row","aria-level":t+1,"aria-expanded":u?d:void 0,"aria-disabled":f||void 0,"data-node-id":e,style:{"--card-library-depth":t},children:[(0,a.jsxs)("span",{className:"card-library-tree-title",role:"gridcell",children:[u?(0,a.jsx)("button",{className:"card-library-tree-expander",type:"button",onClick:m,"aria-label":`${d?"Zwi\u0144":"Rozwi\u0144"}: ${r}`,children:d?"\u25BE":"\u25B8"}):(0,a.jsx)("span",{className:"card-library-tree-expander is-empty","aria-hidden":"true"}),b]}),(0,a.jsx)("span",{role:"gridcell",children:i}),(0,a.jsx)("span",{role:"gridcell",children:(0,a.jsx)("b",{className:"card-library-tree-state","data-state":s,children:l})})]})}function Qg({library:e,onNavigate:t}){if(!e)return null;let n=e.subjects.reduce((d,m)=>d+m.levels.reduce((y,g)=>y+g.series.length,0),0),r=e.subjects.reduce((d,m)=>d+m.levels.reduce((y,g)=>y+g.series.reduce((f,E)=>f+E.cards.filter(b=>b.available).length,0),0),0),o=e.subjects.reduce((d,m)=>d+m.levels.reduce((y,g)=>y+g.series.reduce((f,E)=>f+E.cards.length,0),0),0),[i,l]=(0,N.useState)(()=>{let d=new Set;return e.subjects.forEach(m=>{let y=`subject:${m.id}`;m.current&&d.add(y),m.levels.forEach(g=>{let f=`${y}:level:${g.id}`;g.current&&d.add(f),g.series.forEach(E=>{let b=`${f}:series:${E.id}`;E.current&&d.add(b),E.cards.forEach(_=>{_.current&&(_.tasks?.length??0)>0&&d.add(`${b}:card:${_.id}`)})})})}),d}),s=d=>i.has(d),u=d=>{l(m=>{let y=new Set(m);return y.has(d)?y.delete(d):y.add(d),y})};return(0,a.jsxs)("div",{className:"card-library-panel",children:[(0,a.jsxs)("div",{className:"card-library-treegrid",role:"treegrid","aria-label":"Serie, karty i taski","aria-colcount":3,children:[(0,a.jsxs)("div",{className:"card-library-treegrid-row card-library-treegrid-head",role:"row",children:[(0,a.jsx)("span",{role:"columnheader",children:"DRZEWO"}),(0,a.jsx)("span",{role:"columnheader",children:"REF"}),(0,a.jsx)("span",{role:"columnheader",children:"STATUS"})]}),e.subjects.map(d=>{let m=`subject:${d.id}`;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(fo,{id:m,depth:0,kind:"subject",title:d.title,label:(0,a.jsx)("strong",{children:d.title}),refValue:"PRZEDMIOT",stateValue:`${d.levels.length} POZ.`,hasChildren:d.levels.length>0,expanded:s(m),onToggle:()=>u(m)}),s(m)&&d.levels.map(y=>{let g=`${m}:level:${y.id}`;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(fo,{id:g,depth:1,kind:"level",title:y.title,label:(0,a.jsx)("strong",{children:y.title}),refValue:"ROK",stateValue:`${y.series.length} SERII`,hasChildren:y.series.length>0,expanded:s(g),onToggle:()=>u(g)}),s(g)&&y.series.map(f=>{let E=`${g}:series:${f.id}`;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(fo,{id:E,depth:2,kind:"series",title:f.title,label:(0,a.jsx)("strong",{children:f.title}),refValue:f.role==="reference"?"REF.":"SERIA",stateValue:`${f.cards.length} KART`,hasChildren:f.cards.length>0,expanded:s(E),onToggle:()=>u(E)}),s(E)&&f.cards.map(b=>{let _=`${E}:card:${b.id}`,p=b.tasks??[],c=b.current||b.available,h=b.current?"current":b.available?"online":"plan";return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(fo,{id:_,depth:3,kind:"card",title:`${b.id} \xB7 ${b.title}`,label:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("strong",{children:b.id}),(0,a.jsx)("span",{children:b.title})]}),refValue:b.version||"\u2014",stateValue:b.current?"BIE\u017B\u0104CA":b.available?"ONLINE":"PLAN",stateKind:h,hasChildren:p.length>0,expanded:s(_),onToggle:()=>u(_),href:c?b.current?"#":b.href:void 0,current:b.current,unavailable:!c,onNavigate:t}),s(_)&&p.map(k=>{let C=b.current?`#${k.id}`:`${b.href}#${k.id}`;return(0,a.jsx)(fo,{id:`${_}:task:${k.id}`,depth:4,kind:"task",title:`${k.id.toUpperCase()} \xB7 ${k.title}`,label:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("strong",{children:k.id.toUpperCase()}),(0,a.jsx)("span",{children:k.title})]}),refValue:"TASK",stateValue:c?"GOTOWY":"PLAN",stateKind:c?"online":"plan",href:c?C:void 0,unavailable:!c,onNavigate:t},`${_}:task:${k.id}`)})]},_)})]},E)})]},g)})]},m)})]}),(0,a.jsxs)("footer",{className:"card-library-footer",children:[(0,a.jsx)("span",{children:e.workspace||"STEM"}),(0,a.jsxs)("span",{children:[n," serii"]}),(0,a.jsxs)("span",{children:[(0,a.jsx)("i",{className:"is-online"})," ",r,"/",o," online"]}),(0,a.jsx)("kbd",{children:"Esc"})]})]})}function qg({toc:e,onNavigate:t}){return(0,a.jsxs)("nav",{className:"side-toc","aria-label":"Spis tre\u015Bci karty",children:[(0,a.jsxs)("header",{children:[(0,a.jsx)("small",{children:"KARTA PRACY"}),(0,a.jsx)("h2",{children:"Spis tre\u015Bci"})]}),(0,a.jsx)("ol",{children:e.map((n,r)=>(0,a.jsx)("li",{children:(0,a.jsxs)("a",{href:`#${n.id}`,onClick:t,children:[(0,a.jsx)("span",{children:String(r+1).padStart(2,"0")}),(0,a.jsx)("strong",{children:n.label})]})},n.id))})]})}function Xg({progress:e,error:t}){let n=e?.summary?.counts;return(0,a.jsxs)("section",{className:"side-progress","aria-label":"Przebieg zaj\u0119\u0107 i raport",children:[(0,a.jsxs)("header",{children:[(0,a.jsx)("small",{children:"DOWODY I RAPORT"}),(0,a.jsx)("h2",{children:"Przebieg zaj\u0119\u0107"})]}),(0,a.jsxs)("div",{className:"side-progress-summary",children:[(0,a.jsx)("span",{children:"Zatwierdzone kroki"}),(0,a.jsx)("strong",{children:n?`${n.approved}/${e.summary.total}`:"\u2014"})]}),t&&(0,a.jsx)("p",{className:"side-progress-error",children:t}),(0,a.jsxs)("div",{className:"side-progress-links",children:[(0,a.jsx)("a",{href:"/api/report/teams.md",target:"_blank",rel:"noopener",children:"Raport do Teams"}),(0,a.jsx)("a",{href:"/api/report/lesson.html",target:"_blank",rel:"noopener",children:"\u015Alad lekcji ze zrzutami"})]})]})}var Zg={online:"ONLINE",away:"ZAJ\u0118TY",offline:"OFFLINE",error:"B\u0141\u0104D"},Jg={follow:"SYNC",paused:"PAUZA",local:"LOKAL."},yp={present:"BY\u0141",missed:"NIE BY\u0141",pending:"OCZEK."},eh={committed:"COMMIT",working:"PRACA",missing:"BRAK"};function zp(e){let t=2166136261;for(let n=0;n>>0}function vp(e,t,n){let r=zp(`${e.id}:step:${t}`),o=r%8,i=o===0?"missed":o===1?"pending":"present",l=8+n*4+r%3,s=10+Math.floor(l/60),u=l%60,d=(e.laptop*7+r)%60;return{state:i,timestamp:i==="present"?`${String(s).padStart(2,"0")}:${String(u).padStart(2,"0")}:${String(d).padStart(2,"0")}`:"\u2014"}}function xp(e,t){let n=zp(`${e.id}:exercise:${t}`),r=n%6,o=r===0?"missing":r===1?"working":"committed";return{state:o,commit:o==="committed"?n.toString(16).padStart(8,"0").slice(0,7):"\u2014"}}function Gt({id:e,depth:t,title:n,kind:r,refValue:o,session:i,evidence:l,state:s,hasChildren:u=!1,expanded:d=!1,onToggle:m}){return(0,a.jsxs)("div",{className:`classroom-treegrid-row classroom-node-row is-${r}`,role:"row","aria-level":t+1,"aria-expanded":u?d:void 0,"data-node-id":e,style:{"--classroom-depth":t},children:[(0,a.jsxs)("span",{className:"classroom-node-title",role:"gridcell",title:n,children:[u?(0,a.jsx)("button",{className:"classroom-expander",type:"button",onClick:m,"aria-label":`${d?"Zwi\u0144":"Rozwi\u0144"}: ${n}`,children:d?"\u25BE":"\u25B8"}):(0,a.jsx)("span",{className:"classroom-expander is-empty","aria-hidden":"true"}),(0,a.jsx)("strong",{children:n})]}),(0,a.jsx)("span",{role:"gridcell",children:o}),(0,a.jsx)("span",{role:"gridcell",children:i}),(0,a.jsx)("span",{role:"gridcell",children:l}),(0,a.jsx)("span",{role:"gridcell",children:s})]})}function th({model:e}){let t=Yg(e),n=In[0]?.id,r=t[0]?.id,[o,i]=(0,N.useState)(()=>new Set(["class",...n?[`student:${n}`]:[],...n&&r?[`student:${n}:task:${r}`]:[]])),l=m=>o.has(m),s=m=>{i(y=>{let g=new Set(y);return g.has(m)?g.delete(m):g.add(m),g})},u=In.filter(m=>m.connection==="online"||m.connection==="away").length,d=In.filter(m=>m.sync==="follow").length;return(0,a.jsxs)("section",{className:"classroom-panel","aria-label":"Klasa i stanowiska uczni\xF3w",children:[(0,a.jsxs)("div",{className:"classroom-treegrid",role:"treegrid","aria-label":"Uczniowie, struktura karty, obecno\u015B\u0107 i commity","aria-colcount":5,children:[(0,a.jsxs)("div",{className:"classroom-treegrid-row classroom-treegrid-head",role:"row",children:[(0,a.jsx)("span",{role:"columnheader",children:"DRZEWO"}),(0,a.jsx)("span",{role:"columnheader",children:"REF"}),(0,a.jsx)("span",{role:"columnheader",children:"SESJA"}),(0,a.jsx)("span",{role:"columnheader",children:"DOW\xD3D"}),(0,a.jsx)("span",{role:"columnheader",children:"STAN"})]}),(0,a.jsx)(Gt,{id:"class",depth:0,kind:"class",title:"2TP \xB7 grupa A",refValue:`${In.length} ucz.`,session:`${u}/${In.length}`,evidence:`${d}/${In.length} SYNC`,state:`${t.length} TASK`,hasChildren:!0,expanded:l("class"),onToggle:()=>s("class")}),l("class")&&In.map(m=>{let y=`student:${m.id}`;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(Gt,{id:y,depth:1,kind:"student",title:m.name,refValue:`L${String(m.laptop).padStart(2,"0")}`,session:(0,a.jsx)("b",{className:"classroom-status","data-status":m.connection,children:Zg[m.connection]}),evidence:(0,a.jsx)("b",{className:"classroom-sync","data-sync":m.sync,children:Jg[m.sync]}),state:m.position,hasChildren:t.length>0,expanded:l(y),onToggle:()=>s(y)}),l(y)&&t.map(g=>{let f=`${y}:task:${g.id}`,E=g.exercises.filter(b=>xp(m,b.id).state==="committed").length;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(Gt,{id:f,depth:2,kind:"task",title:g.label,refValue:g.id.toUpperCase(),session:`${g.blocks.length} BLOCK`,evidence:`${E}/${g.exercises.length} COMMIT`,state:"TASK",hasChildren:g.blocks.length+g.exercises.length>0,expanded:l(f),onToggle:()=>s(f)}),l(f)&&g.blocks.map(b=>{let _=`${f}:block:${b.id}`,p=b.phases.length||b.steps.length;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(Gt,{id:_,depth:3,kind:"block",title:b.label,refValue:b.kind==="diagram"?"BLOCK":"TASK BLOCK",session:`${p} ${b.phases.length?"PHASE":"STEP"}`,evidence:"\u2014",state:b.kind==="diagram"?"UML":"FLOW",hasChildren:p>0,expanded:l(_),onToggle:()=>s(_)}),l(_)&&b.phases.map(c=>{let h=`${_}:phase:${c.id}`;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(Gt,{id:h,depth:4,kind:"phase",title:`PHASE \xB7 ${c.label}`,refValue:`${c.steps.length} STEP`,session:"\u2014",evidence:"\u2014",state:"PHASE",hasChildren:c.steps.length>0,expanded:l(h),onToggle:()=>s(h)}),l(h)&&c.steps.map(k=>{let C=vp(m,`${b.id}:${c.id}:${k.id}`,k.number);return(0,a.jsx)(Gt,{id:`${h}:step:${k.id}`,depth:5,kind:"step",title:`STEP ${String(k.number).padStart(2,"0")} \xB7 ${k.label}`,refValue:k.mode??"CODE",session:(0,a.jsx)("b",{className:"classroom-visit","data-visit":C.state,children:yp[C.state]}),evidence:C.timestamp,state:C.state==="present"?"OK":C.state==="missed"?"BRAK":"\u2014"},`${h}:step:${k.id}`)})]},h)}),l(_)&&b.steps.map(c=>{let h=vp(m,`${b.id}:${c.id}`,c.number);return(0,a.jsx)(Gt,{id:`${_}:step:${c.id}`,depth:4,kind:"step",title:`STEP ${String(c.number).padStart(2,"0")} \xB7 ${c.label}`,refValue:c.mode??"RUN",session:(0,a.jsx)("b",{className:"classroom-visit","data-visit":h.state,children:yp[h.state]}),evidence:h.timestamp,state:h.state==="present"?"OK":h.state==="missed"?"BRAK":"\u2014"},`${_}:step:${c.id}`)})]},_)}),l(f)&&g.exercises.length>0&&(()=>{let b=`${f}:exercises`;return(0,a.jsxs)(N.default.Fragment,{children:[(0,a.jsx)(Gt,{id:b,depth:3,kind:"exercises",title:"EXERCISES",refValue:`${g.exercises.length} EX`,session:`${E}/${g.exercises.length}`,evidence:"GIT",state:E===g.exercises.length?"DONE":"TODO",hasChildren:!0,expanded:l(b),onToggle:()=>s(b)}),l(b)&&g.exercises.map(_=>{let p=xp(m,_.id);return(0,a.jsx)(Gt,{id:`${b}:${_.id}`,depth:4,kind:"exercise",title:`EXERCISE \xB7 ${_.title}`,refValue:_.id,session:(0,a.jsx)("b",{className:"classroom-commit","data-commit":p.state,children:eh[p.state]}),evidence:p.commit,state:p.state==="committed"?"DONE":p.state==="working"?"W TOKU":"TODO"},`${b}:${_.id}`)})]},b)})()]},f)})]},m.id)})]}),(0,a.jsxs)("footer",{className:"classroom-legend",children:[(0,a.jsxs)("span",{children:[(0,a.jsx)("b",{children:"BY\u0141"})," obecny przy omawianym STEP"]}),(0,a.jsxs)("span",{children:[(0,a.jsx)("b",{children:"COMMIT"})," rozwi\u0105zanie EXERCISE zapisane w Git"]})]})]})}function nh({open:e,onClose:t}){return e?(0,a.jsx)("div",{className:"shortcut-help-backdrop",role:"presentation",onMouseDown:t,children:(0,a.jsxs)("section",{className:"shortcut-help",role:"dialog","aria-modal":"true","aria-labelledby":"shortcut-help-title",onMouseDown:r=>r.stopPropagation(),children:[(0,a.jsxs)("header",{children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("small",{children:"F12 \xB7 NAWIGACJA DYDAKTYCZNA"}),(0,a.jsx)("h2",{id:"shortcut-help-title",children:"CARD \u2192 TASK \u2192 BLOCK \u2192 PHASE \u2192 STEP \u2192 SNAPSHOT"})]}),(0,a.jsx)("button",{onClick:t,"aria-label":"Zamknij skorowidz",children:"\xD7"})]}),(0,a.jsx)("dl",{children:[["Alt + \u2191 / \u2193","poprzedni / nast\u0119pny TASK"],["Ctrl + \u2191 / \u2193","poprzedni / nast\u0119pny BLOCK"],["Shift + \u2191 / \u2193","poprzednia / nast\u0119pna PHASE"],["Ctrl + Shift + \u2191 / \u2193","poprzedni / nast\u0119pny STEP"],["Alt + Shift + \u2191 / \u2193","poprzedni / nast\u0119pny unikalny SNAPSHOT"],["\u2191 / \u2193","poprzedni / nast\u0119pny element aktywnego poziomu"],["\u2192","zejd\u017A poziom ni\u017Cej"],["\u2190 / Esc","wr\xF3\u0107 poziom wy\u017Cej"],["Enter","wybierz element; przy SYNC ON odtw\xF3rz stan"],["F1","reset aktualnego celu Neovima/kontenera"],["F2","synchronizuj cel z kursorem drzewa UML"],["Ctrl + `","maksymalizuj pane, dopasuj siatk\u0119 i od\u015Bwie\u017C Neovima"],["Ctrl + Enter","zatwierd\u017A lub cofnij zatwierdzenie kroku"],["Alt + 0","wysu\u0144 lub schowaj panel serii i kart"],["Alt + 1","poka\u017C lub ukryj panel Neovima"],["Alt + 2","prze\u0142\u0105cz SYNC OFF / SYNC ON"],["Alt + 3","uzbr\xF3j lub rozbr\xF3j sterowanie Neovimem"],["Alt + 4","wysoki panel 90% / zapisana wysoko\u015B\u0107 normalna"],["Alt + 5","dopasuj ca\u0142y ekran Neovima; wy\u0142\u0105cz r\u0119czny suwak"],["Alt + 6","przypnij lub ukryj model alokatora"],["Alt + 7","po\u0142\u0105cz segmenty UML w szeroki spread / wr\xF3\u0107 do A4"],["Alt + 3, potem najed\u017A","przeka\u017C klawiatur\u0119 i mysz do aktywnej sesji"],["Alt + W","prefiks polece\u0144 okien Neovima ()"],["Alt + strza\u0142ka","przejd\u017A do s\u0105siedniego okna Neovima"],["F12","poka\u017C lub ukryj ten skorowidz"]].map(([r,o])=>(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:(0,a.jsx)("kbd",{children:r})}),(0,a.jsx)("dd",{children:o})]},r))}),(0,a.jsx)("p",{children:"Przy SYNC ON wyb\xF3r stepu odtwarza i weryfikuje przypi\u0119ty stan maszyny. SYNC OFF nie resetuje debuggera. Po najechaniu panel przekazuje do Neovima wy\u0142\u0105cznie kontrolowane zdarzenia klawiatury i myszy, wi\u0119c mo\u017Cna normalnie kontynuowa\u0107 debugowanie."})]})}):null}function rh({model:e}){let t=!!e.has_allocator_model,n=(0,N.useRef)(null),r=(0,N.useRef)(null),o=(0,N.useRef)(`browser-${globalThis.crypto?.randomUUID?.()??Math.random().toString(36).slice(2)}`),i=(0,N.useRef)(0),l=(0,N.useRef)(0),s=(0,N.useRef)(!1),u=(0,N.useRef)(!1),d=(0,N.useRef)(0),m=(0,N.useRef)(0),y=(0,N.useRef)(0),[g,f]=(0,N.useState)(2.18),[E,b]=(0,N.useState)(()=>localStorage.getItem("stem-card-nvim-visible")!=="false"),[_,p]=(0,N.useState)(()=>localStorage.getItem("stem-card-nvim-sync-mode")==="true"),[c,h]=(0,N.useState)(()=>localStorage.getItem("stem-card-nvim-sync-mode")==="true"&&localStorage.getItem("stem-card-nvim-control-mode")==="true"),[k,C]=(0,N.useState)(!1),[P,T]=(0,N.useState)(!1),[R,j]=(0,N.useState)(()=>t&&localStorage.getItem("stem-card-allocator-visible")!=="false"),[I,ke]=(0,N.useState)(()=>{let v=localStorage.getItem("stem-card-diagram-spread");return v===null?!!e.has_spread:v==="true"}),[re,G]=(0,N.useState)({state:"hidden",syncMode:!1,syncReady:!1,controlMode:!1,controlEnabled:!1}),[U,Le]=(0,N.useState)(null),[Ne,Q]=(0,N.useState)(""),[et,Ge]=(0,N.useState)(null),[je,me]=(0,N.useState)(null),[Dn,xe]=(0,N.useState)(null),[bn,se]=(0,N.useState)(null),[A,F]=(0,N.useState)(!1),[B,te]=(0,N.useState)(""),[at,zt]=(0,N.useState)(()=>window.innerWidth),Ee=et==="library",ne=!!(et||Dn),st=(0,N.useCallback)(v=>{if(v){Ge("library"),me("library");return}Ge(w=>w==="library"?null:w),me(w=>w==="library"?null:w)},[]),Ye=(0,N.useCallback)(v=>{window.clearTimeout(y.current),te(v),y.current=window.setTimeout(()=>te(""),4200)},[]),wn=(0,N.useCallback)(async v=>{Ye(`${v} \xB7 wykonywanie\u2026`);try{let L=await fetch(v==="F1"?"/api/nvim/reset":"/api/navigation/sync",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({actor:o.current})}),H=await L.json().catch(()=>({}));if(!L.ok)throw new Error(H.message??H.error??`HTTP ${L.status}`);v==="F2"&&H.current?(l.current=Math.max(l.current,Number(H.current.revision??0)),window.dispatchEvent(new CustomEvent("stem:navigation-command",{detail:H.current})),Ye(`F2 \xB7 ${String(H.current.step.number).padStart(2,"0")} ${H.current.step.label} \xB7 READY`)):Ye("F1 \xB7 reset przyj\u0119ty"),window.setTimeout(()=>window.dispatchEvent(new Event("stem:nvim-refresh")),120)}catch(w){Ye(`${v} \xB7 ${w instanceof Error?w.message:String(w)}`)}},[Ye]),ie=(0,N.useCallback)(async()=>{Ye("Ctrl+` \xB7 przeliczanie widoku\u2026");try{let v=await fetch("/api/nvim/redraw",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({actor:o.current})}),w=await v.json().catch(()=>({}));if(!v.ok)throw new Error(w.message??w.error??`HTTP ${v.status}`);let L=w.external_ui?.grid,H=L?` \xB7 ${L.width}\xD7${L.height}`:"";Ye(`Ctrl+\` \xB7 widok od\u015Bwie\u017Cony${H}`),window.dispatchEvent(new Event("stem:nvim-refresh"))}catch(v){Ye(`Ctrl+\` \xB7 ${v instanceof Error?v.message:String(v)}`)}},[Ye]),q=(0,N.useCallback)(async v=>{try{let w=await fetch("/api/viewer/state",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({actor:o.current,viewer:v})});if(!w.ok)return;let L=await w.json();i.current=Math.max(i.current,Number(L.viewer?.revision??0))}catch{}},[]),bt=v=>{let w=Math.max(.25,Math.min(3,v));f(w),q({scale:w})};(0,N.useEffect)(()=>{document.documentElement.style.setProperty("--viewer-canvas-scale",g.toFixed(3))},[g]),(0,N.useEffect)(()=>{if(!I)return;let v=r.current;if(!v)return;let w=0,L=()=>{window.cancelAnimationFrame(w),w=window.requestAnimationFrame(()=>{v.scrollLeft=Math.max(0,(v.scrollWidth-v.clientWidth)/2)})},H=window.requestAnimationFrame(L);return window.addEventListener("resize",L),()=>{window.cancelAnimationFrame(H),window.cancelAnimationFrame(w),window.removeEventListener("resize",L)}},[I,g,at]),(0,N.useEffect)(()=>{let v=()=>zt(window.innerWidth);return window.addEventListener("resize",v),()=>window.removeEventListener("resize",v)},[]),(0,N.useEffect)(()=>{document.documentElement.dataset.nvimSyncMode=_?"on":"off"},[_]),(0,N.useEffect)(()=>{document.documentElement.dataset.cardClientId=o.current},[]);let fe=v=>{b(v),v||(C(!1),T(!1)),localStorage.setItem("stem-card-nvim-visible",String(v)),q({nvim:{visible:v,...v?{}:{expanded:!1,fit:!1}}})},Qt=v=>{let w=v&&_;h(w),localStorage.setItem("stem-card-nvim-control-mode",String(w)),q({nvim:{control:w}})},jn=v=>{p(v),localStorage.setItem("stem-card-nvim-sync-mode",String(v)),v||(h(!1),localStorage.setItem("stem-card-nvim-control-mode","false")),q({nvim:{sync:v,control:v?c:!1}})},qt=v=>{v&&fe(!0),v&&T(!1),C(v),q({nvim:{visible:v||E,expanded:v,fit:!1}})},ho=v=>{v&&(fe(!0),C(!1)),T(v),q({nvim:{visible:v||E,fit:v,expanded:!1}})},yo=v=>{let w=t&&v;j(w),localStorage.setItem("stem-card-allocator-visible",String(w)),q({allocator:{visible:w}})},Un=v=>{let w=!!(e.has_spread&&v);ke(w),localStorage.setItem("stem-card-diagram-spread",String(w))};(0,N.useEffect)(()=>{let v=0,w=window.requestAnimationFrame(()=>{v=window.requestAnimationFrame(()=>{window.dispatchEvent(new Event("stem:nvim-refresh"))})});return()=>{window.cancelAnimationFrame(w),window.cancelAnimationFrame(v)}},[k,P]),(0,N.useEffect)(()=>{fetch("/api/progress").then(v=>v.ok?v.json():Promise.reject(new Error(`HTTP ${v.status}`))).then(v=>Le(v.progress)).catch(v=>Q(`Post\u0119p dzia\u0142a tylko przez serwer karty (${v.message}).`))},[]),(0,N.useEffect)(()=>{let v=!1,w=!1,L={scale:g,viewport:{width:window.innerWidth,height:window.innerHeight},nvim:{visible:E,sync:_,control:c,expanded:k,fit:P},allocator:{visible:R}},H=D=>{let Z=D.nvim.visible&&D.nvim.fit,V=D.nvim.visible&&!Z&&D.nvim.expanded;f(Math.max(.25,Math.min(3,D.scale))),b(D.nvim.visible),p(D.nvim.sync),h(D.nvim.sync&&D.nvim.control),C(V),T(Z);let oe=t&&(D.allocator?.visible??!0);j(oe),localStorage.setItem("stem-card-nvim-visible",String(D.nvim.visible)),localStorage.setItem("stem-card-nvim-sync-mode",String(D.nvim.sync)),localStorage.setItem("stem-card-nvim-control-mode",String(D.nvim.sync&&D.nvim.control)),localStorage.setItem("stem-card-allocator-visible",String(oe));let ct=++m.current;s.current=!0,window.cancelAnimationFrame(d.current),d.current=window.requestAnimationFrame(()=>{if(ct!==m.current)return;let Ue=Gi();Ki(Ue,{left:D.scroll.x,top:D.scroll.y});let ue=Array.from(document.querySelectorAll(".paper .sheet")),Re=ue[Math.max(0,Math.min(ue.length-1,D.scroll.page_index))]?.querySelector(".sheet-content");Re&&Number.isFinite(D.scroll.sheet_scroll_top)&&Ki(Re,{top:D.scroll.sheet_scroll_top??0}),d.current=window.requestAnimationFrame(()=>{ct===m.current&&(s.current=!1,u.current&&(u.current=!1,window.dispatchEvent(new Event("stem:viewer-scroll-settled"))))})})},K=async()=>{try{let D=await fetch("/api/control/state",{cache:"no-store"});if(!D.ok||v)return;let Z=await D.json(),V=Z.viewer;w||(w=!0,Number(V?.revision??0)===0&&q(L)),V&&V.revision>i.current&&(i.current=V.revision,V.actor!==o.current&&H(V));let oe=Z.navigation;oe&&oe.revision>l.current&&(l.current=oe.revision,oe.actor!==o.current&&(s.current&&(u.current=!0),window.dispatchEvent(new CustomEvent("stem:navigation-command",{detail:oe}))))}catch{}};K();let X=window.setInterval(K,300);return()=>{v=!0,window.clearInterval(X),m.current+=1,window.cancelAnimationFrame(d.current),s.current=!1,u.current=!1}},[]),(0,N.useEffect)(()=>{q({nvim:{connection:re.state,screen_cursor:re.screenCursor,grid:re.grid}})},[re.grid?.columns,re.grid?.rows,re.screenCursor?.column,re.screenCursor?.row,re.state,q]),(0,N.useEffect)(()=>{let v=0,w=null,L=Array.from(document.querySelectorAll(".paper .sheet")),H=L.map(X=>X.querySelector(".sheet-content")).filter(X=>!!X),K=X=>{if(s.current)return;let D=X?.currentTarget;D instanceof HTMLElement&&D.classList.contains("sheet-content")&&(w=D),window.clearTimeout(v),v=window.setTimeout(()=>{let Z=w?.closest(".sheet"),V=Z?L.indexOf(Z):-1,oe=V>=0?V:L.reduce((Ue,ue,J)=>{let Re=ue.getBoundingClientRect(),Ve=Math.abs((Re.top+Re.bottom)/2-window.innerHeight/2);return Ve=0?w:L[oe]?.querySelector(".sheet-content")??null;q({scroll:{x:window.scrollX,y:window.scrollY,page_index:oe,sheet_scroll_top:ct?.scrollTop??0},viewport:{width:window.innerWidth,height:window.innerHeight}}),w=null},120)};return window.addEventListener("scroll",K,{passive:!0}),window.addEventListener("resize",K),window.addEventListener("stem:viewer-scroll-settled",K),H.forEach(X=>X.addEventListener("scroll",K,{passive:!0})),K(),()=>{window.clearTimeout(v),window.removeEventListener("scroll",K),window.removeEventListener("resize",K),window.removeEventListener("stem:viewer-scroll-settled",K),H.forEach(X=>X.removeEventListener("scroll",K))}},[q]),(0,N.useEffect)(()=>{let v=w=>{if(w.repeat)return;let L=w.altKey&&!w.ctrlKey&&!w.metaKey?w.code:"";if(L==="Digit0"&&e.library){w.preventDefault(),w.stopImmediatePropagation(),F(!1),st(!Ee);return}if(L==="Digit1"){w.preventDefault(),w.stopImmediatePropagation(),fe(!E);return}if(L==="Digit2"){w.preventDefault(),w.stopImmediatePropagation(),jn(!_);return}if(L==="Digit3"){if(w.preventDefault(),w.stopImmediatePropagation(),!_)return;fe(!0),Qt(!c);return}if(L==="Digit4"){w.preventDefault(),w.stopImmediatePropagation(),qt(!k);return}if(L==="Digit5"){w.preventDefault(),w.stopImmediatePropagation(),ho(!P);return}if(L==="Digit6"&&t){w.preventDefault(),w.stopImmediatePropagation(),yo(!R);return}if(L==="Digit7"&&e.has_spread){w.preventDefault(),w.stopImmediatePropagation(),Un(!I);return}if((w.key==="F1"||w.key==="F2")&&!w.altKey&&!w.ctrlKey&&!w.metaKey&&!w.shiftKey){w.preventDefault(),w.stopImmediatePropagation(),wn(w.key);return}if(w.ctrlKey&&!w.altKey&&!w.metaKey&&!w.shiftKey&&(w.code==="Backquote"||w.key==="`")){w.preventDefault(),w.stopImmediatePropagation(),ie();return}if(w.key==="F12"){w.preventDefault(),w.stopImmediatePropagation(),st(!1),Ge(null),me(null),xe(null),se(null),F(H=>!H);return}if(w.key==="Escape"&&(ne||A)){w.preventDefault(),w.stopImmediatePropagation(),Ge(null),me(null),xe(null),se(null),F(!1);return}};return window.addEventListener("keydown",v,!0),()=>window.removeEventListener("keydown",v,!0)},[R,I,t,Ee,e.has_spread,e.library,c,k,P,_,E,wn,ie,A,ne]),(0,N.useEffect)(()=>{let v=n.current?.querySelector(".topbar");if(!v)return;let w=()=>{document.documentElement.style.setProperty("--side-panel-top",`${Math.ceil(v.getBoundingClientRect().bottom)}px`)};w();let L=new ResizeObserver(w);return L.observe(v),window.addEventListener("resize",w),()=>{L.disconnect(),window.removeEventListener("resize",w),document.documentElement.style.removeProperty("--side-panel-top")}},[]),(0,N.useEffect)(()=>()=>window.clearTimeout(y.current),[]),(0,N.useEffect)(()=>{let v=w=>{!w.altKey||w.ctrlKey||(w.preventDefault(),f(L=>{let H=Math.max(.25,Math.min(3,L*Math.exp(-Math.max(-120,Math.min(120,w.deltaY))*.001)));return q({scale:H}),H}))};return window.addEventListener("wheel",v,{passive:!1}),()=>window.removeEventListener("wheel",v)},[q]);let ut=async(v,w)=>{try{let L=await fetch(`/api/progress/${encodeURIComponent(v)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({status:w})});if(!L.ok)throw new Error(await L.text());Le((await L.json()).progress),Q("")}catch(L){Q(`Nie zapisano post\u0119pu: ${L instanceof Error?L.message:String(L)}`)}},x=(v,w)=>{ut(v,{pending:"approved",approved:"pending"}[w])},S=0,M=e.sections.map(v=>{let w=S;return S+=v.assets.length,{section:v,figureOffset:w}}),O=[];return M.forEach(v=>{let w=v.section.spread_group??"",L=O[O.length-1];if(w&&L?.spreadGroup===w){L.pages.push(v);return}O.push({key:w||v.section.id,spreadGroup:w,spreadLabel:v.section.spread_label??"",spreadColumns:v.section.spread_columns??1,pages:[v]})}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{ref:n,className:`viewer-chrome${k?" is-nvim-expanded":""}${P?" is-nvim-fit":""}`,children:[(0,a.jsx)(bg,{toc:e.toc,libraryAvailable:!!e.library,libraryOpen:Ee,setLibraryOpen:st,scale:g,setScale:bt,nvimVisible:E,setNvimVisible:fe,nvimSyncMode:_,setNvimSyncMode:jn,nvimControlMode:c,setNvimControlMode:Qt,nvimExpanded:k,setNvimExpanded:qt,nvimFit:P,setNvimFit:ho,allocatorVisible:R,setAllocatorVisible:yo,hasAllocatorModel:t,diagramSpread:I,setDiagramSpread:Un,hasDiagramSpread:!!e.has_spread,nvimSummary:re,progress:U,progressError:Ne}),e.viewpoints?.length?(0,a.jsx)(xg,{viewpoints:e.viewpoints}):null,(0,a.jsx)(wg,{visible:t&&R,model:e}),(0,a.jsx)(Mg,{visible:E,syncMode:_,controlMode:c,expanded:k,fit:P,scale:g,onSummaryChange:G}),B&&(0,a.jsx)("output",{className:"viewer-action-toast",children:B})]}),(0,a.jsxs)("main",{ref:r,className:`paper${I?" is-diagram-spread":""}`,children:[(0,a.jsx)(Og,{front:e.front}),O.map(v=>{let w=Array.from({length:Math.ceil(v.pages.length/v.spreadColumns)},(D,Z)=>v.pages.slice(Z*v.spreadColumns,(Z+1)*v.spreadColumns)),H=Math.max(1,...w.map(D=>D.reduce((Z,V)=>Z+(V.section.page_orientation==="landscape"?297:210),Math.max(0,D.length-1)*2)))*(96/25.4)*g,K=Math.min(1,Math.max(.25,(at-24)/H)),X=v.pages.map(({section:D,figureOffset:Z})=>(0,a.jsx)(Wg,{section:D,progress:U,onCycle:x,onSetStatus:ut,figureOffset:Z},D.id));return v.spreadGroup?(0,a.jsx)("section",{className:"sheet-spread","data-spread-group":v.spreadGroup,"aria-label":v.spreadLabel||"Wielostronicowy diagram UML",style:{"--spread-columns":v.spreadColumns,"--spread-fit-scale":K},children:X},v.key):X[0]}),e.dictionary&&(0,a.jsxs)(ys,{header:e.dictionary.header_html,className:"dictionary-sheet",children:[(0,a.jsx)("h2",{children:"S\u0142ownik WE/EN/EK/KW"}),(0,a.jsx)(Yt,{html:e.dictionary.content_html})]})]}),(0,a.jsx)(hp,{side:"left",panels:[...e.library?[{id:"library",railLabel:"K",title:"Serie i karty",accent:"#167ca4",content:(0,a.jsx)(Qg,{library:e.library,onNavigate:()=>st(!1)})}]:[],{id:"contents",railLabel:"S",title:"Spis tre\u015Bci",accent:"#16805d",content:(0,a.jsx)(qg,{toc:e.toc,onNavigate:()=>{Ge(null),me(null)}})}],activeId:et,pinnedId:je,onActiveChange:Ge,onPinnedChange:me}),(0,a.jsx)(hp,{side:"right",panels:[{id:"classroom",railLabel:"U",title:"Klasa i stanowiska",accent:"#267357",content:(0,a.jsx)(th,{model:e})},{id:"progress",railLabel:"R",title:"Przebieg i raport",accent:"#b45b26",content:(0,a.jsx)(Xg,{progress:U,error:Ne})}],activeId:Dn,pinnedId:bn,onActiveChange:xe,onPinnedChange:se}),(0,a.jsx)(nh,{open:A,onClose:()=>F(!1)})]})}async function oh(){let e=(0,bp.createRoot)(document.getElementById("root"));try{let t=await fetch("./card-data.json",{cache:"no-store"});if(!t.ok)throw new Error(`Nie mo\u017Cna wczyta\u0107 card-data.json: ${t.status}`);let n=await t.json();e.render((0,a.jsx)(rh,{model:n}))}catch(t){e.render((0,a.jsxs)("main",{className:"app-load-error",children:[(0,a.jsx)("h1",{children:"Nie uda\u0142o si\u0119 uruchomi\u0107 karty"}),(0,a.jsx)("pre",{children:t instanceof Error?t.message:String(t)})]}))}}oh(); +/*! Bundled license information: + +react/cjs/react.production.min.js: + (** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +scheduler/cjs/scheduler.production.min.js: + (** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom.production.min.js: + (** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react-jsx-runtime.production.min.js: + (** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/web/card-data.json b/web/card-data.json new file mode 100644 index 0000000..fa5fea8 --- /dev/null +++ b/web/card-data.json @@ -0,0 +1,2821 @@ +{ + "schema": "esc-card-react-view.v1", + "card": { + "id": "mpabi-inf-c-09-smalloc-sbrk-libc", + "series": "c", + "series_title": "C · Freestanding RV32I and K&R", + "number": "09", + "count": "13", + "slug": "smalloc-sbrk-libc", + "title": "smalloc, sbrk i minimalne libc", + "topic": "K&R 5.4 i 7.8: granica libc, bounded sbrk, prosty smalloc oraz malloc/free picolibc", + "project": "Freestanding C na RV32I", + "subject": "Informatyka", + "level": "Rok 1 · C09 · RV32I/Hazard3", + "revision_date": "2026-07-20T00:00:00+02:00", + "status": "Gotowa", + "version": "v00.01", + "uuid": "47826ae5-6370-5ac2-bd91-9acb89116d40", + "author": "M. Pabiszczak", + "year": "2026" + }, + "library": { + "schema": "stem-card-library.v2", + "workspace": "edu", + "subjects": [ + { + "id": "inf", + "title": "INF · Informatyka", + "current": true, + "levels": [ + { + "id": "year-1", + "title": "Rok 1", + "current": true, + "series": [ + { + "id": "console-bash", + "title": "Bash · Console Tools", + "current": false, + "catalog_only": true, + "role": "", + "status": "", + "cards": [ + { + "id": "L01", + "title": "BusyBox — the Swiss Army Knife", + "repo": "lab-console-busybox", + "href": "", + "available": false, + "current": false, + "number": "01", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L02", + "title": "Tmux — sessions, windows and panes", + "repo": "lab-console-tmux", + "href": "", + "available": false, + "current": false, + "number": "02", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L03", + "title": "Neovim — navigation and editing", + "repo": "lab-console-neovim", + "href": "", + "available": false, + "current": false, + "number": "03", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L04", + "title": "Git Basics I — status, add and commit", + "repo": "lab-console-git-basics-1", + "href": "", + "available": false, + "current": false, + "number": "04", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L05", + "title": "Git Basics II — log, diff and restore", + "repo": "lab-console-git-basics-2", + "href": "", + "available": false, + "current": false, + "number": "05", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L06", + "title": "Git Branching I — branch, switch and merge", + "repo": "lab-console-git-branching-1", + "href": "", + "available": false, + "current": false, + "number": "06", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L07", + "title": "Git Branching II — rebase and conflicts", + "repo": "lab-console-git-branching-2", + "href": "", + "available": false, + "current": false, + "number": "07", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L08", + "title": "Docker Fundamentals", + "repo": "lab-console-docker", + "href": "", + "available": false, + "current": false, + "number": "08", + "version": "", + "status": "planned", + "tasks": [] + } + ] + }, + { + "id": "rv32i-asm", + "title": "ASM · RV32I From Blinker to RISC-V", + "current": false, + "catalog_only": true, + "role": "", + "status": "", + "cards": [ + { + "id": "L01", + "title": "Number Systems and Storage", + "repo": "lab-rv32i-asm-number-systems", + "href": "", + "available": false, + "current": false, + "number": "01", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L02", + "title": "FPGA Bring-up and Programming", + "repo": "lab-rv32i-asm-fpga-bringup", + "href": "", + "available": false, + "current": false, + "number": "02", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L03", + "title": "Blinker and Synchronous Logic", + "repo": "lab-rv32i-asm-blinker", + "href": "", + "available": false, + "current": false, + "number": "03", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L04", + "title": "The RISC-V ISA and Instruction Decoder", + "repo": "lab-rv32i-asm-decoder", + "href": "", + "available": false, + "current": false, + "number": "04", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L05", + "title": "ALU and the Verilog Assembler", + "repo": "lab-rv32i-asm-alu", + "href": "", + "available": false, + "current": false, + "number": "05", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L06", + "title": "Control Flow — Jumps and Branches", + "repo": "lab-rv32i-asm-control-flow", + "href": "", + "available": false, + "current": false, + "number": "06", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L07", + "title": "Addresses and Memory", + "repo": "lab-rv32i-asm-addresses-memory", + "href": "", + "available": false, + "current": false, + "number": "07", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L08", + "title": "Subroutines and the RISC-V ABI", + "repo": "lab-rv32i-asm-subroutines-abi", + "href": "", + "available": false, + "current": false, + "number": "08", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "L09", + "title": "Load and Store", + "repo": "lab-rv32i-asm-load-store", + "href": "", + "available": false, + "current": false, + "number": "09", + "version": "", + "status": "planned", + "tasks": [] + } + ] + }, + { + "id": "c", + "title": "C · Freestanding RV32I and K&R", + "current": true, + "catalog_only": true, + "role": "", + "status": "", + "cards": [ + { + "id": "C01", + "title": "ASM, C and GCC", + "repo": "lab-rv32i-strlen-asm-c-gcc", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/852fa3c7-8329-583a-a244-b639d2e04495", + "available": true, + "current": false, + "number": "01", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Ręczna implementacja RV32I ASM" + }, + { + "id": "task02", + "title": "Referencyjna implementacja w C" + }, + { + "id": "task03", + "title": "ASM wyemitowany przez GCC" + } + ] + }, + { + "id": "C02", + "title": ".bss, .data and static storage", + "repo": "lab-rv32i-strlen-bss-data-stack", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/74afa921-fb51-5017-bcdb-f6e84fb444d8", + "available": true, + "current": false, + "number": "02", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Wynik strlen w .bss" + }, + { + "id": "task02", + "title": "Wynik i napis w .data" + }, + { + "id": "task03", + "title": "Nieużyta tablica lokalna" + }, + { + "id": "task04", + "title": "Użyta tablica lokalna i stack frame" + } + ] + }, + { + "id": "C03", + "title": "ABI and Stack Frame", + "repo": "lab-rv32i-strlen-abi-stack", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/72b22a0a-3297-5d75-a6ff-d1af48132d6c", + "available": true, + "current": false, + "number": "03", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Argument i wynik bez powrotu z main" + }, + { + "id": "task02", + "title": "Pełny stack frame i zachowanie ra" + } + ] + }, + { + "id": "C04", + "title": "Types, Operators and Expressions", + "repo": "lab-rv32i-c-types-operators-expressions", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/7818aa68-4983-5aca-bf7f-541cfce5c601", + "available": true, + "current": false, + "number": "04", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Nazwy i stałe symboliczne" + }, + { + "id": "task02", + "title": "Typy i zakresy" + }, + { + "id": "task03", + "title": "Stałe, długość i enum" + }, + { + "id": "task04", + "title": "Deklaracje, inicjalizacja i const" + }, + { + "id": "task05", + "title": "Arytmetyka i rok przestępny" + }, + { + "id": "task06", + "title": "Porównania i logika" + }, + { + "id": "task07", + "title": "Konwersje: atoi, lower i htoi" + }, + { + "id": "task08", + "title": "Inkrementacja i operacje na napisach" + }, + { + "id": "task09", + "title": "Operatory bitowe" + }, + { + "id": "task10", + "title": "Przypisania i bitcount" + }, + { + "id": "task11", + "title": "Operator warunkowy" + }, + { + "id": "task12", + "title": "Priorytet i kolejność obliczeń" + } + ] + }, + { + "id": "C05", + "title": "Control Flow", + "repo": "lab-rv32i-c-control-flow", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/7512361d-e5e6-5c08-ab18-8be29dacdc10", + "available": true, + "current": false, + "number": "05", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Instrukcje i bloki" + }, + { + "id": "task02", + "title": "if-else i dangling else" + }, + { + "id": "task03", + "title": "else-if i wyszukiwanie binarne" + }, + { + "id": "task04", + "title": "switch: escape i unescape" + }, + { + "id": "task05", + "title": "while, for i Shell sort" + }, + { + "id": "task06", + "title": "do-while i itoa" + }, + { + "id": "task07", + "title": "break i continue" + }, + { + "id": "task08", + "title": "goto i etykiety" + } + ] + }, + { + "id": "C06", + "title": "Functions and Program Structure", + "repo": "lab-rv32i-c-functions-program-structure", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/9667818d-b691-501d-817c-b58be4cbd594", + "available": true, + "current": false, + "number": "06", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Funkcje i strindex" + }, + { + "id": "task02", + "title": "double i atof z wykładnikiem" + }, + { + "id": "task03", + "title": "Zewnętrzny stos RPN" + }, + { + "id": "task04", + "title": "Scope i extern" + }, + { + "id": "task05", + "title": "Nagłówki i prototypy" + }, + { + "id": "task06", + "title": "Static storage" + }, + { + "id": "task07", + "title": "Zmienne register" + }, + { + "id": "task08", + "title": "Struktura blokowa" + }, + { + "id": "task09", + "title": "Inicjalizacja" + }, + { + "id": "task10", + "title": "Rekurencja i quicksort" + }, + { + "id": "task11", + "title": "Preprocesor i makra" + } + ] + }, + { + "id": "C07", + "title": "Pointers, Arrays and Linear Allocator", + "repo": "lab-rv32i-c-pointers-arrays", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/98dbe323-c624-53d6-9fe2-4ee688c44b38", + "available": true, + "current": false, + "number": "07", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "task01" + }, + { + "id": "task02", + "title": "task02" + }, + { + "id": "task03", + "title": "task03" + }, + { + "id": "task04", + "title": "K&R 5.4 -- Linear Memory Allocator" + }, + { + "id": "task05", + "title": "task05" + }, + { + "id": "task06", + "title": "task06" + }, + { + "id": "task07", + "title": "task07" + }, + { + "id": "task08", + "title": "task08" + }, + { + "id": "task09", + "title": "task09" + }, + { + "id": "task10", + "title": "task10" + }, + { + "id": "task11", + "title": "task11" + }, + { + "id": "task12", + "title": "task12" + } + ] + }, + { + "id": "C08", + "title": "Structures and Linked State", + "repo": "lab-rv32i-c-structures", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/f60fbba3-a788-5f1e-bc24-52af82f227c9", + "available": true, + "current": false, + "number": "08", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Układ BlockHeader" + }, + { + "id": "task02", + "title": "Nagłówek, payload i odzyskanie właściciela" + }, + { + "id": "task03", + "title": "Intruzywna lista wolnych bloków" + }, + { + "id": "task04", + "title": "Wyrównana arena dwóch bloków" + } + ] + }, + { + "id": "C09", + "title": "smalloc, sbrk and minimal libc", + "repo": "lab-rv32i-c-smalloc-sbrk-libc", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0", + "available": true, + "current": true, + "number": "09", + "version": "v00.01", + "status": "planned", + "tasks": [ + { + "id": "task01", + "title": "strlen z libc bez sterty" + }, + { + "id": "task02", + "title": "Kontrolowany brak dostawcy sbrk" + }, + { + "id": "task03", + "title": "Bounded sbrk i atomowy błąd" + }, + { + "id": "task04", + "title": "Wyrównany smalloc append-only" + }, + { + "id": "task05", + "title": "malloc/free picolibc jako czarna skrzynka" + } + ] + }, + { + "id": "C10", + "title": "RV32I Traps and Interrupt Control", + "repo": "lab-rv32i-c-interrupts", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8fb9c110-557b-5081-8ae2-a56800f872e8", + "available": true, + "current": false, + "number": "10", + "version": "v00.01", + "status": "planned", + "tasks": [ + { + "id": "task01", + "title": "ECALL i wznowienie pod mepc+4" + }, + { + "id": "task02", + "title": "Machine software IRQ i clear źródła" + }, + { + "id": "task03", + "title": "Macierz pending, MSIE i MIE" + } + ] + }, + { + "id": "C11", + "title": "Machine Timer and Periodic Work", + "repo": "lab-rv32i-c-timer", + "href": "", + "available": false, + "current": false, + "number": "11", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "C12", + "title": "UART — polling and interrupts", + "repo": "lab-rv32i-c-uart", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/64f7c516-78b1-58ee-8619-a82d7061079f", + "available": true, + "current": false, + "number": "12", + "version": "v00.01", + "status": "planned", + "tasks": [ + { + "id": "task01", + "title": "Polling jednego bajtu" + }, + { + "id": "task02", + "title": "Odbiór R przez external IRQ 16" + }, + { + "id": "task03", + "title": "Jednokomórkowa skrzynka drop-newest" + } + ] + }, + { + "id": "C13", + "title": "GPIO, Edges and Debounce", + "repo": "lab-rv32i-c-gpio", + "href": "", + "available": false, + "current": false, + "number": "13", + "version": "", + "status": "planned", + "tasks": [] + } + ] + } + ] + }, + { + "id": "year-2", + "title": "Rok 2", + "current": false, + "series": [ + { + "id": "cpp", + "title": "C++", + "current": false, + "catalog_only": true, + "role": "", + "status": "", + "cards": [ + { + "id": "CPP01", + "title": "Translation Units, Linkage and Namespaces", + "repo": "lab-cpp-build-namespaces", + "href": "", + "available": false, + "current": false, + "number": "01", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP02", + "title": "Classes, Encapsulation and Invariants", + "repo": "lab-cpp-classes-invariants", + "href": "", + "available": false, + "current": false, + "number": "02", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP03", + "title": "Construction, Destruction and RAII", + "repo": "lab-cpp-lifetime-raii", + "href": "", + "available": false, + "current": false, + "number": "03", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP04", + "title": "References, const and Value Categories", + "repo": "lab-cpp-references-const", + "href": "", + "available": false, + "current": false, + "number": "04", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP05", + "title": "Copy, Move and the Rule of Zero/Five", + "repo": "lab-cpp-copy-move", + "href": "", + "available": false, + "current": false, + "number": "05", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP06", + "title": "Ownership and Resource Types", + "repo": "lab-cpp-ownership", + "href": "", + "available": false, + "current": false, + "number": "06", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP07", + "title": "Function and Class Templates", + "repo": "lab-cpp-templates", + "href": "", + "available": false, + "current": false, + "number": "07", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP08", + "title": "Static Polymorphism and CRTP", + "repo": "lab-cpp-static-polymorphism", + "href": "", + "available": false, + "current": false, + "number": "08", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP09", + "title": "Inheritance, Interfaces and Dynamic Dispatch", + "repo": "lab-cpp-dynamic-polymorphism", + "href": "", + "available": false, + "current": false, + "number": "09", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP10", + "title": "Operator Overloading and Strong Types", + "repo": "lab-cpp-strong-types", + "href": "", + "available": false, + "current": false, + "number": "10", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP11", + "title": "Containers, Iterators and Algorithms", + "repo": "lab-cpp-containers-iterators", + "href": "", + "available": false, + "current": false, + "number": "11", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP12", + "title": "Lambdas, Function Objects and Callables", + "repo": "lab-cpp-lambdas-callables", + "href": "", + "available": false, + "current": false, + "number": "12", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP13", + "title": "Error Models with and without Exceptions", + "repo": "lab-cpp-error-models", + "href": "", + "available": false, + "current": false, + "number": "13", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP14", + "title": "Object Layout, ABI and Binary Evidence", + "repo": "lab-cpp-abi-evidence", + "href": "", + "available": false, + "current": false, + "number": "14", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "CPP15", + "title": "Resource-type Integration Project", + "repo": "lab-cpp-resource-integration", + "href": "", + "available": false, + "current": false, + "number": "15", + "version": "", + "status": "planned", + "tasks": [] + } + ] + }, + { + "id": "freertos-c", + "title": "FreeRTOS C", + "current": false, + "catalog_only": true, + "role": "", + "status": "", + "cards": [ + { + "id": "FC01", + "title": "heap_4: From Linear Cursor to Reusable Blocks", + "repo": "lab-rv32i-freertos-heap4", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/aea09ab7-9bfd-5368-8d1b-c8724871c1a7", + "available": true, + "current": false, + "number": "01", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Predict and prove reusable heap_4 blocks" + } + ] + }, + { + "id": "FC02", + "title": "First Task, TCB and Task Stack", + "repo": "lab-rv32i-freertos-c-first-task", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/a2538a1a-3c37-4c14-a6ea-db5aba8fd038", + "available": true, + "current": false, + "number": "02", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Pierwszy task FreeRTOS — callback, context, TCB i stos" + } + ] + }, + { + "id": "FC03", + "title": "Tick, Scheduler, Priorities and Time Slicing", + "repo": "lab-rv32i-freertos-c-scheduler", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2214a13f-34c6-40a1-a561-70a00ec98285", + "available": true, + "current": false, + "number": "03", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Kontrolowany eksperyment schedulera FreeRTOS" + } + ] + }, + { + "id": "FC04", + "title": "Delay, Blocking and Task States", + "repo": "lab-rv32i-freertos-c-delay-state", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/4a7ef04c-ab08-5783-9192-5b02a90f05f8", + "available": true, + "current": false, + "number": "04", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Delay, blokowanie, zawieszenie i self-delete" + } + ] + }, + { + "id": "FC05", + "title": "Queues and Byte-copy Semantics", + "repo": "lab-rv32i-freertos-c-queue", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8ee8f36a-471b-51bc-97b8-e204bd541c61", + "available": true, + "current": false, + "number": "05", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Kolejka długości 1: empty, full, copy i FIFO" + } + ] + }, + { + "id": "FC06", + "title": "Software Timers and the Daemon Task", + "repo": "lab-rv32i-freertos-c-software-timers", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/ab188300-f03d-5ddb-8316-b9534876a5bc", + "available": true, + "current": false, + "number": "06", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "One-shot, auto-reload i timer daemon" + } + ] + }, + { + "id": "FC07", + "title": "Interrupt-safe API and Semaphore Handoff", + "repo": "lab-rv32i-freertos-c-isr-semaphore", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/a6da1075-8d1f-5615-b0e6-0fc33e59e1e3", + "available": true, + "current": false, + "number": "07", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "External IRQ → FromISR semaphore → high-priority task" + } + ] + }, + { + "id": "FC08", + "title": "Critical Sections, Mutexes and Priority Inheritance", + "repo": "lab-rv32i-freertos-c-resource-management", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2392f81a-ed6c-510b-86b5-06c5e2f1c6aa", + "available": true, + "current": false, + "number": "08", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Low/Medium/High: ownership i dziedziczenie priorytetu" + } + ] + }, + { + "id": "FC09", + "title": "Event Groups and Multi-event Synchronization", + "repo": "lab-rv32i-freertos-c-event-groups", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/3f4c1b8b-d54b-58d5-b92d-87a7233cbd9f", + "available": true, + "current": false, + "number": "09", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "ALL-ready i trzyosobowa bariera" + } + ] + }, + { + "id": "FC10", + "title": "Direct-to-task Notifications", + "repo": "lab-rv32i-freertos-c-notifications", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/3b57334e-2c35-5207-a51d-9321906db078", + "available": true, + "current": false, + "number": "10", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Count, overwrite i bit flags na jednym slocie" + } + ] + }, + { + "id": "FC11", + "title": "Static Allocation and Bounded Storage", + "repo": "lab-rv32i-freertos-c-static-allocation", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/f4d7caf3-d665-5a2d-b9eb-39a120a64ff7", + "available": true, + "current": false, + "number": "11", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Same behavior, two storage policies" + } + ] + }, + { + "id": "FC12", + "title": "Assertions, Hooks, Stack Checks and Runtime Diagnostics", + "repo": "lab-rv32i-freertos-c-diagnostics", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/c3027314-85a4-5e4a-af13-0939c7467a62", + "available": true, + "current": false, + "number": "12", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Diagnose before changing the program" + } + ] + }, + { + "id": "FC13", + "title": "UART Interrupt-to-task Pipeline", + "repo": "lab-rv32i-freertos-c-uart", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/6a838fd1-ab1b-52b6-baaf-659120a4d60a", + "available": true, + "current": false, + "number": "13", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Build and prove a bounded UART RX pipeline" + } + ] + }, + { + "id": "FC14", + "title": "GPIO, Hardware Timer and Deferred Work", + "repo": "lab-rv32i-freertos-c-gpio-timer", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/0cc561df-bf81-5bba-9df1-c872d5b42eb8", + "available": true, + "current": false, + "number": "14", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Prove one machine-timer event from ISR to daemon GPIO work" + } + ] + }, + { + "id": "FC15", + "title": "Integrated Deterministic FreeRTOS C Application", + "repo": "lab-rv32i-freertos-c-integration", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/fe92efeb-3c38-5975-86d8-ed630e1ad3bb", + "available": true, + "current": false, + "number": "15", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Prove one complete FreeRTOS C architecture" + } + ] + } + ] + }, + { + "id": "freertos-cpp", + "title": "FreeRTOS C++", + "current": false, + "catalog_only": true, + "role": "", + "status": "", + "cards": [ + { + "id": "K02", + "title": "C++ Task Wrapper, CRTP and Lifecycle", + "repo": "lab-rv32i-freertos-task-stack-vector", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/948ce9fd-3d0c-5721-a0ae-ef422008fec8", + "available": true, + "current": false, + "number": "02", + "version": "v00.04", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "C++ Task wrapper — OOP i debugowanie cyklu życia" + } + ] + }, + { + "id": "K03", + "title": "Vector V1 — Destructor, Move, Ownership and RAII", + "repo": "lab-rv32i-freertos-vector-raii", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/de1a2818-4c30-5760-8b31-255114f82e90", + "available": true, + "current": false, + "number": "03", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Vector V1 — transfer własności i powrót heapu" + } + ] + }, + { + "id": "K04", + "title": "Scheduler States, Priorities and Typed Ticks", + "repo": "lab-rv32i-freertos-scheduler-states", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/853a7dd7-b00b-4f4a-96e8-c160fc5bb04a", + "available": true, + "current": false, + "number": "04", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Osiem snapshotów decyzji schedulera" + } + ] + }, + { + "id": "K05", + "title": "C++ Heap Bridge, Heap Models and HeapStats", + "repo": "lab-rv32i-freertos-heap-models", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/c456b505-dc5c-4894-b832-bb4c5afd0feb", + "available": true, + "current": false, + "number": "05", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Fragmentacja, koalescencja i historyczny watermark" + } + ] + }, + { + "id": "K06", + "title": "MemoryResource and FreeRtosAllocator", + "repo": "lab-rv32i-freertos-allocator-resource", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/1af48a2e-8564-4e18-8115-b2c0208169d6", + "available": true, + "current": false, + "number": "06", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Dwa zasoby, jeden typed allocator" + } + ] + }, + { + "id": "K07", + "title": "TaskHandle_t, Explicit Start and Static Trampoline", + "repo": "lab-rv32i-freertos-task-wrapper", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/9bffead0-4341-4350-806d-e975b1a3a08f", + "available": true, + "current": false, + "number": "07", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Stabilny obiekt przez statyczny trampoline" + } + ] + }, + { + "id": "K08", + "title": "DynamicTask, StaticTask, Deletion and Lifetime", + "repo": "lab-rv32i-freertos-static-task", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/d9e45417-a37f-487c-813f-fc7a44d4b4f3", + "available": true, + "current": false, + "number": "08", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Dwie polityki storage i pełna oś delete" + } + ] + }, + { + "id": "K09", + "title": "Scheduler Facade and Scoped Kernel Guards", + "repo": "lab-rv32i-freertos-kernel-facade", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/6a2ab068-17e7-4bfa-b726-2df37787ed69", + "available": true, + "current": false, + "number": "09", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Fasada kernela i restore na każdej ścieżce" + } + ] + }, + { + "id": "K10", + "title": "Queue and StaticQueue", + "repo": "lab-rv32i-freertos-queue", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/66967c2d-bb34-4344-8064-f54d06cce47a", + "available": true, + "current": false, + "number": "10", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Typed byte-copy queue z dwiema politykami storage" + } + ] + }, + { + "id": "K11", + "title": "Mutex, LockGuard and Priority Inheritance", + "repo": "lab-rv32i-freertos-mutex", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/34d7ad61-6b03-4922-8e58-b8b98316e5f7", + "available": true, + "current": false, + "number": "11", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "LockGuard i zmierzone priority inheritance" + } + ] + }, + { + "id": "K12", + "title": "Semaphores and Task Notifications", + "repo": "lab-rv32i-freertos-semaphore-notify", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/fcb6107c-268f-4e86-a8cc-092e5875f6f0", + "available": true, + "current": false, + "number": "12", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Semaphore slots i jednoodbiorcza notification" + } + ] + }, + { + "id": "K13", + "title": "EventGroup and Coordinated State", + "repo": "lab-rv32i-freertos-event-group", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/5fbcd7c6-3a73-4cd2-b76c-bdb016d1daaa", + "available": true, + "current": false, + "number": "13", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Typed EventGroup i trzy źródła stanu" + } + ] + }, + { + "id": "K14", + "title": "Software Timer and the Timer Daemon Task", + "repo": "lab-rv32i-freertos-sw-timer", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/78db37df-63e5-4c5b-80ce-f73a411f0b50", + "available": true, + "current": false, + "number": "14", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "Static one-shot i periodic timer na daemon tasku" + } + ] + }, + { + "id": "K15", + "title": "Explicit FromISR, UART and GPIO Wrappers", + "repo": "lab-rv32i-freertos-isr-drivers", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/02f6cd71-5c85-4883-a237-1d4ba08d9469", + "available": true, + "current": false, + "number": "15", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "UART queue i GPIO notify z realnego IRQ" + } + ] + }, + { + "id": "K16", + "title": "Integrated Real-time Application and Evidence", + "repo": "lab-rv32i-freertos-integration", + "href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/05b4f486-a27c-455d-a315-f4e51a4c66b3", + "available": true, + "current": false, + "number": "16", + "version": "v00.01", + "status": "existing", + "tasks": [ + { + "id": "task01", + "title": "End-to-end RTOS service i evidence report" + } + ] + } + ] + }, + { + "id": "posix-threads", + "title": "POSIX Threads", + "current": false, + "catalog_only": true, + "role": "", + "status": "", + "cards": [ + { + "id": "PT01", + "title": "Process and Thread Execution Context", + "repo": "lab-posix-process-thread", + "href": "", + "available": false, + "current": false, + "number": "01", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT02", + "title": "pthread_create, pthread_join and Lifecycle", + "repo": "lab-posix-pthread-create-join", + "href": "", + "available": false, + "current": false, + "number": "02", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT03", + "title": "Arguments, Return Values and Ownership", + "repo": "lab-posix-thread-arguments", + "href": "", + "available": false, + "current": false, + "number": "03", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT04", + "title": "Data Races and the Happens-before Question", + "repo": "lab-posix-data-races", + "href": "", + "available": false, + "current": false, + "number": "04", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT05", + "title": "Mutex, Critical Section and Deadlock", + "repo": "lab-posix-mutex", + "href": "", + "available": false, + "current": false, + "number": "05", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT06", + "title": "Condition Variables and Predicates", + "repo": "lab-posix-condition-variable", + "href": "", + "available": false, + "current": false, + "number": "06", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT07", + "title": "Bounded Producer–Consumer Queue", + "repo": "lab-posix-producer-consumer", + "href": "", + "available": false, + "current": false, + "number": "07", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT08", + "title": "POSIX Semaphores", + "repo": "lab-posix-semaphore", + "href": "", + "available": false, + "current": false, + "number": "08", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT09", + "title": "Reader–Writer Lock", + "repo": "lab-posix-rwlock", + "href": "", + "available": false, + "current": false, + "number": "09", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT10", + "title": "C Atomics and Memory Ordering", + "repo": "lab-posix-atomics", + "href": "", + "available": false, + "current": false, + "number": "10", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT11", + "title": "Cancellation, Cleanup and Safe Shutdown", + "repo": "lab-posix-cancellation-cleanup", + "href": "", + "available": false, + "current": false, + "number": "11", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT12", + "title": "Thread-local Storage", + "repo": "lab-posix-thread-local", + "href": "", + "available": false, + "current": false, + "number": "12", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT13", + "title": "Scheduling Policy, Priority and Affinity", + "repo": "lab-posix-scheduling", + "href": "", + "available": false, + "current": false, + "number": "13", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT14", + "title": "GDB, Sanitizers and Race Evidence", + "repo": "lab-posix-thread-debugging", + "href": "", + "available": false, + "current": false, + "number": "14", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "PT15", + "title": "POSIX Threads vs FreeRTOS Integration", + "repo": "lab-posix-freertos-comparison", + "href": "", + "available": false, + "current": false, + "number": "15", + "version": "", + "status": "planned", + "tasks": [] + } + ] + }, + { + "id": "oop", + "title": "OOP and Design Patterns", + "current": false, + "catalog_only": true, + "role": "reference", + "status": "", + "cards": [ + { + "id": "OOP01", + "title": "Strategy — Replaceable Behaviour", + "repo": "lab-cpp-oop-strategy", + "href": "", + "available": false, + "current": false, + "number": "01", + "version": "", + "status": "design", + "tasks": [] + }, + { + "id": "OOP02", + "title": "Adapter — Stable Boundary", + "repo": "lab-cpp-oop-adapter", + "href": "", + "available": false, + "current": false, + "number": "02", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP03", + "title": "Template Method — Fixed Skeleton", + "repo": "lab-cpp-oop-template-method", + "href": "", + "available": false, + "current": false, + "number": "03", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP04", + "title": "Static vs Dynamic Dispatch", + "repo": "lab-cpp-oop-dispatch", + "href": "", + "available": false, + "current": false, + "number": "04", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP05", + "title": "RAII and Ownership", + "repo": "lab-cpp-oop-raii", + "href": "", + "available": false, + "current": false, + "number": "05", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP06", + "title": "State — Explicit Behaviour", + "repo": "lab-cpp-oop-state", + "href": "", + "available": false, + "current": false, + "number": "06", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP07", + "title": "Facade — Subsystem Boundary", + "repo": "lab-cpp-oop-facade", + "href": "", + "available": false, + "current": false, + "number": "07", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP08", + "title": "Command — Request as Object", + "repo": "lab-cpp-oop-command", + "href": "", + "available": false, + "current": false, + "number": "08", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP09", + "title": "Observer — Subscription and Telemetry", + "repo": "lab-cpp-oop-observer", + "href": "", + "available": false, + "current": false, + "number": "09", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP10", + "title": "Factory Method — Resource Policy", + "repo": "lab-cpp-oop-factory-method", + "href": "", + "available": false, + "current": false, + "number": "10", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP11", + "title": "Builder — Valid Configuration", + "repo": "lab-cpp-oop-builder", + "href": "", + "available": false, + "current": false, + "number": "11", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP12", + "title": "Decorator — Measurement and Diagnostics", + "repo": "lab-cpp-oop-decorator", + "href": "", + "available": false, + "current": false, + "number": "12", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP13", + "title": "Composite — Component Tree", + "repo": "lab-cpp-oop-composite", + "href": "", + "available": false, + "current": false, + "number": "13", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP14", + "title": "Chain of Responsibility", + "repo": "lab-cpp-oop-chain", + "href": "", + "available": false, + "current": false, + "number": "14", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP15", + "title": "Pattern-language Integration", + "repo": "lab-cpp-oop-integration", + "href": "", + "available": false, + "current": false, + "number": "15", + "version": "", + "status": "planned", + "tasks": [] + } + ] + } + ] + }, + { + "id": "year-3", + "title": "Rok 3 · plan", + "current": false, + "series": [ + { + "id": "modern-cpp-stl", + "title": "Modern C++ / STL", + "current": false, + "catalog_only": true, + "role": "", + "status": "scope-reserved", + "cards": [] + }, + { + "id": "std-threads", + "title": "std::thread / std::jthread", + "current": false, + "catalog_only": true, + "role": "", + "status": "scope-reserved", + "cards": [] + }, + { + "id": "boost-asio", + "title": "Boost.Asio", + "current": false, + "catalog_only": true, + "role": "", + "status": "scope-reserved", + "cards": [] + }, + { + "id": "oop", + "title": "OOP and Design Patterns", + "current": false, + "catalog_only": true, + "role": "reference", + "status": "", + "cards": [ + { + "id": "OOP01", + "title": "Strategy — Replaceable Behaviour", + "repo": "lab-cpp-oop-strategy", + "href": "", + "available": false, + "current": false, + "number": "01", + "version": "", + "status": "design", + "tasks": [] + }, + { + "id": "OOP02", + "title": "Adapter — Stable Boundary", + "repo": "lab-cpp-oop-adapter", + "href": "", + "available": false, + "current": false, + "number": "02", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP03", + "title": "Template Method — Fixed Skeleton", + "repo": "lab-cpp-oop-template-method", + "href": "", + "available": false, + "current": false, + "number": "03", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP04", + "title": "Static vs Dynamic Dispatch", + "repo": "lab-cpp-oop-dispatch", + "href": "", + "available": false, + "current": false, + "number": "04", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP05", + "title": "RAII and Ownership", + "repo": "lab-cpp-oop-raii", + "href": "", + "available": false, + "current": false, + "number": "05", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP06", + "title": "State — Explicit Behaviour", + "repo": "lab-cpp-oop-state", + "href": "", + "available": false, + "current": false, + "number": "06", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP07", + "title": "Facade — Subsystem Boundary", + "repo": "lab-cpp-oop-facade", + "href": "", + "available": false, + "current": false, + "number": "07", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP08", + "title": "Command — Request as Object", + "repo": "lab-cpp-oop-command", + "href": "", + "available": false, + "current": false, + "number": "08", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP09", + "title": "Observer — Subscription and Telemetry", + "repo": "lab-cpp-oop-observer", + "href": "", + "available": false, + "current": false, + "number": "09", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP10", + "title": "Factory Method — Resource Policy", + "repo": "lab-cpp-oop-factory-method", + "href": "", + "available": false, + "current": false, + "number": "10", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP11", + "title": "Builder — Valid Configuration", + "repo": "lab-cpp-oop-builder", + "href": "", + "available": false, + "current": false, + "number": "11", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP12", + "title": "Decorator — Measurement and Diagnostics", + "repo": "lab-cpp-oop-decorator", + "href": "", + "available": false, + "current": false, + "number": "12", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP13", + "title": "Composite — Component Tree", + "repo": "lab-cpp-oop-composite", + "href": "", + "available": false, + "current": false, + "number": "13", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP14", + "title": "Chain of Responsibility", + "repo": "lab-cpp-oop-chain", + "href": "", + "available": false, + "current": false, + "number": "14", + "version": "", + "status": "planned", + "tasks": [] + }, + { + "id": "OOP15", + "title": "Pattern-language Integration", + "repo": "lab-cpp-oop-integration", + "href": "", + "available": false, + "current": false, + "number": "15", + "version": "", + "status": "planned", + "tasks": [] + } + ] + } + ] + }, + { + "id": "year-4", + "title": "Rok 4 · plan", + "current": false, + "series": [ + { + "id": "transformers-gpu", + "title": "Transformers on GPU", + "current": false, + "catalog_only": true, + "role": "", + "status": "scope-reserved", + "cards": [] + } + ] + } + ] + }, + { + "id": "fiz", + "title": "FIZ · Fizyka", + "current": false, + "levels": [ + { + "id": "all", + "title": "Katalog", + "current": false, + "series": [ + { + "id": "fiz", + "title": "Fizyka", + "current": false, + "catalog_only": false, + "role": "", + "status": "", + "cards": [ + { + "id": "ruch-1d", + "title": "Ruch 1D", + "repo": "ruch-1d", + "href": "", + "available": false, + "current": false, + "number": "", + "version": "", + "status": "", + "tasks": [] + }, + { + "id": "ruch-2d", + "title": "Ruch 2D", + "repo": "ruch-2d", + "href": "", + "available": false, + "current": false, + "number": "", + "version": "", + "status": "", + "tasks": [] + }, + { + "id": "ruch-po-okregu", + "title": "Ruch po okręgu", + "repo": "ruch-po-okregu", + "href": "", + "available": false, + "current": false, + "number": "", + "version": "", + "status": "", + "tasks": [] + } + ] + } + ] + } + ] + } + ] + }, + "total_pages": 10, + "front": { + "header_html": "

    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET1/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "goal_title": "Cel karty", + "goal_html": "

    Uczeń rozdziela wybór funkcji z archiwum libc, kontrakt dostawcy pamięci sbrk i politykę alokatora. Najpierw dowodzi, że strlen nie potrzebuje sterty, potem kontrolowanie zrywa zależność malloc do sbrk, buduje ograniczony model break i wyrównany smalloc, a na końcu traktuje prawdziwe malloc/free picolibc jako czarną skrzynkę sprawdzaną przez kontrakt.

    ", + "scope_title": "Zakres i zachowane przykłady", + "scope_html": "

    Pięć zachowanych przykładów działa na hoście i RV32I tam, gdzie istnieje program uruchamialny. Task02 jest zamierzonym expected-fail linkera i nie ma obrazu runtime. W aktualnym GCC 15.2 biblioteka to picolibc: jej malloc odwołuje się do sbrk, podczas gdy vendorowy init.S Hazard3 definiuje inny symbol _sbrk. Własny linker ogranicza stertę symbolami __heap_start i __heap_end oraz rezerwuje 64 KiB stosu. Układ każdego przykładu: pełny profil A1-A8; widok N/D ma jawny powód, a diagram nie jest wymagany, gdy tekst daje lepszy dowód.

    ", + "scope_columns": [ + "chapter", + "task", + "idea", + "priority" + ], + "scope_headers": [ + "K&R", + "Numer tasku", + "Najważniejsza idea", + "Priorytet" + ], + "scope_rows": [ + { + "chapter": "7.8", + "task": "Task01", + "idea_html": "

    libc.a: wybór strlen.c.o

    ", + "priority": "kluczowe", + "status": "", + "status_label": "", + "version": "", + "key": true + }, + { + "chapter": "5.4 + ABI", + "task": "Task02", + "idea_html": "

    expected-fail: malloc -> sbrk

    ", + "priority": "kluczowe", + "status": "", + "status_label": "", + "version": "", + "key": true + }, + { + "chapter": "5.4", + "task": "Task03", + "idea_html": "

    ograniczony break i atomowy błąd

    ", + "priority": "kluczowe", + "status": "", + "status_label": "", + "version": "", + "key": true + }, + { + "chapter": "5.4", + "task": "Task04", + "idea_html": "

    nagłówek, alignment i reset areny

    ", + "priority": "kluczowe", + "status": "", + "status_label": "", + "version": "", + "key": true + }, + { + "chapter": "7.8 + ABI", + "task": "Task05", + "idea_html": "

    malloc/free picolibc jako black box

    ", + "priority": "kluczowe", + "status": "", + "status_label": "", + "version": "", + "key": true + } + ] + }, + "sections": [ + { + "id": "section-1-content", + "index": 1, + "title": "1 — Funkcja z libc nie oznacza automatycznie sterty", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET2/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "

    Archiwum libc.a nie jest włączane do programu w całości. Linker pobiera człon, który rozwiązuje potrzebny symbol, a następne człony tylko wtedy, gdy pojawią się kolejne nierozwiązane odwołania. Dlatego bezpośrednie wywołanie strlen z opcją -fno-builtin wybiera strlen.c.o, lecz nie wybiera libc_stdlib_malloc.c.o ani libc_misc_picosbrk.c.o. Dowodem jest mapa linkera, a nie samo dołączenie nagłówka string.h.

    \n

    Task01 rozstrzyga wyłącznie tę zależność. Nie dowodzi, że każda funkcja tekstowa jest bezkosztowa ani że całe libc nie używa pamięci dynamicznej.

    ", + "tasks": [], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-2-content", + "index": 2, + "title": "2 — malloc potrzebuje sbrk, lecz _sbrk to inna nazwa", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET3/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "

    W badanym GCC 15.2 używane jest picolibc, nie newlib. Człon libc_stdlib_malloc.c.o ma niezdefiniowane odwołanie do sbrk. Picolibc może dostarczyć je z libc_misc_picosbrk.c.o; ten kod opiera granice na symbolach linkera __heap_start i __heap_end. Z kolei vendor/Hazard3/.../init.S definiuje _sbrk z jednym podkreśleniem. Dla linkera są to dwa różne symbole, więc mogą współistnieć w Task05.

    \n

    Task02 używa -wrap=sbrk: każde odwołanie do sbrk zostaje skierowane do celowo brakującego __wrap_sbrk. Oczekiwany błąd jest kontrolowanym testem krawędzi malloc -> sbrk, a nie awarią całego projektu.

    ", + "tasks": [], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-3-content", + "index": 3, + "title": "3 — Od alloc z K&R 5.4 do bounded sbrk i smalloc", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET4/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "

    Liniowy alloc z K&R 5.4 przesuwa wskaźnik w stałej tablicy. Jest prosty, ale nie odzyskuje dowolnego bloku, nie wybiera najlepszego dopasowania, nie dzieli i nie scala wolnych obszarów. afree może cofnąć wskaźnik jedynie do adresu należącego do areny, więc bez dyscypliny stosowej łatwo unieważnić późniejsze przydziały. Historyczna tablica bajtów nie jest też ogólną deklaracją wyrównania dla każdego typu.

    \n

    Task03 zachowuje istotę modelu, lecz jawnie wymusza heap_start <= brk <= heap_end; odrzucona operacja nie zmienia break. Task04 dodaje 16-bajtowe wyrównanie i 16-bajtowy nagłówek bezpośrednio przed payloadem. Nadal jest to alokator append-only: nie ma sfree, listy wolnych bloków, split ani coalescing. Jedyną operacją odzyskania jest reset całej areny, który unieważnia wszystkie wcześniejsze wskaźniki.

    ", + "tasks": [], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-4-content", + "index": 4, + "title": "4 — Prawdziwe malloc/free jako czarna skrzynka", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET5/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "

    Task05 nie zakłada, że picolibc ma taki sam nagłówek lub strategię jak c09_smalloc. Program sprawdza tylko publiczny kontrakt potrzebny klientowi: dwa udane przydziały dają używalne, rozłączne obszary; zapisane bajty można odczytać; adresy spełniają mierzone wyrównanie; oba bloki są przekazane do free. Nie odczytuje pamięci po free i nie wymaga ponownego użycia tego samego adresu.

    \n

    Minimalny startup ustawia gp, pojedynczą bazę TLS tp, zeruje .tbss i .bss, a następnie wywołuje main. Skrypt linkera pozostawia __heap_end 64 KiB przed __stack_top i ma ASSERT zatrzymujący obraz, gdy sekcje zajmą zarezerwowany obszar.

    ", + "tasks": [], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-5-task01", + "index": 5, + "title": "TASK01 — strlen z libc bez sterty", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET6/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "", + "tasks": [ + { + "ref": "task01", + "title": "strlen z libc bez sterty", + "uuid": "839b8401-9f15-5edc-a214-176c06ba5cb1", + "criterion": "Host i Hazard3: length=16, pass=1, kod 0. Mapa RV32I zawiera libc.a(strlen.c.o), ale nie zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o ani libc_misc_picosbrk.c.o.", + "conclusion_html": "", + "prompt_html": "

    Przed linkowaniem przewidź, które człony libc.a są potrzebne przez bezpośrednie strlen. Uruchom program, a potem w mapie udowodnij obecność strlen.c.o i nieobecność członów malloc, free oraz picosbrk.

    ", + "flow": [ + { + "id": "task01.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — klient, archiwum i brak dostawcy pamięci", + "content_html": "

    Zachowany przykład: src/tasks/task01_libc_without_heap.c. Klient wywołuje publiczne strlen. Granicą systemu jest linker wybierający potrzebny człon libc.a; Task01 nie deklaruje ani nie wywołuje malloc, free lub sbrk.

    ", + "steps": [] + }, + { + "id": "task01.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — jedna krawędź symboliczna", + "content_html": "

    Przy -fno-builtin obiekt tasku zachowuje niezdefiniowany symbol strlen. Linker rozwiązuje go przez strlen.c.o. Ten człon nie tworzy następnej krawędzi do alokatora, dlatego graf zależności kończy się bez warstwy sterty.

    ", + "steps": [] + }, + { + "id": "task01.a3", + "kind": "block", + "title": "A3 DISPATCH · N/D", + "content_html": "

    N/D. strlen i checkpoint są wywołaniami bezpośrednimi; program nie ma callbacku, ISR, wskaźnika funkcji ani dynamicznego wyboru implementacji.

    ", + "steps": [] + }, + { + "id": "task01.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — dwa niezależne warunki sukcesu", + "content_html": "

    Warunek wykonania to długość 16 dla napisu picolibc-no-heap. Warunek obrazu to obecność wyłącznie potrzebnego członu tekstowego i brak trzech nazw członów związanych z przydziałem. Sam kod wyjścia nie zastępuje kontroli mapy.

    ", + "steps": [] + }, + { + "id": "task01.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — kompilacja, selekcja archiwum, wywołanie", + "content_html": "

    Kompilator pozostawia call do strlen; linker przegląda archiwum i pobiera strlen.c.o; startup uruchamia main; funkcja oblicza 16; checkpoint publikuje wynik; main zwraca 0. Każdy etap ma inny artefakt dowodowy.

    ", + "steps": [] + }, + { + "id": "task01.a6", + "kind": "block", + "title": "A6 STATE · N/D", + "content_html": "

    N/D. Program wykonuje jednorazowy, czysty pomiar długości i nie ma domenowego obiektu przechodzącego przez istotne stany ani zasobu o cyklu życia.

    ", + "steps": [] + }, + { + "id": "task01.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — global i mapa odpowiadają na inne pytania", + "content_html": "

    W task01_debug_checkpoint global g_task01_length ma wartość 16, a g_task01_pass wartość 1. Osobno prog.map wskazuje libc.a(strlen.c.o); test mapy odrzuca każdą nazwę członu heap.

    ", + "steps": [] + }, + { + "id": "task01.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — płać za osiągalne symbole, nie za nagłówek", + "content_html": "

    Dla archiwum statycznego właściwym wzorcem audytu jest śledzenie nierozwiązanych symboli i pobranych członów. #include <string.h> dostarcza deklarację; nie jest poleceniem dołączenia całej implementacji libc.

    ", + "steps": [] + }, + { + "id": "task01.proof", + "kind": "exercise", + "title": "Przewidywanie → wykonanie → wniosek", + "content_html": "", + "steps": [] + }, + { + "id": "task01.worksheet", + "kind": "block", + "title": "TASK01 · Zapis dowodu ucznia", + "content_html": "

    1. Przewidywanie przed uruchomieniem \\noindent \\noindent 2. Wynik programu hostowego \\noindent \\noindent 3. Wynik RV32I i kod wyjścia \\noindent \\noindent 4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar \\noindent \\noindent

    ", + "steps": [] + } + ] + } + ], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-6-task02", + "index": 6, + "title": "TASK02 — Kontrolowany brak dostawcy sbrk", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET7/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "", + "tasks": [ + { + "ref": "task02", + "title": "Kontrolowany brak dostawcy sbrk", + "uuid": "9c55597f-3145-5744-b13e-f1c0ee83abc8", + "criterion": "Kompilacja task.o kończy się sukcesem. Link ma niezerowy status, log wymienia libc_stdlib_malloc.c.o i undefined reference to __wrap_sbrk, a must-not-exist.elf nie istnieje. Nie wykonuje się testu host ani Hazard3.", + "conclusion_html": "", + "prompt_html": "

    Narysuj łańcuch main -> malloc -> sbrk. Następnie uruchom make expected-fail i wyjaśnij, dlaczego -wrap=sbrk zmienia ostatnią krawędź na __wrap_sbrk, dlaczego brak ELF jest wynikiem poprawnym oraz czego ten test nie mówi o runtime.

    ", + "flow": [ + { + "id": "task02.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — kontrolowane przecięcie granicy platformy", + "content_html": "

    Zachowany przykład: src/tasks/task02_malloc_requires_sbrk.c. Kod klienta żąda 16 B przez malloc. Opcja linkera przechwytuje wyłącznie symbol dostawcy pamięci, dzięki czemu testuje granicę libc-platforma bez usuwania lub modyfikowania systemowego archiwum.

    ", + "steps": [] + }, + { + "id": "task02.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — caller, człon malloc i brakujący wrapper", + "content_html": "

    Obiekt tasku wnosi odwołanie do malloc; linker pobiera libc_stdlib_malloc.c.o. Jego odwołania do sbrk są przez -wrap przepisywane na __wrap_sbrk. Żaden obiekt celowo nie definiuje tej ostatniej nazwy.

    ", + "steps": [] + }, + { + "id": "task02.a3", + "kind": "block", + "title": "A3 DISPATCH · N/D", + "content_html": "

    N/D. Wywołanie malloc jest bezpośrednie, a -wrap jest transformacją nazw podczas linkowania, nie mechanizmem callbacku, ISR ani dynamicznego dispatchu w programie.

    ", + "steps": [] + }, + { + "id": "task02.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — porażka ma precyzyjną sygnaturę", + "content_html": "

    Sukces testu oznacza jednocześnie: obiekt C powstał, link zwrócił status różny od zera, diagnostyka zawiera __wrap_sbrk oraz nazwę członu malloc, a końcowy ELF nie istnieje. Inny błąd linkera nie spełnia kryterium.

    ", + "steps": [] + }, + { + "id": "task02.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — expected-fail jako kontrolowany przebieg", + "content_html": "

    Skrypt usuwa stary artefakt, kompiluje task, uruchamia link w trybie dopuszczającym błąd, zapisuje status i log, po czym przywraca rygor set -e. Dopiero cztery asercje zamieniają oczekiwaną porażkę programu w sukces testu.

    ", + "steps": [] + }, + { + "id": "task02.a6", + "kind": "block", + "title": "A6 STATE · N/D", + "content_html": "

    N/D. Linkowanie kończy się przed utworzeniem obrazu wykonywalnego, więc nie istnieje runtime, breakpoint ani obiekt domenowy zmieniający stan w czasie wykonania.

    ", + "steps": [] + }, + { + "id": "task02.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — dowodem jest diagnostyka przed runtime", + "content_html": "

    Odczytaj expected-link-failure.log: cztery relokacje z libc_stdlib_malloc.c.o wskazują brak __wrap_sbrk. Następnie sprawdź nieobecność must-not-exist.elf; nie wolno wymyślać wartości runtime dla nieistniejącego programu.

    ", + "steps": [] + }, + { + "id": "task02.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — test negatywny musi odrzucać zły powód", + "content_html": "

    Wzorzec expected-fail wymaga konkretnej sygnatury błędu i braku produktu końcowego. Sam warunek „polecenie nie przeszło” byłby za słaby, bo zaliczyłby literówkę, brak kompilatora lub błędny skrypt linkera.

    ", + "steps": [] + }, + { + "id": "task02.proof", + "kind": "exercise", + "title": "Przewidywanie → wykonanie → wniosek", + "content_html": "", + "steps": [] + }, + { + "id": "task02.worksheet", + "kind": "block", + "title": "TASK02 · Zapis dowodu ucznia", + "content_html": "

    1. Przewidywanie przed uruchomieniem \\noindent \\noindent 2. Wynik kompilacji task.o \\noindent \\noindent 3. Status i sygnatury błędu linkera \\noindent \\noindent 4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar \\noindent \\noindent

    ", + "steps": [] + } + ] + } + ], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-7-task03", + "index": 7, + "title": "TASK03 — Bounded sbrk i atomowy błąd", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET8/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "", + "tasks": [ + { + "ref": "task03", + "title": "Bounded sbrk i atomowy błąd", + "uuid": "5a69ff6d-bda9-5b20-a18c-a8da2f88c64a", + "criterion": "Host i Hazard3: grow=40, rejected_grow=40, shrink=32, rejected_shrink=32, preserved=1, bounds=1, pass=1 i kod 0. Linker: __heap_start oraz __heap_end są wyrównane do 16 B, __heap_end == __stack_bottom.", + "conclusion_html": "", + "prompt_html": "

    Zapisz stan break po sekwencji +16,+24,fail,-8,fail. Dla obu porażek wskaż sprawdzaną granicę i udowodnij, że zwrot (void *)-1 nie zmienia break. Porównaj stałe offsety hosta i RV32I.

    ", + "flow": [ + { + "id": "task03.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — model oddzielony od libc", + "content_html": "

    Zachowane materiały: src/tasks/task03_bounded_sbrk.c, src/runtime/c09_bounded_sbrk.c, src/runtime/c09_bounded_sbrk.h, link/hazard3_c09.ld. Task03 eksportuje nazwę c09_sbrk, aby nie przejąć symbolu sbrk picolibc. Na hoście granice obejmują statyczną arenę 512 B; na RV32I pochodzą z linkera. Ten sam algorytm widzi tylko trzy adresy.

    ", + "steps": [] + }, + { + "id": "task03.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — start, break i end", + "content_html": "

    Stan ma jedną zmienną g_c09_break oraz niezmienne granice start i end. Każdy poprawny stan spełnia start <= break <= end; wolny obszar ma rozmiar end-break, a zajęty prefiks break-start.

    ", + "steps": [] + }, + { + "id": "task03.a3", + "kind": "block", + "title": "A3 DISPATCH · N/D", + "content_html": "

    N/D. Wszystkie operacje c09_sbrk i gettery są wywoływane bezpośrednio; nie ma callbacku, ISR, tablicy funkcji ani wyboru implementacji w runtime.

    ", + "steps": [] + }, + { + "id": "task03.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — tabela pięciu przejść", + "content_html": "

    Od offsetu 0 operacje dają kolejno: +16 -> 16, +24 -> 40, zbyt duży wzrost -> 40, -8 -> 32, zejście o 33 -> 32. Udany call zwraca stary break; porażka zwraca wszystkie bity ustawione.

    ", + "steps": [] + }, + { + "id": "task03.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — najpierw zakres, potem commit", + "content_html": "

    Dla wzrostu kod porównuje wielkość z end-current; dla spadku oblicza bezpiecznie moduł także dla PTRDIFF_MIN i porównuje go z current-start. Dopiero po zaliczeniu warunku zapisuje g_c09_break=next.

    ", + "steps": [] + }, + { + "id": "task03.a6", + "kind": "block", + "title": "A6 STATE · AKTYWNE — VALID pozostaje VALID także po odrzuceniu", + "content_html": "

    Break przechodzi przez offsety 0 -> 16 -> 40 -> 40 -> 32 -> 32. Obie porażki są samopętlą stanu: zmienia się wynik operacji, ale nie break. Nie ma przejścia do wartości poniżej start ani powyżej end.

    ", + "steps": [] + }, + { + "id": "task03.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — offsety zamiast niestabilnych adresów", + "content_html": "

    Checkpoint publikuje cztery offsety 40,40,32,32 oraz flagi preserved=1 i bounds=1. Adresy bezwzględne hosta mogą się zmieniać przez ASLR, dlatego dowód porównuje różnice względem startu.

    ", + "steps": [] + }, + { + "id": "task03.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — validate then commit", + "content_html": "

    Wzorzec silnej gwarancji błędu brzmi: najpierw policz bez przepełnienia, następnie sprawdź granice, a dopiero potem zmień jedyny stan. Wskaźnik break pozostaje obserwowalnie niezmieniony po odrzuconej operacji.

    ", + "steps": [] + }, + { + "id": "task03.proof", + "kind": "exercise", + "title": "Przewidywanie → wykonanie → wniosek", + "content_html": "", + "steps": [] + }, + { + "id": "task03.worksheet", + "kind": "block", + "title": "TASK03 · Zapis dowodu ucznia", + "content_html": "

    1. Przewidywanie przed uruchomieniem \\noindent \\noindent 2. Wynik programu hostowego \\noindent \\noindent 3. Wynik RV32I i kod wyjścia \\noindent \\noindent 4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar \\noindent \\noindent

    ", + "steps": [] + } + ] + } + ], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-8-task04", + "index": 8, + "title": "TASK04 — Wyrównany smalloc append-only", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET9/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "", + "tasks": [ + { + "ref": "task04", + "title": "Wyrównany smalloc append-only", + "uuid": "e745e1ea-9494-5b75-9596-816022153237", + "criterion": "Host i Hazard3: header=16, first=32, second=48, delta=32, aligned=1, metadata=1, append=1, reset=1, pass=1 i kod 0. Nagłówki mają sequence 1 i 2; po resecie pierwszy payload wraca pod poprzedni pierwszy adres.", + "conclusion_html": "", + "prompt_html": "

    Dla żądań 1 B i 17 B wyprowadź rozmiar nagłówka, rezerwację po align-up, adres obu payloadów i zmianę break. Wskaż, dlaczego brak c09_sfree jest częścią kontraktu, a reset areny nie jest odpowiednikiem free(pointer).

    ", + "flow": [ + { + "id": "task04.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — API ma celowo małą władzę", + "content_html": "

    Zachowane materiały: src/tasks/task04_smalloc.c, src/runtime/c09_smalloc.c, src/runtime/c09_smalloc.h, src/runtime/c09_bounded_sbrk.c, src/runtime/c09_bounded_sbrk.h. Klient może przydzielić payload i zresetować całą arenę. Nie może zwolnić jednego bloku ani przekazać modelowi wskaźnika do picolibc. c09_smalloc pobiera surowy fragment wyłącznie przez ograniczone c09_sbrk.

    ", + "steps": [] + }, + { + "id": "task04.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — 16 B metadanych bezpośrednio przed payloadem", + "content_html": "

    Nagłówek ma cztery pola uint32_t: magic, requested, reserved i sequence. Jego rozmiar wynosi 16 B. Zwrócony adres to header+1; inspekcja kontrolnie cofa się o dokładnie jeden rzeczywisty nagłówek.

    ", + "steps": [] + }, + { + "id": "task04.a3", + "kind": "block", + "title": "A3 DISPATCH · N/D", + "content_html": "

    N/D. smalloc, inspect, reset i c09_sbrk są zwykłymi wywołaniami bezpośrednimi; przykład nie zawiera callbacku, ISR ani dynamicznie wybieranej strategii.

    ", + "steps": [] + }, + { + "id": "task04.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — geometria dwóch bloków", + "content_html": "

    Żądanie 1 B daje align16(16+1)=32; żądanie 17 B daje align16(16+17)=48. Pierwszy payload leży 16 B od startu, drugi 48 B od startu, więc ich delta wynosi 32 B. Oba adresy są wielokrotnością 16.

    ", + "steps": [] + }, + { + "id": "task04.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — size, align, reserve, header, payload", + "content_html": "

    Kod odrzuca zero i przepełnienie, zaokrągla sumę nagłówka i żądania, sprawdza reprezentowalność jako ptrdiff_t, rezerwuje cały blok jednym c09_sbrk, zapisuje cztery pola nagłówka i dopiero wtedy zwraca payload.

    ", + "steps": [] + }, + { + "id": "task04.a6", + "kind": "block", + "title": "A6 STATE · AKTYWNE — EMPTY, TWO BLOCKS, RESET", + "content_html": "

    Arena przechodzi EMPTY -> seq1 -> seq1+seq2. Brak indywidualnego free oznacza, że break tylko rośnie. c09_smalloc_reset wykonuje jedno przejście z dowolnej zawartości do EMPTY i unieważnia oba wskaźniki naraz.

    ", + "steps": [] + }, + { + "id": "task04.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — pamięć potwierdza header przed payloadem", + "content_html": "

    W checkpointcie odczytaj first-16: słowo magic to 0x534D414C, requested=1, reserved=32, sequence=1. Pod second-16 odpowiednie wartości to 17, 48 i 2. Globale potwierdzają deltę 32 i reset.

    ", + "steps": [] + }, + { + "id": "task04.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — bump allocator z jawną granicą użycia", + "content_html": "

    Append-only arena jest wartościowa dla fazowego scratch storage, gdy wszystkie obiekty mają wspólny czas życia. Nie zastępuje ogólnego malloc: brak selekcji, ponownego użycia pojedynczych luk, split, coalescing i niezależnego free.

    ", + "steps": [] + }, + { + "id": "task04.proof", + "kind": "exercise", + "title": "Przewidywanie → wykonanie → wniosek", + "content_html": "", + "steps": [] + }, + { + "id": "task04.worksheet", + "kind": "block", + "title": "TASK04 · Zapis dowodu ucznia", + "content_html": "

    1. Przewidywanie przed uruchomieniem \\noindent \\noindent 2. Wynik programu hostowego \\noindent \\noindent 3. Wynik RV32I i kod wyjścia \\noindent \\noindent 4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar \\noindent \\noindent

    ", + "steps": [] + } + ] + } + ], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-9-task05", + "index": 9, + "title": "TASK05 — malloc/free picolibc jako czarna skrzynka", + "show_heading": true, + "toc_entry": true, + "header_html": "
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    TITLEsmalloc, sbrk i minimalne libc
    VER.v00.01
    DATETIME2026-07-20T00:00:00+02:00
    PROJECTFreestanding C na RV32I
    SERIESC · Freestanding RV32I and K&R
    CARD09/13
    SHEET10/10
    SUBJ.Inf.
    PROG.
    CORE
    SCOPE
    LEVEL
    POS.
    GITEA UUID47826ae5-6370-5ac2-bd91-9acb89116d40CARD UUID8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0AUTHOR  M. Pabiszczak
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    ", + "left_margin_html": "
    TECH
    ", + "right_margin_html": "
    OG
    ", + "content_html": "", + "tasks": [ + { + "ref": "task05", + "title": "malloc/free picolibc jako czarna skrzynka", + "uuid": "9a7174f1-efb7-5c18-afbe-1a34ee6da0b7", + "criterion": "Host i Hazard3: nonnull=1, delta_nonzero=1, checksum=4612, nonoverlap=1, aligned=1, freed=1, pass=1 i kod 0. Mapa RV32I zawiera libc_stdlib_malloc.c.o, libc_stdlib_free.c.o i libc_misc_picosbrk.c.o. ELF definiuje _sbrk, sbrk, malloc, free, __heap_start i __heap_end.", + "conclusion_html": "", + "prompt_html": "

    Nie zakładając formatu nagłówka libc, wypisz własności możliwe do sprawdzenia przez klienta dwóch przydziałów. Uruchom host i Hazard3, sprawdź checksum oraz mapę, a w ELF wykaż współistnienie vendorowego _sbrk i picolibc sbrk.

    ", + "flow": [ + { + "id": "task05.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — klient nie zna wnętrza picolibc", + "content_html": "

    Zachowane materiały: src/tasks/task05_picolibc_malloc.c, crt0.S, link/hazard3_c09.ld. Kod tasku używa tylko malloc i free. Linker łączy picolibc z platformą przez sbrk oraz symbole granic. Vendorowe _sbrk pozostaje osobnym, nieużywanym przez malloc symbolem startu Hazard3.

    ", + "steps": [] + }, + { + "id": "task05.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — obraz składa się z czterech warstw", + "content_html": "

    ELF zawiera klienta, człony malloc/free, człon picosbrk i platformowy startup. Skrypt linkera dostarcza __heap_start/__heap_end; crt0 ustawia gp/tp i zeruje BSS/TBSS. Mapa pokazuje, który obiekt wniósł każdy publiczny symbol.

    ", + "steps": [] + }, + { + "id": "task05.a3", + "kind": "block", + "title": "A3 DISPATCH · N/D", + "content_html": "

    N/D. Klient wywołuje malloc i free bezpośrednio; badany przebieg nie przekazuje callbacku, nie obsługuje ISR i nie wybiera alokatora przez tablicę funkcji.

    ", + "steps": [] + }, + { + "id": "task05.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — kontrakt dwóch niezależnych payloadów", + "content_html": "

    Program żąda 13 B i 29 B, zapisuje dwie różne sekwencje, sumuje odczytane bajty do 4612 i sprawdza rozłączność półotwartych zakresów adresów. Mierzy co najmniej 8-bajtowe wyrównanie, ale nie narzuca odległości między blokami.

    ", + "steps": [] + }, + { + "id": "task05.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — allocate, use, verify, release", + "content_html": "

    Po dwóch udanych przydziałach kod zapisuje i natychmiast odczytuje oba zakresy, oblicza checksum i warunki adresowe, zwalnia najpierw drugi, potem pierwszy blok, ustawia freed=1 i zatrzymuje się w checkpointcie.

    ", + "steps": [] + }, + { + "id": "task05.a6", + "kind": "block", + "title": "A6 STATE · AKTYWNE — własność payloadu kończy się w free", + "content_html": "

    Każdy wskaźnik przechodzi od braku zasobu do stanu OWNED po udanym malloc, następnie USED po zapisie i RELEASED po free. Program nie dereferencjuje wskaźnika w RELEASED i nie bada, czy następny malloc odzyska ten sam adres.

    ", + "steps": [] + }, + { + "id": "task05.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — wykonanie plus audyt ELF", + "content_html": "

    Hazard3 kończy program kodem 0; globale pokazują checksum 4612, rozłączność, alignment i oba free. nm musi równocześnie pokazać _sbrk oraz sbrk, a mapa trzy człony picolibc związane z malloc, free i dostawcą pamięci.

    ", + "steps": [] + }, + { + "id": "task05.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — test kontraktu bez zgadywania implementacji", + "content_html": "

    Poprawny test czarnej skrzynki wymusza własności API, ale nie zależy od prywatnego nagłówka, kierunku wzrostu sterty, dokładnej delty adresów ani ponownego użycia po free. Dzięki temu pozostaje wartościowy po zmianie implementacji libc.

    ", + "steps": [] + }, + { + "id": "task05.proof", + "kind": "exercise", + "title": "Przewidywanie → wykonanie → wniosek", + "content_html": "", + "steps": [] + }, + { + "id": "task05.worksheet", + "kind": "block", + "title": "TASK05 · Zapis dowodu ucznia", + "content_html": "

    1. Przewidywanie przed uruchomieniem \\noindent \\noindent 2. Wynik programu hostowego \\noindent \\noindent 3. Wynik RV32I i kod wyjścia \\noindent \\noindent 4. Wniosek: reguła języka lub kontrakt targetu potwierdzony przez pomiar \\noindent \\noindent

    ", + "steps": [] + } + ] + } + ], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + } + ], + "viewpoints": [], + "has_spread": false, + "has_allocator_model": false, + "dictionary": null, + "toc": [ + { + "id": "section-1-content", + "label": "1. 1 — Funkcja z libc nie oznacza automatycznie sterty" + }, + { + "id": "section-2-content", + "label": "2. 2 — malloc potrzebuje sbrk, lecz _sbrk to inna nazwa" + }, + { + "id": "section-3-content", + "label": "3. 3 — Od alloc z K&R 5.4 do bounded sbrk i smalloc" + }, + { + "id": "section-4-content", + "label": "4. 4 — Prawdziwe malloc/free jako czarna skrzynka" + }, + { + "id": "section-5-task01", + "label": "5. TASK01 — strlen z libc bez sterty" + }, + { + "id": "section-6-task02", + "label": "6. TASK02 — Kontrolowany brak dostawcy sbrk" + }, + { + "id": "section-7-task03", + "label": "7. TASK03 — Bounded sbrk i atomowy błąd" + }, + { + "id": "section-8-task04", + "label": "8. TASK04 — Wyrównany smalloc append-only" + }, + { + "id": "section-9-task05", + "label": "9. TASK05 — malloc/free picolibc jako czarna skrzynka" + } + ] +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..8f9f9f5 --- /dev/null +++ b/web/index.html @@ -0,0 +1,15 @@ + + + + + + + Karta pracy + + + + +
    + + + diff --git a/web/style.css b/web/style.css new file mode 100644 index 0000000..3b75b2b --- /dev/null +++ b/web/style.css @@ -0,0 +1,39 @@ + +:root{--ink:#111;--muted:#666;--line:#b9b9b9;--line-soft:#dddddd;--paper:#fff;--desk:#eeeeee;--og:#008000;--tech:#d36b00;--kw:#0018c8;--we:#e00000;--viewer-canvas-scale:1;--viewer-content-scale:1} +*{box-sizing:border-box} html{scroll-behavior:smooth} body{margin:0;background:var(--desk);color:var(--ink);font-family:"Latin Modern Roman","LM Roman 12",Georgia,"Times New Roman",serif;line-height:1.25} +.topbar{position:sticky;top:0;z-index:20;background:rgba(245,245,245,.94);border-bottom:1px solid #d0d0d0;padding:3px 0;font-family:system-ui,-apple-system,Segoe UI,sans-serif} +.topbar-inner{width:calc(100% - 8px);max-width:none;margin:0 4px;display:flex;align-items:center;justify-content:space-between;gap:6px}.topbar details{min-width:0;flex:1}.topbar summary{cursor:pointer;font-size:16px;line-height:1.35;font-weight:650}.toc-links{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px}.toc-links a{font-size:16px;color:#333;text-decoration:none;border:1px solid #ccc;background:white;border-radius:3px;padding:2px 5px}.viewer-zoom-controls{display:flex;align-items:center;gap:7px;flex:none}.viewer-zoom-status{font:600 16px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace;color:#444;white-space:nowrap}.viewer-zoom-reset{border:1px solid #bbb;border-radius:3px;background:#fff;color:#333;padding:1px 6px;font:600 16px/1.35 system-ui,-apple-system,Segoe UI,sans-serif;cursor:pointer}.viewer-zoom-reset:hover{background:#eee}.viewer-zoom-reset:focus-visible{outline:2px solid #555;outline-offset:1px} +.paper{padding:18px 12px 44px;overflow-x:auto}.sheet{position:relative;width:210mm;min-height:297mm;margin:0 auto 18px;background:var(--paper);box-shadow:0 2px 12px rgba(0,0,0,.13);display:block;padding:0;overflow:visible;zoom:var(--viewer-canvas-scale)}.sheet-content{position:relative;width:100%;min-height:297mm;padding:13mm 21.5mm 15mm;transform:scale(var(--sheet-effective-scale,1));transform-origin:top left}.resource-header-enabled .sheet-content{padding-top:5mm}.sheet-content>.page-resource-header{margin-bottom:3mm} +@media(max-width:900px){.sheet{height:auto}}@media print{.sheet{height:auto}} +.pdf-main{min-width:0;width:100%}.running-header{display:flex;justify-content:space-between;gap:18px;align-items:flex-end;border-bottom:1px solid #111;padding-bottom:3px;margin-bottom:26px;font-size:15px}.running-header span{white-space:nowrap} +.hero h1{font-size:24px;line-height:1.15;margin:0 0 4px;border-bottom:1px solid #111;padding-bottom:4px}.hero .byline{float:right;margin-top:-31px;font-size:15px} +.meta{clear:both;display:grid;grid-template-columns:148px minmax(0,1fr);gap:4px 18px;padding:34px 0 24px;border-bottom:1px solid #111;font-size:17px}.meta dt{color:#333}.meta dd{margin:0;font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace} +.front-scope{padding:0 0 3mm;border-bottom:1px solid var(--line-soft)}.front-scope h2{font-size:24px;line-height:1.15;margin:0 0 3mm}.front-scope p{font-size:16px} +.scope-table-wrap{margin:3mm 0;overflow:hidden}.scope-table{width:100%;border-collapse:collapse;font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;line-height:1.22}.scope-table th,.scope-table td{border:0;border-bottom:1px solid #888;padding:4px 7px;text-align:left;vertical-align:top}.scope-table th{border-bottom:2px solid #555;background:#f3f3f3;font-weight:700}.scope-table th:first-child,.scope-table td:first-child{width:7%}.scope-table--task th:nth-child(2),.scope-table--task td:nth-child(2){width:11%}.scope-table--task th:nth-child(4),.scope-table--task td:nth-child(4){width:19%}.scope-table--task th:nth-child(5),.scope-table--task td:nth-child(5){width:14%}.scope-table--task th:nth-child(6),.scope-table--task td:nth-child(6){width:10%}.scope-table tr.scope-row--key td{font-weight:700;background:#f4f4f4;border-top:2px solid #111;border-bottom:2px solid #111}.scope-table tr.scope-row--key td:first-child{border-left:2px solid #111}.scope-table tr.scope-row--key td:last-child{border-right:2px solid #111}.scope-table td p{font:inherit;margin:0}.scope-table code{font-size:inherit}.scope-status{display:inline-block;white-space:nowrap;border:1px solid #aaa;border-radius:2px;padding:1px 4px;font-weight:600;background:#f5f5f5}.scope-status[data-status="in-progress"]{border-color:#307da1;background:#eaf5fa;color:#174f69}.scope-status[data-status="ready"]{border-color:#4c7d56;background:#edf6ee;color:#295b33}.scope-status[data-status="draft"],.scope-status[data-status="review"]{border-color:#9a7932;background:#faf4e5;color:#694f16}.scope-status[data-status="blocked"]{border-color:#9c4b4b;background:#faeded;color:#712f2f} +.card-section h2{font-size:24px;line-height:1.15;margin:0 0 4mm}.section-heading{display:flex;align-items:flex-start;gap:0}.section-heading .section-index{font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace;font-size:23px;margin-right:12mm;font-weight:400}.section-heading .section-title{min-width:0}.task-identity{margin-left:auto;padding-left:22px;text-align:right;font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px;line-height:1.25;color:#555;white-space:nowrap}.task-identity strong,.task-identity-name,.task-identity code{display:block}.task-identity strong{font-size:12px;color:#111}.task-identity-name{max-width:240px;overflow:hidden;text-overflow:ellipsis}.task-identity code{font-size:9px;color:#777} +p{font-size:16px;margin:0 0 3mm}.pdf-main ul{font-size:16px;margin:2mm 0 3mm 7mm;padding:0}.pdf-main li{margin:1.2mm 0} +.pdf-margin{position:absolute;top:34mm;width:18mm;font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace;font-size:5px;line-height:1.12;color:#333;max-height:245mm;overflow:hidden}.pdf-margin.left{left:2mm;text-align:left}.pdf-margin.right{right:2mm;text-align:left} +.margin-title{font-weight:700;color:#666;margin-bottom:3px;letter-spacing:.02em}.margin-list{display:flex;flex-direction:column;align-items:flex-start}.margin-tag{display:block;margin:0 0 1px;padding:0;border:0;background:transparent;font:inherit;line-height:inherit;text-align:left;cursor:pointer;margin-left:var(--indent)}.margin-tag.we{color:var(--we)}.margin-tag.og,.margin-tag.tech{color:var(--og)}.margin-tag.kw{color:var(--kw)}.margin-tag .local{color:#777}.margin-tag:hover{text-decoration:underline}.margin-empty{color:#aaa} +.step-map{font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;line-height:1.3;color:#5c5c5c;background:transparent;border:0;border-top:1px solid #cfcfcf;border-bottom:1px solid #e0e0e0;border-radius:0;padding:8px 0;margin:0 0 16px}.step-map summary{cursor:pointer;font-weight:400;color:#555} +.tree-legend{display:flex;flex-wrap:wrap;gap:4px;margin:7px 0}.steps{display:grid;gap:6px}.step-row{border-top:1px dashed #c9c9c9;padding-top:6px}.step-row:first-child{border-top:0}.step-title span{font-weight:700;margin-right:7px}.step-trees{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}.step-refs{display:flex;flex-wrap:wrap;gap:6px;margin-top:3px}.step-refs a{font-size:10px;color:#666} +.tree-token{font:10px/1 "Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace;border:1px solid #c8c8c8;background:#fff;border-radius:3px;padding:3px 5px;cursor:pointer}.tree-token.active{background:#111;color:white;border-color:#111} +.equation{display:grid;grid-template-columns:1fr auto;align-items:center;gap:14px;margin:18px 0;padding:4px 0;background:transparent;border:0}.equation .display{font-size:17px}.equation-number{font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace;font-size:15px} +figure{margin:24px 0;text-align:center}figure img{max-width:100%;display:block;margin:0 auto;border:0;border-radius:0}figcaption{font-size:14px;color:#444;margin-top:8px;text-align:left}.card-asset.asset-screenshot img{border:1px solid #aaa}.card-asset a{display:block;cursor:zoom-in} +.table-wrap{overflow:auto;margin:14px 0}table{border-collapse:collapse;width:100%;font-size:16px}th,td{border:1px solid #111;padding:5px 8px;text-align:left;vertical-align:top}th{font-weight:400;background:white} +.empty-check{display:inline-block;width:1em;height:1em;border:1px solid #111;vertical-align:-.12em}.answer-line,.dotfill{display:block;border-bottom:1px dotted #111;height:1.45em;min-width:10em}.write-row{display:block;min-height:2.8em} +code{font-family:"Latin Modern Mono",ui-monospace,SFMono-Regular,Consolas,monospace}.tasks{font-size:16px}.task-legacy{margin:2.5mm 0}.task-legacy>strong{display:block;font:700 10px/1.2 "Latin Modern Mono",ui-monospace,monospace;color:#555}.task-flow{border:1px solid #222;margin:1mm 0 2mm;background:#fff}.task-flow-header{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:6px;padding:5px 7px;background:#eaeaea;border-bottom:1px solid #222}.task-flow-header span{font:700 10px/1.2 "Latin Modern Mono",ui-monospace,monospace;color:#222}.task-flow-header h3{font-size:18px;margin:0}.task-flow-header code{font-size:8px;color:#555}.task-block{margin:6px 7px;padding:5px 6px;border:1px solid #777;background:#fff}.task-block header,.task-exercise header{display:flex;align-items:baseline;gap:5px;margin-bottom:3px}.task-block header span,.task-exercise header span{font:700 9px/1.2 "Latin Modern Mono",ui-monospace,monospace;text-transform:uppercase;color:#555}.task-block h4,.task-exercise h4{font-size:16px;margin:0}.block-steps{margin:4px 0 0 16px!important;padding:0;display:grid;gap:3px}.block-steps li{margin:0;border:1px solid #b9b9b9;padding:4px 5px;background:#fff}.block-steps li::marker{font-family:"Latin Modern Mono",ui-monospace,monospace;font-weight:700}.block-steps li p:last-child{margin-bottom:0}.task-exercise{margin:6px 7px;border:1px solid #777;border-left:1px solid #222;padding:5px 6px;background:#fafafa}.task-exercise header{flex-wrap:wrap}.exercise-based-on{margin-left:auto;font-size:8px;color:#777}.exercise-evidence{border-top:1px dashed #bbb;margin-top:5px;padding-top:4px}.exercise-evidence>strong{font-size:11px;text-transform:uppercase}.exercise-criterion{font-size:13px;margin:4px 0 0}.task-flow>footer{padding:5px 7px;border-top:1px solid #222;font-size:12px;background:#f6f6f6}.task-conclusion{margin:8px 0;padding:7px 9px;border:1px solid #315f78;background:#f3f9fc}.task-conclusion>strong{display:block;margin-bottom:3px;font:700 10px/1.2 "Latin Modern Mono",ui-monospace,monospace;color:#315f78}.task-conclusion p{margin:0}.we-block{border-top:1px solid #ddd;padding:8px 0}.we-block summary{cursor:pointer}.dictionary-sheet .pdf-margin{display:none} +.inspector{position:fixed;right:14px;bottom:14px;width:min(360px,calc(100vw - 28px));max-height:46vh;overflow:auto;background:white;border:1px solid #cfcfcf;box-shadow:0 4px 18px rgba(0,0,0,.18);border-radius:6px;padding:12px;font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:13px;z-index:30}.inspector h2{font-size:14px;margin:0 0 8px}.inspector .empty{color:#777}.tree-card h3{font-size:15px;margin:6px 0}.tree-card code{display:inline-block;margin:4px 0}.tree-card .line{font-weight:700}.tree-card .line.OG{color:var(--og)}.tree-card .line.TECH{color:var(--tech)}.kw-list{padding-left:18px}.kw-list code{color:var(--kw)} +@media(max-width:900px){.sheet{display:block;min-height:0}.sheet-content{min-height:0;padding:26px 18px}.pdf-margin{position:static;max-height:none;overflow:visible;margin:10px 0;padding:8px;border:1px solid #ddd}.pdf-margin.left{border-left:3px solid var(--tech)}.pdf-margin.right{border-left:3px solid var(--og)}.hero .byline{float:none;margin:0 0 14px}.meta{grid-template-columns:1fr}.section-heading{flex-wrap:wrap}.task-identity{width:100%;padding:6px 0 0}.inspector{position:static;width:auto;max-height:none;margin:0 12px 18px}.topbar{position:sticky;top:0}.viewer-zoom-status{font-size:16px}} +@media print{html,body{background:white}.topbar,.inspector{display:none}.paper{padding:0}.sheet{position:relative;display:block;width:auto;min-height:0;margin:0;box-shadow:none;break-after:page;padding:0;overflow:visible;zoom:1!important}.sheet-content{position:relative;width:auto;min-height:0;padding:0;transform:none!important}.sheet:last-child{break-after:auto}.resource-header-enabled .sheet-content{padding:0}.sheet-content>.page-resource-header,.sheet-content>.page-resource-footer{display:none!important}.pdf-margin{position:absolute;top:0;width:18mm;max-height:none;overflow:hidden;margin:0;padding:0;border:0}.pdf-margin.left{left:-19.5mm}.pdf-margin.right{right:-19.5mm}.task-block,.task-exercise,.block-steps li,figure{break-inside:avoid}} + +.page-resource-header{width:100%;height:24mm;min-height:24mm;max-height:24mm;background:#fff;color:#111;overflow:hidden;font-family:ui-monospace,SFMono-Regular,"Latin Modern Mono",Consolas,monospace;line-height:1.08} +.resource-header-table{width:100%;height:100%;border-collapse:collapse;table-layout:fixed;border:1px solid #111}.resource-header-table>tbody>tr{height:100%}.resource-header-center{height:100%;padding:0;vertical-align:middle;overflow:hidden}.resource-header-grid{display:grid;grid-template-rows:3fr 3fr 3fr 2fr 2fr;width:100%;height:100%}.resource-header-row{display:grid;min-width:0;min-height:0}.resource-header-field{display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;gap:.08mm;min-width:0;padding:.28mm .55mm;border-right:1px solid #888;border-bottom:1px solid #aaa;overflow:hidden;white-space:nowrap}.resource-header-row .resource-header-field:last-child{border-right:0}.resource-header-row:last-child .resource-header-field{border-bottom:0}.resource-header-field a{display:flex;flex-direction:column;align-items:flex-start;gap:.08mm;min-width:0;color:#111;text-decoration:none}.resource-label{align-self:flex-start;font:800 3.2pt/1 ui-monospace,SFMono-Regular,"Latin Modern Mono",Consolas,monospace;text-transform:uppercase;flex:none}.resource-value{align-self:flex-end;max-width:100%;text-align:right;font:700 6.4pt/1 ui-monospace,SFMono-Regular,"Latin Modern Mono",Consolas,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resource-header-field--title .resource-value{font-size:7.7pt;font-weight:800}.resource-header-field--emphasis .resource-value{font-size:6.6pt;font-weight:800}.resource-header-field--compact{gap:.05mm;padding:.2mm .2mm}.resource-header-field--compact .resource-label{font-size:2.85pt}.resource-header-field--compact .resource-value{font-size:4.45pt}.resource-header-field--identity{display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:.15mm;padding:.12mm .45mm;font:700 3.55pt/1.1 ui-monospace,SFMono-Regular,"Latin Modern Mono",Consolas,monospace}.resource-header-field--identity>span{display:flex;align-items:baseline;gap:.3mm;min-width:0}.resource-header-field--identity b{font-weight:800;flex:none}.resource-header-field--identity .resource-identity-value{margin-left:auto;text-align:right}.resource-header-field--identity .resource-author{margin-left:auto;text-align:right}.resource-header-field--url-row{display:flex;align-items:stretch;justify-content:center;padding:.2mm .55mm}.resource-header-field--url-row a{display:block;overflow:hidden;text-overflow:clip;font:700 4.9pt/1.05 ui-monospace,SFMono-Regular,"Latin Modern Mono",Consolas,monospace}.resource-header-field--url-row b{font-weight:800} +.resource-qr-cell{height:100%;padding:0;vertical-align:middle;overflow:hidden}.resource-qr-cell--left{border-right:1px solid #777}.resource-qr-cell--right{border-left:1px solid #777}.resource-qr{box-sizing:border-box;width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:.4mm;color:#333;text-decoration:none}.resource-qr .title-qr{display:block;width:22mm;height:22mm;max-width:22mm;max-height:22mm;flex:none}.resource-qr-empty{text-align:center}.resource-qr-empty span,.resource-qr-empty strong{display:block;font:600 5pt/1.15 ui-monospace,SFMono-Regular,Consolas,monospace} + +@page{ + size:A4; + margin:29mm 21.5mm 5mm; + @top-left{content:"";width:24mm;height:24mm;box-sizing:border-box;padding:0;border:1px solid #111;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:22mm 22mm;vertical-align:middle;text-align:center;font:0/0 sans-serif;color:transparent;background-image:url("data:image/svg+xml;base64,PHN2ZyBjbGFzcz0idGl0bGUtcXIiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iS29kIFFSOiBodHRwczovL3pzbC1naXRlYS5tcGFiaS5wbC9lZHUtaW5mL2xhYi1ydjMyaS1jLXNtYWxsb2Mtc2Jyay1saWJjIiB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHdpZHRoPSc4NS4wMzkxOTZwdCcgaGVpZ2h0PSc4NS4wMzkxOTZwdCcgdmlld0JveD0nLTcyLjAwMDAwNCAtNzIuMDAwMDA0IDg1LjAzOTE5NiA4NS4wMzkxOTYnPgo8ZyBpZD0ncGFnZTEnPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQzLjY1MzYwNScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI1LjYxNDk4OCcgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc1LjMwODM1NicgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTY5LjQyMzA1OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTY5LjQyMzA1OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTY5LjQyMzA1OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQzLjY1MzYwNScgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMy4zNDU4MjQnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc1LjMwODM1NicgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM1LjkyMjc2OScgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScyLjczMTQxMScgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNTkuMTE1Mjc4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQzLjY1MzYwNScgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctNTkuMTE1Mjc4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNTkuMTE1Mjc4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI1LjYxNDk4OCcgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yLjQyMjQ4JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy01My45NjEzODcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNTMuOTYxMzg3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSctNTMuOTYxMzg3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTUzLjk2MTM4NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy01My45NjEzODcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctNTMuOTYxMzg3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLTUzLjk2MTM4NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTkuMTE1Mjc4JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc1LjMwODM1NicgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTMuOTYxMzg3JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI1LjYxNDk4OCcgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE1LjMwNzIwNycgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcuNTc2MzcxJyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjguMTkxOTMzJyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yLjQyMjQ4JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTMuOTYxMzg3JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMy4zNDU4MjQnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTMuOTYxMzg3JyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc1LjMwODM1NicgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUzLjk2MTM4NycgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQzLjY1MzYwNScgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTI4LjE5MTkzMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTI4LjE5MTkzMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTI4LjE5MTkzMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNy44ODUzMDEnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTI1LjYxNDk4OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy0yNS42MTQ5ODgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy0yNS42MTQ5ODgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTI1LjYxNDk4OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy0yNS42MTQ5ODgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTI1LjYxNDk4OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy0yNS42MTQ5ODgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE1LjMwNzIwNycgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNy44ODUzMDEnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01My45NjEzODcnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQzLjY1MzYwNScgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTMuOTYxMzg3JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjguMTkxOTMzJyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI1LjYxNDk4OCcgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTkuMTE1Mjc4JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMy4zNDU4MjQnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUzLjk2MTM4NycgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMy4zNDU4MjQnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yLjQyMjQ4JyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTkuMTE1Mjc4JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMy4zNDU4MjQnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yLjQyMjQ4JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM1LjkyMjc2OScgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI1LjYxNDk4OCcgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNy44ODUzMDEnIHk9Jy03LjU3NjM3MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI1LjYxNDk4OCcgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTIuNDIyNDgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTIuNDIyNDgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTIuNDIyNDgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcuNTc2MzcxJyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMy4zNDU4MjQnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjguMTkxOTMzJyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9JzcuODg1MzAxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9JzcuODg1MzAxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9JzcuODg1MzAxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE1LjMwNzIwNycgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9JzcuODg1MzAxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTkuMTE1Mjc4JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nMTAuNDYyMjQ3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPC9nPgo8L3N2Zz4=")} + @top-center{content:" TITLE VER. DATETIME \A \A smalloc, sbrk i minimalne libc v00.01 2026-07-20T00:00:00+02:00 \A PROJECT SERIES CARD SHEET \A \A Freestanding C na RV32I C · Freestanding RV32I and K&R 09/13 " counter(page) "/" counter(pages) " \A SUBJ. PROG. CORE SCOPE LEVEL POS. GITEA UUID 47826ae5-6370-5ac2-bd91-9acb89116d40\A CARD UUID 8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0 AUTHOR M. Pabiszczak\A Inf. — — — — — \A \A GITEA https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-smalloc-sbrk-libc \A \A HTML https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0 ";width:119mm;height:24mm;box-sizing:border-box;padding:.2mm .7mm 0;border-block:1px solid #111;background-color:#fff;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMTkgMjQiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPjxyZWN0IHdpZHRoPSIxMTkiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+PHBhdGggZD0iTTAgNS41Mzg0NkgxMTkgTTAgMTEuMDc2OUgxMTkgTTAgMTYuNjE1NEgxMTkgTTAgMjAuMzA3N0gxMTkgTTU5LjUgMFY1LjUzODQ2IE03Ny41IDBWNS41Mzg0NiBNNTkuNSA1LjUzODQ2VjExLjA3NjkgTTg5LjUgNS41Mzg0NlYxMS4wNzY5IE0xMDYuNSA1LjUzODQ2VjExLjA3NjkgTTcgMTEuMDc2OVYxNi42MTU0IE0xMyAxMS4wNzY5VjE2LjYxNTQgTTMwLjUgMTEuMDc2OVYxNi42MTU0IE00MS41IDExLjA3NjlWMTYuNjE1NCBNNTAuNSAxMS4wNzY5VjE2LjYxNTQgTTU5LjUgMTEuMDc2OVYxNi42MTU0IiBmaWxsPSJub25lIiBzdHJva2U9IiM4ODgiIHN0cm9rZS13aWR0aD0iMC4xNCIvPjwvc3ZnPg==");background-repeat:no-repeat;background-position:center;background-size:100% 100%;white-space:pre;vertical-align:top;text-align:left;font:700 5.2px/1.81538mm ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:-.02px;color:#111;overflow:hidden} + @top-right{content:"";width:24mm;height:24mm;box-sizing:border-box;padding:0;border:1px solid #111;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:22mm 22mm;vertical-align:middle;text-align:center;font:0/0 sans-serif;color:transparent;background-image:url("data:image/svg+xml;base64,PHN2ZyBjbGFzcz0idGl0bGUtcXIiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iS29kIFFSOiBodHRwczovL2RjZTdmYjlkLTdiMmYtNWQ0OS05NmEyLTNhMzBkMzA3MGI4NC5tcGFiaS5wbC84ZTRmOGJlZS00MWYwLTUyM2ItOGVhMi04OTI2YmQzZDdhYjAiIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9Jzg1LjAzOTIyN3B0JyBoZWlnaHQ9Jzg1LjAzOTIyN3B0JyB2aWV3Qm94PSctNzIuMDAwMDA0IC03Mi4wMDAwMDQgODUuMDM5MjI3IDg1LjAzOTIyNyc+CjxnIGlkPSdwYWdlMSc+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0uNzUwOTIyJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy02OS43MDE2NDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy02OS43MDE2NDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy02OS43MDE2NDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYyLjgwNjU3NCcgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzUuMjI2Mjg1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yNi4wMzI4NTUnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTU1LjkxMTUwMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy01NS45MTE1MDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTU1LjkxMTUwMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy01NS45MTE1MDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02OS43MDE2NDcnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU1LjkxMTUwMicgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ2LjcxODA3MicgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTUuOTExNTAyJyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yOC4zMzEyMTInIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMyLjkyNzkyNycgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy00Mi4xMjEzNTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy00Mi4xMjEzNTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yOC4zMzEyMTInIHk9Jy00Mi4xMjEzNTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01LjM0NzYzNycgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9Jy00Mi4xMjEzNTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02MC41MDgyMTcnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTUuOTExNTAyJyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNy42NDU5OTUnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01LjM0NzYzNycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzUuMjI2Mjg1JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMyLjkyNzkyNycgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yOC4zMzEyMTInIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU1LjkxMTUwMicgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctMzAuNjI5NTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy0zMC42Mjk1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctMzAuNjI5NTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0zMC42Mjk1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02OS43MDE2NDcnIHk9Jy0yOC4zMzEyMTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU1LjkxMTUwMicgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9Jy0yOC4zMzEyMTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy0yOC4zMzEyMTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0uNzUwOTIyJyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02MC41MDgyMTcnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU1LjkxMTUwMicgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02MC41MDgyMTcnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTUuOTExNTAyJyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02OS43MDE2NDcnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yOC4zMzEyMTInIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU1LjkxMTUwMicgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02MC41MDgyMTcnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yNi4wMzI4NTUnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctOS45NDQzNTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctOS45NDQzNTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTUuOTExNTAyJyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzUuMjI2Mjg1JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNC41NDEwNjcnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTUuMzQ3NjM3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTUuMzQ3NjM3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy01LjM0NzYzNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTUuMzQ3NjM3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy01LjM0NzYzNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYyLjgwNjU3NCcgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNy42NDU5OTUnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0uNzUwOTIyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy0uNzUwOTIyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy0uNzUwOTIyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy0uNzUwOTIyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNC41NDEwNjcnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yOC4zMzEyMTInIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNy42NDU5OTUnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjwvZz4KPC9zdmc+")} +}