From 8820c2a22efb6aff6f6a9c47d136c55d4e499ae7 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-interrupts card --- .gitignore | 8 + Makefile | 54 + README.md | 18 + crt0.S | 22 + doc/generated/main.tex | 472 +++ doc/generated/main.upb | 0 ...1-ec04ecee-1c4d-529a-a4e2-d3f9b40700ec.pdf | Bin 0 -> 255530 bytes json/card_source.json | 667 +++++ json/card_spec.json | 109 + link/hazard3_c10.ld | 48 + scripts/render_card_layouts.sh | 7 + scripts/render_new_pdf.sh | 11 + src/tasks/c10_common.h | 61 + src/tasks/task01_ecall_resume.c | 41 + src/tasks/task02_machine_software_irq.c | 55 + src/tasks/task03_pending_enable_matrix.c | 62 + tests/test_card.sh | 49 + tests/test_hazard3.sh | 66 + web/app.css | 1 + web/app.js | 61 + web/card-data.json | 2567 +++++++++++++++++ web/index.html | 15 + web/style.css | 39 + 23 files changed, 4433 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.tex create mode 100644 doc/generated/main.upb create mode 100644 doc/pdf/mpabi-inf-c-10-traps-interrupt-control-v00.01-ec04ecee-1c4d-529a-a4e2-d3f9b40700ec.pdf create mode 100644 json/card_source.json create mode 100644 json/card_spec.json create mode 100644 link/hazard3_c10.ld create mode 100755 scripts/render_card_layouts.sh create mode 100755 scripts/render_new_pdf.sh create mode 100644 src/tasks/c10_common.h create mode 100644 src/tasks/task01_ecall_resume.c create mode 100644 src/tasks/task02_machine_software_irq.c create mode 100644 src/tasks/task03_pending_enable_matrix.c create mode 100755 tests/test_card.sh create mode 100755 tests/test_hazard3.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..9c25a1c --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +build/ +doc/generated/*.aux +doc/generated/*.fdb_latexmk +doc/generated/*.fls +doc/generated/*.log +doc/generated/*.out +doc/generated/*.pdf +doc/generated/*.upa diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a99de63 --- /dev/null +++ b/Makefile @@ -0,0 +1,54 @@ +RISCV_PREFIX ?= riscv64-unknown-elf- +CC := $(RISCV_PREFIX)gcc +OBJCOPY := $(RISCV_PREFIX)objcopy +OBJDUMP := $(RISCV_PREFIX)objdump +SIZE := $(RISCV_PREFIX)size + +RV_ENV_ROOT ?= /home/user/dev/edu/rv32i-hazard3-student-env +H3_COMMON ?= $(RV_ENV_ROOT)/vendor/Hazard3/test/sim/common +H3_INIT ?= $(H3_COMMON)/init.S +LDSCRIPT ?= link/hazard3_c10.ld +MEMOPS ?= $(RV_ENV_ROOT)/vendor/lab-runtime/memops.c + +BUILD_ROOT ?= build +TASKS := task01_ecall_resume task02_machine_software_irq task03_pending_enable_matrix +ARCH ?= rv32i_zicsr_zifencei +ABI ?= ilp32 +CFLAGS := -std=gnu11 -march=$(ARCH) -mabi=$(ABI) -nostdlib -nostartfiles \ + -ffreestanding -fno-builtin -fno-stack-protector -fno-pic -mno-relax \ + -O0 -g3 -Wall -Wextra -Isrc/tasks -isystem $(H3_COMMON) +LDFLAGS := -Wl,--no-relax -T$(LDSCRIPT) +LIBS := -lgcc + +.PHONY: all tasks check clean task1 task2 task3 +all: tasks +tasks: $(TASKS) +task1: $(word 1,$(TASKS)) +task2: $(word 2,$(TASKS)) +task3: $(word 3,$(TASKS)) + +check: + @test -f "$(H3_INIT)" + @test -f "$(LDSCRIPT)" + @test -f "$(MEMOPS)" + +define TASK_RULES +$(1): $(BUILD_ROOT)/$(1)/prog.bin $(BUILD_ROOT)/$(1)/prog.lst + +$(BUILD_ROOT)/$(1)/prog.elf: crt0.S src/tasks/$(1).c src/tasks/c10_common.h $(H3_INIT) $(LDSCRIPT) $(MEMOPS) | check + mkdir -p $$(@D) + $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-Map,$(BUILD_ROOT)/$(1)/prog.map \ + -o $$@ $(H3_INIT) crt0.S $(MEMOPS) src/tasks/$(1).c $(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 $$< > $$@ +endef + +$(foreach task,$(TASKS),$(eval $(call TASK_RULES,$(task)))) + +clean: + rm -rf $(BUILD_ROOT) diff --git a/README.md b/README.md new file mode 100644 index 0000000..f75f768 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# C10 — pułapki i sterowanie przerwaniami RV32I + +Trzy obrazy pokazują kolejno: + +1. synchroniczny `ecall`, `mepc + 4` i wznowienie przez `mret`; +2. machine software interrupt z kontrolowanym pending; +3. macierz: źródło pending, `mie.MSIE` i `mstatus.MIE`. + +`set_softirq` jest kontrolowanym źródłem testbench, dzięki czemu karta nie +miesza jeszcze sterownika peryferium z mechanizmem pułapki. C12 i C13 dodają +UART i GPIO jako rzeczywiste źródła external IRQ modelu. + +```bash +make tasks +./tests/test_hazard3.sh +./scripts/render_card_layouts.sh +GITEA_SHA=0000000000000000000000000000000000000000 ./scripts/render_new_pdf.sh +``` diff --git a/crt0.S b/crt0.S new file mode 100644 index 0000000..1004d2f --- /dev/null +++ b/crt0.S @@ -0,0 +1,22 @@ + .text + .global _start + .type _start, @function + +_start: +.option push +.option norelax + la gp, __global_pointer$ +.option pop + + la a0, __bss_start + la a1, __bss_end +1: + bgeu a0, a1, 2f + sb zero, 0(a0) + addi a0, a0, 1 + j 1b +2: + call main + tail _exit + + .size _start, .-_start diff --git a/doc/generated/main.tex b/doc/generated/main.tex new file mode 100644 index 0000000..35ccb61 --- /dev/null +++ b/doc/generated/main.tex @@ -0,0 +1,472 @@ +% 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}{10} +\newcommand{\CardCount}{13} +\newcommand{\CardSlug}{traps-interrupt-control} +\newcommand{\CardVersion}{v00.01} +\newcommand{\DocumentUUID}{ec04ecee-1c4d-529a-a4e2-d3f9b40700ec} + +\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-interrupts}{\qrcode[level=L,height=22mm]{https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-interrupts}}% + \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 Pułapki i sterowanie przerwaniami RV32I}\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 10/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 ec04ecee-1c4d-529a-a4e2-d3f9b40700ec}\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 8fb9c110-557b-5081-8ae2-a56800f872e8}\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-interrupts}{\nolinkurl{https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-interrupts}}}} \\% + \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/8fb9c110-557b-5081-8ae2-a56800f872e8}{\nolinkurl{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8fb9c110-557b-5081-8ae2-a56800f872e8}}}} \\% + \end{tabularx}% + \end{minipage}% + \vrule width0.35pt% + \begin{minipage}[c][23mm][c]{24mm}\centering% + \href{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8fb9c110-557b-5081-8ae2-a56800f872e8}{\qrcode[level=L,height=22mm]{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8fb9c110-557b-5081-8ae2-a56800f872e8}}% + \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ń uruchamia trzy obrazy Hazard3 i wiąże raporty runtime z instrukcjami ecall, CSR,\textCR wektorami i mret.}}\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ń osobno zapisuje źródło zdarzenia, mcause, mepc, stan pending, obie bramki enable i\textCR efekt po mret.}}\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ń odróżnia synchroniczny wyjątek od asynchronicznego przerwania, wyprowadza adres wznowienia z mepc oraz dowodzi, że samo pending nie wystarcza bez indywidualnej i globalnej bramki enable. + +\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} +Trzy obrazy RV32I działają na rzeczywistym modelu Hazard3. Task01 wykonuje \texttt{ecall}; Task02 używa kontrolowanego machine software interrupt; Task03 mierzy macierz pending, \texttt{mie.MSIE} i \texttt{mstatus.MIE}. Peryferia pojawiają się dopiero w C12 i C13.\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{Typ} & \textbf{Task} & \textbf{Idea} & \textbf{Waga} \\ \hline +\hline +\textbf{\texttt{ECALL}} & \textbf{\texttt{Task01}} & \textbf{synchroniczny cause 11, mepc i mret} & \textbf{kluczowe} \\ \hline +\hline +\textbf{\texttt{MSIP}} & \textbf{\texttt{Task02}} & \textbf{MSIP, MSIE, MIE, vector 3 i mret} & \textbf{kluczowe} \\ \hline +\hline +\textbf{\texttt{GATE}} & \textbf{\texttt{Task03}} & \textbf{to samo źródło, dwie niezależne bramki} & \textbf{kluczowe} \\ \hline +\end{tabularx} +\normalsize + + +\vspace{0.8em} +\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}} + +\clearpage + +\ESCSectionBlockStart +\section{1 — Wyjątek synchroniczny wskazuje instrukcję} +\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] + + +\texttt{ecall} jest wykonywany przez bieżący strumień instrukcji, więc \texttt{mcause=11} nie ma ustawionego bitu interrupt, a \texttt{mepc} wskazuje samo \texttt{ecall}. Handler Task01 świadomie zapisuje \texttt{mepc+4}; bez tego \texttt{mret} wykonałby ponownie tę samą instrukcję. Taka polityka jest poprawna dla tego kontrolowanego ECALL, ale nie wolno automatycznie pomijać instrukcji przy każdym błędzie. +\ESCSectionBlockEnd + +\ESCSectionBlockStart +\section{2 — Software IRQ jest asynchronicznym źródłem poziomowym} +\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] + + +Testbench ustawia MSIP hart0, a rdzeń widzi \texttt{mip.MSIP}. Dostarczenie wymaga dodatkowo \texttt{mie.MSIE=1} i \texttt{mstatus.MIE=1}. Wektor 3 prowadzi do \texttt{isr\_machine\_softirq}; handler odczytuje \texttt{mcause=0x80000003}, usuwa źródło i dopiero potem publikuje licznik. \texttt{mret} wraca do przerwanego kodu, a nie do instrukcji wybranej ręcznie przez aplikację. +\ESCSectionBlockEnd + +\ESCSectionBlockStart +\section{3 — Pending i enable odpowiadają na inne pytania} +\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] + + +Pending mówi, że źródło żąda obsługi. \texttt{mie.MSIE} dopuszcza konkretną klasę, a \texttt{mstatus.MIE} otwiera globalną bramkę machine mode. Task03 utrzymuje to samo pending i kolejno sprawdza dwa stany z jedną zamkniętą bramką oraz stan z obiema otwartymi. Dzięki temu kod 0 dowodzi całej macierzy, a nie tylko tego, że ISR kiedyś się wykonał. +\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 · ECALL i wznowienie pod mepc+4} +{\scriptsize\ttfamily 2cd1da12-b916-5def-b868-da4b13ff9089}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — kontrolowany wyjątek M-mode} +\textbf{Zachowany przykład:} \nolinkurl{src/tasks/task01_ecall_resume.c}.\par Granica zaczyna się na instrukcji \texttt{ecall} w main i kończy po powrocie do kolejnej instrukcji. Nie ma zewnętrznego peryferium ani pending IRQ; rdzeń sam tworzy synchroniczną pułapkę. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — mcause, mepc i mtvec} +\texttt{mcause} zapisuje klasę 11 bez bitu interrupt, \texttt{mepc} zapisuje adres ECALL, a baza \texttt{mtvec} prowadzi wszystkie synchroniczne wyjątki do \texttt{handle\_exception}. Handler publikuje oryginał i osobny adres wznowienia. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · AKTYWNE — synchroniczny slot mtvec} +Sprzęt wybiera bazowy slot wektora, ponieważ zdarzenie jest wyjątkiem, nie IRQ. \texttt{handle\_exception} odczytuje mcause i obsługuje jedyny dopuszczony przypadek ECALL. To granica trap dispatch, choć nie ma tablicy callbacków. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — cause 11 i stały krok 4} +ECALL w RV32I jest instrukcją 32-bitową, dlatego dla tego przykładu poprawny resume ma wartość \texttt{mepc+4}. Gate wymaga jednego wejścia, cause 11, delty 4 i ustawienia resumed dopiero po mret. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — ecall, save, patch, mret} +Normalny kod wykonuje ECALL. Rdzeń zapisuje mepc/mcause, skacze do wektora, handler odczytuje oba CSR i zapisuje nowe mepc. Epilog \texttt{interrupt("machine")} kończy się mret; dopiero potem main zapisuje resumed. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · AKTYWNE — RUNNING, TRAP, RESUMED} +Stan przechodzi \texttt{RUNNING -> TRAP(mepc=ecall,cause=11) -> RESUMED(pc=mepc+4)}. Licznik 1 odróżnia pojedyncze wznowienie od pętli ponownego wykonywania ECALL. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — ecall i mret w ELF} +Oracle porównuje raportowane adresy i niezależnie wymaga różnicy 4. Objdump musi pokazać \texttt{ecall} w main oraz \texttt{mret} w handlerze. Segmenty LOAD pozostają rozdzielone R-X/R-W. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — explicit resume policy} +Wzorzec handlera wyjątku obejmuje jawną decyzję: retry, skip albo terminate. Task01 wybiera skip tylko dla znanego ECALL. Dla faultu pamięci bezwarunkowe mepc+4 mogłoby ukryć błąd i jest niedozwolone. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Przed uruchomieniem przewidź bit interrupt i kod mcause, wskaż wartość mepc oraz adres wznowienia. Wyjaśnij, co stałoby się bez zapisu mepc+4. +\par\textbf{Evidence:} Adres ecall i dwa adresy mepc z raportu/listingu, cause 11, instrukcja mret oraz kod wyjścia Hazard3. +\par\textbf{Acceptance:} Hazard3: count=1, mcause=0x0000000b, resume\_pc-mepc=4, resumed=1, pass=1 i kod 0. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK01 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. mcause, mepc i adres wznowienia}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. ecall/mret w listingu 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 · Machine software IRQ i clear źródła} +{\scriptsize\ttfamily a4b503ba-cacc-5af1-9ecd-31f51563ca76}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — kontrolowane źródło bez peryferium} +\textbf{Zachowany przykład:} \nolinkurl{src/tasks/task02_machine_software_irq.c}.\par \texttt{tb\_set\_softirq(0)} podnosi machine software interrupt hart0. Testbench jest źródłem, CSR są kontrolą rdzenia, ISR usuwa żądanie, a main ocenia wznowienie. UART/GPIO nie uczestniczą. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — trzy bity i jeden wektor} +Źródło jest widoczne jako \texttt{mip.MSIP}; indywidualna bramka to \texttt{mie.MSIE}, globalna to \texttt{mstatus.MIE}. Cause 3 w trybie vectored wybiera slot 3 i symbol \texttt{isr\_machine\_softirq}. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · AKTYWNE — sprzęt wybiera vector 3} +Bit interrupt w mcause i kod 3 powodują sprzętowy wybór slotu machine software IRQ. Nie jest to statyczne jal z main. Po wejściu symbol handlera jest już określony przez wektor, a mret odtwarza przerwany kontekst. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — pending 1 do 0} +Przy MSIE=1 i MIE=0 źródło jest już pending, lecz licznik wynosi 0. Po otwarciu MIE handler widzi \texttt{0x80000003} i pending=1, wykonuje clear, zwiększa licznik, a po mret main mierzy pending=0. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — configure, assert, observe, enable} +Kolejność eliminuje wyścig pomiaru: najpierw wyłącz wszystko, ustaw MSIE, podnieś źródło, zmierz pending, dopiero potem ustaw MIE. Handler odczytuje cause/pending przed clear i publikuje licznik po clear. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · AKTYWNE — MASKED\_PENDING, ACTIVE, CLEARED} +Źródło przechodzi do \texttt{MASKED\_PENDING}, bo globalna bramka jest zamknięta. Po MIE staje się ACTIVE; clear w ISR tworzy CLEARED. Resumed=1 jest osobnym stanem normalnego kodu po mret. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — cause z bitem 31} +Wartość \texttt{0x80000003} łączy bit interrupt i kod 3. Listing ma pokazać CSR dla mie/mstatus/mip, dostęp do testbench clear oraz mret. Oracle wymaga całego śladu, nie tylko pass. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — clear level source before publish} +Źródło poziomowe usuwa się przed opublikowaniem ukończenia ISR. Gdyby licznik wzrósł bez clear, po mret żądanie pozostałoby aktywne i handler mógłby wejść ponownie. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Zapisz stan pending przed globalnym enable, mcause w ISR i pending po clear. Rozdziel źródło MSIP od obu bramek oraz wskaż, dlaczego handler musi usunąć źródło przed mret. +\par\textbf{Evidence:} Ślad źródło→pending→MSIE/MIE→vector 3→ISR→clear→mret, raport globali i kod wyjścia Hazard3. +\par\textbf{Acceptance:} Hazard3: count=1, mcause=0x80000003, pending\_before=1, pending\_in\_handler=1, pending\_after=0, resumed=1, pass=1 i kod 0. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK02 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. Pending i bramki przed wejściem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. mcause, clear, mret i wznowienie}\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 · Macierz pending, MSIE i MIE} +{\scriptsize\ttfamily f56dba83-f7a9-5643-8f2e-84df1e8a2190}\par +\begin{ESCBlockFrame}{A1 CONTEXT · AKTYWNE — jedna zmienna, dwie kontrolki} +\textbf{Zachowany przykład:} \nolinkurl{src/tasks/task03_pending_enable_matrix.c}.\par Bodziec MSIP pozostaje ten sam podczas dwóch prób blokowanych i próby dostarczonej. Przykład zmienia wyłącznie bramki rdzenia, więc nie myli nowego zdarzenia z nową konfiguracją. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A2 STRUCTURE · AKTYWNE — macierz 1×2×2} +Oś danych to pending=1. Dwie osie sterujące to MSIE i MIE. Cztery kombinacje mają jeden stan dostarczalny: oba bity 1. Przykład mierzy trzy istotne wiersze przy utrzymanym pending. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A3 DISPATCH · AKTYWNE — wejście dopiero dla 1/1} +Sprzętowy dispatch do vector 3 nie zachodzi przy żadnej pojedynczej otwartej bramce. Dopiero MSIE=1 i MIE=1 pozwalają utworzyć trap, zapisać cause i wejść do ISR kończącego się mret. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A4 APPLICATION · AKTYWNE — dwa razy blocked, raz delivered} +Przy MIE=1/MSIE=0 licznik zostaje 0. Przy MIE=0/MSIE=1 również zostaje 0. Przy obu równych 1 rośnie dokładnie do 1, mcause ma wartość 0x80000003, a clear zeruje pending. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A5 FLOW · AKTYWNE — nie zmieniaj źródła między próbami} +Program podnosi MSIP raz, następnie testuje global-only, individual-only i both. Globalny bit jest zamykany przed zmianą MSIE, aby dostarczenie nie zaszło między pomiarem a zapisaniem wyniku. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A6 STATE · AKTYWNE — P10, P01, P11, CLEAR} +Skrót \texttt{Pxy} oznacza pending=1, MSIE=x, MIE=y. Ślad to \texttt{P01(blocked) -> P10(blocked) -> P11(active) -> CLEAR}. Licznik zmienia się tylko na trzeciej krawędzi. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A7 RUNTIME · AKTYWNE — odczyt mip, zapisy mie/mstatus} +Raport utrwala trzy decyzje i cause. Listing rozdziela \texttt{csrs/csrc mie}, \texttt{csrs/csrc mstatus} oraz odczyt mip. Objdump niezależnie potwierdza mret w ISR. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{A8 PATTERNS · AKTYWNE — source, individual, global gate} +Trzywarstwowy model zapobiega typowemu błędowi: pending nie znaczy delivered. Ten sam wzorzec wróci dla MTIP/MTIE oraz external IRQ z enable peryferium, kontrolera i globalnym MIE. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{Ćwiczenie · Przewidywanie → wykonanie → wniosek} +Wypełnij trzy wiersze: pending=1 z samym MIE, pending=1 z samym MSIE oraz pending=1 z obiema bramkami. Przewidź licznik ISR i końcowy pending. +\par\textbf{Evidence:} Tabela prawdy dwóch bramek dla jednego utrzymywanego pending, licznik ISR, końcowy clear, mret i kod wyjścia Hazard3. +\par\textbf{Acceptance:} Hazard3: pending=1, blocked\_no\_msie=1, blocked\_no\_mie=1, delivered\_both=1, count=1, mcause=0x80000003, pending\_after=0, pass=1 i kod 0. +\end{ESCBlockFrame} +\begin{ESCBlockFrame}{TASK03 · Zapis dowodu ucznia} +\textbf{1. Przewidywanie przed uruchomieniem}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{2. Macierz pending/MSIE/MIE}\par\noindent\dotfill\par\noindent\dotfill\par\textbf{3. Dostarczenie, clear 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-10-traps-interrupt-control-v00.01-ec04ecee-1c4d-529a-a4e2-d3f9b40700ec.pdf b/doc/pdf/mpabi-inf-c-10-traps-interrupt-control-v00.01-ec04ecee-1c4d-529a-a4e2-d3f9b40700ec.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9697d054c913733b426ed66679bd6aa05cd304d4 GIT binary patch literal 255530 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ᕲO0j*_j-iiBS5f`dYfjE@17LZ11TJS4jyI1 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
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
TITLEPułapki i sterowanie przerwaniami RV32I
VER.v00.01
DATETIME2026-07-20T00:00:00+02:00
PROJECTFreestanding C na RV32I
SERIESC · Freestanding RV32I and K&R
CARD10/13
SHEET1/7
SUBJ.Inf.
PROG.
CORE
SCOPE
LEVEL
POS.
GITEA UUIDec04ecee-1c4d-529a-a4e2-d3f9b40700ecCARD UUID8fb9c110-557b-5081-8ae2-a56800f872e8AUTHOR  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
", + "left_margin_html": "
TECH
", + "right_margin_html": "
OG
", + "goal_title": "Cel karty", + "goal_html": "

Uczeń odróżnia synchroniczny wyjątek od asynchronicznego przerwania, wyprowadza adres wznowienia z mepc oraz dowodzi, że samo pending nie wystarcza bez indywidualnej i globalnej bramki enable.

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

Trzy obrazy RV32I działają na rzeczywistym modelu Hazard3. Task01 wykonuje ecall; Task02 używa kontrolowanego machine software interrupt; Task03 mierzy macierz pending, mie.MSIE i mstatus.MIE. Peryferia pojawiają się dopiero w C12 i C13. 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": [ + "Typ", + "Task", + "Idea", + "Waga" + ], + "scope_rows": [ + { + "chapter": "ECALL", + "task": "Task01", + "idea_html": "

synchroniczny cause 11, mepc i mret

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

MSIP, MSIE, MIE, vector 3 i mret

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

to samo źródło, dwie niezależne bramki

", + "priority": "kluczowe", + "status": "", + "status_label": "", + "version": "", + "key": true + } + ] + }, + "sections": [ + { + "id": "section-1-content", + "index": 1, + "title": "1 — Wyjątek synchroniczny wskazuje instrukcję", + "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
TITLEPułapki i sterowanie przerwaniami RV32I
VER.v00.01
DATETIME2026-07-20T00:00:00+02:00
PROJECTFreestanding C na RV32I
SERIESC · Freestanding RV32I and K&R
CARD10/13
SHEET2/7
SUBJ.Inf.
PROG.
CORE
SCOPE
LEVEL
POS.
GITEA UUIDec04ecee-1c4d-529a-a4e2-d3f9b40700ecCARD UUID8fb9c110-557b-5081-8ae2-a56800f872e8AUTHOR  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
", + "left_margin_html": "
TECH
", + "right_margin_html": "
OG
", + "content_html": "

ecall jest wykonywany przez bieżący strumień instrukcji, więc mcause=11 nie ma ustawionego bitu interrupt, a mepc wskazuje samo ecall. Handler Task01 świadomie zapisuje mepc+4; bez tego mret wykonałby ponownie tę samą instrukcję. Taka polityka jest poprawna dla tego kontrolowanego ECALL, ale nie wolno automatycznie pomijać instrukcji przy każdym błędzie.

", + "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 — Software IRQ jest asynchronicznym źródłem poziomowym", + "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
TITLEPułapki i sterowanie przerwaniami RV32I
VER.v00.01
DATETIME2026-07-20T00:00:00+02:00
PROJECTFreestanding C na RV32I
SERIESC · Freestanding RV32I and K&R
CARD10/13
SHEET3/7
SUBJ.Inf.
PROG.
CORE
SCOPE
LEVEL
POS.
GITEA UUIDec04ecee-1c4d-529a-a4e2-d3f9b40700ecCARD UUID8fb9c110-557b-5081-8ae2-a56800f872e8AUTHOR  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
", + "left_margin_html": "
TECH
", + "right_margin_html": "
OG
", + "content_html": "

Testbench ustawia MSIP hart0, a rdzeń widzi mip.MSIP. Dostarczenie wymaga dodatkowo mie.MSIE=1 i mstatus.MIE=1. Wektor 3 prowadzi do isr_machine_softirq; handler odczytuje mcause=0x80000003, usuwa źródło i dopiero potem publikuje licznik. mret wraca do przerwanego kodu, a nie do instrukcji wybranej ręcznie przez aplikację.

", + "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 — Pending i enable odpowiadają na inne pytania", + "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
TITLEPułapki i sterowanie przerwaniami RV32I
VER.v00.01
DATETIME2026-07-20T00:00:00+02:00
PROJECTFreestanding C na RV32I
SERIESC · Freestanding RV32I and K&R
CARD10/13
SHEET4/7
SUBJ.Inf.
PROG.
CORE
SCOPE
LEVEL
POS.
GITEA UUIDec04ecee-1c4d-529a-a4e2-d3f9b40700ecCARD UUID8fb9c110-557b-5081-8ae2-a56800f872e8AUTHOR  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
", + "left_margin_html": "
TECH
", + "right_margin_html": "
OG
", + "content_html": "

Pending mówi, że źródło żąda obsługi. mie.MSIE dopuszcza konkretną klasę, a mstatus.MIE otwiera globalną bramkę machine mode. Task03 utrzymuje to samo pending i kolejno sprawdza dwa stany z jedną zamkniętą bramką oraz stan z obiema otwartymi. Dzięki temu kod 0 dowodzi całej macierzy, a nie tylko tego, że ISR kiedyś się wykonał.

", + "tasks": [], + "assets": [], + "steps": [], + "spread_group": "", + "spread_label": "", + "spread_columns": 1, + "spread_index": 1, + "spread_count": 1, + "page_orientation": "portrait" + }, + { + "id": "section-4-task01", + "index": 4, + "title": "TASK01 — ECALL i wznowienie pod mepc+4", + "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
TITLEPułapki i sterowanie przerwaniami RV32I
VER.v00.01
DATETIME2026-07-20T00:00:00+02:00
PROJECTFreestanding C na RV32I
SERIESC · Freestanding RV32I and K&R
CARD10/13
SHEET5/7
SUBJ.Inf.
PROG.
CORE
SCOPE
LEVEL
POS.
GITEA UUIDec04ecee-1c4d-529a-a4e2-d3f9b40700ecCARD UUID8fb9c110-557b-5081-8ae2-a56800f872e8AUTHOR  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
", + "left_margin_html": "
TECH
", + "right_margin_html": "
OG
", + "content_html": "", + "tasks": [ + { + "ref": "task01", + "title": "ECALL i wznowienie pod mepc+4", + "uuid": "2cd1da12-b916-5def-b868-da4b13ff9089", + "criterion": "Hazard3: count=1, mcause=0x0000000b, resume_pc-mepc=4, resumed=1, pass=1 i kod 0.", + "conclusion_html": "", + "prompt_html": "

Przed uruchomieniem przewidź bit interrupt i kod mcause, wskaż wartość mepc oraz adres wznowienia. Wyjaśnij, co stałoby się bez zapisu mepc+4.

", + "flow": [ + { + "id": "task01.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — kontrolowany wyjątek M-mode", + "content_html": "

Zachowany przykład: \\nolinkurl{src/tasks/task01_ecall_resume.c}. Granica zaczyna się na instrukcji ecall w main i kończy po powrocie do kolejnej instrukcji. Nie ma zewnętrznego peryferium ani pending IRQ; rdzeń sam tworzy synchroniczną pułapkę.

", + "steps": [] + }, + { + "id": "task01.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — mcause, mepc i mtvec", + "content_html": "

mcause zapisuje klasę 11 bez bitu interrupt, mepc zapisuje adres ECALL, a baza mtvec prowadzi wszystkie synchroniczne wyjątki do handle_exception. Handler publikuje oryginał i osobny adres wznowienia.

", + "steps": [] + }, + { + "id": "task01.a3", + "kind": "block", + "title": "A3 DISPATCH · AKTYWNE — synchroniczny slot mtvec", + "content_html": "

Sprzęt wybiera bazowy slot wektora, ponieważ zdarzenie jest wyjątkiem, nie IRQ. handle_exception odczytuje mcause i obsługuje jedyny dopuszczony przypadek ECALL. To granica trap dispatch, choć nie ma tablicy callbacków.

", + "steps": [] + }, + { + "id": "task01.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — cause 11 i stały krok 4", + "content_html": "

ECALL w RV32I jest instrukcją 32-bitową, dlatego dla tego przykładu poprawny resume ma wartość mepc+4. Gate wymaga jednego wejścia, cause 11, delty 4 i ustawienia resumed dopiero po mret.

", + "steps": [] + }, + { + "id": "task01.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — ecall, save, patch, mret", + "content_html": "

Normalny kod wykonuje ECALL. Rdzeń zapisuje mepc/mcause, skacze do wektora, handler odczytuje oba CSR i zapisuje nowe mepc. Epilog interrupt("machine") kończy się mret; dopiero potem main zapisuje resumed.

", + "steps": [] + }, + { + "id": "task01.a6", + "kind": "block", + "title": "A6 STATE · AKTYWNE — RUNNING, TRAP, RESUMED", + "content_html": "

Stan przechodzi RUNNING -> TRAP(mepc=ecall,cause=11) -> RESUMED(pc=mepc+4). Licznik 1 odróżnia pojedyncze wznowienie od pętli ponownego wykonywania ECALL.

", + "steps": [] + }, + { + "id": "task01.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — ecall i mret w ELF", + "content_html": "

Oracle porównuje raportowane adresy i niezależnie wymaga różnicy 4. Objdump musi pokazać ecall w main oraz mret w handlerze. Segmenty LOAD pozostają rozdzielone R-X/R-W.

", + "steps": [] + }, + { + "id": "task01.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — explicit resume policy", + "content_html": "

Wzorzec handlera wyjątku obejmuje jawną decyzję: retry, skip albo terminate. Task01 wybiera skip tylko dla znanego ECALL. Dla faultu pamięci bezwarunkowe mepc+4 mogłoby ukryć błąd i jest niedozwolone.

", + "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. mcause, mepc i adres wznowienia \\noindent \\noindent 3. ecall/mret w listingu 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-5-task02", + "index": 5, + "title": "TASK02 — Machine software IRQ i clear źródła", + "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
TITLEPułapki i sterowanie przerwaniami RV32I
VER.v00.01
DATETIME2026-07-20T00:00:00+02:00
PROJECTFreestanding C na RV32I
SERIESC · Freestanding RV32I and K&R
CARD10/13
SHEET6/7
SUBJ.Inf.
PROG.
CORE
SCOPE
LEVEL
POS.
GITEA UUIDec04ecee-1c4d-529a-a4e2-d3f9b40700ecCARD UUID8fb9c110-557b-5081-8ae2-a56800f872e8AUTHOR  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
", + "left_margin_html": "
TECH
", + "right_margin_html": "
OG
", + "content_html": "", + "tasks": [ + { + "ref": "task02", + "title": "Machine software IRQ i clear źródła", + "uuid": "a4b503ba-cacc-5af1-9ecd-31f51563ca76", + "criterion": "Hazard3: count=1, mcause=0x80000003, pending_before=1, pending_in_handler=1, pending_after=0, resumed=1, pass=1 i kod 0.", + "conclusion_html": "", + "prompt_html": "

Zapisz stan pending przed globalnym enable, mcause w ISR i pending po clear. Rozdziel źródło MSIP od obu bramek oraz wskaż, dlaczego handler musi usunąć źródło przed mret.

", + "flow": [ + { + "id": "task02.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — kontrolowane źródło bez peryferium", + "content_html": "

Zachowany przykład: \\nolinkurl{src/tasks/task02_machine_software_irq.c}. tb_set_softirq(0) podnosi machine software interrupt hart0. Testbench jest źródłem, CSR są kontrolą rdzenia, ISR usuwa żądanie, a main ocenia wznowienie. UART/GPIO nie uczestniczą.

", + "steps": [] + }, + { + "id": "task02.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — trzy bity i jeden wektor", + "content_html": "

Źródło jest widoczne jako mip.MSIP; indywidualna bramka to mie.MSIE, globalna to mstatus.MIE. Cause 3 w trybie vectored wybiera slot 3 i symbol isr_machine_softirq.

", + "steps": [] + }, + { + "id": "task02.a3", + "kind": "block", + "title": "A3 DISPATCH · AKTYWNE — sprzęt wybiera vector 3", + "content_html": "

Bit interrupt w mcause i kod 3 powodują sprzętowy wybór slotu machine software IRQ. Nie jest to statyczne jal z main. Po wejściu symbol handlera jest już określony przez wektor, a mret odtwarza przerwany kontekst.

", + "steps": [] + }, + { + "id": "task02.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — pending 1 do 0", + "content_html": "

Przy MSIE=1 i MIE=0 źródło jest już pending, lecz licznik wynosi 0. Po otwarciu MIE handler widzi 0x80000003 i pending=1, wykonuje clear, zwiększa licznik, a po mret main mierzy pending=0.

", + "steps": [] + }, + { + "id": "task02.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — configure, assert, observe, enable", + "content_html": "

Kolejność eliminuje wyścig pomiaru: najpierw wyłącz wszystko, ustaw MSIE, podnieś źródło, zmierz pending, dopiero potem ustaw MIE. Handler odczytuje cause/pending przed clear i publikuje licznik po clear.

", + "steps": [] + }, + { + "id": "task02.a6", + "kind": "block", + "title": "A6 STATE · AKTYWNE — MASKED_PENDING, ACTIVE, CLEARED", + "content_html": "

Źródło przechodzi do MASKED_PENDING, bo globalna bramka jest zamknięta. Po MIE staje się ACTIVE; clear w ISR tworzy CLEARED. Resumed=1 jest osobnym stanem normalnego kodu po mret.

", + "steps": [] + }, + { + "id": "task02.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — cause z bitem 31", + "content_html": "

Wartość 0x80000003 łączy bit interrupt i kod 3. Listing ma pokazać CSR dla mie/mstatus/mip, dostęp do testbench clear oraz mret. Oracle wymaga całego śladu, nie tylko pass.

", + "steps": [] + }, + { + "id": "task02.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — clear level source before publish", + "content_html": "

Źródło poziomowe usuwa się przed opublikowaniem ukończenia ISR. Gdyby licznik wzrósł bez clear, po mret żądanie pozostałoby aktywne i handler mógłby wejść ponownie.

", + "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. Pending i bramki przed wejściem \\noindent \\noindent 3. mcause, clear, mret i wznowienie \\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-task03", + "index": 6, + "title": "TASK03 — Macierz pending, MSIE i MIE", + "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
TITLEPułapki i sterowanie przerwaniami RV32I
VER.v00.01
DATETIME2026-07-20T00:00:00+02:00
PROJECTFreestanding C na RV32I
SERIESC · Freestanding RV32I and K&R
CARD10/13
SHEET7/7
SUBJ.Inf.
PROG.
CORE
SCOPE
LEVEL
POS.
GITEA UUIDec04ecee-1c4d-529a-a4e2-d3f9b40700ecCARD UUID8fb9c110-557b-5081-8ae2-a56800f872e8AUTHOR  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
", + "left_margin_html": "
TECH
", + "right_margin_html": "
OG
", + "content_html": "", + "tasks": [ + { + "ref": "task03", + "title": "Macierz pending, MSIE i MIE", + "uuid": "f56dba83-f7a9-5643-8f2e-84df1e8a2190", + "criterion": "Hazard3: pending=1, blocked_no_msie=1, blocked_no_mie=1, delivered_both=1, count=1, mcause=0x80000003, pending_after=0, pass=1 i kod 0.", + "conclusion_html": "", + "prompt_html": "

Wypełnij trzy wiersze: pending=1 z samym MIE, pending=1 z samym MSIE oraz pending=1 z obiema bramkami. Przewidź licznik ISR i końcowy pending.

", + "flow": [ + { + "id": "task03.a1", + "kind": "block", + "title": "A1 CONTEXT · AKTYWNE — jedna zmienna, dwie kontrolki", + "content_html": "

Zachowany przykład: \\nolinkurl{src/tasks/task03_pending_enable_matrix.c}. Bodziec MSIP pozostaje ten sam podczas dwóch prób blokowanych i próby dostarczonej. Przykład zmienia wyłącznie bramki rdzenia, więc nie myli nowego zdarzenia z nową konfiguracją.

", + "steps": [] + }, + { + "id": "task03.a2", + "kind": "block", + "title": "A2 STRUCTURE · AKTYWNE — macierz 1×2×2", + "content_html": "

Oś danych to pending=1. Dwie osie sterujące to MSIE i MIE. Cztery kombinacje mają jeden stan dostarczalny: oba bity 1. Przykład mierzy trzy istotne wiersze przy utrzymanym pending.

", + "steps": [] + }, + { + "id": "task03.a3", + "kind": "block", + "title": "A3 DISPATCH · AKTYWNE — wejście dopiero dla 1/1", + "content_html": "

Sprzętowy dispatch do vector 3 nie zachodzi przy żadnej pojedynczej otwartej bramce. Dopiero MSIE=1 i MIE=1 pozwalają utworzyć trap, zapisać cause i wejść do ISR kończącego się mret.

", + "steps": [] + }, + { + "id": "task03.a4", + "kind": "block", + "title": "A4 APPLICATION · AKTYWNE — dwa razy blocked, raz delivered", + "content_html": "

Przy MIE=1/MSIE=0 licznik zostaje 0. Przy MIE=0/MSIE=1 również zostaje 0. Przy obu równych 1 rośnie dokładnie do 1, mcause ma wartość 0x80000003, a clear zeruje pending.

", + "steps": [] + }, + { + "id": "task03.a5", + "kind": "block", + "title": "A5 FLOW · AKTYWNE — nie zmieniaj źródła między próbami", + "content_html": "

Program podnosi MSIP raz, następnie testuje global-only, individual-only i both. Globalny bit jest zamykany przed zmianą MSIE, aby dostarczenie nie zaszło między pomiarem a zapisaniem wyniku.

", + "steps": [] + }, + { + "id": "task03.a6", + "kind": "block", + "title": "A6 STATE · AKTYWNE — P10, P01, P11, CLEAR", + "content_html": "

Skrót Pxy oznacza pending=1, MSIE=x, MIE=y. Ślad to P01(blocked) -> P10(blocked) -> P11(active) -> CLEAR. Licznik zmienia się tylko na trzeciej krawędzi.

", + "steps": [] + }, + { + "id": "task03.a7", + "kind": "block", + "title": "A7 RUNTIME · AKTYWNE — odczyt mip, zapisy mie/mstatus", + "content_html": "

Raport utrwala trzy decyzje i cause. Listing rozdziela csrs/csrc mie, csrs/csrc mstatus oraz odczyt mip. Objdump niezależnie potwierdza mret w ISR.

", + "steps": [] + }, + { + "id": "task03.a8", + "kind": "block", + "title": "A8 PATTERNS · AKTYWNE — source, individual, global gate", + "content_html": "

Trzywarstwowy model zapobiega typowemu błędowi: pending nie znaczy delivered. Ten sam wzorzec wróci dla MTIP/MTIE oraz external IRQ z enable peryferium, kontrolera i globalnym MIE.

", + "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. Macierz pending/MSIE/MIE \\noindent \\noindent 3. Dostarczenie, clear 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 — Wyjątek synchroniczny wskazuje instrukcję" + }, + { + "id": "section-2-content", + "label": "2. 2 — Software IRQ jest asynchronicznym źródłem poziomowym" + }, + { + "id": "section-3-content", + "label": "3. 3 — Pending i enable odpowiadają na inne pytania" + }, + { + "id": "section-4-task01", + "label": "4. TASK01 — ECALL i wznowienie pod mepc+4" + }, + { + "id": "section-5-task02", + "label": "5. TASK02 — Machine software IRQ i clear źródła" + }, + { + "id": "section-6-task03", + "label": "6. TASK03 — Macierz pending, MSIE i MIE" + } + ] +} 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..862080b --- /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,PHN2ZyBjbGFzcz0idGl0bGUtcXIiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iS29kIFFSOiBodHRwczovL3pzbC1naXRlYS5tcGFiaS5wbC9lZHUtaW5mL2xhYi1ydjMyaS1jLWludGVycnVwdHMiIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9Jzg1LjAzOTE5NnB0JyBoZWlnaHQ9Jzg1LjAzOTE5NnB0JyB2aWV3Qm94PSctNzIuMDAwMDA0IC03Mi4wMDAwMDQgODUuMDM5MTk2IDg1LjAzOTE5Nic+CjxnIGlkPSdwYWdlMSc+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc1LjMwODM1NicgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTY5LjQyMzA1OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTY5LjQyMzA1OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctNjkuNDIzMDU5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTY5LjQyMzA1OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy02OS40MjMwNTknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNjYuODQ2MTE0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy02Ni44NDYxMTQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc1LjMwODM1NicgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTY2Ljg0NjExNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTY0LjI2OTE2OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSctNjQuMjY5MTY4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy02NC4yNjkxNjgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy02MS42OTIyMjMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScyLjczMTQxMScgeT0nLTYxLjY5MjIyMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctNjEuNjkyMjIzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PSctNTkuMTE1Mjc4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSctNTkuMTE1Mjc4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctNTkuMTE1Mjc4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTU5LjExNTI3OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy01OS4xMTUyNzgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE1LjMwNzIwNycgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScyLjczMTQxMScgeT0nLTU2LjUzODMzMicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PSctNTYuNTM4MzMyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNy44ODUzMDEnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy01Ni41MzgzMzInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNTMuOTYxMzg3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSctNTMuOTYxMzg3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM1LjkyMjc2OScgeT0nLTUzLjk2MTM4NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy01My45NjEzODcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctNTMuOTYxMzg3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTUzLjk2MTM4NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy01My45NjEzODcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQzLjY1MzYwNScgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTUxLjM4NDQ0MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcuNTc2MzcxJyB5PSctNTEuMzg0NDQyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy01MS4zODQ0NDInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcuNTc2MzcxJyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctNDguODA3NDk2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy00OC44MDc0OTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTQ4LjgwNzQ5NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUzLjk2MTM4NycgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTQ2LjIzMDU1MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNDYuMjMwNTUxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy00Ni4yMzA1NTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE1LjMwNzIwNycgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNDMuNjUzNjA1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy00My42NTM2MDUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTQzLjY1MzYwNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00MS4wNzY2NicgeT0nLTQxLjA3NjY2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTQxLjA3NjY2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTQxLjA3NjY2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE1LjMwNzIwNycgeT0nLTQxLjA3NjY2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTQxLjA3NjY2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTQxLjA3NjY2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcuNTc2MzcxJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy00MS4wNzY2NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSctNDEuMDc2NjYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTQxLjA3NjY2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTkuMTE1Mjc4JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUzLjk2MTM4NycgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy0zOC40OTk3MTUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yLjQyMjQ4JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTM4LjQ5OTcxNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctMzguNDk5NzE1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTMuOTYxMzg3JyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQzLjY1MzYwNScgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy0zNS45MjI3NjknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScyLjczMTQxMScgeT0nLTM1LjkyMjc2OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctMzUuOTIyNzY5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTMuOTYxMzg3JyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ni4yMzA1NTEnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy0zMy4zNDU4MjQnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScyLjczMTQxMScgeT0nLTMzLjM0NTgyNCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctMzMuMzQ1ODI0JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM1LjkyMjc2OScgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIzLjAzODA0MycgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctMzAuNzY4ODc5JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy0zMC43Njg4NzknIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTMwLjc2ODg3OScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTI4LjE5MTkzMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01My45NjEzODcnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTI4LjE5MTkzMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTI4LjE5MTkzMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTI4LjE5MTkzMycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSctMjguMTkxOTMzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNy44ODUzMDEnIHk9Jy0yOC4xOTE5MzMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU5LjExNTI3OCcgeT0nLTI1LjYxNDk4OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy0yNS42MTQ5ODgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM1LjkyMjc2OScgeT0nLTI1LjYxNDk4OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy0yNS42MTQ5ODgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQuOTk5NDI1JyB5PSctMjUuNjE0OTg4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9Jy0yNS42MTQ5ODgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTI1LjYxNDk4OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTI1LjYxNDk4OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02OS40MjMwNTknIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01My45NjEzODcnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTcuODg0MTUyJyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy0yMy4wMzgwNDMnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTIzLjAzODA0MycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PSctMjMuMDM4MDQzJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01OS4xMTUyNzgnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUzLjk2MTM4NycgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy0yMC40NjEwOTcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMjAuNDYxMDk3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTIwLjQ2MTA5NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTMuOTYxMzg3JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ2LjIzMDU1MScgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00My42NTM2MDUnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTE3Ljg4NDE1MicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PSctMTcuODg0MTUyJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNy44ODUzMDEnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScxMC40NjIyNDcnIHk9Jy0xNy44ODQxNTInIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0xNS4zMDcyMDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTE1LjMwNzIwNycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctMTUuMzA3MjA3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY5LjQyMzA1OScgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTUxLjM4NDQ0MicgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00OC44MDc0OTYnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDYuMjMwNTUxJyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTM4LjQ5OTcxNScgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcuNTc2MzcxJyB5PSctMTIuNzMwMjYxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIuNDIyNDgnIHk9Jy0xMi43MzAyNjEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScyLjczMTQxMScgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzEwLjQ2MjI0NycgeT0nLTEyLjczMDI2MScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY0LjI2OTE2OCcgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMwLjc2ODg3OScgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctMTAuMTUzMzE2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNy41NzYzNzEnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNC45OTk0MjUnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMi40MjI0OCcgeT0nLTEwLjE1MzMxNicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy0xMC4xNTMzMTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzUuOTIyNzY5JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzAuNzY4ODc5JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjguMTkxOTMzJyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTIuNzMwMjYxJyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScyLjczMTQxMScgeT0nLTcuNTc2MzcxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSctNy41NzYzNzEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTkuMTE1Mjc4JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yOC4xOTE5MzMnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9Jy00Ljk5OTQyNScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PSctNC45OTk0MjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSc3Ljg4NTMwMScgeT0nLTQuOTk5NDI1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTIuNDIyNDgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQ4LjgwNzQ5NicgeT0nLTIuNDIyNDgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLTIuNDIyNDgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjAuNDYxMDk3JyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE1LjMwNzIwNycgeT0nLTIuNDIyNDgnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSctMi40MjI0OCcgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9Jy0yLjQyMjQ4JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02Ni44NDYxMTQnIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01Ni41MzgzMzInIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzMuMzQ1ODI0JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9Jy4xNTQ0NjUnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEwLjE1MzMxNicgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yLjQyMjQ4JyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nLjE1NDQ2NScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PScuMTU0NDY1JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02NC4yNjkxNjgnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTYxLjY5MjIyMycgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy01MS4zODQ0NDInIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTQxLjA3NjY2JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zOC40OTk3MTUnIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTMzLjM0NTgyNCcgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjUuNjE0OTg4JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9JzIuNzMxNDExJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTEyLjczMDI2MScgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nMi43MzE0MTEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PScuMTU0NDY1JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzIuNzMxNDExJyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzUuMzA4MzU2JyB5PScyLjczMTQxMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTY2Ljg0NjExNCcgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy02MS42OTIyMjMnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDMuNjUzNjA1JyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yNS42MTQ5ODgnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTIwLjQ2MTA5NycgeT0nNS4zMDgzNTYnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTUuMzA3MjA3JyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTcuNTc2MzcxJyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy4xNTQ0NjUnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nNS4zMDgzNTYnIHk9JzUuMzA4MzU2JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMTAuNDYyMjQ3JyB5PSc1LjMwODM1NicgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9JzcuODg1MzAxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTU2LjUzODMzMicgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMzguNDk5NzE1JyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9JzcuODg1MzAxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTI4LjE5MTkzMycgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMjMuMDM4MDQzJyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMC40NjEwOTcnIHk9JzcuODg1MzAxJyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLTE3Ljg4NDE1MicgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctMTAuMTUzMzE2JyB5PSc3Ljg4NTMwMScgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy03LjU3NjM3MScgeT0nNy44ODUzMDEnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjkuNDIzMDU5JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjYuODQ2MTE0JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjQuMjY5MTY4JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNjEuNjkyMjIzJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTkuMTE1Mjc4JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTYuNTM4MzMyJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNTEuMzg0NDQyJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDguODA3NDk2JyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8cmVjdCB4PSctNDEuMDc2NjYnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zNS45MjI3NjknIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0zMC43Njg4NzknIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0yMy4wMzgwNDMnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNy44ODQxNTInIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xNS4zMDcyMDcnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMi43MzAyNjEnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy0xMC4xNTMzMTYnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9Jy00Ljk5OTQyNScgeT0nMTAuNDYyMjQ3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nLjE1NDQ2NScgeT0nMTAuNDYyMjQ3JyBoZWlnaHQ9JzIuNTc2OTQ1JyB3aWR0aD0nMi41NzY5NDUnLz4KPHJlY3QgeD0nMi43MzE0MTEnIHk9JzEwLjQ2MjI0NycgaGVpZ2h0PScyLjU3Njk0NScgd2lkdGg9JzIuNTc2OTQ1Jy8+CjxyZWN0IHg9JzcuODg1MzAxJyB5PScxMC40NjIyNDcnIGhlaWdodD0nMi41NzY5NDUnIHdpZHRoPScyLjU3Njk0NScvPgo8L2c+Cjwvc3ZnPg==")} + @top-center{content:" TITLE VER. DATETIME \A \A Pułapki i sterowanie przerwaniami RV32I 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 10/13 " counter(page) "/" counter(pages) " \A SUBJ. PROG. CORE SCOPE LEVEL POS. GITEA UUID ec04ecee-1c4d-529a-a4e2-d3f9b40700ec\A CARD UUID 8fb9c110-557b-5081-8ae2-a56800f872e8 AUTHOR M. Pabiszczak\A Inf. — — — — — \A \A GITEA https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-interrupts \A \A HTML https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8fb9c110-557b-5081-8ae2-a56800f872e8 ";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,PHN2ZyBjbGFzcz0idGl0bGUtcXIiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iS29kIFFSOiBodHRwczovL2RjZTdmYjlkLTdiMmYtNWQ0OS05NmEyLTNhMzBkMzA3MGI4NC5tcGFiaS5wbC84ZmI5YzExMC01NTdiLTUwODEtOGFlMi1hNTY4MDBmODcyZTgiIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9Jzg1LjAzOTIyN3B0JyBoZWlnaHQ9Jzg1LjAzOTIyN3B0JyB2aWV3Qm94PSctNzIuMDAwMDA0IC03Mi4wMDAwMDQgODUuMDM5MjI3IDg1LjAzOTIyNyc+CjxnIGlkPSdwYWdlMSc+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0uNzUwOTIyJyB5PSctNzIuMDAwMDA0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9Jy03Mi4wMDAwMDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTcyLjAwMDAwNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy02OS43MDE2NDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy02OS43MDE2NDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy02OS43MDE2NDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTY5LjcwMTY0NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctNjkuNzAxNjQ3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYyLjgwNjU3NCcgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNy42NDU5OTUnIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTY3LjQwMzI4OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy02Ny40MDMyODknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctNjcuNDAzMjg5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYyLjgwNjU3NCcgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctNjUuMTA0OTMyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTY1LjEwNDkzMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy02NS4xMDQ5MzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy02Mi44MDY1NzQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNjIuODA2NTc0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTYyLjgwNjU3NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNjAuNTA4MjE3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy02MC41MDgyMTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTYwLjUwODIxNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yNi4wMzI4NTUnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTU4LjIwOTg1OScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctNTguMjA5ODU5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy01OC4yMDk4NTknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTU1LjkxMTUwMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy01NS45MTE1MDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzUuMjI2Mjg1JyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTU1LjkxMTUwMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy01NS45MTE1MDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctNTUuOTExNTAyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLTU1LjkxMTUwMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTU1LjkxMTUwMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNC41NDEwNjcnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNy42NDU5OTUnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTUzLjYxMzE0NCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNTMuNjEzMTQ0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy01My42MTMxNDQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy01MS4zMTQ3ODcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTUxLjMxNDc4NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctNTEuMzE0Nzg3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTQ5LjAxNjQyOScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy00OS4wMTY0MjknIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctNDkuMDE2NDI5JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yNi4wMzI4NTUnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0uNzUwOTIyJyB5PSctNDYuNzE4MDcyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy00Ni43MTgwNzInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nLTQ2LjcxODA3MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzUuMjI2Mjg1JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMyLjkyNzkyNycgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yNi4wMzI4NTUnIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy00NC40MTk3MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctNDQuNDE5NzE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTQ0LjQxOTcxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy00Mi4xMjEzNTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYyLjgwNjU3NCcgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy00Mi4xMjEzNTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yOC4zMzEyMTInIHk9Jy00Mi4xMjEzNTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTQyLjEyMTM1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctNDIuMTIxMzU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTM5LjgyMycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PSctMzkuODIzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0zOS44MjMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTUuOTExNTAyJyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ2LjcxODA3MicgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNy42NDU5OTUnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTM3LjUyNDY0MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctMzcuNTI0NjQyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0zNy41MjQ2NDInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTUuOTExNTAyJyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01LjM0NzYzNycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMzUuMjI2Mjg1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTM1LjIyNjI4NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy0zNS4yMjYyODUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU1LjkxMTUwMicgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMyLjkyNzkyNycgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yOC4zMzEyMTInIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy0zMi45Mjc5MjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTMyLjkyNzkyNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMzIuOTI3OTI3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PSctMzAuNjI5NTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy0zMC42Mjk1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctMzAuNjI5NTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0zMC42Mjk1NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTMwLjYyOTU3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy0yOC4zMzEyMTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDQuNDE5NzE1JyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy0yOC4zMzEyMTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTI4LjMzMTIxMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0uNzUwOTIyJyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMjguMzMxMjEyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTQuNTQxMDY3JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9Jy0yNi4wMzI4NTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTI2LjAzMjg1NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMjYuMDMyODU1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy0yMy43MzQ0OTcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nLTIzLjczNDQ5NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMjMuNzM0NDk3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY5LjcwMTY0NycgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYwLjUwODIxNycgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU1LjkxMTUwMicgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ2LjcxODA3MicgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNC41NDEwNjcnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0uNzUwOTIyJyB5PSctMjEuNDM2MTQnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0yMS40MzYxNCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTIxLjQzNjE0JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTUuOTExNTAyJyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM5LjgyMycgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjYuMDMyODU1JyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNy42NDU5OTUnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9Jy0xOS4xMzc3ODInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTE5LjEzNzc4MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMTkuMTM3NzgyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy0xNi44Mzk0MjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTE2LjgzOTQyNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSctMTYuODM5NDI1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMy43MzQ0OTcnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTkuMTM3NzgyJyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01LjM0NzYzNycgeT0nLTE0LjU0MTA2NycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctMTQuNTQxMDY3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0xNC41NDEwNjcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjcuNDAzMjg5JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjAuNTA4MjE3JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTguMjA5ODU5JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTEuMzE0Nzg3JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDkuMDE2NDI5JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzUuMjI2Mjg1JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy05Ljk0NDM1MicgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMTIuMjQyNzEnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nOC40NDI1MDcnIHk9Jy0xMi4yNDI3MScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTEyLjI0MjcxJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYyLjgwNjU3NCcgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nLTkuOTQ0MzUyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSctOS45NDQzNTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctOS45NDQzNTInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9Jy05Ljk0NDM1MicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01NS45MTE1MDInIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yNi4wMzI4NTUnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNC41NDEwNjcnIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUuMzQ3NjM3JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLS43NTA5MjInIHk9Jy03LjY0NTk5NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctNy42NDU5OTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSczLjg0NTc5MycgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nNi4xNDQxNScgeT0nLTcuNjQ1OTk1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUzLjYxMzE0NCcgeT0nLTUuMzQ3NjM3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTUxLjMxNDc4NycgeT0nLTUuMzQ3NjM3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjguMzMxMjEyJyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9Jy01LjM0NzYzNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9Jy01LjM0NzYzNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy01LjM0NzYzNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLTUuMzQ3NjM3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctNS4zNDc2MzcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nLTUuMzQ3NjM3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjkuNzAxNjQ3JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY1LjEwNDkzMicgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjIuODA2NTc0JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02MC41MDgyMTcnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Ni43MTgwNzInIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9Jy0zLjA0OTI4JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PSctMy4wNDkyOCcgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nLTMuMDQ5MjgnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNzIuMDAwMDA0JyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9Jy0uNzUwOTIyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDYuNzE4MDcyJyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9Jy0uNzUwOTIyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yMS40MzYxNCcgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xMi4yNDI3MScgeT0nLS43NTA5MjInIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9Jy0uNzUwOTIyJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEuNTQ3NDM1JyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzMuODQ1NzkzJyB5PSctLjc1MDkyMicgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ2LjcxODA3MicgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzcuNTI0NjQyJyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0yNi4wMzI4NTUnIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIxLjQzNjE0JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9JzEuNTQ3NDM1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcuNjQ1OTk1JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01LjM0NzYzNycgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nMS41NDc0MzUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc2LjE0NDE1JyB5PScxLjU0NzQzNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTY3LjQwMzI4OScgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQyLjEyMTM1NycgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI4LjMzMTIxMicgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjMuNzM0NDk3JyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xOS4xMzc3ODInIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTIuMjQyNzEnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTkuOTQ0MzUyJyB5PSczLjg0NTc5MycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01LjM0NzYzNycgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMy4wNDkyOCcgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxLjU0NzQzNScgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nMy44NDU3OTMnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9JzMuODQ1NzkzJyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTcyLjAwMDAwNCcgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNjUuMTA0OTMyJyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTYyLjgwNjU3NCcgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ5LjAxNjQyOScgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00Mi4xMjEzNTcnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzkuODIzJyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM3LjUyNDY0MicgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNS4yMjYyODUnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzIuOTI3OTI3JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMwLjYyOTU3JyB5PSc2LjE0NDE1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0xNi44Mzk0MjUnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9JzYuMTQ0MTUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSc4LjQ0MjUwNycgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzEwLjc0MDg2NScgeT0nNi4xNDQxNScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTU4LjIwOTg1OScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNTMuNjEzMTQ0JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01MS4zMTQ3ODcnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTQ0LjQxOTcxNScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNDIuMTIxMzU3JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zNy41MjQ2NDInIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTM1LjIyNjI4NScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMzAuNjI5NTcnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTIzLjczNDQ5NycgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMjEuNDM2MTQnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE5LjEzNzc4MicgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctMTYuODM5NDI1JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03LjY0NTk5NScgeT0nOC40NDI1MDcnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctNS4zNDc2MzcnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTMuMDQ5MjgnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMS41NDc0MzUnIHk9JzguNDQyNTA3JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMTAuNzQwODY1JyB5PSc4LjQ0MjUwNycgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy03Mi4wMDAwMDQnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02OS43MDE2NDcnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Ny40MDMyODknIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02NS4xMDQ5MzInIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02Mi44MDY1NzQnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy02MC41MDgyMTcnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01OC4yMDk4NTknIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy01My42MTMxNDQnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00OS4wMTY0MjknIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy00NC40MTk3MTUnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zOS44MjMnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMi45Mjc5MjcnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zMC42Mjk1NycgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTI2LjAzMjg1NScgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE2LjgzOTQyNScgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTE0LjU0MTA2NycgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nLTEyLjI0MjcxJyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctOS45NDQzNTInIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9Jy0zLjA0OTI4JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PSctLjc1MDkyMicgeT0nMTAuNzQwODY1JyBoZWlnaHQ9JzIuMjk4MzU3JyB3aWR0aD0nMi4yOTgzNTcnLz4KPHJlY3QgeD0nMy44NDU3OTMnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzYuMTQ0MTUnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjxyZWN0IHg9JzguNDQyNTA3JyB5PScxMC43NDA4NjUnIGhlaWdodD0nMi4yOTgzNTcnIHdpZHRoPScyLjI5ODM1NycvPgo8cmVjdCB4PScxMC43NDA4NjUnIHk9JzEwLjc0MDg2NScgaGVpZ2h0PScyLjI5ODM1Nycgd2lkdGg9JzIuMjk4MzU3Jy8+CjwvZz4KPC9zdmc+")} +}

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 literal 0 HcmV?d00001 diff --git a/json/card_source.json b/json/card_source.json new file mode 100644 index 0000000..a9be01c --- /dev/null +++ b/json/card_source.json @@ -0,0 +1,667 @@ +{ + "$schema": "../../../tools/card-layouts/schemas/card-source.schema.json", + "schema": "esc-card-source.v1", + "card": { + "id": "mpabi-inf-c-10-traps-interrupt-control", + "series": "c", + "series_title": "C · Freestanding RV32I and K&R", + "number": "10", + "count": "13", + "slug": "traps-interrupt-control", + "title": "Pułapki i sterowanie przerwaniami RV32I", + "topic": "ecall, mepc, mcause, machine software IRQ oraz bramki mie/mstatus", + "project": "Freestanding C na RV32I", + "subject": "Informatyka", + "level": "Rok 1 · C10 · RV32I/Hazard3", + "revision_date": "2026-07-20T00:00:00+02:00", + "status": "Gotowa", + "version": "v00.01", + "uuid": "ec04ecee-1c4d-529a-a4e2-d3f9b40700ec", + "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": "Pułapki i sterowanie przerwaniami RV32I", + "url": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8fb9c110-557b-5081-8ae2-a56800f872e8", + "repository_url": "https://zsl-gitea.mpabi.pl/edu-inf/lab-rv32i-c-interrupts", + "url_host_uuid": "dce7fb9d-7b2f-5d49-96a2-3a30d3070b84", + "url_domain": "mpabi.pl", + "doc_uuid": "8fb9c110-557b-5081-8ae2-a56800f872e8", + "revision": "v00.01", + "issued_on": "2026-07-20T00:00:00+02:00", + "series": "C-10", + "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ń odróżnia synchroniczny wyjątek od asynchronicznego przerwania, wyprowadza adres wznowienia z mepc oraz dowodzi, że samo pending nie wystarcza bez indywidualnej i globalnej bramki enable.", + "scope_title": "Zakres i zachowane przykłady", + "scope_content_tex": "Trzy obrazy RV32I działają na rzeczywistym modelu Hazard3. Task01 wykonuje \\texttt{ecall}; Task02 używa kontrolowanego machine software interrupt; Task03 mierzy macierz pending, \\texttt{mie.MSIE} i \\texttt{mstatus.MIE}. Peryferia pojawiają się dopiero w C12 i C13.\\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": [ + "Typ", + "Task", + "Idea", + "Waga" + ], + "rows": [ + { + "chapter": "ECALL", + "task": "Task01", + "idea_tex": "synchroniczny cause 11, mepc i mret", + "priority": "kluczowe", + "key": true + }, + { + "chapter": "MSIP", + "task": "Task02", + "idea_tex": "MSIP, MSIE, MIE, vector 3 i mret", + "priority": "kluczowe", + "key": true + }, + { + "chapter": "GATE", + "task": "Task03", + "idea_tex": "to samo źródło, dwie niezależne bramki", + "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": { + "C10.EN01": { + "bloom_level": "Analiza", + "label": "Cause, gate i resume", + "text": "Uczeń osobno zapisuje źródło zdarzenia, mcause, mepc, stan pending, obie bramki enable i efekt po mret.", + "assessment_criteria": [ + "C10.KW01" + ] + }, + "C10.EK01": { + "bloom_level": "Zastosowanie", + "label": "Pułapka widoczna w listingu", + "text": "Uczeń uruchamia trzy obrazy Hazard3 i wiąże raporty runtime z instrukcjami ecall, CSR, wektorami i mret.", + "assessment_criteria": [ + "C10.KW01" + ] + } + }, + "assessment_criteria": { + "C10.KW01": { + "text": "Task01: jeden ecall daje mcause=11, mepc jest zwiększone o 4 i kod normalny wznawia pracę. Task02: software IRQ ma mcause=0x80000003, pending 1 przed i w ISR, 0 po clear oraz jedno wznowienie. Task03: pending pozostaje zablokowane osobno bez MSIE i bez MIE, a jest dostarczone dokładnie raz dopiero z obiema bramkami.", + "learning_effects": [ + "C10.EN01", + "C10.EK01" + ] + } + }, + "educational_requirements": { + "C10.WE01": { + "text": "Konfiguracja i analiza machine-mode trap z jawnym kontraktem źródła, pending, enable, handlera i adresu wznowienia.", + "label": "ecall, mepc, mcause, machine software IRQ oraz bramki mie/mstatus", + "learning_effects": [ + "C10.EN01", + "C10.EK01" + ], + "learning_tree": { + "schema": "we-learning-tree.v1", + "policy": "Najpierw przewidywanie, następnie wykonanie i odczyt dowodu.", + "ogolne": [ + { + "effect_ref": "C10.EN01", + "display": "EN C10 01", + "source": "LOCAL", + "official": "C", + "local": "01", + "kind": "EN", + "tree_id": "C10.WE01.OG.LOCAL.C.01", + "text": "Uczeń osobno zapisuje źródło zdarzenia, mcause, mepc, stan pending, obie bramki enable i efekt po mret.", + "kw": [ + { + "criterion_ref": "C10.KW01", + "display": "KW C10 01", + "source": "LOCAL", + "kind": "KW", + "official": "C", + "local": "01", + "text": "Kod, przewidywanie i pomiar tworzą jeden dowód." + } + ] + } + ], + "zawodowe": [ + { + "effect_ref": "C10.EK01", + "display": "EK C10 01", + "source": "LOCAL", + "official": "C", + "local": "01", + "kind": "EK", + "tree_id": "C10.WE01.TECH.LOCAL.C.01", + "text": "Uczeń uruchamia trzy obrazy Hazard3 i wiąże raporty runtime z instrukcjami ecall, CSR, wektorami i mret.", + "kw": [ + { + "criterion_ref": "C10.KW01", + "display": "KW C10 01", + "source": "LOCAL", + "kind": "KW", + "official": "C", + "local": "01", + "text": "Kod, przewidywanie i pomiar tworzą jeden dowód." + } + ] + } + ] + } + } + }, + "sections": [ + { + "title": "1 — Wyjątek synchroniczny wskazuje instrukcję", + "order": 10, + "content_kind": "prose", + "page_orientation": "portrait", + "content_tex": "\\texttt{ecall} jest wykonywany przez bieżący strumień instrukcji, więc \\texttt{mcause=11} nie ma ustawionego bitu interrupt, a \\texttt{mepc} wskazuje samo \\texttt{ecall}. Handler Task01 świadomie zapisuje \\texttt{mepc+4}; bez tego \\texttt{mret} wykonałby ponownie tę samą instrukcję. Taka polityka jest poprawna dla tego kontrolowanego ECALL, ale nie wolno automatycznie pomijać instrukcji przy każdym błędzie.", + "educational_requirement_refs": [ + "C10.WE01" + ], + "learning_effect_refs": [ + "C10.EN01", + "C10.EK01" + ], + "assessment_criterion_refs": [ + "C10.KW01" + ] + }, + { + "title": "2 — Software IRQ jest asynchronicznym źródłem poziomowym", + "order": 20, + "content_kind": "prose", + "page_orientation": "portrait", + "content_tex": "Testbench ustawia MSIP hart0, a rdzeń widzi \\texttt{mip.MSIP}. Dostarczenie wymaga dodatkowo \\texttt{mie.MSIE=1} i \\texttt{mstatus.MIE=1}. Wektor 3 prowadzi do \\texttt{isr\\_machine\\_softirq}; handler odczytuje \\texttt{mcause=0x80000003}, usuwa źródło i dopiero potem publikuje licznik. \\texttt{mret} wraca do przerwanego kodu, a nie do instrukcji wybranej ręcznie przez aplikację.", + "educational_requirement_refs": [ + "C10.WE01" + ], + "learning_effect_refs": [ + "C10.EN01", + "C10.EK01" + ], + "assessment_criterion_refs": [ + "C10.KW01" + ] + }, + { + "title": "3 — Pending i enable odpowiadają na inne pytania", + "order": 30, + "content_kind": "prose", + "page_orientation": "portrait", + "content_tex": "Pending mówi, że źródło żąda obsługi. \\texttt{mie.MSIE} dopuszcza konkretną klasę, a \\texttt{mstatus.MIE} otwiera globalną bramkę machine mode. Task03 utrzymuje to samo pending i kolejno sprawdza dwa stany z jedną zamkniętą bramką oraz stan z obiema otwartymi. Dzięki temu kod 0 dowodzi całej macierzy, a nie tylko tego, że ISR kiedyś się wykonał.", + "educational_requirement_refs": [ + "C10.WE01" + ], + "learning_effect_refs": [ + "C10.EN01", + "C10.EK01" + ], + "assessment_criterion_refs": [ + "C10.KW01" + ] + }, + { + "title": "Zadania — zachowane przykłady w profilu A1–A8", + "order": 40, + "content_kind": "tasks", + "page_orientation": "portrait", + "task_refs": [ + "task01", + "task02", + "task03" + ], + "educational_requirement_refs": [ + "C10.WE01" + ], + "learning_effect_refs": [ + "C10.EN01", + "C10.EK01" + ], + "assessment_criterion_refs": [ + "C10.KW01" + ] + } + ], + "tasks": { + "task01": { + "title": "ECALL i wznowienie pod mepc+4", + "uuid": "2cd1da12-b916-5def-b868-da4b13ff9089", + "prompt_tex": "Przed uruchomieniem przewidź bit interrupt i kod mcause, wskaż wartość mepc oraz adres wznowienia. Wyjaśnij, co stałoby się bez zapisu mepc+4.", + "criterion": "Hazard3: count=1, mcause=0x0000000b, resume_pc-mepc=4, resumed=1, pass=1 i kod 0.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — kontrolowany wyjątek M-mode", + "content_tex": "Granica zaczyna się na instrukcji \\texttt{ecall} w main i kończy po powrocie do kolejnej instrukcji. Nie ma zewnętrznego peryferium ani pending IRQ; rdzeń sam tworzy synchroniczną pułapkę." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — mcause, mepc i mtvec", + "content_tex": "\\texttt{mcause} zapisuje klasę 11 bez bitu interrupt, \\texttt{mepc} zapisuje adres ECALL, a baza \\texttt{mtvec} prowadzi wszystkie synchroniczne wyjątki do \\texttt{handle\\_exception}. Handler publikuje oryginał i osobny adres wznowienia." + }, + { + "id": "A3", + "status": "enabled", + "title": "DISPATCH — synchroniczny slot mtvec", + "content_tex": "Sprzęt wybiera bazowy slot wektora, ponieważ zdarzenie jest wyjątkiem, nie IRQ. \\texttt{handle\\_exception} odczytuje mcause i obsługuje jedyny dopuszczony przypadek ECALL. To granica trap dispatch, choć nie ma tablicy callbacków." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — cause 11 i stały krok 4", + "content_tex": "ECALL w RV32I jest instrukcją 32-bitową, dlatego dla tego przykładu poprawny resume ma wartość \\texttt{mepc+4}. Gate wymaga jednego wejścia, cause 11, delty 4 i ustawienia resumed dopiero po mret." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — ecall, save, patch, mret", + "content_tex": "Normalny kod wykonuje ECALL. Rdzeń zapisuje mepc/mcause, skacze do wektora, handler odczytuje oba CSR i zapisuje nowe mepc. Epilog \\texttt{interrupt(\"machine\")} kończy się mret; dopiero potem main zapisuje resumed." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — RUNNING, TRAP, RESUMED", + "content_tex": "Stan przechodzi \\texttt{RUNNING -> TRAP(mepc=ecall,cause=11) -> RESUMED(pc=mepc+4)}. Licznik 1 odróżnia pojedyncze wznowienie od pętli ponownego wykonywania ECALL." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — ecall i mret w ELF", + "content_tex": "Oracle porównuje raportowane adresy i niezależnie wymaga różnicy 4. Objdump musi pokazać \\texttt{ecall} w main oraz \\texttt{mret} w handlerze. Segmenty LOAD pozostają rozdzielone R-X/R-W." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — explicit resume policy", + "content_tex": "Wzorzec handlera wyjątku obejmuje jawną decyzję: retry, skip albo terminate. Task01 wybiera skip tylko dla znanego ECALL. Dla faultu pamięci bezwarunkowe mepc+4 mogłoby ukryć błąd i jest niedozwolone." + } + ], + "flow": [ + { + "kind": "block", + "id": "task01.a1", + "title": "A1 CONTEXT · AKTYWNE — kontrolowany wyjątek M-mode", + "content_tex": "\\textbf{Zachowany przykład:} \\nolinkurl{src/tasks/task01_ecall_resume.c}.\\par Granica zaczyna się na instrukcji \\texttt{ecall} w main i kończy po powrocie do kolejnej instrukcji. Nie ma zewnętrznego peryferium ani pending IRQ; rdzeń sam tworzy synchroniczną pułapkę." + }, + { + "kind": "block", + "id": "task01.a2", + "title": "A2 STRUCTURE · AKTYWNE — mcause, mepc i mtvec", + "content_tex": "\\texttt{mcause} zapisuje klasę 11 bez bitu interrupt, \\texttt{mepc} zapisuje adres ECALL, a baza \\texttt{mtvec} prowadzi wszystkie synchroniczne wyjątki do \\texttt{handle\\_exception}. Handler publikuje oryginał i osobny adres wznowienia." + }, + { + "kind": "block", + "id": "task01.a3", + "title": "A3 DISPATCH · AKTYWNE — synchroniczny slot mtvec", + "content_tex": "Sprzęt wybiera bazowy slot wektora, ponieważ zdarzenie jest wyjątkiem, nie IRQ. \\texttt{handle\\_exception} odczytuje mcause i obsługuje jedyny dopuszczony przypadek ECALL. To granica trap dispatch, choć nie ma tablicy callbacków." + }, + { + "kind": "block", + "id": "task01.a4", + "title": "A4 APPLICATION · AKTYWNE — cause 11 i stały krok 4", + "content_tex": "ECALL w RV32I jest instrukcją 32-bitową, dlatego dla tego przykładu poprawny resume ma wartość \\texttt{mepc+4}. Gate wymaga jednego wejścia, cause 11, delty 4 i ustawienia resumed dopiero po mret." + }, + { + "kind": "block", + "id": "task01.a5", + "title": "A5 FLOW · AKTYWNE — ecall, save, patch, mret", + "content_tex": "Normalny kod wykonuje ECALL. Rdzeń zapisuje mepc/mcause, skacze do wektora, handler odczytuje oba CSR i zapisuje nowe mepc. Epilog \\texttt{interrupt(\"machine\")} kończy się mret; dopiero potem main zapisuje resumed." + }, + { + "kind": "block", + "id": "task01.a6", + "title": "A6 STATE · AKTYWNE — RUNNING, TRAP, RESUMED", + "content_tex": "Stan przechodzi \\texttt{RUNNING -> TRAP(mepc=ecall,cause=11) -> RESUMED(pc=mepc+4)}. Licznik 1 odróżnia pojedyncze wznowienie od pętli ponownego wykonywania ECALL." + }, + { + "kind": "block", + "id": "task01.a7", + "title": "A7 RUNTIME · AKTYWNE — ecall i mret w ELF", + "content_tex": "Oracle porównuje raportowane adresy i niezależnie wymaga różnicy 4. Objdump musi pokazać \\texttt{ecall} w main oraz \\texttt{mret} w handlerze. Segmenty LOAD pozostają rozdzielone R-X/R-W." + }, + { + "kind": "block", + "id": "task01.a8", + "title": "A8 PATTERNS · AKTYWNE — explicit resume policy", + "content_tex": "Wzorzec handlera wyjątku obejmuje jawną decyzję: retry, skip albo terminate. Task01 wybiera skip tylko dla znanego ECALL. Dla faultu pamięci bezwarunkowe mepc+4 mogłoby ukryć błąd i jest niedozwolone." + }, + { + "kind": "exercise", + "id": "task01.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Przed uruchomieniem przewidź bit interrupt i kod mcause, wskaż wartość mepc oraz adres wznowienia. Wyjaśnij, co stałoby się bez zapisu mepc+4.", + "evidence_tex": "Adres ecall i dwa adresy mepc z raportu/listingu, cause 11, instrukcja mret oraz kod wyjścia Hazard3.", + "criterion": "Hazard3: count=1, mcause=0x0000000b, resume_pc-mepc=4, resumed=1, pass=1 i kod 0." + }, + { + "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. mcause, mepc i adres wznowienia}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. ecall/mret w listingu 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": [ + "C10.WE01" + ], + "learning_effect_refs": [ + "C10.EN01", + "C10.EK01" + ], + "assessment_criterion_ref": "C10.KW01" + }, + "task02": { + "title": "Machine software IRQ i clear źródła", + "uuid": "a4b503ba-cacc-5af1-9ecd-31f51563ca76", + "prompt_tex": "Zapisz stan pending przed globalnym enable, mcause w ISR i pending po clear. Rozdziel źródło MSIP od obu bramek oraz wskaż, dlaczego handler musi usunąć źródło przed mret.", + "criterion": "Hazard3: count=1, mcause=0x80000003, pending_before=1, pending_in_handler=1, pending_after=0, resumed=1, pass=1 i kod 0.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — kontrolowane źródło bez peryferium", + "content_tex": "\\texttt{tb\\_set\\_softirq(0)} podnosi machine software interrupt hart0. Testbench jest źródłem, CSR są kontrolą rdzenia, ISR usuwa żądanie, a main ocenia wznowienie. UART/GPIO nie uczestniczą." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — trzy bity i jeden wektor", + "content_tex": "Źródło jest widoczne jako \\texttt{mip.MSIP}; indywidualna bramka to \\texttt{mie.MSIE}, globalna to \\texttt{mstatus.MIE}. Cause 3 w trybie vectored wybiera slot 3 i symbol \\texttt{isr\\_machine\\_softirq}." + }, + { + "id": "A3", + "status": "enabled", + "title": "DISPATCH — sprzęt wybiera vector 3", + "content_tex": "Bit interrupt w mcause i kod 3 powodują sprzętowy wybór slotu machine software IRQ. Nie jest to statyczne jal z main. Po wejściu symbol handlera jest już określony przez wektor, a mret odtwarza przerwany kontekst." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — pending 1 do 0", + "content_tex": "Przy MSIE=1 i MIE=0 źródło jest już pending, lecz licznik wynosi 0. Po otwarciu MIE handler widzi \\texttt{0x80000003} i pending=1, wykonuje clear, zwiększa licznik, a po mret main mierzy pending=0." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — configure, assert, observe, enable", + "content_tex": "Kolejność eliminuje wyścig pomiaru: najpierw wyłącz wszystko, ustaw MSIE, podnieś źródło, zmierz pending, dopiero potem ustaw MIE. Handler odczytuje cause/pending przed clear i publikuje licznik po clear." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — MASKED_PENDING, ACTIVE, CLEARED", + "content_tex": "Źródło przechodzi do \\texttt{MASKED\\_PENDING}, bo globalna bramka jest zamknięta. Po MIE staje się ACTIVE; clear w ISR tworzy CLEARED. Resumed=1 jest osobnym stanem normalnego kodu po mret." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — cause z bitem 31", + "content_tex": "Wartość \\texttt{0x80000003} łączy bit interrupt i kod 3. Listing ma pokazać CSR dla mie/mstatus/mip, dostęp do testbench clear oraz mret. Oracle wymaga całego śladu, nie tylko pass." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — clear level source before publish", + "content_tex": "Źródło poziomowe usuwa się przed opublikowaniem ukończenia ISR. Gdyby licznik wzrósł bez clear, po mret żądanie pozostałoby aktywne i handler mógłby wejść ponownie." + } + ], + "flow": [ + { + "kind": "block", + "id": "task02.a1", + "title": "A1 CONTEXT · AKTYWNE — kontrolowane źródło bez peryferium", + "content_tex": "\\textbf{Zachowany przykład:} \\nolinkurl{src/tasks/task02_machine_software_irq.c}.\\par \\texttt{tb\\_set\\_softirq(0)} podnosi machine software interrupt hart0. Testbench jest źródłem, CSR są kontrolą rdzenia, ISR usuwa żądanie, a main ocenia wznowienie. UART/GPIO nie uczestniczą." + }, + { + "kind": "block", + "id": "task02.a2", + "title": "A2 STRUCTURE · AKTYWNE — trzy bity i jeden wektor", + "content_tex": "Źródło jest widoczne jako \\texttt{mip.MSIP}; indywidualna bramka to \\texttt{mie.MSIE}, globalna to \\texttt{mstatus.MIE}. Cause 3 w trybie vectored wybiera slot 3 i symbol \\texttt{isr\\_machine\\_softirq}." + }, + { + "kind": "block", + "id": "task02.a3", + "title": "A3 DISPATCH · AKTYWNE — sprzęt wybiera vector 3", + "content_tex": "Bit interrupt w mcause i kod 3 powodują sprzętowy wybór slotu machine software IRQ. Nie jest to statyczne jal z main. Po wejściu symbol handlera jest już określony przez wektor, a mret odtwarza przerwany kontekst." + }, + { + "kind": "block", + "id": "task02.a4", + "title": "A4 APPLICATION · AKTYWNE — pending 1 do 0", + "content_tex": "Przy MSIE=1 i MIE=0 źródło jest już pending, lecz licznik wynosi 0. Po otwarciu MIE handler widzi \\texttt{0x80000003} i pending=1, wykonuje clear, zwiększa licznik, a po mret main mierzy pending=0." + }, + { + "kind": "block", + "id": "task02.a5", + "title": "A5 FLOW · AKTYWNE — configure, assert, observe, enable", + "content_tex": "Kolejność eliminuje wyścig pomiaru: najpierw wyłącz wszystko, ustaw MSIE, podnieś źródło, zmierz pending, dopiero potem ustaw MIE. Handler odczytuje cause/pending przed clear i publikuje licznik po clear." + }, + { + "kind": "block", + "id": "task02.a6", + "title": "A6 STATE · AKTYWNE — MASKED_PENDING, ACTIVE, CLEARED", + "content_tex": "Źródło przechodzi do \\texttt{MASKED\\_PENDING}, bo globalna bramka jest zamknięta. Po MIE staje się ACTIVE; clear w ISR tworzy CLEARED. Resumed=1 jest osobnym stanem normalnego kodu po mret." + }, + { + "kind": "block", + "id": "task02.a7", + "title": "A7 RUNTIME · AKTYWNE — cause z bitem 31", + "content_tex": "Wartość \\texttt{0x80000003} łączy bit interrupt i kod 3. Listing ma pokazać CSR dla mie/mstatus/mip, dostęp do testbench clear oraz mret. Oracle wymaga całego śladu, nie tylko pass." + }, + { + "kind": "block", + "id": "task02.a8", + "title": "A8 PATTERNS · AKTYWNE — clear level source before publish", + "content_tex": "Źródło poziomowe usuwa się przed opublikowaniem ukończenia ISR. Gdyby licznik wzrósł bez clear, po mret żądanie pozostałoby aktywne i handler mógłby wejść ponownie." + }, + { + "kind": "exercise", + "id": "task02.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Zapisz stan pending przed globalnym enable, mcause w ISR i pending po clear. Rozdziel źródło MSIP od obu bramek oraz wskaż, dlaczego handler musi usunąć źródło przed mret.", + "evidence_tex": "Ślad źródło→pending→MSIE/MIE→vector 3→ISR→clear→mret, raport globali i kod wyjścia Hazard3.", + "criterion": "Hazard3: count=1, mcause=0x80000003, pending_before=1, pending_in_handler=1, pending_after=0, resumed=1, pass=1 i kod 0." + }, + { + "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. Pending i bramki przed wejściem}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. mcause, clear, mret i wznowienie}\\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": [ + "C10.WE01" + ], + "learning_effect_refs": [ + "C10.EN01", + "C10.EK01" + ], + "assessment_criterion_ref": "C10.KW01" + }, + "task03": { + "title": "Macierz pending, MSIE i MIE", + "uuid": "f56dba83-f7a9-5643-8f2e-84df1e8a2190", + "prompt_tex": "Wypełnij trzy wiersze: pending=1 z samym MIE, pending=1 z samym MSIE oraz pending=1 z obiema bramkami. Przewidź licznik ISR i końcowy pending.", + "criterion": "Hazard3: pending=1, blocked_no_msie=1, blocked_no_mie=1, delivered_both=1, count=1, mcause=0x80000003, pending_after=0, pass=1 i kod 0.", + "conclusion_tex": "", + "render_task_acceptance": false, + "viewpoints": [ + { + "id": "A1", + "status": "enabled", + "title": "CONTEXT — jedna zmienna, dwie kontrolki", + "content_tex": "Bodziec MSIP pozostaje ten sam podczas dwóch prób blokowanych i próby dostarczonej. Przykład zmienia wyłącznie bramki rdzenia, więc nie myli nowego zdarzenia z nową konfiguracją." + }, + { + "id": "A2", + "status": "enabled", + "title": "STRUCTURE — macierz 1×2×2", + "content_tex": "Oś danych to pending=1. Dwie osie sterujące to MSIE i MIE. Cztery kombinacje mają jeden stan dostarczalny: oba bity 1. Przykład mierzy trzy istotne wiersze przy utrzymanym pending." + }, + { + "id": "A3", + "status": "enabled", + "title": "DISPATCH — wejście dopiero dla 1/1", + "content_tex": "Sprzętowy dispatch do vector 3 nie zachodzi przy żadnej pojedynczej otwartej bramce. Dopiero MSIE=1 i MIE=1 pozwalają utworzyć trap, zapisać cause i wejść do ISR kończącego się mret." + }, + { + "id": "A4", + "status": "enabled", + "title": "APPLICATION — dwa razy blocked, raz delivered", + "content_tex": "Przy MIE=1/MSIE=0 licznik zostaje 0. Przy MIE=0/MSIE=1 również zostaje 0. Przy obu równych 1 rośnie dokładnie do 1, mcause ma wartość 0x80000003, a clear zeruje pending." + }, + { + "id": "A5", + "status": "enabled", + "title": "FLOW — nie zmieniaj źródła między próbami", + "content_tex": "Program podnosi MSIP raz, następnie testuje global-only, individual-only i both. Globalny bit jest zamykany przed zmianą MSIE, aby dostarczenie nie zaszło między pomiarem a zapisaniem wyniku." + }, + { + "id": "A6", + "status": "enabled", + "title": "STATE — P10, P01, P11, CLEAR", + "content_tex": "Skrót \\texttt{Pxy} oznacza pending=1, MSIE=x, MIE=y. Ślad to \\texttt{P01(blocked) -> P10(blocked) -> P11(active) -> CLEAR}. Licznik zmienia się tylko na trzeciej krawędzi." + }, + { + "id": "A7", + "status": "enabled", + "title": "RUNTIME — odczyt mip, zapisy mie/mstatus", + "content_tex": "Raport utrwala trzy decyzje i cause. Listing rozdziela \\texttt{csrs/csrc mie}, \\texttt{csrs/csrc mstatus} oraz odczyt mip. Objdump niezależnie potwierdza mret w ISR." + }, + { + "id": "A8", + "status": "enabled", + "title": "PATTERNS — source, individual, global gate", + "content_tex": "Trzywarstwowy model zapobiega typowemu błędowi: pending nie znaczy delivered. Ten sam wzorzec wróci dla MTIP/MTIE oraz external IRQ z enable peryferium, kontrolera i globalnym MIE." + } + ], + "flow": [ + { + "kind": "block", + "id": "task03.a1", + "title": "A1 CONTEXT · AKTYWNE — jedna zmienna, dwie kontrolki", + "content_tex": "\\textbf{Zachowany przykład:} \\nolinkurl{src/tasks/task03_pending_enable_matrix.c}.\\par Bodziec MSIP pozostaje ten sam podczas dwóch prób blokowanych i próby dostarczonej. Przykład zmienia wyłącznie bramki rdzenia, więc nie myli nowego zdarzenia z nową konfiguracją." + }, + { + "kind": "block", + "id": "task03.a2", + "title": "A2 STRUCTURE · AKTYWNE — macierz 1×2×2", + "content_tex": "Oś danych to pending=1. Dwie osie sterujące to MSIE i MIE. Cztery kombinacje mają jeden stan dostarczalny: oba bity 1. Przykład mierzy trzy istotne wiersze przy utrzymanym pending." + }, + { + "kind": "block", + "id": "task03.a3", + "title": "A3 DISPATCH · AKTYWNE — wejście dopiero dla 1/1", + "content_tex": "Sprzętowy dispatch do vector 3 nie zachodzi przy żadnej pojedynczej otwartej bramce. Dopiero MSIE=1 i MIE=1 pozwalają utworzyć trap, zapisać cause i wejść do ISR kończącego się mret." + }, + { + "kind": "block", + "id": "task03.a4", + "title": "A4 APPLICATION · AKTYWNE — dwa razy blocked, raz delivered", + "content_tex": "Przy MIE=1/MSIE=0 licznik zostaje 0. Przy MIE=0/MSIE=1 również zostaje 0. Przy obu równych 1 rośnie dokładnie do 1, mcause ma wartość 0x80000003, a clear zeruje pending." + }, + { + "kind": "block", + "id": "task03.a5", + "title": "A5 FLOW · AKTYWNE — nie zmieniaj źródła między próbami", + "content_tex": "Program podnosi MSIP raz, następnie testuje global-only, individual-only i both. Globalny bit jest zamykany przed zmianą MSIE, aby dostarczenie nie zaszło między pomiarem a zapisaniem wyniku." + }, + { + "kind": "block", + "id": "task03.a6", + "title": "A6 STATE · AKTYWNE — P10, P01, P11, CLEAR", + "content_tex": "Skrót \\texttt{Pxy} oznacza pending=1, MSIE=x, MIE=y. Ślad to \\texttt{P01(blocked) -> P10(blocked) -> P11(active) -> CLEAR}. Licznik zmienia się tylko na trzeciej krawędzi." + }, + { + "kind": "block", + "id": "task03.a7", + "title": "A7 RUNTIME · AKTYWNE — odczyt mip, zapisy mie/mstatus", + "content_tex": "Raport utrwala trzy decyzje i cause. Listing rozdziela \\texttt{csrs/csrc mie}, \\texttt{csrs/csrc mstatus} oraz odczyt mip. Objdump niezależnie potwierdza mret w ISR." + }, + { + "kind": "block", + "id": "task03.a8", + "title": "A8 PATTERNS · AKTYWNE — source, individual, global gate", + "content_tex": "Trzywarstwowy model zapobiega typowemu błędowi: pending nie znaczy delivered. Ten sam wzorzec wróci dla MTIP/MTIE oraz external IRQ z enable peryferium, kontrolera i globalnym MIE." + }, + { + "kind": "exercise", + "id": "task03.proof", + "title": "Przewidywanie → wykonanie → wniosek", + "prompt_tex": "Wypełnij trzy wiersze: pending=1 z samym MIE, pending=1 z samym MSIE oraz pending=1 z obiema bramkami. Przewidź licznik ISR i końcowy pending.", + "evidence_tex": "Tabela prawdy dwóch bramek dla jednego utrzymywanego pending, licznik ISR, końcowy clear, mret i kod wyjścia Hazard3.", + "criterion": "Hazard3: pending=1, blocked_no_msie=1, blocked_no_mie=1, delivered_both=1, count=1, mcause=0x80000003, pending_after=0, pass=1 i kod 0." + }, + { + "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. Macierz pending/MSIE/MIE}\\par\\noindent\\dotfill\\par\\noindent\\dotfill\\par\\textbf{3. Dostarczenie, clear 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": [ + "C10.WE01" + ], + "learning_effect_refs": [ + "C10.EN01", + "C10.EK01" + ], + "assessment_criterion_ref": "C10.KW01" + } + }, + "tasks_order": [ + "task01", + "task02", + "task03" + ] +} diff --git a/json/card_spec.json b/json/card_spec.json new file mode 100644 index 0000000..57e9c59 --- /dev/null +++ b/json/card_spec.json @@ -0,0 +1,109 @@ +{ + "card": { + "number": "10", + "slug": "traps-interrupt-control", + "title": "Pułapki i sterowanie przerwaniami RV32I", + "topic": "ecall, mepc, mcause, machine software IRQ oraz bramki mie/mstatus", + "status": "Gotowa", + "version": "v00.01", + "revision_date": "2026-07-20T00:00:00+02:00" + }, + "scope_headers": ["Typ", "Task", "Idea", "Waga"], + "front": { + "goal": "Uczeń odróżnia synchroniczny wyjątek od asynchronicznego przerwania, wyprowadza adres wznowienia z mepc oraz dowodzi, że samo pending nie wystarcza bez indywidualnej i globalnej bramki enable.", + "scope": "Trzy obrazy RV32I działają na rzeczywistym modelu Hazard3. Task01 wykonuje \\texttt{ecall}; Task02 używa kontrolowanego machine software interrupt; Task03 mierzy macierz pending, \\texttt{mie.MSIE} i \\texttt{mstatus.MIE}. Peryferia pojawiają się dopiero w C12 i C13." + }, + "learning": { + "reasoning_label": "Cause, gate i resume", + "reasoning": "Uczeń osobno zapisuje źródło zdarzenia, mcause, mepc, stan pending, obie bramki enable i efekt po mret.", + "practice_label": "Pułapka widoczna w listingu", + "practice": "Uczeń uruchamia trzy obrazy Hazard3 i wiąże raporty runtime z instrukcjami ecall, CSR, wektorami i mret.", + "criterion": "Task01: jeden ecall daje mcause=11, mepc jest zwiększone o 4 i kod normalny wznawia pracę. Task02: software IRQ ma mcause=0x80000003, pending 1 przed i w ISR, 0 po clear oraz jedno wznowienie. Task03: pending pozostaje zablokowane osobno bez MSIE i bez MIE, a jest dostarczone dokładnie raz dopiero z obiema bramkami.", + "requirement": "Konfiguracja i analiza machine-mode trap z jawnym kontraktem źródła, pending, enable, handlera i adresu wznowienia." + }, + "sections": [ + { + "title": "1 — Wyjątek synchroniczny wskazuje instrukcję", + "content_tex": "\\texttt{ecall} jest wykonywany przez bieżący strumień instrukcji, więc \\texttt{mcause=11} nie ma ustawionego bitu interrupt, a \\texttt{mepc} wskazuje samo \\texttt{ecall}. Handler Task01 świadomie zapisuje \\texttt{mepc+4}; bez tego \\texttt{mret} wykonałby ponownie tę samą instrukcję. Taka polityka jest poprawna dla tego kontrolowanego ECALL, ale nie wolno automatycznie pomijać instrukcji przy każdym błędzie." + }, + { + "title": "2 — Software IRQ jest asynchronicznym źródłem poziomowym", + "content_tex": "Testbench ustawia MSIP hart0, a rdzeń widzi \\texttt{mip.MSIP}. Dostarczenie wymaga dodatkowo \\texttt{mie.MSIE=1} i \\texttt{mstatus.MIE=1}. Wektor 3 prowadzi do \\texttt{isr\\_machine\\_softirq}; handler odczytuje \\texttt{mcause=0x80000003}, usuwa źródło i dopiero potem publikuje licznik. \\texttt{mret} wraca do przerwanego kodu, a nie do instrukcji wybranej ręcznie przez aplikację." + }, + { + "title": "3 — Pending i enable odpowiadają na inne pytania", + "content_tex": "Pending mówi, że źródło żąda obsługi. \\texttt{mie.MSIE} dopuszcza konkretną klasę, a \\texttt{mstatus.MIE} otwiera globalną bramkę machine mode. Task03 utrzymuje to samo pending i kolejno sprawdza dwa stany z jedną zamkniętą bramką oraz stan z obiema otwartymi. Dzięki temu kod 0 dowodzi całej macierzy, a nie tylko tego, że ISR kiedyś się wykonał." + } + ], + "tasks": [ + { + "id": "task01", + "chapter": "ECALL", + "title": "ECALL i wznowienie pod mepc+4", + "idea_tex": "synchroniczny cause 11, mepc i mret", + "priority": "kluczowe", + "key": true, + "prompt_tex": "Przed uruchomieniem przewidź bit interrupt i kod mcause, wskaż wartość mepc oraz adres wznowienia. Wyjaśnij, co stałoby się bez zapisu mepc+4.", + "criterion": "Hazard3: count=1, mcause=0x0000000b, resume_pc-mepc=4, resumed=1, pass=1 i kod 0.", + "evidence_tex": "Adres ecall i dwa adresy mepc z raportu/listingu, cause 11, instrukcja mret oraz kod wyjścia Hazard3.", + "worksheet_step2": "mcause, mepc i adres wznowienia", + "worksheet_step3": "ecall/mret w listingu i kod wyjścia", + "viewpoints": [ + {"id":"A1","status":"enabled","title":"CONTEXT — kontrolowany wyjątek M-mode","content_tex":"Granica zaczyna się na instrukcji \\texttt{ecall} w main i kończy po powrocie do kolejnej instrukcji. Nie ma zewnętrznego peryferium ani pending IRQ; rdzeń sam tworzy synchroniczną pułapkę."}, + {"id":"A2","status":"enabled","title":"STRUCTURE — mcause, mepc i mtvec","content_tex":"\\texttt{mcause} zapisuje klasę 11 bez bitu interrupt, \\texttt{mepc} zapisuje adres ECALL, a baza \\texttt{mtvec} prowadzi wszystkie synchroniczne wyjątki do \\texttt{handle\\_exception}. Handler publikuje oryginał i osobny adres wznowienia."}, + {"id":"A3","status":"enabled","title":"DISPATCH — synchroniczny slot mtvec","content_tex":"Sprzęt wybiera bazowy slot wektora, ponieważ zdarzenie jest wyjątkiem, nie IRQ. \\texttt{handle\\_exception} odczytuje mcause i obsługuje jedyny dopuszczony przypadek ECALL. To granica trap dispatch, choć nie ma tablicy callbacków."}, + {"id":"A4","status":"enabled","title":"APPLICATION — cause 11 i stały krok 4","content_tex":"ECALL w RV32I jest instrukcją 32-bitową, dlatego dla tego przykładu poprawny resume ma wartość \\texttt{mepc+4}. Gate wymaga jednego wejścia, cause 11, delty 4 i ustawienia resumed dopiero po mret."}, + {"id":"A5","status":"enabled","title":"FLOW — ecall, save, patch, mret","content_tex":"Normalny kod wykonuje ECALL. Rdzeń zapisuje mepc/mcause, skacze do wektora, handler odczytuje oba CSR i zapisuje nowe mepc. Epilog \\texttt{interrupt(\"machine\")} kończy się mret; dopiero potem main zapisuje resumed."}, + {"id":"A6","status":"enabled","title":"STATE — RUNNING, TRAP, RESUMED","content_tex":"Stan przechodzi \\texttt{RUNNING -> TRAP(mepc=ecall,cause=11) -> RESUMED(pc=mepc+4)}. Licznik 1 odróżnia pojedyncze wznowienie od pętli ponownego wykonywania ECALL."}, + {"id":"A7","status":"enabled","title":"RUNTIME — ecall i mret w ELF","content_tex":"Oracle porównuje raportowane adresy i niezależnie wymaga różnicy 4. Objdump musi pokazać \\texttt{ecall} w main oraz \\texttt{mret} w handlerze. Segmenty LOAD pozostają rozdzielone R-X/R-W."}, + {"id":"A8","status":"enabled","title":"PATTERNS — explicit resume policy","content_tex":"Wzorzec handlera wyjątku obejmuje jawną decyzję: retry, skip albo terminate. Task01 wybiera skip tylko dla znanego ECALL. Dla faultu pamięci bezwarunkowe mepc+4 mogłoby ukryć błąd i jest niedozwolone."} + ] + }, + { + "id": "task02", + "chapter": "MSIP", + "title": "Machine software IRQ i clear źródła", + "idea_tex": "MSIP, MSIE, MIE, vector 3 i mret", + "priority": "kluczowe", + "key": true, + "prompt_tex": "Zapisz stan pending przed globalnym enable, mcause w ISR i pending po clear. Rozdziel źródło MSIP od obu bramek oraz wskaż, dlaczego handler musi usunąć źródło przed mret.", + "criterion": "Hazard3: count=1, mcause=0x80000003, pending_before=1, pending_in_handler=1, pending_after=0, resumed=1, pass=1 i kod 0.", + "evidence_tex": "Ślad źródło→pending→MSIE/MIE→vector 3→ISR→clear→mret, raport globali i kod wyjścia Hazard3.", + "worksheet_step2": "Pending i bramki przed wejściem", + "worksheet_step3": "mcause, clear, mret i wznowienie", + "viewpoints": [ + {"id":"A1","status":"enabled","title":"CONTEXT — kontrolowane źródło bez peryferium","content_tex":"\\texttt{tb\\_set\\_softirq(0)} podnosi machine software interrupt hart0. Testbench jest źródłem, CSR są kontrolą rdzenia, ISR usuwa żądanie, a main ocenia wznowienie. UART/GPIO nie uczestniczą."}, + {"id":"A2","status":"enabled","title":"STRUCTURE — trzy bity i jeden wektor","content_tex":"Źródło jest widoczne jako \\texttt{mip.MSIP}; indywidualna bramka to \\texttt{mie.MSIE}, globalna to \\texttt{mstatus.MIE}. Cause 3 w trybie vectored wybiera slot 3 i symbol \\texttt{isr\\_machine\\_softirq}."}, + {"id":"A3","status":"enabled","title":"DISPATCH — sprzęt wybiera vector 3","content_tex":"Bit interrupt w mcause i kod 3 powodują sprzętowy wybór slotu machine software IRQ. Nie jest to statyczne jal z main. Po wejściu symbol handlera jest już określony przez wektor, a mret odtwarza przerwany kontekst."}, + {"id":"A4","status":"enabled","title":"APPLICATION — pending 1 do 0","content_tex":"Przy MSIE=1 i MIE=0 źródło jest już pending, lecz licznik wynosi 0. Po otwarciu MIE handler widzi \\texttt{0x80000003} i pending=1, wykonuje clear, zwiększa licznik, a po mret main mierzy pending=0."}, + {"id":"A5","status":"enabled","title":"FLOW — configure, assert, observe, enable","content_tex":"Kolejność eliminuje wyścig pomiaru: najpierw wyłącz wszystko, ustaw MSIE, podnieś źródło, zmierz pending, dopiero potem ustaw MIE. Handler odczytuje cause/pending przed clear i publikuje licznik po clear."}, + {"id":"A6","status":"enabled","title":"STATE — MASKED_PENDING, ACTIVE, CLEARED","content_tex":"Źródło przechodzi do \\texttt{MASKED\\_PENDING}, bo globalna bramka jest zamknięta. Po MIE staje się ACTIVE; clear w ISR tworzy CLEARED. Resumed=1 jest osobnym stanem normalnego kodu po mret."}, + {"id":"A7","status":"enabled","title":"RUNTIME — cause z bitem 31","content_tex":"Wartość \\texttt{0x80000003} łączy bit interrupt i kod 3. Listing ma pokazać CSR dla mie/mstatus/mip, dostęp do testbench clear oraz mret. Oracle wymaga całego śladu, nie tylko pass."}, + {"id":"A8","status":"enabled","title":"PATTERNS — clear level source before publish","content_tex":"Źródło poziomowe usuwa się przed opublikowaniem ukończenia ISR. Gdyby licznik wzrósł bez clear, po mret żądanie pozostałoby aktywne i handler mógłby wejść ponownie."} + ] + }, + { + "id": "task03", + "chapter": "GATE", + "title": "Macierz pending, MSIE i MIE", + "idea_tex": "to samo źródło, dwie niezależne bramki", + "priority": "kluczowe", + "key": true, + "prompt_tex": "Wypełnij trzy wiersze: pending=1 z samym MIE, pending=1 z samym MSIE oraz pending=1 z obiema bramkami. Przewidź licznik ISR i końcowy pending.", + "criterion": "Hazard3: pending=1, blocked_no_msie=1, blocked_no_mie=1, delivered_both=1, count=1, mcause=0x80000003, pending_after=0, pass=1 i kod 0.", + "evidence_tex": "Tabela prawdy dwóch bramek dla jednego utrzymywanego pending, licznik ISR, końcowy clear, mret i kod wyjścia Hazard3.", + "worksheet_step2": "Macierz pending/MSIE/MIE", + "worksheet_step3": "Dostarczenie, clear i kod wyjścia", + "viewpoints": [ + {"id":"A1","status":"enabled","title":"CONTEXT — jedna zmienna, dwie kontrolki","content_tex":"Bodziec MSIP pozostaje ten sam podczas dwóch prób blokowanych i próby dostarczonej. Przykład zmienia wyłącznie bramki rdzenia, więc nie myli nowego zdarzenia z nową konfiguracją."}, + {"id":"A2","status":"enabled","title":"STRUCTURE — macierz 1×2×2","content_tex":"Oś danych to pending=1. Dwie osie sterujące to MSIE i MIE. Cztery kombinacje mają jeden stan dostarczalny: oba bity 1. Przykład mierzy trzy istotne wiersze przy utrzymanym pending."}, + {"id":"A3","status":"enabled","title":"DISPATCH — wejście dopiero dla 1/1","content_tex":"Sprzętowy dispatch do vector 3 nie zachodzi przy żadnej pojedynczej otwartej bramce. Dopiero MSIE=1 i MIE=1 pozwalają utworzyć trap, zapisać cause i wejść do ISR kończącego się mret."}, + {"id":"A4","status":"enabled","title":"APPLICATION — dwa razy blocked, raz delivered","content_tex":"Przy MIE=1/MSIE=0 licznik zostaje 0. Przy MIE=0/MSIE=1 również zostaje 0. Przy obu równych 1 rośnie dokładnie do 1, mcause ma wartość 0x80000003, a clear zeruje pending."}, + {"id":"A5","status":"enabled","title":"FLOW — nie zmieniaj źródła między próbami","content_tex":"Program podnosi MSIP raz, następnie testuje global-only, individual-only i both. Globalny bit jest zamykany przed zmianą MSIE, aby dostarczenie nie zaszło między pomiarem a zapisaniem wyniku."}, + {"id":"A6","status":"enabled","title":"STATE — P10, P01, P11, CLEAR","content_tex":"Skrót \\texttt{Pxy} oznacza pending=1, MSIE=x, MIE=y. Ślad to \\texttt{P01(blocked) -> P10(blocked) -> P11(active) -> CLEAR}. Licznik zmienia się tylko na trzeciej krawędzi."}, + {"id":"A7","status":"enabled","title":"RUNTIME — odczyt mip, zapisy mie/mstatus","content_tex":"Raport utrwala trzy decyzje i cause. Listing rozdziela \\texttt{csrs/csrc mie}, \\texttt{csrs/csrc mstatus} oraz odczyt mip. Objdump niezależnie potwierdza mret w ISR."}, + {"id":"A8","status":"enabled","title":"PATTERNS — source, individual, global gate","content_tex":"Trzywarstwowy model zapobiega typowemu błędowi: pending nie znaczy delivered. Ten sam wzorzec wróci dla MTIP/MTIE oraz external IRQ z enable peryferium, kontrolera i globalnym MIE."} + ] + } + ] +} diff --git a/link/hazard3_c10.ld b/link/hazard3_c10.ld new file mode 100644 index 0000000..4c5096f --- /dev/null +++ b/link/hazard3_c10.ld @@ -0,0 +1,48 @@ +OUTPUT_FORMAT("elf32-littleriscv") +OUTPUT_ARCH(riscv) +ENTRY(_start) + +MEMORY { RAM (rwx) : ORIGIN = 0x80000000, LENGTH = 16M } + +PHDRS +{ + text PT_LOAD FLAGS(5); + data PT_LOAD FLAGS(6); +} + +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 + .bss (NOLOAD) : ALIGN(16) + { + __bss_start = .; + *(.bss .bss.* COMMON) + *(.sbss .sbss.*) + __bss_end = .; + } > RAM :data + . = ALIGN(16); + _end = .; + PROVIDE(end = .); + __stack_top = ORIGIN(RAM) + LENGTH(RAM); + __stack_reserve = 64K; + __stack_bottom = __stack_top - __stack_reserve; + __global_pointer$ = __data_start + 0x800; + /DISCARD/ : { *(.comment) *(.note .note.*) } +} + +ASSERT(_end <= __stack_bottom, + "C10: program overlaps the reserved 64 KiB stack") diff --git a/scripts/render_card_layouts.sh b/scripts/render_card_layouts.sh new file mode 100755 index 0000000..ff42712 --- /dev/null +++ b/scripts/render_card_layouts.sh @@ -0,0 +1,7 @@ +#!/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 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..3ecbd71 --- /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 + +if ! git -C "$repo_root" rev-parse --verify HEAD >/dev/null 2>&1; then + export GITEA_SHA=0000000000000000000000000000000000000000 +fi + +exec "$layouts_root/tools/render_card_pdf_preserving.sh" "$repo_root" diff --git a/src/tasks/c10_common.h b/src/tasks/c10_common.h new file mode 100644 index 0000000..7fc378b --- /dev/null +++ b/src/tasks/c10_common.h @@ -0,0 +1,61 @@ +#ifndef C10_COMMON_H +#define C10_COMMON_H + +#include +#include + +#include "hazard3_csr.h" +#include "tb_cxxrtl_io.h" + +#define MSTATUS_MIE UINT32_C(0x00000008) +#define MIE_MSIE UINT32_C(0x00000008) +#define MIP_MSIP UINT32_C(0x00000008) +#define MACHINE_ECALL_CAUSE UINT32_C(0x0000000b) +#define MACHINE_SOFTWARE_IRQ_CAUSE UINT32_C(0x80000003) + +static inline void c10_global_irq_enable(bool enable) +{ + if (enable) + set_csr(mstatus, MSTATUS_MIE); + else + clear_csr(mstatus, MSTATUS_MIE); +} + +static inline void c10_software_irq_enable(bool enable) +{ + if (enable) + set_csr(mie, MIE_MSIE); + else + clear_csr(mie, MIE_MSIE); +} + +static inline void c10_disable_interrupts(void) +{ + c10_global_irq_enable(false); + c10_software_irq_enable(false); + tb_clr_softirq(0); +} + +static inline void c10_settle(void) +{ + for (uint32_t i = 0; i < 32u; ++i) + __asm__ volatile("nop"); +} + +static inline bool c10_wait_for(volatile uint32_t *value, uint32_t expected) +{ + for (uint32_t i = 0; i < 100000u; ++i) { + if (*value == expected) + return true; + __asm__ volatile("wfi"); + } + return false; +} + +static inline void c10_report(const char *label, uint32_t value) +{ + tb_puts(label); + tb_put_u32(value); +} + +#endif diff --git a/src/tasks/task01_ecall_resume.c b/src/tasks/task01_ecall_resume.c new file mode 100644 index 0000000..b830a61 --- /dev/null +++ b/src/tasks/task01_ecall_resume.c @@ -0,0 +1,41 @@ +#include "c10_common.h" + +volatile uint32_t g_task01_count; +volatile uint32_t g_task01_mcause; +volatile uint32_t g_task01_mepc; +volatile uint32_t g_task01_resume_pc; +volatile uint32_t g_task01_resumed; +volatile uint32_t g_task01_pass; + +void __attribute__((interrupt("machine"))) handle_exception(void) +{ + const uint32_t cause = read_csr(mcause); + const uint32_t pc = read_csr(mepc); + + g_task01_count++; + g_task01_mcause = cause; + g_task01_mepc = pc; + g_task01_resume_pc = pc + 4u; + write_csr(mepc, g_task01_resume_pc); +} + +int main(void) +{ + c10_disable_interrupts(); + __asm__ volatile("ecall"); + g_task01_resumed = 1u; + + g_task01_pass = g_task01_count == 1u && + g_task01_mcause == MACHINE_ECALL_CAUSE && + g_task01_resume_pc - g_task01_mepc == 4u && + g_task01_resumed == 1u; + + c10_report("T01 count=", g_task01_count); + c10_report("T01 mcause=", g_task01_mcause); + c10_report("T01 mepc=", g_task01_mepc); + c10_report("T01 resume_pc=", g_task01_resume_pc); + c10_report("T01 delta=", g_task01_resume_pc - g_task01_mepc); + c10_report("T01 resumed=", g_task01_resumed); + c10_report("T01 pass=", g_task01_pass); + return g_task01_pass ? 0 : 1; +} diff --git a/src/tasks/task02_machine_software_irq.c b/src/tasks/task02_machine_software_irq.c new file mode 100644 index 0000000..82f1bf8 --- /dev/null +++ b/src/tasks/task02_machine_software_irq.c @@ -0,0 +1,55 @@ +#include "c10_common.h" + +volatile uint32_t g_task02_count; +volatile uint32_t g_task02_mcause; +volatile uint32_t g_task02_pending_in_handler; +volatile uint32_t g_task02_pending_before_enable; +volatile uint32_t g_task02_pending_after; +volatile uint32_t g_task02_resumed; +volatile uint32_t g_task02_pass; + +void __attribute__((interrupt("machine"))) isr_machine_softirq(void) +{ + g_task02_mcause = read_csr(mcause); + g_task02_pending_in_handler = + (read_csr(mip) & MIP_MSIP) != 0u ? 1u : 0u; + tb_clr_softirq(0); + g_task02_count++; +} + +int main(void) +{ + c10_disable_interrupts(); + c10_software_irq_enable(true); + tb_set_softirq(0); + c10_settle(); + g_task02_pending_before_enable = + (read_csr(mip) & MIP_MSIP) != 0u ? 1u : 0u; + + c10_global_irq_enable(true); + const bool handled = c10_wait_for(&g_task02_count, 1u); + g_task02_resumed = 1u; + + c10_global_irq_enable(false); + c10_settle(); + g_task02_pending_after = + (read_csr(mip) & MIP_MSIP) != 0u ? 1u : 0u; + c10_software_irq_enable(false); + + g_task02_pass = handled && + g_task02_count == 1u && + g_task02_mcause == MACHINE_SOFTWARE_IRQ_CAUSE && + g_task02_pending_in_handler == 1u && + g_task02_pending_before_enable == 1u && + g_task02_pending_after == 0u && + g_task02_resumed == 1u; + + c10_report("T02 count=", g_task02_count); + c10_report("T02 mcause=", g_task02_mcause); + c10_report("T02 pending_before=", g_task02_pending_before_enable); + c10_report("T02 pending_in_handler=", g_task02_pending_in_handler); + c10_report("T02 pending_after=", g_task02_pending_after); + c10_report("T02 resumed=", g_task02_resumed); + c10_report("T02 pass=", g_task02_pass); + return g_task02_pass ? 0 : 1; +} diff --git a/src/tasks/task03_pending_enable_matrix.c b/src/tasks/task03_pending_enable_matrix.c new file mode 100644 index 0000000..77ab54f --- /dev/null +++ b/src/tasks/task03_pending_enable_matrix.c @@ -0,0 +1,62 @@ +#include "c10_common.h" + +volatile uint32_t g_task03_count; +volatile uint32_t g_task03_mcause; +volatile uint32_t g_task03_pending_asserted; +volatile uint32_t g_task03_blocked_without_msie; +volatile uint32_t g_task03_blocked_without_mie; +volatile uint32_t g_task03_delivered_with_both; +volatile uint32_t g_task03_pending_after; +volatile uint32_t g_task03_pass; + +void __attribute__((interrupt("machine"))) isr_machine_softirq(void) +{ + g_task03_mcause = read_csr(mcause); + tb_clr_softirq(0); + g_task03_count++; +} + +int main(void) +{ + c10_disable_interrupts(); + tb_set_softirq(0); + c10_settle(); + g_task03_pending_asserted = + (read_csr(mip) & MIP_MSIP) != 0u ? 1u : 0u; + + c10_global_irq_enable(true); + c10_settle(); + g_task03_blocked_without_msie = g_task03_count == 0u ? 1u : 0u; + + c10_global_irq_enable(false); + c10_software_irq_enable(true); + c10_settle(); + g_task03_blocked_without_mie = g_task03_count == 0u ? 1u : 0u; + + c10_global_irq_enable(true); + g_task03_delivered_with_both = c10_wait_for(&g_task03_count, 1u) ? 1u : 0u; + + c10_global_irq_enable(false); + c10_settle(); + g_task03_pending_after = + (read_csr(mip) & MIP_MSIP) != 0u ? 1u : 0u; + c10_software_irq_enable(false); + + g_task03_pass = g_task03_pending_asserted == 1u && + g_task03_blocked_without_msie == 1u && + g_task03_blocked_without_mie == 1u && + g_task03_delivered_with_both == 1u && + g_task03_count == 1u && + g_task03_mcause == MACHINE_SOFTWARE_IRQ_CAUSE && + g_task03_pending_after == 0u; + + c10_report("T03 pending=", g_task03_pending_asserted); + c10_report("T03 blocked_no_msie=", g_task03_blocked_without_msie); + c10_report("T03 blocked_no_mie=", g_task03_blocked_without_mie); + c10_report("T03 delivered_both=", g_task03_delivered_with_both); + c10_report("T03 count=", g_task03_count); + c10_report("T03 mcause=", g_task03_mcause); + c10_report("T03 pending_after=", g_task03_pending_after); + c10_report("T03 pass=", g_task03_pass); + return g_task03_pass ? 0 : 1; +} diff --git a/tests/test_card.sh b/tests/test_card.sh new file mode 100755 index 0000000..fceefd9 --- /dev/null +++ b/tests/test_card.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +tmp_dir="$(mktemp -d /tmp/c10-card.XXXXXX)" +cleanup() { + rm -rf -- "$tmp_dir" +} +trap cleanup EXIT HUP INT TERM + +"$root/scripts/render_card_layouts.sh" >/dev/null +"$root/scripts/render_new_pdf.sh" >/dev/null + +pdf="$(find "$root/doc/pdf" -maxdepth 1 -type f \ + -name 'mpabi-inf-c-10-traps-interrupt-control-*.pdf' -print -quit)" +test -n "$pdf" +qpdf --check "$pdf" >/dev/null +pdftotext -layout "$pdf" "$tmp_dir/card.txt" + +blocks="$(rg -o 'A[1-8] (CONTEXT|STRUCTURE|DISPATCH|APPLICATION|FLOW|STATE|RUNTIME|PATTERNS)' \ + "$tmp_dir/card.txt" | wc -l)" +test "$blocks" -eq 24 + +if awk 'BEGIN { RS="\f" } { compact=$0; gsub(/[[:space:]]/, "", compact); if (length(compact) < 100) exit 1 }' \ + "$tmp_dir/card.txt"; then + : +else + echo "FAIL: empty or nearly empty PDF page" >&2 + exit 1 +fi + +if awk 'BEGIN { RS="\f" } \ + /A[1-8] (CONTEXT|STRUCTURE|DISPATCH|APPLICATION|FLOW|STATE|RUNTIME|PATTERNS)/ && !/TASK0[1-3]/ { exit 1 }' \ + "$tmp_dir/card.txt"; then + : +else + echo "FAIL: A1-A8 block on a page without its TASK heading" >&2 + exit 1 +fi + +jq -e ' + .tasks_order == ["task01", "task02", "task03"] and + all(.tasks[]; + [.viewpoints[].id] == ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8"] and + all(.viewpoints[]; .status == "enabled" or .status == "unavailable")) +' "$root/json/card_source.json" >/dev/null +node --check "$root/web/app.js" + +printf 'PASS card: 3 tasks, 24 A blocks, valid PDF, no empty/anonymous page\n' diff --git a/tests/test_hazard3.sh b/tests/test_hazard3.sh new file mode 100755 index 0000000..d2f9e57 --- /dev/null +++ b/tests/test_hazard3.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +env_root="${RV_ENV_ROOT:-/home/user/dev/edu/rv32i-hazard3-student-env}" +tb="${HAZARD3_TB:-$env_root/vendor/Hazard3/test/sim/tb_verilator/tb}" +objdump="${RISCV_PREFIX:-riscv64-unknown-elf-}objdump" + +make -C "$root" -s tasks "RV_ENV_ROOT=$env_root" + +run_task() { + local task="$1" + shift + local log="$root/build/$task/oracle.log" + "$tb" --bin "$root/build/$task/prog.bin" --cycles 500000 --cpuret --logfile "$log" + grep -Fqx 'CPU requested halt. Exit code 0' "$log" + local expected + for expected in "$@"; do + grep -Fqx "$expected" "$log" || { + printf 'FAIL %s missing <%s>\n' "$task" "$expected" >&2 + sed -n '1,160p' "$log" >&2 + return 1 + } + done + printf 'PASS Hazard3 oracle: %s\n' "$task" +} + +run_task task01_ecall_resume \ + 'T01 count=00000001' \ + 'T01 mcause=0000000b' \ + 'T01 delta=00000004' \ + 'T01 resumed=00000001' \ + 'T01 pass=00000001' + +run_task task02_machine_software_irq \ + 'T02 count=00000001' \ + 'T02 mcause=80000003' \ + 'T02 pending_before=00000001' \ + 'T02 pending_in_handler=00000001' \ + 'T02 pending_after=00000000' \ + 'T02 resumed=00000001' \ + 'T02 pass=00000001' + +run_task task03_pending_enable_matrix \ + 'T03 pending=00000001' \ + 'T03 blocked_no_msie=00000001' \ + 'T03 blocked_no_mie=00000001' \ + 'T03 delivered_both=00000001' \ + 'T03 count=00000001' \ + 'T03 mcause=80000003' \ + 'T03 pending_after=00000000' \ + 'T03 pass=00000001' + +for pair in 'task01_ecall_resume handle_exception' \ + 'task02_machine_software_irq isr_machine_softirq' \ + 'task03_pending_enable_matrix isr_machine_softirq'; do + read -r task symbol <<<"$pair" + "$objdump" -d "$root/build/$task/prog.elf" | + sed -n "/<$symbol>:/,/^$/p" | + grep -Eq '[[:space:]]mret$' +done + +t01_mepc=$(sed -n 's/^T01 mepc=//p' "$root/build/task01_ecall_resume/oracle.log") +t01_resume=$(sed -n 's/^T01 resume_pc=//p' "$root/build/task01_ecall_resume/oracle.log") +(( 16#$t01_resume - 16#$t01_mepc == 4 )) +printf 'PASS independent oracle: mepc+4, pending/enable matrix, ISR mret\n' 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..539ad66 --- /dev/null +++ b/web/card-data.json @@ -0,0 +1,2567 @@ +{ + "schema": "esc-card-react-view.v1", + "card": { + "id": "mpabi-inf-c-10-traps-interrupt-control", + "series": "c", + "series_title": "C · Freestanding RV32I and K&R", + "number": "10", + "count": "13", + "slug": "traps-interrupt-control", + "title": "Pułapki i sterowanie przerwaniami RV32I", + "topic": "ecall, mepc, mcause, machine software IRQ oraz bramki mie/mstatus", + "project": "Freestanding C na RV32I", + "subject": "Informatyka", + "level": "Rok 1 · C10 · RV32I/Hazard3", + "revision_date": "2026-07-20T00:00:00+02:00", + "status": "Gotowa", + "version": "v00.01", + "uuid": "ec04ecee-1c4d-529a-a4e2-d3f9b40700ec", + "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": false, + "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": true, + "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": 7, + "front": { + "header_html": "