From 213a5a3df5ecd26e407a24789136923785d5dd66 Mon Sep 17 00:00:00 2001 From: Lucas Rayan Date: Thu, 22 Oct 2026 16:00:48 -0300 Subject: [PATCH 1/4] Discos virtuais: leitura de QCOW2, VMDK, VHD, VHDX e DMG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cada contêiner é aberto como o disco que contém, somente leitura, pela mesma open_path das imagens E01 e AFF4. VHD e VHDX diferenciais seguem a cadeia de pais. QCOW2 com arquivo de apoio, VMDK com pai, DMG cifrado e LZFSE são recusados com o motivo. Conferido por hash contra o 7-Zip em imagens reais do dfvfs e do VirtualBox. Co-Authored-By: Claude Sonnet 5.5 --- README.md | 2 +- README.pt-BR.md | 2 +- crates/guara-core/src/lib.rs | 1 + crates/guara-core/src/source.rs | 8 +- crates/guara-core/src/vdisk/dmg.rs | 233 ++++++ crates/guara-core/src/vdisk/mod.rs | 245 ++++++ crates/guara-core/src/vdisk/qcow2.rs | 149 ++++ crates/guara-core/src/vdisk/vhd.rs | 175 +++++ crates/guara-core/src/vdisk/vhdx.rs | 206 +++++ crates/guara-core/src/vdisk/vmdk.rs | 267 +++++++ .../tests/fixtures/vdisk/disk-stream.vmdk | Bin 0 -> 165376 bytes .../guara-core/tests/fixtures/vdisk/disk.raw | Bin 0 -> 1048576 bytes .../guara-core/tests/fixtures/vdisk/disk.vhd | Bin 0 -> 2100224 bytes .../guara-core/tests/fixtures/vdisk/disk.vmdk | Bin 0 -> 524288 bytes .../tests/fixtures/vdisk/ext2.qcow2 | Bin 0 -> 524288 bytes .../tests/fixtures/vdisk/hfsplus_zlib.dmg | Bin 0 -> 20056 bytes crates/guara-core/tests/vdisk.rs | 723 ++++++++++++++++++ docs/architecture.md | 1 + docs/pt-BR/arquitetura.md | 1 + docs/pt-BR/suporte.md | 6 + docs/support.md | 6 + scripts/fetch-testdata.sh | 2 +- 22 files changed, 2023 insertions(+), 4 deletions(-) create mode 100644 crates/guara-core/src/vdisk/dmg.rs create mode 100644 crates/guara-core/src/vdisk/mod.rs create mode 100644 crates/guara-core/src/vdisk/qcow2.rs create mode 100644 crates/guara-core/src/vdisk/vhd.rs create mode 100644 crates/guara-core/src/vdisk/vhdx.rs create mode 100644 crates/guara-core/src/vdisk/vmdk.rs create mode 100644 crates/guara-core/tests/fixtures/vdisk/disk-stream.vmdk create mode 100644 crates/guara-core/tests/fixtures/vdisk/disk.raw create mode 100644 crates/guara-core/tests/fixtures/vdisk/disk.vhd create mode 100644 crates/guara-core/tests/fixtures/vdisk/disk.vmdk create mode 100644 crates/guara-core/tests/fixtures/vdisk/ext2.qcow2 create mode 100644 crates/guara-core/tests/fixtures/vdisk/hfsplus_zlib.dmg create mode 100644 crates/guara-core/tests/vdisk.rs diff --git a/README.md b/README.md index 0a40c4a..ba958a2 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ In a single scan, Guará does what tools like Recuva, PhotoRec, TestDisk and Dis - **Encrypted volumes:** opens BitLocker, LUKS and FileVault 2 with your password or key and scans inside. - **RAID and LVM:** reassembles arrays from loose disks (RAID 0, 1, 4, 5, 6, 10, LVM2), working out level, stripe size and order by itself when there is no metadata. - **Fragmented files:** reassembles JPEGs stored in pieces and rebuilds the index of MP4/MOV videos that lost their `moov`. -- **Forensic images:** reads and writes raw images, **E01/Ex01** and **AFF4**. +- **Forensic images:** reads and writes raw images, **E01/Ex01** and **AFF4**, and reads **QCOW2, VMDK, VHD, VHDX** and **DMG** virtual disks. - **Lost partitions:** reads MBR/GPT and searches for volumes by signature where the table failed. - **Merge without duplicates:** a file found by more than one method appears once, with the best evidence. - **Per-file confidence** (high, medium, low): intact structure, reused clusters, zeroed content (TRIM) or content that does not match the extension. diff --git a/README.pt-BR.md b/README.pt-BR.md index 0bf21ac..2692e21 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -17,7 +17,7 @@ O Guará junta, numa única varredura, o que ferramentas como Recuva, PhotoRec, - **Volumes cifrados:** abre BitLocker, LUKS e FileVault 2 com a sua senha ou chave e varre por dentro. - **RAID e LVM:** remonta arrays a partir de discos soltos (RAID 0, 1, 4, 5, 6, 10, LVM2), descobrindo nível, faixa e ordem sozinho quando não há metadados. - **Arquivos fragmentados:** remonta JPEG em pedaços e refaz o índice de vídeos MP4/MOV sem `moov`. -- **Imagens forenses:** lê e grava imagem bruta, **E01/Ex01** e **AFF4**. +- **Imagens forenses:** lê e grava imagem bruta, **E01/Ex01** e **AFF4**, e lê discos virtuais **QCOW2, VMDK, VHD, VHDX** e **DMG**. - **Partições perdidas:** lê MBR/GPT e procura volumes por assinatura onde a tabela falhou. - **Fusão sem duplicatas:** um arquivo achado por mais de um método aparece uma vez, com a melhor evidência. - **Confiança por arquivo** (alta, média, baixa): estrutura íntegra, clusters reutilizados, conteúdo zerado (TRIM) ou que não confere com a extensão. diff --git a/crates/guara-core/src/lib.rs b/crates/guara-core/src/lib.rs index 732e60c..3068f53 100644 --- a/crates/guara-core/src/lib.rs +++ b/crates/guara-core/src/lib.rs @@ -47,6 +47,7 @@ pub mod source; pub mod sqlite; pub mod thumb; pub mod types; +pub mod vdisk; pub mod volume; pub use error::{Error, Result}; diff --git a/crates/guara-core/src/source.rs b/crates/guara-core/src/source.rs index 06ae13c..2916889 100644 --- a/crates/guara-core/src/source.rs +++ b/crates/guara-core/src/source.rs @@ -286,7 +286,13 @@ pub fn open_path(path: &Path) -> io::Result> { .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e.to_string()))?; return Ok(Arc::new(e)); } - Ok(Arc::new(file)) + drop(file); + if let Some(v) = crate::vdisk::open(path) + .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e.to_string()))? + { + return Ok(Arc::new(v)); + } + Ok(Arc::new(FileSource::open(path)?)) } /// Identidade do conteúdo de um disco: SHA-256 do tamanho + primeiro e último MiB diff --git a/crates/guara-core/src/vdisk/dmg.rs b/crates/guara-core/src/vdisk/dmg.rs new file mode 100644 index 0000000..baad42d --- /dev/null +++ b/crates/guara-core/src/vdisk/dmg.rs @@ -0,0 +1,233 @@ +//! DMG (Apple UDIF): rodapé `koly`, tabelas `mish` do plist e chunks zerados, brutos, ADC, +//! zlib e bzip2. Imagens cifradas (`encrcdsa`) e chunks LZFSE (`ULFO`) são recusados com +//! mensagem clara. + +use super::{bad, be32, be64, read_exact, read_vec, Backend}; +use crate::source::{FileSource, Source}; +use std::io::{self, Read}; +use std::sync::Mutex; + +const SECTOR: u64 = 512; + +pub(super) fn is_dmg(file: &FileSource) -> bool { + let size = file.size(); + if size < 1024 { + return false; + } + let mut t = [0u8; 512]; + read_exact(file, size - SECTOR, &mut t).is_ok() + && &t[..4] == b"koly" + && be32(&t, 4) == 4 + && be32(&t, 8) == 512 +} + +/// Imagem cifrada pelo `hdiutil`: começa com `encrcdsa` ou `cdsaencr`. +pub(super) fn is_encrypted(head: &[u8]) -> bool { + head.starts_with(b"encrcdsa") || head.starts_with(b"cdsaencr") +} + +#[derive(Clone, Copy)] +struct Chunk { + start: u64, + len: u64, + ty: u32, + off: u64, + comp_len: u64, +} + +pub(super) struct Dmg { + file: FileSource, + size: u64, + chunks: Vec, + cache: Mutex)>>, +} + +fn base64(s: &str) -> Vec { + let mut out = Vec::with_capacity(s.len() * 3 / 4); + let (mut acc, mut bits) = (0u32, 0); + for c in s.bytes() { + let v = match c { + b'A'..=b'Z' => c - b'A', + b'a'..=b'z' => c - b'a' + 26, + b'0'..=b'9' => c - b'0' + 52, + b'+' => 62, + b'/' => 63, + _ => continue, + }; + acc = acc << 6 | v as u32; + bits += 6; + if bits >= 8 { + bits -= 8; + out.push((acc >> bits) as u8); + acc &= (1 << bits) - 1; + } + } + out +} + +/// Descompacta ADC (Apple Data Compression). +fn adc(src: &[u8], max: usize) -> io::Result> { + let mut out: Vec = Vec::with_capacity(max); + let mut i = 0; + while i < src.len() && out.len() < max { + let c = src[i]; + i += 1; + if c & 0x80 != 0 { + let n = (c & 0x7F) as usize + 1; + let lit = src.get(i..i + n).ok_or_else(|| bad("chunk ADC truncado"))?; + out.extend_from_slice(lit); + i += n; + } else { + let (len, off) = if c & 0x40 != 0 { + let b = src.get(i..i + 2).ok_or_else(|| bad("chunk ADC truncado"))?; + i += 2; + ( + (c & 0x3F) as usize + 4, + (b[0] as usize) << 8 | b[1] as usize, + ) + } else { + let b = *src.get(i).ok_or_else(|| bad("chunk ADC truncado"))?; + i += 1; + ((c >> 2) as usize + 3, ((c & 3) as usize) << 8 | b as usize) + }; + let off = off + 1; + if off > out.len() { + return Err(bad("referência ADC inválida")); + } + for _ in 0..len { + out.push(out[out.len() - off]); + } + } + } + Ok(out) +} + +impl Dmg { + pub(super) fn open(file: FileSource) -> io::Result { + let mut head = [0u8; 8]; + let _ = file.read_at(0, &mut head); + if is_encrypted(&head) { + return Err(bad( + "DMG cifrado (encrcdsa) não é suportado; desproteja a imagem antes", + )); + } + let size = file.size(); + let t = read_vec(&file, size - SECTOR, SECTOR as usize)?; + let fork = be64(&t, 24); + let xml_off = be64(&t, 216); + let xml_len = be64(&t, 224); + let sectors = be64(&t, 492); + if xml_len == 0 || xml_len > 256 << 20 { + return Err(bad("plist do DMG ausente ou grande demais")); + } + let xml = read_vec(&file, xml_off, xml_len as usize)?; + let xml = String::from_utf8_lossy(&xml); + let from = xml + .find("blkx") + .ok_or_else(|| bad("tabela blkx não encontrada no DMG"))?; + let rest = &xml[from..]; + let rest = &rest[..rest.find("").unwrap_or(rest.len())]; + let mut chunks: Vec = vec![]; + let mut cur = rest; + while let Some(a) = cur.find("") { + let after = &cur[a + 6..]; + let Some(b) = after.find("") else { + break; + }; + let mish = base64(&after[..b]); + cur = &after[b + 7..]; + if mish.len() < 204 || &mish[..4] != b"mish" { + continue; + } + let first = be64(&mish, 8); + let data_off = be64(&mish, 24); + let n = be32(&mish, 200) as usize; + for i in 0..n { + let Some(c) = mish.get(204 + i * 40..204 + (i + 1) * 40) else { + break; + }; + let ty = be32(c, 0); + if ty == 0x7FFF_FFFE || ty == 0xFFFF_FFFF { + continue; + } + chunks.push(Chunk { + start: (first + be64(c, 8)) * SECTOR, + len: be64(c, 16) * SECTOR, + ty, + off: fork + data_off + be64(c, 24), + comp_len: be64(c, 32), + }); + } + } + if chunks.is_empty() { + return Err(bad("DMG sem chunks")); + } + chunks.sort_by_key(|c| c.start); + let end = chunks.iter().map(|c| c.start + c.len).max().unwrap_or(0); + Ok(Self { + file, + size: end.max(sectors * SECTOR), + chunks, + cache: Mutex::new(None), + }) + } + + fn decode(&self, c: &Chunk) -> io::Result> { + if c.len > 64 << 20 || c.comp_len > 64 << 20 { + return Err(bad("chunk de DMG grande demais")); + } + let raw = read_vec(&self.file, c.off, c.comp_len as usize)?; + let mut out = Vec::with_capacity(c.len as usize); + match c.ty { + 0x8000_0004 => out = adc(&raw, c.len as usize)?, + 0x8000_0005 => { + flate2::read::ZlibDecoder::new(&raw[..]).read_to_end(&mut out)?; + } + 0x8000_0006 => { + bzip2::read::BzDecoder::new(&raw[..]).read_to_end(&mut out)?; + } + 0x8000_0007 => { + return Err(bad("chunk LZFSE (formato ULFO) ainda não é suportado")); + } + t => return Err(bad(format!("tipo de chunk DMG 0x{t:08x} desconhecido"))), + } + out.resize(c.len as usize, 0); + Ok(out) + } +} + +impl Backend for Dmg { + fn size(&self) -> u64 { + self.size + } + + fn read_chunk(&self, voff: u64, buf: &mut [u8]) -> io::Result { + let i = self.chunks.partition_point(|c| c.start + c.len <= voff); + let Some(c) = self.chunks.get(i).copied() else { + let n = buf.len().min((self.size - voff) as usize); + buf[..n].fill(0); + return Ok(n); + }; + if voff < c.start { + // espaço que nenhuma tabela cobre + let n = buf.len().min((c.start - voff) as usize); + buf[..n].fill(0); + return Ok(n); + } + let rel = voff - c.start; + let n = buf.len().min((c.len - rel) as usize); + match c.ty { + 0 | 2 => buf[..n].fill(0), + 1 => read_exact(&self.file, c.off + rel, &mut buf[..n])?, + _ => { + let mut cache = self.cache.lock().unwrap(); + if cache.as_ref().map(|x| x.0) != Some(i) { + *cache = Some((i, self.decode(&c)?)); + } + let data = &cache.as_ref().unwrap().1; + buf[..n].copy_from_slice(&data[rel as usize..rel as usize + n]); + } + } + Ok(n) + } +} diff --git a/crates/guara-core/src/vdisk/mod.rs b/crates/guara-core/src/vdisk/mod.rs new file mode 100644 index 0000000..000d253 --- /dev/null +++ b/crates/guara-core/src/vdisk/mod.rs @@ -0,0 +1,245 @@ +//! Imagens de disco virtual e contêineres: QCOW2, VMDK, VHD, VHDX e DMG (UDIF). +//! +//! Cada formato é aberto como o disco que contém, somente para leitura, e entra na cadeia +//! normal (partições, sistemas de arquivos, cifras) por meio de [`Source`]. Discos +//! diferenciais (VHD e VHDX com pai) seguem a cadeia até o disco base; QCOW2 e VMDK com +//! arquivo de apoio são recusados com mensagem clara, porque ler só a camada filha +//! devolveria dados errados. + +mod dmg; +mod qcow2; +mod vhd; +mod vhdx; +mod vmdk; + +use crate::error::{Error, Result}; +use crate::source::{FileSource, Source}; +use std::io; +use std::path::Path; + +pub(crate) fn be16(b: &[u8], o: usize) -> u16 { + u16::from_be_bytes(b[o..o + 2].try_into().unwrap()) +} +pub(crate) fn be32(b: &[u8], o: usize) -> u32 { + u32::from_be_bytes(b[o..o + 4].try_into().unwrap()) +} +pub(crate) fn be64(b: &[u8], o: usize) -> u64 { + u64::from_be_bytes(b[o..o + 8].try_into().unwrap()) +} +pub(crate) fn le16(b: &[u8], o: usize) -> u16 { + u16::from_le_bytes(b[o..o + 2].try_into().unwrap()) +} +pub(crate) fn le32(b: &[u8], o: usize) -> u32 { + u32::from_le_bytes(b[o..o + 4].try_into().unwrap()) +} +pub(crate) fn le64(b: &[u8], o: usize) -> u64 { + u64::from_le_bytes(b[o..o + 8].try_into().unwrap()) +} + +/// Leitura dentro de um único bloco do formato; devolve quantos bytes entregou (pode ser +/// menos que `buf.len()`, nunca zero antes do fim do disco). +pub(crate) trait Backend: Send + Sync { + fn size(&self) -> u64; + fn read_chunk(&self, voff: u64, buf: &mut [u8]) -> io::Result; +} + +/// Disco virtual aberto de uma imagem de contêiner. +pub struct VDisk { + inner: Box, + format: &'static str, +} + +impl VDisk { + /// Nome do formato (`QCOW2`, `VMDK`, `VHD`, `VHDX`, `DMG`). + pub fn format(&self) -> &'static str { + self.format + } +} + +impl Source for VDisk { + fn size(&self) -> u64 { + self.inner.size() + } + fn read_at(&self, offset: u64, buf: &mut [u8]) -> io::Result { + let size = self.inner.size(); + if offset >= size { + return Ok(0); + } + let want = buf.len().min((size - offset) as usize); + let mut done = 0; + while done < want { + let n = self + .inner + .read_chunk(offset + done as u64, &mut buf[done..want])?; + if n == 0 { + break; + } + done += n; + } + Ok(done) + } +} + +pub(crate) fn bad(msg: impl Into) -> io::Error { + io::Error::new(io::ErrorKind::InvalidData, msg.into()) +} + +pub(crate) fn io_err(e: io::Error, what: &str) -> Error { + Error::msg(format!("{what}: {e}")) +} + +/// Cadeias de arquivos pai (VHD/VHDX diferenciais) não passam deste limite, o que também +/// corta ciclos. +const MAX_DEPTH: u32 = 16; + +/// Formato de contêiner reconhecido pelos primeiros bytes (e, para VHD fixo e DMG, pelo +/// fim do arquivo). `None` quando é um disco bruto. +pub fn detect(file: &FileSource, head: &[u8]) -> Option<&'static str> { + if head.starts_with(b"QFI\xfb") { + return Some("QCOW2"); + } + if head.starts_with(b"KDMV") || head.starts_with(b"# Disk DescriptorFile") { + return Some("VMDK"); + } + if head.starts_with(b"vhdxfile") { + return Some("VHDX"); + } + if head.starts_with(b"conectix") || vhd::is_fixed(file) { + return Some("VHD"); + } + if dmg::is_encrypted(head) || dmg::is_dmg(file) { + return Some("DMG"); + } + None +} + +/// Abre `path` como disco virtual, ou `Ok(None)` se não for um contêiner conhecido. +pub fn open(path: &Path) -> Result> { + open_depth(path, 0) +} + +pub(crate) fn open_depth(path: &Path, depth: u32) -> Result> { + if depth > MAX_DEPTH { + return Err(Error::msg("cadeia de discos pai longa demais ou circular")); + } + let file = FileSource::open(path)?; + let mut head = [0u8; 96]; + let got = file.read_at(0, &mut head).unwrap_or(0); + let Some(format) = detect(&file, &head[..got]) else { + return Ok(None); + }; + let name = format!("{format} {}", path.display()); + let inner: Box = match format { + "QCOW2" => Box::new(qcow2::Qcow2::open(file).map_err(|e| io_err(e, &name))?), + "VMDK" => Box::new(vmdk::Vmdk::open(file, path).map_err(|e| io_err(e, &name))?), + "VHD" => Box::new(vhd::Vhd::open(file, path, depth).map_err(|e| io_err(e, &name))?), + "VHDX" => Box::new(vhdx::Vhdx::open(file, path, depth).map_err(|e| io_err(e, &name))?), + _ => Box::new(dmg::Dmg::open(file).map_err(|e| io_err(e, &name))?), + }; + Ok(Some(VDisk { inner, format })) +} + +/// Abre o disco pai de um VHD/VHDX diferencial. +pub(crate) fn open_parent( + candidates: &[std::path::PathBuf], + depth: u32, +) -> io::Result> { + for p in candidates { + if !p.is_file() { + continue; + } + if let Some(v) = open_depth(p, depth + 1).map_err(|e| bad(e.to_string()))? { + return Ok(Box::new(v)); + } + let f = FileSource::open(p)?; + return Ok(Box::new(f)); + } + Err(bad(format!( + "disco pai não encontrado (procurado: {})", + candidates + .iter() + .map(|p| p.display().to_string()) + .collect::>() + .join(", ") + ))) +} + +/// Lê de um arquivo por posição e exige todos os bytes. +pub(crate) fn read_exact(f: &FileSource, off: u64, buf: &mut [u8]) -> io::Result<()> { + crate::source::read_exact_at(f, off, buf) +} + +pub(crate) fn read_vec(f: &FileSource, off: u64, len: usize) -> io::Result> { + let mut v = vec![0u8; len]; + read_exact(f, off, &mut v)?; + Ok(v) +} + +/// Tabelas em memória têm teto: um cabeçalho adulterado não pode pedir gigabytes. +pub(crate) fn check_table(entries: u64, entry_size: u64, what: &str) -> io::Result { + const MAX: u64 = 512 * 1024 * 1024; + if entries.saturating_mul(entry_size) > MAX { + return Err(bad(format!("{what} grande demais ({entries} entradas)"))); + } + Ok(entries as usize) +} + +/// UTF-16 (big ou little endian) até o primeiro nulo. +pub(crate) fn utf16(b: &[u8], big: bool) -> String { + let units: Vec = b + .chunks_exact(2) + .map(|c| if big { be16(c, 0) } else { le16(c, 0) }) + .take_while(|&u| u != 0) + .collect(); + String::from_utf16_lossy(&units) +} + +/// Caminhos onde procurar o disco pai: o caminho gravado (relativo ao arquivo filho, com `\` +/// virando `/`) e, como alternativa, só o nome do arquivo na mesma pasta. +pub(crate) fn candidate_paths(dir: &Path, names: &[String]) -> Vec { + let mut out: Vec = vec![]; + for n in names { + let n = n.trim().replace('\\', "/"); + let n = n.strip_prefix("file:///").unwrap_or(&n).to_string(); + if n.is_empty() { + continue; + } + let rel = n.trim_start_matches("./"); + let full = std::path::PathBuf::from(rel); + for p in [ + if full.is_absolute() { + full.clone() + } else { + dir.join(rel) + }, + dir.join(rel.rsplit('/').next().unwrap_or(rel)), + ] { + if !out.contains(&p) { + out.push(p); + } + } + } + out +} + +/// Lê do disco pai (ou zeros, sem pai); o que o pai não cobre também é zero. +pub(crate) fn read_parent( + parent: &Option>, + voff: u64, + buf: &mut [u8], +) -> io::Result<()> { + let Some(p) = parent else { + buf.fill(0); + return Ok(()); + }; + let mut done = 0; + while done < buf.len() { + let n = p.read_at(voff + done as u64, &mut buf[done..])?; + if n == 0 { + buf[done..].fill(0); + break; + } + done += n; + } + Ok(()) +} diff --git a/crates/guara-core/src/vdisk/qcow2.rs b/crates/guara-core/src/vdisk/qcow2.rs new file mode 100644 index 0000000..b84b31a --- /dev/null +++ b/crates/guara-core/src/vdisk/qcow2.rs @@ -0,0 +1,149 @@ +//! QCOW2 (QEMU), versões 2 e 3: tabelas L1/L2, clusters comprimidos (deflate e zstd) e +//! clusters zerados. Imagens cifradas, com arquivo de apoio, com arquivo de dados externo ou +//! com L2 estendido são recusadas. + +use super::{bad, be32, be64, check_table, read_exact, read_vec, Backend}; +use crate::source::{FileSource, Source}; +use std::io::{self, Read}; +use std::sync::Mutex; + +const OFFSET_MASK: u64 = 0x00ff_ffff_ffff_fe00; +const COMPRESSED: u64 = 1 << 62; + +pub(super) struct Qcow2 { + file: FileSource, + size: u64, + cluster_bits: u32, + l1: Vec, + zstd: bool, + /// Último cluster comprimido decodificado: (deslocamento do cluster virtual, dados). + cache: Mutex)>>, +} + +impl Qcow2 { + pub(super) fn open(file: FileSource) -> io::Result { + let h = read_vec(&file, 0, 112.min(file.size() as usize))?; + if h.len() < 72 { + return Err(bad("cabeçalho QCOW2 truncado")); + } + let version = be32(&h, 4); + if version != 2 && version != 3 { + return Err(bad(format!("versão QCOW {version} não suportada"))); + } + if be64(&h, 8) != 0 { + return Err(bad( + "a imagem QCOW2 usa arquivo de apoio (backing file); abrir só a camada filha daria dados errados", + )); + } + let cluster_bits = be32(&h, 20); + if !(9..=21).contains(&cluster_bits) { + return Err(bad(format!( + "tamanho de cluster inválido (2^{cluster_bits})" + ))); + } + let size = be64(&h, 24); + match be32(&h, 32) { + 0 => {} + 1 => return Err(bad("imagem QCOW2 cifrada (AES legado) não é suportada")), + _ => return Err(bad("imagem QCOW2 cifrada (LUKS) não é suportada; abra o volume LUKS depois de convertê-la")), + } + let mut zstd = false; + if version == 3 && h.len() >= 108 { + let incompat = be64(&h, 72); + if incompat & (1 << 2) != 0 { + return Err(bad("QCOW2 com arquivo de dados externo não é suportado")); + } + if incompat & (1 << 4) != 0 { + return Err(bad("QCOW2 com L2 estendido não é suportado")); + } + if incompat & (1 << 3) != 0 { + zstd = h[104] == 1; + if h[104] > 1 { + return Err(bad("tipo de compressão QCOW2 desconhecido")); + } + } + } + let l1_size = be32(&h, 36) as u64; + let l1_off = be64(&h, 40); + let n = check_table(l1_size, 8, "tabela L1")?; + let raw = read_vec(&file, l1_off, n * 8)?; + let l1 = raw.chunks_exact(8).map(|c| be64(c, 0)).collect(); + Ok(Self { + file, + size, + cluster_bits, + l1, + zstd, + cache: Mutex::new(None), + }) + } + + fn cluster_size(&self) -> u64 { + 1 << self.cluster_bits + } + + fn l2_entry(&self, cluster_idx: u64) -> io::Result { + let per_l2 = self.cluster_size() / 8; + let l1_idx = (cluster_idx / per_l2) as usize; + let l2_idx = cluster_idx % per_l2; + let Some(&l1e) = self.l1.get(l1_idx) else { + return Ok(0); + }; + let l2_off = l1e & OFFSET_MASK; + if l2_off == 0 { + return Ok(0); + } + let mut b = [0u8; 8]; + read_exact(&self.file, l2_off + l2_idx * 8, &mut b)?; + Ok(u64::from_be_bytes(b)) + } + + fn inflate(&self, entry: u64) -> io::Result> { + let shift = 62 - (self.cluster_bits - 8); + let host = entry & ((1u64 << shift) - 1); + let nsect = ((entry >> shift) & ((1u64 << (self.cluster_bits - 8)) - 1)) + 1; + let csize = (nsect * 512 - (host & 511)) as usize; + let avail = self.file.size().saturating_sub(host) as usize; + let raw = read_vec(&self.file, host, csize.min(avail))?; + let mut out = Vec::with_capacity(self.cluster_size() as usize); + if self.zstd { + let mut d = ruzstd::decoding::StreamingDecoder::new(&raw[..]) + .map_err(|e| bad(format!("cluster zstd inválido: {e}")))?; + d.read_to_end(&mut out)?; + } else { + flate2::read::DeflateDecoder::new(&raw[..]).read_to_end(&mut out)?; + } + out.resize(self.cluster_size() as usize, 0); + Ok(out) + } +} + +impl Backend for Qcow2 { + fn size(&self) -> u64 { + self.size + } + + fn read_chunk(&self, voff: u64, buf: &mut [u8]) -> io::Result { + let cs = self.cluster_size(); + let idx = voff / cs; + let within = voff % cs; + let n = buf.len().min((cs - within) as usize); + let entry = self.l2_entry(idx)?; + if entry & COMPRESSED != 0 { + let mut cache = self.cache.lock().unwrap(); + if cache.as_ref().map(|c| c.0) != Some(idx) { + *cache = Some((idx, self.inflate(entry)?)); + } + let data = &cache.as_ref().unwrap().1; + buf[..n].copy_from_slice(&data[within as usize..within as usize + n]); + return Ok(n); + } + let off = entry & OFFSET_MASK; + if off == 0 || entry & 1 != 0 { + buf[..n].fill(0); + } else { + read_exact(&self.file, off + within, &mut buf[..n])?; + } + Ok(n) + } +} diff --git a/crates/guara-core/src/vdisk/vhd.rs b/crates/guara-core/src/vdisk/vhd.rs new file mode 100644 index 0000000..204cb43 --- /dev/null +++ b/crates/guara-core/src/vdisk/vhd.rs @@ -0,0 +1,175 @@ +//! VHD (Microsoft Virtual PC e Hyper-V): discos fixos, dinâmicos e diferenciais. O disco +//! diferencial lê o pai (achado pelos localizadores do cabeçalho) nos setores que a camada +//! filha não preencheu. + +use super::{ + bad, be32, be64, candidate_paths, check_table, open_parent, read_exact, read_parent, read_vec, + utf16, Backend, +}; +use crate::source::{FileSource, Source}; +use std::io; +use std::path::Path; + +const SECTOR: u64 = 512; +const NONE: u32 = 0xFFFF_FFFF; + +enum Kind { + Fixed, + Dynamic { + bat: Vec, + block_size: u64, + bitmap_size: u64, + }, +} + +pub(super) struct Vhd { + file: FileSource, + size: u64, + kind: Kind, + parent: Option>, +} + +fn footer_ok(f: &[u8]) -> bool { + if f.len() < 512 || &f[..8] != b"conectix" { + return false; + } + let mut sum = 0u32; + for (i, &b) in f[..512].iter().enumerate() { + if !(64..68).contains(&i) { + sum = sum.wrapping_add(b as u32); + } + } + !sum == be32(f, 64) +} + +/// VHD fixo: disco bruto seguido de um rodapé de 512 bytes. +pub(super) fn is_fixed(file: &FileSource) -> bool { + let size = file.size(); + if size < 2 * SECTOR { + return false; + } + let mut f = [0u8; 512]; + read_exact(file, size - SECTOR, &mut f).is_ok() + && footer_ok(&f) + && be32(&f, 60) == 2 + && be64(&f, 16) == u64::MAX +} + +impl Vhd { + pub(super) fn open(file: FileSource, path: &Path, depth: u32) -> io::Result { + let size = file.size(); + let mut footer = [0u8; 512]; + let tail_ok = size >= SECTOR && { + read_exact(&file, size - SECTOR, &mut footer)?; + footer_ok(&footer) + }; + if !tail_ok { + read_exact(&file, 0, &mut footer)?; + if !footer_ok(&footer) { + return Err(bad("rodapé VHD inválido")); + } + } + let current = be64(&footer, 48); + let disk_type = be32(&footer, 60); + match disk_type { + 2 => { + return Ok(Self { + file, + size: current, + kind: Kind::Fixed, + parent: None, + }); + } + 3 | 4 => {} + t => return Err(bad(format!("tipo de VHD {t} desconhecido"))), + } + let dh = read_vec(&file, be64(&footer, 16), 1024)?; + if &dh[..8] != b"cxsparse" { + return Err(bad("cabeçalho de disco dinâmico VHD inválido")); + } + let bat_off = be64(&dh, 16); + let entries = be32(&dh, 28) as u64; + let block_size = be32(&dh, 32) as u64; + if block_size < SECTOR || !block_size.is_power_of_two() { + return Err(bad("tamanho de bloco VHD inválido")); + } + let n = check_table(entries, 4, "tabela de alocação")?; + let raw = read_vec(&file, bat_off, n * 4)?; + let bat = raw.chunks_exact(4).map(|c| be32(c, 0)).collect(); + let bitmap_size = (block_size / SECTOR / 8).div_ceil(SECTOR) * SECTOR; + let parent = if disk_type == 4 { + let dir = path.parent().unwrap_or(Path::new(".")); + let mut names = vec![]; + for i in 0..8 { + let o = 576 + i * 24; + let code = &dh[o..o + 4]; + let len = be32(&dh, o + 8) as usize; + let off = be64(&dh, o + 16); + if matches!(code, b"W2ru" | b"W2ku" | b"Wi2r" | b"Wi2k") && len > 0 && len < 4096 { + if let Ok(b) = read_vec(&file, off, len) { + names.push(utf16(&b, false)); + } + } + } + names.push(utf16(&dh[64..64 + 512], true)); + Some(open_parent(&candidate_paths(dir, &names), depth)?) + } else { + None + }; + Ok(Self { + file, + size: current, + kind: Kind::Dynamic { + bat, + block_size, + bitmap_size, + }, + parent, + }) + } +} + +impl Backend for Vhd { + fn size(&self) -> u64 { + self.size + } + + fn read_chunk(&self, voff: u64, buf: &mut [u8]) -> io::Result { + let Kind::Dynamic { + bat, + block_size, + bitmap_size, + } = &self.kind + else { + let n = buf.len().min((self.size - voff) as usize); + read_exact(&self.file, voff, &mut buf[..n])?; + return Ok(n); + }; + let block = (voff / block_size) as usize; + let within = voff % block_size; + let mut n = buf.len().min((block_size - within) as usize); + let entry = bat.get(block).copied().unwrap_or(NONE); + if entry == NONE { + read_parent(&self.parent, voff, &mut buf[..n])?; + return Ok(n); + } + let base = entry as u64 * SECTOR; + let first = within / SECTOR; + let last = (within + n as u64 - 1) / SECTOR; + let nbytes = (last / 8 - first / 8 + 1) as usize; + let bm = read_vec(&self.file, base + first / 8, nbytes)?; + let bit = |s: u64| bm[(s / 8 - first / 8) as usize] & (0x80 >> (s % 8)) != 0; + let present = bit(first); + let mut s = first; + while s <= last && bit(s) == present { + s += 1; + } + n = n.min((s * SECTOR - within) as usize); + if present { + read_exact(&self.file, base + bitmap_size + within, &mut buf[..n])?; + } else { + read_parent(&self.parent, voff, &mut buf[..n])?; + } + Ok(n) + } +} diff --git a/crates/guara-core/src/vdisk/vhdx.rs b/crates/guara-core/src/vdisk/vhdx.rs new file mode 100644 index 0000000..ff8063b --- /dev/null +++ b/crates/guara-core/src/vdisk/vhdx.rs @@ -0,0 +1,206 @@ +//! VHDX (Hyper-V): tabela de regiões, metadados, BAT com blocos de bitmap intercalados, +//! discos fixos, dinâmicos e diferenciais (pai achado pelo localizador de pai). +//! +//! O log de transações não é reproduzido: abrir a imagem nunca a escreve. Se o disco foi +//! desligado no meio de uma escrita, os dados ainda no log não aparecem. + +use super::{ + bad, candidate_paths, check_table, le16, le32, le64, open_parent, read_exact, read_parent, + read_vec, utf16, Backend, +}; +use crate::source::{FileSource, Source}; +use std::io; +use std::path::Path; + +const MB: u64 = 1 << 20; + +/// GUID em texto para os 16 bytes gravados em disco (três primeiros campos little-endian). +fn guid(s: &str) -> [u8; 16] { + let hex: Vec = s + .replace('-', "") + .as_bytes() + .chunks(2) + .map(|p| u8::from_str_radix(std::str::from_utf8(p).unwrap(), 16).unwrap()) + .collect(); + let mut g = [0u8; 16]; + g[..4].copy_from_slice(&[hex[3], hex[2], hex[1], hex[0]]); + g[4..6].copy_from_slice(&[hex[5], hex[4]]); + g[6..8].copy_from_slice(&[hex[7], hex[6]]); + g[8..].copy_from_slice(&hex[8..]); + g +} + +pub(super) struct Vhdx { + file: FileSource, + size: u64, + block_size: u64, + sector_size: u64, + chunk_ratio: u64, + bat: Vec, + parent: Option>, +} + +impl Vhdx { + pub(super) fn open(file: FileSource, path: &Path, depth: u32) -> io::Result { + let rt = read_vec(&file, 192 * 1024, 64 * 1024)?; + if &rt[..4] != b"regi" { + return Err(bad("tabela de regiões VHDX inválida")); + } + let count = le32(&rt, 8).min(2047) as usize; + let (mut bat_at, mut meta_at) = (None, None); + for i in 0..count { + let e = &rt[16 + i * 32..16 + (i + 1) * 32]; + let region = (le64(e, 16), le32(e, 24) as u64); + if e[..16] == guid("2DC27766-F623-4200-9D64-115E9BFD4A08") { + bat_at = Some(region); + } else if e[..16] == guid("8B7CA206-4790-4B9A-B8FE-575F050F886E") { + meta_at = Some(region); + } + } + let (Some((bat_off, bat_len)), Some((meta_off, meta_len))) = (bat_at, meta_at) else { + return Err(bad("regiões BAT e metadados não encontradas")); + }; + let meta = read_vec(&file, meta_off, meta_len.min(MB) as usize)?; + if &meta[..8] != b"metadata" { + return Err(bad("região de metadados VHDX inválida")); + } + let items = le16(&meta, 10) as usize; + let find = |id: [u8; 16]| -> Option<&[u8]> { + (0..items).find_map(|i| { + let e = meta.get(32 + i * 32..32 + (i + 1) * 32)?; + if e[..16] != id { + return None; + } + let (o, l) = (le32(e, 16) as usize, le32(e, 20) as usize); + meta.get(o..o + l) + }) + }; + let params = find(guid("CAA16737-FA36-4D43-B3B6-33F0AA44E76B")) + .filter(|p| p.len() >= 8) + .ok_or_else(|| bad("parâmetros do arquivo VHDX ausentes"))?; + let block_size = le32(params, 0) as u64; + let has_parent = le32(params, 4) & 2 != 0; + let size = find(guid("2FA54224-CD1B-4876-B211-5DBED83BF4B8")) + .filter(|p| p.len() >= 8) + .map(|p| le64(p, 0)) + .ok_or_else(|| bad("tamanho do disco VHDX ausente"))?; + let sector_size = find(guid("8141BF1D-A96F-4709-BA47-F233A8FAAB5F")) + .filter(|p| p.len() >= 4) + .map(|p| le32(p, 0) as u64) + .unwrap_or(512); + if block_size < MB || !block_size.is_power_of_two() || !matches!(sector_size, 512 | 4096) { + return Err(bad("parâmetros VHDX inválidos")); + } + let chunk_ratio = (1u64 << 23) * sector_size / block_size; + let payload = size.div_ceil(block_size); + // Com pai, cada trecho termina com a entrada do bitmap de setores, mesmo que o disco acabe antes. + let want = if has_parent { + payload.div_ceil(chunk_ratio) * (chunk_ratio + 1) + } else { + payload + payload.div_ceil(chunk_ratio) + }; + let n = check_table(want.min(bat_len / 8), 8, "BAT")?; + let raw = read_vec(&file, bat_off, n * 8)?; + let bat = raw.chunks_exact(8).map(|c| le64(c, 0)).collect(); + + let parent = if has_parent { + let loc = find(guid("A8D35F2D-B30B-454D-ABF7-D3D84834AB0C")) + .ok_or_else(|| bad("localizador de pai VHDX ausente"))?; + let count = if loc.len() >= 20 { + le16(loc, 18) as usize + } else { + 0 + }; + let mut names = vec![]; + for i in 0..count { + let Some(e) = loc.get(20 + i * 12..20 + (i + 1) * 12) else { + break; + }; + let (ko, vo) = (le32(e, 0) as usize, le32(e, 4) as usize); + let (ks, vs) = (le16(e, 8) as usize, le16(e, 10) as usize); + let (Some(k), Some(v)) = (loc.get(ko..ko + ks), loc.get(vo..vo + vs)) else { + continue; + }; + let key = utf16(k, false); + if matches!( + key.as_str(), + "relative_path" | "absolute_win32_path" | "volume_path" + ) { + names.push(utf16(v, false)); + } + } + let dir = path.parent().unwrap_or(Path::new(".")); + Some(open_parent(&candidate_paths(dir, &names), depth)?) + } else { + None + }; + Ok(Self { + file, + size, + block_size, + sector_size, + chunk_ratio, + bat, + parent, + }) + } + + fn bat(&self, i: u64) -> u64 { + self.bat.get(i as usize).copied().unwrap_or(0) + } +} + +impl Backend for Vhdx { + fn size(&self) -> u64 { + self.size + } + + fn read_chunk(&self, voff: u64, buf: &mut [u8]) -> io::Result { + let block = voff / self.block_size; + let within = voff % self.block_size; + let mut n = buf.len().min((self.block_size - within) as usize); + let e = self.bat(block + block / self.chunk_ratio); + let off = e & 0xFFFF_FFFF_FFF0_0000; + match e & 7 { + 6 => { + read_exact(&self.file, off + within, &mut buf[..n])?; + } + 7 => { + // Parcialmente presente: o bitmap do trecho diz, setor a setor, onde está o dado. + let chunk = block / self.chunk_ratio; + let bm_entry = self.bat(chunk * (self.chunk_ratio + 1) + self.chunk_ratio); + let ss = self.sector_size; + let per_block = self.block_size / ss; + let first = within / ss; + let last = (within + n as u64 - 1) / ss; + let base_bit = (block % self.chunk_ratio) * per_block; + let bm_off = bm_entry & 0xFFFF_FFFF_FFF0_0000; + if bm_entry & 7 != 6 { + read_parent(&self.parent, voff, &mut buf[..n])?; + return Ok(n); + } + let b0 = (base_bit + first) / 8; + let b1 = (base_bit + last) / 8; + let bm = read_vec(&self.file, bm_off + b0, (b1 - b0 + 1) as usize)?; + let bit = |s: u64| { + let p = base_bit + s; + bm[(p / 8 - b0) as usize] >> (p % 8) & 1 == 1 + }; + let present = bit(first); + let mut s = first; + while s <= last && bit(s) == present { + s += 1; + } + n = n.min((s * ss - within) as usize); + if present { + read_exact(&self.file, off + within, &mut buf[..n])?; + } else { + read_parent(&self.parent, voff, &mut buf[..n])?; + } + } + 2 | 3 => buf[..n].fill(0), + _ => read_parent(&self.parent, voff, &mut buf[..n])?, + } + Ok(n) + } +} diff --git a/crates/guara-core/src/vdisk/vmdk.rs b/crates/guara-core/src/vdisk/vmdk.rs new file mode 100644 index 0000000..c6baf22 --- /dev/null +++ b/crates/guara-core/src/vdisk/vmdk.rs @@ -0,0 +1,267 @@ +//! VMDK (VMware, VirtualBox): extensões esparsas (inclusive `streamOptimized` com grãos +//! comprimidos) e descritores de texto com extensões `FLAT`, `SPARSE` e `ZERO`, como +//! `monolithicFlat` e `twoGbMaxExtentSparse`. Discos com pai (snapshots) e o formato SEsparse +//! são recusados. + +use super::{bad, check_table, le16, le32, le64, read_exact, read_vec, Backend}; +use crate::source::{FileSource, Source}; +use std::io::{self, Read}; +use std::path::Path; +use std::sync::Mutex; + +const SECTOR: u64 = 512; +const GD_AT_END: u64 = u64::MAX; + +struct Sparse { + file: FileSource, + grain: u64, + gtes: u64, + gd: Vec, + compressed: bool, + cache: Mutex)>>, +} + +enum Kind { + Zero, + Flat { file: FileSource, offset: u64 }, + Sparse(Sparse), +} + +struct Extent { + start: u64, + len: u64, + kind: Kind, +} + +pub(super) struct Vmdk { + extents: Vec, + size: u64, +} + +fn parent_in(descriptor: &str) -> bool { + descriptor.lines().any(|l| { + let l = l.trim(); + l.strip_prefix("parentCID") + .and_then(|r| r.trim_start().strip_prefix('=')) + .is_some_and(|v| { + let v = v.trim().trim_matches('"'); + !v.is_empty() && !v.eq_ignore_ascii_case("ffffffff") + }) + }) +} + +impl Sparse { + fn open(file: FileSource) -> io::Result<(Self, u64, Option)> { + let mut h = read_vec(&file, 0, SECTOR as usize)?; + if &h[..4] == b"SESp" || &h[..4] == b"seSp" { + return Err(bad("VMDK no formato SEsparse (vSphere) não é suportado")); + } + if &h[..4] != b"KDMV" { + return Err(bad("extensão VMDK sem assinatura KDMV")); + } + if le64(&h, 56) == GD_AT_END { + let size = file.size(); + if size < 3 * SECTOR { + return Err(bad("VMDK truncado")); + } + h = read_vec(&file, size - 2 * SECTOR, SECTOR as usize)?; + if &h[..4] != b"KDMV" { + return Err(bad("rodapé do VMDK streamOptimized ausente")); + } + } + let flags = le32(&h, 8); + let capacity = le64(&h, 12); + let grain = le64(&h, 20); + let desc_off = le64(&h, 28); + let desc_len = le64(&h, 36); + let gtes = le32(&h, 44) as u64; + let gd_off = le64(&h, 56); + let algo = le16(&h, 77); + if grain == 0 || !grain.is_power_of_two() || gtes == 0 { + return Err(bad("cabeçalho VMDK inválido")); + } + let compressed = flags & (1 << 16) != 0; + if compressed && algo != 1 { + return Err(bad("compressão de grão VMDK desconhecida")); + } + let descriptor = if desc_off != 0 && desc_len != 0 { + let raw = read_vec( + &file, + desc_off * SECTOR, + (desc_len * SECTOR).min(1 << 20) as usize, + )?; + let end = raw.iter().position(|&b| b == 0).unwrap_or(raw.len()); + Some(String::from_utf8_lossy(&raw[..end]).into_owned()) + } else { + None + }; + if descriptor.as_deref().is_some_and(parent_in) { + return Err(bad( + "VMDK com disco pai (snapshot); abrir só a camada filha daria dados errados", + )); + } + let gde = capacity.div_ceil(gtes * grain); + let n = check_table(gde, 4, "diretório de grãos")?; + let raw = read_vec(&file, gd_off * SECTOR, n * 4)?; + let gd = raw.chunks_exact(4).map(|c| le32(c, 0)).collect(); + Ok(( + Self { + file, + grain: grain * SECTOR, + gtes, + gd, + compressed, + cache: Mutex::new(None), + }, + capacity * SECTOR, + descriptor, + )) + } + + fn read(&self, off: u64, buf: &mut [u8]) -> io::Result { + let g = off / self.grain; + let within = off % self.grain; + let n = buf.len().min((self.grain - within) as usize); + let gt_sector = self.gd.get((g / self.gtes) as usize).copied().unwrap_or(0) as u64; + let mut sector = 0u64; + if gt_sector > 1 { + let mut b = [0u8; 4]; + read_exact(&self.file, gt_sector * SECTOR + (g % self.gtes) * 4, &mut b)?; + sector = u32::from_le_bytes(b) as u64; + } + if sector <= 1 { + buf[..n].fill(0); + return Ok(n); + } + if !self.compressed { + read_exact(&self.file, sector * SECTOR + within, &mut buf[..n])?; + return Ok(n); + } + let mut cache = self.cache.lock().unwrap(); + if cache.as_ref().map(|c| c.0) != Some(g) { + let mut m = [0u8; 12]; + read_exact(&self.file, sector * SECTOR, &mut m)?; + let csize = le32(&m, 8) as usize; + if csize == 0 || csize > self.grain as usize * 2 { + return Err(bad("grão VMDK comprimido com tamanho inválido")); + } + let raw = read_vec(&self.file, sector * SECTOR + 12, csize)?; + let mut out = Vec::with_capacity(self.grain as usize); + flate2::read::ZlibDecoder::new(&raw[..]).read_to_end(&mut out)?; + out.resize(self.grain as usize, 0); + *cache = Some((g, out)); + } + let data = &cache.as_ref().unwrap().1; + buf[..n].copy_from_slice(&data[within as usize..within as usize + n]); + Ok(n) + } +} + +/// Extensões de um descritor de texto: `RW 2048 FLAT "disco-f001.vmdk" 0`. +fn parse_descriptor(text: &str, dir: &Path) -> io::Result> { + if parent_in(text) { + return Err(bad( + "VMDK com disco pai (snapshot); abrir só a camada filha daria dados errados", + )); + } + let mut out = vec![]; + let mut start = 0u64; + for line in text.lines() { + let l = line.trim(); + let mut it = l.split_whitespace(); + let (Some(access), Some(sectors), Some(kind)) = (it.next(), it.next(), it.next()) else { + continue; + }; + if !matches!(access, "RW" | "RDONLY" | "NOACCESS") { + continue; + } + let Ok(sectors) = sectors.parse::() else { + continue; + }; + let len = sectors * SECTOR; + let name = match (l.find('"'), l.rfind('"')) { + (Some(a), Some(b)) if b > a => Some(&l[a + 1..b]), + _ => None, + }; + let kind = match kind { + "ZERO" => Kind::Zero, + "FLAT" | "VMFS" => { + let name = name.ok_or_else(|| bad("extensão FLAT sem nome de arquivo"))?; + let offset = l + .rsplit_once('"') + .and_then(|(_, r)| r.trim().parse::().ok()) + .unwrap_or(0); + Kind::Flat { + file: FileSource::open(&dir.join(name))?, + offset: offset * SECTOR, + } + } + "SPARSE" => { + let name = name.ok_or_else(|| bad("extensão SPARSE sem nome de arquivo"))?; + let (sp, cap, _) = Sparse::open(FileSource::open(&dir.join(name))?)?; + if cap != len { + return Err(bad("tamanho da extensão VMDK difere do descritor")); + } + Kind::Sparse(sp) + } + other => return Err(bad(format!("tipo de extensão VMDK {other} não suportado"))), + }; + out.push(Extent { start, len, kind }); + start += len; + } + if out.is_empty() { + return Err(bad("descritor VMDK sem extensões")); + } + Ok(out) +} + +impl Vmdk { + pub(super) fn open(file: FileSource, path: &Path) -> io::Result { + let mut head = [0u8; 4]; + let _ = file.read_at(0, &mut head); + let extents = if &head == b"KDMV" { + let (sp, size, _) = Sparse::open(file)?; + vec![Extent { + start: 0, + len: size, + kind: Kind::Sparse(sp), + }] + } else { + if file.size() > 1 << 20 { + return Err(bad("descritor VMDK grande demais")); + } + let raw = read_vec(&file, 0, file.size() as usize)?; + let text = String::from_utf8_lossy(&raw); + let dir = path.parent().unwrap_or(Path::new(".")); + parse_descriptor(&text, dir)? + }; + let size = extents.iter().map(|e| e.len).sum(); + Ok(Self { extents, size }) + } +} + +impl Backend for Vmdk { + fn size(&self) -> u64 { + self.size + } + + fn read_chunk(&self, voff: u64, buf: &mut [u8]) -> io::Result { + let i = self.extents.partition_point(|e| e.start + e.len <= voff); + let Some(e) = self.extents.get(i) else { + return Ok(0); + }; + let rel = voff - e.start; + let n = buf.len().min((e.len - rel) as usize); + match &e.kind { + Kind::Zero => { + buf[..n].fill(0); + Ok(n) + } + Kind::Flat { file, offset } => { + read_exact(file, offset + rel, &mut buf[..n])?; + Ok(n) + } + Kind::Sparse(s) => s.read(rel, &mut buf[..n]), + } + } +} diff --git a/crates/guara-core/tests/fixtures/vdisk/disk-stream.vmdk b/crates/guara-core/tests/fixtures/vdisk/disk-stream.vmdk new file mode 100644 index 0000000000000000000000000000000000000000..2b8e269aa2626dbb86dad5f9add874b3a2a29222 GIT binary patch literal 165376 zcmeF&Q<&yJn>hSYbK01;ZQHhOo6~kr+n%;<+qUiQY1{UHUVYbod$dP;?Lq3GlGL5M zs`5*6lBXUCK`G_0pFVy1{ONBE{&(kZ`Ss8GA8r3CU;e%Q^#ARA`tFAELwra`0$d>%hrcPf zhX3yWZ>Ny*f-=&QYPj^YjI6i{vV8IiLb&*be*R;r=6lE2!t7 zhs&>LZ-fg;ASlQW32A7kPwix8=isPkDXOCUugT(a;o>vm|1+d#sAub7WcROGnHd`W ztJTEF#>&XS&XwB0)zZw`@NX6uKK*|SnHuRC{%xjX{%`H}Mh1Uv{zjM?{uOa_G&7_& zv(hv9d)>@z476-UhOAT!2FA=(jI?^pRQd*NhExW|#;hzx%ti)GjC%hi>tBjo__Y5n zRR7rix9UH!|B_~9V`yehE3T!WXcy{`+V+7#ZUJ^U`sR z?QE?6d5fs+^qlb_|Ia_|zytvSKmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT` z1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5 zKmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{ z00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK00BS%5C8-K z0YCr{00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK00BS% z5C8-K0YCr{00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK z00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd* z01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT` z1ONd*01yBK00BS%5C8-K0YCr{00aO5KmZT`1ONd*01yBK{-*+8;6HtGNjsYk!bgr= z{iI7EJ+$F&XiTV)ed>BD8WZ!gOmM&YL3Ci!iQkB5nE*`eeuJSVHW@zD@U>Iok@}CP z^%j}nJ>6w6b9IaScPdG(2b5%^)|2jy$wTSNSoVCfL<4HQdAl&b@vH5VlXYlI_E6p&Ayjqgi~Ir^u>+L9}D}K zAY{BW;K&ZLc2a=swVp;{Q?;QSuc9F_(kc-OoSS3K9g-mu5YC}wG(`tArMc^_`|M9ozYBj34MY5f*@`N@eV- zUkNF)VS5m&yo5`d8m^QhFp4Tnm%_2zZYQbbiKHTg#2y65MpI_j6GO-!`mBZ@%x1eb*`!s0e8K$|`m0&AIwDKs{R z68|8@-;J&!6a+Td-aFkejrB7SiqpOoB4XA)4m{srE`JjL_0v-7tP@dKXjTUiSu9yE zruXo4NBij|uuU3ea$&R5Q>hUGj;<7LScFA{6)ws-oTG6dzFLQvan0S0fx5{+_f7*l z1i$~Zn+!%~awAID43;bJHUSrUf(yqyTz@F14AnV7N+k~rhVR~~C-s-WCT>kN=8ssC z#Mv)f8MT?5lcb{s)t*j|W}1-)_pUN+&g;1hd6QIJ(!^?YZpm7eW|FkkT<2QuRHHVp z6VF%JLK}&bL=?m`O|Kzem}Z^RSB~vFA?UD|8p>9Xn6aayK%i&q~RuLJs#p=KIcy)i~@77gGSd&Hg!hb~JAo$In@%a2Cq!MMre zRy!b%jzX%b^kSSO_!4|NTEvw5(>(EfHnuqw5nO^cc(`ZtUWORddA6)vZwU}|N(LfY znl=4kkcA`gNwKY5(*}cbSb6qQ;V)(p>5ii?q$ZLLM@lo32+ixx(1f>W4ky=spjodm z%k$Hk-G29`pD&SSX55QCe>6$-j5>dWwoi=CeyKY13BWk}Ho?2O8 z?`zVUs*;Eu^C#o{xx$)@9W{De{*`r;u!dhC*I|c==LSVdUOJg%Auoy~$D8ghq) zsn?4`=xMJ}c3BMyjToshMR3#DR5cOm%qqm%YQdZoUiHdtC>lQH1wCj+i{x(AkihS{ zn1l<0!5T}rWW#_{17zO8G|Lx!O0Bg&8<_=Fs!RUnjdBS!DDrKkDnIjcDPeZ`K+~JQ z8nwueUU;vQ?TW6JW&2@Ko8#7eIZ3*(X*6qJ@HkN&FhBj&bLYc`H=W14Fm5(#E{_6r zq`VsWz<6}S-8%C+&D*qy`!p zsM?fI8Jdu-y=WiF@T4YLa^s(HR|5%~qk#W5v37*Fox+`PqSPWS@E}BgHlg*Dcs?W~^HhYBR*ijO_Wr$vae#$# zsdZ@S?bR`KvCStusYCGgQ7~@Caa%jtRN=|T{+hpE5?sMteSLZA1tq?Sp&22yQ7x38 z@oR7RSGAeP+l3&@@)Z_M(}uCW@#2Dhh}3y|f*Kqdg?+?H2A!!PDcDLoyp~&-K_cr{ zJ3jo5Z7n%CCk5GOp<8<0@z`oH3EDS1j_?rQUs&Cn>4_$m#_uS28o~@C3D(sB`$E+UD1dx%K zWtx`ODTVqxFh}2}(>)W+m*J<}1++c(g}01typBTC6OYJfc(Xn4 z3H97~`nywkp?X|9dh=pwj|vaK{T#!uxcf0lZLfB%q9@_IWg$jlY)&Z}#Ymld>$S^s)R;Qh=%}U@`5p)BZ2I~m zDj+qmJC|KQ3v(wvzM=35#8rBc3_34ZW2 zL41<#C^32NkG5we>!;@~U#EM-anlm zDCLCt^i;=Z6<$m_>Es?5m2eOnET=jhs&%8AMO&F&0<+{+uHB|t+_w*oXWuYx8GqB! z6!i%pfup>d${Xq^ttXmH?Sl$aA#9lC?yVqk~z#vT_!Z*`(UR&Q3%g$44M zXti03ZBX~4)8%_25-3u32SPNxzmDM^)r9kfM_#cS$)9Tkj5p3A3#K<`+ve>8vU@8; zn~Y>hxBfb>lDPRMkW@vgGt|%4FxUk;P<+-FPVl*AECpHlG(yA^7SA>|8R=EBvz6!h z5JKUoBK70yBy=~m+$~1N4pm_3-F_^OsY%6C_7%UZAFkGX5Mw`OgB9ScQeG*%R5eO) zNCdH7Ow4_AQoA5hd8U#l)}&axQE4&5C~T?;Vm7VtWM4b}?HYWosS>Ga4TEmiT!@RX zC{_?3boj&VP)nC+JYc+TYYfpV!_Ee`*vnMpX;0v~Amz$}#}CY+pK``}kSiChfG(}E z_pp9?m+QI>T%%|p<}E4#Pd1Q!vsvD>W|2!S&&?^{BYpX&^wnG_^~~513w_e~uEG40 zR1hcAeCMFo`{SmPd5t3D>*nZq%HbQPQ(L(Uslli3l|2F92nDrL<&3y`ZS-z!%Rb zUFR$LVH!^)Q$`?qkfx~a3LWaV@A_+gf7WwkF6|p_4EY$j6y#hGvzmnpd5dgP_IY)e zM!Y>#cPXjy#BAH3iS@oPM)XVh_M`x9KEQixRlK^`b| zJ^N?ix4~D7K#65;q<1rz%W~lo_H7%e%6p?!TXW+B|AZUW8=juI^ZCi2>AR`zP$YDb zcLYubsE>M?gvKY6C4F6!3KgLy$U&rp_GF~QTxjpQ1MGY>if-I+9Ri}y_e`UG9B-+D zZWAf^IModCEkxSzB1p{`5KAt5Qxrkls(A-l;K`w1Fh=lm#169Y)TFvb@-2)W8YJ+F z8GY@m0>^6|>*oD9{aMYsH(Ozp7*nHNpAR=41d*`XIm4&Ua4_J@tBw4a?$1#6dcqp ztTjUI9)LrdwkC`Z?}r&{OF!mya*QPu3jIvgP8pPH#Y!K%xd5|KSR`k? z$;(hi)LN_K5$glzD7qMQHI@tBQRL<`rsH6P9y`IvsR?Z7DJC_uj-Zg4 zyY^%@r-di$euThJ4nzKLbRCb_mO7#Qedu^+r7eMnzfKwljO@a3MxgH!U~e_OimK-@ zW#oQR?O-1C+`TdHqF07Hh-^ybSjxzq2Oqd?9mi0tbZzqXl*{f0w&r)BPd142)sons z#%ODA@9qB2%K^(pGiK`*3KVkl>8BCPIFLfw8c+P$MuPCi7T9y}T^UVHmBs zS7e_?7+%5PrtlyhJ5gqx;vta3FWz{yI2-}{6cjpxw?5&B*T)PIh7}k_ZthQCVP&Y| z?{p};7GT69gL(B;*6}P>|KT)|C9yf_K?-#0rIT@&dWCID+l32z?sLvP>s%|8-}~g@ zK(49dL$H^`M$H@}`ET>VJz|ty1L^hSLFX3Z=DoZ>j3fk#6y*LtP^=>-C&s6^DeAiq z4)R;iR+`zi$7FhhE7&LXGdd6o5K@$+l;^0;>+~IDk#Hngr8UpBK48GKx@}0s?%eJL z5QBOWvcKE^39bs$fYjScR-cv%_Q74Qe->kS3^{NCh zxv(;>P!m(5zO)T~ED?j?SUavIHg0@RkriUR&~#CWnPy#Ib-szMjB&F#Shb_y@Xy4N zn0ll7Qx$4afY8$MeIZDswd>X;&MY3s|4%(e6F!#bl5>~z+Hbn?k=iUwky%00j)$za zqh}Kf8#ldVd(^!z-LJVS41O#5=g|2GcD7u&SjPlNT!o}mAb7Las&mhm&g4^SWY@49 zSD-BN^ir`Ew_mKB1G~-}8)0UlTe`U4a4U}*bk%DlRuP)gPt4zH^`n%2oD}~Qi;CRe zNK~dHc>(9PEFK1V4)eR#smFL~aUMGE#ri^~^VaEL2x=ya4VOeP;o&U;o!h$$o4Zqh zaUKvpFgc`O;UdSUp_4@Kj3F;Qf?5GTAvcRkXQz49V->)4n7zc}~VBbZ>6g6DVqx z`d|+Z1YKyfCObMwc8mrjmX|?=y$9+;e)!lz1uIS&$UW`vIR0S@+v;%B3Cr`WYjIsC zp|ocbW#zX7RZY%2L3z$ZX64e^P+NNQ{UKV8wLBn&x)AIw7GTix6xC0|F6UA*6GD1c z)&#J3Z|9i4rS*;yVc-kH=qY`Wse0Em(j@eQ4NUXe&upWyWAeG)mv&q!prRgBgn0`^ z_ax*_b|a~%67qO-*x&CD2rX&nQ?&WcTh3b&+DPs<6N59e8j_1mjJ`+JpHUQgjBCvo zdRZCn6>*%>52x&h<)KZiTXSjlYo_Rocwc8(ofc;Nd2LplX3cW|4RgM+_n^{37VfYr z>#J6G?7@}eg={}`Iw5L7&d+`n&f+wsMJhIkE&;(S;5-s)2aBJW3)B?GTbz%vB+yI} zi4^*|j`ZND8*^4`N(_To+yV|`K1|Y~;E3&cLwsYLeYc%m+@%%e&Zs5jnGbrcRYuj< znOYQ20O?;-+45FGOG{Nd(5|r8c>J_Z9MeEc1fmyjE;Ake0gj}CYNC*+mqgUuV(_@w z=*M$f{}J?-rYC}iu&P&&>8?uaMI?%wDU3h8bcW+wZ|^tp`g!#Ic3Z$MBKvo=oN0bR z;7zoLL*o#LIK=gr(Ufc|#OA2{)T3V`TWr2RY#=;gd8t4XNGnp%$DZ zIh`A<&--)P;YO57P+>f#&YnsRHH)FH%8U@&0ZPLNwiMvalEggC%VhzWRc@IA98q>D zA9~W}<(E;U_C08s8u`k4Id}}vJE!iDj5{vN64^}%@%b&AZ~_d3Sv!6%ajZfM7L9Kq za+_cQcUnI^KU&N;?GNr5ai*8B-AB*XHTeTM7*N2OD zlDZ$@T05nd!N$kN7qBh(tVB0ARaj*7tPNY0RJ6Sq-FA;35$=L%#|}CEwffo zA2u4HG=dCWhZTz@f-hbcOyNeRY;v_9rM*O(NfWA(L*2=P0-^?q1W{X)?o^jXohY0u zK&F+lEXPc)G@4~#rImO4&)B|*U4)dL_h+FyAO5g7520d2#wgX}7+bm3v-5l*nJ{^u zFvJ+_E(ksRRsi$ffN&)LPJYKWXI%Kx)bVD0e;5unonV~0#(6z5`e)msggq9yRxTXb zS)1XoyY}#5n&kJwGyds?11>4M4A>+{_&K*CQEQDcuno`zSEWOQ`1Ie5Mf`&1WYuV6 zI*r@9Lx@`5RU4ys=}tIaKf}YWl0l%z28vc|Vw}bCn<1i%Z%JUCa#5H;1sX z6=*zAHqW9vKgXjHQkA6lba-`C>x~uDm*=YfspCd19Wv9+@v>^U>+&(I_Uo-bk3K6= zSRD40D1H`Ti;hbhTH6dIBaLP|9mf4czSGxyvkKM8fa!fS*!dx=Wr<#O16mlAW`AJX z$Xt=j^YLULVd%Y0F*MZy83cD-WbTF+Q~j=Fjmi#PZ_~Qe9xEOmjR(&|r6KSup8RY1 z+s#l})gQBg9ciA)7K=)d-3AlZ1QZ*ZF?rV$XUVXd``B$~8oj(`SXB-+4J1t*5{8&o z4WUZa=&ATL?y8h&QIbh3kjGv4cb0gmfx%{eJ)D;m%Q_zfZ`CyT@xFKYvxNzr=CQkRo3>w%S$2W-e_xqi#LzN0s;~`EeIq7!r|Vd${Bjzm)Wysk(?dW zlU6Kqv&M4O?ZvzDG4|9_BZlEs=zOZqr(6O{$AS9J>EO3~JFLkjcdHV01Sfq+e6G8FsSTxpeTFMeW;gFeIFv4%9epC3m8}nsn#55Bnb1dLGPfk%_(@ zbdg+WtUP+W_AsU9mO--!p8Fn-wJagt2byI8~JF4Xdd%jF^tQ+SLl@#H8O__|fnjS!ZO(PJa{wZbJe z7%vF4Ejtx02A}qm(xV@G=<-i=R0)c0?imgQxrqLZem~w;j2gr3xZeUI`pF7c?HX=$ z%g-J}P>yk4TN$8lRyIcSKYx9iY-P1kCN$4;Jc7E{wmDi=xOMr>zF^rtl1!yo(@!yh z{|FV;uZmcm-ii$`eDG`z<`~=in^=u%IwKAF?K}Y7mZLO1+2%a*XaSm~(+zct4)jK+ ze9iy@A5D*sYPxl3}6k6#MTS0Ndr&x5H9 zl!^pEmEofJYLT_g!U&czqwr0Jkn7k`O7Kg(%af76-NfY9q!br>ypONQKY{F-m0wP+7{^5utc3}K|-0;aymKbgi%w4m?x8oZWJf}3!g?etY9 zyqTJ%SQ6JNX|B1vnJJ5TQzu)I(&(eO(ClFg%}=kYqCUKqiIgosPkUa`FOdi}jigRb zI8T1VN4cdmfQy>q3QSMOag2f~bzs1+&k0-Dkmi=2FWQ+7$qT+g>tx{8!cHTO+UL2b5%p`rpWP7hu? z32qN1F3J#yd^g>^v3Iyr>iW%wh@Sjv9I-X$uo6nfnCh=O)j$p9W`RflWS*1=JJ|u9 zzAD0E5-HWOefMe+aV0UIv%w`W@$t@WKl|(uOgEvaeJ@JWfu2rWT^jGi?*4QJ({4HB z=~zycn>YNUZGnd^C?%^~n?V?*zAT-r!Hgcd*8eIfTF(U6OYo(=>goGYC1u00nRXwW zxV$45J@Ogz80IEbsVrfS4f7;CNw$8GniQ)r7c9#9_A%adi(|FQ4W;Vn2wJJ<17=$Z zUn9@g+p>?V-B3WWvrvqfXo;Z_NEP^2ELG)Yc{d0qRyh;z`8rN zb%7u+ii8ws3u-cX-U-*h`$t<>Lq{4S4_t5sQ_~rNh+Cp`X8>1_1x^Qf-3fv! zn-u$DSpjloxrP0wxcI2-9=JCl0lZoQ5PJ3(uydHqfa8i7A?Vle%KMaDjq_3zX-1h* zhL~iGEt<#HN~uE>be@^!%=07DIu_?+8~qYcqNwQP)oo;q?|2N8w4n&fXVeBpU$;}6 zGLV<-6nR?qGZ0!dZWvOLCpmH545-soTMuVxxv7`wy}UezYId%PN#mEO)8PRPmGZmrq`jpLrr zQudw*V(BGaI4KClDfXGmptFLmz4#-xzB2Qk>KIX=0uD)z|7K%iIrh=7f0GTi&GmyE z`uE7`?PxZiz+}-HjD*UCnWF*QK7uXyz?g@dY7?(@_#h{dD`sHeE2D{UhxN6J33kun z@lMa+`A1mUFCB`W9J3KjS9UEblc{eMqSgIc`mzNs;<_}WQj4>%7heTM&YKBIdyiO+ zw}MJr%vU@uXq4ulT?Lt85nuf9{cZOqR({>fQ<4OHoT`=K)Mvx8Bozpp4U>4q=}_U% zvw?fHxfSbtc-et4mmJ9cCPb zYgEFGmu;eyggT49F>-%s3Tb(m#CV8EzrNS`Yd4xzMXVT~uGk)`VJ2{Jjvg@du-a}V$Lvw-!YS&Np*_Z{?uwn`eU2zO>TApnqP_DsaUM6N;S_T| z4t6fOd5QeVc82L)x6X0<)Sl&myxrR^I+DUg>^phntxvf`Z5gXIdpO=^Pa-@U=&@?~ z5Rv{-jaHYYu`!~9s;2aKI&RzngEtn%wppoD$4Rg>PeNp-E?1@YCT|?y`=XtfYSp&W zJqk8ilbUNoYc-T7NEd|Y9f=^Zj^!m(czYy_#a#(4vgZ3EOmUqOQ@O8!Eb2(U%{u5J zS@|VkMnP%yGye8t{+IHklJV+UKL~zrcN?_#qa3qF!Wco;=a-q6`$bmi2f`i|3U+q zkvcTJEfA9a_-HE7;mn;gE*c=FW~2BH6YQfxj&D>p)1&D!sg2gQgF_ABubwUlv6Q$w zi@i2zZ3*VEp`y+cG|0Y$)eS|q(#FH>8_=r*51Bk6@oM%#b2rD*Sj$V5pV}yUZthf@ zz31Rmq*f^anlP7>rGD|OroYl(`Kf^rbex!J&08KDvOnTcpeKj3y|kpG6PD^6Ov6A6 zb6?PioC$5eLlUN_Pn;7IM(*ZZRl^HeF0EFViSdTFtu&$27JYo%UPLBoppsz$xffNs z`95eONAe!i&%0iG`S_6*inw-{Xpcxzwbu{3c0g@L3?9;S=K$>p#Jp_p4)b6S{q`jx z8+Cs(7g7}U$^^;P;4&peYP)9L3E`MwDjW9Zi4i0x9n8k?HX5duTJ$o!KceR$M$N-s zgnoY93`tOL&opbrJ;+E?z6g9Wn3n#dd4qeZ$iw1Yv(JxO`k-LX>*5JRvI2R-MQO>m zr_%L__$DYcncPw%Wapvmxn2H*YPY)rCZivGE$aK;WrTMIxn$|xI_`)1#cyZ)#{uWmjamxI+dR`(pjJ))GE45etXg=984 zZm8+6QQ;fp=&o7I_DWPL4oo1;D6VmF2m;re-{Dz1F5jw-3nH>QEv%*DFTiHcsJ0vo z6vd;+aOq{XPo}xVi#2yGbKOO2wuj#3GBqo+aH?^N2Fcg<7QX!k`A%RGB$_^io5Td- zi5857{@^JW(kqZi&SZTm&Tt6-wTw)85agohjU3rQ3nwop6w=55_2Aqd6kTrZy}Qly z9J|fwx+Q%nJ|<5Xx?iVo2F{@*GPtq%*7SmKDvRL8YIjXyq@uYoV}?>xlRUd`)Rb&X zE=zPmVO4&8JUetFdoqoU&MvtYYjso*6|?g&%yI9+?yJ9i_tVec;d4+bcS9w1 zxgEE$&TqCFdb8_aduJD`0^@o07U@Ge8*xnwwlAG#o*nA05AzQq7FA;P7Ouvy4nX7l z_zyTQA736SY(_ogH6pHW7au^O(BwUBB0uA|22OQuLqUXu^`=O*bn4DbQumC1nBAt# z1Sq7&G}VtXegD(FH5^Jg^^__&Ev9m*KnLP|6rmAYRpm>s9w6YUANso){si~KkK1kZ{tE`36l9WEwi_|F{jEp`#ygU)I4El)x7h2TC`WrnokJL-k#UxXMX=^r4! z7-1yIAhZkeVJ7kE7;*0{F}Bc^+cy#sj#3H27fg%A64q6K^KZMhfZWT9IF2ug6xX<3 zzZhGo$U-HYghI$N*edD^E#L4|8xOv_vJwurh&A>(_h}-?mMCBdqULTQ>*B(hzS|8I zlEpdH_bsszZ3tI7lDhZHMOrj==U(=E3|$)UYV_O0rYf0c`27y)oa_t35ysPjG&~Z3 zJRZY+jE&kBAk3rl4zKwJPj0$;P%^T7C*$k5cQU;qPgv!Ll7Hos|($x94YJrUXv)B*gxbHb|QD_L^ftN zp1i8NKLewJtlv~dhx>oL#+etU?lAkV6b#dOc?N%137<5sV1=q|ur@DhU$Af8o>kLm z-59Y}Of{CN2dS;S3C@F};9F<`%hO7#>O{JlbYtghRa#%pAsm@k?OK_v3o$eGqVrEr zy*WdIqAt?tAsIq$R%lry*Fax%s|msq*1Qe)fj)eM085}{Fg%(MzrzOFwy`@F(l;!g zj33+aLz^DQDOoS-N9)O4K^I$;yhL-HN7GP2)bNi=koY{r>`SoZVB~8bo8b#s7g&qd zDHlF_=z)s&t$(0S+J}*Z?{ZK1XvvFkQvv|5Y?XVrX8z&&;hC#eb zwV8nRo1C38t9<@f(-k=9JcXm2w=30XhI^ndg|B&oB;;|Yfa%~sTu76>G zr+2cqAqnbJnoDR{quVDGV8G%!uogeX=U&(fJ#XR>!OyiSYX8Z5uT*eZ^z~~cm%h4y zskIcEK=Z`7%AF=suc?7vZrYndk|#f9^Vs&m8n_OU^=fl8FV;+0D9BYIqxC>c5n`v> zvv489nx&IR_l8B0qGzjf=k~t?&#H*pC%5^y})4002*DnrKrInGJIX%bz+zRu(!e@O-+BbmxGoo`s z^5%gJ{jqt2Y}1%-kUhmhhHlrVD~APjpAS#GxG+x$$-Fl7AaBF7G1Lg+;;(29`UoqM zBY5Js-eXKk4|1!3s3$9YcNrP)7< zx^0<4Uc9COlQ4^yd02TUxFr(s34ipPJrg{#-0!P~XDMoWSM{wyuG2G$McGBYZ?ksv z4!Ox(@SvRUsU6WAD0E8Hw(oswC}a-Fv|n!qdk2k#mMl}jiePUh&D3PS*1S2M3#64v zxTiZ^UJ(6QHrF7x;&5F`T0`b-LKU0WcWG6tviCW$z~(5udJ|TQz~E^32}J@AdjwIs zM`iq8#E~Z5GZtf1dx1~I*kzY;u#&NSxz0*apUCT2sEGEpK_oIQC%XVa-A8TLD$Lk^ zK6%I);VDQY+`;bn{hfD#V`M@NjWhS#jErOlRLEu=V%SJ|A~*l?Z4mlJmw#&rI8Fr< z;dnI6kC5{~hPM63({5W@clyX!T@9s58jD(_;3MhgomhJNHx#)_JOoea>E1I|wo~}x z>KUOjm-B6OMS)SuS>J*z<@9v?j`NcP<`c5k*Ksek!qQplB|k3QyA3#LaG4eH<8io- zcE3nG^&Z^4BfJ;&nQh6U>s!{M*%OEu{rh1H!!9}WVH+(^I=B+yY9V)q=fILNy*tq$ zh0^!a!NJf>7|E%1uIWLvJbb2P<6&)acL6WhpL# z6uB^o4XSg^$`k33&&NJ}qx2ZapvXJU=^$6ro$!`u=n_1>ec*)J}OGf;cnpbao2f7@HcaCJc86)Vgq)@G2sjOUwmyFEO6!s=rL z6fVqUV2+qp;MgAdH11U%w7d3(0%aLL_NB53-1+`cM*t>t7*_+F>F#3^Vw z4Nm6|{G3Wv^?mc7+KS#}Eb|I~kbeI`yf-6DYp2tQflWJyeegqr5;tD)O<{g#o;JCC zC2@qYail-0niV^~gV}mSomLimJ0t&|m=|21p&>aoeai85+v26E@kVWmAp4A_9ED%d zQhD&rDEslkrV!t&(>}T$QyStm6vk6S`=;<3BSVn^6y!BVJu3B^ENh~mkia`{5Sa`T zihi{!d*>^4qEXez_d0UKa?>*`w)+a{s*WDCVVN%W1~v?PN5(m_bn$%fd_T6iNZH18 z*hOXT+~pHy{=);7IA7JIjYYlr>+dewOtNri2^CHA$KjEaO&x2X0&!|!nL?M-6Bo#L z-$|LEDZYD-qv#MpNF@mtt*baVjPI%0*{x7c(w>ou?-7n}ZMpxD8A4gkhJon6?DKS{ z`7?N29XPYTd4=wrBg}JV)0W#Eog7s{`1E;Jd5pdz1|17S&Mmy~-L4W<`s+Ij)_a@k zSpDix#5MtccnS!7s>}$7N|iu+@E*;ttNjSql9|%!AtumEaEYZM|CDG(<(+w}eu)4q;G9rQ(Hh+MqDEpLd=Y1YU&x@es1ZBR=mqwa#@ zVQHxC_6PPD6*@9g()7g>qP^%wBP#M6EZzIHIsG7LL;uU^PSXP{&DDNZ1Q3kNnHgKk$&iYjFM0NM*#Z^jSA)p~!Ro?pK#$VEHiRqXw1rGfiUI|ILSLIZ?M121nF>gMu|d^yrl&ij5aM zX2{)KivKaY3ss4>=9KP*PxdVCI=Q{D?^(P|m)){Mej=)Y&K2*M5Tp=N7_@SMJE^A$ zPWVNc{*b+N)G*{d)?rK`Q1uV5d}}mm`6L)bHS~_0@~_#;HD-`pUYwItFxT?ICfxk} zdUi6xI8K9j96v+OsW2$3>^hCGv#@{@2Ae|9AFZFCKB&FHd ztX7Rv8UIlmtp2SnEmx&C-Xd7+7er2zp}&3mpY{E}c-G}dX^0+z|MQsIAnlf41bgBB z7yTU@Z>O5QgUrL&FZbX5dgMi6zWDVcsl3j$tIX?0`SA1K_u`)@PbMaAkhqZB(A4t# zK#}C`Os(ZUu=ThPpE{_qiGY}L&8#5PTSa8>HQP>>Y+VoyTgyhwaa%$kU zvzIvFIjb!Z_5X3n{Z%HQD5`v+Ihtf8Q#8u@%O3HF(gE+;f)7!L(2zwmbj|SqS^S<_ zFZd40<|o4Q7Tb50A44Yk`m&-z92WA7>`3dn&5@~fb8{c;h534#I*n!0&#zNwQaH0= zv*Ph_Ib?=iFm2}N#N9|8)-v;HbYphTP3y7vXgt_?`_{PMR6d?F?jZP3c_xzf=U(=F zLn7lAjKmd>8AEkS+VC(#91-e8`j$8CXyz6zl0ye zRf#ff`s8(j;k@cvvBYz<(wihpn4otmS4jW;#Kt_jih*G%9OdBNi2R$(&WhLULovcp z6CA{gY>|;Gm+>2fpMX-h;sI?3)ddXxaz7qC%Wtx!CC%hS0jn>>pD56BeYX`&pO7IF zj*yo86v*?u#Yt{7x&lQw_WrnTEuwy_PO*IAZP?u=qH3AV{*}hSH9l9Oh`GZZzvTFE zx}LWeyF#!M)8F#>?t7^)dfKbiIj@ytv5Ut;J55j&pt zU^H#Od+zirCHGE|+85k6M#X#k!d{i+Mt|X!vz9BxnaN2D^0Uy|uZqA+v>QI9O2YW8 zh$LHr2*;xpjPAd4ZipxDPFl*Xu|5(?=6P;3>saiZE>*Gwu|B})hu-@e8T!ncrM_*v z)H0_11V7sg%?=ihn8x91d6I%#D^@Y`#bSLzS#B*E^Oa})Gx2w8-F-+bt40%p_uO2` zpIe@ueuomt^Zi~t3vT<5W)_p?qs~QhMW$mx7kRv(v)zTcnlLC^D&Ims&ntOT@zmJt zjG9eJtA;KNNhs)jNUq|;e>pX=JWA*T_20P|yZ61c=pLDDjIj}BsCiAob!Lkv z5Y|ZHxOo)r!uoSNAFJ@QH`@=xmPs`{n8YaknYWu}mVOe@Ad^4F7_L6Q&9jXhbl9Dy zofbekPGWSeHe^_=H|-3jkbGIb#eV&rT}3EfFyD!aUbBdt3^&!zQ0Kjr%tA_fl z3{}NX5p`uPi`O-Z3CG9ls&878Ka?hk4J$hM_ReL-GN*1&8opu-=7=up zvb8k0EbkW-yr|gb(Wh)k{3qxbm3$lI5S`x{?StD z6LKLc6ry!rgL}oa*uzF1JVUNctAyJ29S-$p@tZ`ethu@(DJkxQ{@;~2T+>?CGajPT z_D;PMAR|A+FioGo2Py?|T1_@pJ#=)b_9QkTuVozY%EYp`ypvn^G(8h zHnxx>5VYrRCHZ5ZT&v+8h00+;k=7zHi6AnlBka&J^9%w<)U8-eZ_S- z`+7X9hghutAWj`(y#*dK}eLvPOE=5novO%X{51lay)nr~^p#JFf zgT1ipDf5oQvr(_`_Y{bh^E;R(4;aZjm=Gc^pAHFV#A^i+d+~|a)N1;StiFYzIymBthJ38q7-q5V_L-zgw{dmMAHM&f=}tz!2>6LeugVv^QW9nF5t;Kc;X*J1Qyxo_@N51`qEDO6`Cgqa5u{4DSZsBsiM7XgT$!b1z!YFE#`>(|_be!20P`pSDq(jjCz65V707hHhTR`f1o+ z6yBlQEzm5#o50i-?Im~zDG>6$#?;l(oZa%QDRuCwR^ful;`uugpd#Z*rjRLoS?fv+K3hhCzixKIWi$6v&iXVy>+Q+oHp|rOC!!Gd6y6f zq7Hb@aV7JjaRq8Ow)JnK-(S{6VOp&FgJ;xQnAiI`Oqf1mf|P3X)Q1=U5s5*DeQ<-V zsr3->_ohx@QQNUQh`BOVZgLT%sFPSYd(}#i0b78ynGf}W3$tXlW8%0AcQhou^bub+ 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

Dtr7@fJhGSE;+a2VWJ=QKcN8L$g6aw7gDJk&1zQ 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

Z(VY zd?%AcOpnHBe8V^=?K*A9e&kZQVfnFEQq|u`*IxMMe=+p^`RdW&P937mVWtE^6(W(b zr-WajP0@-Cp3Z!LcY2S3?6|?T2)d2Z5@DeSk^%u0TNW&X3UK^9d_Pk%h8CB{GI%UU zMkr5|T--VKp1?Hz;r`BqCN=N>v_}~nhia_xTz$BncGgWzLN!Ju(z8DOjRuHL!5{np zv(7;1SAXy~o6eEpvHucYwVbr5ziDWSdMmEv6C3Z0gh0W|GT#Jt2N^S9GTR+nD;tLr zW-6Y1BEE$3!sy)9SeT?P$=UyRjQWdvkZO?|&+IAX%@Kj6N`k;Ba8m7vBX-Sf2KklX zVsLL!2@tHP@-=l=Q&O{%htTVZ0aUEYr zn;|KLt@^LVlXre#j?rrJdDfQi)iF6Xc*BTK^ZC);yqlW$2VM3% z-gdqFgk@|q(NQ*7R;=WgGco%%D@b_3ULp+nOu$CG6^Mw=o&aJ5HYp)B1&hop^ftjHaNy#XCOsQMzPXq9yIW zOYL&-1eM%;u5)|D20}EcnLLy)milZf(LjOJ9QD5_1i^7hF+Y&V6Nmy^~<25Zr-@a@bkW*!PmMjVU2`TKN zTN(7>b%vmliAg<5nT!8XaGpzBU@op$bUGh(1zrBa?lFSKAzAjy<*8IaG~4Vy%nTk> z<|nc1WAWEytftUUw;qsmvzq7uc>`ldAa~aHR;&z&#nItUM}atZWUBLaq5U zDPeIO90R;nR<58rl!^q)wsb<=w|Nm^4$lf&cGVfg5dC&>0hm6B`$Vm77S}v^w$MOn zx|G&P>l4DJ6efiLYT?qvS^uK$`_T5$T-{f_`W!>C-u4bV;dUG?(`uu6oiBrh?s?qG zfgvYHfncoaX3ppz17ajVxmvCA!NfJIe4}ieR_K$j-8M#-cT7bvT;lqp;l>;QcE!hM zHt0db(zh}fn8BrzA_;k7uIN|; zA$)*LZU6r=-24$tghZ*6RAA&?{HCnI-lF5L-0o`&j|r0B4f+nodVr7Qd23*}uJK~+ z>uV0t9GTzsm}K3k@QnCx`TP9k-3()0bl%tp?OsGb-<@;}F00?_j4%!c#0c=d0&VP& zAu^h?Oj~Jxx%az`hJ4@*frdYC0*gPX*oNp?-=t-0j=5fE9@zAqWKir)HqL1piVZS>!Z`pE3Pl*8Fd&36`1F;b5Z4)-I@A!U0%dI3pk5Z;>;DQTwWwl#EFn02Xu{A|8iWBsl^(L+Gpb9D1SkOW&u15KU3X#FH`J(J2PuR63SY0456o9SX_PG$9(qM~g zVovesPU)kxa=&$_%J|GqPxT+ykO$;DARG2 zHD-t6UslCaQf)etHOR}$6M~hcG3K>*V&I5dO0RUcPg9cW-?ih-gojDH;m9aLd}Q6dn1fGIN43?lyr`E<0%R z?JE4_dL?U<5eIhwt&pK>HCCw6s38rjrDL+v?$1qy|9*};xgyrX(;7)-YIlpIx$Z^n zti7GiDebRmTZ0vxdP>G((C~SdQm%B#wpo!L8}Z-b!uwt?2*n8i4W|%#20&xH0_FOP zOK0j)Wu%=Wd*b@1^&IP!8Ff>m9!Orzup>37LTE&|SC6D!qg4;>IA9ZtoI9*&&U2kc zg{2Y$4~U>3b=5fwBzx)sesLzPq8)g#=lM=Wt+Rma5EuC=Xp+;ZcX(k0Il!g#%0qzs z^95Z`9M}MmyUy#%tHfTXFrW_r0fM>Uip?93Mgkp6x3&((L9HqsWZdR@vFshuPooOH z_}S(>sq*+(SnKSp=HTxBM&9T%cx_)tVpaaJC}g|)lZ>*cVPp@v`aiC-xYMeY19=+% zV)4}fb;XmNzKmmBs>zYzA-7^zh!?Z~vY8VckNub|5tM4xxEpOn$ug`#Sjl`8|we@A+$zIQvG2O%K9-WV|mK4488e&)iFr`v0krnVb8b-%kO>|I>6m zQ4KK;YdJn-p!9lZ<5GnL2nVJFENyi9oI0cVz$eSem0M$G9h18`+cl7Z~004685B@i#4I|Uf(!uU%q76OA zD!D@%mcQu$X95Nhv&2$-G+jl29QmfJ7p$49%m=G}YksGaKnf~$m``9g;C&tal4ob2 zfHs0Fs*%7(f8m0h&x{qXz)Dx6%5->zSLopLOzXF84Mk)hg|Tn!6pIhP$iOr~Q^Sx) zH3BP5l>Ol|b?-bt9lvkMcO>={5IA2JKIjY<;dl_HREKP`cmbe~ zg+3<1D_-(jflHNuFg~F4y4On_a7~e8sPawPF7-2=jn456r{8g&IW^pg2FWj0R|{M- zMG_8B0y$zOAf9Fh8`xvjK5$Z?wQ3>T;rg=%RO1YL){ZyE&(pe(Y)0&>d{Ju1rEHEq z>x!st7V{(T%@OxSX)P?=PYDN&iNiT3Ii_)Qr7HO}VE?FV&&Mo=^ov&YVYP&=P%d6h zua9Im!YT1(%?%RFGu8cTPL@}I2T86s;;=I}H|S7>Iwr$MEA9P&Bg9c1 zmKAWDK4Y;1_<1XT1tr3bAAV}ff|s}Wy}?0Dr?vfGQy`U0ep z2FuWyc`UdHQCa*RTPy|F8463sYg~hzzbY5I2gvns<-DF^fz%mRvofZRN|;IExEvEU zie2TQX5=+wUQ!I@5%{oueTprVtXBMVmH9yjSQAPT)oM>G4VLn+HYQCY^FUqLJ7ZZq zmx8mQj=69J`NjQyy?pY5T0b_T_CoI^~3KI?PK2GfeBrhu}> zRNF+<@d&J@ejfe-BA^Bl1I^4Fx1#TM^6(OsvObbG)Te4OO;lqCznWWY( z+8RSE5>i4YbeXEAAmE6JZ#<-d2XDSWZughQ(jMsa^VHV%(txqii!vU8f<|XVdp8@pO}N0H zkGR%%SMXeZP1($9(1hFnQG5B_`pt#|I-vt~*llLGwfIv=RJ zlY2UJbl^ri#p5WNMs$UgBE0Y1Ucub}Q#eB4dxJH$glH#;Q5HAB|M>lGR}Hv{`f(_@ zl_y&HPM^kb%{e9ks3iLD$g61AuohCo{iQ{!{~Ne>>L6{kuXCvukF0;&hG!H9Ja1s! zs)F8U1&3u>9~i|&Fj0O6Ph~v&wh6rf8!!p>^0^sn3B4^G-&J0X!NJixFb&>EoHJEFv6(EQ*L ze~^mlul6p%3;z5Q2{~Sa7qBd1k*_RG1@h>+|xY=oWAWF^QH&+;&r2CX~~2Ns=^3af>5`$S74b zx9rj@2iBGSqPkR9THghDz$8+vuO0cWe=^z>uo)-zxQGsw zDAEvIOhxzp{%n#78HD-$6IoOEuepVb9ZL8vmpG0M)F+2SV#KpY~9c>{M=r-qFePM=^H!NyI<< z7}M&jK5(;Z5ei_u@((1Yr47#v?~V%we-G%^^|o@y(EY3zNLz=fS@olW$^y%t^K|F^Z?qZ2(mA*3n`^B|yr9JB{H+Jsnj6)9mxDqib zI#xvMX9rzY`~Ll^cT^1n$=JenQ-RlA#3Pw8zzEM^5<->hYnhJeHUF$CDnM8-HyKVs z_SnGtyD-|a(AaU6j)lfRxZ!V@N zk0-NeZHMEh=R8Q(UlL*(cgqOH>(NBdmho^$ghjcGb|sL!ABj!To4r7-Ek#Waw4mF(J`aQu?6HCXb;5@ zo=!D`N7QaSZUPpfqF%Fs$*_U=2KGH8NxEqsU_1Xz%pyoE&azf!Ur{LSw7e5;3mnuR z>EY33P?Fh`Wa{`?^4_-qBt`KdgHdcFV_aF(v?`IhgbPB7{@(9rS3&*<7qzeSv|5;` zlfmR{-uSSgLsE%b6|FgWwQhAhZ+7>|{=;NSY+>P%l>wN)siH-Q2iE-H#uRK*CoX9c z!2siIO#P_>bXuhDDpeboK3bYMV7ei_v6%SYQX8Rp$dm-k9@EC6FHC+kBE#vw`7n?| ztURm`^=312*hbYLDc$(gyeUe*oNzvjn zL`2hR9j6l7+H6N)Hd(_%j(%oC(bGa|Yv%I%E~b(#MhET)(p}gQM{Q_Fjv|G*++-Dih0h(tumKMh5;NIk{jIqX zI{YN7v}{>GL51K_*%|zo$)ak|r?C4^*g@KtlabD7L+ZUv9joW4J4W?3yP9SjyQk8x zB`Xyj`gp&Uca)FBF>gLTVz?82FrR`6`bc&Dn6n4)e0;_3Kv6+Aem zl-F9y9UdN$>w>@5lWwVlz$Alkp@yuG6xB-oyq6?Ge&Kwe(?k?ZaO$f*h%GO<39)VC zI#_;O(ujH4h4s%c26o zuW>hr&Z}7p^_Ci%H&rc{6_H^VF$kfEJ8!GrRKZC!&R@)izG;9_bTZH;bX9hDsB>;# zB3Z7F)|RlOl=G(~UQhX5UqPP299g?@`&Mv3+H3hfJ`QtlxqmDmh?XKoL#7G1j#1c4 zg9tX7xGF4cJ?Zw*7a+OdSVJ&IkXGn}{KC`SgNL9sZM(@zJm=^le`hkwQ(G)|K*x2OGfuEWZ69#*>IP0&dMd;P2FgL})KlFI zy<*V*#|0*kg$6;j9Hw~W0U$swUElds01v^FIm#9@HHx3f`veuBltEFcl=7OyH`<^D zVB{a6CDo>_Hn2Fi47n^4gr1`Lj)VtYYOCpx|xN1iz(&jDJ?8;?#DB2oeUDHEg zCHGiFm(7M5JlC!j6B>UnYkY!W=1J?$naG|oPJ^RinNI4___)Y;&UUa?t!aKDf2T1A zF0*$@dRq&<>x`BC0}zfMX%R(0r`IcESt?P}eA7n!ZcuCTJXa2=1?7FE{8`ABShr+T zh92Op4cwkDnh!B|o|A@Z4wDd_)(ZH9A+XaaQ}BF{SscD(XTzYV{aE|>t6(Szc+Z%y zO=#Y2GpdzTgz#0WHCLrN8~knDLYv(sAxUavJ4 zDx&s%5FZ^yk1BjDPD{-JLrhLbn^8^Y+)pwRt^LCff9iN@7x|VaK!8)v1Rhv6R6bCI*le4Z+4*dt4`rEH0j^o)*zFV-SmxvW1-UTqCM zC*y7Vfga?YgqOvw1N8WQvDfiL{Emz_9=H6`H+~MpbX*Ws9*+`qV#_LZ3minNqVP1& z$8dc{b0zh~Fn5E_FE}X)=A7Gx(OKLjV%?uiKR*LIf*O67=HXbjs;_FpxsI^}DA1WE ze_CaNrZm-V8=)GgMbC&}A>u^sXgIVY4h+siZH$y+!+fw2vOnpUHZx5P zt^&|99rr1L&fcNV$2$w5;0l(9ro$xpg*U5my8V;|9K#sVhhEF_>E`lKX)L%=Y6E|Z zo$ps;vg*CFNf4P3++trb-}Q7c$VES3Ej`oeHJN!fFYB`Rqzr{IRg|@_)`;acF8Bo{ z@{RGdCd6|^d58q@Wc9Bh6FA1&J-9V z-ei77#`&be{Enwv?aL+sf|TPR7<|&n(DUD8ku$kl8#js0*^8^2tSyI=cf2HZ1C@{^ zaJKy<&tC2PCg0Ftdj`p(H|lyPHld2E&&t?E`*A5o34x4gx;FGNp%%9c(K?-0dMG;}|KgB8Xx2^DEoRmfSQ zy6GAH`-q0rs_>J5lB~cEbnyx_hk39W{2M)N(t1g1bQD#bCynZ7Om|_0_qENrm;Bbd zCO|nJVai67Cb9kRSZYGFJN&rjWyiWiiRm^NK!4$X*! zH1^qmUvZupu2n}hTR1DWT}$*ah|%;(>oG$I1gb)skB0AXH|1U+UJ%sto`b!jawJc9 zcX^bWndO`seZ$)&eU1+eR2s6kZ|?H}tjVLzabXXH&!%C=HC}i@L0GJCb@-UZ8bHB@ z_oPjrhTo>Il(iL`xxCj9SI}-i5j9ayzzbuyhuzAvd!y5gG_zAH649are5Q1_-UDs} zErRTBk!4E)2m~HwmDjgKkp_x+$wZqkS6gW$MLI5HckgnRAx`?ym!_?Wvd+!;5!Cth zg!x3IY<7_qJlWC$?Ry4C{y-@Sey8ahb65{Le!A#^H&xE4Q~6jZt&_9Ya?Th?7wnzZ zd~QP&{kxb=0Ep{Woyr2H!0sgAL2O$@S~C4r&S&;%L2n>wD=lz!ZPaRbUi0!EuDdP@ z$cpk6R?|3Spk*~VB%T+S7ID@kE=FBjdNMtS;h981%##aD9ZMKXA?2U42y+NmaLgh) zaSadPeoK78iL}HtJ8LH^I6bUEYcwGDykcT#eE9OD9>0(}FNTHwh0Bdad8pi_J>Tik-CkB^y-SY-9M7Lgy5`nVcRd!~o8v}A;l+vWDrN^yF?sx2jpg}r#Hj&TTbC|t_!(J?njz>MC+BiW zz*SC75+!e@eyRd+)uh>3_PJIQ&rTO(+4MUaJ+dk`>>!L`mae;8cN3E??xLR`6loh2DW5iK_vMFgBoe94>e5$Im9O?x(1t{#u=GI z{&B3@9sY=}`%3>pW16s%9=ew#EgXJ^k$EnQ$vBv6of12xbQz0IWmNDsLqv8?6DM@| z^A`|Q4)cW9O02dI-$$lq2r2KDJ^G^5Xrm^p&1Shs^&NJ+H^kWOGo?nt*Lp7$0swhk|;=p2Bnmb`?uO6C{ z5>xY22fSfSkpT}?(ySK5XNY!R{e7&rHj0(&>#5}%;nR(Vj;f(68zt(s* z)>PNnW_>SR5E9z#n%ga|8-vrBsQI>We6Pk(7Ii;|3dg+zp^s9}i6@fDL0~15>*>Uv zsjc!`$6S8|Mr1Gg)4SOXLXGH77A$lfl0g$7W*a;7Ht>IClpC=}_n}F{dbwh8d>aiP z!uP<4wFAf5GnAVT{{|lREF?k`2Rcf9R~?7!j#FUJ!@OfOX-U0m){y6bhu6x8t_aJh zSoEJ`>@kF0TgY6Ka&_V|op)00vtu0>!#7KT`V)E^=PM6(w5l5*v7y*?`Ds+vovF^; zDM}#SB|W_nqCd+HA8Fx#(zdAp{5z_K?8S<$!Pw7lYQ~Z=4_apNR4_bA@x~UBT0ld( zl4mYETlsR^%#g!NMTK%Y9^NY0u~A{LGZdF|V#>XF#(Wp|y$^^v@u7uQ zONSjmo5Ww>XsGbmo}mtR=y4)c6~`N5@}tBaOzVJvR0azG7((XbdEtSDVDMBrF0a5 za_SMdpuQmj*6dP;FTV&wzHNb*_AR|eSJvK7r0CqP&7xlSFF6JJ$8?$jyqbkpJ<#v5 zQ1BShZ{UIorxI6LI=}IHbTdD8$DL_}{J@1Q!td_jI)jR+iMRd$Qcf}FC>vtq9NT~3R|{<(iSHUgBbv=M~3w(51LTq zROu`bl*VWGKGHx}IF+vN6@|t-K&qB!C&Hu)(4aMNh65>)lEGM2xAaCVqCcdm4*4_g zj-nq6&ZJV;$gu$mA_HRAQBg%Ih5{*!@n8t`i*;%k~Z6gOdgkN|d>AzX7SPY%IxW8y6p=FqUHHZhV!RvYUPQ%Y>NvS6bwV8uFnZND{ zzA`|3&#TC?nxH6PZRwjm-^RIL@d}yLYLxTKC;Wo+Zb4do;u8(NKe?uO9-R?l&q4V{ zJHDY6+=VBntINO)$)jwbEUOT-)+ zUHScm9RU6b|BK%wH7oh>>ouEZ^}>{^YRDM;#nQtsB1g>nIy8CYTXso z(m5@oZY787MnR#Gcy~C%2sxdVj%4IA;qIUfIzEyG3i0bGH)n>l+Vf>AD)dA%IQ%z0 zJ9-#Lhv$&fPq9=%Ni66Z&zOgfl>kCJyC8z@X(xR$*QZ}&{GwOSUiv-SL>apdVAl^)Z&Jz36v$Bo)RrDiq9=X18@1Dl(TQm7MU(ThoN9F#x z{;;l%A+dKzDUuBHudJ)L@W0vRYj7?C1VMQY&yn4-pSRTG#(ZDQZdT=s$xaf z!3W}bV+&2tw)Untu8yU>1C`vb0hO&{a0WkBhg!vrh>cr0$ z><1Mn4mbD_UwiL$X}Gd1uM2v+G1NmAL9YNg``57t7P%90F3B+-DPmlW*UwD`Z^ImR zIr)_9&QpvC1Le65Rcj`&QJ#7BPO`LtV$2eggN1|O zSAS{uq0bQTPQDYt{@I*g_$`neK~?#yQ{fa1rMC8m@`7M6827ybN{FY1?e^h`fUv!l zqJBeAmZF9wc%m7rV!U@jHW|v@dEbEzTya3CAve zZ%3{)|1u6VMzMy!9^VCZhU|B`dmUH|@&x7BQvZz;6@Hi*&?$tF6c*+t5&+jM@0h_36D4`i4G4TaN9vs*1|!PerCZgihVg*K%=A zO2V9^M|OmBR7brbS0)2NiCGeVQv&AQ#Kj(u>i%)S@EZeyJTJ*=+7OR0sQ%0+Ts-B=Kx2{M%+I5)r9wWCO%Af)H((52m1+ETlv-j(0)B z7plJj*gXxPwlYBayKvCg=b{?K1rpcc+9jY`Ya=1_m^)+BK9;+tB$# z?1*`pc`wAW6LHa4sM2ta?MjYi=6VOsJ8iM6sNnoM7X?Re!>BN6kBooWuaWDRYpvxi zLiAui0Lwm2g_f`;B`!*@IPcslsjDAAK6w;Kal57CkaI24tVd;Gh0s3pWVsXIcD8}9`QsO zDh7)&UdLUH|MziBAh*$UG`Y@$jboEnsh!-HZ%8(N194cFF;SFQHHx=R0=;>ci-Ouxih5TY zv1SMXLSmv*U!ija4=6I%&zF<^%>A-cjf~dcOfl$TY=iC&>>J!7@==T?{~Uam_l+m7 z^6H4$drQHf&|`ZO>8|qFYbwgeZl1(#{xJN7!Lt9r`p5 zQtSjRJ`?{LPyPXU^7w>qc}sP2+is}Xs)T$V7cx=6o#xj!c=t%W#AYc%_7f`OPq06G zSx$=d^Nv-qiVjB?DE9Z@BZcN&LCwFdD2FCb_tC(B))Jh9t%_4^!>h*XciaWW!&@#P zL0I0&LzpvlJJ^FVK0-a<6b$Tw$I!_Lw@3z?+fQC}d%ig+T^8z?LT>S z)y3J>vsIZrujsGy{8j40g@O;__>|TWx8{_{zTISkPY7qCr(4r%;`%E;w}o6QiHBg( zZ8G9c<)4j4;cQqh$}5zeY3&!k9Y(*Vz{Sm_Etpfdjby}b^@k52dtaSAHxBn*j3U+aRNpUF>KyF7 z#Gy6=JPArqW}h;KHn#873}g22{z)V7{?R&(-4MzFh9%li4dhW~)Y2{sK1q@F$9Xl%B_^XJ;>ULW4}4p2^K7_7xQ zhuu{xD6cja(TS0g#dNLD;?vx5Y)6e$Eg#(9(R)$y^-;EsAY;@E5{OhC>38N=|1zTgy)12Gbt5*ZqbgMXqt)_jb@kh2sh~$3GFQ0fR z;x#>mre0}SRL1M9C-r&SxB zvz;t6X|xuX@|~v{Q|xO(hS~HP6P5MKnmV81T{Sn@G&f{VFQIR>$$dzXEphxq&^~oE zO{(?uUy#c^eP7vfA2vgt_G^B#E*VjiMUcrnrHa`1RhYq zDeuYjDkL9=;zBB-*V-)4c#3>WnnfJJoJ`2b5Z#*Krqw7uwFQqimrRnewnb2~>xjyE zwk+ux!WaJA&NiRM*TT$V;v$%)9bCyL2kPvT2Rs2M`SKgh|3@xt5 zmoHO(TSKH(bXra_M8y9o^%089I;1tX$Ov7G=Y1c&d$x*G!8ZF~mk^EFEa0OO7pFxxA8xhq;-o)1XeHbE=dbaZhfp7+2N@=iB1oN@5(|X z7S$br!o10lBQ%~=QM!tHg%3BSE2$K$XrMh8k>u%6*rtT7HY`(KH!m`L5H(%f2;;xO z>r^&J7c`zlcUBLC>O_!+rc{$5F~9}qy`9A$j-B3^&XFDJgrLJw#%2Iof#c&GeN0{1 zUrKJ7m8|-VWdTMkjiiFbnKVbl7v4jEjPoj}Zn124UAm{V&RsdSKu8R|e?r`g_YIVD zq-*xF2B3zh+HX%j@+#{i0O&^6_n)HU@J$@iUVXeCvF#uQ z$ei-|Ih>j?bGqddpq%s-0ADICu$Cp83r)%Z=A^ z<}Rve;WU4K6r5dSwsA^}Q&zLB?b?(Q9jh=8D4(VCZD;$ikMV0d#JfXl*p=mjxJzlS zmcVi)UCEXA$%(39i{#29dw5nfU4a-4pw9SRzY}t!PL!tV^rd=l2_fwTlume+@gu1P z*+EZK##z`c=zgkyxwH6;Nvb-n&@_2bO2$kvziSkUw;35)8!K1Q6m9+(Q!fs}(bWi= zb-T{Y)S2(2Rk4_yVDH5)7QW;U5mL?;*Vw&8nxXTOT`cdN&|lWGdp_4?Mok+grx`P% zmR~64o#xoo)rop<8u&k=wXPmplY*5@N=<%#Bfp9YPc>q59A@7IvAvY!zW2#uIDN>4 zh?+)-XJmU$9s)^Z`%zYzK8HSZpQ5g7Ok#W=yl&3E<{Uh+H=;A-74Lo`L@S?MCtWDK zr^#;~V$%@FTA58N=L}n0T0MLt5F5_Py z3+8*i7<)#%$%+`awXlI9{}9|YmgSeNv{noSS>h};DQqW_w-UN5A`AgfNTpdbcbw96 zB(Z>R1{6HD%Q&orlki1zVul_U2g7(ZbCIw_3R$G+m|6y28=RLwO$sJyG$sX_dumo%v_!w7&$VdLX_whlX#3ooXvm}b-TO(OPpK&kyvXb^ zo71@hB9oug6_jgrudD(w0M!9PXOC5!P%H*1o^a4ZHD#V42EzG!oySC|Kh#V(kS(UuDo7} z0x3z1^L~e`%7vEYs-RjxU$VS0CRZfwsm7*|+(J$o9o-PyU*_UA!hO_?d_kI?1)M?) z_9(&@{Ai1*s$7+PwvM#M-IxmZp)$lA|8VGc(y}*Idz#9KDN`-`^p>h~RjRyh4NZ<; zw(udfZ!p}DYYVj&OKb|N{(YT0F?ZB38`0wivnp`tYK&4z**NP!hp8i$bl~X0omDpu z_QBOFF|{fV?WbNyop`Gdkyb;+R9|lbqZHk`E3zmd!$PK!h+d30ys<;=j=AZw_8{wU zM=;~Uo*2Ssdo-S6Pi1c%c8~};&Bbq* z9O181Za=NJUZLk0raKAL%_Gh;peYCTn|2=F1`i(}SZh&phrGhjl25lQcQ>hfn|D2= z%Dbere;T(<2dn@6`moRw&&$q_9b>J!j)taBt;8v%TNpEG=3=g)hQWQ{_mJ1`o7f+{ z2osv!i0`@)rrLhWiJ>$`U<<*TDo5LB1a`1MI~`B z^cK3>e;_#*LIJx}KXHfyKFErgqQFY$SEIJZg~`M%k`Ci=bFIaroK?)6yg%*w1%&Pe z%Kh@-W}pkMdrLr-p#px}pzj90oaC@UigkJf(>}KDghC9jjv5^k;6lh41U7PFA=Mv- z`*$D_?#5Z#)_c^Dx(E#UZJEG%rR?N_h|fEIKxQG`S3~b@cvkSxLlUgV{7e2MD5=-Ejr!#5ht723QDqD zniTj{O8f(eEZ1BK7%M}o9SHN0+FsA+2o+yz@6P{r(o=?~(EG+Yu=o;-(7OH^ZpWs5 zmno+$>Fbo6QG^bW89do*Rtg&@mj(VVN_g3w!z9DJj^r?ldZb=KR+nuN*$=o2pTV?@=OH6wgg_xchTF{aA?6*I%H zY`VjwnpuZ7zLN;8eM!@WP~6w`Lnws^-Jj2sfkyhHE{90u86T@B|8RWX-Zr!Y$yMxs zNr;lNJg%aV>9QR{Ut$xUr?+2dy$chO0@_+&eHf-Nthr}~9otEMqM2pujgm~p)b9eQ zv^i!(G`4e2qZ^Cpq#u@(m7%p!34TOgiVQAI0IjjVEXZF+2vS@9wM^f$Ni`~e3 zql$^c1^mLbZ)26q`m~339@BpmMU&3)9P;6UtFMbYV_q#U;fQ$QE7fI2@v_>hm*EL) zS|UA`@971RJoMxw9iStoYdX$O7U!3tb7|%&b)^zn7^K9!kGKbY8`S*8h+gt*o>0s+ zzz^3EgB0;M0K(?3^^YG5w1q);8dhwccTE+s`&B(KWt^0h(`?;0`(_$!7rKTt_8}QF zXnbi%4prO4qlSNKBKmXw+U&{Jz=1aw+U%9PZMgUNp_I97W7wNb|9uWM7$QeiO6Sx} zK42`Bfnx)NyR}W%((dm$aV6v?Yxp3;JALq)gs|T>wm*IAla|pDh8jsIB2vfOPU}B{ z0vZ2UC3#5PU74b|UYh&MvN@&-u<}W+D3sBRP=I+<@K?)90w;tI^N>i*8*k0Y)>TXfY^grDf zLWetf!)2V)Ls%ldLRi`dSdQnc>8n>l+kx-(9d9;n;TceBSzbkFySokgVc+rk9>q~Y-n$Z6e#mWyBs{k(Mfe1yI5{rz6yUJBhuJ;n9yap>XoYS zm}m{+vI_+?3ts@g)vi~iY)WM$%Pr&DTMm~Bhai0ftl&MEvysl)bwrJa?a5-Yneqw|Vj zMmZ_Eo%}Z36n9XxS(YgVs34o#jEwyDkI$26G2p zYJxboO;TRgjGHxeEB-j=W_kxih^r49^<*$dQfx%^SNwQdW(`tm2H_;$Y(~C0n8e9- z98G=D<2+|sHadpz0N`}>J1dg6M(ABQW?kLrrKretKkF*te(q{#@+IG%ZpSKH(@Af_ ze>&-7m_ym5i*92XfBjFk-k;1LAZ&Mw(ErIv{xA2x3jF@hD%1e~`sJ2&wIrN?@o%7S zwb^E)*~ZA|U-us|rL4rtKgzn0d+O)clabGl}F5#&)l9z-JZ|w zkw@;4&;FiA|DMkeWvrCz?$EmkVs<+3wy-T~j$IG`%%(utfy-VG_$L+IA?z6`ZOvn&GKoLO5Aw)nT zM99)lK+{jiLqtGCM95S?Kvh7Zde&QG_QWOH6NgwkOLc1f z2bUQ;h00F0)`i3zdnF{!Co!98P}fX;asP>Uao;}qc%$btHvaE;sQ+q?Z*}*=SX}>i z0KGqe^lw%Du1EFGcx>`KKQPPP9Hio?_>L4uF2JWoL1$8C&qk(Vf-eoRBe!F6##QA- zQ_yH3oYEuwsz7YFb^edzNlS;7*>sCXVJ)ZGLoDR=q&xWErqZWqb-vkH!Wz_zvtkWq zq!#IG57QzCERJCadPnqh(;6=>RrPwqE0Lf-N^S~zHF8B2Q z{mJINDQCVb1@PM!^@DtZ?DxgpQC4|p!(B1?Q^l(uKf1B}CA5w5HysS0gJJ8C z57TwZ;RM1GoHni)`wA|w;A0%zfy5!oOV3#k3 z*;@c$DUhrUtXyj;AToM~k47`=#%3czA?&eGt|MfaCQ0U#BZdhn!#Yc4j#Is%ktY;S zbKR%Ane!6cDI>{Vpk50JLJ{`vIC<0prxFr|)E1-1$x*n2+=6Xc0>jU>ksBFctjxabV_*atagEA{s z%4%L#$xz5t1m%u6VLmjYyJ)2EZ8-`ba}zDmnvj&FA?o&uB-zkuxIaE%B0EDv47(^B zO}#5oX19ugtaCX=+pE&WJKpuyEfh6V5_Us#ha#ohANT6TQ!c7IYv}Q+Sbz0-=x-+U z;7Mbr9R?pps#`F_Kx_fIH;|<=kzs@;0PRuZt@;$R*)Q{V=_SPunwX9uIHkt57TR zK0CJSBUE{!5Emr#%VD;jdqd<>@Ezm(5^%;FweKc<0=QnU@PRDs)zn8Vg#V zI&YvCw$)Lu=ZnXnbAc{iES9JHt8diyq1NE0rwt|ym^1K>W)Z%0XczZQVe`SP-zX<* zg=J1=JI3njX^EHL-d$1fIuc^Y^D0+q$U4GmbFl4@w!zWtLrj zak6jpEnX67Fnsar&$N0kH6aTnQ5mPgQdo7@d8$x|iA?jhr9J{raFz539H+-V$H%Pi!H0_>*Ig^l4g06XgT%q zL@@02wfyiJ=dYPg(QH~Kd5{CBm?HFJ^K@E#=m z3rYUmEch4}ov6MUKV>?;(VA>+T0MDag|a7FTPTSv<?GxdiH{XF%;Khy5s z%F3>i6)0lc*KymzwBW?Z;1e68wP#yc@#ZqHm3Uo*i&|xbuRhYaA2DJ!o4?om7jGME z!{kB7nuLOVR+B}V#U()PL6Jw@?=^@ZmqWS6?I4PzF!GuEFRo_j_M5+@nAVf%@r+~6 z;mN8cF6o=5yX`5MbR-EzP0{eiOo3^CP(GpU3nFszjbGa84`yNo_)wt3s^IT>_J>bKz74qcNz#}2+%jL z&BmnJg(l6Hw=O9bf|S((>!YuP8I zZ50nEg-Q3nOT8&W(mmB>sFT^;prlh(Z?v;vKWA^JmLcU;<7HAA+1W=z#z>Ufyq4zg zmgi|0FFFr&P9G)C=oYHC-_x74Cf)aR8(S|hpJPx2mCxfEYDPz!?$3;vPxCPwV|`>2 zZXL$7dIwS+a%g0iFk3SX1*Ou;MN3kh5Q9WZOLfPmt!k;clGRnm)_V`v!?tzMkt;kB z#yoSl`!YXN_Ne$hqFi{d5QxLPta%Y$P0cn@g8$u&3gR&J`j%P}K&6ZzVxk0b@tB+8b@2qH)xo=O7o&udi@`7?RxrJhL4?o9eecXf5`uHH}8T2;Mj?_KmKz@{w2yfEX} zGrKwhgiBwYDI@eTzACNB)Gpm%G39QNo1-Ozhi~U`WH0TNtSZoJAqNLJ#5t1T}fTu|*=RQn@jcFSb z;kVLqa@KispSlvKJ-Nxt?1g3}B&!)G%5C*8c00qSIW(=JcWx${H!L|ugCNoUOLN>n z4%kUM$wzF@U@zHjGRl?W4Fspd+i_KiSwl!yxme{A?k}oFcD2t}W2UoG!s)-PhRZ{F z@#k--ehzoUNJPgUIrENEFqnJ0I{4jIYc(aqV_oDNg23!THU2jd4USJx(9Ni&$F~yJFXiLYM*TvuUW`3}7 zvkxr&E8$D32ZKg6QrY}EC0|P~#{eGl?T6R3wA&8YlalT`hl#Ze{oJR`t2yp#hYaH# z8!W{;NNxFVFWmtM+?~C?NbuNbBqR}6#t+9B-T{e?n(l6tXxJh5h2g8+G4@KSNlUMAnm*y+SNhpU{Ul-guO zyuzQKl(T3DWJ;!D6ydQ9$j*JX`L>;{6Iv_K{oa((XVs3 z#gA3sAB(LgRgs{(auwe&;VeOus-2eSra(CR^I5eC*g{t+7NU&H^cvvd1*vRegk4g@wFgVMaxi?d@Wr%UqYXf?XQ9;37v-0=Y*V%l*ZX&4mO<$p$!-PK!592`@^;K{K)Da%|5ahvv#3T@w9hHkoxYk#?Ct?;+9=F zt=maj|Mj??on-BF4qA!|RFHsIoC_98&ZI&tDjOIgz49 z9V}#*F{M|=zudx0)g=3_Y04(Q!dH|Px?!g_# zACqj++qB+{mVMQczc}A4`mT_@JVm9=8TW~*>eZ4VW1~!#IcPX6Sm?M;z% zn`)>sNePLD&%HNJa+f7NTOBYT|ef!IAb|q(d!GkE|$Hl!MCUF=#uTv?L#X3z}uj`GeikL0Bhts zSTaQETYA)EY!s^nb)va=jOw~Yo)BRzVdIeuL!q`BCoQ7hhxEjLR}g$IYxZD%!%5r=lSIH`OP-mX4j?9`{owra9U27y%jdI%FxxSOo>PW zY!xb=K?Lp8UOjW-jIhmvmi1K*X?HZXrT)_JWX>LjE(Z6@D*=W_@y^q3_VSP8zugS+ z``*ft>pW{rzYOhmB1Vk)_JVWw(WD#VxVy2BP>QjI~rLEgkv zQ5Hh9T}19iL|4ZavpNV}RnOfIlGa}MEYx`}G`*dygVM8T;Z0Q;KQf|E>x$m%3zH?0ymqosCU?mg&?07FZFJbw?P38pq3&r_F_wqXi{m9(j(Grr$@z}3<-Gt2q zKxXcys3@V1hMU-HS_NZy+|^IES~{4-3}S?m&C{fN=S@f|;Svwx4{NUI=3Fzvh}XIw z9vpi5tN8NuqUXOJvipqv-a{nl@+>^PBdZ^tzQLwFM}r_u7D2VLd0G>P&V$@x?_g!7n%=*#})GYjsbrt7cNvw>$N z@{|Xf#aC!4`jIJ0DwRh~4hF9qd=|?i_knQ=$RppIsn8`@^7EFdgw7CQVClLpWHRIX zCw9cq9mC)m4-J`V*2hboms`C;sid--GRi$}vYu5kd3-2h>>x3<=uwuUu5&2H%}E}g z+mh_^txY`BP^LeN+DSX{bV?!rTyOW*UOjw%{;FV%3B07PUEK=<`K*E4v^fVqk5fXj zcdm0C3ljXJZj|dw0>C{9#H>mtRt8{ix)iFGPln))yvr)v=n506-yVzWZ%8aIBXv8( z1KBe2LsIx0s-u$)ZpTKcKCVMfDe9#+4yM?a8^CB9eYCZ;4!L>K~XFg7Mo}BBQ*{RdR%SmfE-2T&Y?2=4w$7x(oxUSekq6k7;F6 z-M9&{a7YbFbv2r(xZJ2m3`5&B-3~mtU0+t+RY@bsT49M=$iuZqGp7K2Fi^T`bCOY< zo_rEug(h!X3;h{Cb0GJ%%$yMq7i=>u1<{f)MLHr^;|)EWQ@*i7>Wn#M)LX%!^7rHv zon2o~iu43pGf-f4gt|nR#g#5^6Du^V$sEl^*k3pG>xj$+Jq$JqFIV~#(9vn*;;Dww z*YF9iPmxO+Ku+jfsKVYgqH%SO1nQ^D7#M&3$H`0}xeysde=WipGum#oH?6|P< z(+r8*Il%W_KSnu*ct%yGHT`%?YSN6(8jINYvtQAf#8n^|q;!`YW4`6DkB=||HuERv zh`~)N)<%}gG?1IR|AF$kVo59xaGO}&t>+==oVcvF%vGXv3 zWWU0X*nwnwZ=}gk)~TV>QTRsHVq&6iXCHf|KNFv;U@>*m+j_bXcK6OO7W-SYds1}s z2ko7NEFn4UG)h*cSLk=0pl>vDp<`G(E#Fm9k(2oF&HatJVo2p zpQ7!u`r>`0Tpv)j))hwfoluI6Q*0*1h~2059O?QDp5-jB)x`Du_wnsmy&oD0n!nfU z#c?J|`Dl`#dHcvfcHVAZP`ktFsXwpo3|Aml)(Zz$S8|ncNeO~ze4;&(t3O?wf+cWH zx?Q>ypXQy6VUil9qL8|e)qRN# zW5RIeAdN)u4pA}%c6=%&B#ltl9k`D ztbR|GozucWd2m_s+1vIV8=+BYQ$lR+dcAA zHQN|1Dn_66(=18=Y(!rF2jB51GKmi&o^FwY+nF89Hfbv3Q8&N?oEjzQre`KID;Qfsm?y)hUC|` z5W^>Dg8hNzZad@yzZ}cd<6fZ=hw$S;Tupt{LL6;>uX-+9nUSk2Z`MA z45SO3_OS>(^XCUF;DyFptE2I_S{WM`aX9!*Du0JgDMcmhYo{zaE0wXVPcd4p1O~A( z^`5$cvRAxClfd#`^`rurUm@*PKeDs_;+`Mf`pFm?IgV_jN@N_NC3hlT?XAPMt+_+G zQmGY(bBww1jgyoye(|e4UC@U$?y(iyXa}TJQfoM3=esH{A3?_-nXvCktj&^Y9WROb z$iofK$YS9LjI8kvVK8nSQ-^$55K$STZN5OPeB_4jX;UPfI5)fZlG!{99E~OYuH+Bp z!hV#>i?~9EF4Cbbfe{ttB~RZHd3Q;*?`Y=iOjDon=zu2`$10HuO`)a*G(F`eLd-DE zHTCKWj~4CFpgfXBb2V*#qwO;G-9*wgJ{Ik-C-Q) zs7grBBckph5!c)=gsX>1x~4xvl#7@JGNkF5#TBtVI<>M4;o>wH5{CUrW$>qaJ2VHv z2#3mv{5Qt!gNLkbHQ+B5llRk6t#5Oby)I;#DwlAw4>;ddT(ej;B(U-P9gK$P03j5@RRGz{R8^kB^P-4Nj8ZLx`$$UY?4TF zzHt)Tw2C{@PZc9Ul~l}~iBeRRzCDK@v}-ys@MbpgQ|f0fH&iHRR?v{UQ1~N08t98o zAV`u6C7$b~rwqpBHc)7%^UTv9;)vaXG2uPzYZUWnZD^9>HC?O+H2fN5LzVLB;&{=eR>d$brb5Vj;%)Hx;DB_4kYv~3ErR>XZ ziik;5MZRKln9w6=!IBSwPnqd;6Fjx7kH5`>M_bIr=fm%O;T%>Za)H zx2Wudp-DsY@Z)l++$K#lTHBrbE~_8mZrMCplLq4jQI$whjyloSQ;JcZqOVxS+d~Bi z!1*0(lN1HPIV*qNDF)cy4uNvViFA`w*eFUZ?E{dQwd&B04Al0 zyPY!fp|jVDw(kvowJCdPA@^{e9!O^zSA(TcW2_i2NIenugT=(3h56VsT9P=aTbZd1 z+^dhVLz}Shk1XT>x(p0s6*VlZM8Ysv!^t@gh(L>3IBI&+NL8nrxON7-2z~NTNOqxu zD04kmf2~Lh_7_>CxU*L;dD|psie)GIqF$67r|meUe8Obf zMPJ0U3Xx$eHxzTvjLi&mWn^KngYdPT0Ma>X=NPbUibKbl^FfJ~fPJ`|eLCzU0^DX0 zaipK!HgX(GN@xSU=?5PW)R^i$D3Ay{ff&R;F#jCM#_YgHJZ%*Dpz7sp2PdJ;#o4dz zyc;bj)QD=!V++IRgImwf=GDF~gDlE#mc9~!+oW7FEjwR^IEvIEZRA;dm5%4*g3q?8 zLiF=O;)a90aVDt$p`RaxLKsT+ED}4zGEiXWyBVDCJl|MMASqe6jh}#A*m0c$(Fij} zb!`$Kl`A$$(F&|LJ>N$E1>B{t5oFu#%~d4ob_X#Ktp%scg9PSG?_L7Y@-gc7>)!~1 zZ+BeSf4fzf_}h?~lb#%Y>aM=WO{S2&9M+_m$BrnctkxZt!iGf)Bo~igqbhgdVuyh$NY06(4ClglC z>=LD0#mAz{ACpi{zR6{$$|y_PDY!k4Xf4{`;1!Um?<#@ujI5d3(YGwPT z$9%r$I7sXdot|z8(b2?{Sl}lk6HY$C&UU6#Y}p1=g8Pjy9yL@dRkA*ge&sf5H^&Osd?1eA8U*19Khe9Uf5Z-?w zFRBoEg!Z0>|K$Og(f_2A^RWl^9)kG!Z9SQ4EX-VHBV|570#fME_7z+7l$^~KEdw6e<|Ow4@17mBpT=fuakVXX5}0%MC#mAKNmZOpVV1iQ*+iDxop%omJO>c`!WwP8vD=qG!t4whTXVbm%ZI#Rkcru3*4ZT1tXibyW!mib2e`f$Y&t zQq3lKjl}r*0Ns88Yb0bATK_B&a44x#A?zchW8NSwcm%348FgR}q4a(yI~IX+EPYcE zlQEV#k6nXQN)=Ldk^J_f`6^L8PP*yUDkcVX^nDx*%My>yeaLY)Y67}2H?$aKD7Yh$ zkZmAg-!S7C!BFRUSO|Iip`rr18E}2pjES6;(NC;Mrf5FOec$UQO8vkAa59NhpeXI{ za_{Wmem(NeR_opuyQN^Y(Dvb6Y-PT662%V5glWelOABu0;B8#)fkE|4q5WxI_`ZGA zk*sWVGJ8*TT@EO#Zvc_4^M3_9Y%?yESB}Yvx*ayj#%DDu764^1-9qgO;6w{^+oh%y zoA!^gN~ogi_Q+KGvsn0X)d(YOB^aE6iYw;s(r#?6L*y<-KVyYs2Rl2bQ!lRgNFo8e zvaYf5e1V@XJyQBFrhAOtWqo{T44_U|@=M=K$y6(Tn;}i{#4shnds6ilSmM&G0||JU zU&;c=r@m}Z36_|cTZa3?EM1?@y%(AVe(Y#kffzjrRJ_rz#MjY3OBc@>0|?3tuCysO zA5n>hD%W7V6a41-)hh2zZ+5t7Zl&g8p^IKe+4pA(L%HC z5OTbu1?=91AN7yH1YwRZs<+GpLoMEfCn7YloGgl+OzZsCK6{ zTz}zOob?Cxx@k2eKkk(x&;E$j^xALs>&>~i|5#d-K@Y(F7Xlsg}mfHpAs$TP+W z_OY*EL^WJJ*W#E%V%SU7`FboMAD}f#XhMB}daOGcuJPCdchx(#pTQ=ttr93U+)-s2 z(Ha_FgbE($C5S&~kU=}R4*Eq}+hbIpg~#IN`=@4AUr410cN7ffxGPOmhY9U+;KtT! zxrv|VsO9&*WBM)1;&)g&xcJ!(H?vyp#4B>T;$8P~^v1KYm}fsSOP%CJtg$hh=Qh9D zV&q6UnUaC8zXZYEMRS%^XHU&^V$KA-qMv*qLg*X;9jxyb(uIm)XL3br9+HvPNBP1z zNBXkVyp6vfu5I%M11w^nrp%IhahStm80b#pEs}w12kBRF57}%VXEs+9T~rD zZoNENhNjTfeG~`b51OGf%az)X4pEu>=65+o4;2u!v!%5k_e^P?rZrSL_*H5vi$mf} zk|PG9QuazdVot5#iORh@FLfo-y}N*@SG6+i8mMk~t*LgO^D4XzI`gQeha^*3Tan>z z|J|dLp1q-w0RHl~MFtUFhh3&&=zJ66Co6imPM6OIYIP0@NwQ(Y1MLy~qNxEknfWJb zIw6*{Ww8i2oKV6qxjuDpV3PtCb3>*z_OedqSRKx{?AFYf?TQ2^kWETPxyV)q%aw z)PmpcB)ZsGPTrYZv9h@Gtdv!ix}6|@pCKCc?a`p&ZFA3;(L*qtG(@=H3(GA^RCmIul2BF_~QjSc9X<{`MZ`CkNBj#Fg>Fx z8rQ=7b1*dx^GpJ=8tq5KLR|8HOC|pshgtEDqgyt6^awgI8 zUT|qVkn`+b0y23%QltaS2Cok-^{e(r)zOO0Ce~n9^*kFp}jGdRCUHHJlRhVw( zX`Rv`gbjCI2M{65F%|DYl#WRB>lQ(l$$@f_3}KHN3E4{lle7PTtYB490pf93visJp>-wz z`&k?!7?(95pjzEB{})S)GWQZwoMDNpB84P*4YWyl>47%Kk!rC9Go9DOSE7K=$C_!E z11WN$7&J9zrC>){>DuAFq+m@wy41#~m1>(F+@@oDV||FRI{eFB@huR3e=w?fgoao& z_(If-;dT8XgSt^ULHUp`ZA{1Y{XEO9Zo!&gF02j#AvPtwth(%sVC+bx1Kei{UpTI) ziu@0U$3Ju<4OI>jM!vo$nl%}iQNi0kiKR%1%QkN49YWl70FbQ?_0;Fx8RRD%oV7a4 zq#UQfSOjY*!IMV)TpYX}6-cCNmp(I__I<}Mu4wm*L;dJmaKtUST-;Cp2+h|}sY(PtV?$>m&ZM_6)W@tML3G3*13 zeWe*eU8$hDpG0BuI#U>U$dQ=%7!`xn`=~WTyrctBlT+;PPMdzfgTO&?r^m@G?pCN2 zvn(vGyzD7l&9-Ose#5cTBz`%ZBWgQiyzHTHtG^m;Q!B_@5@o?|>W?dV)kUUQ_!hzA zGT_AQ+IQ*Rr-H*$ei!}G#@DHRWH~J7j=-r*v-iGM74f|g6tjnMKg=9Mmx)8G_Dlq) zs8`jWZCH0dIZ-|RE?mpU6^Q2jwYe@{&~s&@#Jwg6YO?-fM2U=LGH8j(YXnd?R$fqH zq$)HB9VLaVT}uM;`a{mGxP`zDXan{^!*=c$D!PXS3NXp$sVvAkWFLvKXWf%5s~55i zt@7trp$89Q{lWD8#OwFYi4I@ghkyXthgSQGH(WP~t;(SIhL!=o;id(yq~RvK^`|hm zHA{tg`7Qak%UhT#adk^yQj|_39=H%3M5i3A=R~^|9deZYlPbZ9_HxAov&!e)zgWm~ z$LmiPm?EhS=%#u>z#$ny&8LyAER-$hSQNyv_rCd^YAf6yOntBPLB;JmQg)LWgx6HBxbPNJn{(?} zOMA0sw1qa!HZJ-2#wR+o-Yw{G5cpwfz%_8Ro|&YIa3Ym);(%zmSQ*v_WjZHR9vN46 z7<{O(-rTKl&YyPJ8UhGM^cPTPs8gDKY~Swd%gXs}(*<5h+sqXe2paMWQ>?k7_IeS! zQoO;<>4RUITLYQe3E^D#E(LBpi0p}rXc%mwS{(aqJ^Ea;kVh;jloib8oV|Xsodxq= zWJoQb9Z1hE&SZ3momG1|gv)TQ=9`eHcB*b(Lzi5}2+k)K5>Nd7e{wSA+=aw)WG&_fh_>Wh{4m^1tdq)dkYd(Js31T{Ipi9?FdDCk zyWa}vEK{lGsU)kyZyL&Q#rMu}W*OhBO_~X5F(pKDHX=v!K)Ci6Fb|tZM5(@065#n_ zo~C<6;oihzpg%am(A_#5|8%9(4sL0?K(3RR4v!&_G>Ny%`GTqe|a#V?Ev>)IRQ&BAF!*QZ$j2A7^4wqrYR!|0;_pDcM_=t}s5qbV)(G zg>CcA|Bk|@ca4WNDgwEmyRhPPoPq7C_?kA}U#go3sHT_GpM8jtDHno5g`vnBS;Mld zY-G%RObm7E%PoQ?0|&Y3{uk0Bq1y(7_{VFZ9=0ivaHCD4WS5Zskvn-*o#uNjVmnrA z-i$%ODY@UranDVHU!I2HBs-u=n?<67fpnb*|7k=3=wbcD-z->(evmELGG*_O;L(=U zHV>>;dIRRYJ6ywB{7yWu2lb`~^|MkooJrnW+(j8pEN6UM9GICTvO%Id=Q6}h$9}OS zCB9%%Ioo+ZjO)-@S~AWyC5w;oJ(v+M*-@>Oicm}Gx$;?HOSLGS(fzxV_M@I;M|8~b z_8Vr72q1AZkRRI)xDvF*a_1x4)M7$brmnbtFK=Q-5p717HWPiq6RfDXDRLTh)D>bu zguZoxkG6jYeD@ez?Eh4U%aL5WhLniS=7w47{=C&?yX>O$*_DDK$NbBrSa?_T*dU4A zjkDno%RY)VS%$`jz;oTB8^fY;BJjRY;)lgY+7Zg&I2%w`8Yb54FZtb`RpF9;NMOOOJY7;VSS}b$EEfys*GH4)^aRpQ}8??`~et=MCen>XS4!8G!%0; z!2iG=-y}IaDjZIq;=Rw>;G#nn|9a8@Z%;6_bC3vE3tX%{CT8&vk{N&fIC-HHc#=$1 zJym~wD}06?Yl#*~Lgu!+(G*7zmLJINqtNqvzr4U$^Ad_3wWnZ=-%D~qozQKb`V-+s zgdsfc4k#P~C=6Gauz0RX8)xAMheel85^!@CPnlCc2>r`!3%ki#K!3<%iomEyvb(kZ zv|s{Gd#&f86YREzm|u2YK=a&nrbZYByxA#2fTN4dEKGI+%yy3L<0~ey#Cn=t!=&|m8jJyRW$=N zS<#X!(HiJK*HI8vL?rK0C9(BihFbDgz$nq47D!t z`(v`!2dGc z|ET-s&EK2<{U0Fz>j=n+D`@`Tc7OZk_ZjZr)erawg@5*q{}>nkBk|^q@IM~@v+Nsq W5+wM43j9O<&*cw+KLq}@3H%?~ny$kD literal 0 HcmV?d00001 diff --git a/crates/guara-core/tests/fixtures/vdisk/disk.raw b/crates/guara-core/tests/fixtures/vdisk/disk.raw new file mode 100644 index 0000000000000000000000000000000000000000..41d6312f88a48c3db0e274f4a06958a386ee2c38 GIT binary patch literal 1048576 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 z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sHf&ZgGBgYuh)8DQJriuUYKFz7#LtT2`oBh%D zMmeT9pKs5kpahMd+GIM#oho(x@>Qr;UjYr@R-t{f_r*o`UmRv%AFBefjCW=`;knz_ z-)K(dv(r`8T+}g)9@oq<=<9X$t3`TO7X8>%`l*(W*CJ|Q7R&55#>!)OBh}pcb_XX> z=`zZA>HT1*1aWpN5`IZ)hbmU9qq-{2D1x*GQysX0Z!qZg60_^&rA|6O707qbkjQiutvsg* zpmddN$bXqhO2VWRZB)?JZw#U{na$f)A@KsiGF0K|EXX-4T|pV-K1aG!;zhgiRVTNZluKIX&sid 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

c4&V83gAc$|~& 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

Dtr7@fJhGSE;+a2VWJ=QKcN8L$g6aw7gDJk&1zQ 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

Z(VY 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

WIAypH{Rt03ctx6NXe6m{xK}LET37~ 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 z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa 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 F{y+L;&dC4( literal 0 HcmV?d00001 diff --git a/crates/guara-core/tests/fixtures/vdisk/disk.vhd b/crates/guara-core/tests/fixtures/vdisk/disk.vhd new file mode 100644 index 0000000000000000000000000000000000000000..9dc5fc3a01abc9c3e6007bc48130431f5c37c7d2 GIT binary patch literal 2100224 zcmeF%5NRptZV4#?rKB6_?i6WI8l<~Hx8?tS*dJ~O-T&OH0uop)w;*38M#!pzOa3jqNE2?6mx>i;ZA2s{qtv>v8TUI^$2 z2)Z^rcK_Lo|6kqzJJO&K{6~#^cXu*^K`Bff=GdzmFLQ>1BR0(SUtdA^A0S}n<@)-S zi>t-mf0h4}G8)2v?FB>xIs}BfyEBjf0aJk#K>!5)`vNHc{UI>o{}qA%``?H7|EEBa z>L?i#cRRJiefE{v2fm#1G!ibfpUIs`Wm9IAM6(U}Ou8P^(b(KBd^p%?O%F8idz5}t zvz5#wI;&lydNoJ%@I!UO?XL%1(I@n@Ih%=tb=Z4N&qc0joRXyjJ`dkM(%Bl1lV6IP zZtn9?WqqOQ;fZ!(7?FUaJlk0yN%?E|^VkUg-*MVk47O`pg4Gm!2&%koxQwSE?I?q+%Y@!q}o<1n+@&HA=Suld}L z%qy+W5&qP&i49qvy<910AKf2k)6kW=r+T1#(x5Jbh0dq2VrG9Y$o`#gaoDU3ZPV{L zX;sWMLnIYF#S<~w;&TD&z*n)vJU{QztruIy{yYl^v)YoM5g%U9WAa^Ovdh!o#Jt(tiwP2wY{89{Dfm78UgviUN)4l{@l9rM+x|E9q5%}BPRdyR#{L>;9x zI%CL^78P56g5P`6U884jHW4G*N{jpna-2RIB2@IVp2k@QB5_7?D2)-1V5et#vZ;S6 zzEMe3CRtR#aA(6KmTlqh`ALrHe-(-N9}7f(63iUwW#h4X-T&}UGO5MGr)43TvS@#4 zFW&GtU8N-L9~_8U=CYk&r2Kxk{btC{j+s+2qD3ZNsLkW{VgyG6@!$4DhT=?ZPo7vA zLUGk+F>|z(;4b=+PY+ubW60w9D3VkHqgL}?buZosUN3)4QGK*N0=4X)WDQoPjnUSU0jQ#BUg0bz}V(;F18f@ z{K*vp)9~R|;1d^h)hEB%h!7+_?`KK{tqSolrkf6hyC9%u?8fE!oq7e_o6M%dHoKd9 z6zVqL>2^&}HPF@V&1iBTGV!eHyJQN)I+dOM;mHJSJnEqf+Qk8 zHVu&;$5Y_+U@&OuTISXeB~#U_q+qv|#bQ_^;43}B-(t-Le#S^P+sAWvn|hwIGrL~m z@88G2=?V$A_z__2@1>StQbIo(ao>L^xjj9{FNDV*UPPNWPt{!`yJJa zB-SDKtx-$9bs6P8w8p{-_6$Yt$LSf&HuK>LYvh$@--S6R+IF?1 z(J2%^b9Cw|*C%S~GCUdhXOSUEa-K&y#IET)VSZxhL_GFvpjkpCz?ArYk?5yiS##Ne z^Pf64f4sy-ygKmO{QdG|On^bEd8wUqorp-9^#coKuN*GDpqb3SWNl~qhG31Nm|sdE ze{3VX3%Up`48Lf`mGnH16eer=$sat@71`6F+*0;v-TehwYH-d61OjK3l;xQ=GMOtk zQfx}Zrc8m4E>jt@*6pVnvgm#)+mGp#qsJprsTww}1GN!IXmKWty)~%$(aaU6ET{Ez z=+eo~kb71S9{tpJcocrJlxAlqr~)6sZZb0F*5F|XSV(DLtSNj zTp;jQx2 z9g#V5ChM*uSS3>;)&JxEXLM5+u94{Aai=Z#=pTQ{NAB@a_U|}dHklENx_zFzk_7c7 z>f1%n_kV0POZXmI<{2`oY)^F@t(D(CSSl+z)cnw5;d-Wqpd#Su^>|&S+Tt zBUNxr{}?SA^Xyz>bH6OCB}3NA(0R82?3#Z}!h9{ByC$ z)~c2{NX=HPP>YUg$M`;oSIN`(XPuhu7ah(tiyH@)A0ncWvz`hk*VN~SO8)}xw2?In z4{uWsx))}d4O;GDk(P0vUnmhcOiNaAw^yIoC9c$b528qU*L3}*{B5oEwP=}Xe!3Jp z(bxp}So#xW(pRT6Jx^KfiGJ(z8W7I$qID?bgk>1b5for8QQi`X&P{AGpbx2^PVuoG z+pD54AfbqJIEhOiW5)Vz8;z8ivc}DJ)S=k5eg&Te1ArqtoStMu8!@Z-_kROdi2011Z8lSy@}5Ab6DY- zm5IG6mqAKv^B0u>lIw1PuKh>qd3d$)Slk5G7Y^a^3y(KtLhe^t8uYT>qaf(~eM$FO zj5D;rlVikiOQX}vS?_*mBh5XsuyZP2<$NTIv^DM9bhInlqJ z$wmblw-ai0A${Cr6#M93*iZZJ$;~FNES4XKi=hr*ZV(>kW3zC~eV+}!2JV-nZzT?{ z;|0aVC*4?$1VLN!bCL#0wYjTVqd-9I+pjG>B=GjpWo?p4M$-pRDqn1xm z@xSOq$5d);4TkzP+M%_kC$8!c%TsZ zu5TmVC{ua0*Mp<1$gkLX0Tq`l^fo*+T486&5RwhC7a zR(zqC_}<_@^y)CN)_av84yRh(SDMQ_T5A2!N28`1oaCCiVqhd&3mYUf_5mkKsGv=+{IOM4C$$ znd*H+xi8&rLsse$gp!EK`~~k9*wwPnj5x=0*3Yk3|D?28l)5q@3D?*13J;`t-ds1y zWtA&0cX{sZi@YJ*kS?p}TP`~PTzzlCMmPnn<nKVmD|T~r@`L{pYF*YQ_Az2=^Y z^A_9Fu9+6!wb5{4Hv=mn=U{G=pewiEu0oH#GOfu9^X(4nnx1mWcT-PzlXVfJJM5;5 z$t|#32{%1&uSN|K_v!k0MbgOou|$Z#FQmzI6KhQv>r#*@%t$4rPbuil20BiS>g72; zA+zD|sm9ibJ9A5^W3CK|{qvT?vcsXK56Bhg@gX-)7} zWX!B?^>3J{ps6hS+u`R`uPSGQyfd*mn(>@oDI+_$n&}nG%gn~ZkBbZ!1^Tg}*xGNr zv7E@pwk#8P%zde)$yk`G<&aFG(Tncc7na~&OjPPqPm{7&+>C|pqv7U%pqegy#)YYF zr^MOZ`n^`I%suQ3KW8VdHAW^F<&?Ko)oq;fo~$^HwP9Gh$_veV4Swr)4z-_l?Tc`q zpwo{x(75${>v6#g!ire&^=Ps#o{vkrb9{CdC6}JSQHFF8s9EsSp2Dt$^oQY!LK=>c zDvE4|YUAVQ`=2?dt3FrYds(61m-ATS$0Ez87ZkgcTSR>6@>Hnl_F=uF3)9;d=#g(8 zkeHKwZH+=LCf-RXn|w3&J%4sUb!hOL5|U3yudjs&I|2Db@p|4bgp;G1KCj*;x{;_t zMwiHllln7fMfx`D=j}dvYP&B;3j13Z#lNWq_3*WQ%=pO>Gn%p~w0)+pf-K#B<=t7` zAB<^<5JvqnE2b#KH}VJPHHVed_mnP@^`3U()UQjSjXs0Yrd@Q_rHm|_eIwJixKH-> zR;N#1(64>|Cx_x;IZpJxY-m@M)A=Df-z|sZ4wYraIn|89S90aTidV?SF%j$^213$C z=P0r>1N&A(v#ew&Y`gcb6x*vUe^GouVfa==81wqaJ4?Hri4ALOYJ(LCa(TvE19a^> z=lAv+$~L?Q+*X|A(=MUw^Xk;H#2TCLJqy%w!ipVKJ%;g1`qbaKa9QlD7%i2L3*T=P zw_{4Vs>i(Lvb>1TwZ z>BfiMS}o5x%aHzLs)Tb3_=u?8MvE37`fCw~wp%2Av6k}j;YJsrys~p=*Hw$en;#K; zC&uRF=|}6&RLMi^sGnKGwr7Z%Klv4(!~dy{YOR8`#p^N##6S0MOCQi#khf2A)oWef z%7tZ89%!!&ri(BHd-z!V_P!<`9Sxdm?LqI(WmHg)m9yshLP;M0u!xa6a;;K|DB*l-X6K&8RoK$sMOZ19-6!BHcV>K z-mP5K-vq_y^2pIjCZxl9@xJeH=f1M_UAM#)Y2J|4DOl2KW$WfrrVX?hzs)(dDE#r| zNqFl>!QgR}koERAjXV<7xTDF3F~hB+$>L$#XvA4fEs=f?9#08oYrhcvGEzM@d{^0E ztTdG@>rh2M#enFw{KX+gM%CFzB7vYkS!N)H;jM#94tEPn3pS&8u@mBNh0Pe6O?;w5 z!E=}Q)n)EZwh4GHdiUPUchkji2#tOE=1SF78pL=eyR@_Os`{1C7wrVIhZsLB%p}TE7&(9-ix%O*~f%542n9tF%qUdcuosT=xu*-cvZcBvw2V~>E zuSupNh}8};|L{LHR?;dG=tpG4V|z%M^7}KgEspVTTXEY(LH0&&b{}4jj+l&`)Th@K zrpPSJB*G4ZzrNbBVAJ5qEm0Y~Uk{NDPOraL+|RAGu60rz6Nom2RqgSy6v3y4MU$WK z!+d2so%nA}drJSW9QIDhXyHquFMjAG4hL3;-s7|jQ+&WMocWNB0iCIpSyAXZX8R>? zNapA_y$$Z&nj#y#Ay)z0hKe}US4cev}dp*$ZdmMpG&ePlJm4J8r<5EO$ z_aE1U=*1sBkA*c_(N_#nEgMHZRn&~m=Z-ysG|N;zx_S1ztY?vjyE4o_^LcFITNuPn z|Arc%;vC_7-YK*x4;2!37`kEnezfgGnDj%zH1mTc{Wy*`TFbd7{aN=vdq>kFtDIla zu7&ttU(`%tcWe3}sE6&G4$6o7ip9*R$jcQ{>v(?GdGzyJu#4)OuiO-?{1_>W$@=nh zOg-r$n|^nlrmM`s{RSc4lkK5Q)W`NEC>y8M1_#BSOB}Y}#$`P_Tl#L=q?{e2gb3v( z<{lpHlz*&U&C~yjsX5Xq^3FQYyfY(2i++dH0)6W3y$48oY=KC6?)s75m^i|$92P1^ z6-@O7?`Hmll~b`sYDIF=QAEg;R{v8pp-}rin2O<^%XrL9ulnlep$FITiaeUBS z*m*nuY_@ANkAnXfdz|cjX}SY~^as_eY|10t6!^(<0*rZDU!VKv4J}l)O8EU2;S3u* zaWzUl7_pKz`zKHpa4+OYrSOAZwaF|Mf=4ZC2+{o#xBRH~jPAyf-b6t+v`K#oUDfR1 z;=a{vS)WR(TD<}VvR_q4dk)ntfpom0CAhe5os0~(6c&5qxo5pOM+LRHjRFtOH)qh? zY;9XxB?$JGaby;`j8Z=GI#a)HUw+p2aK@@6qty5xs#34EA%;*ZC6z6<+BDv6$^HC9V@^2TexX{`?#8!qv^EC zrf8Zck!m#aXYJx7_SoWB`MD=k*16h@llNwmkVpvlpA$)Q(2sX|CIA>eWbb0VNKV6;qr%n34mH*Mq>v{FY9;qZhqEh23hV>t*$|CFZ`voL+S-zfF;g$8!M_V0_ z39r)~=)>YVZ5HBw<&U3;k}9WC$~5)_h7oL>;j%v>aNIw7lu~0PCuSU8sjcO5;t~`_ z>#UhUH?U#PGjsHTX24_ruX&iJSpI~L{L#_%n+~4aQmq>9jy@rUyM(gAmmlusTmP0w z{MFg|*FwL=56f4VtTJ4PE(Z^0y9Q-mn;1@`z4DANrFXjU&>`0T`^iUuZd8Ri9} zpDwmx<5DgRYIe2DHg|?7YCTg`5tPu#d3-yyk529NUBMg4_oFY@+0bIeDX}y8PoMh+ z77xN%%Q&i7zGpLS`m5_@Ef)(cYLniIKch}0svzTgHSyftZaHj+)8`P;Aw{&3JCM-qD>%Dl(j}O5qrhG7A;@P&&V<*KPkAtNG){ zOGFvYB`@`G5#c^AXGAsPCbq2nb@N>7^GeC?Cg(UQ?AawFlJ~Kqo86~@Jt^!;FJo=JErfTj-@|^kyHN$6(@wEPB zgnE<<^QNlZVnT1%K8Iipe=_bv?Gi35mn1N;!SZ;|W9jR8TqsUh%(*M>ZNHW~(~9mU zQa0xM-LKrY_kQM^qd$jelzn?{`bR?={NZbyxqJ4A3|yQ>9Z1WQzf$Tup7UM{ccs|9 z9%`TSi?XiU(gT8T?obHDd z*>geJn4Ant=k)@~w(Biz8i7anPoo~Zz{YT2W8d*HwE9qmD^uA;&xkEXuJJA|o!xpZ z9*HK&Et~UPseixcm-*}X=m6QQQBoIfr?rl~`U~8T<8~T#w-e9Q=8cZ+ECL(3BV+5u z|0eV}<*g!Qgvd+kzT;jwTwOKcRiD&T$#-5Eic{e=e5HA6x^}^XVYzXiZ^bFgO|Pzt z{}27MY_(us8gh$38@7;O_J}LPAcXWimoC34VHXtP(kDOvVY}Kj5Ple%9Cpc_VOm=~ zjd}U?t3A2np1&wd#}W!!*yS_RBboFSYo!syRP6rsVvkA&DKeHMlGH3M5l)75oQ{{H z)8eB0>6aS=0xNEPmW6+MN8$vDw<4_6);`6ys_D+Fy!95xn0Z97k-0|4_hcdiv!_k+ zgaZRt)%g*p8KZp4%vzA|2eQZCvZ#f47wH`1Zc~g`u@Zh2r^m2y-&DJI2s%5()P=-A={81up^kGDKD>lebu1nPqOWZ08Ije{#;Xq?u zfUADoK+~29nRA>~GGK?|+qMYa=W0ve)w-QlsX>N!vkC7+9af7s5={PP_Hl@A(`_t- z-h_?vc|2Qwh5Wa_rbmKpSUr1ED!F*`F!@YDF9c%>C+4=>VFBxK(wvLKIj6^Jx@%{- z{nHcI2id}#Qw_7aJ`1HmgL&7R_wQ^dHK^*+SRB3Y($>E{B&OH1o$r1j4X0L*I++Rtv7wDHaTY39-k&YTMgM}dW&AY62;+nY#gVVcGS^qE|uYdpob8qRJhP!TRQ;+#m6Ve)D zwwQX+3l;sxDm{{!P8CNif2uy))?)p;va}H0b>Xd4;d_N; z*=^%7bd<;7D)so_CP6l9K)`i&ZvQpIMrr>@hq%_ZLey?eK(yj1*&F2RIZEl$g*k?0 zpVr~03*lX9oNE|G!lO4^`eN;bKIp0xNe4yLUcOr)M;k*Tp2qFM^}EV6^NtTTPNaEJ z=Dr1ryRX$a6?3i`meH4B3I=uW{>m%W|6=2dVMR@xP zY}+xrKXG^A`5{!il6R^#e*CPcZ_9}H@y~01Cf`me)~Vy;Uit60#{0?K8l_z>-T|A# zH>*n4Znb6fj9H?m278AHUl<9OO>iZxYNv|rnoT3DkOB*-3DeP^;C!0<@e$*vBH^?B z4^f9$$<_6k3{2}tGeUnj#onNO;_@1G7Ar=W)<$7{;pwVhTs=%vw<2|Gk%??oIc2l$ zkwaWHLCpEtECRloJNA`fUXoZS9qv?E9|2|3GPY2Iie zhqd?HoFj(&70XRWw3HM*#mu=z^n7&u+vZ$Od`A?i!01))0}S&tW)aBQ3c&6-B%2=Qh4ZPlq2KH59PFro+VLe#GDDJ6GL3`dy18-P%$6^P0!f zku&4f!ql6L)yNx?&D&<&BdzQ-{;P9lM%^D9^=GkFL$bdy+1nFT8Vd@iu8~w^Y&u-W z$_Ax>5P4M)Dluet&s-(;bXdiDI$uP;ycDrJVxA6R6y^PR?Q+a=))A_DD@m?pb*t*~ zC+ZOS$>#{KM1gnYLE1j@yRt_pigvX*Nfi0}58Q`Bw$($0bR*V0F zcFs-D`d!n7-_47xh@E+;iHAUv=VY^ltAt%_OrVm&D}t=NQR2k!O4Pwo8c7xv^`U-5 zq@56Vr4O=!`5d7zuk%ZC7J=lT-m#CT_&yJQQg^KE_kTB_C_F(^!3zIycgU4294dX! zW$@1DV`;ElMpr-%BMxqQ<$6S#W^bE2$1b0UQz(AM)y3QqW@7^WKIP>IVqud7JLYL~ zpeFk;UUxqq3E{v`%%>!^5**s5>~HobtCb9!kwxj&_)84SRQ5?775SNaTmC&N)Kj`H z2}yU}jh)MO(|neC-qyzueMS?NCBVjgp;Ab;_}A8u=~yb~o$$f6)BtuvKT#-Sr^c0U z!Vh7MsP`@*sFR(o52LPDwjWS7Gbz*FhPlvIV^_sm@$)pNFpKZ|wZ&5SKXCXopVQe^ zVvoXn&1}+kf^KF@TkuS}Q?AM6@MYD5;=h(De`zRa_e&n?HxIQxuv^=W{iA53%r>!1 zLi1IgR5^U^$^Oc0$(MNAS27J|bwqV-2Iv|EIUV~nmlw<{RSPKw^U`W}h~u}y{V)^x`0Fxu>x%lXPt>ouA~eR8t44IP)wM>S3* z;hxClSXW+bTju84zc1M^hBO8t3E%|ME%fyU)qw1fJ)OW5?R8& z`2*Xrblrx~HIwcQz1K5cr$UL><`p=_3>~fPElG_&6A=oo=@=?etfk0jXH4p0VV5?V z9tUlRZ=z6yZjMqmnRIWZGb07Zuoy!E@y!lKigd>A9K&xks$w4+AaA6u+B6)}K1>SP zQNd4}lnPzx+O9(tWJije5_lMBn$Jwk=3nh5Rs7?HESK*o3p$C&wrrGCZ63u?*t?v$ zJTXIo2r5QvsREGQax8>9x$HYd}77Ni2@t`^dlvWdtmDibsjxl^?o2 zGYIr$B6?(RqJN(~NsU26fxSP22O+7F_&$%MMNgc)u)5^^gHR0|i(ulD)}JU^Ez&c; zukcN7r)(=m@SJlUf4NAqIr0qs)VbxV6T&l`$W)e9mU+b)8FHC9&XGoimd}(h%lc5H z##Z^o>sh4+gZ>2smRVYC5gB9Q^dcWTK~u8{BCbDOWCkqExFbTo&A~W_p{wb=R3n^o zG6G}qpHcg%E&V(&O!adbMX@+}8W^_j5tx(|sGzc1&Xn( zGv_&jjacsgkZ!a$cW%1`-S-^IDBnj9C!D@#B<*@OD&6kdtGkiNh>Iz-nsY9zxa`rk z&p0P@tcsPOprcC6kc#~zy)Yl~9an05sq;viv&F*tQLgHdGxvDJ_m*zOAp_)^oF)YI z``N!!Fj`QmE;-fDH0N(VoL>B?ukayZXI&>HWfo zxW6Rbtn->b-W@3ii`ixH^3$hH|JK>$_8PTGYg$8=bh-Y!*Fh4SMu;EdjmRj9BU)bd znBza3{*E&HwbA>VK8nVa%pZqbvmk-{0-0~}^?oMPbus5Rsk|eZzvGuBE2yB4QRmV8 z@{NkUkzgn9_H)KWZEfZ9xE*Vg$=T~fK|hg86CdYukId5ek>6IkSDYi}8J83$pYI}W zf)dFCuUj87iSiu%n&d0A;n?O2-lD*8H`&tQln`;CVlLO}e|?WvPCxHg^*&l~J0~@g z>bTCnmPipJo5J~1k+N0%E15p>5FY#xYlY`Ic8%_AEBx(=DN1wEWU0)ul!S6FJc)k)D@Frr{7nPljP2O&Y2bW_2L(0=2@B*$!q+15!E`4 zA+)iFn<6ZvA}!{>gtQfsPv%*>zDc(~)cK`&!c$J++x`1Y}Bvf6Xn?wqQK6( zFF&s-zCZe0Xr8b5Ff6~$tdKTL_C5^PhrtaXo zEY`_b&~j7imq|onDYT8V!}WJ~deqT#LrFm^_O^+0p4lF3g2#Pn@M! zh9z?OE>l#qDgk{jtw?JdMn{{IS`z<-9Hrx#uA{e!a#d0y2$5FCvb!vtKFB%bM5f;A zZU_{Kk#!i}ty!+#iq`3hi4E6hTFxjy5ZzA3ieKw^mzE?@Wylv{I-cj)frx@^Ay{2*Zl2Q73D}nkL{yMdX=ZE3R)Ik4KRLh?DXViB+@NSh)bjE znz`>0h_C13DO&7 z4W7U^wNqn^+Eh-|h)KyfQ#BVWPF0*iyNrL@{$6`!HQ#t-roNnB&|8)a{ma2;7D#|c^b|JL9TYxhJN;k!`3%=Maa zYGTl+NDn?zLKXKE${nyQ9BNp-T9SxMY|(ZMHG3fNzCd^FMyk!XR_0@_ua@@$qk);z zr68T#IjY~6%~+#4XSVyZ87q>f1#U!EKY2Jxt9*Nw-!`Ys8;PVR?Ch^6$!D=Ajg7h^ z#1F)gmM!9ps8QZv#&Un?(F~M1Y_b*Ns1~1A<1^WJIQE_y8L;2COM02>!9Vyjcx>>? zO4aYr&aP^E$FBuW1@&sf*e6Q+S+?wJ1|3< zQMv8>69l_~aFY$BNOuYGU&{^2Q&dAmlADn%w>iFBNIdLbte+_fZK_umbUE^+^uKu! zQL*zqj;hy^h&iO|<$paf;`v5vv718W(A6!ZhKXIF73Zl&b=EuS75@PDX)nbEKgR{V z?k_F;itHt!;n$ za)G*s?23O24bO`?DQULjht*7kZWJvd%XAS0Z(_$KwQ2A$a|r~Aa5x8v?bbZHBBfca zY}dDg#3nzQPA@4;Vb6&4Zr^u~nL~3{MKiEoH%mGnuJO|xP)au_;ioYz4QnKB&!qJ+ z{4-`=T`3vkxy0ZRT6)hbo@S%Z@*YyX5#uzCPa>I~Y?M}TT%*=an}TsLyIUwxemp^S z_CDU!$dcVZUVL(+a-w?<->%Wk9!Sgoq|z{L`>R&YSoty(OFr>Czk;4Um**`~V|cm! z+Ij|(^B9?cqNpfif@ZN7o8a)frR+EHrl=N&^s%q4k#BLEnP_qD+jQ5mIB=HUSIH6f zzyH#uG>Yu1_-CZZtbzQ0oMb}M&$shj8h^{Iz3_WHoY}vl=PEHb@$}x``FX31Guo_B z%X-&LapC7&2>O2LrMlZxYM2qhT4TWh*l&vi#V1O+`OxM58B({t_qVlS1mas1&x1_7(NABw)Dc%lLuEO}{0ZyRPKwx80;a5# zbOQB4Gp1$+b_r|pMJd<+{`hl^MblQ6AoDZmP)du6`Lb}j_U+mZ;|cpyMGT5Q?rjA5 zLfq;ha*?NL)>@-2fr0k6hSuInwmz;igx>4wK7XQ?W}TkbQxtNZBH4$M=lrqE8eb@+ ztb1mlWII*%iBH>-^Y883twQ@~VvW|0lyFuHgP>zi;hWUN+{vZ6J7c~7a;-P0!*}SgC)7FyIsA!YSnX?;-Y-l`8_{){ z9{pqPsqrX3)xzHKD4U=UUMcq|#S`kq_7|J!%$RMWyfNWtUD>5*g1|Dx^gqT8!#-koF;Q5JF5^Giv+ zHhas0e%mqb<8lykNoN01=Y|ZOkn{ESf>^@ayM2j(PdS)6PWz+*MZf%8Z}Yz8HC#PQ z9})?~XxnWT!Q!2llnncd7@_v1xPXAe%H`%$xgv|rhhUpB$%?kV(OsYFMB9`5qj`x0 zyLJa-Zm*5>O256Q3ui|9r5mMbKO3p5cEGsRV~jQ+Y$jJ|X?k8qP%A9rb<#jbzFE5H zUaR+ce9G{uK zMelj3a|DF0r4#ccHXek9<9QL?I~NJy^jya38R)!?-_v+F8ECSh#gdVStt$Hn-(Jcp zq45DOA-epSK>hJnF^U%ICuWjasn}EZ-DXs$C}U1abS5D?`9AM-moT)M2Ck!d%(KmV zrbYhesB5tzX;DGK&X<&BX=?K+^b4=H=O51Qh;_XjXppAZT7@C{J{rZgXH?HEbGfxttYtoQkBBlIv5S=a);HQ3yZF9motIM;gwAO>7{!BcYF%jX z4E+~{kF6pNycyt|`axT##G!yvU%xAEVj`2KRVp01#9Okat=*FwA=J!g`B z*>pvfa!F@m5Ay{Pi_Ga<;FI?%lz()jpMBqdigrWM;dc9GFNpHXu~W@eMV`K>4xc^G z0}kHi*VTW%% z75y2*y)<|Q(?O8An#%5_%7>%I)hMe+-vh}W8NZVXjXpGcHh%SnqW*Fm|8sAQ0%3O8 z5>|%h8;PB)=Hs3aNxSohPd5DpQr|9~6JiQJwDe?e)!NVwxMF=w{BFN6pPJs2=d;Oj zUAty7!E57J0ZjfvlnM`?DA8bGA)?)>u#kPFC^XgQCu&uqk~WXpR>Bfl9vq`ftMI`d zxbD-T`@M6bpoUJPp!XmlQGnLQ-FVVG%11?D9)*8m-^32*%iUoYt>ZsRD~nr`fprbz z^i0N%e1T(|1(IzAml^5|1IL4kSz4|8ljZ%()rWxxe`X@}U3JnLTgNV1q-7?&2oAO` z!uAKPvKZtS+bFP}ERvrdExdWqy3-JJpOU`ubIhM%6&JH&O5#1gjC8 zkR9Y-Z6@PZJLwea7ks2=={kxQ+KtQ}QV-4%JyC#D3=P}b`VlBjSO%X`1C{Wvc* z+a=R{y~H`%p8Al%NypQ<#LH9TQ;63HQDI>evTVp{X7{W4hsRW7UJ4Wb3 z80hVImx?01Mu+zA@bV1^4zg)#J;z1qwNEvv3NvWZmxS>s$Ai78app>UbhsYj&lWja zVTfKH>!*EtTiDGNS8F2t=gW(ZDGiGgQc29;>-qna-t<7OAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0{?#rG;)4Mdi2Z9&@|~E-=m!BU9`nFz1i<2)dN+ll~FxaXH+3N!^sZ3pqH5RyGhyg3ev}&9|{z@r%7bHik6?y22#06HRM0b zBqd>1j&*y%+~8bzNaitO@v*v2@i!YQ*TRBrRm$~0qwe%!dLGIoa7<IC2_dgP zawlfL+UBxbCeD}X(Z4U5pAhMe53}OHKRR9x&6GZP_3-tdDzfbY4AedK#_=y&1L#;3 zEJgUW&Lb<&ypR++1mqJ2G9?s z5H@(f@pn>j7>!<6t*kFwVQPxrNPv_*3fM&K|XygAS&G+Qkz`D4sMJF$k%y2x9Evx@ayx zJ{J(SM(~>O)y~dZa^&tc9+ddiI;6_}WM3TT)a4wrV`cl%`RJL$g<9cjk11M{Qi3i7 zQW4CeUw0SO>?z7QUKh2i%Y_NQ)N#KX^>Nz>AwDiQH1PauF1EFmDJQjV@+x*ub#AIR zkhkt};<&v}mF*QqYD_HY>1|2~r)B@2ty}?jsf&Beeb48DUIsGWn(vJxw_`ImzumKx z3d(dWl%^s7OaAm@a{ayS+sxMdr~`?L>&u~AE-S`wX~?&pF9U=(snR#b2wF9msz&E+KZsTr#Bb~Hu^p~< z7LP7-lZZ-Dh{O;mRJ@RNQkSSJGOY+k9L+>G;K0>{W|0qL>4$A z2(eVe;x%MSTQe`{KFK$i51?;GeJ#9UtRNCQR66|keD^ugtLYEXNybk1u$HIv!(V*M z?h5`l@uJgUjh;MfIf|)TR(%PnsFSHc80R%XOgHln9AjtfanW=IGot4q6oGfM#I_D&2TaI3yT~-?@$rV$KjkHH2e;=+Z)ptIf+6!#A z{ovsF==Q8Sr+g#-!S=2f^Pls&fo#%>v+2TM0bE4EI5Xa2GL7)Ex|Ut8Fw!P9{m*ax z=EXZyKV&qwzR9^Qs(1MMmPXIWt3zE|R=+;{R&it_bGhH+-P;4QRQq55_EGxc9d<6o zvc)4MMKC4J(xQyk!#I*e8Xj-;Pq(!(&!Ch|4KvvmNpWyf;W`rr&P+RdhIL=t4-;f5 zs`dUAu!@=a_9YJ?($oQtPh4v z;%R+mXGjCopZKaR=u>H2;-}*6J%5{5TP>e?7$e)(irLFU?tSKM`ndu61u@X9a{y z-R;gS@h0ScBcNiP6%>{!Hz;0k3UZ&>>6z>lVI@}^3eO;Dw*2o2 z7CK!7#!KCW3fp6qEYThttvi0{CIpbedB=p-1O$LL*980ditdvDGzA zrHfqi3d>+P#Ed(o}dwsPTZWWgQ|E@kc~sQ=@nhuT+rNrzV{vzQi)a?c4LxzN|6FS6~B< z8CKqz`K7o5wS6$l4Qq)KSx&hw%jKR;)4Yc@fa(U_(__(|oT}D=IH4kzj{PqJN@{|7 zPi#MX9WLXXHKfbc~@_Ew5x0U`+ z<{GL_tD98iJaLj>UEA()M?DLcn1_8>Qk}cPf#$s`D68qk68WAjG47gcUMvRT+ zM3*%WW&y2D;czzXH`)dHm%?LP92BScnZnL5M!0SDza+VJ7IjUfI1i>gBug%WKgv}vo)&Vr4b}qUHdi_rrrm{AAjG~ zj~)FgJ_c+_QO`}#bJ6)4B6tmYW$d+Y$I(6nyH-L^a=NbGPj`-^M{mBO8DQML1wOd6 zgjfQ2X6<{gJza=-CbRT~O#@U%-ts|^SVhsLsQNv&{9Y52qwWz_ zzL#5>b?@ub{sQUk?p2Y6k*L~OXXPOcnw#-&lJZA#C=iaS34!0PTM3$O*e~$}@Z4xL z((>7xci{AF7A67(A%x-toB3ZW?DkYbpQp@pOQ*035byF#4IY$;#FO+cI&eVzZ8Qv6 zE9wru=ujm5hMe|pjds1w%5oO#?pv2ldHueMiAB^qPL@>T}6arq*@M* zvdYv&2A-!2(N?6&%i_Bv;jn}!dbEVzZoKe@FkuauJx3Uf@`Ws+V#WP*9xLCxO(hX@ zn4#E6{ON})k!E%vq?fEve&(~rce^ncz?+9_z``%Gf;XRR=#rhoezG&9xlm#u^-7v{ zm245mZk?@5jO3ZE&EfJx%tQ-wz?{GUInEgCn zgsaEppl^AI#WaLbj3BG~(T7*mpB>_mKp z@#}m=KbthK&w`M1!9boRTneu1>YWz)xV%vkWpGW#J+0&a&3@Syo5N+%JZ+$1TKHR4 z{xTislU?`gQ>!R26q5eBxSy1STG7FU1Si0{vE1Vu7|qN;C;q|J6tZbXgMD=J6;Sv6?LgpTvNMVcYZ~vjr)2R0J&&dNem*NZ#Kk1}hFi&Pi)oI=9`#vR?88bs3 zUUFAwV{gfPqIv(rLSlGb%2zExi*YVcBfDLr#&%_Jm1hyP>U45?>(|s>YXxky&nD%X zJ@$jkwZF3~haZ0|ym_!|mv5kOM|+-n);&7^C?+OW)}hrGb{eXQv|P>Wphl0FkL#D2 zY;72CjsnT-Kb0%?2++|Dwvu}|nRC}eaaOWP`&tUx8gCZQ#N4HJvVcDdGsR(4#^(4s zWH#E{RZh{11jxeh6!0V#luMpzWYy+c$_-O3;W^UXKQIj67y-`~Q*! znOovJj_BO9Mg4s4;4!fZBgW*{7y6R}ZP{BOi5Mqt$C?EFK@r`d%|7gheqRR2>aVfP zC|a`2??uga(*u3Y_e>O{ft`)EZjEERk2ZI~ zyeF2U%$$)lz;sPtcQ+@kq>%{YxE6u*YB_Z;E>N(HCS31tr?a?0MqYCCq;PS^kb$Fd z<=HFD;<*|@n@e4>B*Pf3g+U!kWoJ(yd_7WE+li86i}Ik)g#~uU91fKV$OUHh`K?MPYmi)3 zDq@m;CZB?V=gIz^y6F*)6wDlxv+$mTFS*RpxR^k0aDr^vj>cqTUf+;%H$g>k3l@eG zHMoL^=YToZzZQM=6{-@DdMCtw>Le_HWo)&P2HtD0ognqikD2rZQRA{WTfZ@6HHVw~ z22D|%unXx?bH{kd=RI#S;TWu$ z|DBtRchb+W1YUHaqGPKn()GA63DWs{$Anq`r6wF$7Yi8A3wvAoM`5gN8JbtJBmcU^ zN@duW5_PVq`Qx55uMn+B5>2{9Ebl z@W0bvTkb@ieS7B7S^)g?1Qps)%y#@(re7QE0MG#rj}ENI9)(QzKI1QCcxa~?IhZ^( zkIhkmQv#VUU7k%eu~XjX@V9(5Xii72Xj4e@agY9 z)X^a(x;I1%D)xCu!C&DolJS&d4azvW5V(Rwk!h=2(riuEMkTL{!7h4=!{O@DQnjrw zO3kMn5Thid7Ai-%AgA6@7l1bd;sG+pOJ+)Zp>^D|6`V`E(-*j_0=L=1tIT@=qMc=c z#n(wi{!<L^RF03x>6EQf=AMZVGT#S0r9RR1p5 zP%*hM>)i0IJ4++caDRX3ksGbdJt93y>z+`_ga{T?&9(yi6r6YK(y32c4hmOFV`x7m z5TU)eLV&&F&?_5uke|T*w=}WtAlE%EwJCgwu)Er-aqFBEB8jti75ts`$jazm51ThR zv=4b5@uuzbX%Xq%XKpkYUtAHLG}inokzrKn`|$UUVCU{qUGB+kUc!z(MnzjDGmSKwk>+HZElxRz0z$z}ckR;mwoR=uh zQO0bV`&TPR?6}-w5gD4PbDOk}NjZWU%F zarye_e#w-)6}9o~PUlu1`nC3$koTEeoY)wyl<2P+lBG9%?6&|!tcN#t%52h9gWW=( z(+W*Ysgp`BZEtl&=~&l&>&9}#=BVR1_qNqAtXQN9NeH20aUR|yP7|>P0m11;IefQ- zRw?n6Ahb_x4hk4HAyNK5t#}pl87@F>e7_CM+=o6@COokX)U&BQDzaqVb3l+gAzm{z z+Vc>~uqEpR zHtje-@QO(RPo$Y%I0xdQKVIf|BufyljwBO)l4-^ZyoT(l>G+NT5^i!tVK1W2lTaLo zY(bEhr?J0Z%Ki>W>t^Eom0A3FFw2+3g*(CsBlRSW;49f5DOYWwS%WbT+N))OAr1j3 zg-i87{uBJA0-*9sEByHlprJD6=aO^P5C{@;({}rwF^gd-E(#A{1>vZOKeIPPo@94t zhky78L%>0ntE4KCJE0VmpP8tTS|Fn-%$57Q2&OyHS`m!n`>&Wvx%ARW+QkUM;YdO+ z2Lc(ducJu8YN{f+c;_3&&`uN+xM|{I=L|tmobo4d?+zxQmQb$Huo}*-<#fh@4DvF~ zDLcptQdScWjj$~1SHtNfreMBdk+t&nVw2+WT06Dk>H^zk%@U3QO;^x>1ON-^Q9HWB z^batRuafo1dt5#m3u);2Ww&m`ohu;89Q60*LnF2`ttBk)%6)z!)^X!Ou0u=oSrTvr z#+2;%jVzR67J0lt#|+ev@?7;l3o>(;cSD3_idokB3qG#4PdH~KE`v3r@Wu3JC$t_k zzT)d^-#Y!DJEqao$(a6Csy?}22wst(RxxJsNTXXe5|uE#IIbFB%2TdILx(F|o~Ci2 z=As?SAJQ)>ttyO9ICKoPq^L$;JBW*Vma{S}q)6d}u*o+>z~!Pk?Gqq*|Dl=;D4;^Q~|v()uBZQ&b~e&j2npoK1M(+$Pytle9TOw;~8}^D#W7% z-v1Ehi1AZf@Xv2{vE1GDbQwi0PiOgCXA}DcU{4_@*S`0Utat_iui0^#4{-@~?%X~S z{ZE0HTybaJ*unRh2x7~mRnT7)hB3nbE`2lS?A0DkZYbHt95O-8%Op(3$mm@aAJJ`| z(~$5o=3oqx^(72>-j%^=UMe z?cKIXB!=jgN)TAJ1zI~2VAU=Fsv&W5c+fOrw^|#{cCmi2@Y3Z~Qv~>DCaLh1g7I|v z*QGX`&Y|2!eQXczt9?tFr--F?j|r=4Vk4W~Se!4a(U}j9_yO!LX3IN6O+7>+g7ETRmGxpTwgd?PaA z>`3#pLt1ki^EXmHp`}SDZGkK6N8DWB zGyLL82f){BBTZ*8DQYd7VME^7<$J-6%XtX<=|+SjP=ab>AS4o znUHGkuIUih`s~e`U_>C`>_;=Vox*XgD{KXn4I#_F5?~J)0xI-Q9t7q8Z8D2B=@T`W zhq3#X#N`MQ;@ei{*_Fa8@{p?|vUEk3FO82`Xd*en(*tK5-V)c~ZFBF(qbO_bu^n+TMaEqXrr-E?qzEv8B)j!?%1fUtD#R?_ zq8=;7mJ)|^C`3w5?N2%eOTUN}4VwamD3hks+2yrZSN|F(xoRvqS?$aCrx?wb{iXI4 zmjJXLKOK{m5|Jl^jBn%*f-dq*C0NWDq({i)X&1iWN3NJ}a;y~`BNamK;TKg(!7s?2 zEgT!bAa^Ix;?-;mXVVLS5N}N{cGtzkQ*=mlENw>=o~PG@z$1V^Nt~B zatU6eUzg1OrI>*<5$7ixuB*y$U!a`HLVQ+~gZ&t|W{zsb{U!K4_j5KqFYv{I`nP^c z$?lY}Lbv;kd}~QNM_1pXz2j;yb|x4Eaisgdj(AW5 zMwoKvp+Fh3F)t`UJN4}2s-W?{vCc8+QJx_v zyP9r)3m!C|&m{hrO%AK%pn}3v7XnK6Ro0xY+1b=XP%dN={ay4H!UxVLuMk%o4V_9} z>5DW7K=SRgV_3KTI?vIwG=p5mGu~aJOlPV5B_aIzv2q*m$JIla0g`zk5Gu6RZxvlw zujXzwFLvj3XAiav4KlkgZqxv6-RXVUuS!2xqkP`l$=}_+KfiM7Tm4wXSFA|>ta4^;eaNx1X zLGh$+#@2pIV4Nn21Aq;{z{m1g{dau{0wFD;rYP=bTR_nQq1WEa3a$sEKKk*U=@qmc z*&Da2lAVJ}De2vZ6KJ+u+U7(dE5xg+n|zbhwMAw+&~3af$1>KQh!aq*s&uck*$3R4 zm}q++7b9(F(9y)D9axvdyrpuk@0w#F`eUsox^Dxss0WVLlTtI*){yFtp^vrPZ@@O{ zi@Mzn*mJ1H7Jo!A3+HH!7-MQF;9tMqr6--$%p$fSPv@B~34jq32xc!=8nOuUquDM1 zBNg@1e#viEi?I$Y^6Wy$x=!sTD4ghppu`qCtDP8=@=@Z$vweT%Mu^IM29@D+uR&YBobA>U2qr7#45)GWvi zhH-!@Z4J3@0Gd2HO`GgCKt09#pVKkSv#e5bdJn~o+(Z_VKcNDO7eb+9hwnx=X*HRV z-D~=%(BeEO<%o+(OTRsSsSy!+q9zL+lmH1?cW%d98h;6pkArRKcNTDHi~oGaZgZavXp&SoUefG! zp;7TI_PkYU&bY5QEI|f;8v|}fEdSe2jw|+8pb0>xJ3$T1d5-2yvh>IzHTDLC z3eDc|$iWadm;}JINl=#vW)a+$BBnp)q#}V)|CXTsv^Me6ymLkU5cmGJFQb9E$4*Cn9&&~#@|m3Y2{P2z#MUdq4Y2%y7C*Li-C*5R5#x< zu56^LRPC!2y9rd~1B0$d8;}e0p>U^NL_lQERe>~c*+_cTs!;Q7($bIOE+pLlcWeR; z=p<^!x}yA6lHb0RGbjbh)0=zBB`OF~jxPRq?wvBP-3(A>gAA)pUkg;iRN%rN0G>`n z_b7&60k&ytCX~tiyRhw?0m=ZNqpGe9&rX_9vz@xWb=G}l%eZkyXr(!Uv6IosC{KH4Hy@>(kt}po3Lrb|7iG(h1dli!Txd?903}C)OLS9 zklj@trPPz!uhmCa9ygfYMNn8dP{ob5#7W;}kEm;m44F7HI=tY%xdY6Pt;s6Bdqiw|;J0k@ zMZdhXJI26hCnU0!7l9M@^2n?!QLW14vtAiF^(ya+vC@dAq`^4NcjF3fW}aMgUZ;{u z^9d*dp2S~^6{m1P%I7Ed1OWpPQp~fC*2voXdlW-$JH*naCur~-_4A0GE}(b}JW6$& z5Kug+GhWQgDC4AOAieo+pAyhtuwsUP263HV^IIN*a+-IjVVns4Q+0pCxU!8-CoVeC zP0p_j`}4j^X6J4fby!6VdR@R&G;e_grU8*F={n?bFLpOH8#kJ&ca&#Ah0j@bST$S| z7nzk*^lv$q+q|*>sNjG^;uBpAUe*}%;M;}9T-mUz#|yeu7`t_TNW@`yiGQ#A9vmZm zKUS)39M&(c{+uk~a)j zb)<36%uvBb>#)lgUG(7kizUc;flohA1ySZ|!h6BbXX2etGS=zuf$6qM&*z8KQ!EW9R=|^;SLn{qt9lghNIlh6 z{b=!9(Z2;pd^(O{$m=;n>SK7Wywn5fTu@lQ4ce)ODH*b&NlLPljwW-$dX*SrHLMva zG&C*Clz6OCy4@(bJ?yc=59bBzm$=Ok?fXv?32IGFR@5Mm;2mkJO78o%Vz^SbT_H1D zP}zsm@V;u^s0kmz!%7Q?duj5u5hN8LE#^iwI#AU99Up6GXb_#VI%-MjAs^GuG29s% zjJ(9|;)$mr@pZ021p9`*a)ry;i6!KXv{@6eBi^mz_A`(U%5bV`?k1xzK$QPuq ziU%Xkj?Zr1kfaBc$i*8MyzUDFge8IGgK=*N$5`FG@FNal&6ay+;vGW+#Py7p2T$CL zD0e!nHE{)UEmL8ivB97VF8mwe;1tD+w(>ZZis|QM6sz^Z>!?{AHRsZHZ2}l#mfzvL zEFnX0U*->q{!o0I_+G3-)@SkWGF{Z_dFOKPaN+X&EfF?$cJkSq-u-1389ztEyZ3VWxwmi{%|a z44$^{1+w6dRyLO=eW#!+hk-WIJcgXQ-8+)iZn}WtY54x|Zx+$fRV3awsE7j;{=|Di-N;bW8KpF1f)sta8CP%=+Ir zgDQWmKD9d)93ZFN5d6LF4EjRVF@Q`ZH&A+=+*eJxo9%ZLH;B=pK2qjLZc2mn1y>;V}PV{x^f(i?70l(%ObQ3FnX zl&W&I)45N7Fi1dJo_6EWzxA%q8{n5%MMIk>17brAw&>Dx|%W^AZ{dt~|}h_nV&a2~PvxrRK|o@Fn_u_?sOPin+5 zMq!;_1JNWQ8KAoU_}L~FH50r1@nAXCGJtO0!H>xJ6`&r1*u3R|kas|D6Pk@~sB;4S zly)yJ<{h6`dMB8FE?B!-uwQYv@L6kogC+an8_6~8-}!tmT<Z&>16YD31&`>3hpN44dOG`cc?I{ZTm-ZzP zkb4Epj0f)%I3Upe1u#NA7N4ZX2F#gt{E0!sL5n#_(9K6Ww7=80ZcsvadFPeY5OGBdSqD1+L(R?wKM*-&VT;)|T=>}`tK=GS+{$x1l z?Ni~$^sgvBgSG(M+Ee}!IKjE}alDLG4r?H0dL~C{)2A=vYVK@4vuRQpK8!sikZ+IB zwTHf#rX{q;6OxFd=SJym2343M12ALx{#SdzV*;&fFfRt@zBiSi z$u}4R=lWAHF+D1$hG`vdxB{U7NzGaies8BaQPAQcXz3K{=qe-}@w20;-gv-bRu~Kk zm|P&Hi#=$9s+WuZ9pUVl$LU+S+ah>t{SJh0+PeY zZ%X7fA^+2M_?KYzaS2)mnATcNCO|q${ekTj9ZucL9rE|@lfjQd94<03>&(u6bghqz zkNF6#-;{h&K!;ry;;%M)cJE&G5G9rBDyxDKpi;GSFsvvM__g9KcI*=_vzq>hEBk6;iPFfWeRlK^{Af)i)ynaJ zZyz9*6V>Qph*am(q0UpEpgv2@2w!O%KR0O%bZ#XCsLy`6fv74Xzod;0K=5ei`%M#b zKPPXrUHwZR^-XDRp%j{^%7^=byH0s_V<{{Tf%Q{GSMl^rnP!aI6HR)p_ z+V>axhvZm&w;1Q7VGcGO{^&nffVCZtuqX#+Ta>%%@rdKrhIko?K-T;I!iAbyw{xFD5ah*G2Vh5^U_8|JvARIIY?(Y%rTfNL zaVi@dS(D^qOG{go4fmLvqi;gZ_rMrKayB3(b1*LhkIJ21`Myc=oH%(u$a2-LNOluO zehDSU5c%R0*P{PxlLZY$RO;j)p1OsTnp({v$%c!ifn?+>9o}A8Jb=J3mdPM=?*G6rN+n681BQV^yXUouXO@1ep zh8?Wvay8w(`Szi6mUd%vD|5GpThR4GxgZ|uM{-3w5yD=xo zU${KzW?Y$g)gsubp3H@N!iRN;dpS#3O4&{pHoh@{iHfOt%S9DF%4TL1pd?InF@blt z>yjl7{O~!7t;Q+4XyuN#Y3?e$8ilL$ePK~2OADM|og$K~55^=l|L zJq7`Fn1ne{jLkPwD?lDwEDC{#Fs!(wFnWeSs0jk^6+{of@4nekaCUsXCCZ(V0)bMF z$*m?G)Vv@1+n?z8Dw4Ej==Hx^&~=F;Wk`Q+dg3~w!7mznt-S<(SY|g@maO3T2<1UK zH&zGqKy;Q`lN+>|S}5K(7z#$MT$wd~=rwD;D&9YYpU6X2dw(TkhNBYEJ5~Y-#%Yq; z$611)?pP$9pAD2%oC96jkFFmZoWwQA6rk#1&KeI@jB_xWU}ZQ%@u(9{*iO~mX=aOp z)A3U>08n4m(`nF^+rNI3NUiF&c=I9@Zzx>;Nur9w?aheK74LVhTox#{S%oHm8=()} zdz0|FQxXh{$imeA_C9kj7`&{lE!vH$tdb**J4E$m{j(8Yw9Lf5P@6cpx5^IQaczNY zD9NNRL6U*)c+sgR6>1_sc<;lHdC!-EXsn=2%*K+MF2s*=IIXl54<-6 za-?g!jJ6h#H=%JbcPpf*D(B^UOWqGGrzm$hMimC~x@(yDNEefiSF9$z9mV{xp~s<5 zLI! zT;N>#N{$U(C9&%Mk@(-M`x2WOC4O&vEn3cwhD08Bt6KAWYyBVC5z-mEZy^ol4jo(N zG}V?+h%oSne;bRoMwZf3Mp#BIaSKTl6+(zbk1?dAaPs zD3G*W*WwY^%R9C@rc&_Kh4$N(|fhW9i2zOv*IvS@t0HwTp$wEbh59VmEN!f(JJ zNHQjX5T{$osoc%Ix0g{I;O*jGk#od7P=%v96)83~;sfi>t-jhtc*B0HfKKC%j{gT{ zz-ZL$8XI-EDD+<+>ye5R5ocD7a2Cl+SXwoy=hDW>eFM<;u8c^{%8R7}Dr7U?N>Sl? zQjgvxHE{C)_RH}-u6lbOecKKY8OJWUtP`jc%EII2;B-e5o~Epv~8|P3Ck& z_hO{{S(B2!V)`Jd1+=<=bT&In0|zFdP@7x=!-{txdz#|4j#?m3!zIga%$@&aKkl3h zQjje(Y3-g*lrW2 z`(JBzYD`iTRe)q?0GJsBJD-}73xo0xPV=^xnf~6g6(L+P$7!~@nxw3ssscOi(Fvy@ zaDV^>Hd}^U=3m*TfmK*vHrG|Bz03u!&bBK&#Khp)XYruMu^YK~00=v?L8B6Mbpl;( zK%DNp!0N3fs=W3+FaGXfqn*zF?x*Kg?m1%%SbYj6T}m%%$(O0jREHc<(Y_3zHbE45 z`(F(hP;jXbIU~9bMG|)!1kqO5^hq3#Dm3xt8Q; zDDf=Q9ZrJEusot3f7l?Yf?~5zv7tCFAY=F^c_*{!=$b%RuQgduzbTrT!|F2UoN{n$TkkmseJ4-$$!k8_tmwLqPRtbawWk!x*9e~ z<$y%%II^MF0U@^bLpy}WrqyM9bC(&$pZJ`yih%>Lah7?X_MoHYD(LZ{rx6#u+Bq8qU76Sh0 zJpK`zI0AK_l=R-Kv}Nv6tNv}^o$_*#p0**tujBjACAxrNsqFGIm-|CF_y_oXyuU@N zf?&jgE;okOPb;}yxOJt54G3n9B$Jh{MWgSHZMQpE7-i%=|Dn2O=F8XEXd?2A6q3u`97y8Zo`fvRI zsrJOoX@JNBBc~teUFd59f%kANkF7Phvb5~Ez&I+jNR{+mI|yGs6|;j!d59z(u=>@t ze`t+^HYXf#A1Glyn6c(TNo7h_rEza1kGatlXr9lwl|6#C_;?$NUyFZHGEj1av5yZ? zB@vSRD_rz14;w>GRoo`d)9g_y(MzxW8Z3S2vWZ#fMEA>q#r0ayz@m;r1 ztjRPclL+dN?H)Z24M88Sl#&N5kPe7C1%6`T#(Mo=jIMp)mk8%xV+aN_ipgF928y19k zqeQwFEW?l4U@zBpDPzFD;i8f`Iu74N!<5ptGfD(zkng9Z`4vd$fgb2bYza`qHRd|-pJw;x9{DF1t5^r?BniEN@XdccGNF0 zXBDm#(vfU!RhtY&Y<$^IT_7RmvcNTQ&rU=iy7aXD*j_{Gmtn#BJ=96VmKFvReOBiE zUSDHRA4Jyc8IL=)4Ht4TlL{=ev2<(` zK`i+WzMJHRTT&@!u+E0earotFLl5WovU^R+I8Xo65o;YmMVa=aoQrO|v`RU~yilsX zVFK^#bb~PFRpk%!J{Vz$`bJng-XW$-B@a>`=e{rop=HJ*f2&HeHZKm@w3{_}Q9PrQ ztEBZnP*Y4AgB0Bq)PL6fv?5qSwktTi82k#ZC2;w4>ZJz|ha5XfV|prxP~rB-*i#~( zLyI92Gq_jza)iAuG!z#2HNE=CK~%6^F@?DnXmF?m(ISs-IZ2r}z4A)2uobt7FLd^r z>8w6E_0y?orwjGd0*2$0Os385s(dX?hdKZfGBG44)+CW~B7RH(k~V7e3l7zOfxom| zayF2}lK~{JxO)XI&z#LvyKrP+s?~M*xxS4VQgW>Neoh+n3;O6Kk)%s^y5@C^j070_ zf*zMK+o;L*u^!`4{C`UPhMTH!wqjKjW(SuQm>$_bVNiVUOJ0#{1@e@#8d`S>+S%g& zYaeuMujU3XYL1#=m+;`-)NLrvh-=)QLpwTbxdxyr{wE<(iL~d4ugb+L(c7sLOvJ?t zotRJ4&R$HL!Lt3ORLt4qoBIjWg1GuKp6=DG-DsD@StJ$aT$B0sN7r22TGko4>)?q>w z6q;@u=)oBRTF%4AG-RGaM#4$$gNB%x(Ln_W$9Kq8s-4oq!d&0!Tv9qw_F}Ar?ms%L zhhGcFmn5*x8T-EaIzS0kz9+_5uJufLzJk4;J|AnS?kCmWm~&)TRQsWuu7kNgl(S@1 zZ1jb~dKZ+HzgmAoYQHzP-nDJ&g*p)W^Qk>;{di(rC;w^>5&(TzLAvbF)@RG4{>>X z{$!!>>3H`m-MBk0in#Q43L7Dm=z+bcLve)4BU9>+y%Th2f1oxAk&&CpsA^#%u)h+@Z=)#r!CzoEK= z{~1l{&n9hw-@iW+mMjW9cg)!c@gZG8f4+hzIzO)t{phqQ@n{zgVqOm4vj46hWrf5= zW)FK7_-e+jTjXP$E-6Gs-j~Z~Vl0kTxgeF673sV(ua*(!MM?hOlc^w3K*6;g7a9`a z30*AjDux#EX3kN8jOXBAi70eaEMLB=Sf3ic{oEAJ7c-~Mgi*$r_AL6aq@ssPog;}0 zv+p^JgR{F0AG{4@1ky&pj+nY_+o%u&U)1cutWNq+siWh5^!r1KO)`w_uOyZHDh1`%M?+H|( z3R?H#y^C%-{3qJobBqgE!iJM8i3oAHkgs$D9CVi4wZwGHwzFR3!rrge^5Y2R-5*&h@c#wc_!}?;M1FXXypI*6uTEldZ*xO@Sb?tx6)){ z1DI!CAbn?E=EUs_&=$9Kz0(;)YKfK7M43n=X(dk8GS46g%Kt!R^RKOdE`MhiQwGeU z{ezbilI!}_*RmB=>ozbf421UejrLi{6Y(GOwO~Ep3sP|AkSURh{E3H;xo=K(yighf zrl+CiX4~6hy4v{iiAdl{XYNTND%I!;5`H$y;o=Tl6-D#^BgDdoVpv$xSx?4%ITHox z{m7##ZAA^npETq1vXV=G;KfgEB7_O z1+zdqd&NcwCo%-487;no{C6bB&I}lLfI9c}k=ApwlDAXGKn!R(dC1eAfH4a@3GZ1@ zS`Rw#x3DV%W6$2~7eOuYCP!*U^K`ubr5ULXSI3MUU)J3S$LGt*(!NJPO91K7-7fDqA|{>3(-IuJ zN;Toj`$dEgA9NgQ9XKOi4Xy;in{P;9mj7rrmuvPwKi~tl0JG9;u8LuW11_zsI##vbBSP73aWG9DzU3?1~*O;BcrgB_&yRQWt! zC9V*!xC1}m^Kr`URydVtv&x^D4nj5rT=c(vb#%pO64+L(HtaA)ryG+RaI@>ymdHNisO2iaxwXJ&|N@t!8)#bKI@ z5S32SHmk(qA-oKL@jdeGfsAXv<(0up4<%j1Xy)p$1;psD$S0p`LhAMsCW5%XbkCQp zj&E5aHlRCe;ajSmhYXO_g(0@)roZNeanH(v2^3!&mEiLp%S5UabCk|qEX`@=KJZ`` zAC{~OhUw*)D3w1qKXM~drdiMA?uaa@)wGqTK>7j>8FUQaS8=^aIuSC|j9T6_64_z{ zi|t5PXw+M?NbJ_UX8cTyoAh%oIs*c8-GvdQ+wODgm1t|_ z7XKah>r^mg`?#_wwmc0{zd1&w-#LuF#E<;TF-&C#2bml$F`g-P#- z3$0SdTeAUu(+d_88>Pe?D8e0am>4 zkQ&NbLwfBAJSW>yr@yJ8*(KkK27tlVGi$|xX!SIuF3Ts2W>8)tbhefZeI65Y^+!z$ zW-FP`5G$Nv=;u0*0!W3NuPWdQY z>U%y9)+9Dp;c~L?IY0p{@O0aa87w-fqhZCyN-SLx`_bVcS}}x2M;=K^ z-y!vsh5$rXY`$@L_(&)|n(+dPO^z2)g}Wmib7{Cq|X*| zYUqq@StML)K#X;txEpZH4ORdmbJ}d9K*`a5wW-Jr%C)|v#qCaWQI(U`VuPfGp#Jz7 zjYAJJo~a6LgXJrp`X0b^cQn1Q87T`<*ScZ{Z3Um7gYRuXE0Doi^_O9|ISfjXUYdRE zKXe(6^?mD_vXj~OXEzR-YNw0BOGemk>Yv$!Q9sUdy=mI_{oBblWV*b{Vuy3VSM`=| z*US=Wp`!O!3u0;#y5yeNuL)jI zvnnNQmN~rtOjme zl-yAeqHH9-JOp!-Rko5;&RPWZ5&KGn{jB255xoxiow1ZT0 zQ#Xp2_ZW>nFZZ%L&3cvOdDQ*4e4AJz28ji=pDnrTMqz$r*70Ch%nEv5!n?Y!yuAH0 zUE=nth@;T?lKAJELup~hv?8y+!2z8_vBt!Z&>44j9MXkd2!+=gY#T5$DOdRmsH;Gf zA$<)sK`C*CE=m5T3TuBzdb4xHq%`rxl@J9c~9%5$6rWI({rFmTPww{m=3=kdKSFcdQfAu26=Q=>D79D65-;~d3Eu1&M$b8 z{oWu+N`a}hZXv^(at&JVQ)M81f+~Tv#f!ld9)yHGW4Wc{&TqewNgtmys2`rKKMek* zex8S=(Z)~F)5ctV-mg7)#v8tf`r!^+OFW~e>rRRc&jJ7+M+qXAs*M$v&uW-^#}NL- z>&3ltSMiz;lUbPKjKM(VnK@9d$|{L80l)co_|vUEuzh82wBEjS27V^#gt zRqvr)8N~`~K%~vq<~Wc>B_|WgZi?9s0oG9d9~Vwb4Eu)u{1MuyOK)uwZN{BOONO_f^yh!1`8> zs3pWO=^O$Xq648VbH|yO<=YLW+|tOcpn#_sQR@O{_lQ^m{KJ!mJm7ct9&Gy^U4uoV zuPBdqi7T!zPAvtYkU)sPLWoC-zbdSlJFd7*L@fF>^c`a1f~g%|h^Qqa(=WfW7`FlH z!T0S~fgG%VMRO+Nd%R~TQ}2{TB{~38{w|@y9{F-Suxm+>mYq$Nd!`0=%*}LnqxOM| zqEW21lLBZ8a3mMEI!H?Z!tL*2xXe@@tq^OtYdl1vWig85OW*dK$IVRk)tcG6URu~l zr0~W8w_{Wzh6_%&@>pT7hs#>2;ljkO#LB3;6|jx3<8ndtC$i@m0%%1SJr~#X5~$@n z2a~b04}w6@xF#E;?4QOce9eI2=>Ab>I9*7@_TT0Bm=Xo(gdy)mvQ-hx;COQpVdS-Z zk8LQO0m)b1%*A)W1`1>I6c1|MrZx3Y0}%UMJeN?n3?$#hL__wQPKw6FE~blmOX_6) zuG3J$(oISpW~fikRW|7xT-nK&TjzzN=Jap?=uH(FFVD%afI1+RXQhA3od)rC$b776 zxb9=|i(1Ozw8^qonCK=V6JOo^- zr3I7m(caXJHO|yQ?dr+dK4NQHI2OvQ67sc2&;@%7d5%33CRx5e(zxin|M8NIF9_$M z4ub62IQg{`(f+YSw`r8IszS@A%Tiurhc^vc`MwXf@eA|8p{xa4ERqyJcuDO&>5EiA zPNE;Zl_n>Luz@UD#r30os|hk*T`>iDv&mxLeRjfEy%C^{3~}b>It1v$Xg zg1kDmtA4Ughx;e!`SE3iaUK@n1xPoS@ciifv5Hv|(XD!mFkM2bL5y>b;zFKS1gV=dQ?{19tr*0X_hEb1AylLK5y zAcQmu&sfSuf=<%e!06#!5*jO+XBhd!36lkM|K26Mg6Osel>-djyMe&@z!BNGO@<$p zNI0TJ?0XIh!`MUfM7L6U)YLf@Cd&7`r7Nv-%lrh{x2PWP1V6bwPdwe;OXnu@fFK>| zbl03#)kmW-JRhlH>vay8IHSXu#TzzqLL|U3uLK>wBRirOSA6M{%ZS}Ut*R844FLiO zHykB)XoCtMJk~dH$HA(3btQ=!bY|l}ooNa~xucQwRMssm|&%PS3Q=n*Tyh76_Bo_Cz;eUX*j^Y=4`YS#5d@J zl-4d6trdM5F!X48;tOj|(iswd&56*X-T&Xb4ZB75F64w~;6t_feZRHJ`Xa5AQgNx{ zAsH3{B}KH+#-LchB+0S*7H^WxB#Mt?wjVSJqNU|waF;ct`qv0@3SO0w)nTV-Y9$K5 zkfZV@K-gb9=KgSR+-9-C1Lxt1l}tm_~?`rZ{5Qjo^R?k~dma>Z2(&(l^$>r7Xh zjH02N(o0I<6=ix{%6XWDL+yf_cvdvE{1?c{6M@LY#$Wx2G{!TPr6PPelwqf-<5Rmp z0@w~)*_~;DysmVK|E8M#U%GZFbqnZeIp~%$j!^=cvt=F)^`))}fB7+4WfNdYn>kI( zs>5oecAIF^q6p@&Q+t&Hn09Ccbm8@fXG5p2%TMM?v(r3S)i z2xo@m3!^x%b9I~=+LJu%bFbpuFqB~rY1mpwbZb4^UHu65Nom8zAWbl-=PEa~O+zpf za;1RAiFi~~bG58FuF&#>LMo7?*O6-yivp~Fc7V7iuA^pa#$Q#?YZJ;Y&W7xPA`)w?1#|)`i!Xvn|&H9b;x>lSe5&VPI&k(UQlLZ zx_PXckPqFRV3P5(Y)K4l&9-pVXfR&~16}EHIF}0s!mKz!(ud&z7;t5$*&Er9Ja37b zGNsYmr6?AHSn)%v{l41e_*X219dH-{yP?{bFI*f12iLvHWPDx!*g1flrB~ZE zVeKX=?BY?=&zV&O(LSU9F03hXMt45a&nyz^^PAgH?SbK6=M`1Mmw&13HlvG<5TYiL z+$f*a`yLsP_w^Ls%L3}r%CTPn_zqfjk)Y9Jpt%Cf5XN%{*-U*jYL;r2C_`A)iDbhD z3ife7$kmxcwjk+zx~PB@aG(VtM`%yu-5NpM76i>;E`nBY?N8 zv+xmj0%|opVJHN7hrw4pFSh014Cs%<2S^NR_PTVNcAcU1k|!mpK~?(8j}BlvvJMJo zaN3whL+_|cba!p6zfr`3lDd9zp}B6@VPl)Dek{l=xzQYPFbgvyB6YO3-yGT8qk+;ur(G@~rAc(0mW~(d1>T){Ak! z7u$0me)_MJo|NT12g zsxig0#c#%Okz=t6zyr4@T-C+O88{4s6gpCHdS3vCd`{?M+?Blq9*E(joQ93W~$3H1|(k; zN1+0y46!wyuhjae^tCwW zu%^u3o^=Zfcu0rhyPIP~5*m^J&ZTalc&H2la-p5i6sXYtC3?nYnu>0I;m()ZUcBI| zxq=D;DWNeHCZ+}AaojRT`*M2DQsV*1R!=ssrok7Ly;LnDMBAy~S_e6;qdMR_cfK~^ zwY&i;fL4LIn;iENe}<9h4>aHU4;fIn$!sr`7SrqZdJ?%)LH5lw9Of^8{eJP^uiHd; z|D&r$ymO0%EAu^*t77?szSXa#Yx1YmXAl^%SA!~ zR-~f9Z7ry^i4m#`fFi|UNy!;XpeqjyU@4MqW0?8ZPjd0jN}-eb;o$2uMzxobfl4Q4hc!l$#_^X>V}JIuy%V^9ysh&~!zknP}P>3^d~3 z4=M()+*W^%^E3rZo^AeHdQ-)zR%YaA%?!GjxGlW3Opm9#P^)aA-o*s?Q^@q*?xk#$ z!OI~SEX;9gD(CU}aYZnO(i)5BiL|GE&#^f?-J za_Ol*1H4wIs^6>z=*2xML<9gBQ^8~`QB>XXe|(ZCoF*YZ;nB@0BNM%hTYyrK#q$7~ z{sB9o2Q?}!7YFDfkW{Fs#E5%*VUE${I>=we~9?01M6;CLvR3S49yio{tP@zoM5 zn{>)6-fG;>iP&zwNj7g&Z~oHYP@o)FVAhlA88-N$?|Jie%%lK$0{HYq>Jnzqo?b4|j8$jj=j}6V1+7*U+&`j`I;Hj*CvzOn-%d5W$O@t| z3P1U!!~$|PKr2}O1;sDXm8DmIMj8T{V*+l`?xDWxTYMddy+_%^Z~0SeLaH;F|LDvmI5s}ExK^FFIT4j$ziWPYoRjYNe`_?A^s|_g zlkIS6TMy>IikI@DmLAhv()AnDrO2LXkRI_9%oz$YHOxuz;F$5@Ty*ix{pBjt*m=ZkImcs(DCt1dV`zl;LusL6$G0sSpyeVdfbQJD=)E!$>fJ=VfyjNN8n~ut!OcIg_=p zas#OF9>+xAr6Z)!+5lo;^Op0O=Aij+i{XI7KWBCuX%R>DXC#X0NWJ(KW5@=173u53 z@(D(64-l*?&!Z!9vO;Io<(r0KqiI=f3N$ht;C`hzO4ZWA>cK}<>%Y2YE{y3vTJGoB z({sKE#aFb18zNaVSUl_AWe%hWKUJBY!T9C;69`^(#PD+1Agd}$P_5fZ4(dQt)Tb2}@c zH!p8Ow)^;h|4c(^bP=;g$AmVgE^>rDeR*LjXSU=mva7=Vyiw;HF?TtMMcQL!UmeUExCX~7 zAD?VlM7*pk(xo9Y(%l~#5FlLExN*i#V9tmU7VV7!)f}wk=~uCD-O#626^f=Tmy!lu zZydC(YLt}J>~?<5*t)XhA|d@}m0=!MLI4=&n0;FFDQKEP3T+NCm;SaSY_kp}>>d(N5(AO6za-ABS4FaYT791ZOE^?mdU~uys{#+DUN`&{YPCCz zix^alzbCiDizAddXS4D*jr*9(QYxh!Ge3WRrZ8}SgrO_hW3+6FAxK>vp#gpwYkv){ z8pwkKmdbVSg+*xG7-K}9ps57YKpJ5-41|@SEGtjIZTQm?E;I;iNa-yKs7B=cQJBXD zN!U^9Iz+rMEi;)1j4$)d+5EZ!?)t9PGj$$rz(HS^?VqMtXeH&86^jtNtI5lelaw$d z*IvzKOxB~2C0m;?Ho`cZPP~ogguO~X}>VzWYpLpC{QsU(s1z31I8A9f!|PiJ-i98j{|86 zt%g9}0d9;IK1Oqz{=NiL#4Bax3;fxX8R6PWtucfAIZmxwp0cB>x-`TI9~ByW<~0e< z*q=@R?SAezH4 ziB)9mERarf)u*GqwP8lWbzptiS4kPcv)x60S2cE)t@~RW$)64Eq+wI7FH>Y*3P(Cv z8gB~}XBAuj9&LVRQxHK#bl|60%lI!eJ9-Dzkn#~;k+(5xbZlT(KJJpm?*#AWGx4d3 zrAD*|XP5*ucQhof>|gdDIqoXhgy-qHv;OPAMGajzlL+8t@_;Q^h6lyWRbMLo6Tcg% zG32J%1AU_?FJ5I*ikmQCuga3a{9>cN_uTsU#@3%hzmm68XnM>y3uY2hZ<)0<(N~>Q z(x@YDTLhD4V%t*pn4hV9CW@v`>jG%=__BMeMsKBkF4FAFSnTQQ*2(cLhwSPQteq8v3#U&js6aAsfQj`27DYcn--?FaHR z_lFt>yx20u2DLqDQ}^V(*9u_kHTC^G%9678?mw#ow!d;`dNge>W9go@cvaFE1+0X-@RfbnRc@1T!8*sezWV|Mb4+wIEJ zXFZIFm7`7exLG?R^1s92i;bEYFs5&sHrW&_@h-rE-?{LDZ|-*H0V7fLQeVL9`AE^a zKz7|{b9t@ub~`f--RPM%c617_%izMt(IAz7$>7j6lmLhcwoN1z>!o-L3JKY=8kdA%z)3EUF)dqf%iylP!_!@y3w*7uK}m z8bExt21PSD!(+D0jBbbq43e88GoBtUlD-Ca%%DVXI1OZNRAiWq_p*oP8Q zPULjgJy(P-?4z36XDaXL3Kn1Vs#q@eCf8?3B%)0eC{NIV)XdW3TUS0e4rs9m$nc1M zX~v8ncuxULkoxevWe_6qm$gkz0}Js&JC9dBMQfa^C__XrjYniZyl;|cxVc!E5oFtW z>47Z>jk5v%Qkp%>x2&Qd6JZoe8?^cvI3HlY`xt|;y8u7m%p(o5wxv0q1LWYW|tQ3poh|1Pf4Nf_9v4T{$OJ$CYBN5#q@gw-TJE#4z)1u zc!JgDhF$-LcMx*d$KJ9xG3+5*9Kyp+#vmQRPzAw50D$5}MNB*8-4 zx6Se@7V$1Fc4eB7&Rf$L zP|O8DuNSUBwl~LXxlQ+?>DdR_c-4vP-|5GOSs;n z#>0^*V6v?55HI4?P4SCI_K2otdpkW-U@>yxwgsf)DjJwohY~BwJ?4qkzEW*qJ|N>U zpk7Z-_4ps^0VB!a?u?a85Rq{wbNfHu#3sK6df+dGwpl%w%z;)%YNERKxk=g!3C819 z!RhH%8cZ*R9{!*FxFtTO8SISk(Yk_R!j^)T5X);V*Fp2xXO)Lo3<*Y@4%U716<_@* z^<>>Kz<(m96P+S)EWvdavrx&PF3WJd8?yO9364Jl2e95ea=k?|`@W;qV?F1oL%yNfE_D@?Y+Cg1y`6^!Sw*h)#wO5-bCSSFY z+i-2Dh8&_bWUog^0WhOIuG^w2Uty}nx_50cCHr{Glw*I$edtu&56dR(^^LPLswR#= z4x(;HWaSs6fE;29R)4AeK&CH#w)C}U0 z5&VpHf&qx>#lEvNkjD=xjV4c;IE4=@8hMrV`+lQg!v0QXF5u_mok=gSe;C^MH)y|y z`tE~$0(ii+L_JG-09^beNWU1Lq*I?3#Pfy3P8L{qtx-a)73qeNMcXXs{s|YCUVGVM zGuBJWz^uEo`npT2cUlSv#kLs*@ zdYT&pAQ=ZH8v!=baahv3AYx##nZXl5m`MM-F(%nO9VGh#v{FL?j~X-^q+%F(gLd6p z%16ZL>NjfeXs$LG0&=iv;{zgwp5OZ4Y>%V0UsKc7Iuk-Nv}ta(gwNt8AcF5+X1G(M z>C|rmq~C_mrv~HI9fq3^*+bx=ZIG!36k2xLrIk6?rCFL~M}KzO$(FByB8k6SbA^_L zH(#8H;?g*NA|kn|aS0CWN4Ex5$#K4y3NYU*Q^5C<@~XKb{m$k2qe#{-sAYSbV8dwN znT>b%#iTSeZ0hA{v5e1$OnEPpCWrysJWHb(kOW`}qW8bR%?#+tVLaq|xqC!R7iGLV zLbqvBObEigP?w-JRmly$Sh>i%4*5J>$ENHGUp{MmlkQFbw7&N@m)ezxpl0CWn&M|; z7lw1tUZ|GC;w}tnRH3StU*^}64W~7Es95+uMH=3F=*OGJ^>)R0(cfiw49jt|ss?*U z(&AJq>3Bl`ZF(t|WW8OeeE3__-qr*wf|Y-yB4M;A81;(|pZJ_GUnW#(9D{H-CpM_( zn`I$o^Gw>c()YC^331-=j7%3JdMJpb-VWPqtwVPl6gglMiC$oil9&Pr&6b5=^A+k0 z(%^lqpixdP1lIf|+kk$7j@Xc%Rj+v6y4;qsSqI4_OJ z?Ky85zrSKxq`4-#P3P`Ujw}V}wIh<27G;DB0Ej;0qg@sOBAIqjUYTD!;;Aedo6>`6 z@@D~t?m6m!5*{#Rwkn4o2{A=X(wk0N=V+wb0X3TAop(tk=Z2Gb-#%T5i1U`j1f%Vz zy-sYJoeqetOJ!|OK0l%!b*pPo;+QU;xn|br;d_*;rW6kkn>>m~d0K z_EDPxfqzZyz!?pfhr1@ExQoMlYO zcm4UM4f05*9}AQKW)$fqM|Xk9a!6Ehiw{A^UR!2mtBo_$5~?M+-Z`2&SYbgM){$)Y z-q)4}+Lm`eP(G@45BAQRT{@BmYC7RLQy*?~d&UqWhua%OTa(}ESa7BgE!=D9#cjtA zqS&y{M|7mT&~#=i+zF+@+2+A0g>~VWa=7CIGUhaaEF*bZXOIC+2f7oEhD66Efb`}d{_iIx&)zVky+zTGisdpnS>J)w2qw$%UL}Op(VB-GUyt0|t zx-tcl(LuWLKqYLO!-+^#`ysV$`0-$1p$xpbEOZQ@+R(^HF%Y)Q6d`!SpgZUeR`{tJ zSR(B44#*a?j-RJs%z=4BXCz|GBx(~qM${8&7|*p$2CxDE5EMtH?Qz7pzc*^Fq%2s? zX_DR1`eM5?pXeNvS5g`q?litOR~A4vxRizUeGbY+jm20|B5^2`k{Pv7V!lse=iVAK z^D(O69EJs^2iaQZMwBgnJZh*TOcEM&Xw}+2<7B$2b%E`chi!9RYYARy!fG3G2v+X1 zC7V$6vkOhB;(_blGNFzT?MnDCJI*wu5qgmX;j0&eSP^)99TtqPIZ16b#&~5nqyU@!DYdfF>wTp{e|9COn5>^BO?mCIm2o2;!iRb4ZW%<>Ze_ew z`_z;+n_;D(01i8xlA^FDT#7FHs?fVoh0S?pCr#f-VO5Q=Hng6IjkO)0P0J+vPxI6i znfv-x9AX3suaASA%}+%A9O~rjfb2Kn$}9zE0l6noqO|eC-2DgeT_;gPHl=xt-Bl~M za*m5~4TktC&FRB>)8%MR;#da7%>Z1^y`lsIBm14H5jlq+?ku7FUC8#H2(>|&Ito6s zg1A+2cZ3x#MS6Z@V>%zP@99~d4#*t zz_Slbzw+bc-xW;#${oXV`~%8RIC#{kDWeDk(*_zneC)DIK| zT>q>P>nd7UNbXV(AVUiu8DKg+1;9ekNgWEhmxRw(U<9G1s1%_nu=%MuezI23!89IMI(3pq%Z z4@DF@15<>rMQYO4nWmEx)i!C@f1BPyy$KO+yN!c^XY*4E2Ak>af+;G5J1=1?r2#Az zpopp7dQzGz@u5<6F}Tk`nAQP~bCJciASK}Ak80V(2}zC1T1q-&L!D6VLaqvt|h zggyN^&o~Eq^3&m<9RWS%6%4m4ig)317eq>o*eJ(2-S+Af^#l1)7QGBkRPe#b6e*l& zoF{XF^4$rg`?XIaWzFq{f@C8pl!dC@pOiKy@bF)F&^2BpyDQ(|x{MRw?Ty}9u-IH0 zpZmzAXKi`Wywa!IH01G~J-_ghWxlxj($mXt+lh|(lP=d-haH+JF$8%h*8hNOw2CVB zuU^M8=xC?Pb}KckiOdNBW=ae$X1Oz$pit_ZtJf5x(qbpS9f2-0$V~9+oS_4MlDLme zhe(l!!gW71zXu`5L;uS$e`IKLW*fWz-;PI!9lA$*Jyd3b3c?r!sCZq6hW;1gU> za_Y!ReId?szIezL_vG~Le~Q3Pjy!waQl{1w#sP+u?`&9HNfv5p*^S4t9Pk`<3(B70 z>w#8KVl{-P^g%ESysHFTd3IBje9ZNF(hh0vvW5S|y&RCF8J_BppKhK>#ORT70@h4U z*O)hc2rW^Ta4BE3n7i&!B19DLb~u{szU*7c1aUI@i6FG@^n7Kf2L80?)I%}#1W))_ zerU{`9aD8RPQ@0b0Tk8jg^g4KmFe{|;3lFuHg$dKYT63=H=QU2qyny|vSm@zJf0{H zTxXKa+kw}Mk-cyt97PEzJ8f)=^ z>4{=H{Bt%E@H)1Z3F;MgDe+KVrll&3gXHl^+%EjY9rxCvDo^ zi^KmZ&Bp@Fs%DwD3TGW65=Bv&n7fD*Dyf}k)N7OM)(6ObsLud7&CAOl_0D`=a5GLm zKcB=6iFe`NB1*8){bN$l>Vt_)-x`T5D>gZY1ET%TEEMBZ+hm(0EL25a^M`-c>?z9i zM)sGg{g<)L(Az99rFcL%zE*n8=ZofONcbe_oK>tRj?cP<={wl0nehv3 zP}4Sj>o~+gRa*WH#iFu3kF2O(tD&U_#MYUo_d|mP6!q^1%Y@-st%tFi+aP%_<>Bt^z(vCuE7$zfK8p^-yz?0W2aW? z8?IL;7h@2cfheafuAZV%(wPWIRs@{Bdfl`l4XxDsPk2dku#aYG{r4c859hQDmPAK$c zE}Rr34FN7LA@L`jk{{W!{Lo3Mzo`7~lD|LS)NvpZQa>j18%+Oiy);WrA76-u?HEiEPl(9{glM?Yg*%MeeAY)gSNKnU+#)raP(1H4 z_NuMdOChyB(HXD%29uJ8Z<@q}$reTA;SA*E zvya1@gZzqb962sERN~8cc6=MAP>sg`Wi00*%L>xTa z2S_}@rV9Fj)_JW@Yl7>6kkH_{7niRsL^iti ziftH@o2~2qT)C(kH_pj1gN84c=|=Mi&f!KJPns`Xp9rQ%J9qXdiCb}0|FfrAR0#>! zn7L*(aPueo#WRO=;CnrntT4=b?f9eySRt8}E~jc+hc|BqWj^9=kGXZ_4KeC%qa-*> zuQ|3KV408;cnS^0iicNyMNUKAv=47~f>BcUa}UJGW7Y{0Sa~&e9|zSszH_P_7ntsA z2ZjV=2!Vh^Yy7Uk>IRF2c4KhRuwY7Zf#~u#<0IUkK#4i^(ory!&E{&_K?Y1U(n#hE zf_^iwki_tZ)hPrNT4&qU)aIN!poAQ<7_&#@omyW(@!>GVQH%+eNV$q2~1cH>; za*mad0K!i`B2;B_*gvRww}{VeG-mP<3D{))0L{#R@EY0L&+dvnQ-o4>;2uMi-iA9l zPQ&5COa!HD%&vYnv}#|};fJwHcZ;sm5ea{p0`}VIPFO2Fn61sm)dP<>?_OD6IPo={ z`lMDcldwiHHH&n{niuhsB`tC6tTEXDzLQZHMyUY)cSuaj%PeK;pNV zQ$gX~GRWR8YN#hsu)Fs~0s!#hOxRu?k|Kq}3w9Y75~dgOY3aNb#EVWIeX9o?62xhy zGQ4pJcx#kZ@aE6p3qv^;OX`Mr+4t2gP49p-l@WR1cr3W*Sf#QiqP)aQ?Ljp6@%>N= z>|?p3^Kl_1I~t*;#NP?LJO4T~3~IqsGe2~|wfER+d3~4*GXcn|$vTGKUrfYuvS%B` z{WIvGWgxAAX>>M$yRHCS_#OTLl`GKNb8PObN!_to_mUpZOmp9s5{H;BLuiRUoAPGec+SNscxMqnPfk>| z#YK=CJa1o1?ghAXgR90_)PQFtY`w+)7quLC0A7oGCL|dwiTLmdXmh(PCB|?{K>78P z8OK+m)uWJ2Go5j77%@&Ww9 z%F6Ai@*u4s4L9*HDv_RqpzLixX``iiy3pmE5V8v`SRaCCHPFpe*bxM>-(nm=Mc%Pb zMxYCwU3!r7wLFHNgdwt*$J^UsGXbMrVC#kGS>2Af=ppYs2d9Cfp4IT6?ksDb>QUcX!Un;} zqF7SLFDX{S=O=!5?m`LEMpc!jrS;d~Nbw{3gjg5~@0NF=H#A76`fIQybm8Y`g`sz? zV)&*-?C0W-0anB+b2m?U+zhq53vcDh;|t;i#C8!+xY?6KqqH1hDt~OIT#s){689Ua zH;Gw`0UDcxJXWWXwnY93>q?hcQj;6k5d3)FzL|ivj&}jY+}NX=k2;L}uEe?BBnSWZ zpCmfRujA&qx5vXY<}XMrYypMg>A>HoWm4s93&w@uT^$T_UwAhd2viRAbZ77gmNcfDJxg!!8kx*0#yHed!WV3|dziG_Z-(7#xRGbv z$mxNB+32vcm0$tlAYkasXFJ+xlV z8wK)a9>MbJ_x0k1O#(Zq~gMy$NW0Z=VY8qlycKIglKAr2`8h&=b<cW;wg}Ip{@JB){I9%_^(AAA3*#V+(-o*lubvX2; z6TLy4bxAS}u;D^;IMnn7D8*gH6$D(7`3IX<@3$*G%;Qh!vlJt;;BL3P%3zW$hM*rh zTNR!~ftKR%Aof5dC;-6Kw4d?Rg4I-DL0;UN;vECmdf+_C(MI9EGs<$TkV?kN*o!!KFGXwQPH*LSgV|beNfJ!W@vf!Xfdmn9YdORP1w4p!)GJD=&_M zQWUbnaNq`G*%P0xq1Y^--{9aJDp$=*A)9CaQU}2mzbnz{1c0fMh<3yS(v*uWKXN>S zWx5s-06&^KT^4e25t-O`&p4dg?R5j=`d5i-r-!1K!%nVD1MbFpHm3?w*U_T{XNORQ zX_+*SxV@)igVLn7(MH(rZbk+VNH+$=x32(qmW{9uGSM@!K=7I}ZSE#Cy+%C*-1)|# za`r@UGj9W6E=r^Svwg29dD3F;{S(Rj1e~Oo_1#H=6=2Vni+G(9`&HYuoj&w7jlnDS z7}_l^Ds7JMvg1rHWLxHws z5jQ^giXwD#K+^?lr5?YuY6dRtH5rCJ*GGeoFUGc1es*COlw6yxuj^qgG5yUR&DC}v zxVKeu4dfU*o1h^$&`wP*@f+sg_a*{x=ua9OeJJbfoSm|pMg$DMF(JzEwQ{Io^lk0r zziTGYq|OU)#n;o?v<^L>qm3HnympDMk1@}DT>1Cb{$cc0CccZ*KjI?UjoFKeMBL@A zxes4Q<@FDYt^P-__go<&h^GSOXOxh{XVxXW6TG`@kr!2LV+jqAgA^~R5m165oweCI z%IY|YJAw~F)Nza5Fk##iwCFX=m`)cP;2^H%9d(QL4dc2wrDzK#&(e2T@ApgL{c))R4$D86^lP!^?wm zjuQ;mMnutm!rmLh@>Rp^aC?wa3O_$6ts2j#9abPPZDTe89@4jtL56(8S*@C%rv|Iy z2g1S(@-ndbVhG3=iU$={?57q7WjLGkX{=PqjQC#vfAitP`-$-yZR|H z1v+<*tto%`o>DO`Fj;Taf-YH!*g&=H049>$i3(tSAU;|v8rxfx>~dERO6|;qFs_mi zYaq?bre}=dBfjW**`(NmTu=%9$46SlWa{_T6RR9gCUw9$l)dzhi_gpnL zbD7+n>utR;Gl_9GtKue8b=X(@1E2A5f;w{D{W|a1k=gabHcsX>JXGuL#vW*`=%E6f z@tv~8MRmapbqeY_JpXFP7w$v4{bk6VRU8a5qZz_%al~g}IAVi545wb%V*b4!q;>72 zWeL%Y4}(l2NG+^w-u`;x!%7tOp7a>zB6C}@*m21!k7@0_{nE8p7}Zd|(f4r{t$vy^ z+zHilRPd{)!+X#1Rz;3vydrv9{F`bN;=0#jOLQtz(tU<1@=7L3@oYvpnJ=5d6BH!~ zM<>SOwVq0jSg&xZt2e;5@|uzoBFeL+-5cSPKmkf`*_4jWOZ2X5M0hLh5Uhw<0Nour zdn>|HF;dNDv1@c4`N>h9tK!TwY((GNly=(-_VKaBCF@ZO=@S1!BN`#=K72u&0ofx_G>}D1*Pzv>V z4Zh-{~=R&P=6WC)(rh38V!L6xe1L8}=e`Q&puQ$mq3fVNtl41cs~pUJM@a2^t)EL%(f zrQ|sos5ep-v?BRiQ>&>~W-&zttrr{%`WPKXfJAS;&?DB8lCy>I170F+5@EKVdi=|a zJkRx~9n7pzMI5Ry2K7~9__rq=roYtCVU%HaJk|K({wYvj8(ZP_gM~JD##7Wj+%JA=*-1v6B2n2~69ICp z3kzkO60c?B0o%|CTD`R*3NhejSB-KUq|O&t*21pVa=!*CVS**-vh7SFJOp>*g@z?w%uY9p-iCKobB?emwzRj_m2B zN1^h>A?Q^eu^6;)@X1n1xWSvS>IZit3FEy)oZO7oQWT!yjbZkZzgguOtVGsRorhF1 zhySU&bUC<#!vr!QCqH;s0hO)3h04^CXytSpF|`@q!Sz4r^DU0#8(Gl{0lMvTgp8A_ zZ~IbnT&2XLG|zzue%_ZwfkZdL{)b!$f?ZJztqFJQ!)!Cv{#j4nHCoRy4r2t?TKClX zjl*(E99ZB>E+T3|18)w2^*cU|$T{)d=t0~>Ep&b;OM=YmHbM-iqOF<;XlnPX zVip`P;oy*0J}ey|;|ZBo$v1^PJ<>YC0HD zfR=zk)fQu?;77anC?Vv{aUnLBTF6Zq!q$!g5R2oe+O1FB+ED-*G^~0PhskF+l1(;- z+&>kzR)6^a#dJ76v8>8PZ~S(NeE4Q|wSm=!bn~Tt9gLe<4Bi@_ys3(PA*qP7d{Hhd zOWzWgG5Z!ue#N#BN}vC<6mt}-;o3gEKok8HuO(x%dXG)whFB?g0Li7BQS{A| z`d8S2H;f^2!p&}46E2$f;P|U&@C9M85ZkNd*@Xaf2=rw3CR++;p}AEQ#)6n*mVV~t z{(Bt?VX1v=U0@vfA@rX*%JA*9hWr}7F~*w%AGnh+DsmPhfU{nFToXIn$#mc zW^7%ewUaoZbSyN}8x+JH4x|i3F(PWKZUs|FWEZtfXk&{%jR)gX(%tRmBmubY`O45c z5j(P3bPM^@tw2aVxtzojPSuux1{Fx3$8eefj?ss(m$9>Dx0~CQGh$_C6b)+KWZ?7x z{y}zZN>Nt@B+R>2+y1RXS{PJr15K)1G$D$*HvW4!#QE*>nx;Bv9~?LS!f560QuXdN zVLyNvTrNr|NHpLWHg;5klV9E)9`A3%R1yWNfUin|WZWA7*baKCg~v2}M`y0zW$w1v zB8Qg&G_o$SLx+H(X5FYJv17*o%P%V%aQ+Z{_&XTYg>d`_lWe@98i=LRJ}Jif&nBQ6 z88Pd<@vrOITMBuy-B3u4_=E3H*;z~U;Ge7ONIJYyR)^*jbf|=`Eb)G0Qq341(&K1+ zKFy#XJ!A8NzYlL~=jgm`wAn2a_nUt+WQYTFaW_XJA9O&{>YQd1EcPf>L9An;tWj`AH*( zlaWKtjT_HhC!bZ6xXrgN@SN;F-Ns)ujY8;NY zkHyVjTGq)i?d*dhCJJZMR&F%zQp+y#)22zNq5wWI*DMYagirgwEjF5m3ob5in2ndr&;GpY`D?e`=?(~ zndwQ$_jbgcyZE;@HAyHuZ2g@)Zqgq6>B~ZEdRR=P3KSH<5|N!vbill?m)q|^XxtYV z?SDIQjDBncY0c6GzMq1tWnXTA=)O*LrlwfyMlA|8hwMB9bc*fMpar?c^aAV;xmZ&~ zb(aM#?J&UY%L>9m6VKxsR&QLEKzQ-M0`=d_0wXx!6tMW-K!e9r^@^@qBf6XTNWSjD z_dALT=bo|VkH|9$#2of39X%Pyp7}3hc{ryCW1%|O0OeoG3->nrZOBh?O zXEavwvueIJ3H#Ku_A#asr8{&`1nVAO;%Y0j@@ob~`xxaA=%4YY$W$=}S0g7pjhlW* z%uI|$V$$3z3MDxQ$jGI@#yc9i8Y3Yl31n`dKWa7jq+&-gA2mgHNt6OFZsUfWOVFjX zaXH~j+1{OF=|Kg5jp!WrrMg)QCE~aezYdHH*l%S|TQJSq!8q3(hS*OMFRj7i zV7fw1S`4$eqF_ljyAm~v)G1=7y>oYk zE(RqcUYnu#fcPwo(K(y;!b=DP&U-o*$lpqCk-;NNu|k%0r_NnaRJl&NIeX}DU_|K> z;rMF<65!1!Z&>afsY=w>G4r?|vf(Ss84k5JuQ;H(2lq9pNnHu=(jQpmngmFeHq8cZ%BoSdA5xBc>eRq=SO#?s1;I-iX%3;^7#=h`WvsSM%2%sWi@Q2qJsfBn!9*Oa@d(bcAR~ zPfXZ>Dv?z!@SaW)D@Jjo;2bCxLNx>vm|MlSEE4Qs4-iahSkzBM!I~GEVQCboDO!Yy zq`s6IJ>16In~WYLZ1FyXjNgXT;%t)2E1)sK3dDtk^ zgQz)o>5QA<3tkj;5)>@%CfRk{EIK#DW&>2$4eIf5XhlG+{YGMqof^f)w*z(OW_vsM zEM8y~45;|+?dPB_Q)}#sRT}JO)pLj<>f(~lTqwA#avv*dqeb>%vQoWhm!*k;J}Dkb z7(C94?Ni#$TvLM%*y|H=1=&_iGIZ zkJ7+28^R5x7Wh8SF2)9ZEB624je^lJ(!Ng2IK-ze-t}mNv1APNQd;mL(2C*c4Ud!@ zIZw!>RwpPV?0&5(0d~A$3&7;_x*bHPa>03$zUVUsQcQi{WDc5v5x<#cd&z&c_S`JF zA7a-f0I;}UDJ}WR%(9bHvW;|hniz#Hx=VR)Kv=;N=J+TSc`zm1m96rx+Rru`4?65q zP4?b^jv!cOEctOAtv_2q1kMWd2GXS7pN{td)Tv-l49#4uSW^quQ3HdQh|e1d4$Tl{i)Fx8*w zc3T6kST={>?kpG@eq{~PJ1$bFgYkEDu&7&nytUJ~F=I;0msMe@!i3$6iE6LR6aA&QwCt#kV?{W|X;1hxf0x;@{_h?EfR4C{u6yh?I#xO>g*08#^w(YR{w9p-Z< z5Fyb0h2lpe7BlXV6n9jt``n+oJ?|Wm<6!*BGKqu!PufrfkM5v3@4SzNrBwM>fqWs91N-dy)ZGg>m0cAlBfS*Q ztLg=Tc`t;6+bqy&+9(zP^Y;H~g!^x>KPlv2mIYx>wKTvWLp!+EGCrD*?C&p`wQ&Wu zZFN+iUE@)^`dG+T0E=amQjzj$Rx#?4QRU$9fMPE|9%Q(&^Iw--E_f&m_R6jiR0(ML z8^s^(^dO7ev(KVfSQ8OHPg;H4?fbGSVy+?nS>>mMl2IABW-Cv>%emT@<_wwdR84{G zOl>V?j;45T*iiYTk_gFd>jwc;~y3_1}P|NRW$THz&Dz{=xcY4o3 z3N|ALhiXwyX8zG*f+olWDUGfiTkRMoZUjS_H4KWGNktM=k<&AJGQ6Apt9B^S5goWM z;48(XQAD*JyD#nd$qQOoDx-`WjI14sKeu_Bl~_m$Q47IK7B^DKjAQor}Ei-rNE)=yWh6U7>{;lALO2k9*+Le6O|nHZZX7zjVlJmB729WJf*7&o1nOuVo3jCnFW zr;l)_+aw9UP+bP&A!-{yPRfIc*ZKky`xcE6j``|5Dg!{VU12UZpx2*7gmp`dm8;dq8m? zBjiwt#eM-1vi1iyy;uzVyc3X@*^NY2F=8kR?^cT5rpV$1;+=`#|JX}|hyw=*PG)Opu&VqamP2L63NAlVB=cj|rb zjOu7WwiVJdN9f8KG|wg{>QgDIw||=vHTFaX8x|yLSn9>-hVE@j1b6I!`d6WsXf^tn zu-jm=^@+ej5r3EUao#wj4$uVYWQ@2DZsLQHd&#>bzB_~nSiFhb4jUI=epT7%vi7n& zQyq*PcFI+{^E_(UZ=qT7AhM|p+Q{OeuT37xi(Y@}D2*a*tfAjU8Xu53y&i4Lm<%9{ zc)Jt7CJTSC)!-rDVw23^_nuaA>$zM5pD$>g``da~PFAF}5+8DcOEXG1%+60l3j` z#G=5^9zl;s-3oKEhm^&Qdu13y>f?OsLIVB3_>YY$ftW#p7S$W=kRdfEX%$~y6Vd|l znHfvAKo`})(g1CgmPy-&v`Qhle@EZ)VD4Ex*bV%Gtn!|u}RwD>4H@ZLQk-Lvek--9F z33E2~ibf8?lLl&ot6?6`!K}%Sh;LL-guy!H^TV72C`Q6b%aDfBKZX>1Pz@ZlD^q`L z(5U^8LhqlFf_Qdy$~AwAPMy?8K_8l;$rT5|L(8YcAeEK@ljG@WKH09oaK!E@hfFp0 z4@0W87@*!kt(MOK%N1hLe*v?rMBFo^XOx2>5vSUKgXfm)5aK@?0Flxtni=I-XPWKj z8hB_+pYy5Z{HqiutexHa_7vNQ3O68}8`1{M^= zTkEMe6;~eOTPRAF8k zOX0TW2A)G=XPe`LdnSaUX)ck<oav%!C* z0^4u_xPv!%#lCRtT|$OR_;a~EIW%X+G1NZ5>XzsGM4fZw-b*M)e8xic`gQ%iTjeHAUk$rrzB#UiI8mwy~h{m9rXNI*y zQTd6sVjnD`^=%LqNeCUgSL^TCFCM&|{Ps0IF3T+V0ov<=+zWSKOo{ub!m(9Z0U0vQ zZ^1}U$^3;%Y7R=e8)9Szb?9g@B+#@pG+UDT{>d@3kZ>;Q8*VSR${Ug8gHTl^yua46 z9H6?Uq_5t6-{G~q9+I2`C`3P_x8==2KQJGzB}uY9{5?Ohmy5f)2EfITLc^%G-!o~1 zILQG^=0r+UX3rCYk=TkXz{;<19<{cb0jC0TfBL7k9-ES+=d(|w?lEO1Hu1EWw%lh6 ztVl2~KX>Tf|I*^sRkgFtsG5!jCB=uz?Te^+YxQgBz6My6^dC!h16m6H{U^An1;^pERC<);I8v0bSFlq0NM0014i2NIj{E+rWxKN6c z8VLh{^cZ+L)6y#KMgiH$3)0gXeY>p3?a|C_i>OfGav^xW^z~YQzRjlv{4I7)JNT z&+j(4D{M9zkFaJwZE!?~>$DCGo3BI`8BbL|F}bW_o)0|3S0GNtaa#@s!z)ucdSm&M zrjl05Dq+5%w(Wf6jHjO@cgLY%SC%fT&I^;s{9(~sDlFk$q?5~uCG{S1=iPX{ImK2PnsiJ}D!m#^4V@lpZ)IyLzUPpIjfT)T}701rHG{6t-~ zwfmTGI3bX_sQ6OtY@&eW;**Od&y>}jrBhQm3ypa>B(l`wCrg%Z(@t%Kt@#=@D{loi z{wuOW$u2OC_JA%)LbdkotCGPs=MU#ff3h=ls3)sm#B*$r3;;J zTyKvK24hJVRaQ9o~pX<;%0qbbW;ibH~(i zXw^8pHDD%nEPiKdY>qrK&Ht2FO9|+;)?M<7g-Xm;D2^-_NJ5W$ zED-o|#Ki$7DHSc% zJwKMW=e$Dy(eA6(huLTRR^m6#PUZ%=cBcBpi&ij>5jFZ1yD4?8Y)(S6jV7Iz^EK&) zG(j?!GlEQ~ZaT$z5|SmB#U{KS4$9bi!mh-NeHuB_ zK9jMTYE%y>;OIVdLVF;ie-W~Bm}X$d&F1|M0Ea#A5?g{0?)Y&TI3~m=T>=L}ZRxbA zr2QyuN|z>J4?cB2GdbwNI4&3epz**RBBy)hnqdKGMmhKpK0s_4EdbN&XPIEM-Yxi; zyK*BS!a;I2#DfGj{Q?~oOaps+AVFqhziT}*%!HS##JSuA%K2B9)7&y+Uu=UbH&=Go z1e+#mOnY5#o%Z2uXwhEa?Z3wB%kueVW>|rZM*;RKd_OrsI`a z9(ZyIn7}u@kLTn7C{%rv2K_(`@l?315J3_5F$edJ1FBpD$*ngmdbWrH{`ExEhl`x! z^7=z!`AKzFbRlCK05Z_chLtKb2Gq<-N5ky1Cr74xrVj1+w@ouWw(ZVmq1FxF{5eRm zL~Q@f1kI(*FTEi_=6aUBq*>A21C{D19Uf@e0;q*%Cs9b+^*CesRG%y zE~#PT7l0%w&@W6t)4Hr9&2s~U|C9NOdHvc-WDE=aF9xi~V2-?Gnvgvt3ZzKxZ^SbS zF4MJOsvFXHq?@-MOmHHk^mhPEhold3+t8dJ=8AlN=0#XE(yS$@fBz=y zFCIso!O!nJ&$bjMDEM;ItOC_M1oPt6g#J`qm2$fkHQ7 ztEtD2Xu!J9o*z+EA7*TQXRP{}m4f@0Oj5kXOANpp++FdzQqAgzGw}V>TcWf@_W}&y zkD2XJ>KUhmI(B?I`BuQk4;7Ia1G{V9V3L~e1aQ|Lk`xRP8X&B)k|E9(Ju`k{Z43%c z|7fS$Aoa^puP&Cw0U@XTAr0=1KISTwRLAzB)`)4r^CL7{p0 zHPufh5>Q`cS<#&uxzlCM`xy^YF>7Dv`<8k3sF&xWU&AcB5IK|;mpNQbJ+@xwC=WD# zS85tJaG6Ew?J=Sseh^+*%G4ib#BQvRaJjZ*!|HZilPjeqRpiI3-y1i!TDlxrNP?g3 zAO0J~;iA1wK_d?7+S9}F7DL2Wsk^)fUlq<#r5v9_vq3?$yiQY*ih+E*hcS@-ZC4|D z5%Vb9A}&J+{l^L@+(`;=UQ1ee$nG&?`-Q3N1yxq>L^6c}Ed}FHHR+blboR9^=bE1J zcG0R%^fuj{0}GW9OYw_WbU$nvn-%8yO`>%R42(6xLr^3!QU%EKZ1=(r{>HARoa2*e z;e57@q_!(fUvum{xVr#?7(oeD{grp!D{j10S#yck9k{$h*C~RhtZ`V)8YL%#_uELz zP+Lpk7zGA$!0Gm01}ck-V{IQIoOF>3WJZgZ-ujhGgUqMbVR{yXDI^`%&db{$7e+;GeqKa+ik(`aedR1G8JkhezVNipUXi+>B-*W$$KUNvn>ovYvOL87Uk1s^P*7j@@d zskdOTEgQv*%Vp|R(m$kiM#OZA>AwA!W}{3a`7#7b&DdD@`BK^p+ganv_QXs1N>7_z zh)`C$5)B!x^WB*;aDQ9uTE`W)uZk5vn@W`F@&+uS{(v9Gycy_Ljr;f^{;Ea77a<6N z#p@4d&5JqXycSIwxvWyPoM0(laRfFtNXKi+S2H8pJ(W*n68`0wI$7GCYNQ*EeVbKN zc(c5ZXCYTQrvUw6R6h1I1^+;U5tMTfPlft@(k*rn8{2xA1q5gF^QL(TLK?Jhi(AhU;}ZK zqcPAWvuM~IiCwc=>35*C7)2y!nW=To2Txz5smLMn76ljv6yObC{ntOqyU_YHg%5XS zc${row<`g+N17y$M;yxCNg7mXL~(p1BoAukS)7=yh(};pAw1D2GDVNnI@&4kh5EIn zidxbzW<7v7z*jyrs&gDVe;E*MK^w|kZL6tHs8TmBo<*VYd$h^UPv7h7BmzUvOh{a) zI>DeAQ^ykT*}*r(C0wG*xNPsIm-Y1Y- z5ewIXGjAb0rUMic(vI$!v6!qMt?C}5{P(uieh+?YTB{8C{JGV_+@;uldLso};_ro8 zj;aJ84rIn*U8$mt9MRxqQCL2iq0V5DJOYHnhk_zxc*9Q{kjA+Y?8YK{d#fw zC2n?YD$Fu8`Ax8sugJJ=FPW%yO^UPLDigDFO9wVq8+zv9C-+pRd}vq6=8f(|&=+)1 z>{3=W)2aI}e`IP0(ww8YPXkkHqqP4}PT?9q$}MfzxSsXQ2x$S<^MHaIN7oN&(!rNP^eQFRmR2mrim5^44g5*Y+35@Ko zv_YLXBk(TZ0DgrSgu>}-bKSUCJh=FUQ-00r>`{BS-?Y3@_lcBpLWhFr(V^t5|EZ-S z&RzAQri&GbB{Khba6C%)KiZgAESX}n;T+;lveDBVOE%guXY|P>Lsw=_;X`w$Apao~ zs!^iozE5&c`ZEC*4Z}Jzz%cSk#^UlED2A*4HzMK&s^56d4~e7d0babaFkWZ(2neB& zG{_Tnee>*6dF)roV`-q&76!jk%rzOA_)p?NvZvtCODd$DHUhzv-81IdMMEH{f@nH$ z!kC7A3-Gvd^3SsL+PFNwMA1OZf~corTd6p=BGZU6U?X8Kqoen9Y>+$qcs|pu(hEzS z7cEZPt4CQEQ79M!8+HNL%g#+jsb55>+kem^WbWiZ7q@o_x%tbdj9)rX*mpd7!gbve zc#_sJzM$(Eh`-Ot53JeVxFG#XznwUJ6y86Z{xCx_E=JiOZjSL3L2kdNKdbYYn$&+X zCoHzs#oflz5C=jj5l_>!FjEInN4Ld)mXDSyuTJBS2fa1j`fyNm9{Qf5c@G| zGKo5qv#5p{$|!;FNdT`9ff)#zo@fTS5g1V8NqCsd%;0@Ri+WqejJzN0>ye&vuEx|0 zkZXFS$mto|Onwb`3WC-m^<@=NqlhSenZ(kA2!e=fBJfxg#vi7#9Ce-v0_0o=3|?ty z-L+sQ-HW9{2SPYZ2N^6rYJTn~u9i`hLI(UmYeOem2IPBybLP|3h9XQL4l1tyHbOY@ z)Y?3)nT^&%R=ncVc8q|ByKtPX7mM!O+t>Y7ZC|V16#JAd1V5r+PgKa(_7cKoHB2>rIqFKA4~KOs(Xg4z7p? zgJYnQw*5`DPZ8Ya{R04et(<=|Wp1BXYaR(DYoPorG|%{}Ev_`BreVV5cY^Ll5Oc7T{QA<#z|4j1HWuFX~LqNt; zV%PkdebWQpU?{xEC_@#X>7f5>K zT6upEwW8_|@$$PXKPczG?%4&Tf+%t1A;}adhbWSu= zEaf0+mzJnkPW5byG6+M6suhsCH;2<4ZX^I6w)GBT4I(C+y)$gsIAM}#Gs1mVpTb^; zjV9T^?PrR2n!Yu{@{}?2&R7z3H9jla*X!QcDZCE88vjO!Ge$GM!p#RliCv2(FE07*ZdZv%?cfX|dq3%hXl!9hatS6w> z9@|`zY(N#YyIWcnTLSRs>X3h*3nf0F6Jj#Zlg!~SD$p@}5?6Lg4&jH`8%EPcVV#B4 zj~rEc(qqUvG%Jkv^@TeL8HcpO!K~2Fpt+=>STmSp$)Ts&I|zk+sn2Dox^8l*>KJ2^ zGAUZpCpUGEgPEHB{P@sg@tmg&FYmB;q#m1~26o5*;k7YxxYW#j;LdI<^!^5a_1%WX zNHdVfshNgrubA67pQFl(@D(14f@+R_v&ptFX)UulX8m_iYdV_$m{|8P3!VwTdS#G6 z?h@vVyrhIbJRWraLF9_6I!s9!qf3m7e(KCboPyy=Ka-;l>IhOScbAAdr?dm!OR8J1 zgkh7mea4cU%1~C^j3#bNZq2s?<7pCkd1Td1E(xw#QF+&Qs$W36gy2jMr8fm6!s{{l zS2HKQz63_#Nzn0^fS-g7>h}!=L6lutx+pg3Q}ZVol=S?#HVU7JC+$ht3|KV{Xn#l( zfBWf&YEZ@Vnm-1|r&u9E;L|?*huUP zOJA@Sq)ecIi~)0}ME?0s1`owrX^;F1$KtQcFw5rLJ}%O9zEvij@oe>B%t7Jh=6Jk% zn;VmnU6@~Vjpn&6mVZok|J|1_Sn`gE7?xfgTm`wcfEJ_TG2h%L9s!T*Dc?ADzQ(<{ z;-Y225;H0qeTt?Qd{*Spt};Ocs

&=8OIiePr{53%FT=GNt|Msz;i9CzC`>kH%e1j%9iq%(rUXJ2B9XDDgkPae(TWY8 z&U}D(dXItZxWTmux{cBjVW9_-0s$3U7A%7baQr-cKT|S>7MI5|cq~UoC{L7J+&T81 zz%>5h{?3FZHShnlM;RQ4YOL{GeYl=>)=f=9HAW@Uvp)Te28d3?!5V5rL&jg1{(nQtgN%cFk-C`IX>eaBoow5Ui;3 zHFZ~0li-zoFf(tpP`kmxzN(mu;&^NofmQ)|NxgN>L?5H9Gr4AQ9bZSAATr(o5ds)w z(P_Aq1U%`j`me^5cYa`w(Q5K})|T(pF*!DP!-!Aw`O)3Ho0|6rUG_WPcD?(AWo$Fi zQ8rjstmKz7G=0F0ih+}oyl)X*=y_t#LD7LDNE`xA(jZrtA3k6ZSH;~l6Oe?<2vdiY ztOY{wb0sy1F!GY%Q;W6_FzyOMQ0PSrC2z|#Qt9^|$_hIvGr(1q&Epi{Z^ z>}5dPnk(}q?CNf}F&WG|PM-?X`h|g=czXMcrl7sWJ3jVNx@23TCGEdU?Q-x0mE3%; zb9=-FLNuwFJd`h%`fMxFK!Ma8^}i?t!Es43Kaj{1hz5QD<>)PNJYz95arpKL>Ba4d z_kA%b%Dx_k4U=$BT+w4Eg3?5YGC$Z~e@z-Rm zrqEBf9*}gin*HDvH#qQK%_c=hV3`Bx`1%@E(F~k z{&MqFu7!`FPTK2UHh+v4*sffYs`(snr3lWzJsG8}JSt|aYz>b>t@$)5VR0NB1H4sM zuAn-UiUiBHbVA&>c@bd_&k9<0)fvPP{dREym_CU6M6GTX*F1T)&_HRrl-5Y=6T+qx zCWQcM;nKue|Dx{u(Du<>-B-Q(97D0*_6|GYb{s9!YNL6bFN1~ddECl@Aty(HV65t9 z&gdTlVkAJhTCMWI#5JpYqima2=##JAHb$3sOhqtU;`*cE#vA~4#m8qh=t0ENx@jxG zci%R8t8l2+-;0s4bG&nF=wH3B+iD_lb|@JDW^QXjZU-~<)vxGTxxu8yP~nQo>eP;+ zLy_G=Ogel!`ne?jLLhAOS)a$5N5xAz?(?vWjBvM+QWHXjEi`h~ueiVDcAg^N;nq^! zVDLC;0fCwwU~hg@gu$sLRn00A)`U?K50w~*wp1wrN~bFmi6WBDZA0#}{LQ*ethR)f z>&O|GfpfE^GvRrhp#aH~6vwW=8q^Zd5QGP8jYvG0!KIQS33+0!=vV_Ge1J@C|Nk=F z{1HrqM5&WhVB}r=rmVrG{4bXoI4O<|=s0>M$;$Z4W;8UJ`azR| zg;Pgr2$6y+2rABVGGMueyi$^sYriagayy8|7h3R3nl{u3yiNP#HKgre<7$$60ZC~P z-kTFCX{P43HFQ~+b*X^-Ytav1dyfElSr+--XUTB+VgOcdgU|U9pRf?%hYwWk0Itri zhalNiPUCVXZi3=SpdSiRg<3h@!=zv|Tu%On)ry8*1| zewns=8sIY$I74z*v1GYRMtF2}Kt<1m_an;T5RXq$$j#QH-Z5s|6$2QY5A}rnhq`I!|k$nlHB|9N5hMH3)Uk`0P=N6ZD+* zCav(G3MtoE&_XP(M)`yak-@Y1qU7%rA zzjdd|_{>gE^&i)e2jn{-8}@8WqFeAT&y>Ex=OtjDyoTO6jcm75`O>Lk4f0N zZ90-Q$ji$Uf|aE)=CyZX;D}pFuXMLhQ!N4MF-oniJ9 z5Fqe!V1hti;d2QcD0&B6Ab9{n&4(?>mZW~-SX~{S~z>!Wve#=h= z(_WQ>Qe+)kBmC!utaPP+DGdBz2XUYK<#%ezB1N%@U}ZnY{}CR0G?1pP9VYT=w- zq4oaUN`~dGIH$N$T0r7zF60s{;!04j+27q;86HS50XYO4Y?3Hl0EWRXJ81LmD*WVnC2Nxr z2X_FikfCceR;baaAq}ggW3tlj&rOB@evUi2BG$vx8cAhpcZ;OC?nUjay`9b}?XPKD zgB6^5O2%T)@OhR}u5`(^S&<$a@!#UY`(7^y#R&inrx1DuKx4cD<@$?DXX;U9q@5#s z;`*oc9P5=CbyK4rNM6mbBQ>Z(XhgVIkEC6rRS)erU=xd+JFIBVbDc(or4j=Vh@c>K z)j10!d+GsxaVD*z9eA>bfhqYA$G+2%Z{^7vR- z>+G!N;O_oL-sm%UZC^)XRsOLkWV`#5jIyX@znoy#gm=B zjALA?$&uk9w_;a_7qkGfnG+n3{g^Bflxo$u8*N48`_dmPBbDl?5zi5YbG3W>I{5$j zJ&a`U`D>Cm`$mUN55j$9ye}CHm~#-%+)I-B|EZ9foBN*MPXWdM({w#i4KWUDIX+~d z^m=IHQiTKv2c`rrL4MLxxiGEFJFH#EH)i<8z%T=oIzMC>>n-MwqbUcefMr;pkp3J= z#|UmX1&?sZn*Hi9dvk-$cO z;ewpcj1{lIN>`)Gba;hV=-~5A>$hzUMPwg^v2W}Yix0oZz%)Tq!;nWc0xM0F{oyLP z1YSp6pMlWrw~@Ka`X(A=S`o4S5yJkGbzNuDGypmh5R}m1Z$wkKwJulw^TiE{CI0wO zn4`+4Be~u}{Brem?>s;qzi-KRB=!^#IA0b%=nNL&co3#khitNV0ichCJ|@8{Uh-Rk zOO=2yKA`lv*Gn95O_5`$@=e+<^)sD~&hZVW-*KKfHQb2?$uCw{3tTfr5)M!TIbtOs zo@NFc*kjc`a8jVPY9ZU<`m+X9;|zP&jyJ~7)4GprM(nG6QEJGgY>qzbil}WC^CR!g z5%)!DEiBwm2?vdd!#O88rg3wnD)}^E|EO!v$1H~Qi&phvwS=xvE?!Qrk7PH(De+~^ z4HC>V)%|NumREoWNv=2IuroI|lCL~@SH@B7USOX(Cc{T7?frlw#8DlV6>ytAW3dDH zc`JVfCBls#ern5tm$&%6!9h%?x3^%U+%;da_g2vcD#jj6&@=Vi)jgV}Mt7gpO%7|j zVD?o%WdfR|RUN9j80j*qI(T31L#@KxysRN~2#h;1P%4N}=R|}6vwfG2YP6n#%4y8= zh~G2>=~eY9Zu&y9hZ9XuBqv3?7B|w|ue8P`0#b$L|E>(O+l$Ql0;G`!%g~v5EVu|! zS^OSbECtsY3QNapT!WmyDi^y4$n|jLyq;o#)EQQ@GNz77m`UNd91}K*UFD%>$5V9RN)AM2hz>vPKn(~731fU?F^+eFmy2&|@l z9{vF$pau~G&CDFPqVIO{@Di1>K9V=or)n`xRAUFfnp9BU?rZ z*(+Q2-m+&|*(-#Qy;t@okxgbsC?gUwlkCdK-dnQE{kxy@`4gTO&x_;xCwyKwUDtIU z$H7D_Qt7RTi&tiFcOoLrLxz~_cZ$Q?voHcy6JiXPQn#$%OTi7g1dzihCP_LW!rU6wd;1CXgAlln{Iv%)1)0qw%OoV zlQ2kTZ8tGJawal08pd~v9e;B7=XN_&K%{1^g(**Vh!xuaL(`|}AjvV+x8g;^<_W{~ zgqKyb@h;2F!gA&BCXe$?+5Dv`@qDQ$N`|V>FK_Bah47DRJM)BF7hg+PN{FbS!!lO; z!YmN*@E`!UZR z^=w*Kukd}bJN`;yISn7p(hb^hRGw{rpsI4(J8#m{Pw3_yWUvUjJm?DU<>rhQ49Y9| zw8Koe$H4&bRd;j%X5(*F7-fu>9$fkb+tg|EBj;p{>X0M*ZQoeMZO`RzSvQ&gvkKQX_Ho zkmhN>IAKDGu%sVark54M4rLvftXmQE1zF;i$wI$uxXlI87%3+=?F34=oe3m&@@veO zR?g8l?p!2!U?ly#-$)XYVRJCbnNgD$$l+*6l>QReK{DT=yLiF6IHm6gHB&iyu>f|| zft(*dM(0SBmh|hcSPkRy9bS!yg)f}h&pv%h-3Zpl?0Vs;{jRB>$Tv;!PKQdKxbiC! z`B6r+^*7sl7zGi%A?OuDe_PsQvUo@czP^kc$Pg*-x?z7?IVq=!-uSzjBmV<7nFd4D zeY!oOk-k@vWdE}Kafa-*X2K;-RQ-pjTLoAIN_yL{sh3ny%q~U*F_g*f-m1L)!111G z#GN~Y#oga2u!QF$#$K2`2>*dCbEI~gVAwt14y94=UJP|ze!dFV7}aMA`iWle`HaRd zx|w;5X$DNxuVZDI+4Kx&T{0`XrgVej+8%swI$us>!&_ooP{VI>Pp2-A7JriFxv?Sm zwCYC$%a&2t>boMp*}Z<572T3h!Kdbe!?+q@tQRE&*i3a~sXBte_lP>!Yzk_QTW2bt zo|h3^?=GcL%UqR1H8PrBY~Sf^YTxl2}`MvL}c(nZKFT=e5 z;>oVN7wl?1=s6wmL(+RW~|a zyU|!ew&h7rp?@Bvy@{fE-&MJlD-@34wws9N_>+k>V5Hm6+yhrFmjY)WD@zEr} z(dU-QWu5fPDeRiDe@vE_IoYmDwzB<+&&3Jpht)eZ6EMoI&%S!J^zM;{HJOE$P={~k zmQ##OOC+x=!z<6Ie236B&V``d&1QyL-EiCiifhI3JAMYtt#)ijfo-jL#GAN1ZTvA! zsymP0{1shvG#(Dn=->47pkhHg`W`c=&|l0M?1EcXd;ag#bfp^aI&Y)kUd5e{#p23Y zUA%-mHqYUexP>`mp(-@3qWIp;JhW_GhYx8o#rS;2`Aw^@gLp?uN2Rt^E zz_pa$qp5_(9Q?AQ-%{V$MF$!i$mXpOcyD*v&b${V>HJDV`arMR`lgL#ax%NE;C5kD zwQ&^2N0j>uysu=}h_8+?>v&oDta^!SG4tmM*}a_~mvDS%kiM69hg45xbb5$5p3dU? z-w=HNqjn2@vL8X5JQihN3pG2Rv>uXi)+%H4ZG6RQ{&0T3jc@r=lD)69PpeMh4F(CU zCt^c>*pjED4T>`Ar&q&c*)BEKix>+18Js<(OOt3ME31umgm3jm)0Drqc5=SY3d5QF z^YHJxUf0T3^%fmY1&>AU8KE}Nw2^gxU%tB%KX~`6Ct8#`CXxSVB4%HQia7NHSvlo0 zCOse2B+SYS>Ne#hajTJ1B}Q{b&qW0Tot4G+uUX5JneCfe2&A}0meS28WcdcXvm)=b z8{W)O^YtOdC*6+sqE$ZZO?+WGyhT=9N|qVs!cl8a@bRhGvc%7-dA=7eAMWO&_su8jhgJ@hI`V?n+g$dg<(c$e588xw!vaYYwOtsm zic`H=B-$Diw=E-@f)l@{%H_Crb@7NCZqzu8XQB6>% znq;<+LsHQ-4IbR~Ke>StZhyu(%kM14C-jjd7P3r}|9*|__pIjg3cI(sx3s;2g8y(> zI(`_9`P25^G?SOUm~;Of?uucw-^l(xd`imZVib_FU+AiT#7%fpjWk^-P3^4|fByNb z1!HmY^UraDz5Sxu?3{YBCUj%6+93hw8$014OIx+4+?+-fWP=ebf&n!6k=-h(vlUIb z`L*6}#m`(0(?fcgbp)fLV=F@`uHB87XXyGFOwh08obhFwBNfwPK#;F9Lz>Ho$w#kh zdOOg_kP6e}`KLq*ngEsQ$b1qu+Izl3)(R(l!5s2Enb#z5-FWWk>qu-m{7Q7a>MpjL z=~FYln!@sU$=OElc(5bF z?j6HEm|HSsIs3HNktT&B`>AfW*<8kR`cZlR4C=6N+m^?b*=-?a!4t=yEL)ipmexcT zDs3K^4Q~i&Q5aO91`M=VwElj%m3PLxzf4NPcE>Q_vO{?`DJ@><8$JEd%Ma`Kjg19Y zFrBh{y4{2Ay5omrAO75oZn-qT9n!O5A87xEDtTCW<`|56Yr(>ynK*Dq-uaqE6MC!%uQA*%<^ek0cnF$T$4Y1-H%1M7!(3U zi_ZiY9X)N88?Banh*aAsV^*5USKQ@`^2C@cEXFS9h@-lE^%(8c)6Hf_dbw!Q9AD|r-L%#sP~9F zIr#fI=|yUPfTSb?!I~6iVBr_;SbeF4jo(-WG}<30bDS(MuJ6ocO}i>x7~Hvbb2LUz zhP8o-Bue~i;??Vkg8Q9Mo^8HuGObzfvt)4;!>!cU;2<)KUL{rZ%uDP-uMnrQW!p8< z{ov~xJ0*iMmA20wj;S0@jnnOTL;GQAaKOa<=O|PcH#uSozlfMU_^miO;Vmopi`v!U zVw*$J-zBQ^8;@Lm>y1vM4L)W4H#D56ac$)r92DpR*=yHdoK+QKecJjOXC))#GVDGdHI5()DqD>(Mg7 zI9V5OeBXghBZQ4%>czFX3YHi5Vr!@O&kC2AJ~^BZ4B#C)EUrq+kiSsmU^cYaP0(6+ zi5+3}Wv8g9Y3*a6nKa{;@J}LZB2}%9>woW<%!shPIK_DD96V6h3kWMsin&0 zv=p|jZ|jYx+daVwE+Y9^r0Yogw{3A{z(QkWq-59ErMkh`LwojJ0qdG;eNj`Q%U7=) zK5DkFEySa)no*0-uv>>2y{m6*Q9q~p;5$7(5ol;76Pl}Q|E)&*GJTP@0)s6)E`v?e zkYUdlqY#tjBC@2~w#f;fYM&>M|9(-MrSu!N*Bloua;BO#{k{cExI9@39No?}+XOn! zYR%_*Q`>c={$(q2pFL}f&}u)Q0^UEgpUT*keQ$=Y7ljw&ssV zjmbur3YE(nj>U5s@(=$lCCA5clgX_rak2~JF|crPW>s@}bTanF8(&EguDh?h#Gd6# z(^A#(1(()-9pvCkX?q||dhtfVSGcj!d5)We+UKTLKd}od?<<#YzmDi^|32a^b%-Xc z6R5}OQTR}r_usn=)CXJXPtIo&3#+T#AJe`65Oc+INZ~gw()M`tZd#9Twqax01TWJD z7pr8VeWq?%XO!l{pEq-}&VK#oMn7ki;P?K3v3fZE$$d@ffLS7$x_mn*c?8{dK!!~7 z4jaaoS;vf7EOeuaqV@bh%c*aM-!o1u^QO6iBhu3FHpQHHJ(N6Srb3v_3bH6;*l*5r z{9aYB>ZqFbc*|RY8s@=KFr@c|qcp?i7g058qp20`Sj^hPmC;b=d(Q%@cpF~7k^S4E z{KLXlN`{k2Y(L>)SFE^LTh6P1*+BD@K;bzNqiapEIAP6)?p(gqr>4zzt!LMLW^(bU ze%B_bXxEQMSdoM<{WZSFQA4eTI>{xrPWxzKIq>3~pHAlcZC^vzL6)rm0o}}}U+oEa z`spuB8zGy{7 zv$sF3m67shCi750t+9!Xf7nOTXAe4z zW%qO6xoWky2Q6)SUQ$!{bI}_bKYL(PS>z>j&%lj1<@a9b0(-9Z0P(x@TO(oj`J)*wLj-9``$|X zfIpA#{VN{4BA%Y#Q)gNCIq%JV#k_uJu%IGqb5Lt^&d{ z(*YIU`_fsziyRADe~53c&K6XE{4qP`_?W?srT8&(iPQUO5!QuCrA0Kn|ISrk{ljO(d6&ZNoT1&pkkilhc6muL}M0~B=HoDcL^_~Slu^M-WLcR#G6NkdI@#9T7DQ)t*DPRSF} z;Oq4A6JyOIZ9R`ctGaKt^Z0U$#*f7&f~VTPUB=nU z8N5T)@1n78bnCch^y^-!QekjJWe|BtI6zn=zf@exXV6?dPyj)^pU#m)U3jduGbRG z3h%dnG;t`)f7ni(KggZLUhBL$G4zB!d(%#eNMFiSPEuaQX`V#OPw-{f)ArB3Za6wJ z|6ZC|3qSene(7n7^{(=p{@p-(ohcTfT9I$&s)Y;dHJ87zi~pO+rnN}=_~2_c8Y^Wh ztvGS>_>Bo$lyXVCOM7l}WoK3Con5OY%gvgT^JtSP1&i#sAi0MI%RHO{Hp>j7N~-c6 zCJe91eop+c-NX|gBqh$*2+QbC>3_i__0>MgHCoF(n|{qJI#lc|^@J+cfx>R1g}HEj zxrV&KoW*a4kEh}HUqAMNEtSpJ__!$4yeau)yZ3AKD_9Sv!;!)Wq@n3HW zv85zXB*@=wKf~_kntDwdL%P^jwqa|MfWBsx*5oYD%7OcjZ;o+-reH{+(uMMXEkbu0 zH84^@(S?w8aP_qMw%^H$h=Ik=Db=$2tKOe+-)LJ0SVTQjsC6^a6jbfrN2VTbMhBmEFRgH ze`=qbTj8_Pn3V@wRYaw5xbzv zxQ5pGlKbuu7oUJi*Q^>oy0Vl^cmv0iWkVYoVWq(@ZJ*!&8Q{J5{J#}eEv{|~Q$eaI zyi}rdb$eqGUXJ(YP7}k! zMZyl|hnCkhy>t3bbQ+uI?j`&ACL-@`0sS zqwf~+We&DlS!_NT+NVNl#HNL0BhFq?Id}gSVNWCE ze|pzi^-!bZ(^z~&=&N~>VVSTxuY)QjZVBJH!S~^fzux{kM|&xi+Nbu` z(5*Lp?%b}vPF8K#jLJw+Uap3D&bhF4vqu^X6<4v^W+h=JG`?@etKIqiJ}ou!=vbW5 zcJ}7ebq|cY&(EQ{{)iGt^Ip2OH&n8WthuI8~~*hvve4k_Y}^Ta#xvc8-*kj!Qhi)iRGJ95jK zq&d4P>L%T*zSWueQOG>fife7m-o!N>BL#c7;e+Wk4N6wIl~8;KxhlTD*KOf{Rz1sv z?RbhUXh~0b${+V!L+kM?q9<2EUCB6qFmU~2k`|9C#R0EPW5&*V15IHOxyverDKg?25jhWW%%u--a2`0Fc* z)k^V^#2GF8+rs;YulP}EgR4Gq4~*bh-T1_t=kft1McAt)vbV8AM&dkrfo$@ou4pGt zBZZ^3aj`4fNBR=1Ua?|HclT$~y<;!_JHOrk}Jzw6|)+*-`m#D(;?~}vaAobj2U|SgFE%5YNxWFD! z>Krt3A!wacM|?$N%@}r(>!7NMdlMZMd!uFscK@@ z;M^oUsgteeDHU-G&c7-1xL)8*5YsG*#rcHy?VLuDdAG5Ao|s}uj%25t2j#f8g1xv=vlIZsE#D^d$d7c92LVx3ZZiBY$g{xSFk$IIg{wLx|L{);T$s<#to z4Dx2(hWgj927E}(60!L7-ZltNW1y>{yL_mqVp1f%u2G=pe84S|9>DuU4EJ^pp2^Yl zk*OK&GjBR{!GVZ&J+j{d>+%BpnT%386;T;#eJoUWO({Pgf00f%YQ7X@GNS7ZQaF70 zW4r}p-!K|=MGZ5qkK)4<1^-z{5~!lfrmF4v?4egzHk4#F_Y9mI#FFb5 zOEb8;TzD?*^FDT@BpR#wdJl_zeA?xOS&R9@ECCN)Pq7Z!V*bktmBqU*+b2Ja3lais z`_gElnyW5P-Zd|lL@AZJj8$bR? zDnuNv?Xn*CeUlZ+CH+Ufy2mLqcTRB0u8rBlA%E`SAQGFcGq57Oi<@w#uh3q6BWBZ= zM{IC9WDn)nS_iKMCL$NLiQKW40^4N361MJf+B&cYQL*f{dZFycNoVZ=L zKi0o#)%Gjrm@)R_-6<~&2alIoZ@=e??rCW?FwFO4S&?K4a5467ryMLb<0i-Q;}HK{ z$;%8yC4|7!iGqM(Adg@CU!{XIHOP3QH0(ev0?|K5~>MY7vqlGFflsP8YrO zZeAb=-YojOra_Ea``>lP?`@;{lD}(E52JowSYEYtsmW(J)_ywi-A`l9;HM(mC!keh zp}5y7dV}Xo=@W)Sd+2{}Qhb@tA-kPpJx)xde^xF#HQirbK`cKq-{Jfi^#ReP?R`#9 z!-`)nj3s!N4odnz-$dS;nemGHCB}Al{G0v)-8ijBlzw8l2zmgYjK}@Op<(p~vnuZ1 zB;UNCq;o&(mf3FwRDV56hgZr&@6Ep`mR@v#LG4(am|lLGoB6?{5isG_cc82i=Qhr*?-2a#dGCuu*zlIXwQ<_Iq{!T zPNb!G`Y?cg&hqe&!I4%+#;x*>szmuItgd8<#3CE=*@dsd8n6FFTgs7W^(?rT*0ya< zHt^V0v6fDM@6NfgYk@b4PgfvZuFr66FSJxa>bgf0^LOF=?MrHP{?jqj`2_ZE`|wi> zji;ymzxg%RSVWck#Z?%n4Nfm-cmgbQg)}r@?6&^!sbJEPTYo~PNF$&d6?NI&CrRFJ zaNAsWWctAqKFmJxQK44mmtC(ZN^F+KmLg6=RDHTHpJTO3uE}%`=c3RwUKb9pD){j= znzg>v`RTHz3?|;K!%xyW#OszVPoq;Uq87dvcUofT9`m!j*|%W6_QmK{n(Yf>tbh*_ zbzFnRuvYq`v)BCri?e()Y$@<1dd>;xFt@O1?I$om1Z|av+n=FDi$yJ>- ztmHZ(p6s4R6Zhgr&Qpu&kL2?+b8%^Z%~XAFGoy9taxBsmGqiF~Y_uFQ!X(nE|b=NHym;O`G2;+4{rCUDyIbY1o*a!9bs;N_J z51T4}ak12+>jm9O{aWq%5OXx+a6Do*u8=En$8hH8^9wl&l(tz3d3u{G8+VG1Px+^Q zrIn0+?~2|uTgu188e2J`iuV%5TNYqyJxG_;VH~)##UUAKHf=G#9%|$g*w;Fw+g#Q0 zVw8(f&Hgp*2UM~)Ta=^&of|#Qv(N1?Q3oEhb!T$cw_Y*0Q*6IFl;xj`*=i`#tKX&c zV!3VSb$}}|WIwO1<#9R^N5JjGt2OwPgl4$y0u+C@FAj zk9ssIo0x^N46cN+?$17Q&E1uMZ+h3>k+juv7M)MuADvmPl+V;pNL>i^FzgrMHSG6Q zXyk7LhCc04hs5?%Qh)lPNQVCVBnUw+p!T?^l{+ ztk#ghs?Dj&T;9pQ>w;3|O8B1r3Z#h-S%5#4-(ySDG0?9E$!==- z;xKz%o~$jtS}a>P$ZERAmvA#m@UxGr(6pGmW*o20f5&?#7p(_(^4~HDeJaJoxtaJW zm1`$osHUR4fA5cylUws)jEuBv>&F`s+Hu1~T%y@tSTQcQZZ8Kmd}f^sA3tVr8%V!G z|Kod!+jy4o%==e;#cbvE;{jP4E$SgDGxKxb)NM-sVv=ClGO3iO8z+-#vB3d}dXDkY zH>F>P_)0S2N_;0P*smzZWyuUQxP@yZGlE~0^q~1p_3cjgd9*usCQBHJCg<{rMr^&8 z7I3Ur$d*K8!rBOLJ<5ueh}pWyHvH3{HT$57?xw32tXsVxBl(1e)3eaVL{=iWez$d=s_)yd7S*J}5_2>sD(+gp!!_%W7g{5?)O-xJqXeXbbO;Qp-ZrRL;Si8>>37r%4u)XRiw-qcxd zc(bDOtshFMrzj~6y8EA(ACi7POBMR{&W47Lz{b?1rpd+&r68}7#VAdjcHDa~=0NYi z3mU1%dP#KlKYHF9JN-UFfE%ii1dwVorKD$3BE2Fuk*(pr?%Lf%mdueh%+c z`|Q`ZxUE&xOPSA30;DP4EUhyIT`#}K%a1Ck>c}#?w`4DOZ!f~*h~)s~@5ehd8{I`; zS(ovK`_xR6>x86OX1!vboEQw{ePUUBV%l!+eXd`$I3@ew$NIf&f45f*OQsQ|ibJtu z@ip10_gM)0+HpkP`ni^}_jLJb;tU9u$84<^R0c+qG!iv5qMWj}7SKo3gbj^0`x~+E z{iQ&ijMSYYVWl&>6)4$krbzs3aUt}p30;$SMdHQho~aSalgH0ToeBrr-UiZ}|NYZy z7kDJc|JuKx&hw}vj_>rKQ|P5hwpi z*|1tVn$~|W36(v>+4qxk_jS>&P&tlA!9k&uC~|oDNHm1u=DhrdPi3g_BWEpk?8ILd zr=67_2HjP6D+06d`mPRo1Vmb+N;bY_ zH2b%HEiP+cYeW03^~K(hu1ipE>2jcLJJAPi_0$&{WeZwICB}XKQ#{+t&Xt$FLJs=IPE1|Rv(Fqm|9K?y-!#oqNY%#0&cd#c`(~;1 zT~rgd?x3(kAbGurP&n?LUdnMXNqDSR$hKJ|U!^zua%tf0ucnd?SiPfEoW76eF=_J0 z{Cg`^ebnCM8#t{sb%4)SG;4Uu&OGtOnyV*5u2-ml=^y; zt?(eFqeMO9_;v%`GV8fl1C!W0m-p7MVnil>qt;c}lP}bFh`LYZ-O|@Fxg6+>_-_^C z=kb5XuUyYQ#>Fn&#-a9v?r?h zhH0I1kqm>C^OkltCZE2I&eD(?S08zkjryd4qbSqGyXK&YBa0ZGM#BpgXV#*eL*OiW6#P53xU0L#`!Gv@py9Yx$n3PSX-bb9AH zr&6byCAMgZYedF6MGh_%IQIi8US2Jdh|rmf(|&!Zcf4!%Ys_i|E9r;&9_N){5UE^e zVW!dz%FFm?b6&GH(v(AUtMi24=ayUM`KO8NEBzcs%eu^;I_ zXs=^A*B8&3zEu|0SN8ExaJSycxO5TqI`t3IOk$Rqw>Xk~v^UPBM+nTD3y0@Px7feh zV58vYxdfnM%HQ|Nj-c{93wyoLCFE>Y~|`RaElWI<6X>LQdS%XDP}i=Bm1#FUklEDKlxtGQMS$)8;*{_%w` zZl2T5m2WLevr5lay!kfXaXRXHdMjKln9>SU)C4^Qz2Ml7!&ggT9>pfg$oLL-QomA+ zN-odFZMWJjyaOqB-u4MerZ4NFC*P$!$ol-qZc(|+uUd|a;{3NVv96$s_g*Qhk67NR zgvc8K@v|bYP|Zx1Ia!0&=@4qWhwAnczg9HuSI#dOO_EMjgWb7asC~G5|Loco)qj@} z`gf+TIay6hu62=fNqW>qH9u>8JRYWM};oQ}u)RcYvc5lp1 zt^ZcgLD>!N^BCILwQ%9&cDEcC-S*f2L~h27u$YH&KU-H$`}nT(@l1~Q-`jqBF&j&( z^{N=#vA+ui-srBGtdV*biMLIdzPU2#7?1z@wZ*kydAB?~`QpEC-|w2Jj34sbYGN_p z8mMY(dHkd08YSO`@~eU2hz}vS_nZXP4X_O{7+YmeEg#)W`|BkADkZ|(NB_+Azjxn7 zzn$fb>2%}ar#}w;PX69TzN>q5@7`~eu)+3<=P0hBOL}#NDOdMv$ZXimt5Kdi45*&Y zE>99-6FDvLqXcQkk2w6f&Rl#fvhVEYyp4U$d54@Y$Gu3U8OQX@(Vk9BraoPWP;MCS z%K#k>M*UYGXERw^k$ftWDNealD*S4Z+Ko=LKk+0gxS6*|mFezMcKk}dOS9NWq(l)B zjb0=oz3CBs=!PBqBQ&9vXaAcs%EMhVeEJK?dH&fQ6CplccG8LXTg(;_Gtb-R%LEG5 z^%aXT@Bfmzw~dL$DtP71!)0{DbrQOqJb;CsIm4sM)1vgQP7pU+MkdsjeK6RTeSg_4vsUF{#tujO&uB z#0t;k?RPg?HWmI|PdQ$&ilw;|S4BM_UD7%x> z4#$RNk1T8PjfiiS2)1l-XqSx3<$rcGu`v0mTcopIH|Zl;jJqOB@PVvQ_J!B(a-Zg! zt$GytxBA7BQX)w<`_CTE>1!e+JCm#aodp(q8eyeM))v~^*rmEsuinYsBCd>xDQR2a zE7`uho1&T=Z-nz*bfA{#+U82WMr_AP1HR<)R?MUEXjab9UbF@8Z1$kW0C#03%-eHs z4)a(wTPq(Og+AB)%bhwzpE=}M$JF4WlP2U3*~l;^rKN# zNUXjV?{KRuUyY|UF`@{K-D1XEw9mElcpLK8p(?}1T#J)9+adpyzH2kZW0!KR_eElL z)6@Fz;=d{%kDR35kXUJbc~-9fIQNC;=&5UI%#B*S;Jwv|j%UH7Zf|}6No;i~roTb^ zd8&Y3ZK1{Lk+0#&+(k}g+8fvx>|S9)a@jEIokdA=v);4vqp9?t=U7pRG;1-8oZHWf z_|^P+IX(PY{yT20t4)=paA-4mlSy z>|wgxbfRP$mOV@IkWYB^zc#}^e|+=QlH;JfxM;5EM!juZ&D5O)^89TS=O3;6filz+ z3RYkCigE{Q?pX#okM~f-g>OCCT8!ZOP?Jb^<@ueDCGQ=JL)Tq5^s~U@yXoZ(irv?< zxIF`^OWADV^|W90xJX)kC@k8Umo?Z8T<43z)!YA*B6lx+4Snao*{VfzHeJ4{CcbLa zB1668b%XYIQ`c`7*o`$D`Gw|`E%nZ@%u@z*r*EZ&jHe6_2o27K6*k8H-D)( z6D_5p=auq6IKJZND<-cLo#pZ7=erEy?4DA&`U>t74=EF>YmY)Wwj*@Y9#ejG8i8dLdACBIS=NxlDU^A4qpsPw*Z-kN@LM`kCEnjQFMcPKS845f_giSrhQPU) zh}O2ytEZ`Hk4H)#7H!b*dE-5@M=Mw%#|d*$cu1Ym(M(!Lu6Jma_U%%V?1)e4ss)SB z+iF|DC0sFF@=#RYys0Gk^xFeg2C|;nq)b{z{am?-%s$%{*X5h?oKlmde_O0SrinMU zKDDf~>*4#vD_i)~pVUDZ2isL=o1y7s60auS* z_U4xHM_z2aAD?3}M-+eC_jL7c+dnSCG1FO{WE0*bO{~zVj^sDJi2JqSgo4MCQgfr($F6SH z8#gG+?OM?L7SWBt$`|y;u1*Pr`jImvCIfZ;+7G#^u->W-mZ4Y>?t}}k=YC={NQoQH zkXDWlCcdjg9&v2q*-@?5Ap3fgz1`e%)!05Sjjg86!Be}$X8TI4sUC}hfINo`&r>&W z!eZ_TQTr9;8@bCDbbRM7wKumDo(102e>6};QutIn;7@cw|91WLW!Ke`U4|ELxyEK!s(egJge<$<4_kbw3w~O1UMQ~lkYRa{NNkNYstmTbkyH7I$oz4^tshQmeum} z4HaLs$xZ4YoaY^Gyppf|iLOXe4A6Sqs$EraL=0MZLWdvqPB2!BVN&3Jr(;&#Q^PYP z+P^R1%(b`3KAX_aaYy^zX~(B8eO0xxXnbUy@5s@BqmQfH8!6n$T*OkXoD6D|1EeTTX)$~k?@ zq=7^y(lMgco9>_*GiW}xG{Psq#^SF{c)Idyo>o-mo<(7Cc9;5vkM5Wc!-I6)t1csN zbeSbEQ=n#0f9<+9znm>6EKjIR#}3 zmI?Cb)PFrX3U%LjC@8u#XggkyDYleX_QbOPXt4INNT-Em>+p4&$gq0t(qUwif99LL zH2TCaU zqvOz4>wSEtA`ZvFN2R@H;Y2t8eMXHIvXBA7tkSgRc1LPgVve1kY!|k|2V$AR`Oc4B zLsE5$D9Ib@-_PF;k^8%^bLkpL#MI03y6wwo`akue_M!kO?IK}%iD|p@1U(bCT$fLK zEmxWalC)pKA0KDO&QSg2Yt)LD=CEhNb*9zku$3IuAAKsNCiY?6`GS|LZ`%FFJ(UM3 z*{+ln?;GjmCzQrsb*d|DGv&!XEzkGADJmFL`<+#vC{p^%;)kEiZOnSkcMk%jIDhE- zV_Uo5Ax|@IbRaCgMl~%>?|G_n&W26WR)@YU8&!{UdH7Q0zZq}}h7MjaW9H$?VU?TD zvpP}UUP@5SZYABU8vk$5+Y&E%;?>g(jbjGk#p_?jq#VS8l|%jn_EN_AUz)IfjbU_N zT6EVF-N@SVj~^nixqpx8$;+}%tC!6dCyJ~e|CnUx2t`)JUb{bG5?;Fe9R2Ogp-}>} zNI}t{bn8Y`|EXT;trbu9-(k*o$iB3W-H4mmds{fKmet8AxYOOa^H+dKO04ijTkZ9$ zold(3d5yk<`!Qp)p5GpL9`C>GT`m^AzK;Td00@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?x{6814{@-knY?17c9wXT!IUqSAJwb9paz=7NdWz(VY% zx{y92btCm4^&<5l^&<@+eL)&T`ieA!^bKhkX#{B$X$)x`X#!~y={wR7q@PGrNYh9& zNV7=4kmiu)krt2^k(Q8_kyemak=Bsbkv5Pvk+zVwk#>-Fk@k@Gkq(d!k$xi`A^kx* zMmj+{MLI(|NBX~iZ%~oYkkFB?Az>h4B4Ht6BV9+rLBd7CL&8TQKq5pULLx@Gfkc8t zibRG)j&u|077_*0Z6r!0DkN&8J4iH0v`BPF^hgXyj7UsK%t$OqtVnD~cahkUIFLAz zxRAJ!c#wFJ_>k@)@goT!2_gw02_uOhi6V(1i6coMNg_!hNh8T1$s)-i$s;KsDIzH$ z-A7VJQbAHhQbSTl(m>Kg(n8Wk(m~Qi(nETH^bkoO$pFa^$q309=@F6%k|~lIk~xwE zk|mNA(*Jq1!Ncvp=NmlSs^Q@_1`oGWc(~ES!%YbuZcpHoTQYoddk>%7rs0zt27Ge6 z3!mIH;gj1l_*ya(zLxw5UrR2**OK_~wIm;WEvXM*OZvlaZUyk0TMzu^wgtbrk-=|n zqVSuW8T{rJ4lk6H!wV%t@IuLNc%g(EUMP`;7fS5lZOJ%zTknqwX)p@V45I+QU=#owMgcfs6hH??0lZ+&EgRq( z-i*V^n=?3h!vH65?!(C&C%EU90{7e+;hx(J+;hW(dv5G-&rJ*Nxp}~`(kwVu+78D` zm*H3`0URs62ggbc;8&VV8ARv6-5fFW*N z7~{TYV1H(-dH?srAyoOjuE2(V+y9ldq|>+%DJADAVHUn`7U-IGJa6$zEe*ID7X^P-@p4 zKWz0TrIgQ4;kDM!la5=2_d19J0vVFR|{T#FTSPl0BCrzR;kF7n=%2ARg z9X9^xU#27+L#WXssHdh1X@>-fk3_EKz4u#ZF>E+uDsc2<>9@8-K45vGO9d3k32YX8 zV|`!6So^L`PGdLRQ}knQSG(TH1Iw8Tym!L+N$5)$-IBr6YIt?_{F-j|#2(Y#4#$&o zZxw`{+D5N2R^1xV`*4lq{7%NNoEuT47mZ^1{m-lj`XcgVH5jXy`Nbtan{&(r=^n*p znsAl)i*@}EyY|@^0^_!EJT#;bl@dvVBqS6nDU^mNWo3klBvgn(C6$I2X^>PhGAg?? z5G@TQqckW*kx?Yk#r=N`_v7CSIG=nU9mnT5Z5N6=I&|H*G5MFMyIn)!tC>@Kt(z1N zCBJ!BCl|8OE?jF-=+C*XQSE~}e|ehhOS$HjGb>9YQ#W}`_RIV4tw)tU`0A^Dc#m*| zg{gb%`TEzt{mfJwvm135N@u+P&|+Hi{@dwKU!Lvu`WG79+p*&PgoC;VcPdSd&3={P zd8pyD`2|Nu(=DL}*%^M_)|#E$A8H70Q23OUdg7S$_vi0MeDJ96+v4tMzT&4&!0FAx zhr8o*#G8Xu^EJ1skwq?*=Oy!QU^*uX=4^{};u3U@co@LcabG|8~bF(`k*-E%t+ z)IC}uvm`@id zh@;VNu||{h7b{IkG)R4;R@tFG{MY$`&XTi!dGT_m*rC_!pnDq)OpHa7bylg30dL4w`YNi*Ly_IQvv}m{-kwQq@1<&$NSAwcgeo z8Yi6U-DPt}`?lhgYe^;v&ZP^VsCFG&*RCb;_35guO9%h@-Lg_QGptrww)pkNyrW%< zSO55J(=3wrS#N=xbD(w9_vhjp=4o2oH25PgWo!Lax8-E%rUJG0tE>M07P+c0WZypj zq%PAj!$KYB*pRT}!Ev$0w2= zV?6se?=Mt|x-#9}BSAwxeevN4<+35_`(xhrgnoE_y|i1$%t=~I|DA?GlT^CV{)1n% zs@J=AxF1(m%Pjb+wB?1#o2B9groRS>s26*E9H_R@^=aReocI@7`B%%@)>J$&+a#5J za%Z*T5fx*>w%GG|Gan>f{kSi9jGV%13-faymxL4)EEDJwGAnBUqh_F!wS>o+rjn@uGPPux~|Ct;W(=!_|#4qpqa|-JW|Z@V(&0kc$ehbIo*;<~gRl+;P}B z+DZ85{!8;pms+IwF5f-#o0P<)W2uwg*#^jbU;pfIp6-F$0;AO*t<|3VT46%s&G`Wl zuWlEudbeq{`JWrP&8ib8T1a#>&&jC}4IXoOxAAqs3fa^rGm1T>&Wpw61pVl4ZjB#* zW01h$ucKUAh)2IG;pWkwJ!`_2=zw+i!-oMXb?JB_=UV^>0_Zzw|EULRHn67Rt zA|;`tci42EXVe75O#Su36!ukfHT2gCUn57u1W+*rK>0r1!(gbp~H9e~k$9-DBmt)VAYe zMa(dMt#hlkRG+iWf9G=21})a}Pj!E8 zyZM?(sq4Wu!|;r|DPzsmKFqQT_EWPRzWI~N2GgMPx1DDTW{))zyiqWutVJ>_zU-Oa zmen3w_BXa&`O;jhsy1Z)*Q&VH)uX(GW6BoqaK3%(rs)U?54*4wF5-0R*=&uN`K%qHCNb4i`fvy|v*frCOdyM3p2+vgpMG*8yq ze5=#;r_^5YV@oWHXSk|2-rIk@$n}lKluFfYNfF}$2MxRKU_DvIsb_)yBa_*xddL54 zoHcRgdudJIHA_csbXg#$tUUi?#;n0D>9(I&2rUSx8Rj)`(4}&#jF#Yn$RAs~YX&=R zkX^2__T22rg3*Kaca@r+-r8L{(b|5Wl7rvuiH$WT9==k`?sW{T)La?={o(wRnx~g| zJnsJTxk0e(o?`lyyJz#4xW^sx`0x8?S@Q|X)ormuC!8ExF;kIn2E*5ulnH@-BCxOTz~bud{|? zu@lCoPn%via9GNn+P|yLhkZ*_P#tMAe(tZk!)$DX6`$89nXMk>XtuFf*{Mz3!&b^H zt<&h?ovberlA6}fBCmc*IASW-y5($T{_~sF29=jrKUZ#3@+!ILe0Zv?-dDK(1}Hv0#+#cVD9 z^1|uv?6n%+lfp$O%&L>r=!=v2mU#S*QLo&@7D+S1vl6 zHh%CN{Wj&anIAp$jSKCw&g*QgJYzffo6bZ@+mIV7%ce@kBqSS5@LF|kN`O$nYWX?0 z-iylo6`6GWg3-jkwrQnXJdGl*@69>+x%p#L|D%VyqyKu(PPwilFT3lK(8=_ApRyb4 z91FcFhed^Cyi1l4mS{MswnNcq=zt*8bL9`VsB5@9NHZ}qFmIpv%=N_VX@Q>`<-UFx{kTmfOyd@p+L=C#?TDm`7C3d1W+X+0a48n}WlAvz|1D zG-y{fY~Q&+cEF3wJvW=R`;JcWSC(2+8CkHc<4tgRpsBpxH`C!8R72#4URvsYBW=j! zH)!O+utZ;66?K<(P*x$p9evy;;N2K-YptGGKX`s5Y0Y;$*mpI3S> zy-c4M@@AdXb7Qgp3`$;o^s!YL>?t^Y!PBO>y@y2mHmr{q$R4eEaPO*Ejl038M_2^~ z=Wc9m8If9Ub;7wb+&ZcE`6}bJ6-xuBxs46BloRboiDMW3Z>e^XqYs8;a! z^N@=pCVJHzsQNVVw53^^7og6S|?iRfhGu(ff#+UDGcaNWx^kapCdd8pmC9S&O zRPM(7vUVJBq5oh1f_#U^`Rym}oC!7F{`k#To0Fdo$&BuBsGAfz*=)R7W{H}! zDza6oPGDn3^Nt49&p8>#OoVsmibtj;uV1sK<;r6nA@4IuBX?-U-VnVuJF;!7N9|$5 zGqX#sgm0d)Bs_juaaysL{PxhHOG?639_<#ZT(zb*&-{UDZlFMd>95kb7ssE}MNb+# zPiRqhn`mY5+)Lx@e#g&f*mc11{<^`hozJY;_0mtrD$-=Ov$)`%=si!TYzvr{l&kz^ z{6sBN-Qz;$O~q#71B%xD+#SCDt&87x-DN|Q_B``!vpTZiY)A*?1px#QKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 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 zg49zP-%tKmR9sszWBc@e9mRh`v+pX5J5gjWe@er9+Vq$?FBj%ZEHz(0L*~evj>N9F zL+2LXRT7?mGer3D&9yx)^7Gr zQk`g8@;Kt!Sj9E-Ro2>T9#H=L|M}VA1_1;RKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5ct1#=uib=Fp2{3?;L0_XcSQ&L0A+_ zX0zR47~)oB>;ddPlTBYo>~qQlUqSfFJ#f!S9{~ac2oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWWUnTIBomlvT|y3Y~8gh2%J%m%E}0 qy%4rpa`-gEwtwd=9yPaH*N=ODvYejt>*lh4#)H*u(XPZF2)qD|>;1X_ literal 0 HcmV?d00001 diff --git a/crates/guara-core/tests/fixtures/vdisk/disk.vmdk b/crates/guara-core/tests/fixtures/vdisk/disk.vmdk new file mode 100644 index 0000000000000000000000000000000000000000..77d0ac3ed62cbb306bda24eb445406e1078ded3a GIT binary patch literal 524288 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

t3PTVWsi-1AQo2o9KDyagB!)v$RYkvn z?7y35v61x6h4>$5*yiCq#ahMDwm5_MO6BLDGrhM{F1JKs%0VO+NP&|9id-{xp8#Qiqd}H7rdDlb0-+~B_JYoTHiIF5k&oO zWnz6{H3wH2gSSxrt%$&99^t!U&k(gt`ZY$CV$`(i9vjuZHLOL!6zcgAMkqDX8qOK5kWMu=0EVK45l~x!?}XYMG#X zLQ6Ee?YBnw$;R6ffAcqI=52!9MDT&<&zyXcaOp+MC_c56%BL?e)$F}fn?^RumEp4a zsIRn1)Fj`2Ih(do9w7?6D92^HkEV#(3*%4fcFlFt>i+ak;CbvMy=f@h`+bGfuCHZp zmvg=TzVJPZKG@oAP(nP8`CY{GS!>T|58ta;xO3L{^OI5UOx%wjZ7zk|rxjsI5C47p z{>n&k=91f54VjK;w7RqH?XNZj63zpK?9qwv_FyzF2VNCD6n#XR4#`{dH(aTI9mKPf z!@az9?_B-CeLU$eHU_tk{Zbd}nV< zDJ0R5#)l;}f&P7zk{q$&hqt4NB!xf$Dc&NB)GaASjX>Q&pUIy%JVmrjB76nPS0ufw zNw3H^o3Z7H!=vDf1;h{Cqb^-hf_{a>cd(!TbcA_*YJx%aAiB=Ia$>~C$-#s_8%IQE z7QXzUbG@9WNJUq+1WA5XjO!Q)j)C{di=EZriuERBJ82XdK69B}iM>tkYdtSoj)X*r zHTOo&%ZTX`*N1S#eMtyt$7mHEE`8qwZ)qS zf}&SD^vzEmW_CEwb46d6b#Q(m_w8z}&>inKH~-~osPioSkR?X^Opk|WZeD>2{=rx# zZq-uaHh*{P*`vU$r;2Rl+%v)SAVG59?^+s3jY4R(7YuzIhDY3e3v>gaRmC*ugT4~j zv?>(OWBbLbki!bTVd|=3{`+@~>!-n2>)0XQOr`!c^@#i;=p$`_)&7grnvnyliWfB!#7PthqP&%XYT$b_={b2x|OLq3r>z*!7Ww)VY2%v z$==Y%gqjxThI!%Ds<)FjDYzm#9T|5Ox^MG7dQ9EAltts#p$DDqhWEY?!gu}R^H1cc zUpDPC+`_F4e2tkpgL{Fh2VFlQw((HFaFAQ25#D3tlvfrB`SS*ksxD*kKOc}I6Ug_X zX;_Xw6mu*44zalV(f@bcSWAO6QRdPZt1v)57q8^9#w5CC<@7@>3bzVd-gL+6!@1r` zR$6!|Gw!x3165=FArrCBwv>DFYUYkJq4+EHroO!CAi-`HAc@w3H=Z;UU{ z3bslz;gTx{vlT|eFl4_y(RwCpZqKxSIHe9_@(|0@m2sPWO%h*IcNNTh9Ilo6mgI-S zXk2tBS?_#MFLKe9{E4Q@Cv(-9_*{#{U^dKzS6iN(AK27cYhoyx*t41=^fOcv8Oeg8 z7nNRhWNm0#zNF#tw-R*iU^1ZbVU5vn@v=i;P<)2==L$B&iXsdBu{3qKr_;R#^A&aI z{J?kptrsb^ME0l?gIpZai8W_)U!0D7UP-%p{PX>Y7BjoO1iKJ`N{E4(i1Mm?H!Mo| zUv5! zL-h4;h+V4?qHmhtz!bQw>R-9i9&%WY-XKLVo_pSojVWwyY@|9+_lA^&1>+KKytYLq zHfZ-4DQWBIec#;oeS)7o=b_%)Q7IC^%B|rKalG%=l@iYRv1!RyzWgdnmsdYSau0a! zg#^@(`Ldl;Qr}LNzAio>=k!8vcB=edqy|)#=o>2SJBK7B^D8Ut{+*2De zr^N2qSv0q9$->zs8v_7$0Y&X8wD)AxrZw>qhb*BhDKV+@#=3 zDQA&xGy2tp`9sYt&6i!nKl&6+GQ}tb z0<&BZ0-M?d55}rKQW?59#AE43EaMrC*86F^X01m4qC8d(V}^AS#=oD}!>E@WJCQD~ z5Eq2=N{%r6+Q_4~M!8Y)(;-v0smHFNZGI|aZM~g`Myb{DlTb?oGBGA$E&;lSR=}*; z+B@v-Cz8)nj~^*H@15$NAIHBBc&__qv>30*S=j$il>f+a!?SId-G}~b`i6}PqK*`~ zBFldLhcB$tD?8QRMx}h_{ce|S-eiRf<}44gd)@@d?gV)vF@GFfr{(%gziWDPF48)f zNoBWE(h)0u_#@q%`Pi~fn#R7IVc9}}|Lerec&v_4$V5}6iN^jJ`It9RBSBW%!e>&> zD5K|Ofv6vPT{%QQ`C&idCF{Wry4JWTp$h1=v4>2&8JeZ35kewHo2R5xI#Wj1$3B-A zab!K)WLk;uW`3#h^|rU?`ybIGt|l6PKh~i%nYUr?s_}`R8D^LQ|Lo=#oFmPNzwf-} z{ynJp-5BY5gH!9L5Q5?z?4&9V@56lVKZR9iwb}#cl`Z0oNU@b|Z z`Hw4WpRR_h3>me`Czrk3CCxnY@FWWMC<8l&$RG?MOgh6NUSv3DpP%$eN%q9%H;jSz zgPKgq_B`#UrtB=9E60tn`R8+py|9ZM_g6VqcqjM+Ni$eWo&J>K$xks-G77}>vxFbW z{<`-TX?=E=k#%a+uzwa^VlJ)Vfo$8Qx7Ssy*+zeK`6*RkLZxo&GNQ#V^Yd9MRl=@~ z_^ZOK9W%3s|zI6#s(JUq* zY;0&+e-SM8_gwSQB>qlkSN(O8R$Ft%Y!W@RP?d4?%C5xpG~8*>hOhp z^z@3yPaTiz^NgYG62WKZFd!fR1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBI zKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBI zKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBI zKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00jQ830VG5R#4VZHc)S&Y@zI+ z?4jO4IY2o=IYBu?xj?x>xk0^$a)n6pl?0Uxl>(Itl?L?@Djg~VDibOTDjO;XDiJwBcR2ft`R0UKeR29@`sA{Mhs9LBxs4r0UPz_LxP+y^%pqimt zpjx5YpxU82pgN(tpt_-Ypn9SDp!%V{K@C6+LJdI;LybUKGXr!A=DAn zG1LjvDbyL%In)KzCDd=IE2uwE*HAZ5w@`Ob_fY@m?+h#y927hh0u&+?5)?8N3e+VH4lz{Bmo=Novq)qscFGWSFO-mh7fK|- z3nez-ZOK^hw&WM^w&WamTM`DmElCUBmQ)09OFDs3fK)IF&3F$3K#`o0iyt# zU=+X;%(>-&Ik#Rg=e7&x+_1r%8xNRsGXQgLfnbQc1PpPHfFbTvFvLv+hPXw*5VtuP z;*J0tN3E=>rxg=Yz$`-@xMJ1F$$54=hgR2aA)9z~bZ( za222oTm={dR{<`-RR9uj6+j$Z1+W4qZ=%7;n_6)4W(J(RxdSI}sKLn_d2sT^0o-#- z2KU^W!9BNSaL)}1+;d|B_uSOMJvVo7tTYQ8EA0lyO1HtWQcQ5HlnWdy)dR;${lO*f zB5;X&2wdVm2A8-A!6j}XaEaR#T;dM@02KiRhPc5H_aqqNz6L|w6kv#31`KiAfg$b$ zFvQ&mhPW5N5H~y+;${Ft+$vy*+Z7CPr-LEx4lu;M0fxBIzz{b(7~<9eL)<=Kh&vw) zaeo6t+y`KY8}I+sA#NBD5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX z1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U+@Iy+CEFvtd1w=SV%; zen8LXLiL>Y`-}T!e`%2;L!&}4Bj!GlWw}1?!;z%MQMJZ={dlv^Nk)=x3avbuYYy>%++LhV4jQRMr)PQzi@49;YGBmNj#5q%(Z}X(mu-Zt+%{q zQMF4ucMDscP$5a{T=%XP;YiO}5O45%qy!ZO*X>VBi}xXl^ee3^f>H#vyL+1o)4S){ zN2gP6K2I@GHwQYqw0=TvvyrB+r7)-mF(wIP>U9LM&(YzW5WM=d2O zu>`+ows7`5mhP-wt(0`G1;ew=k%BKX+tD{7=|$(v;IXG0Gtv6tUZAczc4P=6;)MI8 zx9_x^R;{{4`1x;#}U9H}QU@WUeld&#@bk8l}I8eY4MlefCq=Miu4ue)F|ZUED8f zqM=38&WH;+y{mie4dl)fVM!Oe4_ZmTXV8sBI8++MAIR_xw9bS!(?-nt823Nx{<}y1 zOpfa58CGziK!O=##ow-%CeKtzRXsttjcSH)Y^=QYS#V3SEsNT4yK0;4pi996fx2cL zvoT!9n95!~NPXEbmr|IhGH?*x5msV3$Dt<~P3|l0FC2~}j({dYXWhGvbULV*0#O%#{8Mzcxd`o~Py2U2GieDq+<#)<6 zY2R71`aXsCt~8p zhSJEw9A=btbN3e3oPCKVCL-5WRw_CB7}MXc3ULFgIB_`ftq1c(k|F(>sf18Hq-n#3 z`hL~#pv&c25u$l}^g~Ju)joz~F;3vW9yS79*?=j?_Ixr!iw_DTz3kbWajvZQWwvnH z#p-Q@L21`tzU`e#>TcoV)mBEe2!4+^g83HnjeNaJQK(SVs&d&W*gn-3?$NtKbWBCL zIOvl*_caa%LtH7tzJ56VozZ-7xA1>05QNMF27FBG7Jn8@3ye*erYlf*~mW9W`5E2Pi5cRn!Sztnly}sr4 zXc;IL!wKhXm4>hkMniilJ?p_G^@p@LekK#e&=Am;^t;Psm;4M?Qsa*V zQpI5Z1|pX=rE$#DahjpTRn_mr_#h8;7Zv@}vuSNosDbx7?-qGNxzi1W!(Ls41@&vc zZ-~Oy$dXwG_6K}8&-R*sOFAo|RXFRlo*eB)T2Wf_0i4G zX^a)3%3AFCVcJP#V4C`oCibw~vL@z5taZJ3Et>4AuXac18Ii<)&u)!`(k*VL4~d}0 zWW{>9vwOnQ9Zg`X*Ti1ml&J7u=v#KlPyBOct)+#lTiLE8XtN6YFDMD2O}niqla4t! zL`^<#@c4CRXpv(mpX95>H=0HgCEd|Q6CZlFTIpHLv+z(k2szvaUa!2xLlaGI=mZ)U3R=!rs?ep6Uic=(Hbo^m}qPt zq{If~`RPTzzMAsTaUbDw2I;9_nL0`lQB#Yb)$<_i)#+bq!AgZMp!q^US4^tc??v|~ z-P_zQAXpg_e4;TZ;b($Lh4#J~Q^>Ko9i!8*_(EkF!cVugAnz4~quOx_HO;A=b=N1J z#+mccYw-5!aua5vgR-u=wV>ytTc*F)-@8i!C0gpa!wgi~G%T40^0>45EEw2km{I8l z!Z#^voYTLe;u}>D&QxRFVViRCwuq;HZGF-4)<3+9S_)QSgwvPC?03;QZXSF27Dysz z(2~@#aSTDB75`X$*C~s?&L^kG(xedl(~7342}ilOQK+bkXQgO5LT!79;-!zHSa~7S z_oMA95t~zEKB?wBH&lV>z`9_%XR&!sV!BFqk@}Fzcl4WmFe^cbb#WG+EJOkmy4Qp~ zoL}uZa^6;YYP?AyTAXd3^o-iv(_>I!sF!R8k-ah#gW_a-VsL z$qrexl?mBQ=jkI{3(;Zg$28HXvSO#_7D>?h>eRA?!-ngU3Vc68#D9lp_*yPQ_pV<# zX6+-B*y!1rcDZ}D{Wj3&p86iZU)(4}O5j`pn^w0GIMHNiHRL;umK;;RUxWdNv6;r` zL@9#`8KqD%*=x6Dvz4zGI63stRL2`zFT!)G98o7f z%j5bvhN3%ZJ4NH4rBdRwz={l)Dk`+BS#&~B+xS+@Cg1F)!)GZ1$fX94=3Tz$NR}{a z9KGqJe!J71=*b8LQju!~bYuD$Qq&3+x28%YrX5ChGJY9;d~pF6a!H>6&rx!>@Ku9d z!Tp|*_QJ{#$bVFdQ>|#JY1NGFN^TO5)lU`6b)qplhB%9|$bTh9SIz?UX%Kv1D5Pe# z1)uy8pN);OAleBz{XBIt*juA>Fx8`?yG#%EFiR)ZQ|vDiGzy;-erIb@Lhf2QQJnVbb|7{5N|}m-btzysw=ay|K6l}EC+i|Qhwyc$~p}0{MJl6_s1tZ zwOnI}Wm2S2Yzm#^SR&+N1)!4bB>bY5lI#CjDh+eVja;dlyPlWs#Ad-d^>f5NtqRA(j(w zMiXK!f6}3i*J`k29{*@{f;rd6ge=vO$`M~uhgj5)qX{$v?#RkUL>j)IyJWpF{Ofse+i(|L=zj0006& z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5C8%| z00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AHX1b_e#00KY&2mk>f00e*l5cq!* zn3X#sqF51LCBW_%p6#?7zvw;1E%TS=lYY@{|C@B^%$}oVRL?SY8L8811Q7B9gMg*SmEM9B` zR4!zx@tT)CiVQ7#u^DMw22K6;?QhuKz>nc>xbNPKJ25RrLrA_5JC_^vue?uo)&VsV zVWne!w4%L2Vfm-n&#+o3ANX@Fx}8IOh0wY}%Sq9;4CVqpyQ_q+M6m|4k*(FW+w`N- zf0EFD|7Tg`uES?;8>|-31d}~@IuT6nSgK3%XWEAJr%~}-+W4dpqFA_cl}I3^FjYeD zzaAz9@pks%+0a+UYEkaQ+pJ>GUD+x9fu%cat?hnqw8_f?Rg%m?t<_{4cVx8k11!tf zYlWn|ZTe4zl`_NI3HG>NbvFFXshQM^PHJAU7>K+>b8D_tUfN@I|J^>YX`I83^;M>( zbx}qh{($NfMPu=Tq3`>dDT?hc%o zG?tXWpcAs=tW#?t3(mJ1;fFf7)#%C^MGpdZgfisFQpI!ECvb*NnO1$ExK` zK7~Ic`7bx*?GI3nN~zVsF|qxwGyaQTsS13B z8QoS(CpJ{9y!qmnk+PcM&dsQ;yXhpqFgHiIfurNoDlnu-UhDakBhISayFrw%6tx%L9Wt_j`WVb6j4w<3~Y6d{R~o6 zmLusFMLAU6mBL6^)Eqtsoj$E4DXhm|n{&L9G{$4&Zxp+U-@pE3cFCM@%l{dp%;={; z1FzS4qpIn%g-!Jr{>tdS%yyDeq+mpol$W$;{RWfFWGNLfu1QO_5y!mc-v_?W6GgMc zep*T?jt{*7V;N#JLI)&`E4m--E4?=ZtlWrQO5#(I<>klHF5gc(O>Wn|w~LGaabp>n z6i}YVm@>8(+O4rHJzj%4iRxHH$lvQ2p$?1iiSV`UCd_JCdK%@k4DjE1hgWkszZIv+ zC}7~qj6D7U;WY>^eKUs@R&3vPy`VlSogSpzV3(sIME;ZT^>=Wjn3+1CmfH(2+0Q^W zwGx9DIDeeoUgPAq|6W)A4&*hqiE7bd{Lz!g^TS|NU)L>Awh!~ah)@=w)Y$(?CDhFx zDnsy6y(o6(95iM6cf!>;x8*VKN=o+*jX3;=HDxhR1e#uZLz4-iGiDf$YWs5@*e0 zrZ)5ZF;{`^M*sSDm(MDCb!q=Ji76auz0FozL7ubbmcwX%eC{YO|2E@jX%-X`SB`Z1 zl-GEkJ1ABrOQ%;qvixsUg(mM4j3qR0rA0k`(x9tI-~0pyDC~EJv$} z*T=^0#Tc$LH^|Ms9E5JY_)aS(Q{?r*!*=Bo>$;G6%cR2Jgw+q_`oa$q6eu^S1UK}A zmGBXGGoKfqgky71dqU!2{Y7%kWHZmWfsphm^;Yd}Ri+ryM~pf)MzYUOt}D*NbC2OV z&i3IGxg~mrZ;ni>Q5S)Z+7o;a6Yw_P)a%4Xx=$NR`E3#8jxSoJOvK`K!FJljUT%Zq8l zl;&i2<$3C-&XSXb!^s3Mth z?I%}v8McyC4__#LKvdUS%Ff6ORGzi`*n(kSo%t3Y^56{cn{T4KX3d*bqE; zZ+BVOKZh7qDXg;Tfn<5>#&%vIsHXe+2dU912b|CH8ONjQdgfuTu?h!5ELOpbut072PX( zIFOEzk;~t-X1v<%LR7x8!q@5$Updsig`KR2`Dd3-!izYD8`*Q&Lw?3 z&l!>*y%lhZMD|2EnaK~BGLMsh-#av7`Sn7kpB2lVuiCP0#6~{0HN(buW7;OLyQNk3 z>lo21m|!49NvxP4DBnJ5w1la5t9}iYtk~dnY5Dg2@52|1)m54Xl~-|=Z|G-FRJol_ zC=bIv#c$Pm%VP5c?*Da8bUvIEhBoMo-7xlQfAL1DyHQDq2y9`#{WqMk)A@S!OqzllDlGYAv4oU*jjEz4=@p@5=42K9R%wxLZJw<&_W+wBxz+lH+7?#6eNMjs z_fS#8P>*da`p@E`{6h5+nFa2N=(|*I3`f5+wM2zmLJO&uYh+`!0w${B*Hw zG!7rvtRZmh(Za+;Y2Epnsi^ZwkQ5=?sW`jskxp@;mFI&|7YfFt!h!o;e^UQBNvaF! z?`_eMAiYmLg+-E_o!yu*AoYxc{l)~K{n+E2mh%%asF(;lu_DYsQI%VkEf$&|`v<##@QR&eDalwwi z6Z>Lvo9u%KO7w3}CerHPV&}_zz3V?<2+mY3ktLguJ{T{(xmCl4%pfv`x(d6Qjf%HP zMnOd5oIfz}Z|V1qucX`Y+clj0NZ!7{Hdjk{f~{m*RIU^pLWO(1FoBA*B-=9{30C5o z*>VW)O2qJpFfx+9GS{F_&Sr##fpaq-J&Wx$s7t}-itn#gjtfGZ zV0VPdd~uiwoU0nzSKDTa3;z3ov))(SlxdP7VWt!|CjkOr2)yZeJSKQbKI!h=S+;1;sTCjkZK~R zX8O7pd2FiArzAJPYRiMjXz|{#f_0AffhuXvo^a^jsH1q`%{8Qga5UmG*`ZBYCG5ln zOQKDg6TM17DO5jBk&xHU#`L9%rV{yh9j6vt^+)S8_>7s-1a&MjaZ9_N+yfJCXm!8Y z_P}}%>7egFh*73C=xJDR3s5B(h+68~7MVR3#v~w9#5Vt%tNWTk5TG$LyCR0$9T00R z&7G8?_pRL$o7Z@S%7t!9I3`@j!b@c3^J*y^H< z;RuO@=Ig39WWMzVdh7Ir$=v|Y8fI(y>g{nBI`~PBEHM|6y$heFdMX~mDn&&f9KL!D zt#W8Fo8Fdwb9mvwh8)r=6{6Z8mC^JJk`HbFP>YfX@MzMXUNtti#PPLw$-{!2rxOSS zLrfqCDV?od#;^Shlm!QLeRyX-hKKMb9TgVb@R#sVxzm5MGhrG#dzi*l{IulEHuOaS z7fS!e(YJof0x3&^Rq_;qF}>|yNd9u=@CcFMx9&`)UnyGCyVp~1dp2|{B07rS=@-h| z+AJ-}sctYa{(KA)NFce|9=*+(6HQUf7N_Fem~dS+l(#3t=n$42zyw z*~_re?5#s)0c}pkCD~8YE6eL7Wgs-APkOgVv4R-hZL98WMUS3&u#U)99aws>04dDJ zWX7iJ!_K@e5J>Ydv46;8c#QwUK2&-%8J=PxW`<{PmJQVj#c8Vu(YqmOlhYeRCf4Ga z%ku6k?uYpByFfwW9}5r>e7M{1(&*|itS^QUNEs;&ArxUb)C3bLEw2vv%p$PiuvN71 zVZ&YK8own&BMHRkGzRuxW(2(hk^YWAw)6>i?xCjU1 z2k$+ReA`EuM~%)j#-MF~JA|Kc*0-k{MMk0jH6#;4_29MGRDog`bh=8%N26<;Uxl%1 z4Fpe`eXdw8yVmX8GbN>_mI;{Td{aX7o7UD;w38eKN;D5ZI|&52Z!^@z`Mz(xtCbd;83 zfX}0dPh_a*-q0=UU8baZ2EHVnd2D!jXQv`@ zfmK!s^?``U&$O=1wvvjI?Wbg!WN_G2K~0oel$N0hCnmpkt#Ej}mYqzr$g|1O(k;xL zOIc%5D{j+Zs_^CxTM_Dqri2mCjh*AYDV=X`Q}A&RQ?7fi4Ad=%W`>nVe{Y`x;q5pN zq~vhE3p{x|X5t7*6q9N$i_cxI`rIoyjC{oSe>$SqHDDP+_rNvM7u-{oU4}N@TWV;;{KiyYwd1Ih<=7F_WGlj8q zT2vk1*(CgFfsZ-_&9PQv_*|Qe9%Y=_HP8*;vTWg3)6*eGr%hb1`1EA@R8gDi{r*FV zUdBM{ntaLci~ix0aQ_B5M$sPCN%2lCHJ?#y{F#fmJ%Jql{We_ws7;wB0wWFs7rz6N z~m|gmY7L9U?w&;ms z!smQj`z*wJr=&a>zLX+6U91uG@y)60r#Zr^0|6yu#H&ms`b=g_PK7WwIN6Vc8T}BDQnlOv(Ffu|-N}s@W5{tZ%nbyvtTeGt zLNb2*(frSl^YX164w{(3A5JP>cF#BOzfMAD_;fo-6R8~}rs4d5_KolU(T}zl`fDc| z$r3KG`08r!pPS=FED5s;^C-luhVN-|7jAtEA^a#)JHbgGT%olQmxlP(;q;}1X z>whqcjqg^E{z0f1%6(3tubqK3 z%NyW#_f(`?)2=o$>cJGLgH43{4?=z)){SG<^l^Bf>iBn*hIX68$tmu_(BuQvl&)Ao z&F~948U_b0G&R(hMtTJlL@#aT>2uPBqAZOvb{$W4~KEPY49rjr+*`4NRa?Tp=lhfeW6;B&?iszW$8*22rTJR*wnLOQH zW}`9QdPHx&kw0+!AiK(kvpz`=hMabV|M(Jpr#2y7+SS2{fUNU&$2EvPWh#%R*wpaB z$W>>TGp-%i*0fD9I?c#+!V}ZtF~-n@ZSKEZ=|>`JtNfTP)9A;buMiTeI)osXIRxVx@_PSnihm@& zchPLlS|i#2{c6O>qPq3xayl+`X$|jG@JHs*l{>qs?%i#VqBGV9{eE5y3G+l%pNp`< zCGGvC232eS9SIAktiB5rKMg;Eg9cmt{*?;Ptc_$V6AcRc`k2U-$k=P>$la;0C?3|_ z+0{H>{%E8U@_0fe%r~lsYrHk$D;pKET(`rTCdjiDU6RWytt;AkvVHn9DL=G48I9}S zZk{Nkzx|NvaBWtBg!C&2yL%GmW3X?1vTCLu!j+f@LXD7Hg`e7UMTB@cr>!eDHU0y2 zqe8G4;-5fK%)mUf7fugf8uQ3(QBwcoe_gbShc$xC0VZ#>#e_q?yJF2F!-(5Pai0(8 z3zey?W>!PQ?j}D!H{HMQ<2-~O|5DT}w-g_qp(K!l`gnvvDP?+vlab!=Dp?&E^&4a5 zPhjY1uuo5Y!^{H=Y))Obtu8~TsbXrnB%*TX84|1Kst^*VS(GmAWbt2YMG6w4$yk|k zkrk`xyx5$LAI}St2<#piJYHLt+kC57(3VjKjcy_AnIlqJ~h;EgA)y9RIy#T45^Ch==PHQ z&YO-IBP=d2^bm;o`Xei0H<{xXXX9#*6`@C1-Q}!F>8YOnK8+nR%?GN72gB|X2l#|O z+4`8j2r^<1x1>a9VKU#% ztPE@>lxN5+w$kxG)tto351Ca9&f0}%HcJ?WeIjRP7R3C7?nlMhe81|APys`_U*^wr#blf^7NaWu`6$a1<%bhXrrL1JAP}~UxoA? zD*r9#Zi`wIeJrU!%52|pq2K>tYU1E%>HLHp-;YsGw;7@xMY2t0rz>LlY3P1!fH^5b z_~6QpVsgOx9AA4?hYWA3GCfRP_;#$hl>W4td#Swf%tgkYfH^$r_f`e$-3B+=EN>ur zeSEAgqdYbnvV$hZz&#l?v-R8GpmRTwHD_m*SkAFCt8c7lCsj2smrBy%QKG6tkJP>b+qwTRaWr1 zM7c;MoW90daeXP`gSBLjFsiyq%f48bhLJVbbhsOoqdK8Apt3k%xB3$JD_hMOK7NGv zhbB`sQ8J5bpIY&CD~%IcU&jk?XG>9iD}f~PZ07gk3{e{okJuPW>?m5L;8og>-x6lA zoA!`d$s66>tiyL%lZZxe2^xQWmA_Ctbb=Ju=)gGqO)uh@!nJ2t=^zju1#>ajP^w(y zkoq)=&^Xa4iD0dKMI=EZsqwsA(eg2za4yZh9G5wBYh9==d}cB8A{~j;v)kO*c~gBo zs(iM0!CiVU*UqFPPmSz=gSb^<{ATYX+3&RyP9a|km6NK?mM9-W!xE7SmjBiGgcq|& zkVy9yme^(VccfA3%|P{|Mo+R1IxI?7l&I9)M;gry-w-%R`VedsGe0TLi{Z^O;o__j z&1pwG-am^mz5OKV!>r#8$qXCS<6 z8mSLWiZ@WehURk-e2CINh|4bVa}aDL_4J{E-a@HAq^ zVv)pfLZsM|L>*=$k8mT&2@zIWVUZcws0~+?9v^hpOrMN-K!fn%5(7hzGgEm-+t#6~ zDSl!Ok$=GiPn9G0(hMTxm!DO;Y$LI)bTW^VDt~8+sZe)xx!;l$|D`_gC>}m)BJ%#+ z>r$7WKB4DYv*`aEokog8dcha2mPoAtiH$Br(XXMHuR~t$d7Lo9Yu{w>1iD#E9rA~&EGp|qqRu0__BoD`cuU@ z!rHe`K5il6+b+M0Fu$uui}X9cb3)B0*CZg_mq&$PqB?xZ$Bc9#$7WHLU7q}f#RFM|oc z++8{JY)Ofpk{z1bs1cdj)OQNKpL$c-w}s?<@!c|_dEm$GDwv(}r{|4CGZ!D|?ThLQ7PFPnwL5iqE{rhs ztyR3*2}FHGVq|OtZ{yjQk=0M+D^}$4&YDrE14=@(79djsMmDen`O**U?$ZX&6a=l{ zwjjg*oG2AKWaQQ!eP>`z$y1hFck0OLO(h;fV!uQu*PM^u;ws&Xo`4ft$2#47o^B}M zX8zkgl$S7!oFuHqrx)TPQ^2=WU=d~v(Z1sx^of)GKcU?PJeNI-h(^L(nZ<@VGY^Qp z4e#AB=^qYP7>LwvRF8Z=^&Ruad$KeY!bZAizEC-u^Cc^NNy%+YO}w~ECDHDV)ENRgJ6y@qP+Ar_zlb&+gP2WE9<5dC4uGg0f$9!p|Rw=<|+L6Cl*H?R9@EMa)ef<5u?GN3X$4WCYA}_-(FSFD&bi81~ z=3iBobfu!g?`~p^^&CL_X_5bnVbd9tdy2uv_CgR@bGUDSwi2}#%;BxgkDp0$)%cEl z71$+A_`Km(bBMY8c>(@!E5ol@{9TQGx!{ZHu&f{&Wrd{{0XqoW=Y-T5{REDq#ZD!4 z^rtZS|NfEb;+PRx^`iSTe~Do#&|GNH#?H@~Xb&pyHDr{O5$Cs5Nbry<_4I*aOt9P3 z)?yiDC5;K_!~PJHcvqn=6W>hyrt&h`R;HgLf82Fa{Zc`CfQ;$?9bRM@zd07aVItb0 zs15!5#LETI=ANm%awYA+3yrn09G00x1|O=^96C957p)tj%PO8lNO-$jM3nn~iR5=q z{u!eZ&`iGScSPFA*io3?35QE^JuiLn(2-&S#a zG4dlJG*(@14<4&NB58S0>y}A|hnGF_h~OKsk)zK{Hw;^$goN>7c$Z+-srIwgF}Wd=cxr>VFkUaP<=9jRXFzI{=+WQj24p$ zB4RhmOYgd4s13Xm_~9E7>mS%+UQQA|V=z4RzpG97!2c^JR`Vxzp?H%Pw{Kx#IuMf= z6Es?uTf&;07L0eR3L8hcLuzKLP~sjr_U4RTFqkkOQx-XB@-J-ac!u&LkF*{@p!_&MeA|zO0_&D7&yc zV3FhLAWhA>Y!ZlZCe*qtyoN}6dp_%X-7%`Fa{Phf)ve#@E*!X~RoN=z<0>GkMzMg} z_-4kBbW>@IAWIhBAF~;~{ zRJ$1q+*qIH!So?eZc!S^pJnA=Z&2|Wxt#x+u<+4Xm6e}_j_r??zA-h?Rs zp|-b@lcfw>kY=+7uyLddEPv?1P*F1C!Vld!&A<7DDmc8vNppc$UVRSIDmV{DIoW{U{^FQj#{{t4C BiX{L5 literal 0 HcmV?d00001 diff --git a/crates/guara-core/tests/fixtures/vdisk/ext2.qcow2 b/crates/guara-core/tests/fixtures/vdisk/ext2.qcow2 new file mode 100644 index 0000000000000000000000000000000000000000..4d230b446b195403ccb8969c73873ff3a8f50ae6 GIT binary patch literal 524288 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 t000ikfKGW3LR7k4n~@qbzbE|vfQ literal 0 HcmV?d00001 diff --git a/crates/guara-core/tests/vdisk.rs b/crates/guara-core/tests/vdisk.rs new file mode 100644 index 0000000..211254b --- /dev/null +++ b/crates/guara-core/tests/vdisk.rs @@ -0,0 +1,723 @@ +//! Imagens de disco virtual: QCOW2, VMDK, VHD, VHDX e DMG. +//! +//! Os arquivos de `tests/fixtures/vdisk` foram feitos por ferramentas reais (VirtualBox para +//! VMDK/VHD, qemu para QCOW2, hdiutil para DMG) e conferidos contra o conteúdo bruto. VHDX, DMG +//! sintético e discos diferenciais são montados aqui, byte a byte, a partir da especificação. +//! As imagens do dfvfs em target/testdata (scripts/fetch-testdata.sh) são conferidas por hash, +//! calculado com um leitor independente (7-Zip), e pulam quando ausentes. + +use guara_core::source::{open_path, read_vec, Source}; +use sha2::{Digest, Sha256}; +use std::io::Write; +use std::path::{Path, PathBuf}; + +fn fx(name: &str) -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/vdisk") + .join(name) +} + +fn raw() -> Vec { + std::fs::read(fx("disk.raw")).unwrap() +} + +fn dfvfs(name: &str) -> Option { + let p = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("../../target/testdata/dfvfs") + .join(name); + p.exists().then_some(p) +} + +fn sha(src: &dyn Source) -> String { + let mut h = Sha256::new(); + let mut off = 0; + while off < src.size() { + let n = (1 << 20).min((src.size() - off) as usize); + h.update(read_vec(src, off, n).unwrap()); + off += n as u64; + } + h.finalize().iter().map(|b| format!("{b:02x}")).collect() +} + +/// Lê o disco inteiro e também em pedaços que cruzam blocos, comparando com `want`. +fn check_content(path: &Path, want: &[u8]) { + let s = open_path(path).unwrap_or_else(|e| panic!("{}: {e}", path.display())); + assert_eq!(s.size(), want.len() as u64, "{}", path.display()); + assert!( + read_vec(s.as_ref(), 0, want.len()).unwrap() == want, + "{}: conteúdo difere", + path.display() + ); + let mut x = 88172645463325252u64; + for _ in 0..200 { + x ^= x << 13; + x ^= x >> 7; + x ^= x << 17; + let off = x % want.len() as u64; + let len = 1 + (x >> 20) as usize % 70_000; + let end = (off as usize + len).min(want.len()); + let got = read_vec(s.as_ref(), off, end - off as usize).unwrap(); + assert!( + got == want[off as usize..end], + "{}: @{off}+{len}", + path.display() + ); + } + // leitura além do fim devolve só o que existe + let mut buf = [0u8; 64]; + assert_eq!(s.read_at(want.len() as u64 - 10, &mut buf).unwrap(), 10); + assert_eq!(s.read_at(want.len() as u64, &mut buf).unwrap(), 0); +} + +// ---------- imagens feitas por ferramentas reais ---------- + +#[test] +fn virtualbox_vmdk_sparse_and_stream_optimized() { + let want = raw(); + check_content(&fx("disk.vmdk"), &want); + // streamOptimized: grãos comprimidos com zlib e cabeçalho no rodapé + check_content(&fx("disk-stream.vmdk"), &want); +} + +#[test] +fn virtualbox_vhd_dynamic() { + check_content(&fx("disk.vhd"), &raw()); +} + +#[test] +fn qemu_qcow2_and_hdiutil_dmg_match_a_reference_reader() { + let s = open_path(&fx("ext2.qcow2")).unwrap(); + assert_eq!(s.size(), 4 << 20); + assert_eq!( + sha(s.as_ref()), + "a6c2f0e39afe6c6ab432ca5465349fcefe8dc944398e97b2d957d3f89dbb5d80" + ); + // UDIF com chunks zlib, zerados e ignorados + let d = open_path(&fx("hfsplus_zlib.dmg")).unwrap(); + assert_eq!(d.size(), 1_954_304); + assert_eq!( + sha(d.as_ref()), + "c86d3616818e175caca2f6022f49e190e5b1cfe39b2e8f9373119e22aa7eaf58" + ); +} + +// ---------- montagem de imagens sintéticas ---------- + +fn be(v: &mut [u8], o: usize, x: u64, n: usize) { + v[o..o + n].copy_from_slice(&x.to_be_bytes()[8 - n..]); +} +fn le(v: &mut [u8], o: usize, x: u64, n: usize) { + v[o..o + n].copy_from_slice(&x.to_le_bytes()[..n]); +} + +fn deflate(data: &[u8]) -> Vec { + let mut e = flate2::write::DeflateEncoder::new(vec![], flate2::Compression::default()); + e.write_all(data).unwrap(); + e.finish().unwrap() +} + +fn zlib(data: &[u8]) -> Vec { + let mut e = flate2::write::ZlibEncoder::new(vec![], flate2::Compression::default()); + e.write_all(data).unwrap(); + e.finish().unwrap() +} + +/// QCOW2 v3 com clusters de 64 KiB: zerados (sem entrada e com a flag), brutos e comprimidos. +fn build_qcow2(data: &[u8]) -> Vec { + const CS: usize = 1 << 16; + let clusters = data.len() / CS; + let mut img = vec![0u8; 3 * CS]; + img[..4].copy_from_slice(b"QFI\xfb"); + be(&mut img, 4, 3, 4); + be(&mut img, 20, 16, 4); + be(&mut img, 24, data.len() as u64, 8); + be(&mut img, 36, 1, 4); + be(&mut img, 40, CS as u64, 8); + be(&mut img, 100, 112, 4); + be(&mut img, CS, (2 * CS as u64) | (1 << 63), 8); // L1 -> L2 no cluster 2 + for i in 0..clusters { + let c = &data[i * CS..(i + 1) * CS]; + let entry: u64 = if c.iter().all(|&b| b == 0) { + if i % 2 == 0 { + 0 + } else { + 1 // zerado explícito + } + } else if i % 3 == 0 { + let z = deflate(c); + let host = img.len() as u64; + let sectors = z.len().div_ceil(512); + img.extend_from_slice(&z); + img.resize(img.len().div_ceil(512) * 512, 0); + 1 << 62 | ((sectors as u64 - 1) << (62 - 8)) | host + } else { + let host = img.len() as u64; + img.extend_from_slice(c); + host | 1 << 63 + }; + be(&mut img, 2 * CS + i * 8, entry, 8); + } + img +} + +fn vhd_footer(size: u64, kind: u32, data_offset: u64) -> [u8; 512] { + let mut f = [0u8; 512]; + f[..8].copy_from_slice(b"conectix"); + be(&mut f, 8, 2, 4); + be(&mut f, 12, 0x0001_0000, 4); + be(&mut f, 16, data_offset, 8); + f[28..32].copy_from_slice(b"guar"); + be(&mut f, 40, size, 8); + be(&mut f, 48, size, 8); + be(&mut f, 60, kind as u64, 4); + let sum = f.iter().fold(0u32, |a, &b| a.wrapping_add(b as u32)); + be(&mut f, 64, !sum as u64, 4); + f +} + +fn base64(d: &[u8]) -> String { + const T: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + let mut s = String::new(); + for c in d.chunks(3) { + let n = (c[0] as u32) << 16 + | (*c.get(1).unwrap_or(&0) as u32) << 8 + | *c.get(2).unwrap_or(&0) as u32; + for i in 0..4 { + if i <= c.len() { + s.push(T[(n >> (18 - 6 * i) & 63) as usize] as char); + } else { + s.push('='); + } + } + if s.len() % 76 == 0 { + s.push('\n'); + } + } + s +} + +/// ADC só com literais e cópias de 3 bytes (deslocamento 8), como o `hdiutil` produz. +fn adc_pattern(len: usize) -> (Vec, Vec) { + let pat = *b"ADC-test"; + let mut enc = vec![0x80 | 7]; + enc.extend_from_slice(&pat); + let mut made = 8; + while made < len { + let rem = len - made; + let mut n = rem.min(67); + if rem - n > 0 && rem - n < 3 { + n = rem - 3; + } + if n >= 4 { + enc.extend_from_slice(&[0x40 | (n as u8 - 4), 0, 7]); + } else { + enc.extend_from_slice(&[((n as u8 - 3) << 2), 7]); // 2 bytes, comprimento 3 + } + made += n; + } + let want: Vec = (0..len).map(|i| pat[i % 8]).collect(); + (enc, want) +} + +struct DmgChunk { + ty: u32, + sectors: u64, + payload: Vec, +} + +fn build_dmg(chunks: &[DmgChunk], total_sectors: u64) -> Vec { + let mut fork = vec![]; + let mut table = vec![0u8; 204]; + table[..4].copy_from_slice(b"mish"); + be(&mut table, 4, 1, 4); + be(&mut table, 16, total_sectors, 8); + be(&mut table, 200, chunks.len() as u64 + 1, 4); + let mut sector = 0; + for c in chunks { + let mut e = [0u8; 40]; + be(&mut e, 0, c.ty as u64, 4); + be(&mut e, 8, sector, 8); + be(&mut e, 16, c.sectors, 8); + be(&mut e, 24, fork.len() as u64, 8); + be(&mut e, 32, c.payload.len() as u64, 8); + table.extend_from_slice(&e); + fork.extend_from_slice(&c.payload); + sector += c.sectors; + } + let mut end = [0u8; 40]; + be(&mut end, 0, 0xFFFF_FFFF, 4); + be(&mut end, 8, sector, 8); + table.extend_from_slice(&end); + let xml = format!( + "\nresource-fork\ + blkxData\n{}\nNameteste\ + plstDataAAAA", + base64(&table) + ); + let mut img = fork; + let xml_off = img.len() as u64; + img.extend_from_slice(xml.as_bytes()); + let mut k = vec![0u8; 512]; + k[..4].copy_from_slice(b"koly"); + be(&mut k, 4, 4, 4); + be(&mut k, 8, 512, 4); + be(&mut k, 32, xml_off, 8); + be(&mut k, 216, xml_off, 8); + be(&mut k, 224, xml.len() as u64, 8); + be(&mut k, 492, total_sectors, 8); + img.extend_from_slice(&k); + img +} + +// ---------- QCOW2 ---------- + +#[test] +fn qcow2_with_zero_raw_and_compressed_clusters() { + let want = raw(); + let dir = tempfile::tempdir().unwrap(); + let p = dir.path().join("t.qcow2"); + std::fs::write(&p, build_qcow2(&want)).unwrap(); + check_content(&p, &want); +} + +#[test] +fn qcow2_with_backing_file_or_encryption_is_refused() { + let dir = tempfile::tempdir().unwrap(); + let mut img = build_qcow2(&raw()); + let p = dir.path().join("b.qcow2"); + be(&mut img, 8, 4096, 8); + be(&mut img, 16, 3, 4); + std::fs::write(&p, &img).unwrap(); + let e = open_path(&p).err().expect("deveria recusar").to_string(); + assert!(e.contains("arquivo de apoio"), "{e}"); + + let mut img = build_qcow2(&raw()); + be(&mut img, 32, 2, 4); + let p = dir.path().join("e.qcow2"); + std::fs::write(&p, &img).unwrap(); + let e = open_path(&p).err().expect("deveria recusar").to_string(); + assert!(e.contains("LUKS"), "{e}"); +} + +// ---------- VMDK ---------- + +#[test] +fn vmdk_descriptor_with_flat_and_zero_extents() { + let want = raw(); + let dir = tempfile::tempdir().unwrap(); + let half = want.len() / 2; + std::fs::write(dir.path().join("a-f001.vmdk"), &want[..half]).unwrap(); + std::fs::write( + dir.path().join("a-f002.vmdk"), + &want[half..want.len() - 4096], + ) + .unwrap(); + let desc = format!( + "# Disk DescriptorFile\nversion=1\nCID=fffffffe\nparentCID=ffffffff\ncreateType=\"twoGbMaxExtentFlat\"\n\n# Extent description\nRW {} FLAT \"a-f001.vmdk\" 0\nRW {} FLAT \"a-f002.vmdk\" 0\nRW 8 ZERO\n", + half / 512, + (want.len() - 4096 - half) / 512 + ); + let p = dir.path().join("a.vmdk"); + std::fs::write(&p, desc).unwrap(); + let mut expect = want.clone(); + expect[want.len() - 4096..].fill(0); + check_content(&p, &expect); +} + +#[test] +fn vmdk_with_a_parent_is_refused() { + let dir = tempfile::tempdir().unwrap(); + let p = dir.path().join("c.vmdk"); + std::fs::write( + &p, + "# Disk DescriptorFile\nversion=1\nparentCID=12345678\ncreateType=\"monolithicFlat\"\nRW 8 ZERO\n", + ) + .unwrap(); + let e = open_path(&p).err().expect("deveria recusar").to_string(); + assert!(e.contains("disco pai"), "{e}"); +} + +// ---------- VHD ---------- + +#[test] +fn vhd_fixed_hides_the_footer() { + let want = raw(); + let mut img = want.clone(); + img.extend_from_slice(&vhd_footer(want.len() as u64, 2, u64::MAX)); + let dir = tempfile::tempdir().unwrap(); + let p = dir.path().join("f.vhd"); + std::fs::write(&p, img).unwrap(); + check_content(&p, &want); +} + +/// VHD diferencial: a filha só traz o setor 100 e o bloco inteiro do fim; o resto vem do pai. +#[test] +fn vhd_differencing_reads_the_parent_for_missing_sectors() { + let want = raw(); + let dir = tempfile::tempdir().unwrap(); + let mut parent = want.clone(); + parent.extend_from_slice(&vhd_footer(want.len() as u64, 2, u64::MAX)); + std::fs::write(dir.path().join("pai.vhd"), &parent).unwrap(); + + const BLOCK: usize = 1 << 20; // um bloco só + let mut f = vec![0u8; 512 + 1024 + 512]; + let hdr = vhd_footer(want.len() as u64, 4, 512); + f[..512].copy_from_slice(&hdr); + let mut dh = [0u8; 1024]; + dh[..8].copy_from_slice(b"cxsparse"); + be(&mut dh, 8, u64::MAX, 8); + be(&mut dh, 16, 1536, 8); // BAT + be(&mut dh, 28, 1, 4); + be(&mut dh, 32, BLOCK as u64, 4); + let name = "pai.vhd" + .encode_utf16() + .flat_map(|u| u.to_be_bytes()) + .collect::>(); + dh[64..64 + name.len()].copy_from_slice(&name); + f[512..1536].copy_from_slice(&dh); + be(&mut f, 1536, 4, 4); // bloco 0 no setor 4 + f.resize(4 * 512, 0); + // bitmap (4096 setores = 512 bytes) com o setor 100 presente, depois os dados + let mut bitmap = vec![0u8; 512]; + bitmap[100 / 8] |= 0x80 >> (100 % 8); + f.extend_from_slice(&bitmap); + let mut block = vec![0u8; BLOCK]; + let marker = [0xA5u8; 512]; + block[100 * 512..101 * 512].copy_from_slice(&marker); + f.extend_from_slice(&block); + f.extend_from_slice(&hdr); + let p = dir.path().join("filho.vhd"); + std::fs::write(&p, f).unwrap(); + + let mut expect = want.clone(); + expect[100 * 512..101 * 512].copy_from_slice(&marker); + check_content(&p, &expect); + + // sem o pai a abertura falha com o motivo + std::fs::remove_file(dir.path().join("pai.vhd")).unwrap(); + let e = open_path(&p).err().expect("deveria recusar").to_string(); + assert!(e.contains("disco pai não encontrado"), "{e}"); +} + +// ---------- VHDX ---------- + +fn guid(s: &str) -> [u8; 16] { + let h: Vec = s + .replace('-', "") + .as_bytes() + .chunks(2) + .map(|p| u8::from_str_radix(std::str::from_utf8(p).unwrap(), 16).unwrap()) + .collect(); + let mut g = [0u8; 16]; + g[..4].copy_from_slice(&[h[3], h[2], h[1], h[0]]); + g[4..6].copy_from_slice(&[h[5], h[4]]); + g[6..8].copy_from_slice(&[h[7], h[6]]); + g[8..].copy_from_slice(&h[8..]); + g +} + +const MB: usize = 1 << 20; + +/// VHDX com blocos de 1 MiB. `blocks[i]`: `None` = não presente, `Some((estado, dados))`. +/// Com `parent`, acrescenta o localizador de pai e o bitmap de setores (`bitmap`). +fn build_vhdx( + size: u64, + blocks: &[Option<(u64, Vec)>], + parent: Option<&str>, + bitmap: Option>, +) -> Vec { + let mut img = vec![0u8; 4 * MB]; + img[..8].copy_from_slice(b"vhdxfile"); + img[64 * 1024..64 * 1024 + 4].copy_from_slice(b"head"); + img[128 * 1024..128 * 1024 + 4].copy_from_slice(b"head"); + // tabela de regiões: BAT em 2 MiB, metadados em 1 MiB + let rt = 192 * 1024; + img[rt..rt + 4].copy_from_slice(b"regi"); + le(&mut img, rt + 8, 2, 4); + img[rt + 16..rt + 32].copy_from_slice(&guid("2DC27766-F623-4200-9D64-115E9BFD4A08")); + le(&mut img, rt + 32, 2 * MB as u64, 8); + le(&mut img, rt + 40, MB as u64, 4); + img[rt + 48..rt + 64].copy_from_slice(&guid("8B7CA206-4790-4B9A-B8FE-575F050F886E")); + le(&mut img, rt + 64, MB as u64, 8); + le(&mut img, rt + 72, MB as u64, 4); + // metadados + let m = MB; + img[m..m + 8].copy_from_slice(b"metadata"); + let mut items: Vec<([u8; 16], Vec)> = vec![]; + let mut params = vec![0u8; 8]; + le(&mut params, 0, MB as u64, 4); + le(&mut params, 4, if parent.is_some() { 2 } else { 0 }, 4); + items.push((guid("CAA16737-FA36-4D43-B3B6-33F0AA44E76B"), params)); + items.push(( + guid("2FA54224-CD1B-4876-B211-5DBED83BF4B8"), + size.to_le_bytes().to_vec(), + )); + items.push(( + guid("8141BF1D-A96F-4709-BA47-F233A8FAAB5F"), + 512u32.to_le_bytes().to_vec(), + )); + if let Some(p) = parent { + let key: Vec = "relative_path" + .encode_utf16() + .flat_map(|u| u.to_le_bytes()) + .collect(); + let val: Vec = p.encode_utf16().flat_map(|u| u.to_le_bytes()).collect(); + let mut loc = vec![0u8; 20 + 12]; + loc[..16].copy_from_slice(&guid("B04AEFB7-D19E-4A81-B789-25B8E9445913")); + le(&mut loc, 18, 1, 2); + let (ko, vo) = (32, 32 + key.len()); + le(&mut loc, 20, ko as u64, 4); + le(&mut loc, 24, vo as u64, 4); + le(&mut loc, 28, key.len() as u64, 2); + le(&mut loc, 30, val.len() as u64, 2); + loc.extend_from_slice(&key); + loc.extend_from_slice(&val); + items.push((guid("A8D35F2D-B30B-454D-ABF7-D3D84834AB0C"), loc)); + } + le(&mut img, m + 10, items.len() as u64, 2); + let mut at = 64 * 1024; + for (i, (id, data)) in items.iter().enumerate() { + let e = m + 32 + i * 32; + img[e..e + 16].copy_from_slice(id); + le(&mut img, e + 16, at as u64, 4); + le(&mut img, e + 20, data.len() as u64, 4); + img[m + at..m + at + data.len()].copy_from_slice(data); + at += data.len().div_ceil(8) * 8; + } + // blocos de dados a partir de 4 MiB; o BAT guarda estado e deslocamento (em MiB) + let ratio = (1usize << 23) * 512 / MB; + let bat = 2 * MB; + for (i, b) in blocks.iter().enumerate() { + let Some((state, data)) = b else { continue }; + let mut off = 0; + if !data.is_empty() { + off = img.len(); + let mut d = data.clone(); + d.resize(MB, 0); + img.extend_from_slice(&d); + } + le( + &mut img, + bat + (i + i / ratio) * 8, + state | (off as u64 >> 20) << 20, + 8, + ); + } + if let Some(bm) = bitmap { + let off = img.len(); + let mut d = bm; + d.resize(MB, 0); + img.extend_from_slice(&d); + le(&mut img, bat + ratio * 8, 6 | (off as u64 >> 20) << 20, 8); + } + img +} + +#[test] +fn vhdx_dynamic_with_zero_and_missing_blocks() { + let want = raw(); // 1 MiB = um bloco + let mut expect = want.clone(); + expect.extend_from_slice(&vec![0u8; 3 * MB]); + let tail = vec![0x5Au8; 100_000]; + expect[3 * MB..3 * MB + tail.len()].copy_from_slice(&tail); + let img = build_vhdx( + 4 * MB as u64, + &[ + Some((6, want.clone())), + Some((2, vec![])), // zerado + None, // não presente + Some((6, tail)), + ], + None, + None, + ); + let dir = tempfile::tempdir().unwrap(); + let p = dir.path().join("t.vhdx"); + std::fs::write(&p, img).unwrap(); + check_content(&p, &expect); +} + +#[test] +fn vhdx_differencing_uses_the_sector_bitmap() { + let want = raw(); + let dir = tempfile::tempdir().unwrap(); + std::fs::write(dir.path().join("pai.raw"), &want).unwrap(); + // filho: bloco 0 parcialmente presente, só com os setores 3 e 2000..2010 no filho + let mut data = vec![0u8; MB]; + let mut bm = vec![0u8; 512]; + let mut expect = want.clone(); + for s in std::iter::once(3usize).chain(2000..2010) { + data[s * 512..(s + 1) * 512].fill(0x77); + expect[s * 512..(s + 1) * 512].fill(0x77); + bm[s / 8] |= 1 << (s % 8); + } + let img = build_vhdx(MB as u64, &[Some((7, data))], Some("pai.raw"), Some(bm)); + let p = dir.path().join("filho.vhdx"); + std::fs::write(&p, img).unwrap(); + check_content(&p, &expect); +} + +// ---------- DMG ---------- + +#[test] +fn dmg_with_every_chunk_type() { + let want = raw(); + let sec = 512usize; + // 8 chunks de 128 setores (64 KiB) + let part = |i: usize| want[i * 128 * sec..(i + 1) * 128 * sec].to_vec(); + let (adc_enc, adc_want) = adc_pattern(128 * sec); + let mut bz = bzip2::write::BzEncoder::new(vec![], bzip2::Compression::default()); + bz.write_all(&part(3)).unwrap(); + let chunks = vec![ + DmgChunk { + ty: 1, + sectors: 128, + payload: part(0), + }, // bruto + DmgChunk { + ty: 0, + sectors: 128, + payload: vec![], + }, // zerado + DmgChunk { + ty: 0x8000_0005, + sectors: 128, + payload: zlib(&part(2)), + }, + DmgChunk { + ty: 0x8000_0006, + sectors: 128, + payload: bz.finish().unwrap(), + }, + DmgChunk { + ty: 0x8000_0004, + sectors: 128, + payload: adc_enc, + }, + DmgChunk { + ty: 2, + sectors: 128, + payload: vec![], + }, // ignorado + DmgChunk { + ty: 0x8000_0005, + sectors: 128, + payload: zlib(&part(6)), + }, + ]; + let mut expect = vec![]; + expect.extend(part(0)); + expect.extend(vec![0u8; 128 * sec]); + expect.extend(part(2)); + expect.extend(part(3)); + expect.extend(adc_want); + expect.extend(vec![0u8; 128 * sec]); + expect.extend(part(6)); + let dir = tempfile::tempdir().unwrap(); + let p = dir.path().join("t.dmg"); + std::fs::write(&p, build_dmg(&chunks, expect.len() as u64 / 512)).unwrap(); + check_content(&p, &expect); +} + +#[test] +fn dmg_lzfse_and_encrypted_are_refused_with_a_reason() { + let dir = tempfile::tempdir().unwrap(); + let p = dir.path().join("l.dmg"); + let chunks = [DmgChunk { + ty: 0x8000_0007, + sectors: 8, + payload: vec![1, 2, 3], + }]; + std::fs::write(&p, build_dmg(&chunks, 8)).unwrap(); + let s = open_path(&p).unwrap(); + let e = read_vec(s.as_ref(), 0, 512).unwrap_err().to_string(); + assert!(e.contains("LZFSE"), "{e}"); + + let p = dir.path().join("e.dmg"); + let mut img = b"encrcdsa".to_vec(); + img.resize(8192, 0); + std::fs::write(&p, img).unwrap(); + let e = open_path(&p).err().expect("deveria recusar").to_string(); + assert!(e.contains("cifrado"), "{e}"); +} + +// ---------- imagens reais do dfvfs (target/testdata) ---------- + +#[test] +fn dfvfs_images_match_a_reference_reader() { + // hashes do disco virtual inteiro, conferidos com o 7-Zip (árvore de arquivos e partições) + let table: &[(&str, &str)] = &[ + ( + "ext2.vhdx", + "a6c2f0e39afe6c6ab432ca5465349fcefe8dc944398e97b2d957d3f89dbb5d80", + ), + ( + "ext2.vmdk", + "a6c2f0e39afe6c6ab432ca5465349fcefe8dc944398e97b2d957d3f89dbb5d80", + ), + ( + "ext2.vhd", + "870be7ae16c1fa8faab05c6eb9205dc9a7ae35c5f552c5cf8a267c0bc6a5cb99", + ), + ( + "fvdetest.qcow2", + "732091e57632b7a2332f218d2d3a9ce1355a836ebacce91615a2c30a178e4ec3", + ), + ( + "windows_volume.qcow2", + "44abe9deca9658f331a2bdba2deb53192d04f35d157a1fb3ba0597b03f0524f2", + ), + ( + "apm.dmg", + "897f487f4971e72c762e00460935e3b25176cda35620b508b490f65a7e0118ff", + ), + ( + "ntfs-dynamic.vhd", + "8b10b52e3d1e76075d05a5101a6536b9fa8376a5b8f7c22f502d0987d165c876", + ), + ( + "ntfs-fixed.vhd", + "cd81fade3878f1b2957f1ece168201876bdf4e90c9b30f60c2f232eba5fea76c", + ), + ( + "ntfs-dynamic.vhdx", + "b92731f8e4bf3532418444d22a9086823a8122569500acd09cd8d2ce20eb98e9", + ), + ( + "ntfs-fixed.vhdx", + "5237dd895f38052344e2ef35a207fe9df08cd18d17b6ea857a1b93cc475e1f2e", + ), + ( + "fat-differential.vhd", + "f4b61a33ee2f7e8c19f737792a4107e46340026a9a829e4169b751901cc3ef02", + ), + ( + "ntfs-differential.vhd", + "b7922a46a6b08fa4f4fc0c51a25d5587d1d49f15cfade45ca740dd07110ae144", + ), + ( + "fat-differential.vhdx", + "a538161f34bc44c12bf9a542ce9218741c62728723ea18d0e4f6ea92e9f32e93", + ), + ( + "ntfs-differential.vhdx", + "1ef1fb5360247aa7d36a38415bc7bf6e1e52f62af5e6bd1283815e82584c7efc", + ), + ]; + for (name, hash) in table { + let Some(p) = dfvfs(name) else { continue }; + let s = open_path(&p).unwrap_or_else(|e| panic!("{name}: {e}")); + assert_eq!(&sha(s.as_ref()), hash, "{name}"); + } +} + +#[test] +fn partition_table_is_found_inside_a_qcow2() { + let Some(p) = dfvfs("fvdetest.qcow2") else { + return; + }; + let s = open_path(&p).unwrap(); + let layout = guara_core::partition::analyze(s.as_ref(), false); + assert_eq!(layout.table, "gpt"); + assert_eq!(layout.partitions.len(), 1); +} diff --git a/docs/architecture.md b/docs/architecture.md index c46dd1e..01a0c7f 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -43,6 +43,7 @@ recover copies with MD5, SHA-1 and SHA-256 and writes the | `source`, `device` | Open devices and images read-only; list disks | | `image` | Raw image tolerant of bad sectors, with an error map | | `ewf`, `aff4` | Read and write E01/Ex01 and AFF4 | +| `vdisk/` | Read QCOW2, VMDK, VHD, VHDX and DMG as the disk they contain | | `assemble` | Builds the virtual disk: image, RAID, LVM and encrypted volume | | `raid`, `raid_detect`, `lvm` | RAID reassembly (with automatic parameter discovery) and LVM2 | | `crypt/` | BitLocker, LUKS and FileVault 2 | diff --git a/docs/pt-BR/arquitetura.md b/docs/pt-BR/arquitetura.md index 944a571..dba10cd 100644 --- a/docs/pt-BR/arquitetura.md +++ b/docs/pt-BR/arquitetura.md @@ -43,6 +43,7 @@ recover copia com MD5, SHA-1 e SHA-256 e grava o manifesto | `source`, `device` | Abrir dispositivos e imagens somente para leitura; listar discos | | `image` | Imagem bruta tolerante a setores ruins, com mapa de erros | | `ewf`, `aff4` | Ler e gravar E01/Ex01 e AFF4 | +| `vdisk/` | Ler QCOW2, VMDK, VHD, VHDX e DMG como o disco que contêm | | `assemble` | Monta o disco virtual: imagem, RAID, LVM e volume cifrado | | `raid`, `raid_detect`, `lvm` | Remontagem de RAID (com descoberta automática de parâmetros) e LVM2 | | `crypt/` | BitLocker, LUKS e FileVault 2 | diff --git a/docs/pt-BR/suporte.md b/docs/pt-BR/suporte.md index 7eb945c..b2f9a2d 100644 --- a/docs/pt-BR/suporte.md +++ b/docs/pt-BR/suporte.md @@ -55,6 +55,12 @@ As senhas **nunca** vão para o arquivo de sessão. Com `--remember-keys` a sess | Bruta (dd, `.img`) | ✅ | ✅ com mapa de erros de setores ruins | | E01 e Ex01 (Expert Witness) | ✅ | ✅ com metadados do caso e segmentação | | AFF4 | ✅ | ✅ | +| QCOW2 (QEMU), versões 2 e 3 | ✅ inclusive clusters comprimidos (deflate, zstd) | ❌ | +| VMDK (VMware, VirtualBox) | ✅ esparso, `streamOptimized` e descritores com extensões flat/zero | ❌ | +| VHD e VHDX (Hyper-V) | ✅ fixo, dinâmico e diferencial (segue a cadeia de pais) | ❌ | +| DMG (Apple UDIF) | ✅ chunks zerados, brutos, ADC, zlib e bzip2 | ❌ | + +Os contêineres de disco virtual são abertos como o disco que contêm, sem conversão. Imagens que não podem ser lidas corretamente são recusadas com o motivo: QCOW2 com arquivo de apoio ou cifrado, VMDK com pai (snapshot) ou em SEsparse, DMG protegido por senha e DMG com chunks LZFSE. O log de transações do VHDX não é reproduzido (nada é gravado na imagem). `guara verify` recalcula o MD5 de uma imagem E01 ou Ex01 e compara com o gravado nela. diff --git a/docs/support.md b/docs/support.md index ff7222d..5b61db7 100644 --- a/docs/support.md +++ b/docs/support.md @@ -55,6 +55,12 @@ Passwords are **never** written to the session file. With `--remember-keys` the | Raw (dd, `.img`) | ✅ | ✅ with a bad sector error map | | E01 and Ex01 (Expert Witness) | ✅ | ✅ with case metadata and segmentation | | AFF4 | ✅ | ✅ | +| QCOW2 (QEMU), versions 2 and 3 | ✅ including compressed clusters (deflate, zstd) | ❌ | +| VMDK (VMware, VirtualBox) | ✅ sparse, `streamOptimized` and descriptors with flat/zero extents | ❌ | +| VHD and VHDX (Hyper-V) | ✅ fixed, dynamic and differencing (follows the parent chain) | ❌ | +| DMG (Apple UDIF) | ✅ zero, raw, ADC, zlib and bzip2 chunks | ❌ | + +Virtual disk containers are opened as the disk they hold, with no conversion. Images that cannot be read correctly are refused with the reason: QCOW2 with a backing file or encryption, VMDK with a parent (snapshot) or in SEsparse, password-protected DMG and DMG with LZFSE chunks. The VHDX transaction log is not replayed (nothing is ever written to the image). `guara verify` recomputes the MD5 of an E01 or Ex01 image and compares it with the one stored in it. diff --git a/scripts/fetch-testdata.sh b/scripts/fetch-testdata.sh index ec0104f..2cfaf27 100755 --- a/scripts/fetch-testdata.sh +++ b/scripts/fetch-testdata.sh @@ -13,7 +13,7 @@ for n in bitlk-images fvault2-images; do rm -rf "$tmp" done mkdir -p "$dest/dfvfs" -for f in lvm.raw apfs.raw apfs_encrypted.dmg hfsplus.raw hfs.raw xfs.raw xfs-bigtime.raw ext4.raw ext2.raw fvdetest.qcow2 luks1.raw luks2.raw bdetogo.raw; do +for f in lvm.raw apfs.raw apfs_encrypted.dmg hfsplus.raw hfs.raw xfs.raw xfs-bigtime.raw ext4.raw ext2.raw fvdetest.qcow2 ext2.vhd ext2.vhdx ext2.vmdk windows_volume.qcow2 apm.dmg ntfs-dynamic.vhd ntfs-fixed.vhd ntfs-dynamic.vhdx ntfs-fixed.vhdx ntfs-parent.vhd ntfs-differential.vhd ntfs-parent.vhdx ntfs-differential.vhdx fat-parent.vhd fat-differential.vhd fat-parent.vhdx fat-differential.vhdx luks1.raw luks2.raw bdetogo.raw; do [ -f "$dest/dfvfs/$f" ] || curl -fsSL "https://raw.githubusercontent.com/log2timeline/dfvfs/main/test_data/$f" -o "$dest/dfvfs/$f" done mkdir -p "$dest/aff4" From 26e5ebb59209dbb916e5181ebe438c561b81c1d4 Mon Sep 17 00:00:00 2001 From: Lucas Rayan Date: Thu, 22 Oct 2026 16:04:43 -0300 Subject: [PATCH 2/4] Trilha de auditoria encadeada por hash e comando guara audit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cada ação sobre a evidência (inspect, scan, recover, image, hash, search, verify, exportações e sessões) vira uma linha JSON com usuário, máquina, hora UTC e detalhes, encadeada por SHA-256. guara audit lista e --verify aponta a entrada onde a cadeia quebra. Senhas e chaves nunca entram no registro. Co-Authored-By: Claude Sonnet 5.5 --- crates/guara-cli/src/main.rs | 177 +++++++++++++---- crates/guara-core/src/audit.rs | 324 +++++++++++++++++++++++++++++++ crates/guara-core/src/lib.rs | 1 + crates/guara-core/src/service.rs | 79 +++++++- crates/guara-core/tests/audit.rs | 142 ++++++++++++++ docs/architecture.md | 1 + docs/cli.md | 13 ++ docs/pt-BR/arquitetura.md | 1 + docs/pt-BR/cli.md | 13 ++ 9 files changed, 706 insertions(+), 45 deletions(-) create mode 100644 crates/guara-core/src/audit.rs create mode 100644 crates/guara-core/tests/audit.rs diff --git a/crates/guara-cli/src/main.rs b/crates/guara-cli/src/main.rs index 3c6c579..81f935d 100644 --- a/crates/guara-cli/src/main.rs +++ b/crates/guara-cli/src/main.rs @@ -88,6 +88,20 @@ enum Cmd { }, /// Confere uma imagem E01/Ex01: recalcula o MD5 e compara com o gravado na própria imagem Verify { path: String }, + /// Mostra a trilha de auditoria (quem fez o quê e quando) ou confere o encadeamento por hash + Audit { + /// Arquivo da trilha (padrão: auditoria.jsonl na pasta de configuração ou GUARA_AUDIT_LOG) + #[arg(long)] + log: Option, + /// Só confere a cadeia de hashes; sai com erro se ela estiver quebrada + #[arg(long)] + verify: bool, + /// Mostra só as últimas N entradas + #[arg(long)] + tail: Option, + #[arg(long)] + json: bool, + }, /// Exporta os achados de uma sessão para CSV (abre no Excel) Export { session: String, @@ -427,52 +441,20 @@ fn run(cli: Cli) -> Result<(), String> { eng.save_session(&job, &session).map_err(s)?; Ok(()) } - Cmd::Verify { path } if path.to_ascii_lowercase().ends_with(".aff4") => { - let a = guara_core::aff4::Aff4Source::open(std::path::Path::new(&path)).map_err(s)?; - println!("Formato: AFF4"); - for (k, v) in &a.info { - println!("{k}: {v}"); - } - eprintln!("Recalculando o hash..."); - match a.verify_stream_md5().map_err(s)? { - Some(true) => { - println!("MD5 gravado e recalculado conferem."); - Ok(()) - } - Some(false) => Err("O MD5 recalculado difere do gravado na imagem.".into()), - None => { - println!("Esta imagem não traz MD5 para conferir."); - Ok(()) - } - } - } Cmd::Verify { path } => { - let e = guara_core::ewf::EwfSource::open(std::path::Path::new(&path)).map_err(s)?; - println!( - "Formato: {}", - if e.info.version == 2 { - "Ex01 (EnCase 7)" - } else { - "E01 (EnCase)" - } + let r = verify_image(&path); + guara_core::audit::record( + "verify", + json!({ "path": path, "result": match &r { Ok(Some(true)) => "conferem", Ok(Some(false)) => "diferem", Ok(None) => "sem hash gravado", Err(_) => "erro" } }), ); - println!("Segmentos: {}", e.info.segments); - for (k, v) in &e.info.fields { - println!("{k}: {v}"); - } - eprintln!("Recalculando o hash..."); - match e.verify().map_err(s)? { - Some(true) => { - println!("MD5 gravado e recalculado conferem: {}", e.info.md5.clone().unwrap_or_default()); - Ok(()) - } - Some(false) => Err("O MD5 recalculado difere do gravado na imagem: ela está corrompida ou foi alterada.".into()), - None => { - println!("Esta imagem não traz hash gravado para conferir."); - Ok(()) - } - } + r.map(|_| ()) } + Cmd::Audit { + log, + verify, + tail, + json, + } => audit(log, verify, tail, json), Cmd::Image { path, dest, @@ -790,6 +772,115 @@ fn recover_job( Ok(()) } +/// Confere o hash gravado numa imagem E01/Ex01 ou AFF4. `Some(true)` = confere. +fn verify_image(path: &str) -> Result, String> { + if path.to_ascii_lowercase().ends_with(".aff4") { + let a = guara_core::aff4::Aff4Source::open(std::path::Path::new(path)).map_err(s)?; + println!("Formato: AFF4"); + for (k, v) in &a.info { + println!("{k}: {v}"); + } + eprintln!("Recalculando o hash..."); + return match a.verify_stream_md5().map_err(s)? { + Some(true) => { + println!("MD5 gravado e recalculado conferem."); + Ok(Some(true)) + } + Some(false) => Err("O MD5 recalculado difere do gravado na imagem.".into()), + None => { + println!("Esta imagem não traz MD5 para conferir."); + Ok(None) + } + }; + } + let e = guara_core::ewf::EwfSource::open(std::path::Path::new(path)).map_err(s)?; + println!( + "Formato: {}", + if e.info.version == 2 { + "Ex01 (EnCase 7)" + } else { + "E01 (EnCase)" + } + ); + println!("Segmentos: {}", e.info.segments); + for (k, v) in &e.info.fields { + println!("{k}: {v}"); + } + eprintln!("Recalculando o hash..."); + match e.verify().map_err(s)? { + Some(true) => { + println!( + "MD5 gravado e recalculado conferem: {}", + e.info.md5.clone().unwrap_or_default() + ); + Ok(Some(true)) + } + Some(false) => Err( + "O MD5 recalculado difere do gravado na imagem: ela está corrompida ou foi alterada." + .into(), + ), + None => { + println!("Esta imagem não traz hash gravado para conferir."); + Ok(None) + } + } +} + +/// `guara audit`: lista a trilha ou confere a cadeia de hashes. +fn audit(log: Option, verify: bool, tail: Option, json: bool) -> Result<(), String> { + let log = match log { + Some(p) => guara_core::audit::Log::at(p), + None => guara_core::audit::Log::open_default(), + }; + let v = log.verify().map_err(s)?; + if verify { + if json { + println!("{}", serde_json::to_string_pretty(&v).unwrap()); + } else if v.ok { + println!("Cadeia íntegra: {} entradas.", v.entries); + if v.entries > 0 { + println!( + "Hash da última entrada (guarde-o fora desta máquina): {}", + v.head + ); + } + } + return match v.broken_at { + None => Ok(()), + Some((n, why)) => Err(format!("cadeia quebrada na entrada {n}: {why}")), + }; + } + let mut entries = log.entries().map_err(s)?; + if let Some(n) = tail { + let skip = entries.len().saturating_sub(n); + entries.drain(..skip); + } + if json { + println!("{}", serde_json::to_string_pretty(&entries).unwrap()); + } else if entries.is_empty() { + println!("Trilha vazia ({}).", log.path().display()); + } else { + for e in &entries { + let who = match &e.examiner { + Some(x) => format!("{}/{x}", e.user), + None => e.user.clone(), + }; + println!( + "#{:<4} {} {who}@{} {} {}", + e.seq, e.time, e.host, e.action, e.detail + ); + } + } + if !v.ok { + let (n, why) = v.broken_at.unwrap_or_default(); + eprintln!( + "{} cadeia quebrada na entrada {n}: {why}", + paint("31", "atenção:") + ); + } + Ok(()) +} + fn wait(eng: &Engine, job: &str, session: Option<&str>) -> Result { let interrupted = Arc::new(AtomicBool::new(false)); let flag = interrupted.clone(); diff --git a/crates/guara-core/src/audit.rs b/crates/guara-core/src/audit.rs new file mode 100644 index 0000000..90b8af1 --- /dev/null +++ b/crates/guara-core/src/audit.rs @@ -0,0 +1,324 @@ +//! Trilha de auditoria: cada ação do examinador (abrir uma origem, varrer, recuperar, criar +//! imagem, exportar) vira uma linha JSON com quem, quando e o quê. +//! +//! As linhas são encadeadas por hash: o `hash` de cada uma é o SHA-256 do `hash` da anterior +//! seguido do corpo da própria linha. Alterar ou apagar uma linha do meio quebra a cadeia e +//! `guara audit --verify` aponta onde. Cortar o fim do arquivo não é detectável sozinho; para +//! isso, guarde o hash da última entrada (a "cabeça") fora da máquina, por exemplo no relatório. +//! +//! O arquivo fica na pasta de configuração (`auditoria.jsonl`) ou onde `GUARA_AUDIT_LOG` +//! apontar. Segredos (senhas, chaves) nunca entram no registro. + +use crate::error::{Error, Result}; +use serde::{Deserialize, Serialize}; +use serde_json::{json, Value}; +use sha2::{Digest, Sha256}; +use std::io::{Read, Seek, SeekFrom, Write}; +use std::path::{Path, PathBuf}; + +const GENESIS: &str = "0000000000000000000000000000000000000000000000000000000000000000"; + +#[derive(Serialize)] +struct Body<'a> { + seq: u64, + time: &'a str, + user: &'a str, + host: &'a str, + #[serde(skip_serializing_if = "Option::is_none")] + examiner: Option<&'a str>, + version: &'a str, + action: &'a str, + detail: &'a Value, + prev: &'a str, +} + +/// Uma linha da trilha. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Entry { + pub seq: u64, + /// UTC, ISO 8601. + pub time: String, + pub user: String, + pub host: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub examiner: Option, + pub version: String, + pub action: String, + pub detail: Value, + pub prev: String, + pub hash: String, +} + +/// Resultado de conferir a cadeia. +#[derive(Debug, Clone, Serialize)] +pub struct Verification { + pub entries: usize, + pub ok: bool, + /// Entrada (1, 2, ...) onde a cadeia quebra e o motivo. + pub broken_at: Option<(u64, String)>, + /// Hash da última entrada; guarde-o fora da máquina para detectar truncamento. + pub head: String, +} + +pub struct Log { + path: PathBuf, +} + +fn sha_hex(prev: &str, body: &str) -> String { + let mut h = Sha256::new(); + h.update(prev.as_bytes()); + h.update(b"\n"); + h.update(body.as_bytes()); + h.finalize().iter().map(|b| format!("{b:02x}")).collect() +} + +/// UTC em ISO 8601 a partir de segundos Unix (conversão civil de Howard Hinnant). +pub fn utc_iso(secs: i64) -> String { + let days = secs.div_euclid(86400); + let rem = secs.rem_euclid(86400); + let z = days + 719468; + let era = z.div_euclid(146097); + let doe = z.rem_euclid(146097); + let yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; + let y = yoe + era * 400; + let doy = doe - (365 * yoe + yoe / 4 - yoe / 100); + let mp = (5 * doy + 2) / 153; + let d = doy - (153 * mp + 2) / 5 + 1; + let m = if mp < 10 { mp + 3 } else { mp - 9 }; + let y = if m <= 2 { y + 1 } else { y }; + format!( + "{y:04}-{m:02}-{d:02}T{:02}:{:02}:{:02}Z", + rem / 3600, + rem % 3600 / 60, + rem % 60 + ) +} + +fn now_iso() -> String { + let secs = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|d| d.as_secs() as i64) + .unwrap_or(0); + utc_iso(secs) +} + +fn env(k: &str) -> Option { + std::env::var(k).ok().filter(|v| !v.is_empty()) +} + +/// Usuário do sistema por trás da ação (o que chamou sudo, quando houver). +fn current_user() -> String { + env("SUDO_USER") + .or_else(|| env("USER")) + .or_else(|| env("USERNAME")) + .or_else(|| env("LOGNAME")) + .unwrap_or_else(|| "?".into()) +} + +fn host_name() -> String { + env("HOSTNAME") + .or_else(|| env("COMPUTERNAME")) + .or_else(|| { + std::fs::read_to_string("/etc/hostname") + .ok() + .map(|s| s.trim().to_string()) + .filter(|s| !s.is_empty()) + }) + .unwrap_or_else(|| "?".into()) +} + +/// Última linha não vazia do arquivo, lendo só o fim. +fn last_line(path: &Path) -> std::io::Result> { + let mut f = match std::fs::File::open(path) { + Ok(f) => f, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(None), + Err(e) => return Err(e), + }; + let len = f.metadata()?.len(); + let mut want = 8192u64; + loop { + let start = len.saturating_sub(want); + f.seek(SeekFrom::Start(start))?; + let mut buf = vec![]; + f.read_to_end(&mut buf)?; + let text = String::from_utf8_lossy(&buf); + let trimmed = text.trim_end(); + match trimmed.rfind('\n') { + Some(i) => return Ok(Some(trimmed[i + 1..].to_string())), + None if start == 0 => { + return Ok((!trimmed.is_empty()).then(|| trimmed.to_string())); + } + None => want *= 4, + } + } +} + +impl Log { + pub fn at(path: impl Into) -> Self { + Self { path: path.into() } + } + + /// `GUARA_AUDIT_LOG` ou `auditoria.jsonl` na pasta de configuração. + pub fn default_path() -> PathBuf { + match env("GUARA_AUDIT_LOG") { + Some(p) => PathBuf::from(p), + None => crate::settings::config_dir().join("auditoria.jsonl"), + } + } + + pub fn open_default() -> Self { + Self::at(Self::default_path()) + } + + pub fn path(&self) -> &Path { + &self.path + } + + /// Acrescenta uma entrada ao fim da cadeia. + pub fn append(&self, action: &str, detail: Value) -> Result { + let (seq, prev) = match last_line(&self.path)? { + None => (1, GENESIS.to_string()), + Some(l) => { + let e: Entry = serde_json::from_str(&l) + .map_err(|e| Error::msg(format!("última linha da trilha inválida: {e}")))?; + (e.seq + 1, e.hash) + } + }; + let (time, user, host) = (now_iso(), current_user(), host_name()); + let examiner = env("GUARA_EXAMINER"); + let version = env!("CARGO_PKG_VERSION"); + let body = serde_json::to_string(&Body { + seq, + time: &time, + user: &user, + host: &host, + examiner: examiner.as_deref(), + version, + action, + detail: &detail, + prev: &prev, + })?; + let hash = sha_hex(&prev, &body); + let line = format!("{},\"hash\":\"{hash}\"}}\n", &body[..body.len() - 1]); + if let Some(dir) = self.path.parent() { + crate::owner::create_dir_all_owned(dir)?; + } + let existed = self.path.exists(); + let mut f = std::fs::OpenOptions::new() + .create(true) + .append(true) + .open(&self.path)?; + f.write_all(line.as_bytes())?; + f.flush()?; + if !existed { + crate::owner::give_to_user(&self.path); + } + Ok(Entry { + seq, + time, + user, + host, + examiner, + version: version.into(), + action: action.into(), + detail, + prev, + hash, + }) + } + + /// Todas as entradas, na ordem. Linha ilegível vira erro (use [`Log::verify`] para saber onde). + pub fn entries(&self) -> Result> { + let text = match std::fs::read_to_string(&self.path) { + Ok(t) => t, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(vec![]), + Err(e) => return Err(e.into()), + }; + text.lines() + .filter(|l| !l.trim().is_empty()) + .enumerate() + .map(|(i, l)| { + serde_json::from_str(l) + .map_err(|e| Error::msg(format!("linha {} da trilha inválida: {e}", i + 1))) + }) + .collect() + } + + /// Confere a numeração, o encadeamento e o hash de cada linha. + pub fn verify(&self) -> Result { + let text = match std::fs::read_to_string(&self.path) { + Ok(t) => t, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => String::new(), + Err(e) => return Err(e.into()), + }; + let mut prev = GENESIS.to_string(); + let mut n = 0usize; + let broken = |n: usize, why: &str, entries: usize, head: &str| Verification { + entries, + ok: false, + broken_at: Some((n as u64, why.to_string())), + head: head.to_string(), + }; + for line in text.lines().filter(|l| !l.trim().is_empty()) { + n += 1; + let Ok(e) = serde_json::from_str::(line) else { + return Ok(broken(n, "linha ilegível", n - 1, &prev)); + }; + if e.seq != n as u64 { + return Ok(broken( + n, + "numeração fora de ordem (entrada removida ou inserida)", + n - 1, + &prev, + )); + } + if e.prev != prev { + return Ok(broken(n, "não continua a entrada anterior", n - 1, &prev)); + } + let Some(i) = line.rfind(",\"hash\":\"") else { + return Ok(broken(n, "linha sem hash", n - 1, &prev)); + }; + let body = format!("{}}}", &line[..i]); + if sha_hex(&prev, &body) != e.hash { + return Ok(broken( + n, + "conteúdo alterado (o hash não confere)", + n - 1, + &prev, + )); + } + prev = e.hash; + } + Ok(Verification { + entries: n, + ok: true, + broken_at: None, + head: prev, + }) + } +} + +/// Registra uma ação na trilha padrão. Falha ao gravar não interrompe a operação, mas é +/// avisada no stderr: uma ação sem registro precisa ser notada. +pub fn record(action: &str, detail: Value) { + if let Err(e) = Log::open_default().append(action, detail) { + eprintln!("aviso: não foi possível gravar a trilha de auditoria ({action}): {e}"); + } +} + +/// Atalho para detalhes de um caminho de origem. +pub fn path_detail(path: &str) -> Value { + json!({ "path": path }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn iso_de_datas_conhecidas() { + assert_eq!(utc_iso(0), "1970-01-01T00:00:00Z"); + assert_eq!(utc_iso(951_782_400), "2000-02-29T00:00:00Z"); + assert_eq!(utc_iso(1_792_000_000 + 3661), "2026-10-14T18:47:41Z"); + } +} diff --git a/crates/guara-core/src/lib.rs b/crates/guara-core/src/lib.rs index 3068f53..552746e 100644 --- a/crates/guara-core/src/lib.rs +++ b/crates/guara-core/src/lib.rs @@ -12,6 +12,7 @@ pub mod aff4; pub mod assemble; +pub mod audit; pub mod carve; pub mod crypt; pub mod defrag; diff --git a/crates/guara-core/src/service.rs b/crates/guara-core/src/service.rs index fef7f5f..08643de 100644 --- a/crates/guara-core/src/service.rs +++ b/crates/guara-core/src/service.rs @@ -247,6 +247,13 @@ impl Engine { } s.warnings.extend(asm.notes.iter().cloned()); } + crate::audit::record( + "scan.start", + json!({ + "job": job.id, "source": path, "size": asm.source.size(), + "fingerprint": fp, "encrypted_volumes_opened": asm.unlocked.len(), + }), + ); *job.fingerprint.lock().unwrap() = fp; *job.session_file.lock().unwrap() = Some(new_session_path(path)); spawn_scan(job.clone(), None); @@ -487,6 +494,13 @@ impl Engine { } } recover::check_destination(Some(Path::new(&sj.target)), &dest_path)?; + crate::audit::record( + "recover.start", + json!({ + "scan_job": sj.id, "source": sj.target, "destination": dest, + "files": files.len(), "bytes": total, + }), + ); let job = self.register( JobKind::Recover, dest.to_string(), @@ -525,6 +539,15 @@ impl Engine { let mut s = j2.st.lock().unwrap(); match res { Ok(rep) => { + crate::audit::record( + "recover.finish", + json!({ + "scan_job": parent.id, "destination": rep.destination, + "recovered": rep.recovered.len(), "failed": rep.failed.len(), + "skipped": rep.skipped, "bytes": rep.total_bytes, + "cancelled": rep.cancelled, + }), + ); s.report = serde_json::to_value(&rep).ok(); parent.st.lock().unwrap().recoveries.push(rep.clone()); if !rep.cancelled @@ -571,6 +594,10 @@ impl Engine { Some(Path::new(path)), Path::new(dest).parent().unwrap_or(Path::new(".")), )?; + crate::audit::record( + "image.start", + json!({ "source": path, "destination": dest, "format": format!("{format:?}").split([' ', '{']).next().unwrap_or("").to_lowercase() }), + ); let job = self.register( JobKind::Image, dest.to_string(), @@ -592,6 +619,14 @@ impl Engine { let mut s = j2.st.lock().unwrap(); match res { Ok(rep) => { + crate::audit::record( + "image.finish", + json!({ + "destination": dest, "bytes": rep.bytes, "md5": rep.md5, + "sha1": rep.sha1, "sha256": rep.sha256, + "unreadable_ranges": rep.bad_ranges.len(), "cancelled": rep.cancelled, + }), + ); s.status = if rep.cancelled { Status::Stopped } else { @@ -620,6 +655,10 @@ impl Engine { None => s.found.iter().collect(), }; crate::owner::write_owned(Path::new(path), crate::report::csv(&items))?; + crate::audit::record( + "export.csv", + json!({ "job": id, "source": j.target, "path": path, "rows": items.len() }), + ); Ok(items.len()) } @@ -649,6 +688,10 @@ impl Engine { source_hashes: hashes.as_ref(), }); crate::owner::write_owned(Path::new(path), html)?; + crate::audit::record( + "export.report", + json!({ "job": id, "source": j.target, "path": path, "case": case.case_id, "examiner": case.examiner }), + ); Ok(()) } @@ -659,6 +702,10 @@ impl Engine { return Err(Error::msg("informe pelo menos um termo")); } let src = open_path(Path::new(path)).map_err(|e| open_error(path, e))?; + crate::audit::record( + "search.start", + json!({ "source": path, "terms": opts.terms }), + ); let job = self.register( JobKind::Search, path.to_string(), @@ -751,7 +798,15 @@ impl Engine { } else if pos < size { s.status = Status::Stopped; } else { - s.report = serde_json::to_value(h.finalize()).ok(); + let hashes = h.finalize(); + crate::audit::record( + "hash.finish", + json!({ + "source": j2.target, "bytes": size, "md5": hashes.md5, + "sha1": hashes.sha1, "sha256": hashes.sha256, + }), + ); + s.report = serde_json::to_value(hashes).ok(); s.status = Status::Done; } s.finished_in = Some(s.started.elapsed().as_secs_f64()); @@ -763,7 +818,12 @@ impl Engine { pub fn save_session(&self, id: &str, path: &str) -> Result<()> { let j = self.job(id)?; - write_session(&j, Path::new(path)) + write_session(&j, Path::new(path))?; + crate::audit::record( + "session.save", + json!({ "job": id, "source": j.target, "path": path }), + ); + Ok(()) } pub fn load_session(&self, path: &str) -> Result { @@ -834,6 +894,10 @@ impl Engine { } // continua salvando automaticamente no mesmo arquivo se a varredura for retomada *job.session_file.lock().unwrap() = Some(PathBuf::from(path)); + crate::audit::record( + "session.load", + json!({ "job": job.id, "source": data.target, "path": path }), + ); if data.done { spawn_enrich(job.clone()); } @@ -1021,6 +1085,10 @@ impl Engine { .transpose()? .unwrap_or_default(); let raw = open_path(Path::new(&path)).map_err(|e| open_error(&path, e))?; + crate::audit::record( + "inspect", + json!({ "source": path, "size": raw.size(), "fingerprint": crate::source::fingerprint(raw.as_ref()) }), + ); let a = crate::assemble::assemble_source(raw, &asm)?; let mut layout = partition::analyze(a.source.as_ref(), false); if a.skip_primary { @@ -1319,6 +1387,13 @@ fn spawn_scan(job: Arc, cp: Option) { } s.finished_in = Some(s.started.elapsed().as_secs_f64()); let done = s.status == Status::Done; + crate::audit::record( + "scan.finish", + json!({ + "job": job.id, "source": job.target, + "status": format!("{:?}", s.status).to_lowercase(), "found": s.found.len(), + }), + ); drop(s); if done { spawn_enrich(job); diff --git a/crates/guara-core/tests/audit.rs b/crates/guara-core/tests/audit.rs new file mode 100644 index 0000000..d900490 --- /dev/null +++ b/crates/guara-core/tests/audit.rs @@ -0,0 +1,142 @@ +//! Trilha de auditoria: encadeamento por hash, detecção de adulteração e registro das ações do motor. + +mod common; +use common::*; +use guara_core::audit::Log; +use guara_core::{service, ScanOptions}; +use serde_json::json; + +fn log_with(n: usize) -> (tempfile::TempDir, Log) { + let dir = tempfile::tempdir().unwrap(); + let log = Log::at(dir.path().join("sub/auditoria.jsonl")); + for i in 0..n { + log.append("teste", json!({ "i": i, "caminho": "/dev/sdb" })) + .unwrap(); + } + (dir, log) +} + +#[test] +fn entries_are_numbered_and_chained() { + let (_d, log) = log_with(4); + let e = log.entries().unwrap(); + assert_eq!(e.iter().map(|x| x.seq).collect::>(), [1, 2, 3, 4]); + assert_eq!(e[0].prev, "0".repeat(64)); + for w in e.windows(2) { + assert_eq!(w[1].prev, w[0].hash); + } + assert!(e[0].time.ends_with('Z') && e[0].time.len() == 20); + let v = log.verify().unwrap(); + assert!(v.ok && v.entries == 4 && v.head == e[3].hash); + // continua de onde parou, inclusive numa instância nova + let again = Log::at(log.path()); + assert_eq!(again.append("mais", json!({})).unwrap().seq, 5); + assert!(again.verify().unwrap().ok); +} + +#[test] +fn empty_or_missing_log_is_valid() { + let dir = tempfile::tempdir().unwrap(); + let log = Log::at(dir.path().join("nada.jsonl")); + let v = log.verify().unwrap(); + assert!(v.ok && v.entries == 0); + assert!(log.entries().unwrap().is_empty()); +} + +fn tamper(log: &Log, f: impl FnOnce(&mut Vec)) { + let text = std::fs::read_to_string(log.path()).unwrap(); + let mut lines: Vec = text.lines().map(String::from).collect(); + f(&mut lines); + std::fs::write(log.path(), lines.join("\n") + "\n").unwrap(); +} + +#[test] +fn editing_a_line_breaks_the_chain_at_that_line() { + let (_d, log) = log_with(5); + tamper(&log, |l| l[2] = l[2].replace("/dev/sdb", "/dev/sdc")); + let v = log.verify().unwrap(); + assert!(!v.ok); + let (n, why) = v.broken_at.unwrap(); + assert_eq!(n, 3, "{why}"); + assert!(why.contains("hash"), "{why}"); +} + +#[test] +fn removing_or_reordering_lines_is_detected() { + let (_d, log) = log_with(5); + tamper(&log, |l| { + l.remove(1); + }); + let (n, why) = log.verify().unwrap().broken_at.unwrap(); + assert_eq!(n, 2, "{why}"); + + let (_d, log) = log_with(5); + tamper(&log, |l| l.swap(1, 2)); + assert_eq!(log.verify().unwrap().broken_at.unwrap().0, 2); + + // trocar o hash por outro também não passa: o seguinte deixa de continuar + let (_d, log) = log_with(3); + tamper(&log, |l| { + let h = l[0].rsplit('"').nth(1).unwrap().to_string(); + l[0] = l[0].replace(&h, &"a".repeat(64)); + }); + assert_eq!(log.verify().unwrap().broken_at.unwrap().0, 1); +} + +#[test] +fn garbage_line_is_reported_not_skipped() { + let (_d, log) = log_with(3); + tamper(&log, |l| l[1] = "isto não é json".into()); + let (n, why) = log.verify().unwrap().broken_at.unwrap(); + assert_eq!((n, why.as_str()), (2, "linha ilegível")); +} + +#[test] +fn engine_actions_are_recorded_without_secrets() { + init(); + let dir = tempfile::tempdir().unwrap(); + let img = dir.path().join("disco.img"); + std::fs::write(&img, vec![0u8; 2 << 20]).unwrap(); + let eng = service::Engine::new(); + let job = eng + .start_scan(img.to_str().unwrap(), ScanOptions::default()) + .unwrap(); + wait(&eng, &job); + let hash = eng.start_hash(img.to_str().unwrap()).unwrap(); + wait(&eng, &hash); + let csv = dir.path().join("achados.csv"); + eng.export_csv(&job, csv.to_str().unwrap(), None).unwrap(); + eng.save_session(&job, dir.path().join("s.guara").to_str().unwrap()) + .unwrap(); + + let log = Log::open_default(); + let e = log.entries().unwrap(); + let actions: Vec<&str> = e.iter().map(|x| x.action.as_str()).collect(); + for want in [ + "scan.start", + "scan.finish", + "hash.finish", + "export.csv", + "session.save", + ] { + assert!(actions.contains(&want), "{want} ausente em {actions:?}"); + } + let start = e.iter().find(|x| x.action == "scan.start").unwrap(); + assert_eq!(start.detail["source"], img.to_str().unwrap()); + assert_eq!(start.detail["size"], 2 << 20); + let h = e.iter().find(|x| x.action == "hash.finish").unwrap(); + assert_eq!(h.detail["sha256"].as_str().unwrap().len(), 64); + assert!(log.verify().unwrap().ok); + let all = std::fs::read_to_string(log.path()).unwrap(); + assert!(!all.contains("password") && !all.contains("senha")); +} + +fn wait(eng: &service::Engine, job: &str) { + for _ in 0..1000 { + if eng.status(job).unwrap()["status"] != "running" { + return; + } + std::thread::sleep(std::time::Duration::from_millis(10)); + } + panic!("job não terminou"); +} diff --git a/docs/architecture.md b/docs/architecture.md index 01a0c7f..83a77dc 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -43,6 +43,7 @@ recover copies with MD5, SHA-1 and SHA-256 and writes the | `source`, `device` | Open devices and images read-only; list disks | | `image` | Raw image tolerant of bad sectors, with an error map | | `ewf`, `aff4` | Read and write E01/Ex01 and AFF4 | +| `audit` | Hash-chained audit trail of every examiner action | | `vdisk/` | Read QCOW2, VMDK, VHD, VHDX and DMG as the disk they contain | | `assemble` | Builds the virtual disk: image, RAID, LVM and encrypted volume | | `raid`, `raid_detect`, `lvm` | RAID reassembly (with automatic parameter discovery) and LVM2 | diff --git a/docs/cli.md b/docs/cli.md index 8646657..308fd79 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -20,6 +20,7 @@ Reading a raw disk requires privileges: administrator on Windows, `sudo` on Linu | `search ` | Text across the whole disk, UTF-8 and UTF-16 | | `export ` | Spreadsheet of the findings | | `report ` | Printable HTML report | +| `audit` | Audit trail of every action (who, when, what); `--verify` checks the hash chain | | `sessions` | Automatically saved sessions | | `ui` | Interface in the browser (127.0.0.1, with token) | @@ -99,6 +100,18 @@ guara verify /mnt/other-disk/sdb.E01 For E01: `--segment-mib` (size of each segment, default 1500, 0 for a single file) and `--compression` (0 to 9, default 1). +## Audit trail + +Every action that touches evidence is appended to `auditoria.jsonl` in the configuration folder (or to the file named by `GUARA_AUDIT_LOG`): opening a source (`inspect`, `scan`), `recover`, `image`, `hash`, `search`, `verify`, exports and sessions. Each line has the time (UTC), the system user (the one behind `sudo`), the host, the Guará version and the details; set `GUARA_EXAMINER` to also record the examiner's name. Passwords and keys are never written. + +```bash +guara audit # lists the entries +guara audit --tail 20 --json +guara audit --verify # checks the chain; exits with an error if it is broken +``` + +The lines are chained: each one carries the SHA-256 of the previous hash plus its own content, so editing, removing or reordering an entry is detected and `--verify` says which one. Cutting the end of the file cannot be detected by the file alone: keep the hash printed by `--verify` somewhere else (for example in the case notes). + ## Video without an index (MP4 without moov) Pass an **intact video from the same camera or drone** so Guará can rebuild the index: diff --git a/docs/pt-BR/arquitetura.md b/docs/pt-BR/arquitetura.md index dba10cd..5803051 100644 --- a/docs/pt-BR/arquitetura.md +++ b/docs/pt-BR/arquitetura.md @@ -43,6 +43,7 @@ recover copia com MD5, SHA-1 e SHA-256 e grava o manifesto | `source`, `device` | Abrir dispositivos e imagens somente para leitura; listar discos | | `image` | Imagem bruta tolerante a setores ruins, com mapa de erros | | `ewf`, `aff4` | Ler e gravar E01/Ex01 e AFF4 | +| `audit` | Trilha de auditoria encadeada por hash de cada ação do perito | | `vdisk/` | Ler QCOW2, VMDK, VHD, VHDX e DMG como o disco que contêm | | `assemble` | Monta o disco virtual: imagem, RAID, LVM e volume cifrado | | `raid`, `raid_detect`, `lvm` | Remontagem de RAID (com descoberta automática de parâmetros) e LVM2 | diff --git a/docs/pt-BR/cli.md b/docs/pt-BR/cli.md index 7271297..fd1fe5c 100644 --- a/docs/pt-BR/cli.md +++ b/docs/pt-BR/cli.md @@ -20,6 +20,7 @@ Ler disco bruto exige privilégios: administrador no Windows, `sudo` no Linux e | `search ` | Texto no disco inteiro, UTF-8 e UTF-16 | | `export ` | Planilha dos achados | | `report ` | Relatório HTML imprimível | +| `audit` | Trilha de auditoria de cada ação (quem, quando, o quê); `--verify` confere o encadeamento por hash | | `sessions` | Sessões salvas automaticamente | | `ui` | Interface no navegador (127.0.0.1, com token) | @@ -99,6 +100,18 @@ guara verify /mnt/outro-disco/sdb.E01 Para E01: `--segment-mib` (tamanho de cada segmento, padrão 1500, 0 para um arquivo só) e `--compression` (0 a 9, padrão 1). +## Trilha de auditoria + +Toda ação que mexe na evidência é acrescentada a `auditoria.jsonl` na pasta de configuração (ou ao arquivo indicado em `GUARA_AUDIT_LOG`): abrir uma origem (`inspect`, `scan`), `recover`, `image`, `hash`, `search`, `verify`, exportações e sessões. Cada linha traz a hora (UTC), o usuário do sistema (o que está por trás do `sudo`), a máquina, a versão do Guará e os detalhes; defina `GUARA_EXAMINER` para registrar também o nome do perito. Senhas e chaves nunca são gravadas. + +```bash +guara audit # lista as entradas +guara audit --tail 20 --json +guara audit --verify # confere a cadeia; sai com erro se estiver quebrada +``` + +As linhas são encadeadas: cada uma leva o SHA-256 do hash anterior mais o próprio conteúdo, então editar, remover ou reordenar uma entrada é detectado e o `--verify` diz qual. Cortar o fim do arquivo não é detectável só pelo arquivo: guarde o hash que o `--verify` imprime em outro lugar (por exemplo nas notas do caso). + ## Vídeo sem índice (MP4 sem moov) Passe um vídeo **íntegro da mesma câmera ou drone** para o Guará refazer o índice: From 58940965bb9c9cd3024f01e384d735561dc1f710 Mon Sep 17 00:00:00 2001 From: Lucas Rayan Date: Thu, 22 Oct 2026 16:09:46 -0300 Subject: [PATCH 3/4] =?UTF-8?q?Relat=C3=B3rio=20em=20PDF=20(A4)=20com=20ge?= =?UTF-8?q?rador=20pr=C3=B3prio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit guara report relatorio.pdf (e o botão de relatório da interface, pela extensão) gera as mesmas seções do HTML em PDF com fontes padrão, sem dependência nova. O relatório, em PDF e HTML, passa a trazer a situação da trilha de auditoria e o hash da última entrada. Conferido com pdfinfo e pdftotext. Co-Authored-By: Claude Sonnet 5.5 --- README.md | 4 +- README.pt-BR.md | 4 +- apps/gui/ui/app.js | 2 +- apps/gui/ui/i18n-en.js | 2 +- crates/guara-cli/src/main.rs | 4 +- crates/guara-core/src/lib.rs | 1 + crates/guara-core/src/pdf.rs | 484 +++++++++++++++++++++++++++ crates/guara-core/src/report.rs | 376 +++++++++++++++++++++ crates/guara-core/src/service.rs | 24 +- crates/guara-core/tests/forensics.rs | 6 + crates/guara-core/tests/pdf.rs | 180 ++++++++++ docs/architecture.md | 2 +- docs/cli.md | 4 +- docs/pt-BR/arquitetura.md | 2 +- docs/pt-BR/cli.md | 4 +- 15 files changed, 1082 insertions(+), 17 deletions(-) create mode 100644 crates/guara-core/src/pdf.rs create mode 100644 crates/guara-core/tests/pdf.rs diff --git a/README.md b/README.md index ba958a2..0359f6f 100644 --- a/README.md +++ b/README.md @@ -111,8 +111,8 @@ Summary of the [ROADMAP](ROADMAP.md): | | | |---|---| -| **Done** | Metadata from 8 file systems, BitLocker, LUKS, FileVault 2, RAID, LVM, E01, Ex01, AFF4, fragmented JPEG, MP4 without an index, SQLite reader, SMART | -| **Next** | Audit log, signed and PDF report, APFS free map, tests on Windows and macOS | +| **Done** | Metadata from 8 file systems, BitLocker, LUKS, FileVault 2, RAID, LVM, E01, Ex01, AFF4, fragmented JPEG, MP4 without an index, SQLite reader, SMART, QCOW2/VMDK/VHD/VHDX/DMG, hash-chained audit trail, PDF report, APFS free map | +| **Next** | Digitally signed report, tests on Windows and macOS | | **Later** | NSRL and hash lists, content search, unified timeline, browser interpretation, Windows registry and messaging apps, dictionary and brute-force attacks on encrypted volumes | | **No reference image** | ReFS and Storage Spaces: they only land with validation | | **Long term** | iOS and Android backups (iTunes, ADB), OCR, NIST CFTT validation, physical phone access through bootloader/chip exploits | diff --git a/README.pt-BR.md b/README.pt-BR.md index 2692e21..0aea4d1 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -111,8 +111,8 @@ Resumo do [ROADMAP](ROADMAP.pt-BR.md): | | | |---|---| -| **Feito** | Metadados de 8 sistemas de arquivos, BitLocker, LUKS, FileVault 2, RAID, LVM, E01, Ex01, AFF4, JPEG fragmentado, MP4 sem índice, leitor de SQLite, SMART | -| **Próximo** | Registro de auditoria, relatório assinado e em PDF, mapa livre do APFS, testes em Windows e macOS | +| **Feito** | Metadados de 8 sistemas de arquivos, BitLocker, LUKS, FileVault 2, RAID, LVM, E01, Ex01, AFF4, JPEG fragmentado, MP4 sem índice, leitor de SQLite, SMART, QCOW2/VMDK/VHD/VHDX/DMG, trilha de auditoria encadeada por hash, relatório em PDF, mapa livre do APFS | +| **Próximo** | Relatório assinado digitalmente, testes em Windows e macOS | | **Depois** | NSRL e listas de hashes, busca em conteúdo, linha do tempo unificada, interpretação de navegadores, registro do Windows e apps de mensagem, ataque de dicionário e força bruta a volumes cifrados | | **Sem imagem de referência** | ReFS e Storage Spaces: só entram com validação | | **Longo prazo** | Backups de iOS e Android (iTunes, ADB), OCR, validação NIST CFTT, acesso físico a celulares por exploit de bootloader/chip | diff --git a/apps/gui/ui/app.js b/apps/gui/ui/app.js index 08942ce..4b9d350 100644 --- a/apps/gui/ui/app.js +++ b/apps/gui/ui/app.js @@ -667,7 +667,7 @@ async function onProgressClick(e) { const path = await ask({ title: 'Exportar para CSV', text: 'Grava os arquivos da vista atual (com os filtros aplicados). O arquivo abre direto no Excel.', value: (S.defaults.home || '') + (S.defaults.sep || '/') + 'guara-achados.csv', ok: 'Exportar' }); if (path) { try { const r = await rpc('export_csv', { job: S.job, path, query: EX?.query() }); toast(`${r.rows.toLocaleString(LOC())} linhas gravadas`); } catch (err) { toast(err.message); } } } else if (act === 'report') { - const f = await askForm({ title: 'Relatório de recuperação', text: 'Gera um relatório HTML pronto para imprimir, com a origem examinada, os achados e os hashes dos arquivos recuperados.', ok: 'Gerar relatório', fields: [ + const f = await askForm({ title: 'Relatório de recuperação', text: 'Gera um relatório pronto para imprimir, com a origem examinada, os achados e os hashes dos arquivos recuperados. Termine o nome em .pdf para gerar PDF; com .html sai uma página web.', ok: 'Gerar relatório', fields: [ { name: 'path', label: 'Salvar em', value: (S.defaults.home || '') + (S.defaults.sep || '/') + 'guara-relatorio.html' }, { name: 'case_id', label: 'Número do caso' }, { name: 'examiner', label: 'Responsável pelo exame' }, { name: 'organization', label: 'Organização' }, { name: 'notes', label: 'Observações', multiline: true } ] }); diff --git a/apps/gui/ui/i18n-en.js b/apps/gui/ui/i18n-en.js index d20fac2..2bb5d69 100644 --- a/apps/gui/ui/i18n-en.js +++ b/apps/gui/ui/i18n-en.js @@ -320,7 +320,7 @@ export const EN = { '{n} linhas gravadas': '{n} rows written', 'Relatório de recuperação': 'Recovery report', 'Gerar relatório': 'Generate report', - 'Gera um relatório HTML pronto para imprimir, com a origem examinada, os achados e os hashes dos arquivos recuperados.': 'Generates a print-ready HTML report with the examined source, the findings and the hashes of recovered files.', + 'Gera um relatório pronto para imprimir, com a origem examinada, os achados e os hashes dos arquivos recuperados. Termine o nome em .pdf para gerar PDF; com .html sai uma página web.': 'Generates a print-ready report with the examined source, the findings and the hashes of recovered files. End the name in .pdf for a PDF; with .html you get a web page.', 'Salvar em': 'Save to', 'Número do caso': 'Case number', 'Responsável pelo exame': 'Examiner', diff --git a/crates/guara-cli/src/main.rs b/crates/guara-cli/src/main.rs index 81f935d..52d4f1d 100644 --- a/crates/guara-cli/src/main.rs +++ b/crates/guara-cli/src/main.rs @@ -110,10 +110,10 @@ enum Cmd { #[command(flatten)] filter: FilterArgs, }, - /// Gera o relatório HTML de recuperação (identificação do caso, origem, achados, hashes) + /// Gera o relatório de recuperação (identificação do caso, origem, achados, hashes): PDF se o arquivo terminar em .pdf, senão HTML Report { session: String, - /// Arquivo HTML de saída + /// Arquivo de saída (.pdf ou .html) out: String, #[arg(long, default_value = "")] case: String, diff --git a/crates/guara-core/src/lib.rs b/crates/guara-core/src/lib.rs index 552746e..deb4e40 100644 --- a/crates/guara-core/src/lib.rs +++ b/crates/guara-core/src/lib.rs @@ -34,6 +34,7 @@ pub mod mp4rebuild; pub mod notify; pub mod owner; pub mod partition; +pub mod pdf; pub mod raid; pub mod raid_detect; pub mod reconnect; diff --git a/crates/guara-core/src/pdf.rs b/crates/guara-core/src/pdf.rs new file mode 100644 index 0000000..651b093 --- /dev/null +++ b/crates/guara-core/src/pdf.rs @@ -0,0 +1,484 @@ +//! Gerador mínimo de PDF (A4, texto e tabelas) para o relatório de recuperação. +//! +//! Usa só as fontes padrão do PDF (Helvetica, Helvetica-Bold e Courier) com codificação +//! WinAnsi, então o arquivo é autocontido e não depende de fontes instaladas. Caracteres fora +//! do Latin-1/WinAnsi viram `?`. + +use flate2::write::ZlibEncoder; +use flate2::Compression; +use std::io::Write; + +const W: f64 = 595.28; +const H: f64 = 841.89; +const MARGIN: f64 = 40.0; + +#[derive(Clone, Copy, PartialEq)] +pub enum Font { + Regular, + Bold, + Mono, +} + +impl Font { + fn res(self) -> &'static str { + match self { + Font::Regular => "F1", + Font::Bold => "F2", + Font::Mono => "F3", + } + } +} + +// Larguras AFM (milésimos de em) dos caracteres ASCII 32..=126. +const HELV: [u16; 95] = [ + 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, + 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, + 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, + 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, + 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, +]; +const HELV_B: [u16; 95] = [ + 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, + 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, + 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, + 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, + 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, +]; + +/// Letra base de um caractere acentuado do Latin-1 (a largura é a da letra sem acento). +fn base_letter(c: char) -> char { + match c { + 'À'..='Å' => 'A', + 'Ç' => 'C', + 'È'..='Ë' => 'E', + 'Ì'..='Ï' => 'I', + 'Ñ' => 'N', + 'Ò'..='Ö' | 'Ø' => 'O', + 'Ù'..='Ü' => 'U', + 'Ý' => 'Y', + 'à'..='å' => 'a', + 'ç' => 'c', + 'è'..='ë' => 'e', + 'ì'..='ï' => 'i', + 'ñ' => 'n', + 'ò'..='ö' | 'ø' => 'o', + 'ù'..='ü' => 'u', + 'ý' | 'ÿ' => 'y', + _ => '?', + } +} + +fn char_width(c: char, f: Font) -> f64 { + if f == Font::Mono { + return 0.6; + } + let t = if f == Font::Bold { &HELV_B } else { &HELV }; + let c = if (' '..='~').contains(&c) { + c + } else { + base_letter(c) + }; + match c { + ' '..='~' => t[c as usize - 32] as f64 / 1000.0, + _ => 0.556, + } +} + +pub fn text_width(s: &str, size: f64, f: Font) -> f64 { + s.chars().map(|c| char_width(c, f)).sum::() * size +} + +/// Byte WinAnsi de um caractere (ou `?`). +fn win_ansi(c: char) -> u8 { + let n = c as u32; + match c { + '€' => 0x80, + '‘' => 0x91, + '’' => 0x92, + '“' => 0x93, + '”' => 0x94, + '•' => 0x95, + '–' => 0x96, + '—' => 0x97, + '…' => 0x85, + _ if (0x20..=0x7E).contains(&n) || (0xA0..=0xFF).contains(&n) => n as u8, + _ => b'?', + } +} + +fn escape(s: &str) -> String { + let mut o = String::new(); + for c in s.chars() { + match win_ansi(c) { + b'(' => o.push_str("\\("), + b')' => o.push_str("\\)"), + b'\\' => o.push_str("\\\\"), + b if (0x20..0x7F).contains(&b) => o.push(b as char), + b => o.push_str(&format!("\\{b:03o}")), + } + } + o +} + +/// Quebra `s` em linhas de no máximo `width` pontos. Sem espaço onde quebrar (caminhos, +/// hashes), corta no meio da palavra. +pub fn wrap(s: &str, size: f64, f: Font, width: f64) -> Vec { + let mut lines = vec![]; + for para in s.split('\n') { + let mut cur = String::new(); + let mut cur_w = 0.0; + for word in para.split(' ') { + let ww = text_width(word, size, f); + let sp = if cur.is_empty() { + 0.0 + } else { + char_width(' ', f) * size + }; + if cur_w + sp + ww <= width { + if !cur.is_empty() { + cur.push(' '); + } + cur.push_str(word); + cur_w += sp + ww; + continue; + } + if !cur.is_empty() { + lines.push(std::mem::take(&mut cur)); + cur_w = 0.0; + } + if ww <= width { + cur = word.to_string(); + cur_w = ww; + } else { + for c in word.chars() { + let cw = char_width(c, f) * size; + if cur_w + cw > width && !cur.is_empty() { + lines.push(std::mem::take(&mut cur)); + cur_w = 0.0; + } + cur.push(c); + cur_w += cw; + } + } + } + lines.push(cur); + } + lines +} + +pub struct Col { + pub title: &'static str, + pub width: f64, + pub font: Font, + pub right: bool, +} + +pub struct Pdf { + title: String, + footer: String, + pages: Vec, + cur: String, + y: f64, +} + +type Rgb = (f64, f64, f64); +pub const TEAL: Rgb = (0.059, 0.463, 0.431); +pub const GRAY: Rgb = (0.36, 0.43, 0.42); +pub const BLACK: Rgb = (0.06, 0.12, 0.12); + +impl Pdf { + pub fn new(title: &str, footer: &str) -> Self { + Self { + title: title.into(), + footer: footer.into(), + pages: vec![], + cur: String::new(), + y: H - MARGIN, + } + } + + pub fn content_width() -> f64 { + W - 2.0 * MARGIN + } + + fn new_page(&mut self) { + if !self.cur.is_empty() || self.y != H - MARGIN { + self.pages.push(std::mem::take(&mut self.cur)); + } + self.y = H - MARGIN; + } + + fn ensure(&mut self, h: f64) { + if self.y - h < MARGIN + 14.0 { + self.new_page(); + } + } + + fn put(&mut self, x: f64, y: f64, s: &str, size: f64, f: Font, c: Rgb) { + if s.is_empty() { + return; + } + self.cur.push_str(&format!( + "BT /{} {size:.1} Tf {:.3} {:.3} {:.3} rg {x:.2} {y:.2} Td ({}) Tj ET\n", + f.res(), + c.0, + c.1, + c.2, + escape(s) + )); + } + + fn rect(&mut self, x: f64, y: f64, w: f64, h: f64, c: Rgb) { + self.cur.push_str(&format!( + "{:.3} {:.3} {:.3} rg {x:.2} {y:.2} {w:.2} {h:.2} re f\n", + c.0, c.1, c.2 + )); + } + + fn line(&mut self, x1: f64, x2: f64, y: f64, c: Rgb, w: f64) { + self.cur.push_str(&format!( + "{:.3} {:.3} {:.3} RG {w} w {x1:.2} {y:.2} m {x2:.2} {y:.2} l S\n", + c.0, c.1, c.2 + )); + } + + pub fn space(&mut self, h: f64) { + self.y -= h; + } + + pub fn title(&mut self, s: &str, sub: &str) { + self.ensure(60.0); + self.put(MARGIN, self.y - 20.0, s, 20.0, Font::Bold, BLACK); + self.put(MARGIN, self.y - 36.0, sub, 9.0, Font::Regular, GRAY); + self.line(MARGIN, W - MARGIN, self.y - 44.0, TEAL, 2.0); + self.y -= 58.0; + } + + pub fn heading(&mut self, s: &str) { + self.ensure(50.0); + self.y -= 14.0; + self.put(MARGIN, self.y - 11.0, s, 12.0, Font::Bold, TEAL); + self.y -= 20.0; + } + + pub fn paragraph(&mut self, s: &str, size: f64, f: Font, c: Rgb) { + for l in wrap(s, size, f, Self::content_width()) { + self.ensure(size * 1.4); + self.put(MARGIN, self.y - size, &l, size, f, c); + self.y -= size * 1.4; + } + self.y -= 3.0; + } + + /// Aviso destacado com barra lateral. + pub fn note(&mut self, s: &str) { + let size = 9.0; + let lines = wrap(s, size, Font::Regular, Self::content_width() - 16.0); + let h = lines.len() as f64 * size * 1.4 + 8.0; + self.ensure(h + 4.0); + let top = self.y; + self.rect(MARGIN, top - h, Self::content_width(), h, (1.0, 0.97, 0.88)); + self.rect(MARGIN, top - h, 3.0, h, (0.88, 0.63, 0.0)); + for (i, l) in lines.iter().enumerate() { + self.put( + MARGIN + 10.0, + top - 4.0 - size * 1.4 * (i as f64 + 0.8), + l, + size, + Font::Regular, + BLACK, + ); + } + self.y -= h + 6.0; + } + + /// Linhas rótulo/valor; o valor pode ser monoespaçado. + pub fn kv(&mut self, rows: &[(&str, &str, Font)]) { + let lw = 140.0; + let size = 9.5; + for (k, v, f) in rows { + let lines = wrap(v, size, *f, Self::content_width() - lw - 8.0); + let h = lines.len() as f64 * size * 1.4 + 6.0; + self.ensure(h); + let top = self.y; + self.put(MARGIN + 4.0, top - size - 3.0, k, size, Font::Regular, GRAY); + for (i, l) in lines.iter().enumerate() { + self.put( + MARGIN + lw, + top - size - 3.0 - i as f64 * size * 1.4, + l, + size, + *f, + BLACK, + ); + } + self.line(MARGIN, W - MARGIN, top - h, (0.89, 0.93, 0.93), 0.5); + self.y -= h; + } + self.y -= 4.0; + } + + /// Tabela com cabeçalho repetido a cada página e linhas que quebram texto. + pub fn table(&mut self, cols: &[Col], rows: &[Vec]) { + let size = 8.0; + let pad = 3.0; + let header = |p: &mut Pdf| { + let h = size * 1.4 + 2.0 * pad; + p.ensure(h + 2.0 * size * 1.4); + let top = p.y; + p.rect( + MARGIN, + top - h, + Self::content_width(), + h, + (0.906, 0.953, 0.949), + ); + let mut x = MARGIN; + for c in cols { + let tx = if c.right { + x + c.width - pad - text_width(c.title, size, Font::Bold) + } else { + x + pad + }; + p.put( + tx, + top - pad - size, + c.title, + size, + Font::Bold, + (0.043, 0.31, 0.29), + ); + x += c.width; + } + p.y -= h; + }; + header(self); + for row in rows { + let cells: Vec> = cols + .iter() + .zip(row) + .map(|(c, t)| wrap(t, size, c.font, c.width - 2.0 * pad)) + .collect(); + let n = cells.iter().map(|c| c.len()).max().unwrap_or(1).max(1); + let h = n as f64 * size * 1.35 + 2.0 * pad; + if self.y - h < MARGIN + 14.0 { + self.new_page(); + header(self); + } + let top = self.y; + let mut x = MARGIN; + for (c, lines) in cols.iter().zip(&cells) { + for (i, l) in lines.iter().enumerate() { + let tx = if c.right { + x + c.width - pad - text_width(l, size, c.font) + } else { + x + pad + }; + self.put( + tx, + top - pad - size - i as f64 * size * 1.35, + l, + size, + c.font, + BLACK, + ); + } + x += c.width; + } + self.line(MARGIN, W - MARGIN, top - h, (0.89, 0.93, 0.93), 0.5); + self.y -= h; + } + self.y -= 6.0; + } + + /// Fecha o documento. `date` é a data de criação em UTC (`AAAAMMDDHHMMSS`). + pub fn finish(mut self, date: &str) -> Vec { + if !self.cur.is_empty() || self.pages.is_empty() { + self.pages.push(std::mem::take(&mut self.cur)); + } + let total = self.pages.len(); + for (i, p) in self.pages.iter_mut().enumerate() { + let label = format!("{} · página {} de {total}", self.footer, i + 1); + let x = W - MARGIN - text_width(&label, 8.0, Font::Regular); + p.push_str(&format!( + "BT /F1 8 Tf {:.3} {:.3} {:.3} rg {x:.2} 24 Td ({}) Tj ET\n", + GRAY.0, + GRAY.1, + GRAY.2, + escape(&label) + )); + } + let mut out: Vec = b"%PDF-1.4\n%\xe2\xe3\xcf\xd3\n".to_vec(); + let mut offsets: Vec = vec![]; + let mut obj = |out: &mut Vec, body: &[u8]| { + offsets.push(out.len()); + out.extend_from_slice(format!("{} 0 obj\n", offsets.len()).as_bytes()); + out.extend_from_slice(body); + out.extend_from_slice(b"\nendobj\n"); + }; + // 1 catálogo, 2 páginas, 3-5 fontes, 6 info, depois (página, conteúdo) por página + obj(&mut out, b"<< /Type /Catalog /Pages 2 0 R >>"); + let kids: String = (0..total) + .map(|i| format!("{} 0 R", 7 + 2 * i)) + .collect::>() + .join(" "); + obj( + &mut out, + format!("<< /Type /Pages /Kids [{kids}] /Count {total} >>").as_bytes(), + ); + for name in ["Helvetica", "Helvetica-Bold", "Courier"] { + obj( + &mut out, + format!( + "<< /Type /Font /Subtype /Type1 /BaseFont /{name} /Encoding /WinAnsiEncoding >>" + ) + .as_bytes(), + ); + } + let title: String = format!("\u{feff}{}", self.title) + .encode_utf16() + .map(|u| format!("{u:04X}")) + .collect(); + obj( + &mut out, + format!( + "<< /Title <{title}> /Producer (Guara {}) /CreationDate (D:{date}Z) >>", + env!("CARGO_PKG_VERSION") + ) + .as_bytes(), + ); + for (i, p) in self.pages.iter().enumerate() { + obj( + &mut out, + format!( + "<< /Type /Page /Parent 2 0 R /MediaBox [0 0 {W} {H}] /Resources << /Font << /F1 3 0 R /F2 4 0 R /F3 5 0 R >> >> /Contents {} 0 R >>", + 8 + 2 * i + ) + .as_bytes(), + ); + let mut z = ZlibEncoder::new(vec![], Compression::default()); + z.write_all(p.as_bytes()).unwrap(); + let z = z.finish().unwrap(); + let mut body = + format!("<< /Length {} /Filter /FlateDecode >>\nstream\n", z.len()).into_bytes(); + body.extend_from_slice(&z); + body.extend_from_slice(b"\nendstream"); + obj(&mut out, &body); + } + let xref = out.len(); + out.extend_from_slice( + format!("xref\n0 {}\n0000000000 65535 f \n", offsets.len() + 1).as_bytes(), + ); + for o in &offsets { + out.extend_from_slice(format!("{o:010} 00000 n \n").as_bytes()); + } + out.extend_from_slice( + format!( + "trailer\n<< /Size {} /Root 1 0 R /Info 6 0 R >>\nstartxref\n{xref}\n%%EOF\n", + offsets.len() + 1 + ) + .as_bytes(), + ); + out + } +} diff --git a/crates/guara-core/src/report.rs b/crates/guara-core/src/report.rs index a613b8e..454a812 100644 --- a/crates/guara-core/src/report.rs +++ b/crates/guara-core/src/report.rs @@ -19,6 +19,14 @@ pub struct CaseInfo { pub notes: String, } +/// Situação da trilha de auditoria no momento do relatório. +pub struct AuditNote { + pub entries: usize, + pub ok: bool, + /// Hash da última entrada, para guardar fora da máquina. + pub head: String, +} + pub struct ReportInput<'a> { pub case: &'a CaseInfo, pub target: &'a str, @@ -30,6 +38,7 @@ pub struct ReportInput<'a> { pub elapsed: f64, pub recoveries: &'a [RecoverReport], pub source_hashes: Option<&'a Hashes>, + pub audit: Option, } fn cell(s: &str) -> String { @@ -190,6 +199,15 @@ footer{margin-top:34px;color:#5b6f6d;font-size:12px}@media print{body{background if r.options.include_allocated { ", incluindo áreas em uso" } else { "" } )); + if let Some(a) = &r.audit { + o.push_str(&format!( + "

Trilha de auditoria

Entradas{}
Encadeamento{}
Hash da última entrada{}
", + a.entries, + if a.ok { "íntegro" } else { "QUEBRADO: confira com guara audit --verify" }, + esc(&a.head) + )); + } + if let Some(l) = r.layout { o.push_str("

Partições

"); for p in &l.partitions { @@ -299,3 +317,361 @@ footer{margin-top:34px;color:#5b6f6d;font-size:12px}@media print{body{background o.push_str("
#SistemaInício (bytes)TamanhoRótuloObservação
Este relatório descreve o que o Guará encontrou e recuperou. Arquivos de confiança baixa podem estar incompletos ou sobrescritos. Datas dos metadados do sistema de arquivos estão em UTC. Guará é software livre, sem garantias.
"); o } + +/// Relatório em PDF (A4), com as mesmas seções do HTML. +pub fn pdf(r: &ReportInput) -> Vec { + use crate::pdf::{Col, Font, Pdf, BLACK, GRAY}; + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|d| d.as_secs() as i64) + .unwrap_or(0); + let stamp = crate::audit::utc_iso(now); + let version = env!("CARGO_PKG_VERSION"); + let mut d = Pdf::new( + "Guará: relatório de recuperação", + &format!("Guará {version}"), + ); + d.title( + "Relatório de recuperação de arquivos", + &format!("Gerado pelo Guará {version} em {}", fmt_unix(now)), + ); + + let nf = |v: &str| { + if v.is_empty() { + "não informado".to_string() + } else { + v.to_string() + } + }; + d.heading("Identificação do caso"); + let mut rows = vec![ + ("Número do caso", nf(&r.case.case_id), Font::Regular), + ( + "Responsável pelo exame", + nf(&r.case.examiner), + Font::Regular, + ), + ("Organização", nf(&r.case.organization), Font::Regular), + ]; + if !r.case.notes.is_empty() { + rows.push(("Observações", r.case.notes.clone(), Font::Regular)); + } + let rows: Vec<(&str, &str, Font)> = rows.iter().map(|(k, v, f)| (*k, v.as_str(), *f)).collect(); + d.kv(&rows); + + d.heading("Origem examinada"); + let mut rows: Vec<(&str, String, Font)> = + vec![("Dispositivo / imagem", r.target.to_string(), Font::Mono)]; + if let Some(l) = r.layout { + rows.push(( + "Tamanho", + format!("{} ({} bytes)", human(l.size), l.size), + Font::Regular, + )); + rows.push(("Tabela de partições", l.table.to_uppercase(), Font::Regular)); + } + rows.push(( + "Hash da origem", + match r.source_hashes { + Some(h) => format!("MD5 {}\nSHA-1 {}\nSHA-256 {}", h.md5, h.sha1, h.sha256), + None => "não calculado nesta sessão (use guara hash ou guara image)".into(), + }, + if r.source_hashes.is_some() { + Font::Mono + } else { + Font::Regular + }, + )); + if let Some(t) = r.started_unix { + rows.push(("Início da varredura", fmt_unix(t), Font::Regular)); + } + rows.push(( + "Duração da varredura", + format!("{:.1} s", r.elapsed), + Font::Regular, + )); + rows.push(( + "Modo", + format!( + "{}{}", + if r.options.mode == ScanMode::Deep { + "profunda (metadados + assinatura)" + } else { + "rápida (metadados)" + }, + if r.options.include_allocated { + ", incluindo áreas em uso" + } else { + "" + } + ), + Font::Regular, + )); + rows.push(( + "Garantia de leitura", + "A origem foi aberta somente para leitura; nenhuma escrita foi feita nela.".into(), + Font::Regular, + )); + let rows: Vec<(&str, &str, Font)> = rows.iter().map(|(k, v, f)| (*k, v.as_str(), *f)).collect(); + d.kv(&rows); + + if let Some(a) = &r.audit { + d.heading("Trilha de auditoria"); + let ok = if a.ok { + "íntegro" + } else { + "QUEBRADO: confira com guara audit --verify" + }; + d.kv(&[ + ("Entradas", &a.entries.to_string(), Font::Regular), + ("Encadeamento", ok, Font::Regular), + ("Hash da última entrada", &a.head, Font::Mono), + ]); + } + + if let Some(l) = r.layout { + d.heading("Partições"); + let cols = [ + Col { + title: "#", + width: 22.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Sistema", + width: 80.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Início (bytes)", + width: 90.0, + font: Font::Regular, + right: true, + }, + Col { + title: "Tamanho", + width: 65.0, + font: Font::Regular, + right: true, + }, + Col { + title: "Rótulo", + width: 90.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Observação", + width: 168.28, + font: Font::Regular, + right: false, + }, + ]; + let mut rows: Vec> = l + .partitions + .iter() + .map(|p| { + let obs = [ + p.lost.then_some("encontrada por varredura".to_string()), + p.encrypted + .as_ref() + .map(|e| format!("cifrada ({e}), não examinada")), + ] + .into_iter() + .flatten() + .collect::>() + .join("; "); + vec![ + (p.index + 1).to_string(), + p.fs.name().to_string(), + p.start.to_string(), + human(p.len), + p.label.clone().unwrap_or_default(), + obs, + ] + }) + .collect(); + for g in &l.gaps { + rows.push(vec![ + "-".into(), + "espaço não particionado".into(), + g.start.to_string(), + human(g.len), + String::new(), + String::new(), + ]); + } + d.table(&cols, &rows); + } + + let mut by_cat = std::collections::BTreeMap::new(); + let mut conf = [0usize; 3]; + let mut bytes = 0u64; + for f in r.found { + *by_cat.entry(f.category.label_pt()).or_insert(0usize) += 1; + conf[f.confidence as usize] += 1; + bytes += f.size; + } + d.heading("Resumo dos achados"); + d.kv(&[ + ( + "Arquivos encontrados", + &format!("{} ({})", r.found.len(), human(bytes)), + Font::Bold, + ), + ( + "Confiança", + &format!( + "alta {} · média {} · baixa {}", + conf[2], conf[1], conf[0] + ), + Font::Regular, + ), + ( + "Por tipo", + &by_cat + .iter() + .map(|(k, v)| format!("{k}: {v}")) + .collect::>() + .join(" · "), + Font::Regular, + ), + ]); + for w in r.warnings { + d.note(w); + } + + if !r.recoveries.is_empty() { + d.heading("Arquivos recuperados (integridade)"); + for rec in r.recoveries { + d.paragraph( + &format!( + "Destino: {}, {} arquivo(s), {}{}", + rec.destination, + rec.recovered.len(), + human(rec.total_bytes), + if rec.failed.is_empty() { + String::new() + } else { + format!(", {} falha(s)", rec.failed.len()) + } + ), + 9.0, + Font::Regular, + BLACK, + ); + let cols = [ + Col { + title: "Arquivo", + width: 140.0, + font: Font::Mono, + right: false, + }, + Col { + title: "Tamanho", + width: 55.0, + font: Font::Regular, + right: true, + }, + Col { + title: "Hashes", + width: 320.28, + font: Font::Mono, + right: false, + }, + ]; + let rows: Vec> = rec + .recovered + .iter() + .take(MAX_ROWS) + .map(|f| { + vec![ + f.path.clone(), + human(f.size), + format!("MD5 {}\nSHA-1 {}\nSHA-256 {}", f.md5, f.sha1, f.sha256), + ] + }) + .collect(); + d.table(&cols, &rows); + } + } + + d.heading("Relação de arquivos encontrados"); + if r.found.len() > MAX_ROWS { + d.note(&format!( + "Mostrando os primeiros {MAX_ROWS} de {}. Use a exportação CSV para a lista completa.", + r.found.len() + )); + } + let cols = [ + Col { + title: "Nome", + width: 110.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Pasta", + width: 110.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Tamanho", + width: 50.0, + font: Font::Regular, + right: true, + }, + Col { + title: "Modificado (UTC)", + width: 92.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Origem", + width: 50.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Conf.", + width: 32.0, + font: Font::Regular, + right: false, + }, + Col { + title: "Posição", + width: 71.28, + font: Font::Mono, + right: true, + }, + ]; + + let rows: Vec> = r + .found + .iter() + .take(MAX_ROWS) + .map(|f| { + vec![ + f.name.clone(), + f.dir.clone().unwrap_or_default(), + human(f.size), + iso(f.modified), + f.origin.label().to_string(), + f.confidence.label_pt().to_string(), + f.first_offset().map(|o| o.to_string()).unwrap_or_default(), + ] + }) + .collect(); + d.table(&cols, &rows); + d.paragraph( + "Este relatório descreve o que o Guará encontrou e recuperou. Arquivos de confiança baixa podem estar incompletos ou sobrescritos. Datas dos metadados do sistema de arquivos estão em UTC. Guará é software livre, sem garantias.", + 8.0, + Font::Regular, + GRAY, + ); + d.finish(&stamp.replace(['-', ':', 'T', 'Z'], "")) +} diff --git a/crates/guara-core/src/service.rs b/crates/guara-core/src/service.rs index 08643de..7796af7 100644 --- a/crates/guara-core/src/service.rs +++ b/crates/guara-core/src/service.rs @@ -675,7 +675,16 @@ impl Engine { let elapsed = s .finished_in .unwrap_or_else(|| s.started.elapsed().as_secs_f64()); - let html = crate::report::html(&crate::report::ReportInput { + let audit = crate::audit::Log::open_default() + .verify() + .ok() + .filter(|v| v.entries > 0) + .map(|v| crate::report::AuditNote { + entries: v.entries, + ok: v.ok, + head: v.head, + }); + let input = crate::report::ReportInput { case: &case, target: &j.target, options: &j.opts, @@ -686,8 +695,17 @@ impl Engine { elapsed, recoveries: &s.recoveries, source_hashes: hashes.as_ref(), - }); - crate::owner::write_owned(Path::new(path), html)?; + audit, + }; + let as_pdf = Path::new(path) + .extension() + .is_some_and(|e| e.eq_ignore_ascii_case("pdf")); + let bytes = if as_pdf { + crate::report::pdf(&input) + } else { + crate::report::html(&input).into_bytes() + }; + crate::owner::write_owned(Path::new(path), bytes)?; crate::audit::record( "export.report", json!({ "job": id, "source": j.target, "path": path, "case": case.case_id, "examiner": case.examiner }), diff --git a/crates/guara-core/tests/forensics.rs b/crates/guara-core/tests/forensics.rs index 4a8bd42..1c11cd2 100644 --- a/crates/guara-core/tests/forensics.rs +++ b/crates/guara-core/tests/forensics.rs @@ -417,8 +417,14 @@ fn relatorio_html_escapa_conteudo_e_traz_o_caso() { elapsed: 1.5, recoveries: &[], source_hashes: Some(&hashes), + audit: Some(report::AuditNote { + entries: 3, + ok: true, + head: "ab".repeat(32), + }), }); assert!(!html.contains("