From a98a80abc24aba2b064ea3ed8fc65036664f4ecf Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Tue, 1 Aug 2023 10:04:45 +0300 Subject: [PATCH 01/29] Deffine NEON_SMGR to make it possible for extensions to use Neon SMG API (#4840) ## Problem See https://neondb.slack.com/archives/C036U0GRMRB/p1689148023067319 ## Summary of changes Define NEON_SMGR in smgr.h ## Checklist before requesting a review - [ ] I have performed a self-review of my code. - [ ] If it is a core feature, I have added thorough tests. - [ ] Do we need to implement analytics? if so did you add the relevant metrics to the dashboard? - [ ] If this PR requires public announcement, mark it with /release-notes label and add several sentences in this section. ## Checklist before merging - [ ] Do not forget to reformat commit message to not include the above checklist --------- Co-authored-by: Konstantin Knizhnik --- vendor/postgres-v14 | 2 +- vendor/postgres-v15 | 2 +- vendor/revisions.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vendor/postgres-v14 b/vendor/postgres-v14 index ebedb34d01..da3885c34d 160000 --- a/vendor/postgres-v14 +++ b/vendor/postgres-v14 @@ -1 +1 @@ -Subproject commit ebedb34d01c8ac9c31e8ea4628b9854103a1dc8f +Subproject commit da3885c34db312afd555802be2ce985fafd1d8ad diff --git a/vendor/postgres-v15 b/vendor/postgres-v15 index 1220c8a63f..770c6dffc5 160000 --- a/vendor/postgres-v15 +++ b/vendor/postgres-v15 @@ -1 +1 @@ -Subproject commit 1220c8a63f00101829f9222a5821fc084b4384c7 +Subproject commit 770c6dffc5ef6aac05bf049693877fb377eea6fc diff --git a/vendor/revisions.json b/vendor/revisions.json index f5d7428cd9..8579b5abaa 100644 --- a/vendor/revisions.json +++ b/vendor/revisions.json @@ -1,4 +1,4 @@ { - "postgres-v15": "1220c8a63f00101829f9222a5821fc084b4384c7", - "postgres-v14": "ebedb34d01c8ac9c31e8ea4628b9854103a1dc8f" + "postgres-v15": "770c6dffc5ef6aac05bf049693877fb377eea6fc", + "postgres-v14": "da3885c34db312afd555802be2ce985fafd1d8ad" } From 69528b7c30eeff18b6ef3ef973e3f107093e6694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Tue, 1 Aug 2023 13:38:35 +0200 Subject: [PATCH 02/29] Prepare k-merge in compaction for async I/O (#4836) ## Problem The k-merge in pageserver compaction currently relies on iterators over the keys and also over the values. This approach does not support async code because we are using iterators and those don't support async in general. Also, the k-merge implementation we use doesn't support async either. Instead, as we already load all the keys into memory, the plan is to just do the sorting in-memory for now, switch to async, and then once we want to support workloads that don't have all keys stored in memory, we can look into switching to a k-merge implementation that supports async instead. ## Summary of changes The core of this PR is the move from functions on the `PersistentLayer` trait to return custom iterator types to inherent functions on `DeltaLayer` that return buffers with all keys or value references. Value references are a type we created in this PR, containing a `BlobRef` as well as an `Arc` pointer to the `DeltaLayerInner`, so that we can lazily load the values during compaction. This preserves the property of the current code. This PR does not switch us to doing the k-merge via sort on slices, but with this PR, doing such a switch is relatively easy and only requires changes of the compaction code itself. Part of https://github.com/neondatabase/neon/issues/4743 --- pageserver/ctl/src/layers.rs | 2 +- pageserver/src/tenant/blob_io.rs | 4 +- pageserver/src/tenant/block_io.rs | 2 +- pageserver/src/tenant/ephemeral_file.rs | 2 +- pageserver/src/tenant/storage_layer.rs | 19 +- .../src/tenant/storage_layer/delta_layer.rs | 227 ++++++------------ .../src/tenant/storage_layer/image_layer.rs | 8 +- .../tenant/storage_layer/inmemory_layer.rs | 6 +- .../src/tenant/storage_layer/remote_layer.rs | 12 +- pageserver/src/tenant/timeline.rs | 40 +-- 10 files changed, 116 insertions(+), 206 deletions(-) diff --git a/pageserver/ctl/src/layers.rs b/pageserver/ctl/src/layers.rs index d81303d533..74613eb5f4 100644 --- a/pageserver/ctl/src/layers.rs +++ b/pageserver/ctl/src/layers.rs @@ -68,7 +68,7 @@ async fn read_delta_file(path: impl AsRef) -> Result<()> { true }, )?; - let mut cursor = BlockCursor::new(&file); + let cursor = BlockCursor::new(&file); for (k, v) in all { let value = cursor.read_blob(v.pos())?; println!("key:{} value_len:{}", k, value.len()); diff --git a/pageserver/src/tenant/blob_io.rs b/pageserver/src/tenant/blob_io.rs index 4dcf7fe5fe..7dd53407e7 100644 --- a/pageserver/src/tenant/blob_io.rs +++ b/pageserver/src/tenant/blob_io.rs @@ -21,7 +21,7 @@ where R: BlockReader, { /// Read a blob into a new buffer. - pub fn read_blob(&mut self, offset: u64) -> Result, std::io::Error> { + pub fn read_blob(&self, offset: u64) -> Result, std::io::Error> { let mut buf = Vec::new(); self.read_blob_into_buf(offset, &mut buf)?; Ok(buf) @@ -29,7 +29,7 @@ where /// Read blob into the given buffer. Any previous contents in the buffer /// are overwritten. pub fn read_blob_into_buf( - &mut self, + &self, offset: u64, dstbuf: &mut Vec, ) -> Result<(), std::io::Error> { diff --git a/pageserver/src/tenant/block_io.rs b/pageserver/src/tenant/block_io.rs index 10de34e3f6..e6ebebe594 100644 --- a/pageserver/src/tenant/block_io.rs +++ b/pageserver/src/tenant/block_io.rs @@ -80,7 +80,7 @@ where BlockCursor { reader } } - pub fn read_blk(&mut self, blknum: u32) -> Result { + pub fn read_blk(&self, blknum: u32) -> Result { self.reader.read_blk(blknum) } } diff --git a/pageserver/src/tenant/ephemeral_file.rs b/pageserver/src/tenant/ephemeral_file.rs index f44534249c..8d42150824 100644 --- a/pageserver/src/tenant/ephemeral_file.rs +++ b/pageserver/src/tenant/ephemeral_file.rs @@ -420,7 +420,7 @@ mod tests { blobs.push((pos, data)); } - let mut cursor = BlockCursor::new(&file); + let cursor = BlockCursor::new(&file); for (pos, expected) in blobs { let actual = cursor.read_blob(pos)?; assert_eq!(actual, expected); diff --git a/pageserver/src/tenant/storage_layer.rs b/pageserver/src/tenant/storage_layer.rs index 05381cb56d..b4db7e2f08 100644 --- a/pageserver/src/tenant/storage_layer.rs +++ b/pageserver/src/tenant/storage_layer.rs @@ -9,7 +9,7 @@ mod remote_layer; use crate::config::PageServerConf; use crate::context::RequestContext; -use crate::repository::{Key, Value}; +use crate::repository::Key; use crate::task_mgr::TaskKind; use crate::walrecord::NeonWalRecord; use anyhow::Result; @@ -34,7 +34,7 @@ use utils::{ lsn::Lsn, }; -pub use delta_layer::{DeltaLayer, DeltaLayerWriter}; +pub use delta_layer::{DeltaLayer, DeltaLayerWriter, ValueRef}; pub use filename::{DeltaFileName, ImageFileName, LayerFileName}; pub use image_layer::{ImageLayer, ImageLayerWriter}; pub use inmemory_layer::InMemoryLayer; @@ -381,12 +381,6 @@ pub trait Layer: std::fmt::Debug + std::fmt::Display + Send + Sync + 'static { async fn dump(&self, verbose: bool, ctx: &RequestContext) -> Result<()>; } -/// Returned by [`PersistentLayer::iter`] -pub type LayerIter<'i> = Box> + 'i + Send>; - -/// Returned by [`PersistentLayer::key_iter`] -pub type LayerKeyIter<'i> = Box + 'i + Send>; - /// Get a layer descriptor from a layer. pub trait AsLayerDesc { /// Get the layer descriptor. @@ -427,15 +421,6 @@ pub trait PersistentLayer: Layer + AsLayerDesc { // `None` for `RemoteLayer`. fn local_path(&self) -> Option; - /// Iterate through all keys and values stored in the layer - fn iter(&self, ctx: &RequestContext) -> Result>; - - /// Iterate through all keys stored in the layer. Returns key, lsn and value size - /// It is used only for compaction and so is currently implemented only for DeltaLayer - fn key_iter(&self, _ctx: &RequestContext) -> Result> { - panic!("Not implemented") - } - /// Permanently remove this layer from disk. fn delete_resident_layer_file(&self) -> Result<()>; diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index 7574554b4e..98dc1230f5 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -61,8 +61,8 @@ use utils::{ }; use super::{ - AsLayerDesc, DeltaFileName, Layer, LayerAccessStats, LayerAccessStatsReset, LayerIter, - LayerKeyIter, PathOrConf, PersistentLayerDesc, + AsLayerDesc, DeltaFileName, Layer, LayerAccessStats, LayerAccessStatsReset, PathOrConf, + PersistentLayerDesc, }; /// @@ -189,7 +189,7 @@ pub struct DeltaLayer { access_stats: LayerAccessStats, - inner: OnceCell, + inner: OnceCell>, } impl std::fmt::Debug for DeltaLayer { @@ -258,10 +258,10 @@ impl Layer for DeltaLayer { tree_reader.dump().await?; - let mut cursor = file.block_cursor(); + let cursor = file.block_cursor(); // A subroutine to dump a single blob - let mut dump_blob = |blob_ref: BlobRef| -> anyhow::Result { + let dump_blob = |blob_ref: BlobRef| -> anyhow::Result { let buf = cursor.read_blob(blob_ref.pos())?; let val = Value::des(&buf)?; let desc = match val { @@ -343,7 +343,7 @@ impl Layer for DeltaLayer { })?; // Ok, 'offsets' now contains the offsets of all the entries we need to read - let mut cursor = file.block_cursor(); + let cursor = file.block_cursor(); let mut buf = Vec::new(); for (entry_lsn, pos) in offsets { cursor.read_blob_into_buf(pos, &mut buf).with_context(|| { @@ -424,23 +424,6 @@ impl PersistentLayer for DeltaLayer { Some(self.path()) } - fn iter(&self, ctx: &RequestContext) -> Result> { - let inner = self - .load(LayerAccessKind::KeyIter, ctx) - .context("load delta layer")?; - Ok(match DeltaValueIter::new(inner) { - Ok(iter) => Box::new(iter), - Err(err) => Box::new(std::iter::once(Err(err))), - }) - } - - fn key_iter(&self, ctx: &RequestContext) -> Result> { - let inner = self.load(LayerAccessKind::KeyIter, ctx)?; - Ok(Box::new( - DeltaKeyIter::new(inner).context("Layer index is corrupted")?, - )) - } - fn delete_resident_layer_file(&self) -> Result<()> { // delete underlying file fs::remove_file(self.path())?; @@ -510,7 +493,11 @@ impl DeltaLayer { /// Open the underlying file and read the metadata into memory, if it's /// not loaded already. /// - fn load(&self, access_kind: LayerAccessKind, ctx: &RequestContext) -> Result<&DeltaLayerInner> { + fn load( + &self, + access_kind: LayerAccessKind, + ctx: &RequestContext, + ) -> Result<&Arc> { self.access_stats .record_access(access_kind, ctx.task_kind()); // Quick exit if already loaded @@ -519,7 +506,7 @@ impl DeltaLayer { .with_context(|| format!("Failed to load delta layer {}", self.path().display())) } - fn load_inner(&self) -> Result { + fn load_inner(&self) -> Result> { let path = self.path(); let file = VirtualFile::open(&path) @@ -554,11 +541,11 @@ impl DeltaLayer { debug!("loaded from {}", &path.display()); - Ok(DeltaLayerInner { + Ok(Arc::new(DeltaLayerInner { file, index_start_blk: actual_summary.index_start_blk, index_root_blk: actual_summary.index_root_blk, - }) + })) } /// Create a DeltaLayer struct representing an existing file on disk. @@ -623,6 +610,24 @@ impl DeltaLayer { &self.layer_name(), ) } + + /// Obtains all keys and value references stored in the layer + /// + /// The value can be obtained via the [`ValueRef::load`] function. + pub fn load_val_refs(&self, ctx: &RequestContext) -> Result> { + let inner = self + .load(LayerAccessKind::KeyIter, ctx) + .context("load delta layer")?; + DeltaLayerInner::load_val_refs(inner).context("Layer index is corrupted") + } + + /// Loads all keys stored in the layer. Returns key, lsn and value size. + pub fn load_keys(&self, ctx: &RequestContext) -> Result> { + let inner = self + .load(LayerAccessKind::KeyIter, ctx) + .context("load delta layer keys")?; + inner.load_keys().context("Layer index is corrupted") + } } /// A builder object for constructing a new delta layer. @@ -893,121 +898,41 @@ impl Drop for DeltaLayerWriter { } } -/// -/// Iterator over all key-value pairse stored in a delta layer -/// -/// FIXME: This creates a Vector to hold the offsets of all key value pairs. -/// That takes up quite a lot of memory. Should do this in a more streaming -/// fashion. -/// -struct DeltaValueIter<'a> { - all_offsets: Vec<(DeltaKey, BlobRef)>, - next_idx: usize, - reader: BlockCursor>, -} - -struct Adapter<'a>(&'a DeltaLayerInner); - -impl<'a> BlockReader for Adapter<'a> { - type BlockLease = PageReadGuard<'static>; - - fn read_blk(&self, blknum: u32) -> Result { - self.0.file.read_blk(blknum) - } -} - -impl<'a> Iterator for DeltaValueIter<'a> { - type Item = Result<(Key, Lsn, Value)>; - - fn next(&mut self) -> Option { - self.next_res().transpose() - } -} - -impl<'a> DeltaValueIter<'a> { - fn new(inner: &'a DeltaLayerInner) -> Result { - let file = &inner.file; +impl DeltaLayerInner { + fn load_val_refs(this: &Arc) -> Result> { + let file = &this.file; let tree_reader = DiskBtreeReader::<_, DELTA_KEY_SIZE>::new( - inner.index_start_blk, - inner.index_root_blk, + this.index_start_blk, + this.index_root_blk, file, ); - let mut all_offsets: Vec<(DeltaKey, BlobRef)> = Vec::new(); + let mut all_offsets = Vec::<(Key, Lsn, ValueRef)>::new(); tree_reader.visit( &[0u8; DELTA_KEY_SIZE], VisitDirection::Forwards, |key, value| { - all_offsets.push((DeltaKey::from_slice(key), BlobRef(value))); + let delta_key = DeltaKey::from_slice(key); + let val_ref = ValueRef { + blob_ref: BlobRef(value), + reader: BlockCursor::new(Adapter(this.clone())), + }; + all_offsets.push((delta_key.key(), delta_key.lsn(), val_ref)); true }, )?; - let iter = DeltaValueIter { - all_offsets, - next_idx: 0, - reader: BlockCursor::new(Adapter(inner)), - }; - - Ok(iter) + Ok(all_offsets) } - - fn next_res(&mut self) -> Result> { - if self.next_idx < self.all_offsets.len() { - let (delta_key, blob_ref) = &self.all_offsets[self.next_idx]; - - let key = delta_key.key(); - let lsn = delta_key.lsn(); - - let buf = self.reader.read_blob(blob_ref.pos())?; - let val = Value::des(&buf)?; - self.next_idx += 1; - Ok(Some((key, lsn, val))) - } else { - Ok(None) - } - } -} -/// -/// Iterator over all keys stored in a delta layer -/// -/// FIXME: This creates a Vector to hold all keys. -/// That takes up quite a lot of memory. Should do this in a more streaming -/// fashion. -/// -struct DeltaKeyIter { - all_keys: Vec<(DeltaKey, u64)>, - next_idx: usize, -} - -impl Iterator for DeltaKeyIter { - type Item = (Key, Lsn, u64); - - fn next(&mut self) -> Option { - if self.next_idx < self.all_keys.len() { - let (delta_key, size) = &self.all_keys[self.next_idx]; - - let key = delta_key.key(); - let lsn = delta_key.lsn(); - - self.next_idx += 1; - Some((key, lsn, *size)) - } else { - None - } - } -} - -impl<'a> DeltaKeyIter { - fn new(inner: &'a DeltaLayerInner) -> Result { - let file = &inner.file; + fn load_keys(&self) -> Result> { + let file = &self.file; let tree_reader = DiskBtreeReader::<_, DELTA_KEY_SIZE>::new( - inner.index_start_blk, - inner.index_root_blk, + self.index_start_blk, + self.index_root_blk, file, ); - let mut all_keys: Vec<(DeltaKey, u64)> = Vec::new(); + let mut all_keys: Vec<(Key, Lsn, u64)> = Vec::new(); tree_reader.visit( &[0u8; DELTA_KEY_SIZE], VisitDirection::Forwards, @@ -1015,46 +940,48 @@ impl<'a> DeltaKeyIter { let delta_key = DeltaKey::from_slice(key); let pos = BlobRef(value).pos(); if let Some(last) = all_keys.last_mut() { - if last.0.key() == delta_key.key() { + if last.0 == delta_key.key() { return true; } else { // subtract offset of new key BLOB and first blob of this key // to get total size if values associated with this key - let first_pos = last.1; - last.1 = pos - first_pos; + let first_pos = last.2; + last.2 = pos - first_pos; } } - all_keys.push((delta_key, pos)); + all_keys.push((delta_key.key(), delta_key.lsn(), pos)); true }, )?; if let Some(last) = all_keys.last_mut() { // Last key occupies all space till end of layer - last.1 = std::fs::metadata(&file.file.path)?.len() - last.1; + last.2 = std::fs::metadata(&file.file.path)?.len() - last.2; } - let iter = DeltaKeyIter { - all_keys, - next_idx: 0, - }; - - Ok(iter) + Ok(all_keys) } } -#[cfg(test)] -mod test { - use super::DeltaKeyIter; - use super::DeltaLayer; - use super::DeltaValueIter; +/// Reference to an on-disk value +pub struct ValueRef { + blob_ref: BlobRef, + reader: BlockCursor, +} - // We will soon need the iters to be send in the compaction code. - // Cf https://github.com/neondatabase/neon/pull/4462#issuecomment-1587398883 - // Cf https://github.com/neondatabase/neon/issues/4471 - #[test] - fn is_send() { - fn assert_send() {} - assert_send::(); - assert_send::(); - assert_send::(); +impl ValueRef { + /// Loads the value from disk + pub fn load(&self) -> Result { + let buf = self.reader.read_blob(self.blob_ref.pos())?; + let val = Value::des(&buf)?; + Ok(val) + } +} + +struct Adapter(Arc); + +impl BlockReader for Adapter { + type BlockLease = PageReadGuard<'static>; + + fn read_blk(&self, blknum: u32) -> Result { + self.0.file.read_blk(blknum) } } diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index a5b9d8834e..f3aaed61b9 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -57,9 +57,7 @@ use utils::{ }; use super::filename::ImageFileName; -use super::{ - AsLayerDesc, Layer, LayerAccessStatsReset, LayerIter, PathOrConf, PersistentLayerDesc, -}; +use super::{AsLayerDesc, Layer, LayerAccessStatsReset, PathOrConf, PersistentLayerDesc}; /// /// Header stored in the beginning of the file @@ -255,10 +253,6 @@ impl PersistentLayer for ImageLayer { Some(self.path()) } - fn iter(&self, _ctx: &RequestContext) -> Result> { - unimplemented!(); - } - fn delete_resident_layer_file(&self) -> Result<()> { // delete underlying file fs::remove_file(self.path())?; diff --git a/pageserver/src/tenant/storage_layer/inmemory_layer.rs b/pageserver/src/tenant/storage_layer/inmemory_layer.rs index 31d0b5997a..3d222fcb1e 100644 --- a/pageserver/src/tenant/storage_layer/inmemory_layer.rs +++ b/pageserver/src/tenant/storage_layer/inmemory_layer.rs @@ -151,7 +151,7 @@ impl Layer for InMemoryLayer { return Ok(()); } - let mut cursor = inner.file.block_cursor(); + let cursor = inner.file.block_cursor(); let mut buf = Vec::new(); for (key, vec_map) in inner.index.iter() { for (lsn, pos) in vec_map.as_slice() { @@ -196,7 +196,7 @@ impl Layer for InMemoryLayer { let inner = self.inner.read().unwrap(); - let mut reader = inner.file.block_cursor(); + let reader = inner.file.block_cursor(); // Scan the page versions backwards, starting from `lsn`. if let Some(vec_map) = inner.index.get(&key) { @@ -354,7 +354,7 @@ impl InMemoryLayer { let mut buf = Vec::new(); - let mut cursor = inner.file.block_cursor(); + let cursor = inner.file.block_cursor(); let mut keys: Vec<(&Key, &VecMap)> = inner.index.iter().collect(); keys.sort_by_key(|k| k.0); diff --git a/pageserver/src/tenant/storage_layer/remote_layer.rs b/pageserver/src/tenant/storage_layer/remote_layer.rs index e5511d6051..36a6593779 100644 --- a/pageserver/src/tenant/storage_layer/remote_layer.rs +++ b/pageserver/src/tenant/storage_layer/remote_layer.rs @@ -20,8 +20,8 @@ use utils::{ use super::filename::{DeltaFileName, ImageFileName}; use super::{ - AsLayerDesc, DeltaLayer, ImageLayer, LayerAccessStats, LayerAccessStatsReset, LayerIter, - LayerKeyIter, LayerResidenceStatus, PersistentLayer, PersistentLayerDesc, + AsLayerDesc, DeltaLayer, ImageLayer, LayerAccessStats, LayerAccessStatsReset, + LayerResidenceStatus, PersistentLayer, PersistentLayerDesc, }; /// RemoteLayer is a not yet downloaded [`ImageLayer`] or @@ -129,14 +129,6 @@ impl PersistentLayer for RemoteLayer { None } - fn iter(&self, _ctx: &RequestContext) -> Result> { - bail!("cannot iterate a remote layer"); - } - - fn key_iter(&self, _ctx: &RequestContext) -> Result> { - bail!("cannot iterate a remote layer"); - } - fn delete_resident_layer_file(&self) -> Result<()> { bail!("remote layer has no layer file"); } diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index 34211fb714..628865ea2b 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -3513,7 +3513,13 @@ impl Timeline { let mut heap: BinaryHeap = BinaryHeap::with_capacity(max_holes + 1); let mut prev: Option = None; for (next_key, _next_lsn, _size) in itertools::process_results( - deltas_to_compact.iter().map(|l| l.key_iter(ctx)), + deltas_to_compact.iter().map(|l| -> Result<_> { + Ok(l.clone() + .downcast_delta_layer() + .expect("delta layer") + .load_keys(ctx)? + .into_iter()) + }), |iter_iter| iter_iter.kmerge_by(|a, b| a.0 < b.0), )? { if let Some(prev_key) = prev { @@ -3549,25 +3555,31 @@ impl Timeline { // This iterator walks through all key-value pairs from all the layers // we're compacting, in key, LSN order. let all_values_iter = itertools::process_results( - deltas_to_compact.iter().map(|l| l.iter(ctx)), + deltas_to_compact.iter().map(|l| -> Result<_> { + Ok(l.clone() + .downcast_delta_layer() + .expect("delta layer") + .load_val_refs(ctx)? + .into_iter()) + }), |iter_iter| { iter_iter.kmerge_by(|a, b| { - if let Ok((a_key, a_lsn, _)) = a { - if let Ok((b_key, b_lsn, _)) = b { - (a_key, a_lsn) < (b_key, b_lsn) - } else { - false - } - } else { - true - } + let (a_key, a_lsn, _) = a; + let (b_key, b_lsn, _) = b; + (a_key, a_lsn) < (b_key, b_lsn) }) }, )?; // This iterator walks through all keys and is needed to calculate size used by each key let mut all_keys_iter = itertools::process_results( - deltas_to_compact.iter().map(|l| l.key_iter(ctx)), + deltas_to_compact.iter().map(|l| -> Result<_> { + Ok(l.clone() + .downcast_delta_layer() + .expect("delta layer") + .load_keys(ctx)? + .into_iter()) + }), |iter_iter| { iter_iter.kmerge_by(|a, b| { let (a_key, a_lsn, _) = a; @@ -3629,8 +3641,8 @@ impl Timeline { let mut key_values_total_size = 0u64; let mut dup_start_lsn: Lsn = Lsn::INVALID; // start LSN of layer containing values of the single key let mut dup_end_lsn: Lsn = Lsn::INVALID; // end LSN of layer containing values of the single key - for x in all_values_iter { - let (key, lsn, value) = x?; + for (key, lsn, value_ref) in all_values_iter { + let value = value_ref.load()?; let same_key = prev_key.map_or(false, |prev_key| prev_key == key); // We need to check key boundaries once we reach next key or end of layer with the same key if !same_key || lsn == dup_end_lsn { From 7c076edeea8741e2f6e2c4108041170a122eed1c Mon Sep 17 00:00:00 2001 From: John Spray Date: Tue, 1 Aug 2023 13:17:49 +0100 Subject: [PATCH 03/29] pageserver: tweak period of imitate_layer_accesses (#4859) ## Problem When the eviction threshold is an integer multiple of the eviction period, it is unreliable to skip imitating accesses based on whether the last imitation was more recent than the threshold. This is because as finite time passes between the time used for the periodic execution, and the 'now' time used for updating last_layer_access_imitation. When this is just a few milliseconds, and everything else is on-time, then a 5 second threshold with a 1 second period will end up entering its 5th iteration slightly _less than_ 5 second since last_layer_access_imitation, and thereby skipping instead of running the imitation. If a few milliseconds then pass before we check the access time of a file that _should_ have been bumped by the imitation pass, then we end up evicting something we shouldn't have evicted. ## Summary of changes We can make this race far less likely by using the threshold minus one interval as the period for re-executing the imitate_layer_accesses: that way we're not vulnerable to racing by just a few millis, and there would have to be a delay of the order `period` to cause us to wrongly evict a layer. This is not a complete solution: it would be good to revisit this and use a non-walltime mechanism for pinning these layers into local storage, rather than relying on bumping access times. --- pageserver/src/tenant/timeline/eviction_task.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pageserver/src/tenant/timeline/eviction_task.rs b/pageserver/src/tenant/timeline/eviction_task.rs index 5485cc42b4..354f971e11 100644 --- a/pageserver/src/tenant/timeline/eviction_task.rs +++ b/pageserver/src/tenant/timeline/eviction_task.rs @@ -308,8 +308,13 @@ impl Timeline { ctx: &RequestContext, ) -> ControlFlow<()> { let mut state = self.eviction_task_timeline_state.lock().await; + + // Only do the imitate_layer accesses approximately as often as the threshold. A little + // more frequently, to avoid this period racing with the threshold/period-th eviction iteration. + let inter_imitate_period = p.threshold.checked_sub(p.period).unwrap_or(p.threshold); + match state.last_layer_access_imitation { - Some(ts) if ts.elapsed() < p.threshold => { /* no need to run */ } + Some(ts) if ts.elapsed() < inter_imitate_period => { /* no need to run */ } _ => { self.imitate_timeline_cached_layer_accesses(cancel, ctx) .await; @@ -332,7 +337,7 @@ impl Timeline { }; let mut state = tenant.eviction_task_tenant_state.lock().await; match state.last_layer_access_imitation { - Some(ts) if ts.elapsed() < p.threshold => { /* no need to run */ } + Some(ts) if ts.elapsed() < inter_imitate_period => { /* no need to run */ } _ => { self.imitate_synthetic_size_calculation_worker(&tenant, ctx, cancel) .await; From 78fa2b13e525e6fec62571f3f3cbe4fcaf749dd5 Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Tue, 1 Aug 2023 15:30:36 +0300 Subject: [PATCH 04/29] test: written_size_bytes_delta (#4857) Two stabs at this, by mocking a http receiver and the globals out (now reverted) and then by separating the timeline dependency and just testing what kind of events certain timelines produce. I think this pattern could work for some of our problems. Follow-up to #4822. --- pageserver/src/consumption_metrics.rs | 399 ++++++++++++++++++++------ 1 file changed, 307 insertions(+), 92 deletions(-) diff --git a/pageserver/src/consumption_metrics.rs b/pageserver/src/consumption_metrics.rs index 45b4be470b..e462d59291 100644 --- a/pageserver/src/consumption_metrics.rs +++ b/pageserver/src/consumption_metrics.rs @@ -14,9 +14,11 @@ use reqwest::Url; use serde::Serialize; use serde_with::{serde_as, DisplayFromStr}; use std::collections::HashMap; -use std::time::Duration; +use std::sync::Arc; +use std::time::{Duration, SystemTime}; use tracing::*; use utils::id::{NodeId, TenantId, TimelineId}; +use utils::lsn::Lsn; const DEFAULT_HTTP_REPORTING_TIMEOUT: Duration = Duration::from_secs(60); @@ -51,9 +53,12 @@ impl PageserverConsumptionMetricsKey { struct AbsoluteValueFactory(PageserverConsumptionMetricsKey); impl AbsoluteValueFactory { - fn now(self, val: u64) -> (PageserverConsumptionMetricsKey, (EventType, u64)) { + fn at( + self, + time: DateTime, + val: u64, + ) -> (PageserverConsumptionMetricsKey, (EventType, u64)) { let key = self.0; - let time = Utc::now(); (key, (EventType::Absolute { time }, val)) } } @@ -270,95 +275,29 @@ pub async fn collect_metrics_iteration( let mut tenant_resident_size = 0; // iterate through list of timelines in tenant - for timeline in tenant.list_timelines().iter() { + for timeline in tenant.list_timelines() { // collect per-timeline metrics only for active timelines - if timeline.is_active() { - let timeline_written_size = u64::from(timeline.get_last_record_lsn()); - let (key, written_size_now) = - PageserverConsumptionMetricsKey::written_size(tenant_id, timeline.timeline_id) - .now(timeline_written_size); + let timeline_id = timeline.timeline_id; - // last_record_lsn can only go up, right now at least, TODO: #2592 or related - // features might change this. - - let written_size_delta_key = PageserverConsumptionMetricsKey::written_size_delta( - tenant_id, - timeline.timeline_id, - ); - - // use this when available, because in a stream of incremental values, it will be - // accurate where as when last_record_lsn stops moving, we will only cache the last - // one of those. - let last_stop_time = - cached_metrics - .get(written_size_delta_key.key()) - .map(|(until, _val)| { - until - .incremental_timerange() - .expect("never create EventType::Absolute for written_size_delta") - .end - }); - - // by default, use the last sent written_size as the basis for - // calculating the delta. if we don't yet have one, use the load time value. - let prev = cached_metrics - .get(&key) - .map(|(prev_at, prev)| { - // use the prev time from our last incremental update, or default to latest - // absolute update on the first round. - let prev_at = prev_at - .absolute_time() - .expect("never create EventType::Incremental for written_size"); - let prev_at = last_stop_time.unwrap_or(prev_at); - (*prev_at, *prev) - }) - .unwrap_or_else(|| { - // if we don't have a previous point of comparison, compare to the load time - // lsn. - let (disk_consistent_lsn, loaded_at) = &timeline.loaded_at; - (DateTime::from(*loaded_at), disk_consistent_lsn.0) - }); - - // written_size_delta_bytes - current_metrics.extend( - if let Some(delta) = written_size_now.1.checked_sub(prev.1) { - let up_to = written_size_now - .0 - .absolute_time() - .expect("never create EventType::Incremental for written_size"); - let key_value = - written_size_delta_key.from_previous_up_to(prev.0, *up_to, delta); - Some(key_value) - } else { - None - }, - ); - - // written_size - current_metrics.push((key, written_size_now)); - - let span = info_span!("collect_metrics_iteration", tenant_id = %timeline.tenant_id, timeline_id = %timeline.timeline_id); - match span.in_scope(|| timeline.get_current_logical_size(ctx)) { - // Only send timeline logical size when it is fully calculated. - Ok((size, is_exact)) if is_exact => { - current_metrics.push( - PageserverConsumptionMetricsKey::timeline_logical_size( - tenant_id, - timeline.timeline_id, - ) - .now(size), - ); - } - Ok((_, _)) => {} - Err(err) => { - error!( - "failed to get current logical size for timeline {}: {err:?}", - timeline.timeline_id - ); - continue; - } - }; + match TimelineSnapshot::collect(&timeline, ctx) { + Ok(Some(snap)) => { + snap.to_metrics( + tenant_id, + timeline_id, + Utc::now(), + &mut current_metrics, + cached_metrics, + ); + } + Ok(None) => {} + Err(e) => { + error!( + "failed to get metrics values for tenant {tenant_id} timeline {}: {e:#?}", + timeline.timeline_id + ); + continue; + } } let timeline_resident_size = timeline.get_resident_physical_size(); @@ -369,7 +308,7 @@ pub async fn collect_metrics_iteration( Ok(tenant_remote_size) => { current_metrics.push( PageserverConsumptionMetricsKey::remote_storage_size(tenant_id) - .now(tenant_remote_size), + .at(Utc::now(), tenant_remote_size), ); } Err(err) => { @@ -381,7 +320,8 @@ pub async fn collect_metrics_iteration( } current_metrics.push( - PageserverConsumptionMetricsKey::resident_size(tenant_id).now(tenant_resident_size), + PageserverConsumptionMetricsKey::resident_size(tenant_id) + .at(Utc::now(), tenant_resident_size), ); // Note that this metric is calculated in a separate bgworker @@ -392,7 +332,7 @@ pub async fn collect_metrics_iteration( // only send non-zeroes because otherwise these show up as errors in logs current_metrics.push( PageserverConsumptionMetricsKey::synthetic_size(tenant_id) - .now(tenant_synthetic_size), + .at(Utc::now(), tenant_synthetic_size), ); } } @@ -486,6 +426,135 @@ pub async fn collect_metrics_iteration( } } +/// Internal type to make timeline metric production testable. +/// +/// As this value type contains all of the information needed from a timeline to produce the +/// metrics, it can easily be created with different values in test. +struct TimelineSnapshot { + loaded_at: (Lsn, SystemTime), + last_record_lsn: Lsn, + current_exact_logical_size: Option, +} + +impl TimelineSnapshot { + /// Collect the metrics from an actual timeline. + /// + /// Fails currently only when [`Timeline::get_current_logical_size`] fails. + /// + /// [`Timeline::get_current_logical_size`]: crate::tenant::Timeline::get_current_logical_size + fn collect( + t: &Arc, + ctx: &RequestContext, + ) -> anyhow::Result> { + use anyhow::Context; + + if !t.is_active() { + // no collection for broken or stopping needed, we will still keep the cached values + // though at the caller. + Ok(None) + } else { + let loaded_at = t.loaded_at; + let last_record_lsn = t.get_last_record_lsn(); + + let current_exact_logical_size = { + let span = info_span!("collect_metrics_iteration", tenant_id = %t.tenant_id, timeline_id = %t.timeline_id); + let res = span + .in_scope(|| t.get_current_logical_size(ctx)) + .context("get_current_logical_size"); + match res? { + // Only send timeline logical size when it is fully calculated. + (size, is_exact) if is_exact => Some(size), + (_, _) => None, + } + }; + + Ok(Some(TimelineSnapshot { + loaded_at, + last_record_lsn, + current_exact_logical_size, + })) + } + } + + /// Produce the timeline consumption metrics into the `metrics` argument. + fn to_metrics( + &self, + tenant_id: TenantId, + timeline_id: TimelineId, + now: DateTime, + metrics: &mut Vec<(PageserverConsumptionMetricsKey, (EventType, u64))>, + cache: &HashMap, + ) { + let timeline_written_size = u64::from(self.last_record_lsn); + + let (key, written_size_now) = + PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) + .at(now, timeline_written_size); + + // last_record_lsn can only go up, right now at least, TODO: #2592 or related + // features might change this. + + let written_size_delta_key = + PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id); + + // use this when available, because in a stream of incremental values, it will be + // accurate where as when last_record_lsn stops moving, we will only cache the last + // one of those. + let last_stop_time = cache + .get(written_size_delta_key.key()) + .map(|(until, _val)| { + until + .incremental_timerange() + .expect("never create EventType::Absolute for written_size_delta") + .end + }); + + // by default, use the last sent written_size as the basis for + // calculating the delta. if we don't yet have one, use the load time value. + let prev = cache + .get(&key) + .map(|(prev_at, prev)| { + // use the prev time from our last incremental update, or default to latest + // absolute update on the first round. + let prev_at = prev_at + .absolute_time() + .expect("never create EventType::Incremental for written_size"); + let prev_at = last_stop_time.unwrap_or(prev_at); + (*prev_at, *prev) + }) + .unwrap_or_else(|| { + // if we don't have a previous point of comparison, compare to the load time + // lsn. + let (disk_consistent_lsn, loaded_at) = &self.loaded_at; + (DateTime::from(*loaded_at), disk_consistent_lsn.0) + }); + + // written_size_bytes_delta + metrics.extend( + if let Some(delta) = written_size_now.1.checked_sub(prev.1) { + let up_to = written_size_now + .0 + .absolute_time() + .expect("never create EventType::Incremental for written_size"); + let key_value = written_size_delta_key.from_previous_up_to(prev.0, *up_to, delta); + Some(key_value) + } else { + None + }, + ); + + // written_size + metrics.push((key, written_size_now)); + + if let Some(size) = self.current_exact_logical_size { + metrics.push( + PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) + .at(now, size), + ); + } + } +} + /// Caclculate synthetic size for each active tenant pub async fn calculate_synthetic_size_worker( synthetic_size_calculation_interval: Duration, @@ -536,3 +605,149 @@ pub async fn calculate_synthetic_size_worker( } } } + +#[cfg(test)] +mod tests { + use std::collections::HashMap; + + use std::time::SystemTime; + use utils::{ + id::{TenantId, TimelineId}, + lsn::Lsn, + }; + + use crate::consumption_metrics::PageserverConsumptionMetricsKey; + + use super::TimelineSnapshot; + use chrono::{DateTime, Utc}; + + #[test] + fn startup_collected_timeline_metrics_before_advancing() { + let tenant_id = TenantId::generate(); + let timeline_id = TimelineId::generate(); + + let mut metrics = Vec::new(); + let cache = HashMap::new(); + + let initdb_lsn = Lsn(0x10000); + let disk_consistent_lsn = Lsn(initdb_lsn.0 * 2); + + let snap = TimelineSnapshot { + loaded_at: (disk_consistent_lsn, SystemTime::now()), + last_record_lsn: disk_consistent_lsn, + current_exact_logical_size: Some(0x42000), + }; + + let now = DateTime::::from(SystemTime::now()); + + snap.to_metrics(tenant_id, timeline_id, now, &mut metrics, &cache); + + assert_eq!( + metrics, + &[ + PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) + .from_previous_up_to(snap.loaded_at.1.into(), now, 0), + PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) + .at(now, disk_consistent_lsn.0), + PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) + .at(now, 0x42000) + ] + ); + } + + #[test] + fn startup_collected_timeline_metrics_second_round() { + let tenant_id = TenantId::generate(); + let timeline_id = TimelineId::generate(); + + let [now, before, init] = time_backwards(); + + let now = DateTime::::from(now); + let before = DateTime::::from(before); + + let initdb_lsn = Lsn(0x10000); + let disk_consistent_lsn = Lsn(initdb_lsn.0 * 2); + + let mut metrics = Vec::new(); + let cache = + HashMap::from([ + PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) + .at(before, disk_consistent_lsn.0), + ]); + + let snap = TimelineSnapshot { + loaded_at: (disk_consistent_lsn, init), + last_record_lsn: disk_consistent_lsn, + current_exact_logical_size: Some(0x42000), + }; + + snap.to_metrics(tenant_id, timeline_id, now, &mut metrics, &cache); + + assert_eq!( + metrics, + &[ + PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) + .from_previous_up_to(before, now, 0), + PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) + .at(now, disk_consistent_lsn.0), + PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) + .at(now, 0x42000) + ] + ); + } + + #[test] + fn startup_collected_timeline_metrics_nth_round_at_same_lsn() { + let tenant_id = TenantId::generate(); + let timeline_id = TimelineId::generate(); + + let [now, just_before, before, init] = time_backwards(); + + let now = DateTime::::from(now); + let just_before = DateTime::::from(just_before); + let before = DateTime::::from(before); + + let initdb_lsn = Lsn(0x10000); + let disk_consistent_lsn = Lsn(initdb_lsn.0 * 2); + + let mut metrics = Vec::new(); + let cache = HashMap::from([ + // at t=before was the last time the last_record_lsn changed + PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) + .at(before, disk_consistent_lsn.0), + // end time of this event is used for the next ones + PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) + .from_previous_up_to(before, just_before, 0), + ]); + + let snap = TimelineSnapshot { + loaded_at: (disk_consistent_lsn, init), + last_record_lsn: disk_consistent_lsn, + current_exact_logical_size: Some(0x42000), + }; + + snap.to_metrics(tenant_id, timeline_id, now, &mut metrics, &cache); + + assert_eq!( + metrics, + &[ + PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) + .from_previous_up_to(just_before, now, 0), + PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) + .at(now, disk_consistent_lsn.0), + PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) + .at(now, 0x42000) + ] + ); + } + + fn time_backwards() -> [std::time::SystemTime; N] { + let mut times = [std::time::SystemTime::UNIX_EPOCH; N]; + times[0] = std::time::SystemTime::now(); + for behind in 1..N { + times[behind] = times[0] - std::time::Duration::from_secs(behind as u64); + } + + times + } +} From 3a00a5deb296c708d7a4aee7e55275e43a84ab22 Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Tue, 1 Aug 2023 18:14:16 +0300 Subject: [PATCH 05/29] refactor: tidy consumption metrics (#4860) Tidying up I've been wanting to do for some time. Follow-up to #4857. --- libs/consumption_metrics/src/lib.rs | 6 +- pageserver/src/consumption_metrics.rs | 187 ++++++++++++-------------- pageserver/src/tenant.rs | 11 +- pageserver/src/tenant/timeline.rs | 2 +- proxy/src/metrics.rs | 13 +- 5 files changed, 102 insertions(+), 117 deletions(-) diff --git a/libs/consumption_metrics/src/lib.rs b/libs/consumption_metrics/src/lib.rs index 3a1b396d63..418885a1b0 100644 --- a/libs/consumption_metrics/src/lib.rs +++ b/libs/consumption_metrics/src/lib.rs @@ -57,7 +57,7 @@ pub struct Event { pub extra: Extra, } -pub fn idempotency_key(node_id: String) -> String { +pub fn idempotency_key(node_id: &str) -> String { format!( "{}-{}-{:04}", Utc::now(), @@ -71,6 +71,6 @@ pub const CHUNK_SIZE: usize = 1000; // Just a wrapper around a slice of events // to serialize it as `{"events" : [ ] } #[derive(serde::Serialize)] -pub struct EventChunk<'a, T> { - pub events: &'a [T], +pub struct EventChunk<'a, T: Clone> { + pub events: std::borrow::Cow<'a, [T]>, } diff --git a/pageserver/src/consumption_metrics.rs b/pageserver/src/consumption_metrics.rs index e462d59291..326802e7e4 100644 --- a/pageserver/src/consumption_metrics.rs +++ b/pageserver/src/consumption_metrics.rs @@ -23,7 +23,7 @@ use utils::lsn::Lsn; const DEFAULT_HTTP_REPORTING_TIMEOUT: Duration = Duration::from_secs(60); #[serde_as] -#[derive(Serialize, Debug)] +#[derive(Serialize, Debug, Clone, Copy)] struct Ids { #[serde_as(as = "DisplayFromStr")] tenant_id: TenantId, @@ -34,13 +34,13 @@ struct Ids { /// Key that uniquely identifies the object, this metric describes. #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct PageserverConsumptionMetricsKey { - pub tenant_id: TenantId, - pub timeline_id: Option, - pub metric: &'static str, +struct MetricsKey { + tenant_id: TenantId, + timeline_id: Option, + metric: &'static str, } -impl PageserverConsumptionMetricsKey { +impl MetricsKey { const fn absolute_values(self) -> AbsoluteValueFactory { AbsoluteValueFactory(self) } @@ -50,21 +50,17 @@ impl PageserverConsumptionMetricsKey { } /// Helper type which each individual metric kind can return to produce only absolute values. -struct AbsoluteValueFactory(PageserverConsumptionMetricsKey); +struct AbsoluteValueFactory(MetricsKey); impl AbsoluteValueFactory { - fn at( - self, - time: DateTime, - val: u64, - ) -> (PageserverConsumptionMetricsKey, (EventType, u64)) { + fn at(self, time: DateTime, val: u64) -> (MetricsKey, (EventType, u64)) { let key = self.0; (key, (EventType::Absolute { time }, val)) } } /// Helper type which each individual metric kind can return to produce only incremental values. -struct IncrementalValueFactory(PageserverConsumptionMetricsKey); +struct IncrementalValueFactory(MetricsKey); impl IncrementalValueFactory { #[allow(clippy::wrong_self_convention)] @@ -73,7 +69,7 @@ impl IncrementalValueFactory { prev_end: DateTime, up_to: DateTime, val: u64, - ) -> (PageserverConsumptionMetricsKey, (EventType, u64)) { + ) -> (MetricsKey, (EventType, u64)) { let key = self.0; // cannot assert prev_end < up_to because these are realtime clock based ( @@ -88,15 +84,18 @@ impl IncrementalValueFactory { ) } - fn key(&self) -> &PageserverConsumptionMetricsKey { + fn key(&self) -> &MetricsKey { &self.0 } } -// the static part of a PageserverConsumptionMetricsKey -impl PageserverConsumptionMetricsKey { +// the static part of a MetricsKey +impl MetricsKey { + /// Absolute value of [`Timeline::get_last_record_lsn`]. + /// + /// [`Timeline::get_last_record_lsn`]: crate::tenant::Timeline::get_last_record_lsn const fn written_size(tenant_id: TenantId, timeline_id: TimelineId) -> AbsoluteValueFactory { - PageserverConsumptionMetricsKey { + MetricsKey { tenant_id, timeline_id: Some(timeline_id), metric: "written_size", @@ -104,13 +103,14 @@ impl PageserverConsumptionMetricsKey { .absolute_values() } - /// Values will be the difference of the latest written_size (last_record_lsn) to what we - /// previously sent. + /// Values will be the difference of the latest [`MetricsKey::written_size`] to what we + /// previously sent, starting from the previously sent incremental time range ending at the + /// latest absolute measurement. const fn written_size_delta( tenant_id: TenantId, timeline_id: TimelineId, ) -> IncrementalValueFactory { - PageserverConsumptionMetricsKey { + MetricsKey { tenant_id, timeline_id: Some(timeline_id), metric: "written_size_bytes_delta", @@ -118,11 +118,14 @@ impl PageserverConsumptionMetricsKey { .incremental_values() } + /// Exact [`Timeline::get_current_logical_size`]. + /// + /// [`Timeline::get_current_logical_size`]: crate::tenant::Timeline::get_current_logical_size const fn timeline_logical_size( tenant_id: TenantId, timeline_id: TimelineId, ) -> AbsoluteValueFactory { - PageserverConsumptionMetricsKey { + MetricsKey { tenant_id, timeline_id: Some(timeline_id), metric: "timeline_logical_size", @@ -130,8 +133,11 @@ impl PageserverConsumptionMetricsKey { .absolute_values() } + /// [`Tenant::remote_size`] + /// + /// [`Tenant::remote_size`]: crate::tenant::Tenant::remote_size const fn remote_storage_size(tenant_id: TenantId) -> AbsoluteValueFactory { - PageserverConsumptionMetricsKey { + MetricsKey { tenant_id, timeline_id: None, metric: "remote_storage_size", @@ -139,8 +145,11 @@ impl PageserverConsumptionMetricsKey { .absolute_values() } + /// Sum of [`Timeline::resident_physical_size`] for each `Tenant`. + /// + /// [`Timeline::resident_physical_size`]: crate::tenant::Timeline::resident_physical_size const fn resident_size(tenant_id: TenantId) -> AbsoluteValueFactory { - PageserverConsumptionMetricsKey { + MetricsKey { tenant_id, timeline_id: None, metric: "resident_size", @@ -148,8 +157,11 @@ impl PageserverConsumptionMetricsKey { .absolute_values() } + /// [`Tenant::cached_synthetic_size`] as refreshed by [`calculate_synthetic_size_worker`]. + /// + /// [`Tenant::cached_synthetic_size`]: crate::tenant::Tenant::cached_synthetic_size const fn synthetic_size(tenant_id: TenantId) -> AbsoluteValueFactory { - PageserverConsumptionMetricsKey { + MetricsKey { tenant_id, timeline_id: None, metric: "synthetic_storage_size", @@ -233,15 +245,15 @@ pub async fn collect_metrics( /// /// TODO /// - refactor this function (chunking+sending part) to reuse it in proxy module; -pub async fn collect_metrics_iteration( +async fn collect_metrics_iteration( client: &reqwest::Client, - cached_metrics: &mut HashMap, + cached_metrics: &mut HashMap, metric_collection_endpoint: &reqwest::Url, node_id: NodeId, ctx: &RequestContext, send_cached: bool, ) { - let mut current_metrics: Vec<(PageserverConsumptionMetricsKey, (EventType, u64))> = Vec::new(); + let mut current_metrics: Vec<(MetricsKey, (EventType, u64))> = Vec::new(); trace!( "starting collect_metrics_iteration. metric_collection_endpoint: {}", metric_collection_endpoint @@ -300,40 +312,23 @@ pub async fn collect_metrics_iteration( } } - let timeline_resident_size = timeline.get_resident_physical_size(); - tenant_resident_size += timeline_resident_size; + tenant_resident_size += timeline.resident_physical_size(); } - match tenant.get_remote_size().await { - Ok(tenant_remote_size) => { - current_metrics.push( - PageserverConsumptionMetricsKey::remote_storage_size(tenant_id) - .at(Utc::now(), tenant_remote_size), - ); - } - Err(err) => { - error!( - "failed to get remote size for tenant {}: {err:?}", - tenant_id - ); - } - } + current_metrics + .push(MetricsKey::remote_storage_size(tenant_id).at(Utc::now(), tenant.remote_size())); - current_metrics.push( - PageserverConsumptionMetricsKey::resident_size(tenant_id) - .at(Utc::now(), tenant_resident_size), - ); + current_metrics + .push(MetricsKey::resident_size(tenant_id).at(Utc::now(), tenant_resident_size)); // Note that this metric is calculated in a separate bgworker // Here we only use cached value, which may lag behind the real latest one - let tenant_synthetic_size = tenant.get_cached_synthetic_size(); + let synthetic_size = tenant.cached_synthetic_size(); - if tenant_synthetic_size != 0 { + if synthetic_size != 0 { // only send non-zeroes because otherwise these show up as errors in logs - current_metrics.push( - PageserverConsumptionMetricsKey::synthetic_size(tenant_id) - .at(Utc::now(), tenant_synthetic_size), - ); + current_metrics + .push(MetricsKey::synthetic_size(tenant_id).at(Utc::now(), synthetic_size)); } } @@ -365,6 +360,8 @@ pub async fn collect_metrics_iteration( let mut chunk_to_send: Vec> = Vec::with_capacity(CHUNK_SIZE); + let node_id = node_id.to_string(); + for chunk in chunks { chunk_to_send.clear(); @@ -372,7 +369,7 @@ pub async fn collect_metrics_iteration( chunk_to_send.extend(chunk.iter().map(|(curr_key, (when, curr_val))| Event { kind: *when, metric: curr_key.metric, - idempotency_key: idempotency_key(node_id.to_string()), + idempotency_key: idempotency_key(&node_id), value: *curr_val, extra: Ids { tenant_id: curr_key.tenant_id, @@ -380,17 +377,14 @@ pub async fn collect_metrics_iteration( }, })); - let chunk_json = serde_json::value::to_raw_value(&EventChunk { - events: &chunk_to_send, - }) - .expect("PageserverConsumptionMetric should not fail serialization"); - const MAX_RETRIES: u32 = 3; for attempt in 0..MAX_RETRIES { let res = client .post(metric_collection_endpoint.clone()) - .json(&chunk_json) + .json(&EventChunk { + events: (&chunk_to_send).into(), + }) .send() .await; @@ -482,20 +476,18 @@ impl TimelineSnapshot { tenant_id: TenantId, timeline_id: TimelineId, now: DateTime, - metrics: &mut Vec<(PageserverConsumptionMetricsKey, (EventType, u64))>, - cache: &HashMap, + metrics: &mut Vec<(MetricsKey, (EventType, u64))>, + cache: &HashMap, ) { let timeline_written_size = u64::from(self.last_record_lsn); let (key, written_size_now) = - PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) - .at(now, timeline_written_size); + MetricsKey::written_size(tenant_id, timeline_id).at(now, timeline_written_size); // last_record_lsn can only go up, right now at least, TODO: #2592 or related // features might change this. - let written_size_delta_key = - PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id); + let written_size_delta_key = MetricsKey::written_size_delta(tenant_id, timeline_id); // use this when available, because in a stream of incremental values, it will be // accurate where as when last_record_lsn stops moving, we will only cache the last @@ -547,10 +539,7 @@ impl TimelineSnapshot { metrics.push((key, written_size_now)); if let Some(size) = self.current_exact_logical_size { - metrics.push( - PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) - .at(now, size), - ); + metrics.push(MetricsKey::timeline_logical_size(tenant_id, timeline_id).at(now, size)); } } } @@ -569,7 +558,7 @@ pub async fn calculate_synthetic_size_worker( _ = task_mgr::shutdown_watcher() => { return Ok(()); }, - tick_at = ticker.tick() => { + tick_at = ticker.tick() => { let tenants = match mgr::list_tenants().await { Ok(tenants) => tenants, @@ -616,7 +605,7 @@ mod tests { lsn::Lsn, }; - use crate::consumption_metrics::PageserverConsumptionMetricsKey; + use crate::consumption_metrics::MetricsKey; use super::TimelineSnapshot; use chrono::{DateTime, Utc}; @@ -645,12 +634,13 @@ mod tests { assert_eq!( metrics, &[ - PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) - .from_previous_up_to(snap.loaded_at.1.into(), now, 0), - PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) - .at(now, disk_consistent_lsn.0), - PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) - .at(now, 0x42000) + MetricsKey::written_size_delta(tenant_id, timeline_id).from_previous_up_to( + snap.loaded_at.1.into(), + now, + 0 + ), + MetricsKey::written_size(tenant_id, timeline_id).at(now, disk_consistent_lsn.0), + MetricsKey::timeline_logical_size(tenant_id, timeline_id).at(now, 0x42000) ] ); } @@ -669,11 +659,9 @@ mod tests { let disk_consistent_lsn = Lsn(initdb_lsn.0 * 2); let mut metrics = Vec::new(); - let cache = - HashMap::from([ - PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) - .at(before, disk_consistent_lsn.0), - ]); + let cache = HashMap::from([ + MetricsKey::written_size(tenant_id, timeline_id).at(before, disk_consistent_lsn.0) + ]); let snap = TimelineSnapshot { loaded_at: (disk_consistent_lsn, init), @@ -686,12 +674,10 @@ mod tests { assert_eq!( metrics, &[ - PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) + MetricsKey::written_size_delta(tenant_id, timeline_id) .from_previous_up_to(before, now, 0), - PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) - .at(now, disk_consistent_lsn.0), - PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) - .at(now, 0x42000) + MetricsKey::written_size(tenant_id, timeline_id).at(now, disk_consistent_lsn.0), + MetricsKey::timeline_logical_size(tenant_id, timeline_id).at(now, 0x42000) ] ); } @@ -713,11 +699,13 @@ mod tests { let mut metrics = Vec::new(); let cache = HashMap::from([ // at t=before was the last time the last_record_lsn changed - PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) - .at(before, disk_consistent_lsn.0), + MetricsKey::written_size(tenant_id, timeline_id).at(before, disk_consistent_lsn.0), // end time of this event is used for the next ones - PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) - .from_previous_up_to(before, just_before, 0), + MetricsKey::written_size_delta(tenant_id, timeline_id).from_previous_up_to( + before, + just_before, + 0, + ), ]); let snap = TimelineSnapshot { @@ -731,12 +719,13 @@ mod tests { assert_eq!( metrics, &[ - PageserverConsumptionMetricsKey::written_size_delta(tenant_id, timeline_id) - .from_previous_up_to(just_before, now, 0), - PageserverConsumptionMetricsKey::written_size(tenant_id, timeline_id) - .at(now, disk_consistent_lsn.0), - PageserverConsumptionMetricsKey::timeline_logical_size(tenant_id, timeline_id) - .at(now, 0x42000) + MetricsKey::written_size_delta(tenant_id, timeline_id).from_previous_up_to( + just_before, + now, + 0 + ), + MetricsKey::written_size(tenant_id, timeline_id).at(now, disk_consistent_lsn.0), + MetricsKey::timeline_logical_size(tenant_id, timeline_id).at(now, 0x42000) ] ); } diff --git a/pageserver/src/tenant.rs b/pageserver/src/tenant.rs index 1b287ee10f..9fd6005330 100644 --- a/pageserver/src/tenant.rs +++ b/pageserver/src/tenant.rs @@ -644,20 +644,19 @@ impl Tenant { Ok(()) } - /// get size of all remote timelines + /// Get sum of all remote timelines sizes /// /// This function relies on the index_part instead of listing the remote storage - /// - pub async fn get_remote_size(&self) -> anyhow::Result { + pub fn remote_size(&self) -> u64 { let mut size = 0; - for timeline in self.list_timelines().iter() { + for timeline in self.list_timelines() { if let Some(remote_client) = &timeline.remote_client { size += remote_client.get_remote_physical_size(); } } - Ok(size) + size } #[instrument(skip_all, fields(timeline_id=%timeline_id))] @@ -2889,7 +2888,7 @@ impl Tenant { .set(size); } - pub fn get_cached_synthetic_size(&self) -> u64 { + pub fn cached_synthetic_size(&self) -> u64 { self.cached_synthetic_tenant_size.load(Ordering::Relaxed) } } diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index 628865ea2b..647c9b7b0e 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -528,7 +528,7 @@ impl Timeline { size } - pub fn get_resident_physical_size(&self) -> u64 { + pub fn resident_physical_size(&self) -> u64 { self.metrics.resident_physical_size_gauge.get() } diff --git a/proxy/src/metrics.rs b/proxy/src/metrics.rs index c4be7e1f08..d63f902ac1 100644 --- a/proxy/src/metrics.rs +++ b/proxy/src/metrics.rs @@ -11,7 +11,6 @@ const PROXY_IO_BYTES_PER_CLIENT: &str = "proxy_io_bytes_per_client"; const DEFAULT_HTTP_REPORTING_TIMEOUT: Duration = Duration::from_secs(60); -/// /// Key that uniquely identifies the object, this metric describes. /// Currently, endpoint_id is enough, but this may change later, /// so keep it in a named struct. @@ -19,8 +18,7 @@ const DEFAULT_HTTP_REPORTING_TIMEOUT: Duration = Duration::from_secs(60); /// Both the proxy and the ingestion endpoint will live in the same region (or cell) /// so while the project-id is unique across regions the whole pipeline will work correctly /// because we enrich the event with project_id in the control-plane endpoint. -/// -#[derive(Eq, Hash, PartialEq, Serialize, Debug)] +#[derive(Eq, Hash, PartialEq, Serialize, Debug, Clone)] pub struct Ids { pub endpoint_id: String, pub branch_id: String, @@ -149,7 +147,7 @@ async fn collect_metrics_iteration( stop_time: *curr_time, }, metric: PROXY_IO_BYTES_PER_CLIENT, - idempotency_key: idempotency_key(hostname.to_owned()), + idempotency_key: idempotency_key(hostname), value, extra: Ids { endpoint_id: curr_key.endpoint_id.clone(), @@ -167,12 +165,11 @@ async fn collect_metrics_iteration( // Send metrics. // Split into chunks of 1000 metrics to avoid exceeding the max request size for chunk in metrics_to_send.chunks(CHUNK_SIZE) { - let chunk_json = serde_json::value::to_raw_value(&EventChunk { events: chunk }) - .expect("ProxyConsumptionMetric should not fail serialization"); - let res = client .post(metric_collection_endpoint.clone()) - .json(&chunk_json) + .json(&EventChunk { + events: chunk.into(), + }) .send() .await; From c3fe335eaf45c833e52353234699a86d653735b5 Mon Sep 17 00:00:00 2001 From: Dmitry Rodionov Date: Tue, 1 Aug 2023 18:28:18 +0300 Subject: [PATCH 06/29] wait for tenant to be active before polling for timeline absence (#4856) ## Problem https://neon-github-public-dev.s3.amazonaws.com/reports/main/5692829577/index.html#suites/f588e0a787c49e67b29490359c589fae/4c50937643d68a66 ## Summary of changes wait for tenant to be active after restart before polling for timeline absence --- test_runner/fixtures/pageserver/utils.py | 7 +++---- test_runner/regress/test_timeline_delete.py | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/test_runner/fixtures/pageserver/utils.py b/test_runner/fixtures/pageserver/utils.py index f8a4423ffa..119c99bb96 100644 --- a/test_runner/fixtures/pageserver/utils.py +++ b/test_runner/fixtures/pageserver/utils.py @@ -197,10 +197,9 @@ def wait_timeline_detail_404( pageserver_http: PageserverHttpClient, tenant_id: TenantId, timeline_id: TimelineId, - wait_longer: bool = False, + iterations: int, ): last_exc = None - iterations = 10 if wait_longer else 2 for _ in range(iterations): time.sleep(0.250) try: @@ -220,8 +219,8 @@ def timeline_delete_wait_completed( pageserver_http: PageserverHttpClient, tenant_id: TenantId, timeline_id: TimelineId, - wait_longer: bool = False, # Use when running with RemoteStorageKind.REAL_S3 + iterations: int = 20, **delete_args, ): pageserver_http.timeline_delete(tenant_id=tenant_id, timeline_id=timeline_id, **delete_args) - wait_timeline_detail_404(pageserver_http, tenant_id, timeline_id, wait_longer) + wait_timeline_detail_404(pageserver_http, tenant_id, timeline_id, iterations) diff --git a/test_runner/regress/test_timeline_delete.py b/test_runner/regress/test_timeline_delete.py index 9226ca21d2..764bfe62f9 100644 --- a/test_runner/regress/test_timeline_delete.py +++ b/test_runner/regress/test_timeline_delete.py @@ -229,6 +229,8 @@ def test_delete_timeline_exercise_crash_safety_failpoints( ps_http.configure_failpoints((failpoint, "return")) + iterations = 20 if remote_storage_kind is RemoteStorageKind.REAL_S3 else 4 + # These failpoints are earlier than background task is spawned. # so they result in api request failure. if failpoint in ( @@ -245,7 +247,7 @@ def test_delete_timeline_exercise_crash_safety_failpoints( tenant_id=env.initial_tenant, timeline_id=timeline_id, expected_state="Broken", - iterations=2, # effectively try immediately and retry once in one second + iterations=iterations, ) reason = timeline_info["state"]["Broken"]["reason"] @@ -254,21 +256,19 @@ def test_delete_timeline_exercise_crash_safety_failpoints( # failpoint may not be the only error in the stack assert reason.endswith(f"failpoint: {failpoint}"), reason - wait_longer = remote_storage_kind is RemoteStorageKind.REAL_S3 if check is Check.RETRY_WITH_RESTART: env.pageserver.stop() env.pageserver.start() + + wait_until_tenant_active(ps_http, env.initial_tenant, iterations=iterations) + if failpoint == "timeline-delete-before-index-deleted-at": # We crashed before persisting this to remote storage, need to retry delete request - - # Wait till tenant is loaded. Shouldnt take longer than 2 seconds (we shouldnt block tenant loading) - wait_until_tenant_active(ps_http, env.initial_tenant, iterations=2) - timeline_delete_wait_completed(ps_http, env.initial_tenant, timeline_id) else: # Pageserver should've resumed deletion after restart. wait_timeline_detail_404( - ps_http, env.initial_tenant, timeline_id, wait_longer=wait_longer + ps_http, env.initial_tenant, timeline_id, iterations=iterations ) elif check is Check.RETRY_WITHOUT_RESTART: # this should succeed @@ -276,7 +276,7 @@ def test_delete_timeline_exercise_crash_safety_failpoints( ps_http.configure_failpoints((failpoint, "off")) timeline_delete_wait_completed( - ps_http, env.initial_tenant, timeline_id, wait_longer=wait_longer + ps_http, env.initial_tenant, timeline_id, iterations=iterations ) # Check remote is impty @@ -569,7 +569,7 @@ def test_concurrent_timeline_delete_stuck_on( try: log.info("first call start") timeline_delete_wait_completed( - ps_http, env.initial_tenant, child_timeline_id, timeout=10 + ps_http, env.initial_tenant, child_timeline_id, timeout=20 ) log.info("first call success") result_queue.put("success") @@ -683,7 +683,7 @@ def test_delete_timeline_client_hangup(neon_env_builder: NeonEnvBuilder): wait_until(50, 0.1, first_request_finished) # check that the timeline is gone - wait_timeline_detail_404(ps_http, env.initial_tenant, child_timeline_id) + wait_timeline_detail_404(ps_http, env.initial_tenant, child_timeline_id, iterations=2) @pytest.mark.parametrize( From 04776ade6c751715df536440873e149f2d684336 Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Tue, 1 Aug 2023 19:18:25 +0300 Subject: [PATCH 07/29] fix(consumption): rename _size_ => _data_ (#4866) I failed at renaming the metric middle part while managing to do a great job with the suffix. Fix the middle part as well. --- pageserver/src/consumption_metrics.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pageserver/src/consumption_metrics.rs b/pageserver/src/consumption_metrics.rs index 326802e7e4..e4284b9e9c 100644 --- a/pageserver/src/consumption_metrics.rs +++ b/pageserver/src/consumption_metrics.rs @@ -113,7 +113,9 @@ impl MetricsKey { MetricsKey { tenant_id, timeline_id: Some(timeline_id), - metric: "written_size_bytes_delta", + // the name here is correctly about data not size, because that is what is wanted by + // downstream pipeline + metric: "written_data_bytes_delta", } .incremental_values() } From d005c77ea3666d3a2c0f16cfe1b51736b1a40324 Mon Sep 17 00:00:00 2001 From: Alek Westover Date: Wed, 2 Aug 2023 05:38:12 -0400 Subject: [PATCH 08/29] Tar Remote Extensions (#4715) Add infrastructure to dynamically load postgres extensions and shared libraries from remote extension storage. Before postgres start downloads list of available remote extensions and libraries, and also downloads 'shared_preload_libraries'. After postgres is running, 'compute_ctl' listens for HTTP requests to load files. Postgres has new GUC 'extension_server_port' to specify port on which 'compute_ctl' listens for requests. When PostgreSQL requests a file, 'compute_ctl' downloads it. See more details about feature design and remote extension storage layout in docs/rfcs/024-extension-loading.md --------- Co-authored-by: Anastasia Lubennikova Co-authored-by: Alek Westover --- Cargo.lock | 47 +++ compute_tools/Cargo.toml | 3 + compute_tools/src/bin/compute_ctl.rs | 44 ++- compute_tools/src/compute.rs | 267 ++++++++++++++- compute_tools/src/config.rs | 10 +- compute_tools/src/extension_server.rs | 275 +++++++++++++++ compute_tools/src/http/api.rs | 31 ++ compute_tools/src/http/openapi_spec.yaml | 28 ++ compute_tools/src/lib.rs | 1 + compute_tools/src/spec.rs | 2 +- control_plane/Cargo.toml | 1 + control_plane/src/bin/neon_local.rs | 13 +- control_plane/src/endpoint.rs | 15 +- docs/rfcs/024-extension-loading.md | 236 +++++++++++++ libs/compute_api/src/responses.rs | 5 + libs/compute_api/src/spec.rs | 3 + libs/remote_storage/src/lib.rs | 26 +- pgxn/neon/Makefile | 1 + pgxn/neon/extension_server.c | 103 ++++++ pgxn/neon/neon.c | 3 + pgxn/neon/neon.h | 2 + scripts/combine_control_files.py | 12 +- test_runner/fixtures/neon_fixtures.py | 87 ++++- test_runner/fixtures/types.py | 3 + .../5670669815/v14/ext_index.json | 24 ++ .../5670669815/v14/extensions/anon.tar.zst | Bin 0 -> 324259 bytes .../v14/extensions/pg_buffercache.tar.zst | Bin 0 -> 130807 bytes .../5670669815/v15/ext_index.json | 17 + .../5670669815/v15/extensions/anon.tar.zst | Bin 0 -> 317163 bytes .../regress/test_download_extensions.py | 324 ++++++++++++++++++ test_runner/regress/test_timeline_delete.py | 3 +- vendor/postgres-v14 | 2 +- vendor/postgres-v15 | 2 +- vendor/revisions.json | 4 +- workspace_hack/Cargo.toml | 1 + 35 files changed, 1545 insertions(+), 50 deletions(-) create mode 100644 compute_tools/src/extension_server.rs create mode 100644 docs/rfcs/024-extension-loading.md create mode 100644 pgxn/neon/extension_server.c create mode 100644 test_runner/regress/data/extension_test/5670669815/v14/ext_index.json create mode 100644 test_runner/regress/data/extension_test/5670669815/v14/extensions/anon.tar.zst create mode 100644 test_runner/regress/data/extension_test/5670669815/v14/extensions/pg_buffercache.tar.zst create mode 100644 test_runner/regress/data/extension_test/5670669815/v15/ext_index.json create mode 100644 test_runner/regress/data/extension_test/5670669815/v15/extensions/anon.tar.zst create mode 100644 test_runner/regress/test_download_extensions.py diff --git a/Cargo.lock b/Cargo.lock index dbeeb539d4..4d59f400de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -740,6 +740,9 @@ name = "cc" version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] [[package]] name = "cexpr" @@ -907,12 +910,14 @@ dependencies = [ "opentelemetry", "postgres", "regex", + "remote_storage", "reqwest", "serde", "serde_json", "tar", "tokio", "tokio-postgres", + "toml_edit", "tracing", "tracing-opentelemetry", "tracing-subscriber", @@ -920,6 +925,7 @@ dependencies = [ "url", "utils", "workspace_hack", + "zstd", ] [[package]] @@ -980,6 +986,7 @@ dependencies = [ "tar", "thiserror", "toml", + "tracing", "url", "utils", "workspace_hack", @@ -1972,6 +1979,15 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.63" @@ -5296,6 +5312,7 @@ version = "0.1.0" dependencies = [ "anyhow", "bytes", + "cc", "chrono", "clap", "clap_builder", @@ -5396,3 +5413,33 @@ name = "zeroize" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.8+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +dependencies = [ + "cc", + "libc", + "pkg-config", +] diff --git a/compute_tools/Cargo.toml b/compute_tools/Cargo.toml index f8f8f729ce..08dcc21c7a 100644 --- a/compute_tools/Cargo.toml +++ b/compute_tools/Cargo.toml @@ -32,3 +32,6 @@ url.workspace = true compute_api.workspace = true utils.workspace = true workspace_hack.workspace = true +toml_edit.workspace = true +remote_storage = { version = "0.1", path = "../libs/remote_storage/" } +zstd = "0.12.4" diff --git a/compute_tools/src/bin/compute_ctl.rs b/compute_tools/src/bin/compute_ctl.rs index 9d15a203e5..977a62eed2 100644 --- a/compute_tools/src/bin/compute_ctl.rs +++ b/compute_tools/src/bin/compute_ctl.rs @@ -5,6 +5,8 @@ //! - `compute_ctl` accepts cluster (compute node) specification as a JSON file. //! - Every start is a fresh start, so the data directory is removed and //! initialized again on each run. +//! - If remote_extension_config is provided, it will be used to fetch extensions list +//! and download `shared_preload_libraries` from the remote storage. //! - Next it will put configuration files into the `PGDATA` directory. //! - Sync safekeepers and get commit LSN. //! - Get `basebackup` from pageserver using the returned on the previous step LSN. @@ -27,7 +29,8 @@ //! compute_ctl -D /var/db/postgres/compute \ //! -C 'postgresql://cloud_admin@localhost/postgres' \ //! -S /var/db/postgres/specs/current.json \ -//! -b /usr/local/bin/postgres +//! -b /usr/local/bin/postgres \ +//! -r {"bucket": "neon-dev-extensions-eu-central-1", "region": "eu-central-1"} //! ``` //! use std::collections::HashMap; @@ -35,7 +38,7 @@ use std::fs::File; use std::panic; use std::path::Path; use std::process::exit; -use std::sync::{mpsc, Arc, Condvar, Mutex}; +use std::sync::{mpsc, Arc, Condvar, Mutex, OnceLock, RwLock}; use std::{thread, time::Duration}; use anyhow::{Context, Result}; @@ -48,22 +51,33 @@ use compute_api::responses::ComputeStatus; use compute_tools::compute::{ComputeNode, ComputeState, ParsedSpec}; use compute_tools::configurator::launch_configurator; +use compute_tools::extension_server::{get_pg_version, init_remote_storage}; use compute_tools::http::api::launch_http_server; use compute_tools::logger::*; use compute_tools::monitor::launch_monitor; use compute_tools::params::*; use compute_tools::spec::*; -const BUILD_TAG_DEFAULT: &str = "local"; +// this is an arbitrary build tag. Fine as a default / for testing purposes +// in-case of not-set environment var +const BUILD_TAG_DEFAULT: &str = "5670669815"; fn main() -> Result<()> { init_tracing_and_logging(DEFAULT_LOG_LEVEL)?; - let build_tag = option_env!("BUILD_TAG").unwrap_or(BUILD_TAG_DEFAULT); - + let build_tag = option_env!("BUILD_TAG") + .unwrap_or(BUILD_TAG_DEFAULT) + .to_string(); info!("build_tag: {build_tag}"); let matches = cli().get_matches(); + let pgbin_default = String::from("postgres"); + let pgbin = matches.get_one::("pgbin").unwrap_or(&pgbin_default); + + let remote_ext_config = matches.get_one::("remote-ext-config"); + let ext_remote_storage = remote_ext_config.map(|x| { + init_remote_storage(x).expect("cannot initialize remote extension storage from config") + }); let http_port = *matches .get_one::("http-port") @@ -128,9 +142,6 @@ fn main() -> Result<()> { let compute_id = matches.get_one::("compute-id"); let control_plane_uri = matches.get_one::("control-plane-uri"); - // Try to use just 'postgres' if no path is provided - let pgbin = matches.get_one::("pgbin").unwrap(); - let spec; let mut live_config_allowed = false; match spec_json { @@ -168,6 +179,7 @@ fn main() -> Result<()> { let mut new_state = ComputeState::new(); let spec_set; + if let Some(spec) = spec { let pspec = ParsedSpec::try_from(spec).map_err(|msg| anyhow::anyhow!(msg))?; new_state.pspec = Some(pspec); @@ -179,9 +191,15 @@ fn main() -> Result<()> { connstr: Url::parse(connstr).context("cannot parse connstr as a URL")?, pgdata: pgdata.to_string(), pgbin: pgbin.to_string(), + pgversion: get_pg_version(pgbin), live_config_allowed, state: Mutex::new(new_state), state_changed: Condvar::new(), + ext_remote_storage, + ext_remote_paths: OnceLock::new(), + ext_download_progress: RwLock::new(HashMap::new()), + library_index: OnceLock::new(), + build_tag, }; let compute = Arc::new(compute_node); @@ -190,6 +208,8 @@ fn main() -> Result<()> { let _http_handle = launch_http_server(http_port, &compute).expect("cannot launch http endpoint thread"); + let extension_server_port: u16 = http_port; + if !spec_set { // No spec provided, hang waiting for it. info!("no compute spec provided, waiting"); @@ -236,7 +256,7 @@ fn main() -> Result<()> { // Start Postgres let mut delay_exit = false; let mut exit_code = None; - let pg = match compute.start_compute() { + let pg = match compute.start_compute(extension_server_port) { Ok(pg) => Some(pg), Err(err) => { error!("could not start the compute node: {:?}", err); @@ -365,6 +385,12 @@ fn cli() -> clap::Command { .long("control-plane-uri") .value_name("CONTROL_PLANE_API_BASE_URI"), ) + .arg( + Arg::new("remote-ext-config") + .short('r') + .long("remote-ext-config") + .value_name("REMOTE_EXT_CONFIG"), + ) } #[test] diff --git a/compute_tools/src/compute.rs b/compute_tools/src/compute.rs index 254d367a71..ec2eb02237 100644 --- a/compute_tools/src/compute.rs +++ b/compute_tools/src/compute.rs @@ -1,16 +1,20 @@ +use std::collections::HashMap; use std::fs; use std::io::BufRead; use std::os::unix::fs::PermissionsExt; use std::path::Path; use std::process::{Command, Stdio}; use std::str::FromStr; -use std::sync::{Condvar, Mutex}; +use std::sync::{Condvar, Mutex, OnceLock, RwLock}; use anyhow::{Context, Result}; use chrono::{DateTime, Utc}; +use futures::future::join_all; use futures::stream::FuturesUnordered; use futures::StreamExt; use postgres::{Client, NoTls}; +use regex::Regex; +use tokio; use tokio_postgres; use tracing::{error, info, instrument, warn}; use utils::id::{TenantId, TimelineId}; @@ -20,10 +24,12 @@ use compute_api::responses::{ComputeMetrics, ComputeStatus}; use compute_api::spec::{ComputeMode, ComputeSpec}; use utils::measured_stream::MeasuredReader; -use crate::config; +use remote_storage::{GenericRemoteStorage, RemotePath}; + use crate::pg_helpers::*; use crate::spec::*; use crate::sync_sk::{check_if_synced, ping_safekeeper}; +use crate::{config, extension_server}; /// Compute node info shared across several `compute_ctl` threads. pub struct ComputeNode { @@ -31,6 +37,7 @@ pub struct ComputeNode { pub connstr: url::Url, pub pgdata: String, pub pgbin: String, + pub pgversion: String, /// We should only allow live re- / configuration of the compute node if /// it uses 'pull model', i.e. it can go to control-plane and fetch /// the latest configuration. Otherwise, there could be a case: @@ -50,6 +57,24 @@ pub struct ComputeNode { pub state: Mutex, /// `Condvar` to allow notifying waiters about state changes. pub state_changed: Condvar, + /// the S3 bucket that we search for extensions in + pub ext_remote_storage: Option, + // (key: extension name, value: path to extension archive in remote storage) + pub ext_remote_paths: OnceLock>, + // (key: library name, value: name of extension containing this library) + pub library_index: OnceLock>, + // key: ext_archive_name, value: started download time, download_completed? + pub ext_download_progress: RwLock, bool)>>, + pub build_tag: String, +} + +// store some metrics about download size that might impact startup time +#[derive(Clone, Debug)] +pub struct RemoteExtensionMetrics { + num_ext_downloaded: u64, + largest_ext_size: u64, + total_ext_download_size: u64, + prep_extensions_ms: u64, } #[derive(Clone, Debug)] @@ -473,14 +498,22 @@ impl ComputeNode { /// Do all the preparations like PGDATA directory creation, configuration, /// safekeepers sync, basebackup, etc. #[instrument(skip_all)] - pub fn prepare_pgdata(&self, compute_state: &ComputeState) -> Result<()> { + pub fn prepare_pgdata( + &self, + compute_state: &ComputeState, + extension_server_port: u16, + ) -> Result<()> { let pspec = compute_state.pspec.as_ref().expect("spec must be set"); let spec = &pspec.spec; let pgdata_path = Path::new(&self.pgdata); // Remove/create an empty pgdata directory and put configuration there. self.create_pgdata()?; - config::write_postgres_conf(&pgdata_path.join("postgresql.conf"), &pspec.spec)?; + config::write_postgres_conf( + &pgdata_path.join("postgresql.conf"), + &pspec.spec, + Some(extension_server_port), + )?; // Syncing safekeepers is only safe with primary nodes: if a primary // is already connected it will be kicked out, so a secondary (standby) @@ -670,7 +703,7 @@ impl ComputeNode { // Write new config let pgdata_path = Path::new(&self.pgdata); - config::write_postgres_conf(&pgdata_path.join("postgresql.conf"), &spec)?; + config::write_postgres_conf(&pgdata_path.join("postgresql.conf"), &spec, None)?; let mut client = Client::connect(self.connstr.as_str(), NoTls)?; self.pg_reload_conf(&mut client)?; @@ -700,7 +733,7 @@ impl ComputeNode { } #[instrument(skip_all)] - pub fn start_compute(&self) -> Result { + pub fn start_compute(&self, extension_server_port: u16) -> Result { let compute_state = self.state.lock().unwrap().clone(); let pspec = compute_state.pspec.as_ref().expect("spec must be set"); info!( @@ -711,7 +744,31 @@ impl ComputeNode { pspec.timeline_id, ); - self.prepare_pgdata(&compute_state)?; + // This part is sync, because we need to download + // remote shared_preload_libraries before postgres start (if any) + { + let library_load_start_time = Utc::now(); + let remote_ext_metrics = self.prepare_preload_libraries(&compute_state)?; + + let library_load_time = Utc::now() + .signed_duration_since(library_load_start_time) + .to_std() + .unwrap() + .as_millis() as u64; + let mut state = self.state.lock().unwrap(); + state.metrics.load_ext_ms = library_load_time; + state.metrics.num_ext_downloaded = remote_ext_metrics.num_ext_downloaded; + state.metrics.largest_ext_size = remote_ext_metrics.largest_ext_size; + state.metrics.total_ext_download_size = remote_ext_metrics.total_ext_download_size; + state.metrics.prep_extensions_ms = remote_ext_metrics.prep_extensions_ms; + info!( + "Loading shared_preload_libraries took {:?}ms", + library_load_time + ); + info!("{:?}", remote_ext_metrics); + } + + self.prepare_pgdata(&compute_state, extension_server_port)?; let start_time = Utc::now(); let pg = self.start_postgres(pspec.storage_auth_token.clone())?; @@ -859,4 +916,200 @@ LIMIT 100", "{{\"pg_stat_statements\": []}}".to_string() } } + + // If remote extension storage is configured, + // download extension control files + pub async fn prepare_external_extensions(&self, compute_state: &ComputeState) -> Result<()> { + if let Some(ref ext_remote_storage) = self.ext_remote_storage { + let pspec = compute_state.pspec.as_ref().expect("spec must be set"); + let spec = &pspec.spec; + let custom_ext = spec.custom_extensions.clone().unwrap_or(Vec::new()); + info!("custom extensions: {:?}", &custom_ext); + let (ext_remote_paths, library_index) = extension_server::get_available_extensions( + ext_remote_storage, + &self.pgbin, + &self.pgversion, + &custom_ext, + &self.build_tag, + ) + .await?; + self.ext_remote_paths + .set(ext_remote_paths) + .expect("this is the only time we set ext_remote_paths"); + self.library_index + .set(library_index) + .expect("this is the only time we set library_index"); + } + Ok(()) + } + + // download an archive, unzip and place files in correct locations + pub async fn download_extension(&self, ext_name: &str, is_library: bool) -> Result { + match &self.ext_remote_storage { + None => anyhow::bail!("No remote extension storage"), + Some(remote_storage) => { + let mut real_ext_name = ext_name.to_string(); + if is_library { + // sometimes library names might have a suffix like + // library.so or library.so.3. We strip this off + // because library_index is based on the name without the file extension + let strip_lib_suffix = Regex::new(r"\.so.*").unwrap(); + let lib_raw_name = strip_lib_suffix.replace(&real_ext_name, "").to_string(); + real_ext_name = self + .library_index + .get() + .expect("must have already downloaded the library_index")[&lib_raw_name] + .clone(); + } + + let ext_path = &self + .ext_remote_paths + .get() + .expect("error accessing ext_remote_paths")[&real_ext_name]; + let ext_archive_name = ext_path.object_name().expect("bad path"); + + let mut first_try = false; + if !self + .ext_download_progress + .read() + .expect("lock err") + .contains_key(ext_archive_name) + { + self.ext_download_progress + .write() + .expect("lock err") + .insert(ext_archive_name.to_string(), (Utc::now(), false)); + first_try = true; + } + let (download_start, download_completed) = + self.ext_download_progress.read().expect("lock err")[ext_archive_name]; + let start_time_delta = Utc::now() + .signed_duration_since(download_start) + .to_std() + .unwrap() + .as_millis() as u64; + + // how long to wait for extension download if it was started by another process + const HANG_TIMEOUT: u64 = 3000; // milliseconds + + if download_completed { + info!("extension already downloaded, skipping re-download"); + return Ok(0); + } else if start_time_delta < HANG_TIMEOUT && !first_try { + info!("download {ext_archive_name} already started by another process, hanging untill completion or timeout"); + let mut interval = + tokio::time::interval(tokio::time::Duration::from_millis(500)); + loop { + info!("waiting for download"); + interval.tick().await; + let (_, download_completed_now) = + self.ext_download_progress.read().expect("lock")[ext_archive_name]; + if download_completed_now { + info!("download finished by whoever else downloaded it"); + return Ok(0); + } + } + // NOTE: the above loop will get terminated + // based on the timeout of the download function + } + + // if extension hasn't been downloaded before or the previous + // attempt to download was at least HANG_TIMEOUT ms ago + // then we try to download it here + info!("downloading new extension {ext_archive_name}"); + + let download_size = extension_server::download_extension( + &real_ext_name, + ext_path, + remote_storage, + &self.pgbin, + ) + .await; + self.ext_download_progress + .write() + .expect("bad lock") + .insert(ext_archive_name.to_string(), (download_start, true)); + download_size + } + } + } + + #[tokio::main] + pub async fn prepare_preload_libraries( + &self, + compute_state: &ComputeState, + ) -> Result { + if self.ext_remote_storage.is_none() { + return Ok(RemoteExtensionMetrics { + num_ext_downloaded: 0, + largest_ext_size: 0, + total_ext_download_size: 0, + prep_extensions_ms: 0, + }); + } + let pspec = compute_state.pspec.as_ref().expect("spec must be set"); + let spec = &pspec.spec; + + info!("parse shared_preload_libraries from spec.cluster.settings"); + let mut libs_vec = Vec::new(); + if let Some(libs) = spec.cluster.settings.find("shared_preload_libraries") { + libs_vec = libs + .split(&[',', '\'', ' ']) + .filter(|s| *s != "neon" && !s.is_empty()) + .map(str::to_string) + .collect(); + } + info!("parse shared_preload_libraries from provided postgresql.conf"); + // that is used in neon_local and python tests + if let Some(conf) = &spec.cluster.postgresql_conf { + let conf_lines = conf.split('\n').collect::>(); + let mut shared_preload_libraries_line = ""; + for line in conf_lines { + if line.starts_with("shared_preload_libraries") { + shared_preload_libraries_line = line; + } + } + let mut preload_libs_vec = Vec::new(); + if let Some(libs) = shared_preload_libraries_line.split("='").nth(1) { + preload_libs_vec = libs + .split(&[',', '\'', ' ']) + .filter(|s| *s != "neon" && !s.is_empty()) + .map(str::to_string) + .collect(); + } + libs_vec.extend(preload_libs_vec); + } + + info!("Download ext_index.json, find the extension paths"); + let prep_ext_start_time = Utc::now(); + self.prepare_external_extensions(compute_state).await?; + let prep_ext_time_delta = Utc::now() + .signed_duration_since(prep_ext_start_time) + .to_std() + .unwrap() + .as_millis() as u64; + info!("Prepare extensions took {prep_ext_time_delta}ms"); + + info!("Downloading to shared preload libraries: {:?}", &libs_vec); + let mut download_tasks = Vec::new(); + for library in &libs_vec { + download_tasks.push(self.download_extension(library, true)); + } + let results = join_all(download_tasks).await; + + let mut remote_ext_metrics = RemoteExtensionMetrics { + num_ext_downloaded: 0, + largest_ext_size: 0, + total_ext_download_size: 0, + prep_extensions_ms: prep_ext_time_delta, + }; + for result in results { + let download_size = result?; + remote_ext_metrics.num_ext_downloaded += 1; + remote_ext_metrics.largest_ext_size = + std::cmp::max(remote_ext_metrics.largest_ext_size, download_size); + remote_ext_metrics.total_ext_download_size += download_size; + } + Ok(remote_ext_metrics) + } } diff --git a/compute_tools/src/config.rs b/compute_tools/src/config.rs index 68b943eec8..2da671a149 100644 --- a/compute_tools/src/config.rs +++ b/compute_tools/src/config.rs @@ -33,7 +33,11 @@ pub fn line_in_file(path: &Path, line: &str) -> Result { } /// Create or completely rewrite configuration file specified by `path` -pub fn write_postgres_conf(path: &Path, spec: &ComputeSpec) -> Result<()> { +pub fn write_postgres_conf( + path: &Path, + spec: &ComputeSpec, + extension_server_port: Option, +) -> Result<()> { // File::create() destroys the file content if it exists. let mut file = File::create(path)?; @@ -87,5 +91,9 @@ pub fn write_postgres_conf(path: &Path, spec: &ComputeSpec) -> Result<()> { writeln!(file, "# Managed by compute_ctl: end")?; } + if let Some(port) = extension_server_port { + writeln!(file, "neon.extension_server_port={}", port)?; + } + Ok(()) } diff --git a/compute_tools/src/extension_server.rs b/compute_tools/src/extension_server.rs new file mode 100644 index 0000000000..c8710b0577 --- /dev/null +++ b/compute_tools/src/extension_server.rs @@ -0,0 +1,275 @@ +// Download extension files from the extension store +// and put them in the right place in the postgres directory (share / lib) +/* +The layout of the S3 bucket is as follows: +5615610098 // this is an extension build number +├── v14 +│   ├── extensions +│   │   ├── anon.tar.zst +│   │   └── embedding.tar.zst +│   └── ext_index.json +└── v15 + ├── extensions + │   ├── anon.tar.zst + │   └── embedding.tar.zst + └── ext_index.json +5615261079 +├── v14 +│   ├── extensions +│   │   └── anon.tar.zst +│   └── ext_index.json +└── v15 + ├── extensions + │   └── anon.tar.zst + └── ext_index.json +5623261088 +├── v14 +│   ├── extensions +│   │   └── embedding.tar.zst +│   └── ext_index.json +└── v15 + ├── extensions + │   └── embedding.tar.zst + └── ext_index.json + +Note that build number cannot be part of prefix because we might need extensions +from other build numbers. + +ext_index.json stores the control files and location of extension archives +It also stores a list of public extensions and a library_index + +We don't need to duplicate extension.tar.zst files. +We only need to upload a new one if it is updated. +(Although currently we just upload every time anyways, hopefully will change +this sometime) + +*access* is controlled by spec + +More specifically, here is an example ext_index.json +{ + "public_extensions": [ + "anon", + "pg_buffercache" + ], + "library_index": { + "anon": "anon", + "pg_buffercache": "pg_buffercache" + }, + "extension_data": { + "pg_buffercache": { + "control_data": { + "pg_buffercache.control": "# pg_buffercache extension \ncomment = 'examine the shared buffer cache' \ndefault_version = '1.3' \nmodule_pathname = '$libdir/pg_buffercache' \nrelocatable = true \ntrusted=true" + }, + "archive_path": "5670669815/v14/extensions/pg_buffercache.tar.zst" + }, + "anon": { + "control_data": { + "anon.control": "# PostgreSQL Anonymizer (anon) extension \ncomment = 'Data anonymization tools' \ndefault_version = '1.1.0' \ndirectory='extension/anon' \nrelocatable = false \nrequires = 'pgcrypto' \nsuperuser = false \nmodule_pathname = '$libdir/anon' \ntrusted = true \n" + }, + "archive_path": "5670669815/v14/extensions/anon.tar.zst" + } + } +} +*/ +use anyhow::Context; +use anyhow::{self, Result}; +use futures::future::join_all; +use remote_storage::*; +use serde_json; +use std::collections::HashMap; +use std::io::Read; +use std::num::{NonZeroU32, NonZeroUsize}; +use std::path::Path; +use std::str; +use tar::Archive; +use tokio::io::AsyncReadExt; +use tracing::info; +use tracing::log::warn; +use zstd::stream::read::Decoder; + +fn get_pg_config(argument: &str, pgbin: &str) -> String { + // gives the result of `pg_config [argument]` + // where argument is a flag like `--version` or `--sharedir` + let pgconfig = pgbin + .strip_suffix("postgres") + .expect("bad pgbin") + .to_owned() + + "/pg_config"; + let config_output = std::process::Command::new(pgconfig) + .arg(argument) + .output() + .expect("pg_config error"); + std::str::from_utf8(&config_output.stdout) + .expect("pg_config error") + .trim() + .to_string() +} + +pub fn get_pg_version(pgbin: &str) -> String { + // pg_config --version returns a (platform specific) human readable string + // such as "PostgreSQL 15.4". We parse this to v14/v15 + let human_version = get_pg_config("--version", pgbin); + if human_version.contains("15") { + return "v15".to_string(); + } else if human_version.contains("14") { + return "v14".to_string(); + } + panic!("Unsuported postgres version {human_version}"); +} + +// download control files for enabled_extensions +// return Hashmaps converting library names to extension names (library_index) +// and specifying the remote path to the archive for each extension name +pub async fn get_available_extensions( + remote_storage: &GenericRemoteStorage, + pgbin: &str, + pg_version: &str, + custom_extensions: &[String], + build_tag: &str, +) -> Result<(HashMap, HashMap)> { + let local_sharedir = Path::new(&get_pg_config("--sharedir", pgbin)).join("extension"); + let index_path = format!("{build_tag}/{pg_version}/ext_index.json"); + let index_path = RemotePath::new(Path::new(&index_path)).context("error forming path")?; + info!("download ext_index.json from: {:?}", &index_path); + + let mut download = remote_storage.download(&index_path).await?; + let mut ext_idx_buffer = Vec::new(); + download + .download_stream + .read_to_end(&mut ext_idx_buffer) + .await?; + info!("ext_index downloaded"); + + #[derive(Debug, serde::Deserialize)] + struct Index { + public_extensions: Vec, + library_index: HashMap, + extension_data: HashMap, + } + + #[derive(Debug, serde::Deserialize)] + struct ExtensionData { + control_data: HashMap, + archive_path: String, + } + + let ext_index_full = serde_json::from_slice::(&ext_idx_buffer)?; + let mut enabled_extensions = ext_index_full.public_extensions; + enabled_extensions.extend_from_slice(custom_extensions); + let library_index = ext_index_full.library_index; + let all_extension_data = ext_index_full.extension_data; + info!("library_index: {:?}", library_index); + + info!("enabled_extensions: {:?}", enabled_extensions); + let mut ext_remote_paths = HashMap::new(); + let mut file_create_tasks = Vec::new(); + for extension in enabled_extensions { + let ext_data = &all_extension_data[&extension]; + for (control_file, control_contents) in &ext_data.control_data { + let extension_name = control_file + .strip_suffix(".control") + .expect("control files must end in .control"); + ext_remote_paths.insert( + extension_name.to_string(), + RemotePath::from_string(&ext_data.archive_path)?, + ); + let control_path = local_sharedir.join(control_file); + info!("writing file {:?}{:?}", control_path, control_contents); + file_create_tasks.push(tokio::fs::write(control_path, control_contents)); + } + } + let results = join_all(file_create_tasks).await; + for result in results { + result?; + } + info!("ext_remote_paths {:?}", ext_remote_paths); + Ok((ext_remote_paths, library_index)) +} + +// download the archive for a given extension, +// unzip it, and place files in the appropriate locations (share/lib) +pub async fn download_extension( + ext_name: &str, + ext_path: &RemotePath, + remote_storage: &GenericRemoteStorage, + pgbin: &str, +) -> Result { + info!("Download extension {:?} from {:?}", ext_name, ext_path); + let mut download = remote_storage.download(ext_path).await?; + let mut download_buffer = Vec::new(); + download + .download_stream + .read_to_end(&mut download_buffer) + .await?; + let download_size = download_buffer.len() as u64; + // it's unclear whether it is more performant to decompress into memory or not + // TODO: decompressing into memory can be avoided + let mut decoder = Decoder::new(download_buffer.as_slice())?; + let mut decompress_buffer = Vec::new(); + decoder.read_to_end(&mut decompress_buffer)?; + let mut archive = Archive::new(decompress_buffer.as_slice()); + let unzip_dest = pgbin + .strip_suffix("/bin/postgres") + .expect("bad pgbin") + .to_string() + + "/download_extensions"; + archive.unpack(&unzip_dest)?; + info!("Download + unzip {:?} completed successfully", &ext_path); + + let sharedir_paths = ( + unzip_dest.to_string() + "/share/extension", + Path::new(&get_pg_config("--sharedir", pgbin)).join("extension"), + ); + let libdir_paths = ( + unzip_dest.to_string() + "/lib", + Path::new(&get_pg_config("--libdir", pgbin)).join("postgresql"), + ); + // move contents of the libdir / sharedir in unzipped archive to the correct local paths + for paths in [sharedir_paths, libdir_paths] { + let (zip_dir, real_dir) = paths; + info!("mv {zip_dir:?}/* {real_dir:?}"); + for file in std::fs::read_dir(zip_dir)? { + let old_file = file?.path(); + let new_file = + Path::new(&real_dir).join(old_file.file_name().context("error parsing file")?); + info!("moving {old_file:?} to {new_file:?}"); + + // extension download failed: Directory not empty (os error 39) + match std::fs::rename(old_file, new_file) { + Ok(()) => info!("move succeeded"), + Err(e) => { + warn!("move failed, probably because the extension already exists: {e}") + } + } + } + } + info!("done moving extension {ext_name}"); + Ok(download_size) +} + +// This function initializes the necessary structs to use remote storage +pub fn init_remote_storage(remote_ext_config: &str) -> anyhow::Result { + #[derive(Debug, serde::Deserialize)] + struct RemoteExtJson { + bucket: String, + region: String, + endpoint: Option, + prefix: Option, + } + let remote_ext_json = serde_json::from_str::(remote_ext_config)?; + + let config = S3Config { + bucket_name: remote_ext_json.bucket, + bucket_region: remote_ext_json.region, + prefix_in_bucket: remote_ext_json.prefix, + endpoint: remote_ext_json.endpoint, + concurrency_limit: NonZeroUsize::new(100).expect("100 != 0"), + max_keys_per_list_response: None, + }; + let config = RemoteStorageConfig { + max_concurrent_syncs: NonZeroUsize::new(100).expect("100 != 0"), + max_sync_errors: NonZeroU32::new(100).expect("100 != 0"), + storage: RemoteStorageKind::AwsS3(config), + }; + GenericRemoteStorage::from_config(&config) +} diff --git a/compute_tools/src/http/api.rs b/compute_tools/src/http/api.rs index afd9c2fb54..af07412b52 100644 --- a/compute_tools/src/http/api.rs +++ b/compute_tools/src/http/api.rs @@ -121,6 +121,37 @@ async fn routes(req: Request, compute: &Arc) -> Response { + info!("serving {:?} POST request", route); + info!("req.uri {:?}", req.uri()); + + let mut is_library = false; + if let Some(params) = req.uri().query() { + info!("serving {:?} POST request with params: {}", route, params); + if params == "is_library=true" { + is_library = true; + } else { + let mut resp = Response::new(Body::from("Wrong request parameters")); + *resp.status_mut() = StatusCode::BAD_REQUEST; + return resp; + } + } + + let filename = route.split('/').last().unwrap().to_string(); + info!("serving /extension_server POST request, filename: {filename:?} is_library: {is_library}"); + + match compute.download_extension(&filename, is_library).await { + Ok(_) => Response::new(Body::from("OK")), + Err(e) => { + error!("extension download failed: {}", e); + let mut resp = Response::new(Body::from(e.to_string())); + *resp.status_mut() = StatusCode::INTERNAL_SERVER_ERROR; + resp + } + } + } + // Return the `404 Not Found` for any other routes. _ => { let mut not_found = Response::new(Body::from("404 Not Found")); diff --git a/compute_tools/src/http/openapi_spec.yaml b/compute_tools/src/http/openapi_spec.yaml index 2680269756..dc26cc63eb 100644 --- a/compute_tools/src/http/openapi_spec.yaml +++ b/compute_tools/src/http/openapi_spec.yaml @@ -139,6 +139,34 @@ paths: application/json: schema: $ref: "#/components/schemas/GenericError" + /extension_server: + post: + tags: + - Extension + summary: Download extension from S3 to local folder. + description: "" + operationId: downloadExtension + responses: + 200: + description: Extension downloaded + content: + text/plain: + schema: + type: string + description: Error text or 'OK' if download succeeded. + example: "OK" + 400: + description: Request is invalid. + content: + application/json: + schema: + $ref: "#/components/schemas/GenericError" + 500: + description: Extension download request failed. + content: + application/json: + schema: + $ref: "#/components/schemas/GenericError" components: securitySchemes: diff --git a/compute_tools/src/lib.rs b/compute_tools/src/lib.rs index 1d7b09f095..1cd9602089 100644 --- a/compute_tools/src/lib.rs +++ b/compute_tools/src/lib.rs @@ -9,6 +9,7 @@ pub mod http; #[macro_use] pub mod logger; pub mod compute; +pub mod extension_server; pub mod monitor; pub mod params; pub mod pg_helpers; diff --git a/compute_tools/src/spec.rs b/compute_tools/src/spec.rs index 575a5332a8..eff7c93b46 100644 --- a/compute_tools/src/spec.rs +++ b/compute_tools/src/spec.rs @@ -124,7 +124,7 @@ pub fn get_spec_from_control_plane( pub fn handle_configuration(spec: &ComputeSpec, pgdata_path: &Path) -> Result<()> { // File `postgresql.conf` is no longer included into `basebackup`, so just // always write all config into it creating new file. - config::write_postgres_conf(&pgdata_path.join("postgresql.conf"), spec)?; + config::write_postgres_conf(&pgdata_path.join("postgresql.conf"), spec, None)?; update_pg_hba(pgdata_path)?; diff --git a/control_plane/Cargo.toml b/control_plane/Cargo.toml index a341ff0263..d2c99c5f36 100644 --- a/control_plane/Cargo.toml +++ b/control_plane/Cargo.toml @@ -32,3 +32,4 @@ utils.workspace = true compute_api.workspace = true workspace_hack.workspace = true +tracing.workspace = true diff --git a/control_plane/src/bin/neon_local.rs b/control_plane/src/bin/neon_local.rs index 8995a18564..8f71cb65e2 100644 --- a/control_plane/src/bin/neon_local.rs +++ b/control_plane/src/bin/neon_local.rs @@ -658,6 +658,8 @@ fn handle_endpoint(ep_match: &ArgMatches, env: &local_env::LocalEnv) -> Result<( .get_one::("endpoint_id") .ok_or_else(|| anyhow!("No endpoint ID was provided to start"))?; + let remote_ext_config = sub_args.get_one::("remote-ext-config"); + // If --safekeepers argument is given, use only the listed safekeeper nodes. let safekeepers = if let Some(safekeepers_str) = sub_args.get_one::("safekeepers") { @@ -699,7 +701,7 @@ fn handle_endpoint(ep_match: &ArgMatches, env: &local_env::LocalEnv) -> Result<( _ => {} } println!("Starting existing endpoint {endpoint_id}..."); - endpoint.start(&auth_token, safekeepers)?; + endpoint.start(&auth_token, safekeepers, remote_ext_config)?; } else { let branch_name = sub_args .get_one::("branch-name") @@ -743,7 +745,7 @@ fn handle_endpoint(ep_match: &ArgMatches, env: &local_env::LocalEnv) -> Result<( pg_version, mode, )?; - ep.start(&auth_token, safekeepers)?; + ep.start(&auth_token, safekeepers, remote_ext_config)?; } } "stop" => { @@ -1003,6 +1005,12 @@ fn cli() -> Command { .help("Additional pageserver's configuration options or overrides, refer to pageserver's 'config-override' CLI parameter docs for more") .required(false); + let remote_ext_config_args = Arg::new("remote-ext-config") + .long("remote-ext-config") + .num_args(1) + .help("Configure the S3 bucket that we search for extensions in.") + .required(false); + let lsn_arg = Arg::new("lsn") .long("lsn") .help("Specify Lsn on the timeline to start from. By default, end of the timeline would be used.") @@ -1161,6 +1169,7 @@ fn cli() -> Command { .arg(pg_version_arg) .arg(hot_standby_arg) .arg(safekeepers_arg) + .arg(remote_ext_config_args) ) .subcommand( Command::new("stop") diff --git a/control_plane/src/endpoint.rs b/control_plane/src/endpoint.rs index 8b5c88bf01..6060799458 100644 --- a/control_plane/src/endpoint.rs +++ b/control_plane/src/endpoint.rs @@ -313,7 +313,7 @@ impl Endpoint { // TODO: use future host field from safekeeper spec // Pass the list of safekeepers to the replica so that it can connect to any of them, - // whichever is availiable. + // whichever is available. let sk_ports = self .env .safekeepers @@ -420,7 +420,12 @@ impl Endpoint { Ok(()) } - pub fn start(&self, auth_token: &Option, safekeepers: Vec) -> Result<()> { + pub fn start( + &self, + auth_token: &Option, + safekeepers: Vec, + remote_ext_config: Option<&String>, + ) -> Result<()> { if self.status() == "running" { anyhow::bail!("The endpoint is already running"); } @@ -488,6 +493,7 @@ impl Endpoint { pageserver_connstring: Some(pageserver_connstring), safekeeper_connstrings, storage_auth_token: auth_token.clone(), + custom_extensions: Some(vec![]), }; let spec_path = self.endpoint_path().join("spec.json"); std::fs::write(spec_path, serde_json::to_string_pretty(&spec)?)?; @@ -519,6 +525,11 @@ impl Endpoint { .stdin(std::process::Stdio::null()) .stderr(logfile.try_clone()?) .stdout(logfile); + + if let Some(remote_ext_config) = remote_ext_config { + cmd.args(["--remote-ext-config", remote_ext_config]); + } + let child = cmd.spawn()?; // Write down the pid so we can wait for it when we want to stop diff --git a/docs/rfcs/024-extension-loading.md b/docs/rfcs/024-extension-loading.md new file mode 100644 index 0000000000..26ba4f7927 --- /dev/null +++ b/docs/rfcs/024-extension-loading.md @@ -0,0 +1,236 @@ +# Supporting custom user Extensions (Dynamic Extension Loading) +Created 2023-05-03 + +## Motivation + +There are many extensions in the PostgreSQL ecosystem, and not all extensions +are of a quality that we can confidently support them. Additionally, our +current extension inclusion mechanism has several problems because we build all +extensions into the primary Compute image: We build the extensions every time +we build the compute image regardless of whether we actually need to rebuild +the image, and the inclusion of these extensions in the image adds a hard +dependency on all supported extensions - thus increasing the image size, and +with it the time it takes to download that image - increasing first start +latency. + +This RFC proposes a dynamic loading mechanism that solves most of these +problems. + +## Summary + +`compute_ctl` is made responsible for loading extensions on-demand into +the container's file system for dynamically loaded extensions, and will also +make sure that the extensions in `shared_preload_libraries` are downloaded +before the compute node starts. + +## Components + +compute_ctl, PostgreSQL, neon (extension), Compute Host Node, Extension Store + +## Requirements + +Compute nodes with no extra extensions should not be negatively impacted by +the existence of support for many extensions. + +Installing an extension into PostgreSQL should be easy. + +Non-preloaded extensions shouldn't impact startup latency. + +Uninstalled extensions shouldn't impact query latency. + +A small latency penalty for dynamically loaded extensions is acceptable in +the first seconds of compute startup, but not in steady-state operations. + +## Proposed implementation + +### On-demand, JIT-loading of extensions + +Before postgres starts we download +- control files for all extensions available to that compute node; +- all `shared_preload_libraries`; + +After postgres is running, `compute_ctl` listens for requests to load files. +When PostgreSQL requests a file, `compute_ctl` downloads it. + +PostgreSQL requests files in the following cases: +- When loading a preload library set in `local_preload_libraries` +- When explicitly loading a library with `LOAD` +- Wnen creating extension with `CREATE EXTENSION` (download sql scripts, (optional) extension data files and (optional) library files))) + + +#### Summary + +Pros: + - Startup is only as slow as it takes to load all (shared_)preload_libraries + - Supports BYO Extension + +Cons: + - O(sizeof(extensions)) IO requirement for loading all extensions. + +### Alternative solutions + +1. Allow users to add their extensions to the base image + + Pros: + - Easy to deploy + + Cons: + - Doesn't scale - first start size is dependent on image size; + - All extensions are shared across all users: It doesn't allow users to + bring their own restrictive-licensed extensions + +2. Bring Your Own compute image + + Pros: + - Still easy to deploy + - User can bring own patched version of PostgreSQL + + Cons: + - First start latency is O(sizeof(extensions image)) + - Warm instance pool for skipping pod schedule latency is not feasible with + O(n) custom images + - Support channels are difficult to manage + +3. Download all user extensions in bulk on compute start + + Pros: + - Easy to deploy + - No startup latency issues for "clean" users. + - Warm instance pool for skipping pod schedule latency is possible + + Cons: + - Downloading all extensions in advance takes a lot of time, thus startup + latency issues + +4. Store user's extensions in persistent storage + + Pros: + - Easy to deploy + - No startup latency issues + - Warm instance pool for skipping pod schedule latency is possible + + Cons: + - EC2 instances have only limited number of attachments shared between EBS + volumes, direct-attached NVMe drives, and ENIs. + - Compute instance migration isn't trivially solved for EBS mounts (e.g. + the device is unavailable whilst moving the mount between instances). + - EBS can only mount on one instance at a time (except the expensive IO2 + device type). + +5. Store user's extensions in network drive + + Pros: + - Easy to deploy + - Few startup latency issues + - Warm instance pool for skipping pod schedule latency is possible + + Cons: + - We'd need networked drives, and a lot of them, which would store many + duplicate extensions. + - **UNCHECKED:** Compute instance migration may not work nicely with + networked IOs + + +### Idea extensions + +The extension store does not have to be S3 directly, but could be a Node-local +caching service on top of S3. This would reduce the load on the network for +popular extensions. + +## Extension Storage implementation + +The layout of the S3 bucket is as follows: +``` +5615610098 // this is an extension build number +├── v14 +│   ├── extensions +│   │   ├── anon.tar.zst +│   │   └── embedding.tar.zst +│   └── ext_index.json +└── v15 + ├── extensions + │   ├── anon.tar.zst + │   └── embedding.tar.zst + └── ext_index.json +5615261079 +├── v14 +│   ├── extensions +│   │   └── anon.tar.zst +│   └── ext_index.json +└── v15 + ├── extensions + │   └── anon.tar.zst + └── ext_index.json +5623261088 +├── v14 +│   ├── extensions +│   │   └── embedding.tar.zst +│   └── ext_index.json +└── v15 + ├── extensions + │   └── embedding.tar.zst + └── ext_index.json +``` + +Note that build number cannot be part of prefix because we might need extensions +from other build numbers. + +`ext_index.json` stores the control files and location of extension archives. +It also stores a list of public extensions and a library_index + +We don't need to duplicate `extension.tar.zst`` files. +We only need to upload a new one if it is updated. +(Although currently we just upload every time anyways, hopefully will change +this sometime) + +*access* is controlled by spec + +More specifically, here is an example ext_index.json +``` +{ + "public_extensions": [ + "anon", + "pg_buffercache" + ], + "library_index": { + "anon": "anon", + "pg_buffercache": "pg_buffercache" + // for more complex extensions like postgis + // we might have something like: + // address_standardizer: postgis + // postgis_tiger: postgis + }, + "extension_data": { + "pg_buffercache": { + "control_data": { + "pg_buffercache.control": "# pg_buffercache extension \ncomment = 'examine the shared buffer cache' \ndefault_version = '1.3' \nmodule_pathname = '$libdir/pg_buffercache' \nrelocatable = true \ntrusted=true" + }, + "archive_path": "5670669815/v14/extensions/pg_buffercache.tar.zst" + }, + "anon": { + "control_data": { + "anon.control": "# PostgreSQL Anonymizer (anon) extension \ncomment = 'Data anonymization tools' \ndefault_version = '1.1.0' \ndirectory='extension/anon' \nrelocatable = false \nrequires = 'pgcrypto' \nsuperuser = false \nmodule_pathname = '$libdir/anon' \ntrusted = true \n" + }, + "archive_path": "5670669815/v14/extensions/anon.tar.zst" + } + } +} +``` + +### How to add new extension to the Extension Storage? + +Simply upload build artifacts to the S3 bucket. +Implement a CI step for that. Splitting it from compute-node-image build. + +### How do we deal with extension versions and updates? + +Currently, we rebuild extensions on every compute-node-image build and store them in the prefix. +This is needed to ensure that `/share` and `/lib` files are in sync. + +For extension updates, we rely on the PostgreSQL extension versioning mechanism (sql update scripts) and extension authors to not break backwards compatibility within one major version of PostgreSQL. + +### Alternatives + +For extensions written on trusted languages we can also adopt +`dbdev` PostgreSQL Package Manager based on `pg_tle` by Supabase. +This will increase the amount supported extensions and decrease the amount of work required to support them. diff --git a/libs/compute_api/src/responses.rs b/libs/compute_api/src/responses.rs index f2865b71ec..9522d7138f 100644 --- a/libs/compute_api/src/responses.rs +++ b/libs/compute_api/src/responses.rs @@ -76,6 +76,11 @@ pub struct ComputeMetrics { pub start_postgres_ms: u64, pub config_ms: u64, pub total_startup_ms: u64, + pub load_ext_ms: u64, + pub num_ext_downloaded: u64, + pub largest_ext_size: u64, // these are measured in bytes + pub total_ext_download_size: u64, + pub prep_extensions_ms: u64, } /// Response of the `/computes/{compute_id}/spec` control-plane API. diff --git a/libs/compute_api/src/spec.rs b/libs/compute_api/src/spec.rs index b3f0e9ba43..293f6dc294 100644 --- a/libs/compute_api/src/spec.rs +++ b/libs/compute_api/src/spec.rs @@ -60,6 +60,9 @@ pub struct ComputeSpec { /// If set, 'storage_auth_token' is used as the password to authenticate to /// the pageserver and safekeepers. pub storage_auth_token: Option, + + // list of prefixes to search for custom extensions in remote extension storage + pub custom_extensions: Option>, } #[serde_as] diff --git a/libs/remote_storage/src/lib.rs b/libs/remote_storage/src/lib.rs index 92ef793a34..1ddd156a08 100644 --- a/libs/remote_storage/src/lib.rs +++ b/libs/remote_storage/src/lib.rs @@ -65,6 +65,10 @@ impl RemotePath { Ok(Self(relative_path.to_path_buf())) } + pub fn from_string(relative_path: &str) -> anyhow::Result { + Self::new(Path::new(relative_path)) + } + pub fn with_base(&self, base_path: &Path) -> PathBuf { base_path.join(&self.0) } @@ -190,6 +194,20 @@ pub enum GenericRemoteStorage { } impl GenericRemoteStorage { + // A function for listing all the files in a "directory" + // Example: + // list_files("foo/bar") = ["foo/bar/a.txt", "foo/bar/b.txt"] + pub async fn list_files(&self, folder: Option<&RemotePath>) -> anyhow::Result> { + match self { + Self::LocalFs(s) => s.list_files(folder).await, + Self::AwsS3(s) => s.list_files(folder).await, + Self::Unreliable(s) => s.list_files(folder).await, + } + } + + // lists common *prefixes*, if any of files + // Example: + // list_prefixes("foo123","foo567","bar123","bar432") = ["foo", "bar"] pub async fn list_prefixes( &self, prefix: Option<&RemotePath>, @@ -201,14 +219,6 @@ impl GenericRemoteStorage { } } - pub async fn list_files(&self, folder: Option<&RemotePath>) -> anyhow::Result> { - match self { - Self::LocalFs(s) => s.list_files(folder).await, - Self::AwsS3(s) => s.list_files(folder).await, - Self::Unreliable(s) => s.list_files(folder).await, - } - } - pub async fn upload( &self, from: impl io::AsyncRead + Unpin + Send + Sync + 'static, diff --git a/pgxn/neon/Makefile b/pgxn/neon/Makefile index 1948023472..53917d8bc4 100644 --- a/pgxn/neon/Makefile +++ b/pgxn/neon/Makefile @@ -4,6 +4,7 @@ MODULE_big = neon OBJS = \ $(WIN32RES) \ + extension_server.o \ file_cache.o \ libpagestore.o \ libpqwalproposer.o \ diff --git a/pgxn/neon/extension_server.c b/pgxn/neon/extension_server.c new file mode 100644 index 0000000000..6053425de0 --- /dev/null +++ b/pgxn/neon/extension_server.c @@ -0,0 +1,103 @@ + +/*------------------------------------------------------------------------- + * + * extension_server.c + * Request compute_ctl to download extension files. + * + * IDENTIFICATION + * contrib/neon/extension_server.c + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" +#include "tcop/pquery.h" +#include "tcop/utility.h" +#include "access/xact.h" +#include "utils/hsearch.h" +#include "utils/memutils.h" +#include "commands/defrem.h" +#include "miscadmin.h" +#include "utils/acl.h" +#include "fmgr.h" +#include "utils/guc.h" +#include "port.h" +#include "fmgr.h" + +#include + +static int extension_server_port = 0; + +static download_extension_file_hook_type prev_download_extension_file_hook = NULL; + +// to download all SQL (and data) files for an extension: +// curl -X POST http://localhost:8080/extension_server/postgis +// it covers two possible extension files layouts: +// 1. extension_name--version--platform.sql +// 2. extension_name/extension_name--version.sql +// extension_name/extra_files.csv +// +// to download specific library file: +// curl -X POST http://localhost:8080/extension_server/postgis-3.so?is_library=true +static bool +neon_download_extension_file_http(const char *filename, bool is_library) +{ + CURL *curl; + CURLcode res; + char *compute_ctl_url; + char *postdata; + bool ret = false; + + if ((curl = curl_easy_init()) == NULL) + { + elog(ERROR, "Failed to initialize curl handle"); + } + + compute_ctl_url = psprintf("http://localhost:%d/extension_server/%s%s", + extension_server_port, filename, is_library ? "?is_library=true" : ""); + + elog(LOG, "Sending request to compute_ctl: %s", compute_ctl_url); + + curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); + curl_easy_setopt(curl, CURLOPT_URL, compute_ctl_url); + curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3L /* seconds */); + + if (curl) + { + /* Perform the request, res will get the return code */ + res = curl_easy_perform(curl); + /* Check for errors */ + if (res == CURLE_OK) + { + ret = true; + } + else + { + // Don't error here because postgres will try to find the file + // and will fail with some proper error message if it's not found. + elog(WARNING, "neon_download_extension_file_http failed: %s\n", curl_easy_strerror(res)); + } + + /* always cleanup */ + curl_easy_cleanup(curl); + } + + return ret; +} + +void pg_init_extension_server() +{ + // Port to connect to compute_ctl on localhost + // to request extension files. + DefineCustomIntVariable("neon.extension_server_port", + "connection string to the compute_ctl", + NULL, + &extension_server_port, + 0, 0, INT_MAX, + PGC_POSTMASTER, + 0, /* no flags required */ + NULL, NULL, NULL); + + // set download_extension_file_hook + prev_download_extension_file_hook = download_extension_file_hook; + download_extension_file_hook = neon_download_extension_file_http; +} diff --git a/pgxn/neon/neon.c b/pgxn/neon/neon.c index b45d7cfc32..c7211ea05a 100644 --- a/pgxn/neon/neon.c +++ b/pgxn/neon/neon.c @@ -35,8 +35,11 @@ _PG_init(void) { pg_init_libpagestore(); pg_init_walproposer(); + InitControlPlaneConnector(); + pg_init_extension_server(); + // Important: This must happen after other parts of the extension // are loaded, otherwise any settings to GUCs that were set before // the extension was loaded will be removed. diff --git a/pgxn/neon/neon.h b/pgxn/neon/neon.h index 60d321a945..2610da4311 100644 --- a/pgxn/neon/neon.h +++ b/pgxn/neon/neon.h @@ -21,6 +21,8 @@ extern char *neon_tenant; extern void pg_init_libpagestore(void); extern void pg_init_walproposer(void); +extern void pg_init_extension_server(void); + /* * Returns true if we shouldn't do REDO on that block in record indicated by * block_id; false otherwise. diff --git a/scripts/combine_control_files.py b/scripts/combine_control_files.py index 0350e4721d..b1fe73881e 100644 --- a/scripts/combine_control_files.py +++ b/scripts/combine_control_files.py @@ -15,16 +15,12 @@ from pathlib import Path ], "library_index": { "anon": "anon", - "kq_imcx": "kq_imcx" - // would be more complicated for something like postgis where multiple library names all map to postgis + // for more complex extensions like postgis + // we might have something like: + // address_standardizer: postgis + // postgis_tiger: postgis }, "extension_data": { - "kq_imcx": { - "control_data": { - "kq_imcx.control": "# This file is generated content from add_postgresql_extension.\n# No point in modifying it, it will be overwritten anyway.\n\n# Default version, always set\ndefault_version = '0.1'\n\n# Module pathname generated from target shared library name. Use\n# MODULE_PATHNAME in script file.\nmodule_pathname = '$libdir/kq_imcx.so'\n\n# Comment for extension. Set using COMMENT option. Can be set in\n# script file as well.\ncomment = 'ketteQ In-Memory Calendar Extension (IMCX)'\n\n# Encoding for script file. Set using ENCODING option.\n#encoding = ''\n\n# Required extensions. Set using REQUIRES option (multi-valued).\n#requires = ''\ntrusted = true\n" - }, - "archive_path": "5648391853/v15/extensions/kq_imcx.tar.zst" - }, "anon": { "control_data": { "anon.control": "# PostgreSQL Anonymizer (anon) extension \ncomment = 'Data anonymization tools' \ndefault_version = '1.1.0' \ndirectory='extension/anon' \nrelocatable = false \nrequires = 'pgcrypto' \nsuperuser = false \nmodule_pathname = '$libdir/anon' \ntrusted = true \n" diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index fb78d69d67..0a9735ce9e 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -530,6 +530,16 @@ def available_remote_storages() -> List[RemoteStorageKind]: return remote_storages +def available_s3_storages() -> List[RemoteStorageKind]: + remote_storages = [RemoteStorageKind.MOCK_S3] + if os.getenv("ENABLE_REAL_S3_REMOTE_STORAGE") is not None: + remote_storages.append(RemoteStorageKind.REAL_S3) + log.info("Enabling real s3 storage for tests") + else: + log.info("Using mock implementations to test remote storage") + return remote_storages + + @dataclass class LocalFsStorage: root: Path @@ -550,6 +560,16 @@ class S3Storage: "AWS_SECRET_ACCESS_KEY": self.secret_key, } + def to_string(self) -> str: + return json.dumps( + { + "bucket": self.bucket_name, + "region": self.bucket_region, + "endpoint": self.endpoint, + "prefix": self.prefix_in_bucket, + } + ) + RemoteStorage = Union[LocalFsStorage, S3Storage] @@ -616,10 +636,12 @@ class NeonEnvBuilder: self.rust_log_override = rust_log_override self.port_distributor = port_distributor self.remote_storage = remote_storage + self.ext_remote_storage: Optional[S3Storage] = None + self.remote_storage_client: Optional[Any] = None self.remote_storage_users = remote_storage_users self.broker = broker self.run_id = run_id - self.mock_s3_server = mock_s3_server + self.mock_s3_server: MockS3Server = mock_s3_server self.pageserver_config_override = pageserver_config_override self.num_safekeepers = num_safekeepers self.safekeepers_id_start = safekeepers_id_start @@ -667,15 +689,24 @@ class NeonEnvBuilder: remote_storage_kind: RemoteStorageKind, test_name: str, force_enable: bool = True, + enable_remote_extensions: bool = False, ): if remote_storage_kind == RemoteStorageKind.NOOP: return elif remote_storage_kind == RemoteStorageKind.LOCAL_FS: self.enable_local_fs_remote_storage(force_enable=force_enable) elif remote_storage_kind == RemoteStorageKind.MOCK_S3: - self.enable_mock_s3_remote_storage(bucket_name=test_name, force_enable=force_enable) + self.enable_mock_s3_remote_storage( + bucket_name=test_name, + force_enable=force_enable, + enable_remote_extensions=enable_remote_extensions, + ) elif remote_storage_kind == RemoteStorageKind.REAL_S3: - self.enable_real_s3_remote_storage(test_name=test_name, force_enable=force_enable) + self.enable_real_s3_remote_storage( + test_name=test_name, + force_enable=force_enable, + enable_remote_extensions=enable_remote_extensions, + ) else: raise RuntimeError(f"Unknown storage type: {remote_storage_kind}") @@ -689,11 +720,18 @@ class NeonEnvBuilder: assert force_enable or self.remote_storage is None, "remote storage is enabled already" self.remote_storage = LocalFsStorage(Path(self.repo_dir / "local_fs_remote_storage")) - def enable_mock_s3_remote_storage(self, bucket_name: str, force_enable: bool = True): + def enable_mock_s3_remote_storage( + self, + bucket_name: str, + force_enable: bool = True, + enable_remote_extensions: bool = False, + ): """ Sets up the pageserver to use the S3 mock server, creates the bucket, if it's not present already. Starts up the mock server, if that does not run yet. Errors, if the pageserver has some remote storage configuration already, unless `force_enable` is not set to `True`. + + Also creates the bucket for extensions, self.ext_remote_storage bucket """ assert force_enable or self.remote_storage is None, "remote storage is enabled already" mock_endpoint = self.mock_s3_server.endpoint() @@ -714,9 +752,25 @@ class NeonEnvBuilder: bucket_region=mock_region, access_key=self.mock_s3_server.access_key(), secret_key=self.mock_s3_server.secret_key(), + prefix_in_bucket="pageserver", ) - def enable_real_s3_remote_storage(self, test_name: str, force_enable: bool = True): + if enable_remote_extensions: + self.ext_remote_storage = S3Storage( + bucket_name=bucket_name, + endpoint=mock_endpoint, + bucket_region=mock_region, + access_key=self.mock_s3_server.access_key(), + secret_key=self.mock_s3_server.secret_key(), + prefix_in_bucket="ext", + ) + + def enable_real_s3_remote_storage( + self, + test_name: str, + force_enable: bool = True, + enable_remote_extensions: bool = False, + ): """ Sets up configuration to use real s3 endpoint without mock server """ @@ -756,6 +810,15 @@ class NeonEnvBuilder: prefix_in_bucket=self.remote_storage_prefix, ) + if enable_remote_extensions: + self.ext_remote_storage = S3Storage( + bucket_name="neon-dev-extensions-eu-central-1", + bucket_region="eu-central-1", + access_key=access_key, + secret_key=secret_key, + prefix_in_bucket=None, + ) + def cleanup_local_storage(self): if self.preserve_database_files: return @@ -789,6 +852,7 @@ class NeonEnvBuilder: # `self.remote_storage_prefix` is coupled with `S3Storage` storage type, # so this line effectively a no-op assert isinstance(self.remote_storage, S3Storage) + assert self.remote_storage_client is not None if self.keep_remote_storage_contents: log.info("keep_remote_storage_contents skipping remote storage cleanup") @@ -918,6 +982,8 @@ class NeonEnv: self.neon_binpath = config.neon_binpath self.pg_distrib_dir = config.pg_distrib_dir self.endpoint_counter = 0 + self.remote_storage_client = config.remote_storage_client + self.ext_remote_storage = config.ext_remote_storage # generate initial tenant ID here instead of letting 'neon init' generate it, # so that we don't need to dig it out of the config file afterwards. @@ -1505,6 +1571,7 @@ class NeonCli(AbstractNeonCli): tenant_id: Optional[TenantId] = None, lsn: Optional[Lsn] = None, branch_name: Optional[str] = None, + remote_ext_config: Optional[str] = None, ) -> "subprocess.CompletedProcess[str]": args = [ "endpoint", @@ -1514,6 +1581,8 @@ class NeonCli(AbstractNeonCli): "--pg-version", self.env.pg_version, ] + if remote_ext_config is not None: + args.extend(["--remote-ext-config", remote_ext_config]) if lsn is not None: args.append(f"--lsn={lsn}") args.extend(["--pg-port", str(pg_port)]) @@ -2375,7 +2444,7 @@ class Endpoint(PgProtocol): return self - def start(self) -> "Endpoint": + def start(self, remote_ext_config: Optional[str] = None) -> "Endpoint": """ Start the Postgres instance. Returns self. @@ -2391,6 +2460,7 @@ class Endpoint(PgProtocol): http_port=self.http_port, tenant_id=self.tenant_id, safekeepers=self.active_safekeepers, + remote_ext_config=remote_ext_config, ) self.running = True @@ -2480,6 +2550,7 @@ class Endpoint(PgProtocol): hot_standby: bool = False, lsn: Optional[Lsn] = None, config_lines: Optional[List[str]] = None, + remote_ext_config: Optional[str] = None, ) -> "Endpoint": """ Create an endpoint, apply config, and start Postgres. @@ -2494,7 +2565,7 @@ class Endpoint(PgProtocol): config_lines=config_lines, hot_standby=hot_standby, lsn=lsn, - ).start() + ).start(remote_ext_config=remote_ext_config) log.info(f"Postgres startup took {time.time() - started_at} seconds") @@ -2528,6 +2599,7 @@ class EndpointFactory: lsn: Optional[Lsn] = None, hot_standby: bool = False, config_lines: Optional[List[str]] = None, + remote_ext_config: Optional[str] = None, ) -> Endpoint: ep = Endpoint( self.env, @@ -2544,6 +2616,7 @@ class EndpointFactory: hot_standby=hot_standby, config_lines=config_lines, lsn=lsn, + remote_ext_config=remote_ext_config, ) def create( diff --git a/test_runner/fixtures/types.py b/test_runner/fixtures/types.py index 7d179cc7fb..ef88e09de4 100644 --- a/test_runner/fixtures/types.py +++ b/test_runner/fixtures/types.py @@ -89,6 +89,9 @@ class TenantId(Id): def __repr__(self) -> str: return f'`TenantId("{self.id.hex()}")' + def __str__(self) -> str: + return self.id.hex() + class TimelineId(Id): def __repr__(self) -> str: diff --git a/test_runner/regress/data/extension_test/5670669815/v14/ext_index.json b/test_runner/regress/data/extension_test/5670669815/v14/ext_index.json new file mode 100644 index 0000000000..af49dfa0c0 --- /dev/null +++ b/test_runner/regress/data/extension_test/5670669815/v14/ext_index.json @@ -0,0 +1,24 @@ +{ + "public_extensions": [ + "anon", + "pg_buffercache" + ], + "library_index": { + "anon": "anon", + "pg_buffercache": "pg_buffercache" + }, + "extension_data": { + "pg_buffercache": { + "control_data": { + "pg_buffercache.control": "# pg_buffercache extension \ncomment = 'examine the shared buffer cache' \ndefault_version = '1.3' \nmodule_pathname = '$libdir/pg_buffercache' \nrelocatable = true \ntrusted=true" + }, + "archive_path": "5670669815/v14/extensions/pg_buffercache.tar.zst" + }, + "anon": { + "control_data": { + "anon.control": "# PostgreSQL Anonymizer (anon) extension \ncomment = 'Data anonymization tools' \ndefault_version = '1.1.0' \ndirectory='extension/anon' \nrelocatable = false \nrequires = 'pgcrypto' \nsuperuser = false \nmodule_pathname = '$libdir/anon' \ntrusted = true \n" + }, + "archive_path": "5670669815/v14/extensions/anon.tar.zst" + } + } +} \ No newline at end of file diff --git a/test_runner/regress/data/extension_test/5670669815/v14/extensions/anon.tar.zst b/test_runner/regress/data/extension_test/5670669815/v14/extensions/anon.tar.zst new file mode 100644 index 0000000000000000000000000000000000000000..5c17630109e66149f559d75866478be70a3037c5 GIT binary patch literal 324259 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

4(nA@lrKNBFe#4>syt=) z5l5^QMR$yyZze33ga#;#1gMVZefP-TG22%;@N9&|H8veHKYL$U{2_76xo~Fd(j&Cq zIcbUELSOu2;e0Xwv4NVOLE-DL6vq42HN(oZ9$fK~`fOF<6Nk_z$%daSX?D*|DxVxx zNcH4)e@%L$5b$xH^rKX;z_+o5JiEtY;$oufN%fyFOw1O=Zp}ta0o-5a4IZ8DDwr7b zU@a~xv#i+byE@&wU$$QO{dck9sU9GZ{xqDQ=GDh5SvFyh`ETRT*Q*x(PG9#}IH1R7 zWTNcRdU+_!TF1QZZbEflnV5HMh46G&S)Ifnnfk?Nrz4j$JajsCtH2|aqR7I6 zSBmA&htaEfQ-2Q>=EIlVaGCH;+ro`2%kS;7uKALs`JNBHs@fFiC)Ph&7Zv}*GSl)n z%Ya+ebMoVj+IlM?<;q|2(r-<_)m5^|ecYW0 zNUh4u59jQdc{b#WshR1>3Gj1%m&5Zio0iF~?VxR{qvr|T)h{pS|57wUr-z1|q@Lk| zzvA&L#fk;r*N?)oxcDo@9^~n-SMBmuDw2KaIm6mi2PJ;QUer_R(L-NFZ=?H63@`p> z{1`CScIMVPZF$u9>pzl*!I&k?3y1&EPm3FW%USLGNnW|IS@)}<2&HI?T$A#Ey{cbG zQ&N?-`gr(wY^j}E9gQ&s>0k}u&<3+ z(vNe+OI3^g>K>>X{%Z*9E8?Jv-nLBhEG@6g*3_qr&D2R93(EY)h{!n2y zETGgSz$i`){|ZV9~o zmo_@$F+4+-kw#&stMW-pWy3Z5E;4~Zh7&SK6!-QpJ^#U>>1Yyz)a%RS!>94A|Ke+P zZIjVAK!13dPBCE#&LL*LU$i0`Jwjf*O|Sgl4V+% zx(xr~xlgJ7$x(6XzcvAgm!-jFQXy1^k~>^yK5QynA=+uLHFZm(=@SNYc6S^u<6mQl zh^HvIq{7i0|KOXvyIg0d>FKJ-hY!ICtdG=_UR%4Rr!Ape($l`u&vEl`sZ8cdIK+{U zjgA7N=pU)S-K0NNlazc+@Ro{>T3OP;aTg$|t}C0sI);}p7SC(JFxN*>tN|WNqB6{o zw9iORp5znf=HtrObmHcXl$cLX=I={!q2|)gWM{C~OrYn==LT?@u}4bS`$=wt95hEL zx$^Oy@Im;!oV$*i1gj*gmdZ^YGO3n3Zl>5Ok7%93xBT{1klt2DVzEr{pD1-PXr z`FLVt$QUd*=D1X1lDqr9Lds;ATfztQ;}`P*^x%KJ-WjUBY$ZIJX$!f@KXYZq#&lBv z>NvP>aJ;Dy9pYpvHVN%lfywc&m58`F+0rDa?IU?57$SjVN$C{v92{H`NCu7&O)_4t zD@S~3&a+b(ml+B-nt50^1?O{u#2Jr_x^40TDkj-on2TbTD?i3@@C}M8g#@QsdHZK= zp^wX&&GSr=iDTh{g~g{ud$724ONPbi&EWN76s`t*zB}0(urq77vNmt$hg+EPe3l>T zQnlS;6lmqfJW|*Z%;C*CD$J-5~6pEJ&o`MtO#bl&?D*HV^o7QB;d<7cP9 z;q|c7b)8=5J8F?leEC}fV!1$9*~ z!PF}}sAG!W$z7LBQ*v7;Z*R1STbpWAwWDu)X)aRagnJ3B$|U>h_!GBoJLT?$fX?{j zwd2l1yCQJ9jpv%00|V2x4WairHZkRBd8*ijv z^m%Z~46_&>wv)uYwPj^>L@ZkH?xAq&*re?e41r6lUDMvO6o$jY%emT7LxIa8l1X*q z9fea86hE7=;z}a~!{b=?khEpWrn)I;)6YyA|B7n6(|2qiE-B+RKV-3d=U*gIfq(T$htZAm|_NeCc z@o^y-+1QPwhPjO7Fs|>=vu=J>95g^iwk0BSr0y}Eqt8H?c9n%S8#^hNkt{|-QWhMh z{R%xZ3m3zHfvF(MEf13vQ)b3KfR%T2;sNUA5nv=8L;tO&3}=iYz$8kJ z7$~7W5XQY5&Z(&%?^VLEGd4z?mI)C#i@r{v}r~Z<(dE#rg-s;)*1u>2I|Yu9Ht=Ly7hDcOY6R;~f?hSK7N|*!A zC_!;2xCU@|2iP@=WJEtHA!MiG26SixfYw|{06PhlDmpI3dO+Jw|3~z(P{!s}A~#Zc zv3I*zU||#20G*0S#1Ps`H0jRgp+l0_n2M9=WU5uwyKt;9FJSiWGz}80+aD&xIT)rz zW_dkQSV^E1?_a=@sumGXQ!ry(S z&_XBGFCzol?fl7qSrUPR(9aqRw}20r-Lzol z-fI_giO=N?-O_TyCk#2<+>cYGlMU&m_Vf95Kr5l`9)xrn9;OxEO(B;N2gZ^!N{R!B z7|hMph5@+^eF_g%gcZYiXw)= z^!mBW3Gf|B=_ExtsIemM%jx=2F?&W)J6O5R$oYC@lOc)=D!PkwE{ulRCfpSveZIUU zde#U`nXgZXFWpIGBP+3K=b+T3hhL8jfpyW>bgB?|7uk;OAZrURGO$pi(wB)x%mm~q z_mPmvXtsZdIguR*)^4nph~u=zT0!9aLeLkn*^fz~Vni2H#KHVWOmI75Ztw5!;P^0| zZ)hM)M(J{i65{P+yhdLdPZ`M?p6lb2+2#rdCo_tuw}Q`Y7IJaFVZ@kr_Df0)bdcVX z-QMtMSZJ8FiMkyma{Kc)Knn3*8PPJ94qJ5*B~F z3(j1mFN|Yd%S7=VCc*n(YP5>DuUHf@)9fm6H2_*YrVNncQ5gus7srITXpE6k9-U(F zyyJe@;q&8b0~9Vq2%dSLW>6r>F6!`L;Io8iJZtMgL-p)gP9{MG+j#gW#K8MICxj9C z5KML?-oLJ;iRFA39|$96PzQ=hQ``7cl@VM(MA2ThV`1@G31+VBXfLf@@5oRvS(7*A zi(ZIi{H*BedTG#HN2uGZGiX@;GuP=XzdD zwWTSZ4h|a7s`r5MsLnUePmicU0|DQIYB#sp-fSn*a|vH~nBl|3T%RUs-p+F(IJB{A z<9IN{m+e?=ODLf`948hJyMaf@#l!|0PzFfe+dYcHMFP^B5{L{vjMXA4W#Jvzx|4{y z)*;3M6UBAgNCiUEuVXnt!d8TS&m=%vdyJCvEUdq zQOTPGLRSR;Ao4o*ro`q=2}l<6hY<4z{2CeEwW#XC06c62{=)Jwtp2GXD8K>nGzruG zER6}fMi1b^w9})gl)$ZBlqz-u>%^N_GjvjJuV(aW0R3Y-uE7{uasQGyML^;*a`EbG zeL#819=_wS!Q?-13h4fq|Ex66{$CXzv_R zMEaP>L#ncz-fhOf{)Foie7bu$I|aXxp53W2F_noud*smiFrkTlYVUT@I507u%G}xk zNibw_<7C5uyAwdBj8Dh-AI0E@-B?9P88w3av3d)hxpgRzk`GI6=aT}2LJ{nm;^!c9 zP1blQf=ap9yQ(yfUmZ?&!CX%D-O=27XBk9crb4&m39ifJ(`!JRO&#b{(p`v_nLpa< z+h#Lq&7dCGUS)Y^|I^L~@yD)0lPKvr-c?gAYAE32V4@UtBdDeZAxqS5#~VmBbm>Px;PdIAu(6mSEd2hc9bh?hzufr8l1 z8i+ai-h_ZQgP>ZDoUROjRYkGK;sXWiU%~;Ig+iv*_oyg!zvquQV+ToSFGRqZ@9?V8 zgh}woet_VeMMcR16h0J2!8tA;o2UpKN6wdhKo9qm@ay#oVqMX|#KhgFK3~*m_$zQ| zKo$54YPKmr0w#BF5|1g$fw9_9K`gyotV=nnMGy-NQj2=O9TEl{GmIZ5A%+UFoupYs z(qmPt*<&;Tf>;rA^*0WHup2G_%$tZEk%NS=U$A{dsXu-{AI0N>zK3MvsG2VlAk=K8 zH*YsK2g7npw>y(qN@`J~CO%7eP!oM!b5qP4G;nO3z)bhCsmmo_j~W?*?HnSBL*(Ky z$O!X>im*0W7(S$`c>}0$`tl%=3d{laFrQO3S+S0Q;i@S5vX`_7yv%p#nOe6W>f1OV0bj8dF`QW zb&K^Ek@zh^#FsM72|+Bw32=POW|+>@zjoU)0mjcOV0yz9LuI0rpLi@B13$8(T{4R2 zuXr{jL+xDRj#aVSiZ1$qmV#68f3l%n64Wc1y)50{kOeyNkkBq^A%Xe{ib+9bRaGocIg&1sB<-V#6~Kowh}8u2I==#mI189gB`5WJ;_OM@kvL_@bE<+NE{ zWV6H&D1r`PrjPxM`4DJg z7lF9=HU~Bk4LaOWh$n@ws!BrvzW1AUK;M`0aD56W;tf^smM4(xW^=lUT2kG|W;+%A zX}NSa_7fWCyiN)3V-x~hcEah!jWzGw#tOcY+cLozDw|;}25G5C$d`EP6BQ?P$4D<| z6*JMFOxZO@MwCI7R0xDw;&mbm=2;VR>vM+I7-`kkXWuxQ+_dA2Ag3W*eJLQuw#4(K zHWPhK%kv>ELS03O6C18Y{9{KnmfZ}4!u{X0Oy)wp1G*&v)u#a z`{KJ4KX8wX*u+y@ZsM>+zqa;j1hQdzlsLjLZnFbK7g@rlsh63TM5Dw=90`nyI%?Sa z4RS0Y;)ZJ;gbMT^l0sr+Xv2}1XPLUhK12V>fsx0SAoWfHtgH&yl@9H&MaIzsS_+}y zr~@Hbk?iG9Ht+C@P}-4-P!HYW-d4(IF)hTH0ytbZr?-_X3B?=P6`zJ;jf@~H(b7%o zRjs9n@dsP;mByh6BaibL=h;puQwTYJ0hgrcIo5$od}g|Sz3bO-U9VmlS0ri?dCU#x zD3{t~!^3@aM}}UD*SG@JyZPvPZCwFa=jl$2-HADDfESGZU{@0K0Xqc;%c0rxx`mzv zUJ>Qo)UAgBh1bjvc}#!kFwz9%Qa~?$oaZb|=KWY^3YzwLdcl((8(xk$<48PM!>0XX z^I@7^>lf`hXrD@O2u#v9ir=_qS5shZFRT+{oat_rZ=o+bMV|S1&tv^m!|MMqDx3Oyo%yU8J=h9U#6-vzyY$LZjdX8-k45gpG_mm1~x?V87 zkjJ_g_;F^taGwo6(QMZ(su#;zSz(-bw|2@rGwh>ORN%4p9Zf}pTe$uy;{ zWHklLF8gu*gW@60&pVm8vWMrU#Duur1ZlO!+{$_hrHDTttm*#NvkOG+5%s^WsF~LJ z`iva6_tEf62lH2ac|FvNS@nv_J+z4aHQvlga-~d7&w9W!$lt}$?}C}}Q9G~x=ue!E ztaXY_<}`Qr7y0S9lZAI(05kZfY!e(wZx|_K)JpX~kSBf|?MN0*(Gdw2Yp*mV4$Im{ zPrH#lHKrJuSq|RSJy}~2lm5`HI*@Oee`KVUSy8!vg!wD+rFlB=m5Y)Tlh>MyvqL~F z)dRyZ&DBL_lRrv9)ouTse*8YS;qDiz@!7=YqeiKnzF1|>{Ly)aLZRvUU$JK9i|O&Fu(cvUz( zP&Z6v5vgiiSI#O)o2uwpoXEt=&I%xF8j4$zp{IufFZjYIvw%|8U zdqT5^rDn`?XpNb^@nqO5_EiV6Go`efGyQoFx5^Vt|BP$dzo5$&F54d9yL%}~ zTslwKnYFbi{g{A0D^7BLbk(u2p!8r=!9gxy>7Ua}ce2nCmhd02L}$$({O|EbY$Y%b ztN9~zdCrv|Lv|eOZ7ch%ie9pEFK4y;V?KNg8GG{3hg;1!z*q6@67y1kTSa%7{gwLA z?~2NguH$kB7gZlBg)PR*zirZwJmopzn(-%7oc~+<^(oI+9R0PCenU>K#&2e5_1`dW zn%Fg-nFaf=?oJu{hY!238WLf3nk~YHCjOpI+nPLcZ;PJjz0OybJjfWo7NJpIBP$&OqT zAI&*q?QE8c9}2vt40(Y8u8P}cEPEX#k9pI=)(RNN=9lI7y3H~Bll3_}Rb{WZ95UXg znZA0fu#|3AlT(<%n7Z~yaHwa7HvVCd8So4PY!xoFa0f~hdT#13Vv~V!QPo|)M3s9KRx{Vt77`M zwI=D%JoC3lT3_BOj``~<(FicM&3eTxI86AvEPteGH~beY*EH|#Sg~W2eu)iLde+<_ zF1#c5TmPwV>yY1`SmlLU{bY}?=?@DPqh_d^3T&FRtH3Y9LDA;Z?3dhckv1Ixp5=@2 zKm01F`HNit{U};%J3!+c>J8KPc)pV*=GQuvaqK8spzvepVPPoCk*k4kY@!q|?&}O$ zqP8fdT1wOL(6eg;alX_wm)Tq0*J%d|^CQr{xuE?y{*eh?$&cCdJr>UYe z!XqA)o@aN=>&J4m$v@7^)IHL|%M7OuR;PVrLYuW24!Y-!#-PoOSyL-Q5Z3Yn&k-S1 zO5xP<%9T-H%#W)4kD_zhEE7IYQ~Bu+G>zmq#yQ3#``VruJWz;JG}M7T%8qXeGG~)- z&bj*L^6`cIc)Y;A8zOh`pKe+^43AE~X0yI{Da^7gYH^*xvuFmilt3vS(m`paH=jE&Iu`5wj7>)=jX z5>`lMlzIB*0o^3TH5-XDQQZ>CDMiu~jRoJ#ISgcNV4 z&QJ6b?3=LJvh)oDH7`PDcZGao-VXghkAJMg^ZLj48+HX$cSn%R~{giren9$ zfS2PIL9c5Djy4`rSCtbMSV62gFzJqstY*rd>71D4jsALBLi-VC_*LP=H|E?KGJZ1+WOTM3*{isLxf?*60iSd=smP)TBbJq*zffL_76c-rG zPatX-(jk0m%G|UFI1+pSzgZl4)e#R)ehZrjX9T9Gqwo2JaHmHJ_Bnxk#)UHtqpnYe zR%$}}(vWbEoOLi?>vBC3hlSmqIW%?;@?M%?pf0)m*$(I$! zZ^^~Y)BO4l#~~c9oZII@)S;0WlbBp#xiV4pDacd?k*ntIMw+ytrkog~`fR4WtLD%# zG-U15#!wNdt+5Z6XE8@db?ckL z9#>3=?QDF0D-yoE#F4(0vQfO&*mijoAM?`1L$5w5x*jdFxZfICM`PtK99Xs!aHv}j zABZc#gyvxihmCI2Jb<+v$?52-u><7Lwnxc9l}ZrGA$?;|y*~ZKr=i}{*2n@A42t#; z@!R|$OGs?2O|HKzv@gMErF;C5j)9iMh;&u{uzm5{sjRVc)#0NdLgNIP{wkxb75SO8 zHRsA4a)dYt!$Pz-GifmpRr@TicPY@we_@U^;S2Y=aA)QVU=uMR#MQ+*j|KbN+VbT* zoa*$>mxMOo^-|Y#N{G;KU<-l&n>zg%M$3puTJ zBl+grG>4^o*kqkhV1pCladgUzeSP)_J9;-Wc{T2j;!HK9ZSoT;Fn3iv#FL4R$X6Sp zkSy9soXlSb;;FKUFG=V4vskKS21)}4WgT(+3=xDc*AdjmYca4WrW8Ywy!A}A?k_E1 z52rJ->hwy`UErEEm5D>hDSqUG~8pkLCb$Gi=tpZ26JU*S6mvEyUnwVl1eVw9h!VJ zWANy8rq?6n(jC8FnWNP8XYZq2HtS!l?E+M4Jbhv`u^uyq%rR9y5DoGo?@<|8X|mSU zQo}?JP7ifBHKWnXtGwN4?2l#k&T$HI7!&Pqm(3HT>Ulqq#atuGWav1!ezC;UVm_$Y zVTmq^)r{l59+6co8(Ho%o9}_)m}}C30eBm`d`M7~X1PT9M4RWx$RDwOz|v>YkXC@uWr-_<2CRf<4HmDiXLF z4bKdwSme{@j4-&bhN|sJzCW(csTSQvCr)-~JPgn7XL0Ypd#YT2qnqAOHc%5RtmU9` z@`$xykLpbwV3u;o30yXHs>X8oCX}tgsu_kueoAe7-jJg>WDVRsshNskM+Y!B=F|NZ zN%`}Je-O8hOR5>6<=sXD<(qi=lAv_QT_+HlW!vNEkjglQ>dZi=l-h7EU)vJA2@?bW zm4E>14%KY7N1bl1aXV=|VgyRxy3^m5PUD_QYFNdc3+$)MZ#f7DQiR(5;h`UOTSVGP zhjR4|Fg=~CXj^67I+^qj{M-n`wfFh%HyED3=|CJbiQSsfD|aN4!`LSu8UAIE6MqP| z3rxq&YHq^vVoDaI6*4l@*AX6bWoO3A^qv;T!bHD3v~;r5pj`-mP&5cXMdOx%{d)QDa z%Rwz>eNY1#9ith@kr97cH&{2_W|CkpHJG_2K9$piS^&ABP@1+Ne;IG^Y0%=x(c7eUkq2FwL%Dl9j4IlT=c`qHICS$=3vifIy1=c)#)+L7% z84HU}(vg}aEnB`)bGL8*()LdJ&(9Nfi8E!~PBdFS&f1N-yK-?)7S$0*(`JTyWR#)> zet)GKII8cadOdA%Fcy);bE(Np-!-uTIVEV}Nz-;q+Y9wfn@js?lC}Bx@Yt6Y02b+A zX#8~moI(i#Mz#Gdx-Or>olD8w?A3JCafz%eLl`}_-QA>JlNNY>JGjM_(AD99p^CYy zwk^ad^5B5`=(WB>5UG;2WAoUA0Vd(bQCIIksc?pBzv_rs07W^#Scr2Plg z*ilgpegsVW*4MEx3Nq3U60TiWVZ)OL08%Ed8k# z9x75`TokkGyVNisTb9t`Ba`bKs#?!rSd!V^AazJP+gwYHZ|z&gf34&hp2e$o`)x|) z{BVTq*3n-r3#TzLwaQ=$ZSI@a!su_)8BQ0eD|7UUF5|ZSXPYa75JZl?Hv1ZvWkL>$ z`TEwUO$|iEkprfVLlxH=b0JsJY=6j*^xrO2Wdpz?p60;hqZBGq459F9t-IBRo#JLM zLOq;@-fu(tn(uf?k*~+Jk_%h*iGS5XKr_6`N4Zba7_5a`C@_xu>L&($iH>#p#>B;G zZGxE?OLeW0bie_8U{K#fH=&ihdh5^JRJ4c60Ro`fl%`m@{x5@tw_VJrGh!9c7b#Vg!2e> z3SLn+^g&!QbbY;TD4t##H9J|QdhG9Hv?5V&x`K0+Id7~O7Z-nZsduX+U7%|I zgK9=V);jx<0uXBY5fxKu+|;LYlVp|vFhj-h*B0E#=D;xCVjsUzoL(3pknY&jGo$9A z$EcUJT<{v1=2}Mh{S?MeugiAjGcpFsm?XM>3OZ#E5$R1hAo=WBm>Jq$etBn-z@s|rTO3Z z6HR-Q(29fWhBDo}EGf$$J8;ms$Us`2K<>I}sA%x{)$X>qqwfmP=D_G`tCO@6$zZt} zW0qx-E2P+(cHhV~2Yu>(|+awuu3Agc2Fsb}|FS+yl!-cc~l{=!{7J>K|a(aw8zs;g#+mR+R_95@z+w291Je2qOyjUGKZ*U*Nv6)vo z#%b~57ez(urSGvO4lMi*0HkFzE@^v!uYViBKt8t2pT*JcyTehrILIYO=a{LTH)S0@9oNl1nXgn@t#*v^MR>dvnhw^LlIWGXtR<=vo?Eim&5cyka9AI zg}VuHUyG`q*zLF9B6@;=h zD4FjKz%8&M9S2M!J{qG(jWZ*tk=#>%mE}?Kj)RMN=KbL&)`ZMeI-)^)ui*%DkqWB5 zUpEOjUvmI~i?WTRSB18Uu{Z27#C*M_rtd_~P(qztn+*TWUfjd4Nf#>$ZUr+O_V4p|foKOpuaAxNm$#!)Mjucfjk}7baGe3uOjCr>7 z*4->-E*A^T(agT%&x1-XgNDv_o%T$iSr1d*7bg>-9eJ%wwHCnxCla-8rJHdj=t7>G zZ+?DoVv~pMCE(M&4@IUi?IDjQLMut-jE#+g ztwjrxN;IsQpQf*`h;m#{ROj%dX$msCLX9dr#dlX1@A!al3qaTTH+%eH*q3lp8@J|>~|-)fRVS~0l>%)u=GM3-=%za`-5 z^Km0ZqBAYw+h~}Rj6{Wbc)h4;B-GBmVr%eZXwpU>h~fR1_L!%MW=~QQ5dPWyUxDXU zYDB2Hl6ASaVb+(&(c4#qKhtE>Pg{WzY=pOrgTiq9-LburbtnsT>ViwyD%+*)usQ45#G2K=Iy0!KPFGrtE(|HfY z*V=&I1ga9vG}^c^6)rJTWCJ9vt! z1*h1jac~4_l7Rl{mM~Y38hFhREXUepO|<#F-JHiwbDl7JJ`HQ?cl$dn@NrlEqPCVOXz+_P zCeXw6JqXBQgtGme0Q2>^GY(jQOV)6s{ww~3s=mE`ES6&Yb6c>FdJ3d?*j+&@48y=w zM94NrXVumlSQ$Czope>OFPr76H@fm~CQAc#2=K)&dPrY&Sd=G;-NlxBoxdNwb!2s02^D!j<`Vdd>ue=HYv=mO52kJk)K#suvd2Jex(S!#f>P}U3?ZH zU$1To4FWf*kS&*TEt1yA1Hv0Hk)~YQU4ItUTh1BX=(qUWkf~*E!7>%Nx>EE}f(s%Qq1TDz%2U zj&{2N3m>m$dcZ!oL$31MLB)6?hZ2mNHg>JGT!;^@U~awWwz82T&*Au&)oK>G4HJ#& zk>pR<{QbgP1{WWXk2IZK5bp7-7rykT7-VlAbZ-~eYV<+=+k4MZAwqu#B<3^6cT@nFh*=y#_;MscV_umf{G9H@7x17oo>*+Z?AgdFS>9}#D z%x_K9)L_ol#1H2P%K8!zWV9!&krVw3 z;IQsVz|~JemJpWLhN!928*V?qq}yFJ=^nq+8~Cc?NP!4kyQ0(@JNPpjy{#MqH6XquMXjDDZb3#Y7q@UDDuVfe9jRq-u;A!N=+8*$T?&h%Pn!Rq%Ccf{AG?kE z%QPm34N2S{ufhvW+@AKi$;@=motsE-tsb#l^~dk{+vB`^?y#QUSv|?7!%cmGesTFe~$Pm&WfCm*NW}J52fV911Mo_yYYpPDb1-g7 z%Z7NzN1H8o!=GYrLc7Em(NslTHKdabHt;+$6tMZx>S_F1IJr?z{dB(5GO872$ zVm{|ZG{#x;6fA&B9@Id|k`wLWp}u#TPD~iG3&{b;QcRCaDC9k#?wS7I^(_Zelz!hq ze?@Hm)2uxzgVS=-+sl>FG;=9o)J4C>fnLU9p}tF^jc#y};=u%=OQL>>oMQgP&c{Vo za+gHeX(m{S94Pzt^MmQzGr?AR}|rZ^|cPBFpIav;RTlU^Ka8dgID*$-no7Pcj7Tg(@9N@2ZQ!$O+b@#Zj7 zE6dLjZRITwoL%*!%r_ejrm`ob6&0AR(CbgotKtzZml)>daFJ3CJ~^y=Vh~C1>9|od zwxzWJKoHnl-@P5&7W|<793;~ea^(dJg7B$Mw0KHMkj;z_A38A0sla9Shhn!EQuF>r z8D~6;LxWMHXZq4e?Gn$LQNH%Tt+>4AL-+4GN&`B6se8(hGx)!qUh%r!D0-9=QEn$c zT_Was60ibT0F43Qn<< z0qec7pP#$q0CqFZ@WRNhLkdMJbr2K)*0dm@bNjVR0Y@f>&HaJ+C1NHssXcH zSW>FGfj~$J_;xSV**j#DD9eL(T2*#PIM50km}@*m7?@Sz;}_phAvQ9l)Mc6VYzk%_ zb2s=Zha4&T6P(sQOzoQL9fInEo71_&ddhFslsGBkO+38MQJedaP6*zVr=#Yr;oM$o z%*bq;9OVQ=3F^jB2P_@~2gAGi#sX|qn=niU83A75i4B-ZbNfT6h?H+RDte9bM-mspO8jBQG(p}R7Ne<&3u6wPOu>&q`a7o{M zJXkp2`v!+|aC3W_^rT)Cbr>>F`6k3*HM2aB%RXFGkEkbsw)Dcw_ZAJP+ zr1-gdf}3g>yC!319#}|JC?7o}WLLL1OUYk?zs%EX|Km}@fSG%f6v!G?@*rpQspV5EUQ znf_4$inz<<4^o|h#Rm#nuwYa>uxi$dGR<73R|w$Y@3=rm={Axf>iDkKz4f!)n`zH93?@FPxtqK!vbQ`RZqN==5X4hHqj&>P zm*Pw|jTgPEAV%8-wnL0zp2DTN0vt4kd*sXZEXL-rRHA39r>Q6ML<%%C22#mIC80%# z1p1|72)9G6o7(9af8;84Xp;|qU+w?z$-Ao;Ta*asB2{hhPI-)f|iOb`QRj3mZ zs7jD+|I3;i>jbA5^J(4s4=6W)=7Qn45%o=g3Im$f?2@8Z{%}gp&vp}&Og`DNdfTj2 zLVhkhBBa&h7i%wxX+7*Z>piNbe;n+p%J8$EUzK43ma`2zYUa%p=@MQcTKz?nj zeqh`74G%M%T!Df(#;QXCjZ1Fj^>EP|%@YF!!H7K-T3Y-jnwd`;Q9C9;0}bY3%i(1L zXNd<8_ci3zK=~+{@9v`T&>yO@;GA*0-L6B0E-_}PW=Jubxp9V+LHRkQmaYf#?{Vc} z{L>mLpIyxPEb5&DaQZxCnd`_}cDyW>=yhFrYl^=EG7 zbl+@PsAQG{IOvjv`&9T%{f3KM$L)#;eEIKB+5~6bGr}3ab4jcEw&K0!Y#QQ(H#2OT zZN}*RO*&Wkj9>tf=a*z{GAWS0OKa9iC5s1a3KVZ3pTL%4*`hk7GXo+?CPzKf@LUk; z#KsE34FTRAQnxf^4hbnSAV>otZ7j4a1O6=$>oB!tq+cUZ2+&UpbtQ@GB<9RfAB{nt zOM`&D#*B#}6}VV1EJibKm-JK{RXa`~)iaZM+LE5Lo|{@bNNVV+M1gr^AniSt z#zM}~ytui8Sy=HmGU(oOcM=oH&eA4no@|rW${pB%vsT{fZQs3}uBi^dBQp;m8fqB$ zOFE}_EVNqVmQ$FenL9V)v!5WH9`CzFlim~;@9ouYKoGi}nWkL3gDTS-XtV-`ZzCj* z9)y8P4Src8axO%>NHv#|&j@^6COHwV7m5v^>dl>NQ*Cy!S4j@9`FaMmb4)+S`4*?{ zdCLyIK>=HobirC&X02ENUhToer{RRB!gbD{M}!CDL~<2AtO6!IE=MQ*F!HV%If)@R zHz+hvn-L`(QFa>yALM~~*3khxQQ7>^vW*-K)pz+VO zK?34i!}ViLmF5z^nj{@n`QwO@!ECwflCUnJwPr}hp8j%V;iqPANv6Kbz(c5ALmq%g z^s#WOfM;%w4x`>jo=0!f&3$jk${37!d_ST70QEHta|fxpJ6V5Btt7^K3d~`(K(a9R zsJY(I1R$|=w)7xGeZO%cyh6+7jIP}?YU?@uXNoD z(+^gFc|QNO@@9$}qp{GasCTQVho?{(Gj}W`t5(-K2(AiWpQo|d`*!R`#GeUeNf{T0S2 zMmMM@ar%2W{P~T3$>WSyQoxp>ysNsz+d@yt321*cN~!DxwG%K`2M}6}>21un1Ti#V zsS^$EFw(EC#v(VxbGZ9_L=m}=8DCy_3qwG8nk`-8d@9UlF2XoCZ)-JB+iFgWqN{CW zT!Xz5?NT z4#>9TBCc6RAcoGeV#jsu?WGIt`kn7qdpf9GO$5LGOjkcdycRpY_pE_Wm_# zIjuGLR`W~GSNQ{T@x!j8bR3_Pm2)=Im7jOD+}y+3hT6Y{UZQoLMr03CWdz7vGp(8^ zpgYL4OM3Z?$GEdKvwe`1xJ$=xx{jZr%g@Nq(bUqVp>-c@86WWPLEoe^dcWaQS49H- zvK`kUGWRI_29hK@=2_J~+LU$Bl;xg2m)4PZ0s|xUf5it_#}uoNy6xrgu6OUZbn^Je zh{FzTsr?nUa5>8>zhB%&(R=3%6D2sX2J*w$=?qh^s7hjZNaez?4TWo9qM=(9e~f9t zb-qh8ql04f9(6MY0xE@?#W+i~`&FT#@m%eiT$GrPV5C2Ib>^4vCOUOaY9U{iQZwMg zu097j5ylU2V^yU}x8=yDVMOw6Y^0~TH|@w~gcz+ixzO9&`l_^-?J8^ob6}-T&!OrJ z&K@{!ekhkKQ(?>)leOs_6AA|UniTSy1M)WlzzF@cP0+LdOJk+{D8(7b8DNeaH)=pV zOerzgO|pCD<^i*Z8)p6Rc)zEXf)*5Dhd8GL{v(X|=C)v17GJ#zueCOa3-l7|zfuUz zOeo0H6d3%7F=-~?s5>MGH%H=3_uB=CWcqy1^mX`DX9QlNH@KQr$dIplzHa#*)cB>8 z{+-lRJuPyMzN=six6GCWb!YP-Uz;pw~=yQFP0mcBvoidPmVx^5q#@O#^vZp@w1);Qy zlee1!MWB)*k)WmzaH@vM=9FC`o#}y(iU)DpGOSahPa?qiKc7hV!O;d9jL!O82)Dij zMi~fal^-ZgpKGpSd0za}`>R`4E6cmJQthPv?!X}C7eFajT5xf4fC5@fzSS@1sqOdQ zxCWAw?aM$9+?^^j6goC=5CwSEI33@AD+D?PfO}%i{Nuu89*#_|zEvE3m(LPPACq06 zwT*SK6`-%HH5l-X-ZRN+xiQU#t!1xROqKR6)sG zbY6S!jM`KPp*B%VV}IRJvwFW|J$*7yMBE!!cN<8;Lutfk?BgM5&~-l>w?Kq%J=OBB%~&Tr zSkv-jjFo-J_8$BCOJ@%wsoKGbhzSJ+2w)t#sqoN2pfyKgv4(Yyei55kWy_}wme$VX z9w&rdp4pokdp#ma4S-Hw*aTA5Ehok96d>=qA}MI1=53YeB^T2#tFXm5*9#bcWQdm z#oCT*gn#1G$2vm>4e59kA?gRf?QG%RW4i z+&ai9f!eWkkWx;?d%*t1#+tqm9MjCMG4}|NYR-{ai!ypFK_@pM{&GwpcpVxfyM6Ma zNv0jvLQh)93~al^A_|KUBEbIT_OsF~B1$ zvkhm)N12pNkG{oQRGRqCwUw$E`PNbVK1CtvJzZU1vL{MwdJAzDe;!iY!wdUt;{##Q znr4gkA$a*Q4!D%fix({SfWP~noA>EBgn4&%g87}ij}*qvN^@g}E$X`C1^yN~{9rrY z`ty(F)cwllhubKxs9bwwz1qaD4(nq%#t1H@aJ-)0U8p0G%AScxbAbeh@Ck}=NJxG9o(u`a;Q$PR9 zaPs4SY1Jb@rET&`VVwN6K1C?A_IR@NOBb?iuaJ;$#3fIO^DD9m_nG2~vc{wDk8!v? zkR!Iw7PNh~@w%89MO?A4$Z2ygCO3?vsN}wkBa86P425urkIvk4J?~+)@c+KteWpEw z#uBEBJXO@ux}Wy4VZ2#ta}Ykmx4f(T&LZ78pz1laTf%K=KWg%Yf{ym-yd)^<3xazrJ%Hw{>H^GOMzgEzKBA>k_XPx11>gf>h>nzc~ z&>K}K(0BmRx%m;DJNc|F_|P>U(SG^NF|QE(c4S{DMtmy|M|VgomE>#k7(R$yh?K@+ zufNNgJYoLnz3}*?@0Z-yEb{bJc{eM+ppK{Z_we58zxyRsZjnSYL#CAYOFx~;UgzP0 zemH+)PXSeUVdg^u#pm13|KScz$6DjQK9{KF3)Q24njJs3-``oNtTZ}T3DT>9Hw;La zJ+#}ZFs``?$u^GBc^6+Mw14+;6tUwfJ;HS}NF9BV&ZEJ4s1#@I$x z$ee85|Jq<{f@8=B9PY|ES5OZFlHTA6XWlez;P?gv79LA)XfQtr;d zc)fD@9KTl|n)0R^H3uHE{j$?^Sz#;SxSsl*CP%$yOdMOH!^py}h}#cgK6^i~N)^=Z zlz-2ZhwXvSQK1CMI`SFs@|P$78T=hc6khEpVT>!$pNsbK0+bMj_rW{Q}S zPVkqjmN#lY1&#$@X}S@lqb3EMUdO%lMt9(MlAWS`>~vP<_qzY1to)eWahtpw`d&YB zk;YeO!r9&dDi~?3`}9Axb7kNH3^c|MhvyxF2;>;NWZka4mtP=L6H_-_ph`IAy3iKei>@6z2b$A1w`k;zr9jmy0JcSYULdvc#o z%=Y^{NRwOYGvY!_4m`2!9nQ^Os5FvBtp8Tut7nAb3 zf%!37c{8{(Kk^YZmMos`E>C2-U*wOg&5b7ge&gNWKP2Y*$ba3zuVh^I^!!R43OQ=y z?vEV14UUWM}9LvE(@@1x+zdD?}mFo`YD{)Mu} zyEuqR>X-Ni>Ev#nz^@jsW5hBt2wKST{!@B;R=~8m|FBN;VDj-}3bJ?4)ebhs1AJZY z<{VZS3;XSBjE}^uyY(6l1bE5iUlTI9=l#Y!qEbE*KJ$9wQY_z8ed8Q>ML_((TR~XF zS`}w(Iaty!PD|lG?OlJV`R>Pr7QIlHSM7H}Ge&~Asa>lxl9B}7;%<}vj3~SzM83AO zu-J#4kSg&U!=yS3MZ1qu;jHq`JK%7dw;b~y;^C5B>E9(yyvE9IuRU$hKatMx+Jff= ztKr|Sc^I_>C0-!Pe(M=b^tZmsSf+FwQ~F1$6!tEQk_rz*r`yj~}bcR_>s=kA*2k`gPF%}nZ7 z_uVTGH_KiqgKt|uXAu=Ky>8>?>eZ{A5lNCdiWsyD^O-(TR^{9$Y{+T8Be@4620gSA zQU2X;I&&0-x~y0se01g(8{(x*qvf>@{sF!7^L3c(cq^|GMEyyOg7JaD4R6Key@%`L z&ReI7n02!Z6_aee@X296QOl?fnK*r=bdrax4)=AZ5|@fMzsJ@;-7Y(TMN$x-&foZ2 z8h#9hHE2_(N5+4SCUur#-1HI&VRW0KxrEXEJQRGPeW7jviCH}AS1;F2vhd8Uc?4X6 zhJx;=8hePvcm4N8W~vUQaw+$2s7N|4v)(2CK~CFRWA1%EOlONAn0eWJ`IRTz?dVCo zV3HfHC4Sz$s;;yL%-7Fe^mG3qNa#h+>R|L}US*3cJ}*pU4_tiq@MhidJ7(S~nyEpr z#`^EhJ=?ei3h{;Hi`??Ejhh^wPkt}hanKDh^ z#8cM=I8LmZU#sm|sAPXWoEH4aU2Ua;la;zhmiBe&HR@`<*fraR%ejwR+53^Cm=hQmvLzE=5zpTQO+5H&7hHVSug9lV@{ZsAbs=6l z)Fp+tIBM$Aqo;Cj)V>VLbIf!2ZWa=4Gu=~EPoZJPx9vYQ`x%m)_aJJD@+(8dX4oyo zKI+F~#h>~ICe`@U!H`rYN%*G0!|~P(+U%Ff^M4=}qrJYEqX*YcI?V4lx(1j(+-F=C z;*cu3xp+~*MC`3a=<%qUThxYhM;5OoaP-g9XJt=g{ATbDZNJ#rZHG^G%;EnlF!Y+w z`|WR2&BaFGX2fFLMs_?&50oE$5|UJs|M;)KEiHS2$%Q7Lt=L;er}S{vimc~p5Oi_K zTr8S=3smrm>>*jywqmGk(U7#=&V36CwVDe(hD0+H!PS+-(bRmNsAWH@61B(|%Q5=# zcD$;l4}LGcxQ-(Y$b4jG?V*#o`MNd2a;EFXI}GVelWAx5*WI3 zC1-m{ZqBb5;rOS0ve|i!Q3>zAun)e*qmeT1339JfM5T^SeT#pfuc zq)P=Ae$B&VM;)b1@zyW9N;YO9=F!qW{x+x8+md;_3G~vs5S`0CsUP;rPeCUhK6s2r zPIF<@b;_Dt0jK{MFW~gk{a0I7{>NcD_sdYC%yI#n`}JY&j6QM&$j8MLDg#OlAp@7- zmOl2W*}G?+4_g;!abQBd5b*4g>aUK~dCm`09eyk?B1b=yhX1#%`u3H_e0fP35lK_( zo3|;eZ<nRhzm#Ev%I`0;nQ-{WZ_{y0> zM}$()-SM+)I=r&ZL7)5Th@gjDUIVGFQg&xzw?jfrdaQ^W%j&^R^I}6{8)Lqbk|uRx zyU%!9Cc57XzuC#F#DfouA}8H0Dbj5$KUsTCqXtu=dBXPgSH7FtRxntgh5my z6rp=K{<16Q1$Cuv*_z`rKDp>Xi5e_L;Zibjry8${lBNd%Vs>Y?N!#A+I2oH$M`oPr zGN3Sik*$;&YP|lhemLd7{aj00K&dX$UB>*OjzH1vOj!T9TD5~>vslEJ6dqbo4!&yM zp{(v?fzLl-KYBd=A9*wVV?q+If{?9He@2$?f6Xo)aHRJBY^U=gPtQZI8-EWThpfF? z8>!l<@v82Pa{l3s8_Re}8ZG}yaYIlk&s4u$Xohq?TPR0iZs+P-Hj6HvfP=PsL_SB* zrR?Q(MChA~R&zx9{^!px4(k}MDA;^#+qj-DHf+2;Sp24R_#r;#_QfQ)SZ%<}yTV%S zxlTE644*gcJUohM0lHs!!RjCyc49(=dXY(k9*j_!Cr)Oa5aI0CdVQuqqx0y%?llRB zet=x!+oJzndrz7Q{NB>pQa}s;9ojgh|-%N34Mv%EbfDu`>elTP3_oc-nmScBy}A0WHU3@ zCEG^Hepk+&G=(en4$yv3{>JB_C&sMqGSF*EQ@PpZB({k59MN4Cd(|W<$8;i>OFx{+ zOY>eg1Vy&}m=qmUc0uO-N^$#SUi1-+@!yHpiZ07@Du+uO$#%NNh3g&t-*j6PvA(+2 zUgWBNEYD}jzaEKBI+V}-o*AVc^HrF{vx|>G<;RfX}G*Q+jWmlSt4T z>TXEpp(&49$var!mHSP!Y14Yj}X@`od z|AX5pb-*+k@?;)9XV9_=b=ICHJ#+8Om8`K9xk{H@QWqiK)F z1)QBJYe(UlsCia|Rtq>p^mDv?FBWXKU2 zN5jZUp%&<4G4t(PVc5V!BJWRKoI5*WO>YUU9=-Xqr8HW8c16>m_5H{Fc->U!P6 zU{vTia|sd0LvfrvjVUB=n0Zev;pAJVYLTE{Wv*whPF`PmJ*}(YTpaRn{p{Wcy{9aH zde6NU4(`2vDf|9t2zt1@DgW&qL0!zEvnrxj69xV9#Hcg)Wa?OC{*t86EQRWomtTmZ zA%kSOVT=ebxO=Cu*3oSuKggAWY4bT3VwC`Y`oTY&pE<+wUw!PEckP(Dex`p}@eBW9 z>x_Ncyuo)!C{)5|mdr7wpCN7Xs_l8V(&{~TKUQ;h=!G8AmyPe!K1?fR%Z%UPSIB5- zPTlk1oSo894W(BL?J<*q|5X_5ygoH?Qjxhzx~~KJd35{WiJ5JLeAG+p@K~;fX0#r49i#L=#B2392-{|?Na*wcm`ts{r$;zt>D#!>U$*;Z#Kfw z7H_->$?*r%#8y9F5cTV_u(P~W(y{s6HxgzIk78;U$%oFZx_qfhFng4K{wqWL9qo%i zNm;XnxxOE}NmhkDieZ$M@5?sxCeoiuGg^+E7Ak-ZMgPlBRPKVS#n9uKJdF=FR?GG} zrmO09BBNm){a~(Y6JE{LF0&>3>g#Zs|I^j~5O>CSpI@4(x(VHTL@p>&o#bjjHC=jF zCim`Ps-m1Z#F)U)>x<`ZWc7pNHaf0%(%B?<9kShh+~6AJM%a5+$oC!|d`$&0^EEr6 z_hgRUYVZHefbVoZckZO$JbdESu3lM7Mx8cP>K<>=PwS`|eWPV?z54yTU@)nE$n$`; z#Y8H0_mPA+(DXf~Ko-$&q&Fq+eidp<`d4%bOvvR^8G6005T0K__WCfl9;$-mtS4FD zmvP)tun;#q<^S6skZvxNA@PB{mKXHda_Tgwzj}gv|2>24bHx*p zRG&%j9as!^ADaEFlBp1^EIfSTzdzXah)l-txQ`Do)B0E_Fd2UBAUIq8)l~b$e%S${ zGGh2iDUqG92mfKz%-*T7wo3Pi54^NHoz2_x4W1Ok#-H;AM91U0>*Ug3<2A}wg?Uts zWK}=j?!QdWo8PK@Sb$w=U*7WBR3H6w zI=JBX;GS9LFZ%mI<7I@_&i|IjZt!nkpAvf6mvDY0|EiJyoz`0xk)MJwnlMR<0%=aj zdOXUeAg=gG)6!mrJ=Avyj}^rq4?X@GLL#X0nYYf7m?)CKvkl_1JJKX0 zrMc^5?NbX=Ioz3xEDqYLdrbQrq5z`_qOeorz_)E#yI?#6f*~Z$7pMrl|8IyB~y&HLdDEGGN__11(6Q0?=>BfI{_HY%U zrF+TWH+8!gy~hQQL3eJR1&=OLS>ezh5z41@3!LzuZdwJ1CXG-hW$oX2^wAMSh@!O_ zjRyiVPda%_cu4;TJ3z$0OUuSf?;2JtKvNZ+(=%inIO&Dp)Kwd6(!+Obv$jF_*q5fu zWMUT$nXi496%+6(IriYQUfpgUhV-J(e_* zPu3qzX;5P5)!o2G@*u>ptp>~C#{;oVmfGPh5)*8G4V~gUCahNE!IyE%?)*2O#6W7a z8iu}s`Urk+^i+w63E@*7urzmQhz3yuH$#Ktk8&>lFJSI{>GB0=2H>1yG!zWD%r934 zHRs?(euaAG3#b5zA8nnWJls#?O)y*lIxs9*?0j7<5|mXlodA9RJdS_T9wzt}YS%4@ zTX}n~7k-l$8D1#!n-xIUk)C-Gf*>15X9>gZ(S#@F!u(Ds0?7IP{n26KlkacNuEluJG@JBrcb<2P?f!7XNr`U~YAf%F#m+Xd9#3BnS_gSEvak@tBsIX1HZW zIhv(SuVXHa=Z>&hQ5cB}u;1--8F3cGNy%~hF2P}U%4M4+RxXhH<_ve&L$)m7GWz3I zod;f5J?PysYeLssyNYF2XH3{ zh%5Rf`0@cTYi8<2ROoglXg?TUi}v6jAINh1$o105`&-ttpH!8(#gO?3G6yBGP!$S!GaqH^|JA8xvEJ> z5V2MP#ez=4i73iG=W&7_b9cGn45&<2Ex`hfLSF=dH%5R5GM9olF39h^*7(&eh2Y=c znKG`2pXhTIF*`xj6|uOTP!xnQKb~}AxmGDw++!z^)dBUAV1U^qA;$~vg zPEoQLgI=h)`Xu2yaK7Ia2WGufGU}pIn<@TK$Z=}zZGc~6;hQMY2(1hVTFd)hz==eQ zmNILI`;Z3{IPkn3;L)^b@}!4CC5$Ia%-KaWu>Kw- z_GDPG82G>cW#8f1WjpsTpjXlH0xroL%W6Rd7mMnU?+tAGrob!xX6SH|kVYVhVf-G{ zP7I9Bw22)JQI&~XoQOlN?pl-Z#d{2ort`+~Q)^jCxS0!SyZ-=;2;pT+_N?+wH)ldE z9S7M{t6m{OAysflVC~c`)|SNlG269Ic5Q|Q1KeN_6j-e)u>(@EKcM@My2d$*M2b(S zUv{hquMWOS4?dr&1$>vF+4o$HOT1dLSvuedo|4Km#n|#wrZFp2FTsW+ABGL1+DKUG z-FyKlBmHVzvQ&w*0H1@Ny>!4gPtfL3m+Yo(=8RW@Fky!?!|Xe+HO$2g$D~HYYb$rn zQPv-=^bx|PCB!*NahoUZv`l(67zqJ)76Aon-dy8{OnYXFI64o`iu5z_E_9R2gguZj z#gCdgt67Kco1!QM2<&jZ(Ev4R%^5*{a0 z5lXV}X(x>HJ<;Ud+NJ&~$JG7^r#dfK! z>Du{erQvfck*!0`(F6=&&3A&}UAIq|N3GT&BI{Ii}nM+FZ5;T94(k&4KFwOAsH z@yDR3lDq<;i5!!GVGte~9LGkuB?VNwqOZ5`+z4H? zfmM9GQQ|29Vixt>>U!kHt3hgv$iD%z@9G00N`=TE^euiaV8gYu(9YCag?8k%*kdwA z1T4o}TB`j>=d(XqVS_+}$jFyp*&C$@5=4enfvr(7oLYyW^sPG!u$NCukOTr!OGI5k zq;&a$G1!?c4KU90;D(L1BGoRPErmG5aMK$e?RxBwJO7}2v;h)!2GU=D8yFnQ=J@nx zZ-q*hz|VcD9j+4PM@-vP;>EtWWxOyd>J?z&T^SI^W!z#u7&X}wzEzbYZHcw)NpV6?Lc9h_d0u> zarW&HI$QM9uC3%8gki@B^iKIX`wdUPFAgY}qIr`+nP0ZGjuunO$1Acv6(vqud8_y< zO$uca3#SGOKOi?5TL7dZu|kQ;@m0J5)LVvilh|4grN?c{9VuI0_wr&(A%~|)Zl?kZ zFBVHG`SFH1eNrUPMaQJGIUW#hO2T@Nl%}IhR)YwU=)vISHfB`Jpz(Tw+$nC$1Ksel<_|P#_wBPHr*a81+xUS; ztzliI0a?MbX2B{Bw*^mW8Q|g-Ml86)X`BS%RjQl0#VHRagS01W%GMz-*~zF&eRDyw z)=>#K!#T+sRDj!%As{2wNIfy~-Otk#RptlX1{W)pkg>Y#yNg5*UvC42H>MhIQ1!b%Yf~3KlgyVd7*_e(Kck6 zuR^cw$9gdC?{jT`N6*3 zM}LCXxeeBx;j>&Aj`U|zeok7yx7XnAFi{5_zS;ViCD02~IV{(mCZ{`HqAk5Q%CtJI zT;rHoJG*6_+Aa8%+t8#1nQ%dghyv5}qH+KGt1JptV>BgT62UwMpID z+88p|gYYF_G=K*CRMvx|FS}zqsB-9p!ZMA6R@Sje!NWAUXz6zmz1dOdIFVhmTfovr9`Few$1bM6!NRu@MISJa&A8gE<*!|IZ{Jt_S z?6B8|nE_C3712xZ3BMr<(%08%zUM0RM9>tYQ~)~-I(NC$2?_GWc|z^3uk(#b2y57-Y+r96aF z11gtlIv5B&vhd*50l{eDMD5Vz=+3?oyBjf`jjjd(d{7>Z8U9g-pJwo968&&+&s#1O z4wZqDJ$TkIQljtowB^k+ymM%2OIi8bxMa`A0pN&Yht-IXLfc6xnXw!nVgQSx0KX@g z<*a_1c_#~2SF3kpI*RVQ8oZDxBmf244VZ{4Q^7XL4+gN60MbuVxp8=qR^g3B;vSI- zYeA8d+`d#8(hsp+h%mQND7GsYFGwLx479-+jV5#@q%rqAX{g~OlSTXr&1@FY2@(Nt za)8&u>Tab8?f|JAP;hz5L*FugG58$EE!Ba%A$Nf0F(*R^GG#Ty0SF3V(CiT`W?|vR zv?TTF^TLEXgOY0Gj9L=MMTi_h&{tnQ8|EuhS2KWk`CdOPm#A(m;{5RH8Y~8ddhmkm z^g5w<@=Gk%HV1j`)cdI>YUAAd>3v<)rEvne*}y7Y`5OWC-t(v|hE^!0WQ0C*ain0 zN;L67>7+?M9uoqZX6OVBsa%%vWcCP8pzlfawW?qo<=Ujb4^8e&Z_(O(f&gds;27$( z0j9>ld}=m1cyR497Yg@RVcZ?*++W=>kcvu%)|}KpJCmCDOK1F#+Rmu+KWa25tzJ4( z=T`|xh=Q;^G^dclIeqLT7GcSnDDEcHtqiiA=*AW1Cy&1$Gm5Y9HNdiK(+mTul*Rye zR(3d=tJ-_&yPgKk>Rp65qzUoFP~1j%$28)Pi;lBe<1HmZyl)hBjSUdp#_}#nm5^3E z|AUf=zJ_)(;dfSEXtz<;rH3o5z~BuiQLiw0xXB{)zY7xLu{^da!=D<|z*`Z4anN9+_p0~|m# z_Me((Fvr8pE^jn5A>Ue-)Df6)U@nuY&rs3xLQ*PFn0=&y`@Xb*$r+-$VC%u6+ zOPETZu&5!Ut3??LmE-{52Xa+CFjic?Ij+7Z#QuX;0_)6V94BP2Q+G)j^7R2@jgYb& z^>QGglXb)wp>JAG5;z$;IMF`C*h5loXZYN&SIR_~-gXG>KRjvxWk4a?a=loA0Z*7j$XfJ96`7 zB61~j$$bJSayEicG0>WaFX~)m$F=Ex`HF}0!a`kIw2D~zOn*DuqGCO$C1%VYV7?Fk zR}JpJ8?;39O6b~~0N$X{P~H^eR`Fa`X$DIrk1mVvBUOtU4kZ)5(2zH$2KTbN4Qxt7 zN6ZKhL1;|>xRpZXVOU8LbvIV}2~YGK`bP3Axk~#Ni+$1gy2>rSPx^{imr|fFcjgY6 zH?BlK7NlWsUDPK*Kk%nqjm4gSMN5?@8mat7Lz9%L-Mp3`z;?=hH#FpSykFSuJ4$an zaJHXNUT7lYLCTo*ND*M_>nSq9p^xFa$Qx@wmfzULXiYXNT!Js&si&G72*DT+a6?@b zL}Z#0jKdQ3`$1Gxc#!L&2LmI#Zt6zheBDI@bE_5Dqsu+RE|9Q${b6Ng)02IR3jE9% zbXU(gNl)kXU1HHpYXKOli@eZqv5UHn3RfuQOGqF^i_epQe;;QeH?Rhxm*MTd)~ zfF7AIA8)l0q~+pbnXbM|5;z^4-%~iUkUrq9RO^5=>TOBE+lSP1H#(Ev7O^HRJ~0}q z8mx6V3=gon1N;ctQ24oR0wACSc)_-Rx(8kV8J+(hI2u%`e{L(%A9tjUp$`}rdfwBERXq2v+<=(%!QznAM z&7;3Ce_(v3`UT;F~2qfLUP0txM!+jB8KyF-EPs{`OQ6tBdb7#dK!Cs=qQ%RBu~0IYyBPjWT#jZ0X0+Vb z1rarAVxZEBQ`j*a3WJQN>}4Y7kB%9lNmh~dX#jCyNE!&b<6WCtOA+;~k)za}Bfi{C zyGG>gcsxEV0533O>yL%Mz%DtJ@(ZPC@x=_|0&g1@G#Tht!{V5GsmCFgQxgf^WRwI6 zWS&qe>k;mLJIpaOwAXhXyg=!08_mJ05txZSbhX>l4DGh!bXmgJ&3Ej|udyS+gCZKK zL1{F$t{|u+%iQ7bI)ajqU7k_*Bp<`(s>OHGh7XXBeF@46xd;!C{eV@jAfBn~NP;Kg z%mWVzspibn_->r~DwK%ArC=5r4EG|qRD6Wqh1eoog$~yBmQ)sZ z@Xb_dpIAkmZ)fJ+OR+!uy=}X<@W_FhMMz6_jPpkFendN25a)L@$&})RB*+6QDj>lY zGpY|o9z6(Vi}kh-rD}FsMP8ZZKw#Yn9CI&sX%k-0&c&)6m)zLSRBuy%6*MM={3Xjf z_-IB)y&ohEoD!<*K|XLRz8cHAn!A{Df8a`~ZVz*od%2`(Sq3i05B)xg`dkGDYoTzLda4 zAv8^HXm~z;2DD2|EZ_!;j!MA_ESyo!SNrg1l5LFhsvZ<58X;obp{u-YbV}W`59K>IbfR&KttxK@w#H`PCEK*Xo1cqh zT#m0?)@~6ag_a<3N0*v4~kM z)K}3Y+4!XOcz;=NRQQkSsLm;f^euZottkIJ20=y(wL>sg&E0~Ge3i`ca~Gd0mBWQC zdqxy#O=141`###>>hPd%Mvl)>E6y6e|!GO=I@P6t`FSbu`0zc}d9 z-~LV+UyDHZAC#nQZwU{%Y)=LG3sa{7u17)VI4#H}&8N|mBZ{wW=U3%ONh_m-vGaqr z6Q5l-lx%1Wku|D^0m3YL65R(Gb(C6&Ikcj4EKRs4S{+FL7_30vXeh{7_fLdo%-#cU z6LMTHr~wT{J^BxVN!hUlOB%2NZ>tsyHZzrxPWQLfAAl7xP|hSD(dq|88exM#L3p?K zaFz32oQ{Pz%~RQz&Dj&3%yiWt9+-J;&3v>@eH%Zpm?3D#E#6v-af8zIA>t=$4c_@R zj0gIC>eT)qJUF8XSoiz+yT&;#?6GIGkUQwC2iLn3KvyUqRBW-#FZ)Vg%ohyUIr3mz zB3K=FT{C9=9lBpTBmAaI@e*>BZv_ZWv&7!lF^4fqkcfb*M>*m-AT~_a}-g}|F$wJ}n2T6NEYYEaBi#(st3W$2SdtAT&u+yE)2t#{jYQoGk(`@Uot-5wN z11FFAu(mRG?wT2pHUu?|A}A#-1iI8O{cv~}guev9yW9a*0EU``Zg$19JtH;60aPM! zk}IbF@Wo_%e}+Hg|9##G7nH+S71N+hrJd(1ng?Yg8#jOJ5>euLk$%XpbPFfhN7ANxuk3YyNGY;Kd@bp4DLI3 zl&QyndzsvtdgRMq@*j1nTWhV*OWH}yszwYSUpV{wh2SEi=+_&cvlsLaprKZW-0S=ysl9hT}9l zloQ#=#uOr?QL+<+f&^M^AR;)(f0aDT^6-9relhvk>D$pVSe2%K1j)3uFGfX(=2|pmSS1S;arvv$&u=r;vK&s!I<0Z+ADOf=8 zFIiOZeYy2fA;nV2q}#(n`n=k8JapO_$Ov+Ua$Adxi>Ffs`WWgDbCP!d!!>XSJ(w3& zls~`W<)yr_$>T-*kVZ(tEtpu`IIx)SJ7%GoT8UXOYV$~rZA!nOx8brulM@JN{m|N6 zpE@=PpyfOl!;MSjL_zM_a~#CFcA%Q`ZS~keAwV}m&$5v=JnJJ*pp&(2EsE-_!>nMs zc>?|09}f%^IsqaDb8!8A7YZ{u%|wo%twPlVaC?Fa?=E;-sSD_H3m!y&p>Lp|X~{jS zl7k5Jrl_AGI>l=rj=LXh;BpNBFbnf%&5~2f>zNJ)64w_1AAOc{R4yUNaNfJY1UdlpNj`Sa>@aG@! zyShCc9rOKgWj+a71pXY@Mt-#$>eF=T<8s+w&YyO2^f-q(aSaqnSgh%FxLg{rA#Ly{ z75THDs3c|-zr>DG5WA~J5inJGI2a7{iD7}|p48~nnncCZ!>m)5qmU**u{x*oh% z3`9}O9*+VFF^qDc7vIAJ-u0)~a|3?)*wylg?cGK5I^q>UFE}XB2ZO!Hr3%4NyQpSy zxHBTWh=LjV#slc?hgfZIV#SZa{{E$1aFu1iVFYSM5~w?n{E5p@Vsfl~do5>@wfJj* zQG^d2-90@EF~QGqk_IK4K2iBm8}ondAOR48enjFisT(kR6rXlQunlNlae3oM3{`SD z<6%CJ;o)xc9>RrT4_oJ0W(q>GdjPI;kl)RBiA((Q?DAM_fBM4!m%P+yb)iRI02EC# zJ@G1LErHa>lhJa6F<(Ea@%Vgi$;Xg8f8;;4@k*M$eIV>gyh1d zPxW1^E_ye7TzxuMA3TzmCq=)q@GPCDw=c`?1{wodj#(qwKvV0nu1H9w<&?-*hVcpx zDCPG7U@J8MXD&pe0c_jOJa{n3t27t`bp0=CLtkjBW&tizUbt~NJ;7jPo^epcf4lc{ z=1k6qYZlh;LiCJ*%89GS4Ah{H$e)-H8JPxO`JnhHC?5!>XDga$<7nqaW|(NDmwkpA zdLJcyxnTYzP^qVvS`ezwNQho7cXWf|i(ECZDle}~lG*H=_gP&gUV+z|D!uE&>pV+a zt6XP`FcMJsjSbprbCx;OOrL<8_Uy>)er&hZ!(#38Jgg&?W`2VwoRf4Xa7~G(X4?;V+Vz z9|`Bj;)yCoU`%wuinfD@^)I4BhFh<%rmOrAc?VmRzG3Zf=^+j-OBU}&8l#s1ANrpl zbMyNnhbv|{Gq@7!blwslPQ($_KUXV&Xc>phkPuM0^AQ!GGCH^gWC<3hkhb?cnjZB| zRAF5sXO0j2tI$(p@723@5e{d>Hw$9A#73ZG?tw3sazw?PWQ8TnSath~uy{f=m70ko ztuha|2O&4KJtv^ZA2Js56Z$muq#G~gs}0v5_>J^NPk=-(vGr}uydNf-dcmTOW87pD zuS?4NtSgx1CKE2a57KVVn4hk*eH~0p5Z7|TPzSQI7*E_G!`|=fppHf6J2Al^3emo| zIuV(0!}P>c554hX=k&pSHsEv>4`usFY~Lh4-<19fl26bK5;;%!clIO`I?fwBsPrEUoL-wA@mga3Z>8KsRBC=fX$8APko zULAcgd**ET4;x%gKmP;d4Ph?liMy41oK54V`U){?(phG+b--h zDb=Zbg}YmgmlaQv+p?ktM3rVNSbwR7U^RK+k^pQ+(_`oWPByyw%>uR!WdiN71{9acA+=#J#-B)%@ zD7vC0D4LMw17r+vFD#7gypKmWGOZ3vg}idKK#E5l8@vhRqr>K~iX8`P>&~M*EU95G zq&L&~K3F^qVM&OOB$gvH6JPiYLFQHF>uYS%rdI~bM(xxee!Xfkbf%a=9+BN{YDhjy zknTeSFyik+_fwtPA-&Tn30q*Yt9Mrhzofyz+ZnjMS!4(mI(Q#2$<*|M^zKK@QJBOrPr+Nuk)!9~Y71L>roPstV+qKd^)#k?;Do-vGgkewrxUMn1cpvufy790R;;=rNLSl(;W!Dt`T4q*30f=)X&lvso|$VgSW?7*XEDJQY{4LQN<(Pg zg|ND5GSIX|L3$q^p=KQFgm@TP{Bh$N!i;I;;(x@4fll?#UJEHem)dPiy!qDfsMN$y z3QEHSG5s_m0&hr|=1p^=qBIh&L|;nbw3%)fLng0mj~%eo6`iaAHJ1fLlW7JiT}=>2 z&KIo}=mS|_=UW#T2*~m$5xpp7FPWikr|}=&N8fD!V!cIGoEZXPYRJq{S6SfAJdsy& zkTn2j{2~#oXIRNK%+=B?kNtwiS%;+Drr)O&e-6AppKRpQIpC_Uw0N?!&r={b6q+qOIxA11l>>~i%U_(| znXO~J&8>+?iCgwal;lz_{Wmhq_C|8FQHQ~X&?q?%7A@^U(2ZTkgOrM+e#nMFkiV?o zeX2u*~Gj@iag&ozkSU9QTPj;vAn|?7GnZyr(Mzs+Ve-yZ>#%f_%@X(0eiR}8-d-g#0cCf&Kjn%C zNh8x47F7t*d>GYsI&6GToT~s-R;m%{ zbrY-n#~dz3Q2}4_kVrmD35%?bz$Fa*U#>N`AFN;oMbIW(+YbdRadzU(#RA^8;u0CP z>{|pU`7TsYvg;*FLiKMB<8P}^@|7=~H%j8F*}T%(N5g+mi$V4x=P#2<@JCB_<{97k z1y3~CzkcTWDPI@>uhdp5=^CH~PTue6nA(Yy24L)yowUm9U`MiRdMMTLdZu$XH`c;z z3?o+?(GWG^H@kbq#U%YCxEO6IEuuk}L9b^hRsa|_dckv4;Zy?y^cSuoSsqI{Y7qrJ zWu+@+t!C2T{R8M|-s1g*m;^dZ;M)_`GT59B>)*hD+9NcHgqxAOI`_Z00%#7^BV6l zY3EOwH9`)JK|w?lmyweI+kMx^RK>%rF?Zs)OK3UpKi?skKm8y=uNDVBd?6zv17J27 z52A2JzNJA(8tZKeu)cd4K>h$JbO@FfC$R-FWa3L~T*~bMeoIVQ2mN6@>ux=n8-u-L zdAu~7*qx*bzxSThIwm&H$Pvoely5cvUDT;6Vam_}#|MNoP96%=-jl+F#GnzzpbBC8e8aGRpYTIDg93&5q$p zs4s_p6dcP@{aMFjDGm2`bJ^;f3?$yANBKh26b2P!`UK(tX?43)qKAo{)p-t%_7hGk zfrQdtxa6!N&D9zJ@xcls6U+3Uk1DZB6`0x zdQ31qH%sq{@9$vj9uf@rXOwUd%?+0bI`k49984ZB8QKxd_(50R>red5u~Dz(x5@vO z2W)rZU|c)QD{m5Dq6Xf@BMOK4>qbjbzhuD`G8* zu_$kopIxSaE;3AfcsLQ1Z*Uk@{?JwEs6!v+Ys%PsqJUje^}g%p!K$$%#heD9>t>?L z0tH8v#IO`tGI)9Yxovx(pAEg;_YR8}4wgv78XbpWxMLfr?|#8wNKKNb|5G*!3yI7A zgS?4hc9+_Tfqkz81Uc6>7w3*y@2n^PSC&AkT6iWl;n^x&& zNr>|@E(nb<2Fhe~O&<)cBR2;LaP=vC6K$>`jo|3FZf>{M6y@%FB=lPppuz(d)6Nd9 zQN=g{zsHS)PeB8SkrFZO)uT&W7twJbbzvEtRcKlQp;nXw(Tha)ydS_DPown6%J~X+ zLuaWU_54r%0D=k<3I1y9Y-$k7Kwp5?)g=rBR97EyGr)FU2X%iH6X^W5pl$(yQO(XB zWK(cUh2#?PlKB!V{OF4WqdY^zyOs4ut=nLLH2ouE*?e z7WsADfuB=Alo7OPA#sIH^}m$8fAfFC7pB1&^5r)0W=f+l}k^j8Vr<|bhYJ%rc+IJ=+r>)>Y$eV|3@x8LWT=k9QK=1O)t|;FRC-KttC|W*|t{1~^B5 z8PqzL?UYccq_F*XS=DSU)6Qs;XRxs}nA?CuJxTq{MBex4Yc|x+Q8nNs+(%vu2?!m~ zBty z`O!H8^-^6%UwBEjM%pqN(D!qiNT6RE5YXs7wL}C{mhn4MU<5}R*|2DrfqG5&sE|e7 znM6iOZdU;;!;qLG7|7nPwB$v{cOhO-Rk7WBE|zvn!p1l+7JwRQo0 zhjy`Dc!w@q>uqtH-UJbRAphw7Qx)19W=MhHGl`a6$#qAwFQDjr%#bCSHb)AK>4I+D zW7>qPz-_>+fN%@Ck1V=cdhXGH>Gr3nW;rzvjr$0Z<0~p7lz^l* z=i}L+T{!As%-dYlsZ+~e$b4+(+$WpF;ZscnjnKl(steTczKPmz`G0ZC+Z~fX%CxOM znlJ9rWWGxohVGtY!{`if$LY27A@=S(gn1eGkY2mvh3CDWvY;N40}J&gmXhh)AF20O zHuL2>azBm>V0%&*q|j*^T3J5{=AS2xGjf%dxK}s{qLv|5S8MyQ8Gq9bCpjsr+Fgddv+kI83H2e6kp(Lr5_eW84c6`8%zF3mW}NeqM&P#YoQk+Y9t z&5&wkR1;*EbmYT%h6KfBg$hbOfPTVY3AhLVI?3ey$_E~$5NmL7FK>5`katv@{(;b5 z)T&akcy;LVH^<2Dnw)47B&auaMpS1>fm~*sQ+qUt435ZEA0n3EhFy^RhC$hupG>mw_sFwLqV7kk7zzYtnNVmU&!OVLyu0WY=#+iZXmEmYoXcWh;i3+7) zRLjbiltMZ6nn3BzManZ^B#DB(pJc@7(dr)xc0-DqhIK{V*8hqLt4lOG2~SCtWuQM(ppBJVZb=7@H6aGq?i zA_q5wbC9>j_%n4#dD;N`Zebq0F$~)@iVWZa&9gR_V{*lfxYeJr_U^saQl@v`m#vOC zh;!TD&1$S#XVxEunOip#PqU91qI#8xWA)s|{K|=h0hRSbCG|obJO@m@&NnT?JU@Pqh^lNywyhw*-Qdh z^Zfp_*fbwuU3>H+GW+MDX1K_Ed3A2+*w~atE+fbCutniSZcZ4| z=@Y36zWyn2cd!{+jPZa2XjGJh47j*wuLoHh1xEBH@SfOE@`=#LLhl-^HUq16aUaCn z03}`=t{Z~6=&KkNdL6?86UWhk)OE-P4S~S<*`m)}y!Bb#z1gWLx5oH=13r@sP$&5-@FkGu-)YE{ z8Nz}&=QQR_L$<33EY#PU*1k#m+)I}Q@dgs^Jmfd%2Z>7y20I)EIu5u$_hzoR#|j3OXF zm!FqGAoYIY#>%+q-rRI14Ovuv0|iCI2ZecGh&)Q#hKZveH@NA7s|z`-&XPzYP!@;O z0522PVu5FfXmv(81IyFoegkPk4G~u?4+&m7Nv(f|qa^qm2n=U3Os>d(KkS=kMVUe4kgT3Nb+%pq#LE?_A-2|Ndg%G@ETW8pa~XK-t|SmW5U69|%e#%!~E5na1XGN~pH2iX zk}vx%q)Iq_Sn85)hZ`xL;Gkhv4+PBsx9E^NF)UhbRobx>^aHr{ifcdY^xw$Rp?cIP zwjd|Mz+K3zM#|LU4B%8Dh*BE>P)HmVE%{fcW_(~C-ThF#!!$&j=1w_#t*!a6w2uY^d2r8++I?Qqq|*!}ARi#?e~8YIKab%$@&rTu zmbd;a|DXtC*o25qZwZe6lt7v{p{Z_ItkKmZ@lvb!cQPS%lu*wcT1!MD<4he6NKA_C z0@g`+fd3wu%xIsZ+m?>b>w?}7f3(Jk0xJBop7YD@a z>z%x2zMJs%s%83&$D~^~gn-OT*4*}&2z8)^2BDWq{p(@ce9>DKNAUa=&gvDe;i`In zv35&T!r3OJJN)o;lFL(ZW!OC{C&Jpr+#MxvlE7FfjR7*;h)sl@P#h_6MM;Zy^)9u$ zROgy1(S+ISCno46sB+LJIUrvsMYX8$NtL7PxVGljy+3Dn->63Fy;D8tl1ybv?!H3Z z`Qpz2xHd`#Kn?BRt2a(p<5_~KhcKFDT}z|~alHH!>Zr(cMY`WLxiS`Z3DPYt(-LjL zpy^??O@}Y_egrRrtLNg@Ka7ZElaHnyB!1bKUs`Iv6W`DfOO9W_$&#hPLvx`2H$XuE-h`0bTmm8uyG=1n0b z*^W_~MSSykIaK-nAEa@IeWv&Zy!yo_oN1@dx;2u7}6;%Wc<%bE>;n6&CjkwsBI`XlJ!gYjDnQu$VF4Y**Pxar=dK{|>>I&f+g?4Kol};zl*^9CIJnP**;nYcIRtKJL!MqJ zu$p44y6kv1NI5DLN9T9$u_5oG37DY?sv+o!RaRJP)`TUdqoNCgov#m zJweP9NP@~V5=xH~^d-;QYeV3EE!7=Gg#j{fX=Gd3MIZXBa z7V5Ru_Md&J0Y>mz`hPr(Zh#CZdV-exI;`@#O8Xca1a*`E*-gJd@0-rB*2c++M4olR91`{LA^k?`jc-jDai8BbHd&Q4OC6 zI|Mi1w6#KcWs-BxhvSf8mo^M7qqFAAhW$AlNiE8!ZGt)b521qQ_Q%_sNO4$=r?^I- z`vO4`^iPcwqg&T%3(7VjXMrVFxSOp_c@8Wu<}UqMjecOzy_HI>-mEgdP|FHJT8-rx z0qX9#wiVLn*+!D|H7=p*<=ny@;q6c=<1xStP6&k`cJBVo5Ab`jf$x9gxYNoxoN(~7 zVsPQfa}2dyc*wIy>{faWDs=d9g#8fNO~_wkx6!zQA9`yK5lfdDs)ARCMAd0_wZ)zC zn@{2i`hHzX9dwH*`M*a~YfsKqW5GL)lPK8!nVZV#nL{tFOi0aOMdx^jlwbaQ)!J`N zOwoYhtOtc+u~hfjStu^v{nL(kQ2cu3=u)VBw zxyu+lK>)k~=+lJmIjd-Dp#0|-2}rLXF#fBHI|BIv*Al8+elkHm_Pq!Ef)Mhz zToK*qJ@aZ6eqp-F?##KVWa++PX6-9 zm-$qzQFRxIjGk2rzl@C$TNUoIu{KNLjm370%S&+@X0|@J0x$PA=)d4EmS9L$y=xwo zl@L)uL6h4aPaC}}EoQL3p4nkZaOdN(AJsUXFFVsu_Pn%?K5!U=C(&1FeW9xu znyB+NKC~YckH0+s{QdI0_QU8-7C?$YxXvqb8%nSl{OXTa$^iebE#VK*%TJVC#4SuU zHkG)z=1TeU3TmNloN~lFu|dI+mX?{9O0&$f-4kxzn|qDj1?8?6YYbMO*o>La+?3arVNaeo zubBpd-5;EwMH&%L_2r!k|9U<|FY?>q=%kRxoG%y{i7DI@y2531Tf~nX&t+trX*+4b z83rKcg|X)C)HGRBCnlX#Q9YySt#8R!OLMWE_lj}-;G=Yi|jUQJ8hy2{!{zblc zfsy(iLpqtPMbxHA_1q~7e}*wT90zxhGw+91pUukoE1Dqk`*`eI_)rZ+`@rAN_bT0! z9|*QtC?BMTgX=6AShfnIazk~-*%%BNaZ-dCR-g66w)ExNrhr>_4^pRZX82%UAjMdq`WMS4 zdA};npZ4YNGs~-xv4gu8UwO%dwoG$LCr_NP~TiV%+HiC(N&geG>)9}R( zXfH9Xkf`O&iB$I8#jA%rx_d1Y{AV|3zVr4S;Jqai_H~He`V9+&qOXK=7wlqlxz>!i zW$+;SNx*ZwySG_U3l~ITChG_B6(7zn*39Jt9&#tFyA9r3q{Td=lrYwkg zrtao;YvV0r`Smp;n8uozyK~CdFdOGh+U2|S{O5-OkK3M=2ZZq-Wo?~>MO&efe?Io+ zzMh-(V>QBg$Z<~{&uP!Bw)SfkIe*-!*CRbPRqo>5X@;y8+`%mpGSb1^Yp?9WMAaZY zdb#iIEoP>pdRnFpL?D+3PO#f;b+J=vF_G@}qx+%qk&LnO05D+%UBfw9uI-x(Qg0@A>))cmqyrA$1K<9<;?8X>=1hiL49VG7CM>Hu0nUB~ zldz+06ZVR+&T}KLn~a&rw;%LeO$R^9S}p&qBK=MIcDhkS+sy;es#0PTxnp3LcJ_v( zd44ERuHuQzDP&NXD@W>)Wx~d~e{bJ{<-R@V6>czzZrK{`pHS&{|2^$`2c&J+8Jps8 z%jDge`;s){!tCGbm&^b6Ri3rMV(ZOY3TItP+8&WAj6DKYqR>A~FKWw1{jVP)Xi60m z51U=u^BX$!h(-0WGE_omDSr0`S!`K-v?}Z5?E3wYlL^goH1+9`6=eL~c;j)r_yyxH zwh<1kY3+T@>6A1)@nmKmS%!eckQbjlgt=gYe<+GQjf*l|qcRPS4Tp1iTzI+Q$q--MBN|r7rzD9i?^5 z?`Z$NkCT)}D9-r|^j(bu>{;G*l(vtxj*-6qJLT6ke3s11#M7=GpqgAHe!Ca;uv3q0+mb!h<_qkFBrC$?}(gQ)!&$d0=Ax zIKQ$8((xJ}9AMev74`rHQ(CapoQ&I5Xm)w(zv9#^%iTdUrerHHoLIE=jzI64HXX+9 z-}*Bx?&$j}W>ZXsUUe*PZcjI#@sH7mc;P%LAJ!WeCVrRA8;U&Y*%tzp&h`njM0FdU zez&vrMCh_w{7=;A|zZh=qnbtbVKkBvV z!O`;V#eX=@!uVy(x}<@6`6Qx?qLV}t|6hU`Co|qM%Zg5suCcD=V-OxQBQuXyD6QV4 zhQ6ub+r_v{)unoqNs1Ap%t?0HjJhm8HSu`#8KUQ~=rR3fI+ylO_-ufGNxihB+o5XP zrgF;4i*DOz(|o(4od9upsxPS83}D8Oa(i%nvPwHzw_6Xh6m5;rx)(+LfSj$nN*!!Yp7@txU@8tH?HS)E zjau4^P2>c2&+;H^QivY`h4p2O6Fz-+!h;+6x^Mx7e=6%XjrAqZJod|0^&LHa3`YIXQHm)i<+rEG!v`k1_B>{z+j;#t6b6i53 zN~`tdzgVo7gQq;a+aYSCqD1*DWSc^`?sz_8Vw=T{32aXi6N5}uKDv+ngqtQ`IXN01 z)&?don8{im0?@~MSM&HRvF_|!@5yy`^-P|zs9Y0$CggR5_*NCd#%b3PyGL(pvuiu; zk$Ep6W|W&MTKVMbhz25j@w5p<-7HzH!o;A{H6DzyV{Gu1+XPR@C69(&?b|Z+mIniL z4(L}MtRDZ=)-I>1VB0naPMO|-478R|0nKjWq|;7&FOgTTW5j?D29Xrs6JO12ri2u- zw;~a=tB$Q$tuOUO8#fR&jBgV{E8MWyN9u?#KdkcT5@tT=@Ub>N=oFKCyi@aGZ`7WW zcc{Xk6jl@AX=Ndx;)$zZb$xQ3mtB<vlJG+JB)CRTJfF-DRh( z4!I04SBG5UUj|g8JV(Ziz_-UfCKtrY&PGkONz>YGNx4b2k0^$duFHS1ONCQzzG&S9 zVy!dJ_oZ+qbp3Wv$3m20MB@!pp7uG$}N-)=d@< ze%(2{=uMF+uG!JLX*`xaGm6ckWp&mt(emQuiEd^h(MF48*gu>!QhgS-zB}qQIubTQ zr$NE;cu^)*D6}e`1isxRfwlaRPyNJ}{O42~)wgwRmiyjW(l2D(+6jVB%TknP$LVLR zj%Zj9VgX{_)5pI$qR;?9tQ3q8P6CMO2VPZG3`?fQzqI2nKy;j2_GOXfj^7eu(OqAuJ&NKC4ZJwID+>>)>Vs)>`4%8Z6`#J#?x{D!uiWt6>=0zE z`uu!c`990W4!-k^!*MpwGz58DKl{yzZDhW_y3@5J$=1mYD~(pW15SrX(q9;&mE(I2#;hhp`iM(-evyKRDnRZ)P@oe5qnyDz+mxH@211g^J}$BTLx0-570AJhau5un+aDq=HL|(ONBrTvO6b^O(~QfH z!_JrX-z(RYuSDu|rOxqys#4_2O_s8~HSg0UHNgfw^jpV)5p`+$r*B}6otL9B=Y%ZhkS~#7`cUL>10k*?tdMPEdN;9!3CAD)*HnugpVrr8c9JBtJ+P zKNdwzVd)k4_cvN;Ul3dP??=lAXQ$jLzBSE_p@r)pn-77bPJupr{h!s@-d=WjE8Zkc z90+37;-8S}Vco|B$2H>{*G>_LbCeAgtG}GW(A7ri^7QWiBxLIe-*45P%W4F}5 zz>yGd9$$WtBD%3`*fkpYssE$MfGbslt-Vp2kl7}gTaNE2Z6tN8$Fy)^MCpdbheyM_-FL%6St&XuD^jsuE8e;I!Z71^P)#V z9bTU;B^3wpzl~L?8V%UDXZNGJj$2#V@qMs1^}pgulx(*lq%5iCE3qE1?;Ug2JIU*u z-@te`>8UiG(BVoxU^&|G_%~s^G@FE%NS%%((S#&fB2<>U-%=8e-BJ5}awj^RmWcV+ zqtgJ&t=C$cV0H>7aDw9URpUSR<@L+U3YHe%_dyU%*RHCxgZB2@q|3j7lWc>IW>|^mXzYXj`1p$9pNo| z!hQ3Z<1P!d;&j-eBlpxpjS_J=KplJevpy*IrsMK5bz{hOdPK8?$!3~A2gff>Rn&gH9ZG75?E zoNK@>rT?(sjnwoNI?O)-Cwa`^%=n6*8sr(Ti&b;#G{5W%G^;ejZ|4!2bFe!rc_o8k+tU-qugUik`(Q+b)0^fP+A zL7>c7*P&faYGkbba78$xIFg-dWkl~ppy9C`y7B_YO0(Avl=YR?l1xsUcWSQPSPz#{ z9=2SW@2{sPYe_y4qHz2qg#A{b>_&9k4~U+EV@jSm-;?&I*3sRZ>z*U?!;bN-&J(uinNDNMZmdqN1z|gy&ej*4B&~uK zj!h#t-WuIq*eQ6`(@|k7gzEP>6DtJ|)g0dbP7eu{R`}uD`YET}#%?(9XiwP5nda9j z(>_qSw$ijgU~qWX81LJ-%jNCHn%D|tcTMa%D@m?0=SD`mh|{`l?$A`$Qh2L2Cq+SI zy{i!?t)II^n9?kQfgp5b-vmE-x6VYg(XEu`3ZJNXyZ+aGyY<|u$;&_*hj=qB4V=G40ZL>6HQ;<6-23WGMdsl=6e4(bQ&~S!$NV(^N$NZM(^{ai&a(Htdvbk zmL@dNduoku$NRUGZH{Qs5Y>vQlc?^8=Z`0 z@Bb$7nf8BQfCb4*;{D_Mws$`|;3O;<*0Lwmc|>;mYtYbUvvuxp!_Jro3z6n;@BcBp zbmXS3PQSnQlwzf+U(%lMso-F(Y$Iv($he$1afE5Hw#kNP7(H2Mgb9^puU#(boVA%GWRX#3^3v=x#Mt`~OTvj))SqQVJj%>4HzMGvw}X zUrl?QyzfPL= z_HIp@ehtkm_PH{2_og>kD=L}x@OfP@?d{WAF#Q^qS?qgd>E1|huu;@J?cw{ne%jl& zwSM~bMP~7*ZN7BSCtLpXrcXtN)TMK7l6I}!={p`Wp383Mf=SD6u&Zg5Ct(v7(3ISh zBsWBLi1sV2qPKkP=jL)G7sijwTUmZ&Ab2O^+Ic>C7dC#7139O-D2V7ucSrEyTXiQL z92oPq?lTK}WBv!6Y{HB&9^5m6^V`%|nd_CAGbckM=kVSdkM9TaMl(oitu-D)hz_c& zt39`dM-P7BP?CHIQDx^?p~49tKJ@q1`^P21h_b^{>6E}ApW;$*@;m?3v=s6wPWe_G~TBD3cJ`JahBEK!y5>8-0bkeR~gk z^8ETdKXG5|lca%z)pTNUxgN&$IgsUs(@*@uXkPv+*vABezKR!63Gy3%BT2aUaltei zK))`#KdEm>Y(HVNBGQcOEq{c@pc;qM&CKJ2Q@G%-u+En63qtwU+IyydIQNPU+N^Vn zo6`;^jVXSmInfH@SXfyZlW+Om3PFK=?i5yVFO@n^T{@$|Jf&J1SO-JF>!aho^+;Ry!eFKY~w^HPV znvMBs5&t4%Rm*SB8AknuA|A`nFMkG(I{w%s{1vBBQ~Fkjo;cB9@;Eg?voHK{&I8pA z#!9NjNo?pKCo*QJcu8}OrS}`%L$s`&$xM3N98apjtKuPS9EDN;s|eKn6qcXuBj)D_7Py4ws?4 zQK39>zV~s(9sd!HEPNxNTE9*>*ILD&p_JO^JQ#FL?rVD0<-_|=ZphMF$2kCnH2=%~ z^L=4F#gYm-sid@YznnJ8qAhv(H>&qu8hr&$fZ}si+4DZUScnqiA#DRKb4|XJpVNa= z8K#p%Nq^XtVHfXfHp@hK;HM#9N=-AYTc^YdXRDjI$c@P9LLZbz`0H1IE|p_^f__R0rgF_VWXMv$QILmM)ozlSiCNd76*KE;NlaWqd+MT^8K$>a_K0 zbNKmV65lNPh16&c(0IaEu?v^?0=I_jYj(22)U3kdzw9lC2P?3c-zF&tCd!lNo5}_r zp%q5!_RU|0#*deiQ?lp1OOKNqNl0rMn| zH_ArFM*AfD|LC^X;ex4Wpi|muuu;F+)k^G-#Go11*6G^EtzD2zhj0p~X1adz_~P2u z+Ofa>7p`MhP3b)1pPlDnllvd3ub7UbhmJN{Fe}0{gy*)_n9|KI1RFoEE3`vTVL|Tx za<#1HreW*5=;8h4q`!CZ*Vggkdm{Hi1nbyK>z)d2j(l7jxmhy{O&4-&JDuBkTGiDC zHFZ)F-V!TZWX;~M>hA9j96mKk!})z=8Ydq@#u&aorT95ZyzzlFX8K6lGbPWT-1a(( z$ZB+$ZcW01_@WqU3@)6uKP@55$s1hwFj6)HUYv`#t3dYU;+pDgOD`_iB!$)nC!)7Db6uM9_2 z*-(Exm5%=DeQL<8`&(JX;;6wY({N4+i+jabD4pg#yyP^(K)LpaZ;wq%k15+yw~<3k zE#w^lEagwCoSePAwVo*dEp|2DXRVf02R_>a@4gT>UoiCJ1 z9gsdw?uMbLNNx9sVTS-OQ~={jwX)P@WZ?X`xw|j9vhxJnMUN?5NK{iB51DWfUL?go ze}vuS9~i^xC=P<;m{&99$O;9luKonkqhfqOLu8D^(slF;WLgRg65m|%H?Vp+8Zoxj1690DCNctF%mVW zWT;VPckC^1ea9pT*VFPgbu~#k5K{+rG$?fB$UeA}(RnTj^kJgHwQ1Gfao`{6i`Gne zRL{VGHS`&{zrJ#%Y52qNu9fATcfNx@0Nqk(#3F6$4LDoPhL;aUh@{;+R zKw0>;>2_ohQ6dw1z+}x!s<&F?2N8S(aN@{u7n9%jYI^Des)B{({8(w9)eVOaw@`|uI`aF;;Lm6bdK)$4U3e!N>NiEQQ=9EOYk*I? zBI;qq-*a;Yi4(iF{Ra4(teb_nTL}g%Nkj^TLgburLVQm&+)U`FsHnRJ@{%^%8L{>pQB_oV{Prx z((}Y|k530TLsb;?Ek~DO0}d_4xPG-2Gexy0-3KE}JRe|L-@&ca437sKY4i&xEm=+7vh{wBGV0X1IU4m%4k8v2&0 z3xD9J@Spki_x)flpX`}p2O<~$Lzo);S(~^m%lx;N^2=D@;z|O)q`PriXN1 zLA7+Q=jw7vTK$D#+YV&Sva8HYHzce)NbYFBF<-`;Qjx%#Eq8#cLZp#_8Klea)Mill zI5;1w7tOEEv?Or#H%M=ooo-N&I==%%^P3P6HCR)}?&NPoo;-;Xe;DbrbtNZ{mwJa_ zmOK26^7zGZ#utl}7?Hyc#^)j5U_ejsR(H9XnSs8-apL{pS?WQP``ZCdl3Y_ANpr1l zLL=hqFlkA|Q+Vwo6D%z+LA#I5JTTQuGOuY1RzEel-~L*TvE47lV)A&!MYMbgLfB*R z%bMTKgnJmjY4fywzTrD2|6gE(oA`w5k95O zZlV#7a-i;_yN&5#?ZL8+^IajSzY*iyEFuxq9m_775}d99sSM_9xn^=N15gmib-p?~ z`vY&oVS{XOXk&~E$B);MIbJdP6Gb)`J>r@bmLIJOY7Y;V zalB1pILL|6Qb&c)!or1pQx2Eg;V#tgnxy z(5Gzgf9S!wx)XH_RCmyIho+Q~VzU4gj|{Y$|8{Gw){##bk6sujQ-1ADGfeguPKlD9 zTrWm~Tz@~ftukF3v-4N1nwu1^uEH?@6HefUkbw|bHBR!R#=z*&23&E?UcNq@V!~}f zs$ZS$osRs`%F5E!Ls&!cSY6r8u+E4RIb=&y8yaE}1x|*q-Gy-bRv3>~Pok7wWw^PR zHrvbbGUF`Q&%Lj=^6c3DM zuqZJAI;TNO7ub>KPL(-+8|C}M&^I$fb;il#?f*HBv=}WO@!aiyQ09c;=nnXvuTRzk$n`ICd3I<gqNEK9OduIDJ<5V!L<*)K>KV_HM8fV z!P09<9cez}W{m&)`ze87SiWN$fo-9QbNjIW{Qh8c6n?1sUXYUfi#5LR9tDk#Aft-D zOD8>^y>ZjVlS^kclg1OmME+^x#uI}9^)?h*Y~a?jRL^V-Z1^5O?jg(d@H1o#M7wug z27@qylM~{rC!DmnQcV^%D47c!t%-LylPzX97V`PNBhuj~D3wX<^iv9VnDcBHBP9{FE2nUsDk@fK!+C^#G+xG7`jW2`7cp3F}@W@sE_}1IBkHT5DWB2|#&dUG)Xo`Kpzfib?FxcYzbq0n_Tr>2G zj_OCsC(LX@a}c;sL5&wK#6TNo40UipQ&oivnK4wcAc!XLRF&a$1Olo`@EvbFR%S#Q zHo2+-Jcb?}2I<3spo@cI*tuEB5U(H6-ax!)>{aRELO*b(8UjG=Xs;kKxipZ9(K>Q; zU6aG!X*4HDpUFI0a}^keF(q!)C=QdfLirGcky8a$WjDnF;CP~8sUfwz(3BuZI!WLa z{BKgDi0fyXComZ<6{QTi$3iOzy33*4riqO3fU+QZ!A{HzaUA(po1gtKt@WkUMG z;)KW$(NR8$kUld_d(H(7?1aLFFsW>X5z=#b)alP`x^AgZ2{Zx2yYXf8 z5Lp)mXz(iIg4$sTNRgBsr*qICo&>DA)WL1N@o*+YjPZM|}@-sE_T6 zAWI;-gmvdpPgfyDqyte#s6rpD3TRs#r-s|btGJZSuAbw`j;(s(_B+D58T8x$yRmcv z0Ohz0e!vYH!DgQdi!&hoD@OI`>00&bdCN)Ob04D~%z;2VW!37;6t+uvVhFou;V?&> zSEcbj;d%jAy}mP=AQ-U;`eHx|#)vSPTD?Pc)?_{8JGdb1ULZ3^d1zb@5vH5Xp^pel zA?IL;g*L|ss7M3e$9ivg)sQTVI`tAj9a?Cc5gA_@Jt}7!gRUIdxSF5OLtL-!(T#i& zf?7mhl^HffH_ip+o1V{Q*_#8-XS;rxU}0J!dk!p+`eNRQJ%g!dbkYh~jIP&qOqaGQ za-_0YSzv{}Du%i-4<rIm^*_9!WEq3MSU)#FN@g6_1zfMM)PdFB1i~Cx z4_3XXY$2wbAo2?r^(y#)_`wgY?m>7y4S%N);@>!YM9rD>1bX^6Z^$c zt0O*x%9)hdIxx?lc6elFj%_6!j=8T$fQI>%6kX?lb;ucP)~Sg9}jqEs66f_Xt<-P~P=O7x~ImboHD| zDGmOkAx*autSVj$rekESMK-&CR2E^2h3_mI0-r6QCpwj1Iqz0t%t$~try zs)wU@Z0le0FD`;j>68$HulO4S3T4qRRJ;v;3*}I?K7%@?P#e*}Km*w+AC{yXz?%59 z);A?@ouu4dK#f{juLz$o<2!}mFDNHIp_&dc*-{~rC*ryJs1ucCjJn<STn2 zr92Akq>&9aE6bvFiu7TSYe+b>`&}-&7Zq+<*f-9T*T{X%0&%I$C;nA zvxM-r& ztg0H7jP7$JSd`l2Kf3}k>cEnc8rxIF6F{plvKQB?~Hp2%J8*M5(yw%sW5H=@h)RfC0B&m54C>w54>-AlRvJNaNQ$!2v z&O+m$hOEYjC)yyfS=BiEHWAXPIeY*Tb2nWq+r`mWe4pSV`BVANWUL&U$Z{@$C$LYA zK2pmC_&`U(SOAYqQqo5VVqoYYXihYPJTRH7!8B<6mJ!L%m(k;ryrMvhL;95x#1pdXr+kAUK>F^$+gQ@AE4Tl|qNUmOL4cM2g!Z=l}-|(WS53HUvs7wwS zs|$Gd{xjSzjo1Y7CC4R|!fyT9LbM)G;YM&BTqwN!{LbzZJQ81^6D~)D*A5@R#qWAf zt+j+5W>IbSO~{+39H@~wAokv|Z>o?ia04nZ(>NmRjS#JxSlmx9G6iAXVyWbeIVlfv zBs|V<5@t5M1XOKF|Lr|*;f?DdRe(l_Fe?{b!ppJa7YYy+MixgMqGcl_DbViMH4R2R z;spkw6~mu@54Xc-e~b8~hm8%lBSA}hQn;Hi ztd!e!TlcErdWj$!qjf;G*j;|XV)O>IjNx=EE39a3_SrQz0!HK0^pVmZi&xJ@4nD4) zb2Hb0LvK}m)-F|u+8dF)6%a&5a&|XZ7uc!nPWH1FY>XE{`>G1y;4ys_jA>|xICsSm z1k`h!>sQk0wIV~Y1YR}1hM}qv>=82TpB`8mV(pRMwI3hs2wA);S2|fYV?NS21N;=l z>yRpxsxSvaoWRvS9h(ALDj-HV1@ssTaj!a#g{Y~XLcI1MGOLW#<$uZ*LlvKqw%*mo z2&wjgUz4J~;h7)_iy?B&QN|QYs2%9BQic=NX28|4j zw7^&f)?Fr8Bq&Cn6pn@{1m5BUxQ}q_tH5a9uB&~zJ#3bXu5XT%pN7=X10Y@kR)JW6 z0yL7Osu(4kTg<_V)jpN1TD0;N-~d2)GM4+v>rP#-(%mWt9%+r0qfA2@_mQ~$GiZh{?b9wq-3;k+)c;^-L~2+m)Oc)w6py}J?R!-VUG?I_>W2@czcHvRJb|p9^Xqp$ zh}3Q%el6pEe%2XVLP193O)olzo`6_wAEZry3ydXVc-4!n$QJgJsEGe*atD3$OU|DQ z2h2~b7cb`-`JWEWv|%iZ^t?~uE~mO*TnA#6b=ZvdbEywH_E29==Dv^B2Gp7cPvVewXhbwtfJ`b=0@AE|jW+$(=5s!5?yJY17Y zRh7vB6LFz5=B{#(bN&(+AvE~p&5D}GREYz30dmgt`6xEk zHH9N(*UOd3c&rxx*A6zfm?{!oCjqAN0p}xdSu14jVP~TO4=Nqc+B=#l214J*K-2lJ z5Aa;3>IFjYP~MFc$L5VwNPrg;7=3(}n#HV*;R(ls^f|8oS@}X`u8aVyq4>PnYYeD^ z0JdsnTLv3tGNX_jp!6#NH9f%3cwD{)`HiVnyj2LXNl0l;4NwSp$-_&oxk8L-9Rn1!wSt# zZm2^ot}Q-XE_SV8rB8{d@n_sabqr?7Ha{w$y=sC=&{5j5Aq*elmp}mzf4XGRp89zh zG!D5zc9aO@Ng6RI;Q9(*W6l`Tr`>CdjmSv&CXZ0WCfU=jjQ{5%jR3n5FxLdc){D|S z*^FZtteo?+T35%&8@7XDj?oM?Dz}&q+-MQWZn(yv7+!zdIOTV@=sJ+Tv-ESg$qci0 z6|&$b@Hy937H~EJua8lpYK0-ui>#0@I6)WPh8@)+4^pJGQLFik;eUxpX}1l+jRE zR{&Hcu5<$w@J73p_|1bY(d&xm4>rFrsw&YW%5;#f{m{K}KX|b*o}za6I5y-%EOS;h zQp{MCQZ$UdUc#Y)n5unRH!e89Wli&T%#eau0ueMg zE`BT(+Tg=D&KkP>Z|fs0;If&PA}%y+28{y^F3>d*1oUr%1foIYh|r195DTJdm?0!J zIE+>I^kKv3h~26a9B6?15*38Sy^0uOXNcxHuZs%!PFavzN?13A_@8Za4=o7NlG?8U ztQ~Mm1K5?swpdYlGiL~ANyHxofgPY@V(`E5BDN?5?fR7u-bN-$oA~@xHqHVU3d+JH z6U73A#gD>v8)WB|w<4-8?kNQ&0nG7V*H!czw)zwVoDQRQ+%CHrO?{CPMO~}NChXkj z%oNcnoEp56nt*s?tbvsnVt1@pD_)$R@Gd~$_qKSeAh5M8UJeMXAQ*29{Q{(oQ-?}W zHB~7Cr1jZ&;+PjuAHDDnfHp)b#{Qxcy+Khf$S=L%A2$AT9OHH za0JY%2>?0vFaQL;COg-}@Y_n#0}M37=m25k2I(tatgfh?bt$SIyb@EYRIY{8Px>!y zRO#o61^fqBYEm^gcoCuxe}iMiqDIz4pHsbkXc1u;l=cbFHMSrXXg3YM zBrf2rO5YEnLdss=5W^;uiCS{JaS)a{~d$c_W8X1K6y~n)&HVQw_Eb68+p4o(nj-hdTXKgxP1j= z0EL7`Db2(GIK3YrUhLSP{h==jTe&ol{gOh|h(dC0fyC#v?H-gWCB*Vs7h0)XWL^23 zAF+0__JvG9NC_}hm$``z=silH#(wG^@YRE;e8jVV0aw}3UNEkl1gIhz11WJS<00wiC?u3d->ezR*)pvo%7IL);ub0qZH zs)CwXnfNS_(xnfr#1yw>hksFb1wi`zd0pN@Vwl)asYMP~%r+81r0|I!T1mi2Xi|A^ zIuTa|HqH{nMr<09Z)S~ZrP|6O0xY`U!0B-KTC|ajSUVDkUT<^*Z6s=rKn;?PDlA=j zm%o+rDH&wPjVJ($za|Gbt9m9wgI{3TG9g&hWAi~s zAV_p|6gACMTWA0qm32iS_Rz`RsUgLrdySD1?R9G^OjLpxPY!oz3o9|JcjHaG7 zNLDS`Oy$SUge7P&iH@Q+^5wd#DB>^{@2ncEt~+iAr_18%tp*F2-cbS;yyi?${1=~R zrOyZI!hs;tq{XQQYiN!u!C#`|wQ3;wNXNwCZ?JU#Br4a4CD}lOvuS>gx_ zNJ$Gl#3lhA2Vk^KtTy2E4+;@rlcPcUG;*LTecGbl&Ey{u;m4^pqjkYEjR8HMt1c^N zOC6CqV@C*?GrkKX-bowSuX7A8;;~ft?7kg|O1m6`a3N}{emF9Y*a7hmE52ZKS_5GfpZVLC!q6~w;- zhHCLDew%!zP@|-GacxR9zdw1}l~YHXrNQ-PO%`5yyfQyTQjs3?y?p<167lxuftNz? zFnAQ}MD)a%&N_o^7>t#tDnUOQKsXbX> z05hHP-z@)*p9%+5e~;G9pKxJ_!iT{UA!a`!kiFsuUjL)$ssoz(+VJR>?(Rllqh)k= zx6&mIBB*n;L%JO(W5j4BMM9)RrN-z`z+?kalwr)@*mu8w7x$iX&wJnV#`8QUJY?qI zM)5Vn-c~C4{p4GsS#IrT z7z>1F@^b!fy*ID_X%CHK!=uyowby@KeEyU1>fdEYDtQ9n$k;TR)m}e`Yb&~+LWd+U zh~MH?rN95?h<)ExHm*)dr-(2{sYd&zQQUQ5+tf5Qsv*sLLpO59D2$G2lwQ4C6KCU( zjM=M0#niup3v++}WnkNTQL1=*Z|Hh7e@{9^k9Z0-82;X`!Ne~-s&6LbT-HlR&$Bng zE0g%+;t;_(9^b^6wr{J5W^fT#+B4#)l}|)d;wmD z@MgsCSlaH*`AaNjWAG~@zqeUbJXR#mE(i&yFupWOxWp-Rlhbw_%hYpvA+GQd#hYcln(Fo%tIz!{Xu^!*xB+wWm3>hHUH|BVOW(C`24Pq0@jxya-Ov8JQ+ z1oVwFem|i;hB;;u$Z((9GpHBS&kMWP2jpvN-~INHzpunIotPZZ7=^}-Oiy;-hYA>)ZId5 zyZ?Z)Yn+c8D*b>mRDJK~Oxru`*!ee>H}{W^3bJS94BWez^LsKQ#~9XjY%fA_;y3%N z@37nV7XKA;e}Ij){<^^a`9L0RKOoDepI-RI4_GqRi==#D>8%Xx_%lhKI6V4ygwIRp=iAiRe=LC3nE4dQkl1#^6 z?`t-v=gM{YF~nHbdRR~CKS?Zxa8Y@8Uqb>+Ir(|U4?M*^OG4hp&4Rh&T^pz_smz8A zAI8^pab!9UmOpg8;^JNX0*+J=lyi$L!hvy0|1#ke=TFV+*?Hr74&DmPWa53uhWLZK zGR3n2H~nVQ&uEEf{J?R)Cr%J#W({V90u(wM3+H2_J*E%rz^8T2l8a)jy}m~4s0O_h z#t)a`y1+uUHQ|@CdVGg$jBMVKdSyy!+g`%%_uT!+Y%(?pFerr|0c=faWrUV4UZY;vQylY`{%Q#20TP07_sby-7F4p4Fs_f$`XWwoZIefHml)##fWV zh7Bj-a~RUmbHq1CiN+L zm$aNfIX6Z#nT=|H&<2sGbnim!IC5^#Tb?%QQA=;=JzdZ;1Ld4w&ivGrOAD-VXik>z zQ0kJv%6}kkO-4qJjczwwiI~((^dtCJ31f!DUf*dkp*0e+`i{vRc_t2%uOO}sz0}OI za03%>xPb3}k#Qi#V?GBlqgp`@V3AGrO#I~;xq%5St~sAk+XplL?9EvxWir0yTqD7m zXz5Oa9}V)f52*I>%rLVCJsNyQN05~5+W1Q+cn7j-)5!9HwzOx-Y0H}OCrt4}cEiT^ zY_6H)jGiTUpiwO+BX9>pjV$j=92?tK+(smjL>Glh{O$l1bHsiKkn+Nw-lhIOcLok1x~K9TVGd*-Ylmwv0*l{ugFV?c@J)#XLKs07@xmm*aF-< z1BB$5!VaiW!;CwHndiq^1mg$Y)k9VHX=pY&0GES=wyK*W$9dxa`3khdz^1A2o zbTn=hOEmzt?I$6_dXSu1dTIPWk~R%%snv5RO}6vV8L#T)a?-=kjt`(Z$lha0mH82z zYRd)aXqs*sAqA7jW;WEDhk8l(Ne{2YljXIjF!5)^aUyaqmdu}+wGkmNvq1VDT+)Sw zO0QiEMppdVE~Je_m2o8fLek3g$6qt^A$^s**Mf~O9$q=*vPGQ7vK3T8?`;EBfH-HW zF1U71+PTprw>hk?g+U26pTX=#`o%2ZN_v&;SPA{NVoXS07Ih+(d|Ws|A-LsXnBev1 zcvWFJGQa_7#!5YCXohRh$PmtWOiGEW_3Fh$_$;GEio{BUf~*pAj|}mI%KfSg+v0ng zm$kYNvc}1VKWJdep_WK!ol8p#oB`i+?i6O(jdk;FIKND@+7*9YdCCg<_nAMyTJ)kR~L~~~{l%0p(TgKL3CbzOc_Ir<$^T+nQmOA zREc;elfJ*7HEqDA_HazS{(_^h*zlDAxnt(@Cb*8mmOiN_X=Vu*p%u5KOM08qpFoTi z=Z+DEJ$;X`khZjV0%vwSSb343R|Wl-k!gd1>2j~Z>G?qC?4Q=j|F*MU=00!4hCrgI zrW|n*hF+fc#~rQ))!}y~T?K8QBF4`(vUwXREC)SKCfZ}4t}2KPBQ!OQ4=io%jf1Y? z{r0PFps`HGOcFNIL7>h84fcH1^v_Z{$@SW4z>D8Qdpz`124OF0sTdX8)W*&jc zE5>wu4$P_51KuC}{}w~1gXk_N(qbE5yXEZTciZLG#uBDF2GH4;>R)Hl$Kzf+lw%@RULOmYxog)o8Dts+1kEyMZ1ao_PxBL04$hrMg?-=MEA7-_HVkJw0^Ba4+R$;v%4n=dY@za_=@ zP1;ee?QE?aVl)TGMM2a)`ztHvF8LyH+NqG`1jQ8qRnDS#Rzm;==X zQFv|6xG1>U0*@+^W;5M~N|@bVhI7GdvoGQs&^mYu1JhzFMT!=02-EIw(ZGXiG2;!` zu=*4_G7Wi|oA|^mnu!#_D3k?dU&H~(3brRF#O|b=M!H*>(2yTfE}|QLjuiVVQSWhw zmuIR)VJtk&E9Q2^<0li;^dkdrfi|RLWH0VeUa4mUe~nFigOAMK>+MT)vYd5ojQ23; zf|8rA0EWvB4SbJJrV8gXo*cm$i71ZCj9TuSc6$PuZ0Qb!cvTA+x>bxI zxghFe4v*(@PbRalB_%;@c{PK^c>|~hQ1t~6DZZ0QIHO`FE`H0s9yj8PX@0)@VFEWD&+BZs_q{u5KSK`E_gFpsX!7kCN6jeKTR<|7)f{c8ws7RG=|*Gi-Bs9N z%AX6#s}aeC^MyrdY(l-a0O{=%^RHZ}@V2^Is;1EE_t{tc)swBPeA1Z$c30`CKuA3Tmfeie45E zO4{rzp!1Rp70}-*-YbV4GP1B@lBCVP>$b_t3*4<{3RsSZkjxRsLD-dtP)BBc20enG z_R-^?+Hucb==4OBx)@3zu-led!TY~HaI8|edGC_h2_KJlsWJ{$C@kWkgfn4JZ<0K< zP7BtKHGky=U%NbPHoJJ2LSt=D8lx4lBmJ`Dmxak?nUs&8fbz>OnjTPdpuo6 zgP~n;Fv6XX%qP_|ZWzegcrne0UWw3LQY25OOSfPxL76Krctf*96sKC_yWdJ`T2XqX zrIG-cf(b`{Q+(C332iZyqQ|L2f=^jD7hRB_NlsZ(tYtegGJR^se*}sZm2oJ3 z{~nz+D=e;w0i;3t-9)|23_CVwmEa|@YSC7j?lbQWkcjC=1)lUUwX1_f;t6%MZ#wB| zVPBXDMPJ2_m#7!+$3y&{U9&+8yBcB!RIR!t8f8sTFPz`YnzCeF1Q|D;8>4cqxlBY1 zH3q&Ceb_j<=}EuctO_zO%Gw5wi2FIY8`Q9H4V-HOR#L(bpN+v9?>r><(Uj(qDPJWT zu*^9@7_3r;hVi}>rzs}>yKxcVof;kjoBqaHgdNC@;`B}B+=rm>H5nzE1^YKm{aSB< z)cTRphhp@2Cqi1YH2nvEFO$wuAriy}W==Su_ssM%DRA7sIL+d8AUlbU1(F16P`!Ac|psg(}5^9pB(}Dt>Ii(U!MgWPmXA_0> zE{K}F4tL1+;ga503)HkT+PbJ8PkB4-MfAyQ;cranrvc**sl!hv*`;xZk`F{B{LN9_ z0#oM1ZhnPvQEUOL^n-ijqL(IbrUmJHY#o61mtQ>GY?A0nThVQQ6cnQDIMxt|C@wf{ z)=A49zp;AH0}p1-skP#>2kN!m|yRu1`=%b>S=vdW-C#tb6y7$Thdr={@| zta-xdMdF_%@|*vLMv;RK|b&pdwewQ-~$3K2y;ab-V4>iV>&K z-3Al7PbL(_x1co>idzDnkHnwtl)X%;6w!A=Q4R?7BqLF-Pf^ctLw7zzqHz&&*PS_4 z6-n33)_fb`)B^(uykBFfCp)Y_ZMhFk(UppvTz=t7tCX=Ugr>-54d~*pG5Og!QB+c{ zXI)e+Q|IOIJ-X;#o*HSw#wP_%0)0(C?LSwW)Joa9%3 z4HbQKiK>;de5^3Jy~&@ehg6szOS~Uitc!!>^wj$XsoEy|Gk#aj?jKOZeikE4uAAtO zB2sc0eie?t``a5rq~w@#@SHv)TlTmT_p^kAEl^bx6Q;OBoqjFXEjdyR;csqW1>Vn4 zdrO*B&6lm(h;?<_0y>&h1ryWP8>ELPxGsB(krwV1zC*`fkJ}O<{Wnqm5)G#<=HND_ zvFl=j{W8rGlC$qU@JBF7y-xI@o1V+L;rgjaHEThoe*CjUq%;8AjdG zE4H`kNSCFvONE5Xa(>`ZAnA^oKz&jn^<)z9q*kQTesUrk=4s4`$mF6U#ul`Y-hN{2 zg)^=^B%D!CYXT@m$<+u+&-)~8rkQSRz}*Z2#YV`!bj@3Xcp?fp+M2k9j*k%U@yG8< z#l-Nzu1*&7SWeNtPrCOAO)(7Z*m0Mnt(CaG3`go7o%U4Da^v;^d?XAS`&w< zcw*}HyM)0{5f{CPAb2X`V)4%;GvEd|V>rkKi8Iu=ArHr|>|`U(P#Auf<#bDoWHjX~ zMtWj)?;X%CvR0R)uQQ`SKK1GnW9y{8vH{5j*G3+6SL5ZzGQ3Kpn&G~RJF+&GK z*7$;~9u}hNZV)eiH;~HGWs8<%PcLB5O3@o>leky48galUb7eA(IP6%aYqnK94oe;` zz6fB{N9n4(sujPUAVPkjK|`Yj^boW#fjXpW)}LOA=EK1>a-L1`IQK*$*cVAAc6-NL zfnZW~wv@jms?51XZwf=j*A#ybsSkcWIS(fG4^X`qpN{ej0H=c}-yHrdO3jo90b2q_jeCD0_4huCe*hAp>rN}BSwSQt(12Xx zY|+ekn;s;$!?==5AMLFypH20dnTvt=osNT^h~$@bM2&)ITCoX;9~i8Y-7^9_yQTA@ zb2f5y$p2^H>QEG`_bP?O#rs?@Q?i*?6_QDvmnGEMS>&a2wWxaME;!) za-hUpO8gq0s|LgVeb)VI#Ku8ImY2vwj_0nv1i|V+)PNwr9GxcYwuSI&gy^?5c=0_9 z^jc}?k>3@8(;Qf;Dc4s&X{ikIkO|l7Ay>|eizjVUn}?Ug@aMx$9czcOSI3~YO)Opa zaV-ErfM_4Xsq7Vw_UFHE7}cpw5WB0M z*zG6vuB;68=|sZrHofeMKb}~D9v^`J-3)T7hKe^K&cCN*S3wV%KCVaThG2-Qobt{j zr)?XQLz)&L*_W;Y80d8Q1)I954Ta}zIq_O6qM0J?XhC|?z$6K~>S|I7{hjd1YG173 zmDRpJug03uBGBQl^Pw@Oq_s(|QN)G)Va40Gh$x<>_bP#FLn(;m^Vo8RK++f;=rWl< zKZUT%+Pr-6YAfkiH&QHozm{`q<%LkQH%0kjPz!~3CGEUh3*3SYn@L+4@^~W$({9L= zC1)o}*`SI_tx1Kn99E=i+u}0lKS8uLCCVF3i@;pKjSuMVZ!o~V(G7Co&wjAm<&CRy zWxg~;eQyZF;!%u(qZSlboh^Bid_#_swQdR2t1NpLzpDgYuteP}Ws;%_pMa|cTg}ma z1I#~RLS^dhqcJdp-)-?aE`TO4 zuYG8w2tXpEfQ^#I*N3QA!td)zR27r#RwNlsx5`?e1phSfT2LG+RTW5MG>qNyKudEc zsSz8gAE}5t)Mk#9#YNDIS+5!;$bALVMBagoPvxqUE7T_+Q-mue&h?n|i+Rp{=9n-P z-iPDFSRUQCta?qfm%T|f!B+{pN|M2_W3v)&x*j5YvPKzJe87C3?t!+NChc#+UrjQz>B24;qwKotC-{|5c z?Pswc=UfP;Wu2R#J~vPHXNH-eYCve4gO6ESlk38EmZ*8gNht16+)G^$_K%qJ3g7?W z3Lo`DQTqhJYEgzBURd3iMDfT3M$w1NJVHt?{*$J}7xWw=w+eey8RZP_ymrbHdL{Vn zeO3@2Wy|^k08r6SG_b~@;f=D*4gTKy?vo0{ZULy%WoKmy-C?*nR7>cZi8#&p;^89a>H*&m1bNazWr@sSvUL&lXV#NV?1EU#W zGm*Ums{@<1$FE*#hodz{FTxl_&f~wZ0+{&A{uJocTN3-F7sQfRy>=A8J^(6N-O`OU zQb3;z($a;JD_rDGP&w#+tUga4F&6jLmcqr;8$6o8w4_1}Q!^{5TBUG7{uD!5R09o2 zSIlXySnXT(4rk_n#P6zD3KT=xP0A(iy~8KRy}C|hrxoe4L}>|V3X$(6=3w#3f?8>X z7uiAHg@9j55`ZlQGSD|+jSmu)%9ndV$pF#=kz)Lc^TvbwP!yC)V#=AQ%3$2V`PCeC zQkq$Z2aCz6@HNzdyUbBY8fC>o^ZgNLXd_%wSr`{#5Qy*%lp^W$Su8m{LBR35jq(gM zj5IOhG9kQ?6SKX^c|KmORtJfa^tzMzQ2?$k;FJ|MYfN{sYQz-pop+HxegI&*xL>Lh zeW<1Xuje_SV9Wg&EVOWbT$WpQdnnyi_m|Hl(KgbZDe(}>4O{2c zA&yhz(QcraE16v$apVVa*?{Uq(X0#?*U;}nse~!2jZ!;JUT>MxIhdI&!AYL!)mGS2lpdBMo zOn>|%_n==s2(${!Ahd|HShnF>mOu~IQg;UQ=nS!ZEKc~&P1v4kt{ZCdZO{>%S=f$DLy+1sLaJrJ3Jzafh)=8@@1D_J-S>RQvSMrU9hOX0z4fFxQ-FD5Z3Rbf*>Dg|$!#C13v`d9o{i z{uOn<5Yj`8<&+1gAz8sy&}5D2PI#a|lWH+3tr16YT0# zmKFX5f}Rf@pTBg#LE2alVm008;>4U%`}UQaTZ&F9BLm#{Vzd8> znRTgH)|RQ-X{48pYK6TWDLiY5#{0G=!N#bUJzT9=Cf3Z=h|44gif4Ho>D7m^BX~Z0 zERdqoYm@7ywP3^ z&}o_wRBVE&!~U;KDTjUN`}?q^>4J9X?zhq-qf1xaDcWNj(AyKV?i8iBtWf_UZBq4X_hTalt$_=Ig!*xEePb6~u4`w=H4lh1D|-{>6T3j_-WxUEYip7g5haRAgQml&&+|*96@gM8`MD>{?IId(5k3H_=>Rqo5xx#KT+w}JA^1if&fiQ7F@bi7tzuob?aG18k8 zSm6RTG*&>xhlAv~B>c~WauZS}!M1C%pR|;;91+Cu)M?+eEEuT7CpEm>$SYf1jgZgV z$Qt(`snEf8XP8wdUQggN#J*ZkI0rDL(|*K~39j+R`2Eu$WfCel12lUeL2?SAV|7fP zucs2DE&SY=1rzoJ#6uGA>fH{0!{%##o=&gl3|m6Kc0+Yad|ZP+1a%SF-A#~>IDmL% zmJKaSsEwM2LEFX#}aP&1`BSDhxCi`>kOfJiCZYlp5q8^i?8iWMz zPw~JR@k>3HB)w=qm_o;oRvvVq;bMKyBJqAuJAW`ym6Uhvgn~Q!D-#82TkLY7n+cz7 z(eaCrVE`Ve8Trf_zh5NH&p-wbC!G_-eR5bbpR35iMC6-q|uxyAZZwzcx1J$Ep=& z+mskP($@8*Z_%+%RolWpUB|-1E4I3}&j52X{R!)c{miD9KQE(1-TSD0KU=QkJOjutFY+Xj!JprDa&~?s|w+Y=>$gzkaDiIKTQ}V^#o2%*lC43pe9h zw(Y%&@-Te^;dZ3QxMz*+jZz;TM|G&xeuZ5By}@G;Mo^;jpzY{G7JjMS4(}%(CF!Jw zskjo}auf^~%tfjpyHa=5)U3e1oN%wyT1btOL2h1Xn*(M~Sk0OkZ*EJ zU+rQld`7Vm5dC}?nD8cd&Jm47=SW_NfR53kwH->i{DQF!d29qy(Fq#T`3`buEMIQ6~t0M^!I~xsFBCH%xT5XY!l1 z)iKkz9zUN+wSO5=anyQu1_@L1Fa%}-@l}0p|NMrH%7_MVl6p+!VpT`$GKZ>%1Ccq= zD%e4*WJb%P38$3iAXvNPufR6A9_JL-n{Tbt-L81l*CMx=Iw;gyIV5c0=EK?XOzItQ!pHiG zTcmEMRsqXV>t+s1iF^uT1CAh8v1{#j(BOX<*UE$4a|7!2yRa@I; zGe*7Q&hwYpoPyn1$i=iSm&SxIIYVB{H`+g%3fNXLblF7K6L{6SUwx>px*1}wWB&0w zS3#6#OTorc?YzB%;7K0g<(5RI*RWc?mCj&`b`6^rpu2<|6soQ7tMIJDMf0~0&3d!$ zJ<#to;q^N32-6f=v@nb4Kl@f2dC1wWB2+ZeS+CSF5{_4dr0hg1p8PBq{H51zb-DufvcODaZg$}v=6@$(>|}=|0eY4xz?}` zy3iaW48A_l9+v1ZBCli?FnD&wWetM?@91^5-(+~`D^+3rp;uw7-$&mppdUPlGH2kdO|io^EH^S52jRv$EmrDV(O znq5~sVzs<{D;7hKe>`ghujK+iD^+P(jL~`1YX5ltywyMRrkq(AWD`)eIebZ1=6qax zPDl;W-tn>Ls!+SX<64tmZ)&EfZx_bT-z@dz8)th?$6}~jT{<&c3+BZ9NyRC`ovSJ? zX1G55sAF;YfkQz1{TcO5_b9cU7*DhBMTFVM(ZFkW{qc4?X5hA4-rPD^79RDjaB;c*fR|8zWPhXOiz39_ z%*D53!1Zy^8eB!2P{;d%16qMmB139} zk86W9Z$7Cnp4l5*bgqf2Z%N{pQU0b>W&v1M$9y=qP$RP4XVm(+tb1AX zkz!hi-RD|!p@7=xCY--k9bnwm7{W_gbg@oL8R8-HUhSBKJV_f zw__e79U>!Bm!k2at0^HfAKY+heq8Y1*8bU7q>_iKHx`g~zdf{?_7*?dK2m2T3>A;yD!U!DxYcctH1#>p6Kb(Mo0|*YypGETz`U z7{{J&FKBf#v8}rc>W>b+Tkn15{&-lqv%THUv#F(~oxptLJ@ZbWNZUZF#`V>Q%JQw0 zFwOOrjhwvY%J4@1G&jJD?H6sk*OfgO1zw8*uDw-AY`bzd6Wg26$k^1(A>mPEpYQ5m zdn*g@8P0LnJ~i9MyiL072vW2}OnIb*maNbQN9eS=S0JsLSG;3Jz^f0@YW;GM$_@Kq zffgYdO`nt}g>QJ-JTwTHHk-QP7zi4@7T$?dL+%zSRw?spEO@xpEqF9Bv9-6cK6+R0 z+`bh4w6?&KTc`sU)B05j=|8;{9;HvtXIL7-?$Op@CxUmqglJeAvnxtN*8z5qV3rVtp!l5<`9qnw$Kq*0B}i2)T>&X!W&Fm0+g+JRA2 zdfJ6~we$OR7a!N|%8CKb|E3Fap=#y-&*rANT)x|+uv?!`f&Fi0B+p)QHAbyc4kBaV z;B)dN%eqbGM?2%gTOCS51#T}oSDZI(xP?r^z;(cuW+|O$iGpb#4Irm?e@fEQLh!t1{pYB9PM31Z?mzUG$BEN_xn~UYUcXH;Bh8JO0{0a7vZQ*uN1M}dde!0#4 zqINCfGpORGjM~EBBM84fw~*%bXou$`Dd9WO?I$0yj5hUv$u0VHmSw2cZ<4TH74dtDT#Jx{I;(2t@@@|@x~u=Zoat7 zE$8*I>U0+IeNZ3q3W1Y+oe0{5aa{E9<>a<9{ZD+$ut}WNLv1FOUX7!xwTGd=mo@+m5 zB~CrcW5>SgW`%O?AfY45HyN#oM!Sd4MgLAs330Y+#69CHIrO=$WNBf@TQ#S(VBxZU z1Ndup(yi+DOIzb$7I+@O_LtPh$JSMfbK~Ue2^9g|k|O+M~kMkx04d(Pszi zWdgh&JXhTZhr>ITOIfQHqrEoW9$SSz5H^VI*BWM(D^XK@1Vp0i&$u?VqEf2NrIU`@ zw??&*v0q$0(30T6#pt0{e>pFR^+8d$6A&+Qbz>@Dt9xlJuBNnf05Q-Y^2@lfKh@}HY#@PX&5&33e2Y3iWb<) zYUYp5efaV0i(0Io9bSemFU*aYGAi$ zT?pS3T`BXn=Xq^z&`1)O02yW%%BCySw8MqngQI zYFhxSSPY;0#%}1c+ocV@toA4QjVoHx?|$Rc&f|Am9xKdjYn(PWENJ(()}tYN4W$#; z%>YNxf-yDI-c~gGekm=a6X)%p>|bFMyjt|eafiG7<`Yk8PQp%TxNUMv`!Yv#2R=R5 zw%3E1`OWC78y(RB^zr(g!^`fGZJtfIh234zvN`V}?QEsTl3(I%%{(@d%xsVP!7cA( zP<4aAUwVCP4W!!JN}t(T0727BjB?YqYt8?Eqg9!@=YKlu+1B_I;eVC0=ozn)&6N@J zmLx+iq?&_g^0qTta{DVJ%Ikr-&=bUzu$`OMn;S}LPCGso!_jTa&P910htC1+VC!b# zuXHv35cf!hs+PWrHb5e|lgrj$sla~I;j|u73m~C$^VU-GmcBh`7B=A8#M{^XxLFll zZr)O`6Rsu*tZ);~e*1a%e1lD$Vt1+S&HHIrxXR+98zJj0jizRrb^31K9e}BZKjq;S z(hqC38P)%wIqWO>&bu1}gmb!s)%9w?Hyy~x`+N1k`YpWkU@N;Bq7>aE_4rNLsZvEJ z4_BJYTHcPoyb^E{_Il(IdENdDay^O-xSSIa^2GJ~EaIh1(qH$`;A{w>ym!-(t2?PC zyl&n9DG)tFJO)zZ9dyEhJr-ds99^e>)kpFj5;+n*fJ{#Z!f!{(>9;LOu_L{oMlg(H zR-fhoHyECb12RIP6Z?qYn3RzDW{!!JT)C@3wrea20i~ zg!TW5Q|WHupYJ;xa-G9K@ZaWX5Ha|+Xg&NWs(*2L zR7I@D9|)Lpmcj?zm7;Pn56pi$CO>^xuJqV?)7oF@N%=DagX|tF$KP*`YIua3#S4f2 zKLKsKl{ks&l!JuYVRzD}i9kfm*IId!O=R`>6f%gYxTgkd(Pl@b2>;asNLFpxuTGuH$JJJHMXxc6+%(JNXUZ zTx%V|uVOI52LBf{oN4{Q*`5;ebZ7WZUzQXf@>}|f>v{__8(N_#d=&b&NOrR&>Cr8H zuFZo-zP^&#I@)g6ZMA@)IskB9vmbC4PE}uQfxxtVQF~P9ZIOd&cd7f_`F%u6$Xv6B z$El-gf%~K~5E8a6FXv<0PWDoDQbV)-A6tIZKX-Q@v6FSV8RBKG?G>HnEX@xg@|;fH() z0aM6jbT3HM+m1F+ZEUI(EWgX%*cLs}%$37Rt+hd7x*v-;V8L}r8*%rOFix(5vf zzb8Q1%Eg%k^AZ)`1pFqTwM0qh)Dm>N}ocN+#Du&kdeLP!-upIOZe{<7x5aC z=3n#XTc(eJt$VT7Jlk^ERy5z{1IIk7$G_dY-`qARohv#z`el}VaQYAL!l|EObvN=q z+coo4xAZd4*SrkjoUfVf_{ht{*O=%KoSyW+-!(w7#LL+m+9Km9+L1;#=RIJW{qjg5 zH!MJ^#O+NB*F27+#@)+SMLf$T+h49`jzWm!)tUi>3#VxS$wfe{+qUifsraR2!*>a~ z|0T3Y$u(`f=hZ;UTq<}KytX_;J*egt!pr-U5Zi??3*#Ej5faLeEVXQx0AZEJxR>Z0*?B!7K2;2_T>WM34uP*IVQQ>M!3r$4(Wu_$@11EQ108y zZ*y^yHTl%1CZ-~Wo&sjf;(yqg^qnPUJlNH3-&$Ap*v}JgiXZ;drPQeY6{323@xAPo z(49w+pgwaOu1j&Bx}+jF^{&76FELAkbKZO;CH5Jpw?Mt;s zu0(9{nUNrbT}j4DV)`%3DjpTl26z?-0W&xY+8P?lM?x94(e@|@e2_ir41{in%WEdk z{u^`6C-~_`+<`&g7r0W=@7lmF(L`(-i48W58y;Ye_w#iV$l$W+?)d!5KPwT+z5yir zyup_Ed$1Uouq?eVYQ3xM9C?(f1S@#^^9U?1_<%@}rIB3tlqH#_PS_QVx1rpvRUm*_ zS)V1E*zZ3+eiDDv;u^(Pq@3h+jdAsbxO6Japns|jD`cH{d{&|~1T}M}dH|JvztR%F z=^X`#ZFO|RHN6KfB#qy%4>A7-0A_hC^BSUnCU3ux<0)f&8xgrhR|&m-kjd{r8gj_% z;%!LJC}a!e@p)Am_(}|Vou^4u1D~!Woyp@E$VvKjiHFq`MLtOJj?p_%>7j#-H_2v{ zs;0k1zvNPQa8EFeR-Rsl<5dRqBUSclgjiSIg=(A0c7#MEGoJE>wU1(?-*NE~Vd8)) z5op+oFob~Q_hjZk8eoQ>mgA7J{N@B*3mjD@dP7RjFMN@MDI|#I+Tt-zxBWz;H!ue~Y7a+^y zvrF(=qL0I5miE_&sz!Hh?l&Qh1!8)glQKxtrfgdhtOED#W9{ic%jNDSJ&)q`vT_u! z@jTa-ry<(x+qy)r423?dB&uFsDuc2#A&4jR5L%54gfq&m6wSas2tCYcpn5d4AaU%c zY^t=J&J2!1o%PVrk!pimlQl^;nODEfflAN`CEII>T}^>hC9* zX8uq)qDpec2)oMM&j?_~o=zygNh8qgEe&=+xfpoDu795C!-{{(_zJem4585byPRL6 z6P+C|l6cdOEfA5mOi}yPt z4>+F-7U^P0C3KSOaF8j-GTeE^et*tKr~w9{35yTvjkA=o(3g`JGy)Ha!}le| zWnnCIw8CGFS0b23LPUlYzt6R*Mde&Dk>0GYRO%!QLR*XoeD z?zMfO5!+7DSjr*zDe$GjFi8yU*s&{?WHSu{$*WO*^HB2B#JSHqx3xq51}@Mlyy(0o zK07Oo0B5-zK+@)4TcIpd4PH3NMUv&u!(qQ9i@PX%DbD{=?RWzHaXamoXqy$e~VE$w5ok6949z@x=RIvErIn6Ci}- z(iV04p6tT%aV<@A7XT>sQ2^!I43`!2Na9ln&IA;VYG0b{-%SYpK}cqFq>apA7c+?Z zhGBuDjrrkS+(xWZNWn_u^o&jb;Txhvs-~7tD}0xMK#PAh-**JGMi=E9wzc>Zs0b~U z=?`>E(2n$AS#D=iiM|+<@tjBp+ugLeoUSBk{?P1Pbi9Uy1huGGf=7OKuKC8NpbW;; zqJsQ1XXE>Y)Cw|z8g4Sf)2V-LPEC&yAiAK_QViB5S;pZ#z1=e9lwBABcZJkUipXYO@2X0H}jOb%uMfuv&#*+YZa_sN>hcC&|1X4J3YP_Fzg>U_xG| zE{2HAb!RLehv_%cwv;hTRDWJsRPW1VuclopcH~APUp`>&?7zk z)R>JoDp7l9x*vUN-no1z$GPJ~@w^V`n;I!6s5^4F)_wvpTng>MrIVbbElM~YGo~$g zBTK6VVfC89oU2@o@vR4u@0KG}-3L4YO_0C=cf9x|Sygt@i;SF&`itBI9MEB;Z=ka_ z;cR?qjOtbQ19Y2gxmijsHjO80o3H_|d*0&vm+s*Z7M2tT37-Jsi3_Nj2NuUEs{Ycn z5v#Hg#0KcU=y@9xuVrVho1qMPvRcgcT_t8l&{(fe-f+_8Z{DgzCt6w+9@3qOIRN3^ zE>oPxxz;0whv!OlI#Lqv^rQl+L@3@^nIAGt+>lvD+^iffLb&6B>aiJ0@tIm>@AY@@ z|7jYF$+v+xt=L(EXw#;$q49U@c_jrm4vsQ2;+VMj?l#7UTXIarkRR8ovt0=~iCp17PL@g+wc6h*Ko&e*if^#=o*i zkznWauft+alQWGrSYU8Ni7vQ_{##CTjKtuWq2yvPDRBWzm#99&fCf|nLS$69u*QfN z79e0ipVO2n_U}U*W}kbcus#D}0Er)$%M91?01)^NA*fIU)2h4!GDZZg^f;LVvS7s; z>q6gpaEBLDKvVqa=L;%q3VrJ`+VaQx>EDDZHjkB^qkt@yg#MG*z>d&oG;+y0EGG-p z@(bhfsDd5%z{$~`S$aSOt40nxOfn*u!egp1rJ;~wFX&s=5F?XrN5I+h!5A09EWp88 zo>(zqdSg=rMr`GYPv49b$fFuq#tP?h0;fSqp z7Rd#B)d&D!+z$pyBS{^9Gls=-222o7{%~mmM@36vIT(VOIAg&Oc?p-h+`(CXd?)1} zl#;lX*m1)YtELA_VREI)?%v1&37SQZJk2JE$bC>)DOoU%1UZ&^2Cx(T`@tXz2o?0; zCHlOB8B>VD;F4nDBl?zrIl4&VbC}>LpXJhe3u`n%fQ>>0BR~dkF$Nu?6*9eX;CH}L zrGd0yTMRs3cm=0BD$me=o+g|WvVkwbuPPYAD~9hzXB8yy5; z6Z$Nr$_f!#F=Q<)!|>QtI2Q{})4}p`0;?OvFa3+hF-v#}Z zgATkHAIw7H^Kw^$83z$r#(T=M zFQ2C3Pm?rdU_PCYD$uJHs^}4jb}PJ~gP$KeQ{VGWj%FHKC@wp5>tfLA2bJllpcp#+ zV9GHxDnS~ElJqo>*G3mq14A6-nB>?(QaBj>0jw}8a@FdO1s(vh#D|iM!5XGvo??6g zb*5*(gQ0Fo$W?4hu`MQq&nsxVF$f5=)FFChv+; zA}E@qWYU`&rdH(Od6(0>(pYBt}yb(X-d?kVkAN2-xnF?1Nu6HXr9ekgY*P(slDuKLaCjJ2iLwMEXC%s$A zUjCGGk`MSbrFS!6`>L)XzuKyxmzBBZJ56NYp-m$XIL6`S&}`?B0#IuM4}KDx`^`wv z>Un5_qXE1~9TkT`?U5*e3-4nlpxk@(hCWcDdHn10)Wxtxdg+h z<9J?fc(VEhv3AR^bjWjtA0nANc(D_N!OX>NVRU0uQR}>WBu%lf)=AG2G`upzW_a!oc5lPiDUxt$}vks-f{_2n3p} z&x{7La@d#f?gVRyvpPY2y5t`3HY+b|s5k_&5Zsw5YH4<+9VCq?0&8#rs?jWRlY|qh zzK!pkufw(Dqv}iR5=Kt~)-N0W?g|{PnmCgtwNJiov~~eRr5qKz-`GP68uvmnx-5%t zCFg*WLPhQ=+o>sLWNS-N_YEXXNx3f*cIQB}hk>&&@@GA-tkf|r`+EkE6K&`3T!2`w z4_u5=D9>#gI!mEno@m>T>%!&7i%T>Q1*dSeEoYsJbigIv%6Dz%?9o~J7(AsJQ(sLy zV@B^F7PXYd`027-0jQvH)V)cYFg1TYdiS43>2M)mK%BzC1UzmVP&W@0Q28srO>paUf}?# zJ{zW<_1 zvb*Qo%`?OHuqfG5M(7;WN(MD4@#Y)Tu{OvetOl^Vs!>=Uq1R9qOcZL^P=Vb3sx#wQ z-@{)XamwMDx&I&HknMoq@KH^seWy5D5q=TGlkcFKgZk`twW~{=5DHE_8$=ST$-gw2 zmkFQY>!U;N-igZ${cu{59Ucp&PaU&*HKvLN=IQ{0{EA=na9TYPbO!@PyI^zF?KKvD z%WD2 z?@^5c6US6k%>$kiy>k$KcpMrZ;0~(xaexCG1I6rMs+8IWiQD>jwo9KPCjQhGMebB&u{PY>Gjd4$tR*QjDbWO#0@ zauxJ6ctOO)Nb)&pU4Bx<3|=(gDM`$R^9Cq=AnNR0mjNwW-duMBX{1wEKSQ`itimlfifGtFQf~4!en6G zT}$+;ylvdl0dQh50VDfuSM{?1tXs^SsfDH;L5u>Sy;Z7v{U6H_g~H zW_@B)tnle2!bIk#4q_fhtt?Tht&C*^ndo7!7Udtr0OYA$;2rz6R!4SGqBTt0@AWls zq9(p%m_MuaGUxH_#x@!2mc47hX@J}l*)6&q6PxtRpTenmkl=gbWIIa|w^P6RR9_@MgkXHI7%cs#^%b)qm7jO3Bmlh6*eSOFLK_&m2chYL;o=4$TeKU+b z5&i%*!LETU8R%qM ze~5`rbNKVJ4l2P-O`A9dRbB5658C2w`jyIbI?d*;>dKU52D@C?;uyB}X!PQyU^!mu zx|QMRawXx8ayDqs&E_MI1gQYyiwiyGN5`9yjo_g9ke3*_LRsyRAajuwi=Vh0a>ONu zh&gi@(>?_0PfkB$h+F(QscQ3wS&Vz;=Mm#QM`FU1x8Fq;Qy{&6mW*EFiOn0W@MiTu znsLy;ryGeQbhy+#)nVtP&i?EUDbMLEh=sH_Vzg5N()U&w0aXn~m!iP&eq24!g(Ev5 zlRs7ESJ8geDan^oC;QU55wXO3Emdpl3+j<1VAKjeK;0CY+c)zi*G#%J%vTNM%>%yz zygn`X5SKQ+hVVUJ!V0k*hd&7O(^B=B&?5O$qR@NUi2C~=d>^aKDhJ?=?107#5WT9h zOHF9W?b@^8^61$;>XU27l6#_-*fND&3O9~FnwJG_66qC8n;%$X7q^de+$wmejfBNz2*}Gqz5{v8iU=t8f;rv*X~q7q z(mg_-d^dMEYseq#OOR6YK*(~)z@q=wWY`ySD*{F_ichNhDKlFVZ)ly)6>@y)Bxmgk zIr0^~Ifr7YPe6_<&mq?x<<{c^xvWHuGDy4Y7srA(P0KN-H_S?f?u_fZ+=u-!I{0@#5Gd z^)@2rgYtMeWSLdRIZ{5^4rZqWR8_1>GWqNk8(BA5P1LxiKt<)A*t5^mY_(@;+p3#v zS4SUzIhH?*N&ly@6l&roIyjxE0~jJ970C}TsS&B%+~~&yL=lRphmwv~_*{a?weeom zJ(6yt5i-#rlHChjMcqnfGB|Uvxp2JiO>5>{%LVpQ)UG@c@Tt^RB`9~q8aGH`k}2ZJ zyS4AFTx&PHF@`+Xd+k#g<4%rl3=jMtPw*`a8p{b#UaJK!lXmT3hF}43C+mYg+c(Ib zwGK+$g5r?BC`znHDV?=TKvViC%IFkOkX(xdC!0nIP(PJPh%1YWELmmVI*p^CJ*tEujR`cem8Mj)S|KNqF@35QJLQ*98Pq?Lt zlZWKx=z5>&KkrzhK`ueU`@UJu$fQ4~ovGmG;i7WCH{k*YezT2(L7tkrJ_G9vW$(~; ztJcUMf?Kz$?O93fTdj{KP^7w4&IIBg6#>7zl~`b^P*FW>g%UfH)7n#PoT(nbCnqyw zBLxqj-T>oYUviND&+AVKT1|RoK5V7osAErNO0&UX0wY`Zvx+7Abmg6m4>REhBxJVe zxbbMdA?_6mJ|OJ(+2txfPUbjA_L%V5H^QWn&5=Ng9QTbtU=L>S-%e*kxBGnJK8tYE~CWuCk7$mOui3HwU5l>DZx)~e20qLmqML!UHDNtsbCG-=q&y7RdmE2+byy0Il z2uIwerdv{?4sESR@1~7K2l_h+HjPN@ax3zQzKs)rR>`DWqQD{DPRLXUARLc33t9x^ zl+nP#WNFCnKF-Gi{w_7Ts%)yT@~X$nIr)YQrrNPr)Ye5xeJe*gETg%}F(Yj#Lm1dn ze@phyb`QlV-30jVHwyXNpW5ky`U_SAI46HoA_E2OF^vrVFLhh{46r4e>d3It+WW^r zi!o^3OIglv3qTE8RzFtsuJ1u&Al(kh4V$cYhztU{(N`2aJ9CO} ze&9I*ek90ejNs%*E@=^^t~MAktaDvcMzd^dCt%1XEMy5aBzIzV4t_M%A^{Yc`!Mg(Gt`((*o=gD@17VC`O38Rg*d3= z;H)TIaXSeCT+%CG`m+W}-|^^$ohPJA<)J}YNs?m?E)OEL{7_Fzp#i2CN_oY%E%tj{ zVzd5zb-|+Q3WE&Bn$0_H!O{F?a4#A-$4*rr9v89L4q{A3+^?yPwH7$&+sX<+#26Gi zAJj2k5Xn(bPR1BCL^me=OYkHc$3gJ3$Y;Se?1 zif@1NHRQnM(2WpbUsT1LR{W)QPB*pdd%X(MBavEwCuKs&N8gDkI`AJ6`#;xSFEP=x zCho_W^vF5|d+9<6<(5lw%9J;-qxX*5vWRBfkJRumvDteytEAD=ne)7Qn_p2MGrOXJ zd_@vnQ7$oGdzW4WnfF9N#^@VdzC1EZUfya}_WV-yq<6R@Q!ik@K0W)gcOyzx+ucq9 zbrKm|N_5nXJ!%#K46;&Sr60dA5MDLG(KdpqN{w(aqXk|eRY5-DTvJ*RgQ9$nIG;U_ z$M+AY>%EHo)Zp15`=B@T>q92>*dpayp9`mAVb96oxAV?sqF^dAe?>B%kczR99QLUK z3XHLvtoli4tol(jJs;M%@h5YbaVM0YHyGicH$kTEjxlJJhT?@n1qUslO;-J0)OIxwDa*e+3 zh8Jsf+PSRlbGja=E3KlA=cq$VcYDROi<%YR~#FylhZp>Bb>2-!8^Zvb%`|S@V7=Mpt_Q2puZ|?z(#?cpIzZ#c8k$haQkFzI6&my@h_z->U+jdHFM zSa$=l2+sY8c2)Tql1&z7poQ$Yru5DhuBg2a3i3(@l$**I(UMEwODu1*uYAe(C3?2| zUO)zR^H?~Z05fRzah(hYY8Q41kvW|@y%LCCHN-{?rsxt4J)kaMbV?kv_x0!l3qF~a z2!SDwb}T)&k{n61y0nbpgD5dn7YuG69Be1|Wv1+(d zW8VKz1iGm2O+x0SFSa73Sa>3C03nrluCWl5O2#T!JGZaajq`oL`-$3~HJPbj`()k% zpL_MM%Q8%3RXu$!W2T5ZM(ih1kp=k_vLezPvzh(t-hO-wU(rZxlw5gIhmvVhgHcwH zI8m}_P+Y&?k;LC|h5D`c@i7SSr;7xLipx0q&uII@#R6o@k@D0k)|ju6iW>7x!!EtS zna}8DnhRBRX@rq5fyZFzUD@t1qnI29$!tRycYI)L?d`|KXr=4=|Lh?RfpPD*kqXFb z&JIzs=&55{8$c@NMZZ;MJV#A`YF#)bc_T`xE(=*y}O{+l9Ip31RC(}Tr z!pLY6S~5p#RqGUD4tr>wuMI`{wvsxvg-%z&T&wAhA27Ks;FG-bf9?0p9_>A{NL3yp!63{mNrbv@kYu7Jp@g8IQ3I4Y@sLO1z64lkG5=j;XstHe&=_1hp^?$Z;66reMTO??w23c|cefPJ?8#` z8*o*u>o0^(HHXC$Nr(+^3ni;Hrk~2uMqR09sZnBwUktYjtL4a3aY8a47`c`b5U#IK zNz||3Dv5k{&P3;nTkJvU{5+M#0mao7gA$Ruf;eOY*w8%_=3G!{yRSt;6v|nnz{iF6 zJ#dp3G!3ldfivp{zPnS=fg0{hLOF1N^uFx09jQQ|0Zo#n#YLN%r!&#{@gjrTuVTUA z{z7K!)+P2i)8;AXPh#sG*os1R5)2teEf{P+pXjIFpkV{~hx6YAuW8hGDlnMQe?8FE%* zBt;_s(dI2-KVOe~&1G9GXlo!2BpFT1VZApGZpvexdBZXR*pUj|59h)vbci7q!E4qo z#kQ>Be+ZcK+l*zwja2d1Y2%irc=>^D5<2Ctz$V%UgjVq;6d6JX)7xwE%VaB1{7PdJ1lG;oEbAW&(pgD#VS-D95=_HC;TV#bcaqySelF$#1R7tyzKKI@Wf*1jx?P zj+aG=3OEgeDZa*UpH%2>M&WzE8c#qpi^+p>c>wjM9at>brCP8J~))T4Y24T8-sNdP$Ryq$rf$Ua+oLgQ-rGN*c}gqY=>E(X-0>}O3@vX zVPaojB|PE$HRaniGh=3Kj`U44Ca;)8++|Y zDjyD=aCYgsp%tfidA*Pb_h5vzd=n=hK6OiDAD-+u4qY87{y`ip!BT%ed0QAEc%w;&)N!>!0RTXH9qPTe|HWjdwcc+>>N@dd{G>@8>E){;0D zneQT~ud{53=uYCKN0Yyq+!zVwXx0qSXxfERnKg(MiEuO%#6ZZC2u4|fl7u;2%ebAc}H=Gs0IVN8xOW4n%R=)Gm6VH>Ox4LHw+&V~qR&jM$w= z<+Yts!my6UXRy57*RqDty~q*BgvVbOU6-UQy~1_(A{_;2M=RYCbGHVZyvsF>52sa; zn(>{cNJDLaifHE=U#N{wg;E(7I9hL{qEY$rBp2Y0{6R;cxVszZSq5IV3>i~9ZXs1@ zx$4f-<9Q)>vp7LyKV#0{S?ycLZt6qHT@mQ?qR z=}ff!NKCvftIRM*;hL{1bKC%5FT{bRL#Y@htag8j|65Ib`Nm&w5S3|^u1}$Zm5CyG zCY%N<^f#jggUg6EAf%xBEG>nW<^VGSG>)`{-~-p)Z*L>iJ~0&5fZAx{ z*lq6OxYjIJ7`GfT;2py(0yhKOB57yA@4DQ-vXAO)WlA84bh9X+q2j$(Gp-EDJEipS zw%8-`m-s%n#tD>=%jXKHj(L#F^c_Rm+xL&JuKBy-81XYjz=Dj$2gn7`$4x{s`?h_# z=!{DnoK+Anf74W>r7?=9!tj{KC zI>qL!Fz&V*#8^AyQ~Gh+N+NxH!o4#a#@Y@m8kFU5E9*Wvj{~-AUj8(d27gR z&kt5W+F$;MpVk)J%o=8WZWQgSIm!my2;FyJX6`w4H!l^w?Ib>BJwI#{Sp>kGy?8+9 zeVo^_A`CX%jrPOUVFao`Z;)p4j9teQf~`S#n*=u_<}TT5QiuEy8|*%21zj|Wn+5|m ztoH!LF}I_p04<{Pb}DV`o3bQY$6-ga)LcE}1TxHY^mGDFMsMKzK!B=%HK{jSh#PuLhi z=tYHxM`3+_i4Q&07g96c%WBCHGN6{%+|Z4t1|J(2Yd*c?k~y9&QQYWMl|j_WlZA&R z62Xw9AY#dnd8m?4ndkk-g(SL>0_3m_@liEYjW+*H4karcb0e|j9}z@01J`cew(cYy zEg@Q5fThpG4QR@UJz?>f+1<^Mj^eCYif7CNgs7F)vIJr_UHFOX7NQVqE37~4#M14= zkv^!)mkAV`RkXm{*`S|e#d9o_Q{FuR3oM9x{%*ZH++syIt|CfoNZuAJyfY>rf@!E2 zXCexi6s-<3cG65Dh0NsR;k#?IeNu+FP*7Ln5PnFaQys3tfag{{^mo4oIJp|cF40Ld zfBcZ5d^!f{`UmHW^-zRMxBj+d%73tJcr*)!KxYQq}``+?cjEP-*MgB3*bAkk7RXok5 z2paAziM*R8`}vAOIJK*f(DWzwq#^)+NF#qO=z5s74_%q2WgyH6h8BB^bX0^D)bClq zQ?u3~^)0678d!A~`Q$x*o3=>sjfXXI$f}S9k2O@0cO(!ZWE6{h@(&|^+=)m~vXXvw2R*xG%sYI`?kTQOlg&`xBBnMj_v+N_^R-D)Wp+t!sn?3n3~&eyl4^E8VVW}+3j=R1f3MSeell!<)Q(K;416r{LAAr31B+M15ic)EXke#HTNC`oG_DC zMWY+L$GPxdlUH_&z$S5g^s)aKc@tnCIsdObfJlXv-yytb0q^XEYiRIYP_}_O??H{} z2FbU<0q~5iWcS&e1Gq0T7IJeigyRS;wmdg549o#@_z$|VdwxL+Sin2mD&!6~Y>6M$ z#8@oBsYQ(;pa+^JJ5H7DyIzbau(QfBaZ7aj8?VOzLMB!i^JuPak88C}af3x54K~m; z8yyT-I7qg0$f<}%IcTaw?$e8%6Y^sxSm`OO;a%KZrW**l9TM0RabJpDL7!{?Xx&nb zsM(m36^_Hv4&=U_!3mDIDim>@RU*8*eY~|=<;Dk_Q7tdrfO~&jfj+ZQsLhZ%vuBR8 z%Izhn6P#y})#GA;L#@1I93{(Ni>>}KU);_Nhcum~rRDu^CwozHwVZKw*+*TUY0pll zs{!#IKY~zv(VuL?c3STF0P!h^dY9>C(0G4jkAC#CO8?_+pl=Z0s```J;P|IsX1Wcs z9m%cNJ0SZaVPNuZd}$c3uB+}YpHCxevST=M6Y$y7L_Yo)ps5S+Xl$Kop%0xYtv1ovlM?v~>5_1GQSFfe!-h?Wtv)336a-Y~{ z57HJ);AzE~2?mv;J_T~|XFOD=A?}d{G8cG#v`qs?mVNq{1#*acE-8cXG#Va^MT#cQ zJxBGG7C{9tMOEX|`*6o$W4Y#-$~7${<@SYgox?-w4TpEmv0e+-U)zxLxdxhM=^%j7 zJ!$1SuH2qNz{#ajq||C<87RTm77pRVQMJ5Hq7%+j>p%f>>oIPiTrzz^D_&8Lu1<|d zc^eWm*T7f_;(j*m3tT);GKccu0A%)DhmGKpt8J5#Go*L*RNoxQEPLp$SyY>64p5hv z@Dh@!u3C>}PYHsDU1;nKabJ8QS#nkleF=VFb}sc2(fkz~!X1I7s104)0V9KUuid3m zB&?FfYT`N4`g6~$wMxKU0m!tGTh%exKG;AF6}V2t$X(I5Tg*Ilt0n{FW!MmM5bCs3 zOET;wq^*AsjgEm{Ph?)2Q7x_s=NwSe-lxYG)-FfNMi^Xv(DP~`t9vcsWDYa zsX@UJm+kFJKa)>Q0yYLl0?KDe53h@xq4*3}HSodJ@JoT8rH}c;!`2#_qXK?w31N0b zWZQmhJV!)MCc~a3&~!&Jzp?~=TT2dk;e6m)c>-J6{V-UZZaQx&ES-rW-zHLeqN;K( zr=X=WC&QTKJLo`lqRwJI;9~C{wS4deiWQ?NFh`kvu1IT=aG736p;APPc3(6u8ay${ zNt&w=yDpBnQMi>Ph)-jO7VONX>tiH<%;`N`wcEM5*rf?JC6jvJg@hu<8M1~%aT-5P z0OQI*I*Jsx1`J-dE%{em;c7_n+aWx9NOrl}zeUfoYA^PF8rMy(oR#^sJItbbB=n3@ zQ~d;6%$W#?7m6e}Izv_r3PIbcjJN;|6>L|XgK-!(qIt)2q%n4-QM~7jmpjr?;J4k% zS&0)-2Ilo)pRm?B`VS;yZT(`|Xs%QXc=6f>^=i^R&kVjbYtdr!rq7S;0{O63?Dl%>%eE z4TtG=Y}rg2KxoEtln*rO&_3Q)?A5fc#rDo(@3N z9FK=U8H9wMeoW__kK=M!@w~dqu`rT?o&twWVCIG(m1VctrT$_skkVM=nS~)npvK?g z@;d#WG#u3ge!U{!iba<@0+7LpQ!bafb9Go@b%HaBomq#NXxQXnKG1+F()d^eJ<%HkpuHw~(JqiTCnyD16PWAdz4{XNUh3UVjf`-AJ@(I(Vh4k}T z>~2!6eihuaU{v;CT#8BA3>|(C0gooVwD2)uK38uUQ0T1|LR!HpTqlufsvHLkW?;PX zelBQe11MNpSaqc;3Sop@IS;a3NoGjD%)5d*Z6$sgd07XIafAx7`D<{;E^bbR(vN)R zQY}11*f}3u>I9dpHbt^c!TO9Y{;Cnvk3)wr#sq94?$~mdctdx?t$~Psfc0}r)S}!* zI{HMe@cVFfT4_;kiYo;(jFZ65OYDJB?D@i-wILr-lHfpM*jp?%o^xC3Ur{aXn1@~= zLR+`Z5YFSG&DL5@ObtVk|Cdq33V&q?WNsUmC+YM!n_}yh=sGg=+ydfR;4Eq&sLGhF zf>SSy9AKkeB#|9`aGrvX3TlX-Bs4qf7`Sq)F>MA`adhuYht`%_D4fKAHt2BK9CT*y zt`)F5M6Uw;&r!IUwGVo+6Pc%1QV4%*GzWRtYbZy*oDVN(mggelFdMQ>!0?~=MoKnA z8T;!WC|0LSH9rb|X%iFHa@SGQCBLk+tRShw(2CQ_XuLn`q1bO6H{3T|-wY^4F?jN$ zivm{?E|~j2-*1+R?hwTR3e_*(TH=k%ITmKAL>PfgUB~;7@x5S{s_?Y6^Y7-T-Ev$I zxZS=BKYTt=2i9LX|80E~MPZe89|>vjcQO}k14|px(s_*OY)b|FVK=t_!`W#;OTOm0 zQ(Q5q6+c7pCFfiqb_)=_BS-Ik5?7yw-{#(R zM127Q^=fJyOd9aKU7hfPR5fX+!f4D=-4E{otMeyfWWe9mNOt23wuIbOE+_oz{F_fY zbz_b_k|e#bb7LEjyo<;cY&0rTbRr z0X)ID63FAMW7*>!WL$DN;E+`*`?S;E*ksNVp)WQbbtjWGU~7}egSIS7gk}&5eKn>^ ziKyI+#g1@+jM)Btx9XsO^47yd6o9YQ;d1UTGytc}M^BLS6-j*kHRHOQL9n6|-wFxa z({UhwPM@YciNL=>m&Es(T&($u21s;Tw$VMQ?8IETqDD`n2R`V!+^Bb^h{^y-)Sh}X z^1FRB`C118w?EQd2y-pZ@ftUtQ@FZ9@q^9K?<2+t0k6#Ax-g+y8qyrdZ=%2tK;=1dG4U!zs_04Kz@ZQs)11?sVjmbFKrqrIJ`lM>xP#JU$4y2JcB7 z$&-(dYD@uL%gDD*W&QrJ-WnA9Eg*Z1M~~I&|HGxQns8+>kU696(Y{b*EfzG14Xc6P%ucMNZn;p=_%hvI>51e9aknK!p0&Ok5Q>bqx zx4Dwd^Q@0U<>&{q1|ROYMp$`}F|3}%yeZ~As+aoHjy;lv0PgwDZ_krL=&q*vFMAZc ztc%M^$n|tx(AjQx1Fx$c{G4nNpKbKgHd-z9qw@_@yIRP0M#vt5;_>#7e!%S>z z9}DL_UXw3u*w}ruwG>QF>?l%z+vhRk=RrqY@jj&|G)uXp?h^v}ipHsCaL-1CeNIVd zl+{to06qXn&WvbG1`%(>R&hpi4>V1%Yr$%Ba^B5&K{Rv?PrVIwwRmS8wX3QU z3YFEoyjjBYrLH_0dtQP9o8E1(tSKECYYdb3Ow`{ZM;{jSUVqu^frG>d&W#><%h81W zC^5&y8!7J`NX)Eoel?z~$228$xklZtaUlz0MyH}~5D(c@24{jE3NFOBHi^SHjX)Yy zAwfF3vAhqLb_my%0|DTAK5+Ln@x4c~b9jC;THWu-`Xqu!m=l`a%>YDgrv!6h=G1%(t3h zVzzcg5fcR>h0P_#l}x~x?M|_P>!D+!kzP63cL+dL1^I~#Tw?frqD@EQkiT-T>~_5C ztp-)sy703jq~I+(s&b5hDAS~1$y2G;-42C37FvUJ z4s9X?s5vzZHROstHswB=nohLyUMuP1z4YfUh zO&t_(a?0bK!IVG>0%auJBdwnJmLbD%Lh2NdYXR8pMhAgYoAq$u;Tcp_>}z z31R?$C2vfbrFO=|;uW019(&^`-!yjx`>_(mJ7U*#+KTHY9Gpy>65GSyJVBEK=K?yh z0f4W;ntcv!HSr<0hI0MWAB11?;R<9W6la|w-3A8fRT zXca&wN-LaPfBmwp5W$w-u2mBGC1@STS!C9(wg2u4=?BMOS4WCC+7(W|1lM3H5MFj~ zKV^11pJ{g||4e+m?B(O?6XbPwuDmDX9mC-7BtM2KTTV`2xS{=$tT=n6@A&E1gJD8& zXAh=WZe3wFWl;r5U&cEHTP2x=5)H)--# zE`0n0dz5>OADfaQtn~q#_~xP&|KoCRc9(d4KhQuS+S8YNAm$a~L(d=#D}pQaT2ydu zl`k|P8t9ePp+;H3>{nU%=y#+A&qBe9ho)ZyeCN6W~k$u_LAwIeVqkTSU+o%@9 zLigRFocGYk7#`wf?Nr?-v&GFt@k^AGe?{cCwHxS5B4|{vh#DhDV9@YJIMCS$5+S6-Ip-iq>Cl`Zjtm_PIL>wkcyTr(nlg8(-Q=@V^~#L<9QoAU93;e{4@$0o+?ZY zL?U!S+ms4T^xfqcZy{u6DI*jRs-@V^u|bE}?0lv-vAP9?u558JJ+^)Tp4hA{euT;a z3}q_!t#*|k4IPjwDhd4jE(p%!hcbjG$0Ad%Aj8#VM&?uYFcbT}!V*BIFhCEb^>t}& zlR?kOymhxK|7+Z4}td9&pkd82qJP<+sUJEiB5B`W_m7A4FP0dr=M=Q}b-Zta z_YcIS=*KEn20>gsq@^*S0SO!IE25FNQ0k7(cYq zlWy2izl==h1EANu=jqXDuh)xU-h_4c7q4j!?+DJU?Av-ox8zmQ7+xl zoxG%Eh`aR))zEmPAy<(Y(2v(IFE^fypnLP4)W_}3rk8;BhykFelT)(nF18NjyHGq8 zj9?6E%-k;@ixt4qiYgCi4sVss}`ZC7EmM^UA0`TDPqm++|Q|B0t)XY&g3u4KN0ibxM#y4w5Gkw)&3!nZV zt%v|!2AFv;p5>Q)hO(&Qk+bGi6-NUdBgRqfz@Lf}L@D>eV#Ij<+rGRwPGF9-%~`W2 zPkBXiA6)KFy-amwWZ(qQYM?fMaGmpaDDu6Kl~M6xWTE(!c0K6UUBln+`nHklLHPX*@&n~2w@v1sMJX{SWi2FcL36fBRK-M) z3Km{*ahfb5#P~Im|0V2wxt-0nkUWELpO0h3P;;(8T zv#C&|DNZK9pgBou88kJs1tTT=`KSXE4v+f~SZzIEgx0Z088z$Z{Wm`}EAZ^Okwar0}@hO0kA!$*xLebK0*r7R+Cl z%-gprh`WSt9lGxoYrwgtUU5LbdM3-9DLi7}z#;uWVCam#epv}Y zwFJWAP{Ec4xGhVA?`3R|4MFJg-MmF@!&XGCR)@d^%R+IY1z5v?TVYzkSvcn14J$Wc zPOgUkUuxn2UqGP017uLc_kjN&64zblqf20?3KFU~cGFRw{>mQ(Pf23K;?_<6cFIOx z@tL^*lX5VvN+E$T6(oi#X!`xIPtr!E{i!5o+CGk6JjO~r=&}U-fudXtoO2%F3^lJ!HW+Vqxbc<( zsbg!vUL#sZhq-bBG7p{Q?$CWJ^jo>PRqiqk;Jv#(_c<$R0hSqla^#`#;}ZGnmv;w1 zb`Z#j-)@5>Vg9h;^pu4ssX$$zO7*u9Nx-A@#N9o~qAKIR7QkN^LI?C8d|K7wmSKr-v-8!A4=wQS!NUNuwZ5=+{;=$8=8 z{6b1dj4;f1y&e7RP(#JLOOr4d*O-OjNtH~kUoRVH*-SSl#FHXGoq2R_w1f~uwfrWw zgixtYb&pKnx=7&0_4v=&2C-_YrLhsM2begTgMd&XIa&U}T)($S(4SBdtd@TW!arz$ zKsXJEmf zW(RB?iYA3r3nmqb` zlHxgqc=(2Xj;p&sCgs#$BWby#13N|U_-fG$SoC^$N#T006cQnCw@`5>f>xks%P+aD zD2~a<@aitq89}oop6<7aF$Nq$znm`t<|K`1WrVD0sY_@zAp8ah3uiFu9_m;d7hcD= zRpCHL3mEi{NyC_z__{(L78x7r3SJA&d|l67ik!_3@hY}J>rt1JtiFrmSsGwb15*hq9}%gV&PcPm)XsVQost6tqwst#KHA+-%GCat|K>J z7x!g-p<28&W8hl=N(z>)dRoHh63b@+lI=jV$d;i^fkMg3n~xAbq55}O&zS&t`88AX zwC%5|L0`BzS|Z$?c1+7X>U7yetBo*V6m^BM7&B~~%qq?wU(CWI#xvyh6fk~9TUaUU z#d-O?$AJ^d`4&w48D2`THn7RE>HJ5-n-O1VBi!!EV=JqWwq2{Z&B~kze%2w8 zEXB!GSF2$ZIJ(@?>(E?|q|2jae#1@VSA5*aQ>l64%yhk4Et}$s$b6=MOlY^!9+;`X zT?K)+E>WECA3-f!z`*Z2OzhG8YJlR{VW$i-t+4A{XuiCG)_4ublWEktl}bmUqG>F~ zw7XN(f*6?(zFO8)Ee!o-!jrp)p@2teU3d6rkNHPLhNN)@J=>-p_tgALmjF8v+XfAO zH%Nosh6`yDoVB7ZzWodE#?~+G3%3?ikG_$V6I52v*kr|~lvt{&A%mCfPg`Zr62)pE z0eI4`%c4u(7D%i(pV}q-ni04q#(H9as6kld__SqIv?l;%}r>G5FRmTWjd?_E!Qlu(maL_{9jAhAc!z z>hd=xKGzBK!qO8JWs84i4yfYjTk+nxo zlgM7ODW&L8g{5yFl#UD-3*GgR91h!jr&=@@z#h0AEU9#t2TmG0;%x6dMQUqGy`R|^w1RhyZ_zM zSWrjhoh+ObI%*Le*-QC8-oEZ3s6jp`^MV<&Kp);VxP~#*YzkrFnyHX5V~NZcVUn(k z!t9*38Ebfu4)Cg2FLeROcXfKZj-O#DQYTV0f69sWM^q72o+d;cg&a)vDISE-<+}ev zhF&p1ye!;a4KM4@9MB3c`x(>=rXn1WLi0z4aFaFTY5O|hldi}_&n)uvaJWaR zTm-FCf}WgpBi8OSr2b%520wI6)jKDsTu~h`RHbHemVzXI_+i#Cf#!h~_dcJ}B@PrB z*#*|@s9mG*8Mm_?0t5FK<{@>&z^{^exMG2vUDh)0ThbSdU=xuY=vIq{7heD5{2Dze z2U4qlxh!=Cbo9CtsSEOy+_MC-z<^hU-qph)uRW%l2T0-(FG;*v7XC2rQ5$nf0VHU0 zUzc@Et}HY}NjZtvZQH^wFm=w(jt|d**{(j@u*^iPANG>^W&Yi!ivXMVJhn9rf@Oj| zOvh{*g*{~}!pp7eiarNP!r!r5;B1+%vI>>zL+Ey0=QMsWvJb$Gk1q`f*FK zWsOKmcd*mTqVJv7n-a!Tl=jpXasL*0rla#$1R+fhYoyEX3Ff;tTI2w zKmWFkI%72sT&93*`iFeMPU z)R3kiO_XE4VJ4%4clM(?o;=^10#`y3NL$dC4=FcA<2wc~yu6kGU%7JE4Ed&R?7UOP zK!7lT+SZ460{AD(WR>Yec4V*?W56_`vv|R(s~F?PWXUw!xqt&cNGh>1PQ99FtpF!1 zO;-A@4EH5X8c*rxq@cnfYmp|Z=9r!#S5SX1rejN0stm-f;7kqi9T!aDB7s$SM@VsbIol#{EoGkUlxt=nK`90s+2-C6Vxt^XZ z7LablWd^|f0}lAWFa92YV+~ROrd4wM8-JckKoQ#SIvq z)SntIB4rGW#|LDxsvuh$=P}hC&VZX<+{(su(dxSZ*!h9=cY4%1kU2zn8N5c$r>w54 zVVt=6x?8)HrOL%xqqmn{k!F@_lt~iN_?Ae|6v4%(o}8>q+k8Nm@(7ZI{kyY{A_oz1 zxFA=qWZuyOueI`AMLU&j{!^c!iyqOGngUZA42?D(N zP&34=;5aC2S^Zl3Q_x|x6kZ6DA>4Yc)P}6#$`nA#fr{*14ZBpLEHwxW8k^s@n;RfF zDbY}G0yYmWH=KG~11b}R#3oYw4Vo~nnCjSi={I^xzMfLOu>bHdYVsyVioS{omkWlp z6cjzACIUwvnruqAT$+oyGaH#Hq#c}?zghHu!We4<&mNY3v4?RS2{0k`hkrViPey$) zh5R3`tkL_^##q0im=C^hRMa{Sklxm@%Bs!sDatJn>kn!VPwCgG_%6rFOAkv;u>DJI z8*Jp^Pl?fG9ik;P)Bbj(f`0X685Il&3Z#=+@S#;@lx7)jsvdGKj~tD8)YQ7IX#D%h zBwL{1uB!~FBf066cmSR~kl=-QjYc=pJSk)zbJZFpX1@&>aXal3+}pKUy5PeKu64Lj zAoBeOw$|iJWTRz=IGJjNCT?A>V#)?Vn&!vl$X&eN52v~Rq~+&ynGNZYkQ%`xT&#mh z*d5)fvsS7vf6W*T_7(F-0nFc(9Lkj|jibZIK)Oea@WG0aEmzTRidw4LAOl_prF)qY zc1+2(l~Dl+LH<7wcCdrH#lYREZoY&AvLS~r3=YK>>|NHOM zf5pl&Pa1-ly6YvZM{^ORf3k2HtS(S^wA(={KyU(3k6fz@9q!grTG;GGpfUVBk6M`4 zi@JmIN?e3q$kBq08*<)s!H$mZR{#@WJ(8Eh3|&LC;5vHTF-|OWU}|{!bSp^MtIn=7 z03rf+b!;7Rf0@jc}@Vc+~fI z>hhhAmaihBsd@qlbc9VhJR_i*H9SsC5H0osB@~S9-*JWx!mCzkHchF#pz-t|(j8ad>}QI zOy|WQ!t?T3xW@C6Zt7<)x{lGNM-{^AFYC|7GS|$PZbIqZi~rG-W3(`1p1p$TY*sv3 z|G6bVR6m^KJI_xX)nbYBPmrLC<;bQTeF*dOCwypj1JhJQHONlYo1(GcXaJfn1Za#y zT#6NMAW8KUq!J?oFg$vW$@UYOK;P(!Mt^$>Na5MD6157K#Wjy=P4jiAsd0Ejd3Fea zY;9P)q46Hd6=Q0twWyc0v|&(uOXCtVFuqtm`N_tU$@1l2H6!jvC|}!D1>~FOg+%`EE26q^^6v`7LFyb)=2W zd*_)8yQ?^eH5ZsE06wXZP+H=CETvxmvPEX#@lUjXgU>^LTVH%g3w?>0Hq>IEb4we$ z9b~L>%cQuj%Y(6fXY`V_zU%CgXrgXmbco{O+hg}KRQN<}9WStZb!A3j7|5ji!z zi#V7Q?Am|jTY-p@l1JKir9y>%a7YSeCXT4(Ha}>V2`KFCLODoB1e`H6=iRQ7pNmwS zTKYBo&%r&}8ASNwnvbTpny! zo*I+@)PS;&X|-ftm89VOSeeHd0s}l=o)GJZ9>uglrkoR3mX5cc`?3De zpBmA}Bx^`8&6EGx12S1;Z$KX0=MeF-Iu6mpF(dIwWC+J=t?M-5Y7GMTwQPt?xlfhe zcL+3El!#I+M_3n6dU6B1dti>D!I2V_b=VhbhLLq>7G&-*)``-+*kP^f2UE$y5ao7D z$t=9VFy`mls~#@eSh%<~-6KkpYFB&5T;Mfg^tv_)mjV6}3g2fa-6uH;b<>5cFu-M@6Rb(4fYPMT@SO|JMy zQ*`VY-`1J%xCrIumiR+RC0l>5!mr697sae*nC0fPzR=iA#!#HfN_9AS`~ zt=Y9qkT8=FMO+fIMPs;d_<5hl$%wPBjW;9u!YuHs0i;MWf`Do1ZY2I+&cg;#>o&mk zx3EJt2g9V+(4a1)dKMgWfLh1gvQZ3|iny$4Jjh{h!mfW61etSg+=P=s(^1nBwQ5>v zwL*<^k;D;AqNRQkrIzqR`~KfY2_DU_54aH=m0 z&r6^Rj*Aviee}Sh#xv$(pf-XikAf&lgD8u`MCq!0n9wmkn0ejv4NuMZZqQwk8cB~! z$632R3I^P06guBP0prBLY0aRSM%7iwKhogcSpI26Ca#4fWMMt`Y90$O+A%E}P0%NY z2I=(!p0T zps-Uh$~pUTA9-ErY+;C|D}V1xe`kTw0LI!n=D+TF`*<@H&1S%5s>?$*&{c(0Yjh?_ zR1pOZwCe+&U3`ft5MS!0$f`*V*Wli!r#HOs1eYID>67+i@FhZ92LhKc_?!Z^qmAXb z{8}bNA1<{wLj`nB*DoD~Wq@~1MtMg=u%ZYj2Q3l@a*b5zqY*+v`dD7zi~M(KIR(pF z`WLG=oK_>@oQD#uaOQ3f<+*^8F(a-p;Ao$d?mfa@tLoh~wjBpU$d!46YfrqT4ZA!1 z9}+UNF}X`cS^!bTx!fhWT!zB_a~s2>Q08Z8qsWa^Q!0dFsI#?xqmzpE_!z&xn&@2> z%`8eJ@A4k8vKqJKAx!4k^cDo4(W!Ky|EW`~T;8?Z(RbTGuo8;$f3x8h>-Su6t&hqZ zpVN9Q%zzsffv)#f7tQ}Kz(#+g?CS-@H%06oNrV4>G!}r+g)GLn6tY)F6nhK*jV{dC z(IgnfOhpR*K!zQXVsBcTbr zBwkXW$1s09G*P2kk@pT2JppU-E%!I#o)2Aj(p?l?;F^F8)Up?9opWqn8`_uE50d;0 z1c!m#rWD|T_&fz=L0b}eQUXL$H8NiW3dOVf_O``FQyUHgLt^u*-Pjga955+mF6$V2 zSy6I40Sy42d4YDU?XjmEuT8JxVA&LqE3lbD@|?gd70H}L_-cX!rwhhf^)<^IC%Eos zSzqsNr|F8)OJlEMlj{6#n4i>&M)Wv)GS^=Uw=Om4^~3j!`^9z)QOReo48=u`g+*YQ z%)>FRT->^KW_LBX;>a&}5hd~kyepZfldhnJ9)0o8nXIM8K+UQj4|nZ-wVBA)3r@0T zHs=AMd56WK*K8|eYca^a<}4G!6#`ScWJYcSL6YP#S!_HruuV#X?cLU12-r%E^*JZ1 zGxII~aM=s$P)`8?73E+fOo+6mJuz;LSi>C9Ju*cI^oJ=^wu=b;oMN0doxNmmC(*HG z(9{3oz+2s8Ky!+v{-ju)EmNAR*9aGhtCxh~*p=I=7d5KyeLx$=)6ZAFmd11=h|$q* zrgVHZnQqoLdCfqnVe;)TnH`}@uR--zoa|gr@WrnR*i z?S3QeC5GraLb9?dC*jj|X$}4;T8?AENj;>jh(7yQ$eq$#?~DBzr7p{Q;@+Ij4bWd( z+HdSQMw#w{VcH;&*Eu-SD?J3St%Wp(J?RaTjqV8Ssj5+x?rtw=sztp6fMSy56@G2Y zOvT@`f!Js8cu~C>(Yo6}st;@;G_`p#+>~9a!7q4?)oC zx!f*2SJH;^(3G9n6g^si`pqaJ0x{)u6xkX-d@!1=pcfMq^>muYrg+w!BBnzWXZ=w+ zCaxOK;wvNmPZPt)z7E8w5`(l!LQy64o&#jz(2~l%a+RXCeNAn40x}ClCz5;{RywY* zzkiZOg7E_+?A+vm5`OHL1+i$ID1shj3=I{IGy@zxjs7k@&&L0*!)BAW82}Pg>`;r< z*^O=s!`)hK>yiyI^ngRs2`>?a<(MX3kfXiC4?UMbP8>0egxWk|Da%7AnPRWL{dly$ zeS3k=PpbY;!ewkKD$G@%A%toUn~e|u{Uw}IqcYPau`R95L-C?T8=DN5LF#Y3K z&NhT|puh~oR>lZre|%$i{UTIbFEFJTVg7TRYf4Hd8BRefK9X9CvLHm29Z=bWFd_!W z&AGPbUDH2ZnleXslK#e0w2lL+EfM@3k)@u!q>02ogirz|qhOsYh*RcxQuET=l^yFqp zP5dJ?j0M;LSzr&SOkPeeNCa`FlfGKR&bKW<2`oJEK3l5dLp~4GfEnMY<`lVUqmOr3 zFC6X8WiHzWf^1J9TjEX)O-6p197qEZK@dG2*-(Yh`f$fZ%hX*LE&-L(wXKtKh0NK( z|EPV>`8s}+XH9StA?5wVZ&3r`1pa>)iySqRhOFd~X6I$aa;;?H0<8|FOmHlUF9N+H zAObi6zbYgFh_Y_uP>|Sn{HYXvp$|$T@6%&OwS@`m_=-o=YsL|B<*WwVZwc}Fw1DwM zX&vgM$en*CXa zb*h`1)0t?2c~dt38o!K%A)AtB`FJ+XaGUIO*OuYbkqk^Bf@#4VWt&@Pnc>Zy+XuS- z!H&cIU9Z94ptj5DncDixwTLB#$ut}tq7T?f2h@xE7l!A$UzBn|CU>j~rXh=#fn`tB zMz)l)g;=)mu#2Nv>o1Zq>w}8xVIl$qc-jnbVK)R)YYED%vth@JIx}EBg=Tb8^9s^y zulhHQ#t|v)OoN|TsY$6Iry#N_3vD4uC-$PNu%L(Fo1lv^|9N~VTcLf1K zV{gd65jjGK^#h^QzM!!y`GoUXY;NnQj&*S%UE!?95>#``O3XN)(csNWL7Jmav4L|N zN!L8v&?}}(P(TD%nEXQ_d zWZKiyjWG=UJ!2@U2p;%Tr^nF>(a&)KM-)bvIQ;22bl`| zQO@+=ixXaOwej%lEMPR_`idSfO%B1SO0s%IXdfTJc`2biHI&2ROTGyceJ0g4D3=@vg6AL)w7l>r0x_Mx z!ZkslB@=|Qb{=wc@HwpyYl{&EVLURS%XiBnFu8V2C^s<;Xvg%=s^rG!6v1Nt8#V94u{5AhG@g%@V8K3E zfMIya9K4d@GdxHNy0!SK*tn>@ebYLwUt@62cpbMi?vNb^DiYE*esC>5x^f(sG#yLH zbf3Je8Yb6gHMt`zW6{DcR)A4%4wZ}ze1Zfkr{w?W$7(_F4w!y4%GD9-UdKRsM@Eh> zVe)d??JCm_{(bHZS^cu@+UiA<3cEVz>j>gry4k*fLK*S()`_4Xxy#9lh^_uFzW~yJ zpeS>*51(fq=M_vIJHQHDm@1CZSpERnm+5 zRh4aMJ3>Z7Q%-Mc)R^bj0O^$4j4>5gtzB>~b|?n2on}X3Hj~UrhOMZ)OofBiBBbrW z`24}k%q;3gi79c-56Hmu3sb;Q}yWn8;4DCZ5(fH-?VIs|6`f63fIxP+wpsVJ_MJFn80f z5S{iAH`HQgGJ&#R9a+TviiejogppYm^to-@tPw(58mn&8{ne=5lGYS;HS($)=aoVg zW`oBhzu)QBA`WqHy#dk-!Dq7_tW3(@h&TzPPLUp8^fa_QJ!Qa?MVB46=u)|wT9lR8zAZMCH0gaYd z3O#pgCL9ygx4p6v?JZS!9 zfj+@oa5LwE&W2t~5c{1qh09k3ElwA^EGxt(9SNLRglWTo|d=GxW z!S`-k(PhpEQ`+`%P0l#`7zH(v^;qaO9Gj+kb}B2TvF@K}DSpN8($wNF ziPHa`mlN!`*}W)*tJqUULsqV|l%UrvGgQqIfCN>HE@-u{0 zHJ2{w+2Fc#AG-A~bzNN18xvE}S8cfJt&9nu;}Z$#$rPfm46Sd@a9kj0h6y3N6aLK- zOOrqNTxJCD4()TVO_kK=jOJ?H3e^l^k=po%5dP2ry}y26+UlLTp4feI^_6X6yqyKu`m*BzE`0om7+^|d z6&k@N*LBi;ijGP>PVGuvfJklRddAx48R6N8KdHf&@m{dqa!osOB#&Iz7K5x(zev{+ zj}s&OnOlc{dlxMI`1zO`>4!#oRSEOoPB8<%Zp3q z3gdBy=Z(|zCt`4XJYatuLk}j=RLoY;@`}1#@SUN4ViWiKK({0Ni}Gf!#1FJc6Ubth zZdIYc*JFY@eiJ1j9W{>(a+Nb zKkL;u)npgL$~8R6sYxJm zS-Ni*@NSj0%Yxhf5aMMCTD}7N!~w?$zA%CGbbp-hLoEw$j@gcxVLJ$BOW+eglsGx0 zG3xYRe&CY=++_t$js=YmL@-B0)CR!7z`(%3zyK~IuvZ+N#zqKPBr!t8nqGDkXjSgP z^k@%P^gs3i{1?Bx4?iYJuI$Y%L{FUXXM8c28K8iNVWkdg4#g0c-H1+GSLq<9QBFu3 ztg>%)smn^Hx7XTU_3DiA8D(wnA7N**45W+>TlMOns=5*G@vG$6jeD^R9Q!p2=SOZJ zb4_-^LS=llO_vUuKP6=b|MNBJO=*N>mST{vXN&!`BMlJ@1Fh?W&k_oC_ixapGezQ7 z+UvLH(m_&AIvLWSM%uDHwX#az>sN6s2Dhp>*u=mdzd4mLGQ{%tcyf^<+3qc6n^eZ{ zSjlDlr%lq9kR@4WRUXU2S5sLLEPu90CFBMd=UA;Nl+ud*GAyeC>1>e7hYS&c|L@)& zl{7NMO33yz%4P`7Bvm%@^0hjfR<2OsSD&&gL$J$|aDyow^i%$0$ok#pln#P&&gO~4 zYn-&nr>}D4GhGYwTbxqLDEhP<__fp4vs*I7!B+p?;FK~lL^iCEK73O;NKz`BAq|GWr-QaUI;pER=+!+f93;gg)PG=$PY4If5ka4kHCvP}uA zv&ABszqt)Kc5SlG{$_~CbXl_cf3!u}RkDNr>eX+e@nM13&tdwx6^qhGj)Kn%TYVCOU03%33)Skyl0- zWAi8-^fkt3NCS-T^=vdo+8j|$o6R&K9TX$1ks*``#%_nQ92myhWRwn~u*S!e2VZ@( zX?*VXRv#O|FCVs!(m^n~WJRV7Dr5E-+R{PN(ex)B3pw|vhK{{FC0DCOh^6O!dbtcJZBm`d+9 zp>)uDly(N+zb2t{(1bHic7S;PTC9?Kb*ZL4Zw)JDibb+Aoa`=e{93<3C>_+bsWT+L zf3=z7@}B-jrbxU;<7-uVbcV!QBdihnlMaH@|M7(OoA1d986wi@OblSxHlK8moNs2l zey>TN9+~1+SvFk@m-;;L^a@*il19E{yjtpGF(wOte644E$e9M!-<>x2WH(DdF1x_* z>um2y2l<=-44I%4&h{T2yHUozNrKM;=M{8$tNH+?TQ{}?guy)w@N zd&3$V{pcVHAH1NhmG!;Nht&C!!O+|be+hx;KMq3VyRGed;cP3h==gO&8F%uuza7heU0x~V#7*it*zErE2Pb9 zq?9F=&vn@fMNPMYU|6X)`Vu}jkg*c*{$rcf;ldHdWu?kaa8s||WQ`7bS|#=PI`(X_ zO2?`Rqq+><|F^EuL0&z>vK%;iO09*3<-l{&Z?ML=nd}vTRnqnKiz z9tnG|`VThg@A>?Wbhha6Cqo*duU=t%ueC=9!H;wDq_QlJ4yw<wn(FcXhZmzBEu|NRv#*xY=pnNHI0*UMB;&01XBv@ zY>>h#Ir6kU8XYvB%VtOe>TV#64ubKrI2n#FX{$3jXf}=1P8!q)^ADTL_aa*^w{l&t zPj;iz{c*+;ox(?7w>cwihFE0FCg-blA-eZ7qyfa>^q#FJY{?H0wqJuYIw-oV?^ad) zj&Zg(qk~#LoD7*d&ueV&6EelbeEM3I(IdP*~{Ms9o(I-PH z(R=K2HXa9V*bdv1@nJM;j1Hf;8 zvQZc#QUbD_S z!f?w;Ti02iCl)&0VS_Qo&t)4ZtZY_wyYm_=PS()Iakv%%$(DvN1{*L5>A&e>!~2g&O2IdY-y zbIR9ZM+f!Smu$JXgx?kcu@c@?Q|D3) z?2p1mVazhiqFP+mfh*g2;A!9}V{Fr_WXUC}O}|MP9aLwf^}4ggTIpj6CevO`4cHsL z)=)pgwa9t#p&#DxmaZ#IEt{T%T5^13153KI%qzPkRg$l z@@_8cHn6O-{d|WXjmC`!AH~HdorikE*V;y)t>Mg$d&r)|&LE2|~Yz<*g%q3FF83v+PSy^=#IMOIz zdoMcZ{ezVw7>Td_+CQ93xmk8Adl|6omaR@H{e3QN{<1b>9xgUjS3*%1eBJ0n8Do4; z-Q~YaI6V^_<2U*B`2nK38_(oX+TwRthBQ?8U(eRx4wAL@^F+e=*&Q4Fb`Wj(lO-2> zG1tYQ>;%J}61Mm4pq5WkzEl;2ql~keDh!QJ)$5(E%SO0H*=mjG_hPL+>4SSs z9V@|@3ZG<1g9yIYW^Flna{0*r+y{Q~o2>01k1tMcAaf^;y)w@$g)P?h=LwbayS9Tm z(&$z-Y1}Kr|6+rcz85*upi)X>d$k=zJe@WHf1}g{)Enx%1YI}7MQ|rQuedMC34vH#TI2(x7DZY)-uXw$ft9!%fO{c zW0G)nWo%G(giM*Jtn9BVUF+g#F#P6w?MWz`A&O`L!B*4eN^le_ zrPXEg*s+@-6V&b420l<{pxy3@tL z-tFCDY#KR&;Rx2JleUiSpnntgjP*?#W&9}FtiJYQd*ug+X1XR5dixsTWXeQlD~o~U zT3|V8s|_`pYjGv|#ctm1py&`jcDQ&R&{ziVy+*sIWC;j0+0A4D;mEtG>B@kxoZSwR za8}9aaEl+d=WQgq&$mSy)EX7ri~$4x+Om(n zBxii*$mL4YWudWfBrA+BKH1!V_GAYLZ&_o7vC-EsGRBfkosI{?G}hVXYx*p?aC9qM z;jXXA*ODa{IwOs=MUT0`OXzeeM#Mkf&P21)hefC$^^$^;F8wIkWDo` zaP%^6s!6JBLxN1RriHtHR%~#R?ttVr*v#$YohL ziV;e0U29jSxL6BESY^>!X@iw|WQxS6syG&g=IggtpF^HhlXNW{N$It{KcCd+x||3{ z@%?2j{Q9-(&_Pl9XW6|j+wgJzd)?fjgXoj}nBow{iB;EuUwyODr&2aUDqmrIZTdS` zAk?+ANq_n%S16p!>P#7q;x~0KXM(@ux9HG8-&H<0khu&Pe61Zi=+)-|vUwtzuIpyn zYjuW1|C55RHt149zEC1KWu>t_uP?d5gg@DyMwd)+xf=IM*h(jyk;>P+YjlqI`tWP@ z%9#cnS(jAV23!i#wM|;7WJtt@tziD&B&BjPBw}G1ooUMF-(sdg)9RpE{tUud7`65$XtgaMtgXrC}`By60a^c86up)$wMkLgYut__%IqPc~ zqeuTHXLZnnv3k5Fc+U7*oKH^9G=Q(a^{fu^2w!t1LOXh-O&grmLEkT%69BOsAbj86 ztPXG-1&D{cP@+#u_72T(Zh$7>+Ov`eK{${WCzq8HJ*$Igg#Y-Gp>7!_e6+<$XMFG0EoD?^ zeb``EN*Tg}S!(04Bp)eXd$3lfkgwarDj`!ma9*sfM#%WS)~8%ykgUby^llVZPX|LY zNw`+nCamtBhZWs-eP%728x(r{jsRcdgB5!`eKNe6FOA#ztR-&5$blz3P)84d%Vq zl-?w)KH1^YFvf53wWK_`P}h1sTfZ9Tt8c;vUv<#Ge~%*=>9Q1MMR0txy;mLdCV%58srW0EnEg)#^R@0Ycpg%KzroUu6l1 z$3{q(aW-1rL6Y`_QKa?dY_qz242}J7vbuvNM7np2)g1&W4xg^y)g9Cm$*t@IckI|; zWiVZn*c^LV7FWWL!uG2Fa|0PGLctHd_FiQ(gx3DqJ|Sd?NQ6+<=I##qkF~u~cYC3+ zOm{01=j$fjV*qk=FNLgKWfuBc2OePxr_V5SR5Z zsP4zJdEe-C2R#bCyY|mHohKG}F)X#fayoU+G`JPn;`FZ59YlT3zli>8gzz;uy(Lp7 zGMnM(V=YX3&e`7d?#LI5eD6bHd+G2oMPkOU)!#FuQswLB(ko?&=)oAj&PFGN(^-P4 zZk<2dl=Y>{y4bK+g#V?xGsOjivJ+84!7!`{!-w5kx_pw>2Bly3BjJ{{+mk*eODq?= zJl34vK00lNh)`Bi`&*6Pk|!5z@<{!g$4-__5gf_JxTyR_qdVy3l+O}No6#Kv|Ix>g ziHN$#ZZdjLo=|oo#%GEL>|U3X!DgMUXUE794e8hUVtmmZL}i4PCz6X%ce-%&xf+*s z;O9}cZ?Db`WIEHsjnP}}3ZK`<5lJMg?Ecw})+r@ZB>KP2b_da}P1`Lj?gYyT-J5KG zmP9@$>=xS{`mHK^z321R?eX!%@-xx~JN{#eOaJxBs!3yE_bI)-b_cybT6vOX)b|TtW76NEpVjpWs}g~ z=JG6XHEB>Uwg`Pnc7WhWdTZzoqLT}~mleA~=na`-;<9(caxgrje|yj!1f^5T34p|| zv^|6#9b5_mz1G+2^QT;)NSB>p+O_#}2Q_Sv^m%P=FmX9ngd_SYblPpYgv{XL(PY`J zs=L7Rp*Q*5LGr!#Z1K5+=6tUc1%dEeKX=e~l#(HGK5Kch!RHQo)1|zC@gZ#QdDDK? zWqaALGQ>h1!iKWdrw;l^A>@n2zxh)K`GhrcgNC(HDy?)`3^=0x)IsyBe7;bk+T_!h zJh?>F%Hpe!w)k{XmRPRLn-SH9mEjs|)7Jl_U+Qu+{~CPxo+&0ASP@EJdrzPHH)V>$ zYxu2JI-Mszoz8~*0I8-rQ-0G)iyOse>Z* z_V~O_r|lduU%GtqVj!HP%Q}3EPU}Ur*VTCQTf0vyAJPV$K5gjjIsL8?#@F4RzRDB% zDwLGY$&pKals2alLQXbyu5Fakt{uyTwK^cKC!$CAs` zl)lFoN)&5H@Q0$N1+E=sgY?a3NJIqxx{^h~4?n*4X#aDh;!tnzwAu+yD(xikNxj<2 zP8gjuO2#}?l}ExpCykUNl8N#}@7LXAed%0bpbxeF$DIUvA?pNiwn!4vanfSqjI_=2uJ=ZZBu%U zRCj!DQqrajX%HQDi;_A>LMZFTlV&XTQ`rnl zIopfWLDMIF+(0!^*}iE%8JjwY#*WR91`Z!=-qb-)_WX-+c^3M8Q|U~Z(0u&LQaHZZ zO*V~_G1vWAIC@`Ow%F7`-5;MJmFgcVyLD6eFC~<)VMnHTu&9G7gcEWCAphD!+07A` z+Ef#!!Wkh;E>&eYbP1_!NaN&eIF^H9*fO>Wse|gP4L?!`MM&o}<^kJOQ;U!~h&HA5 zIV)r~qE1>{Ln5r|UY3PxjjusSUC#Jk+k+HRhSZ)BKKh)-kM6BL>L4m*tvsM%dt^4ub9unPT%`hGoh3+I!SNU8Pf|SgMO*slON7 zUo74)z15%Z3~`@Tx>Nbp-GJbT`ZqeUM2DAxkA9o~zA{8)Qdwz}@ATtKNGV?|5DZ&+ z>aBmi=E$W0$v`&0)=Is>pY$;V(tk>SQpgY%jx07+EQT3r`#K%;CX~+=jg6>rMsKyw z2_vl1Iv?eUg(HvHtv=R)J$9p2z8D{DvrY&7(>Og0vd)+M0P$EMq>Op+*ofBk`#BS- zCJzEQ>et^MYlHPccb-TnNtz`1HLTuV_4gd{4r}b`kn6VUJz2srCaqL9_c*7U^`5*E%tDQp%7Bj;Ms+@EfEPPKG=>9W-I3 z)PW^Q*7CE$%9A?hZ`@0)viY2qayHY#GF*0?jn3JT9WK%z^g7$DaMsOaug`={&Iz9( z4Kn&Vwm7GQ>XemU4AR%S9jsXGb+5}V&<5v>5BhxV%{im3DhSPPXL{h-usx-aBN(Ug zfnklaRXH6L-5WB-GIcObzt-k5RtP!MAiEpsJvr&)Or&G&bXimbKde66l+!^|KBQc^ z?1KxNl+!`apMI3nK@V$;`~abl&en1|sJ?G0<5$^W{pJY9AB5eWoDOP9t7M9$dTi+( z+e7(ea|4-v^kJ)UPRbEoXZMsc&RU_v>W#`-DMLg!A7!21W}Fi3hP27p@Eta!Eyn4f zpWl-iTqLBP2Oii4+)iifI348EXXOe-Q{4;_#93LHGMR4gNZwJECX6)o$bNtAPW7RArYswwtv$>Gs@_E@hMw<5<-?(IJy>{ zw0?6LJ9==vK5X=9w}VSTWSeg~NYaPR6c3X+M=+B1t1Z4+>obIfqVC3ZSqGNit>1J| zb=q&v2|rf(@=XUl`0Y&buyGfdHf{gXLH+HLDJHVYvN*6JJl~Yv>O)yg7M28c*#~|a zn?LQ!6j^qw%d;?D-YAS-nPR!_!}lU=^QD6zt?}Jk-B_D^>7X}XSGHU}6lF1N&TsMM zn<^{AQKfat*!pK>2}m_nDq({!=bP=le6Z<@|Gxd3kR#&zthG+~xPgrH*pW7`KN(}` z8f&9fI*7WIkttKvkJfIpN(cSVo}Uin$&be-t8~zV6;5stHH{rzwpe95Ln2ufXV~5N zWYc9$*JE~3rNY3)5hX}gL6WS3gm7gzxGt)!=}HxprC|(&D-{MV3K^g5W_+@W1PMBx zDq;+TU6kMqzzI023M#YNFV?i<}eVR zm{1yASe#)~WqLdi6dE8Isk#-K3QCeHICGgan0PMUxD|6W_OgPNFl*qce9zUtYULz*K;XwP!L!oAQ&Vj5tNl8u0lbo zCcdu5y{wCfx)zpV%L!DT1TtO#02biK!%0LO4vriX3*_REfkZeM196#yn<2OajuH@V zi*;#@A<0uOv8o-y6O;iTP9}5R}b1!yqKb5s8Yi+oiY=>`U`C^P!ma)mv zu`~(_bT$W2z)B8wOt!N*Ky{~%wUQ$N4&afXVIerc0Z_wY2h+uc2a{}uhQ;h0oXv#; z2M!!qM~oZ}95`^`h+yR4Y%Z>(v9Jz=49cQoFAat%J7t%RsI0~G$tKN$1|Sxf(Yaa0 zCL>zF2o)LAWog{$%I?LFhqE%~n|Uq^uCN6zhog+LSY; z-^(()r?3DgBv6FQax@7NIKTl@>L@T_yE}!vfE^4D2b_Q%*p4K1=-tR*AXDl*F09AH zJ}&Fxv4GQ;Z~?5crn{*uN8{jPXl#a6)`U$GcP{HmvvFG z*;oY)BW$W^f~icHnJ*KE%mf38Fjw46<2n*~|NWk6LWXypC1P7S!#$pWc z6fSlb98p$7;R0b2!AvR; zh=?0N?DjlxuZp|5ZfAkV0u`3UL|MtgQrWbL-2ve1!7vKni$G%1Fk$A4F;Q%>WOev* zvdeKdn8FGh7KO2ufN)usG+7#!@5JN*!oYyYB5<-zb*T!3%d)5o1yEcdY?&Rx$6gmj za5jMi7z2TD!bi{n4tSNt$)Ge)7B-Uwga?rDKu`dIGZ;uD!;+XZOfnZrR!vzoB_M2A zRg@rs1HK1*kM|xrZe=}SPBv`}fU+7_!sAxl%t{xC1n|T{$=r&^!zIiIGo}X>8B+or zjwpeOAOdz_lpsL@96$nm(1@S_0s`|_r&Gp;F98${Of+C1gONZ$1jNNsd0;?sXkeH~ zA`1`)!j)kb9*o(_T;||r*WKK#nwVmCoyS9gb2xYbXOzX5gINyW%K-&znE{K1;&5;| zjwm5Y$S8|N(!H4G0GWe(0EC-S7LzW5Lc?h}n5>ab*$piR<7i49mM$w*HoKcivix{F zT;+K@E-VGioL%f*8dm3CoN)rPgPfsQD3!`uO!t#bnhONw!T>{r1PKxpK)BcCT+fxU zH^Zt4^LVTeR!y9MkWJNeQCXS=Dyy;!ETC{vS(*e1iew@IalkmPNn#9yvKot;F8Fa# zSsDS@%u1MtBdg*INzR@IKi@O%_vTrOR$$XspF`IgCx5fS{mKVc_Dq zEH1`?V?kzBnN?L>OckBW$uv`DRs5l(>Q2`MTgIjY>!P|DUn;}85%Cz~`93>DW!1v@k_je^4g4u~8M1t4VDttw9fmQfz;UI>>}L0OiC0)HfXFUm4D zVc6AZJnT4`&ESh+FD?-Gs+byJA}m=8wv1U0HC;&7Lb}y-anV%Q&EV^1*|oTChIuGW z0)`+VL7FTC2e!je1pxwOHL{B_y9Enefx6cG>+hX$tM`*=Ja3L=NXrkXM`CJYQa5I7ucGb?#KDisDUjG-_CML_~D zNWd6Y#nj;lA+s5#z~jLPkQ*W}E^C9G0s%M-gqkiYG_VZ28knX+vKI9KrjSk5v;g%0 zwg8r4_hy_;m4_t~NM?eWNbmxjp^7R80=9JRi!!T3A;Gdn^hEFW`m?1;YRSUY+8_EFK0u#oxaexJ~%gV^`U|u80 zuo1~bVgU^+S=^0^1*}HFT91NsI|`qRVPPq&!SDk7xvqw#!6wN>V&X6{xv)e6$sF8_ zlVPuoy=+FugJn>-b1$osnMhDDSOjG&e1R-bDr+%S)?%ux#dLuzP%bPr+0NvXO`141_5HhzL00W5L&zE(?JZ z5GppT>vJ&}fiVz<*y9mJpNmoPxol^;GMHV2Q5P2;j#JhO2HEVOF%F%b}wef zF2V6-VwqGX6c-3%Oxef7CGepxtOT5b1ZEc{NZ@c_2po?c+CQgBZ1Q$7&6DkN;0Zw3q4lBTozyp8?%nC3C0WV+*0?te@6a>r; zo@5w^Od6OtAWN0y$JMR^TFsLIMa9K#%}O z96Z5LAQH^X?lN)6a6-iH@nClDLTQ*Rur+1&Vs;U;L#WV9*X?+!ipr|E*kn}|l4LJ7 zSr-gvATAjmhSJ48m#rr0g5bx49~XdGa)B_r1?&{qy#gd4Fb3lIc5GF_F2XQNX*Tz& zxRiy>m>ojJ#8`$+4lZjZ3`k@c4;EtsM#-^;qV*H!3P7+-0+ zu7>ro9rkc#IRS>D;bbQ&zWVlj+D2Pxh3k*cC1ww-10>PCEgs(JV6DRvrmM!VJn5SZZ9}kyd*TjI~$HP6G zQ-H}}C=E;)DC{`9m?XAbO_?Wyt&Fb)TN!7S-Qc_NcsK_Zumc{xm1R|x)jS@~JsvKB zIs9Nl1YgW!HP?a>m=$1tJX`|C?xd-%%O=kQ3t)vyO&5$!7R6S^2~<{PIRU;H18i|L zcL9%w7iKUB)tI6`?5n+_=)B~8p<55`^^zXgM5)cyp-QE5_vc&Qv-2SvO zWum$nmeu^{tF_K=^xr|#QX_oX=Bz#$5}7edKnP)z|6pW?i&xczf#DjT>=s{6ZXk0p z9cQ=xpZ#bz`0pU<4JTi&tGVv0?R|fgv_DdH{o7ZEmb#t??;Fxq>rdy&{Q0%HLb>th zY}6}!oQd?sm?C_>HtRp+2Z$^B`)jg(*9gKE>(|H^isyZ7T|ZK+nlLgf2bOa>ZLq%l zkN(=LZ)J2T+xxdtm!m9|RXL6xOAjXtXn<N3f_C%<=}+efM*n4dw6dCAvd_#tL00|kOwp?cGSszP4bfh*yR@h+tSs7yKr?0*E;$+AK#$`zg+t*0>^3>sXtNqRm zWU4o>(Wj&mzDE0NWeG*f7`@F%J+cHdT@a3_eAS!muT1%LAY7x*7W*AkTl)W-FHZRy z>~~sydV4a?%9F}g9=?N~Lt2?)0@7H$Rrn67?-26DB0;Y7J~oH%lp*i=JBEkVT1AC zbA|!zQ&}0N(7QeO4(j2&@1TA-<;Ae9H{U;brwr^;)YS0aL9_c+mRKS= zr(`i;kG1_*`CNh2kF~~Dzk1~fHdUVctIfYUD9ZYkGnNdSEF68V|Jdl)N@JAIpOf{^ z+2l`$kR=q4F@D$A@$!6?kuerdhQ{*Xd>vT=lHrfBy|3>q!PtpdYx`QACzq(@o2}M5 z8A97*_3EJiZpsWAtv;V273;#Hzcy#=$B+oS)59ifl#eeKj-LEit9+cX&?sBi`B(zN z(bagUjQtJP>LB?qCw8m(xetDOwa)3!<+t|=Cv`2=Yy7;P-Q25#n!Z<_T%cD6)t7H} zeQkPmkk_w}ArYPFsW<7>R#t>#(-xx)@Y`~D*hy0@$%EFmF6_ajZiB~z+O=7#EUZmg zOnWsW<8m;M&wbcbo#~-XZwEcdriIX{=e>|J=YNKupIaj83DgA=pXq5X9? ztc6EqVH;M`s)P|o@{xJ03{!RN_0XcMJ~pCthQ}lE_y{X&X|>WkLI)NDR!tb!jVuX{ zZsySuUX6`t-?bmy>O(urCW+b5K@3ecj152Cu;JtNqdn|cPNdb!v>{P;fg{Wzv~K0P z7SsyFG(fn%TuV#{nT0h`_Y(sl5RW`aTHF-9W zR;9~o@J(eYT4l4!Mh`BVflZ=Ei?tJ}L~zY6yHVdC)gAP3->@Vum1R@KGts6u=?>!P zbE|tdFfF>3Ze_Ff%62~2QrXH=sqAH093GWY2R$katFFd%SsBZ6-D+benxxZ)!$Z2P z3&~y!kNd!0nMY-(gFd#-NTtG!&aAo~28&skM`dN12gA`&cY>wLMm-(0sjSK)!%~$; z@~CX*x(@AeA`fg+y>yUN+34Y!cuW~RFs-G79+G7_MD583X0;ldN2#(=cG-=aVIED! z2+sqUZNQO(>5{7J@Zn^a)o3gYMvLnpNz(&Mm9?-Dj=pP8mF8Vp*VV8rhsSIOJvx>X z5k1;LkIKrZsbd{J_G)-wmwN3WENTxiE2}KVGx5MM%kq%23O}%$*@nl1dsz(%!jZmoN!uH@h2&*j2b*qE0hf@bVI1z0+2)pdfz&vD&4$AOYR|8iU!#o|#O0;&6rlPR* zv91f!po1Q-Y0GITi}QbZB+dUD{WfL%)(!skV7}Gbyw)n~cdP_yvDW|hpDLa1u@RTI zzyF82U+G&C&FNG0CH+X7KBV;LOU(DopZ^Z}$obh_z__gCpGr=R|L>sx%SNV$_q>Cq zuFYw`gDB5`*8h)TFG+Lw4yxdUFX20gq9z9LF?+%P_pQGFe}66NC+Xi`;;Y8aub+qi zdM&hCEe0EpMNuA&#?oZZ~p%O z?jT=i{SCgi_my%^KKHSEiAmz=rj7o&{&#`9y_-0M%x{f*$H=0wb2%q&9LcufbJmZO|}Sq146eP zOncD(`E&ZbvYhNLOcnp9wEEv@lT>_)Y5g>N>LAXhy{Gh223{Mjvo=|4rLewQ*+!jO zSEfy;(y4(425P^*+$SX@bSN-4cl(pzbfHl>iZpObzb+MHBF-b+zdWKP;%QifI~ zrII=*Yf-kOP(Dc`bx@>JB~k}b4=qMoU8s3Q(oBPow)bde zY3lpWpBS1+qQ&o@m?hERPm7KfX@4ySv`&wWs8bc|bWojDWit)d>JM&pI}-zE(56o+ z;&WE%UY1@~ris+j*?!JTRW`%4>T}-8Y;(?OP6ut=X)UeibkOFq4L%j5z2sz;M5}T( zm(yPMp;6nUoDQ-oElMl1Fs=t`ENV1&B ztSU=`f;a93&S__5Wg3LD`gk1LgR}ZntlQvkI;i?g%+uhT4%#$eq9*>2VfUqjZdF;0 zD|zX`s&r7tMpS7{63uCq7n`apsnXK8SEhB9RaW_--em{Us7nX=gPUPhsH(CLJQ$Y_ zqMVFQlEt7+DqEx$MNN=O2g$EfQWRv$iET{jpqH&mmy*gUrHx3A6&sDxL2X7Eqiir@ zSO%@O^hP^2(=xVf-R-rsS3~>CayA~@pj9Y86h)zI63P}~YbdJ^HC(?98;C#P%D z=9BVC2R$hpd>3P~VD-H-VVe9X(fS+wco*JB2h~_vm?P+XIX`EEj*qTlq`smMAXT-3}V754WMh8`w zb-7ofz3f;CBBN|mQZ1u{s!yx2d5jLam_8SyV#IW8Fvb_-#n8TMM+bc}2X>)(bPz^I zi%peouscpwWkuS<*c`@2+k_E*D9Unx@dCzAs~gQ+k=Nh6(Kdf_XtG5+aWX8- zTMX@e`yF<>VNrw)K-rAvqET)F1Rg$cX z-B9|Ov`N|`&9Zx4jY(_zDE!%~MQ1iS;dHe)v&%*roDxcQLtRO$5;iKKjM7%qmDz{Z z5<&?j{0Li(ltp1b5*wcmq)ChjVT7?I%d#}@Pn)uvqp3cX1{*rw7%=&{#{Q%^Rf-(pXF4UK4gD)S4wu9_- zr^{n2ZFZCGpv*?J*be$gv~EwOy{0Ax&EdwqG@5Z)NR!Y(lFcv&mWG-pvdg+?@1SbK z%35{MWm%d#2%ECY6KT{zZ93?hJR6OrNe5L{)}n(xm#4LZq{>naI%wmz2W6b@EuX`% zTRk$LY?2-ob`%Q;Gzw@Cs;T3cV9fWjR>len3KwJGvMv^IWi^t;$!-V3E{0kDWSGaw=u8=%n`M@(Pln;4tj2^f zunB>Al7UDj8Hgmak_1EG0TJMvSxMqZVu>*jmMV{Bk$}vD49gN6-~b0h2Lca(6C_BW ztOiFJH^UG#mFLPb3_wI!AQ>$4OjUJ1mnW;PCc2WuvNRX7F3r^0RMUnU777X9{0MO21thDn_X4|Y==LU!o`t;;w-GPri=`GT~2m+F4(dv zjyjxyxLiyV2?Yutin5-{cGzQ4u!3}9Dez@!F3zxtVyUv2Wz6c_4Yru$$&f4u%WPIz z5+{5pgh&B~AgVw}B#;2#4c@Rg7y`|dRhN@_Y-Uv%1yK|^5)g0!9*h8i5h!5kT9;+I zHXe^FyOP!6Pj!J!*CLxZk|21l>2fmcf-%R1BXVRoBFDv&3nU@Iu|S%vjXP;v5=)iM zurjO+;|q&3EXSOHKtW(9>S6}U1XGz{69!UY48nscTpp~l9K3)N92MBafJDa1JQWq$ zWiw1d;>fTrX#pb`fDTDn2NEU~2novp{!j_n zJsxa7Sw`n-SQgeTV2*Sh6n;FU+o@m|u|vQn49s>g%TWL`sZbdBLg5T%l3|GiVv%GH zv#gLIu;x18Y&_P*$ryvOj!4=}*aanl1UTYg%9=DPD9Te+WLEY7_JAXDaD+fTfML`F z7)Ox<0Ro0Nn1PajsRuCX0Zf7uE;<}JFa-!MIuzxp5Fp@tU36~8RuT$Cf&{l?tBa0g zB7xz|1Y<8MYy~z|Ty&V7oi1OCi;hH19t)}RSQm`h4Yn$Zs%~d9VVLC#0x+z(?nGVo z#tSO~0-|y$P!Mng1Vkm`izOf!_@XFVaak7?*wwH)S5sM>*~`f~6$4Izi(n>_$WfGa zZhoDgLg#5@h) zjC(Qo@o)(aQ@}X|SR+}QhjdvED^QpOL;xHNkzol)g<_##7=al$0YgY2GR%+10?9=| zqd-v@Z!$1A!<++~RUeGAnK%!!BLEHs41~^fWeOA~O%@)k0Tz}5g-I?Dm*9vT6&nNv z_qYI@(D76Vynquro(h345G?V5!AF3{)V>j6%RfWn)H5^hhY0!|F-JV1*>L>%Z>w9s3 zqr>2sq+2Q2V9Y(>tw5AX%`sGwA<%yK(&+TyYZ!28(jgdtC}eH1(%pjfa)d$@HqR-W zeN~W9+0+N|;_=QhE&Bm3*AN6Aja{p=e59@EjZ%_A zSr!rk(b7<9iVnZfY}kgR}^Az13xJ)D5)e0b)$Gzhs?|CXQ<{M zjvnAAw{Q!#&eQrwF^^0JCV^$6vAq(X=BzQTQT!bRW-l5o08n)fpbR)|?O)Jn?hM!i z0F45T&xv&@QI4k8r9lA}EBiCEE2&rD(c=^%2$5NVZR6V|7gX<^FEPsI~3 z^XOCOu5~mF!QhqJ3Mm|MpOfd2OtU*TgCys}lf<0dhYG+X;Uu7)q0GQ~0f3lmUyyiB zQ?OVcMlVP}piQaLud#JG|0a=KAdE;ebQ(%o-k6Gb^?pFA;`p2M0LG{CAu~EgN zJ7G@I_W*4F+Ke>QFbh&}Rc6=?Kgt49x-v)x@HC(nV{pHZ`Y0wo6e7L0TB+pLeZnM07xpFb}tFmmD^7}uHy7)JZTYF^kLv$sqnl*jmSz4FzFuN`8WP7#xt)zhz&AmkDro?|pom zN>zl`pMn7C3?R?dUlnBqBTJ`LcDo_0xV-g0aztVb>6;C}sCLxsi>nWPBW{uaQ0^fK z0eFu&=9}C^U(2&!HSpG?WrKjy#SCAI5E2JNHo#jwE#O2(m@BE-_lO5SEeZ=Kb*2>( zwh@Exz?U`mPwB+{iKXaI(3sLddvolGvLz1D(nHR!O4itK3PdW%`osb`A&4qZ$t(g6 z>f@c<$Q}kkX9)4HHQTWeibcF{g)cZS@)IOL44Ol!9nplm9f^rWZ4dt;JN^tIZvxK9 zH~~YlH1S&H5}7q1qWJR384NJ?7}#RINH8Ap>Ua;?q4~X;*nz+8r!!ZLKAn`Q_@F-U z&=m#SI1AQk;crl8==+^y)M&OlDsKB`6!n8-O`1vZ8YcRbvO0n1pCKWKeFZ3|w*icj zm2+i|iLY}*T<%TxC>R=lKXC7TKtL}_(^y|Dl*Je-0Sud|qXK4iTHVjqK2=n>?CGZ) zya=bfYOMT)?jJWCo+($jLkDhYPd;h(ItdbhMwMN!Bu;mV0u@^6%VF^?4*3NDmSdxFT@9`nlSX)tbbhp(*x0}k>NH^@zsQ>mht-x^K2e_{dH zEY3ss2ysC-BG$q5xldH|ukXW>b+oQk1FSKEWfQou?FdyTg{sacf6NSWt0>(S6lj@U zpD1tH66T^6-AhI3M1e%HuLY?#IO$J==QC(;LKRedD@HFb0gV%dljug9i@{>uEo}^q zf43V5rf^cg8^Ccs%Lu?Ah_5A;bO~@xuI=6f$@gyzI_4gH)J_(F;95nRs1|oLA#fVn zrc2~F>Ri)w7nY)$F-|D4Br8OKTFEf<1EdliJ#HiABR0zcRUj)?JR=j>hT!U zpzWgSYBNuKYlw?p1?;#n-_0YRmc#Ra=hvl#BfiGm^PY%HM~Ol`WS2>gTL#4Pht!{; zGb2SKVcs&x_tCn%hpB{gTVCoSr;i2bT@mvR_wR@iCc&GfmgRW&hHzeXm_PWg`cBpN z1><%{B~mUP^KHrsvjaDd5THw4DBE^_QbRcDg($UDY=1k1U4Jy40gI?1T(%syAQu-a z+_Kkbih|BUt~<}!ik>^&#ge`^ffw=u11CyB`cg|moD}2@9Qlfnp3a1Px~#(#B&}5G zkqRH=@NK^u!p!u(a^h|f-V&03s!j#rwz>4HoeEHNm4nxTz(z1Y-WMkQ!uwHTK&;te z5Jb5X=R_jd)dMjJ?STXFr2C+Oh6Kq3Vh*R_`EemSbIoiNMJ~r)WU9jf5Gh?jO3L*d zs|p~Nz?I}*%&Is?qW@SUtT>qW`n{~8PqxGj^lSi#+dJdn&GqLK`2YfUACI0BHnHE2 zZde4g8IJ3>fZOe8(KDCfeQ!g>3ABEbOwGl98=GXE3vm_ip&to)Bd#3=cfkf3vU2_8 z@tDB|b^PY6J(|#up{OH{bz}P(GV@tO{cC04PX(Bz3(v`$%c4l4g=pMXOHsIP@c{gg zfihKBQ@P0m<@_1K3tmlNebs3CK|y>Dr4G$!HQD^Mt{3DV{0p2QZDn89FQh+&f)#*= zpdRF_gjkuvYcJ_@<&a-CDElR9*v8(xz{fP{Bvu9!_$0Z5bonrfB!wrn&^@&|EQF9S zdbn97Qh}mCy>Id2eWzDDNwr-Wkae0R8+XG9%72%u3U$OMrX0p(B%-a&I?m|14f_OJ zB(kR%)_RAev(*w@qZ;rr8i66gA`9k*BYjitI{c@vIkK44H&L7uEuoa%k?mCT-5a8l zN1wIYn7>E$LeN2WuGDf`xf8o#i(^M6G;%ph)tpd^+9no>Kc6GRY|ipo?<~?TprTed zl3;Fa(~5G`$DmgPmLWo{2vjVh_8mtI7XU`yRJnax>)6&?`=pq%FP-Av6T6tqplXz~ zEDs&Aq(~#2R&k?J2^rWg7EQMy)(ug0=6L4ElkX$20=_KIT)0^q1aIqRATzFIK-Q~l z3yY~;GAvRjI$-7U?N}M%ad~Pg7fSv6-tUO$GGXBZEHeMA@aq$XVnOIh{25p^zNh)b zmnmP6mF>)F`V(YAaR9&Xvhk-RaWf;Jl? zSTs|63>hCPt_F~8t_r$x=^jR2=xe%F$dvvq~+}yRh02q<=k2ne^-xJ zO{tEq|VC`SH` zlUDGmhj%5hsZ_^CJRQB8;vz?|A^qXl6#V5tKFj^^x2)Bp{adBt25WPn^Bwz#3DeX~^Ww&wZyMhg&@?w)Kcu)z@@kY2vY0iHuPE2#X8k;Cz3xqPa{1Fq6Tj%BE`0Snezf8@@Lf$RlNSLvv1R#HTWE<+ z4Tb17we+`~^DF16nkAgR1p-~~=+{3Io!nt0@~C~KHZ0NMC)zVd;Ksn_Vicd1L`p!P zOM{~uCAGYA$nfmrS!~0QF1^@$4Q+}PqELz9&Cmy+S(;FKTY{6Zx{>Z#tlatTX)eb4 z;6)4iXceFf84HoYEMUe?&pP!4B}aUs_^C45gV}Oha;*H2WDnOdPNOha9)*_e$n@Nh zkHI)a2(HB%{u&iaSRqRddBBL%Y>(E+OdYY*qQx?+vXhvo&Lq2k^Vi`(!z+6Hn(U*X z`$u<^`F( zF&%%GnQ>)jVMDWG5%n4TJ0B}gT!qexK2cla(*n04wZpWt!*nGhb~+nn1T`%0ir&sP zC{JQHIa&v@!L2DF^rrl)T?vK~Uhq_H$phZaNu9^fG0lQec_YdOKmXXShT6$COYsco&Q~zr;%Mu#tdT`;ns!~GT zi+*vO-Ops9FhrC#3<^p7z{@6GQ<_0%`yCWJ^4cb_L2pp@F&SRa;e#Bo!T4>`d3tRv zb%9T}lP0VkG-?)yQ~fc!8&IC1B+_?C%3FIIZvUbZwuPf-MXpf?OxnwhhJX9E+&8*;SN$w`0xD>gZk@zqkwEzq?QL9VdX}b}|e<=^XTSo&I!V*>05XSQcE(bnZM&cH%aM$+2}^v!zrnSX_@kfdgy=#x0>zjVunFcn;&~6uPCh+P` zR`58(WUrZeLFedl>;Tq5%lT#BdbznX^+qebK5}lBz%|Gq4P=nXJ+_Cm@p+8WoRd~c zd@dlrqw-Ij!TMgs5Lk3nEK%ce1FK1^hL1}3`6E-n+-Q55K7L?Zl3Bz=O%L|!gZHv8b}HoL=j&(MUkyg^LIRYCxzKpJsh8nZGWCTn4j zi1UEo4u}>DVWMYvbz97j6}EiqIsf?;h5xz2j)UJ@ZTHlkT|;#&inrfA$OrK^em|j( zP6_Y$dxqdV^=qO{jG(nDpO;qmquFuoqq^e^P8qC8{ulL`z6g>u;M#h z`M*6FiRuVIQ8AtS7{DX2)tVr1sYPc%KnQ{ltFJsEA}vS28vZ&cyfAIBJ2;0vI=ga0 zQJ^w=(!H4le)xjamhZXvEd_$D4!7yKeU?x|y1y}QL~cw)*HGtx1Za?-F~O1w;w;Jy zt3;kwC!t6zD7w3mY?6Ho@)|f7U}~m#Rlr%@Vz6u3(woSE7|5KOTKzDdUK=&s;GbnT zv$CKI+BZAc%?c{)mG(DrGFDO;!gXMC4M}RutnEl?7){-g%?(5~K}ye%demHv+%4k& z1~|6c4$6a0I3w0b-ft?#$7+Jp{cxd)3R6$gS7yHuu>%_xif|}mp)SnAYDUd+6sg$h zRXMxD~N`6Y)v`2sC7xXznZ62u^IdhPeGgpK@w`%g&a$ zv5?Rs;}A7wGj5orJOi4NG&T0IumqNvJX8Yt=T^_)l;6G=2MWcKlq$t}fAfy}EpDnw z2t-<$D*aU}sC5TGs{#SK+y$stE0Pm&X&-ZsKesv(Ov+EqOTi?)g8-#eR**y?qA}O< zuDvX^r6YyY(FknfX=mFcEQ#6xisvrGJn0xOg4L5TbC|UNs-p4JRg6y&t?BJRO{M|Y zw}F}2@!0_oMQ$^t>Q)S_hjsCa{9x!PbZxUz<@z#fY~qiAnu`DZ2R&rG?wx1bYeZDeEZx_c=OgT(*v|mcY*8`8Qw$a3&rfufWBV5)K0SI(vMnUW z+T=Rs?I2{YX5_pJv=d&C#hugIGe=7jN5er)BoF{jB2 z5Pbx&Ga&KRqUiuNaXk7RoLlK+1Xz@w*nc2g6bfGnz|SxOgjR4imk{KJkIGp}^9v_| zg6_c}L>^2hS=SlR0;*{wN3Ucwn>N6tO1S5dT`;69RFY_H<@P+HAIWIG<0955CaFvN zK#g)*q6_#S*%R?jftn@3u<4%9dm8{PEaa)u7du$bq&Tmk%t~TCaH&ZXG+1=%B+^Q$ zlRy}i06poKs02)p?vphOaq_R{wMWe=qc7u>Lt;jXl0|*y|9H$_EXqa!UmoRn9h13m z+icc>*Z&{^orxOsYVdr*i`?fJp`K`q$F@Q;FUH7%aqFxM1$j&miFV~$r9umRtU5P)!Gbf4`m}#(m?q+eE zmAj_dUN!k#yX4sxn|Uko4ll2uK0Gd{zO*tbS*#^LJRwxkzV1o<4K%!#X4y_me8j|m z#kT$kD4>LxI%dr--9k>s{GFa~vYT&*!z>CQerY2%zdR!dyEUIe#1K&^0TRO=4)t_|xbH7?x^z91h^`O%LtL6Nt&+qg%Q ziC%Gydd~nR`B)4d*^Y8hefj+wo z=Q+^`KuJ{I_#7DwznMnqMj;tA)TS-WD%g^k*?`Oke++8Wpml3}-iZ02X!EklwC-+i zfD5Ako}<69h>V^t1Pe&+;?_r@h%pLt2$~h*n{hyp*5q$R1IQIE(JpqzN8UTDC;pb4 zD)@CRfWD$))y9iDXm?vNP0#GH{*VyOmGm8d-r>RAUm4R|&X0nVP$3Su zLIb*}bY$B+q_5IPGz0jvZOiNiSi!yyIbNl4mDTqFTVA@dGE$R-r|#@9Ho1hNqN}64 zCSA-hR2~A2J}Q{1;&fNCX$e?Keig&aI-Y%EJ=pLM4WJ=gtzxR4Hc39^IaP2Sw`Rh! zizs|}*@kG7Q&E*psEw!>UkjYVm^x^v63Bst0Kp;|*6mBQdbNmV9SN1F2O|R45i`_Vgn!#N z1ZH)W93uW|#<>#0{{@!KY?*BdVf0p|OkqWqP|t>xl~Mudja51z#HE9>QIB6v;XgIX z1x+QnFeu4Gx(97$hN6|`xblww-Vw^hAc$;%*e_XeL_Ro#k*&6LpKmTc18crCF)X(d z05T7=No*Y{@1uqhfMUpRnnGRLRS*cVkN`-_?q+fNqJyn+R2<8}1bdZHYOK|Q{(GkV zI(QvTAisW!XogcJ{z{eBE^5UfgyJY*H*ca^WpaleJT;==V6~eBN~Q#d%+i2F>?nu^ z>H{T)1-)tuQn3;Ia7RGwf+}HDSjD##+Zk!5NMQ%+UL!Ex^eIJ!j5o3iu4MvA;Q)KO zLYfbso#GOUzFBGsF+r?#3oa|@0EFO>!CF%>{ri{b5MM;|@N z5SB_%0A;bW1KGVMSa+vDkbcdA&b@_%e6!5M-Vy?l-n)-kbFRqsk8o z3EGPC!MUY!D2K__he?B(Vhm?xAPE2*=R50-nye8?_z0q7ON5xi{+R9|(&Y^(>9}&0`Sc+3``hrQUH4_O? zZOc4XwtQO!IRGg@*1sPq*?V8W{v!b(Z3%FK3*qgs#af8f+h6Gd>&2o&;Y7Y2=6=At zE#7Yx#tFTn^@|yPbX0WEO}}4o&H@75p;oShQ^tHkT%kU{O7kho!G>sxtPo=k{ZtVS zP!f~q_>~x-+))|^vuwG~q5<9(RA@?HMF=1_MF2u^IcbkzJ(r8|z%xRZSu}AfJX#_m zk>yX94N}1mg=(tc=34iz0x+|y;S;d?&$dS<*7SxF{Im`t9ePC+e2aXT^;Q(PM-?!^ zyKgKK+y`YN{AZweTm3@zF953#-kq|N!iZNiI{R8S-a~F3crwI46=Zty@Fp*)Pe!88 zAp8LHzBKnA#1S~f@lZPm5nJ zE^X2=sEk01e@DhQ<&VvxH=XZ?x&Q~W81!Ar%v3JsSl=3L0bhW92TUcbe6s@hQcWH> zf5j)C285tmrT?p69>0NN)M%DzkSOn7u#ayv5tzCdd-nO14&WU>LV?7ot-Jxe^S+0E zFW9_0VlHcPb%YPl-7hta?}#frI#BUEZPBr741+-~Rvx$bF*{)g3yy1yWQ9gu z5DU1KkBH;!+lc#4!(u7VcNWo;eT^*Yxc;o9DvVKbKRR zZsNM*ilhZZMED;or9oN8{CbeCc^El$A337Jr9k*@hCM5zJ%gMqK%bF=!kn~BBshwQ zHS9defuABT5k*d8*R)h7F-J6e1tZu;w#n^NNmmd z8C|U4gS-=XykLX}h$nIEF$-=50C_&#M+hl@5J_SQMs!Z3@f{YvcX$)=O4*Sd+Zp&> zW!b8fFTm9jkCj$U?cqOxM2@l!G11$B34LqYJ*lG$ZUZE>?lu4@5`ZfnT*UV%(Jawg zhqU6K->?9KJT#|EnoLLa1Fq%-zGEWM{=!Z5d2^o4@d;yWwBSmR4UUX(zVQ?4e;{U< zr^c|?HZ?KX7;t?u-B@u9b?Dn9a71YKy2x%+kOOcw{!ALz35Sj^$huTY!1GG*LkU}A zdfcMK5<$Ny;Nhgv+woPpMp%BuU7Azj(22-4QxPS&!VG7kP)B`g(*(?hUQb3D20=>F z^T3&GnkVgbMF^yac>^VK$#)U|fKflNTnJBQA5lb)7M@7~8r{m+Z1~SNF?m{+{-QAQVjW6o4^`k~!L85(+4f)NKobMZSa>yd0*=`SlBE#87 z48ED(ehbk6#HcW#bHIpN6L7M{(;IV)ncrDFq9bB<{aIyt;=tmBNdVlaDT)Pz#`&;+ zmYoh2RRU$HIzxHnkd+Ss_-S$wQq8 z+7WFGAv9R;Y8SYR7JomO{@CUm9HFLH0Wj#p#Y8i)zn%i0T(_k7tcDwXP(Z!>##Yy< zn=T3Ey>wei(YXsf&9qesU|dnLKo88;MT#gL4a7aVTAq=EM!bFdPSkHC1A0+b2C{yy z5{Nwi>KLz>QCM$lHG&*y3W-JVMs7<1lD(`L!CG=%z6`4N;M)m&_(?~M@)-O|3ddsPgp5+-@$Lh|55(O=(u2C!{ zS%<1AP2sPG$P#>_%yv7E?qHtO3=k{Q0S>BkQ3V<^OMi$u!msLO`^apB9{VL84tA9F z%eAF~5@lmOv+8^@>it5oCO&w+Fdv#%fk~o>pj-@QP~OK;eX@3cZB@EJ4&N_!8)W0q z%a%CWsxuuQzHS_xT74AHJt=6eV|FWYkcJ*}2MGwwish`+YmklN1`HFNcqmDI^ashq zB}8~q5H5!-a-jaoBvSnQEl}#+z9UM3c-j!7u-`pq)JHowY#^wcn7#@+BneFtD?lIw z7s#S0k{61(a+_rK7j1al6WMj5QZedU#{eu%o2WYS$`+$iUn<22;y|#mlCd6|DQ6(w zLjjc-!s$_lQ7<#{l_-81h@O?W;tYQ&7Fkahc zuPltMcP)fH#+pk@kXzI&17F8-nx)F&!ObX*&^rT`uN6}xnRA}Qw$Hctg2hp^NUTnZ zyqSvxvI+%lg10ISMAfL9_*mfxGdflrngmyrfoj4sSLw#&j?azQ7VQ2(6i^AP9#+Yq zG75$;YQ)imh&i$nn^3yHu)n;8ywaCkBzVYdG{gv$K~Fnr?8**DH8i^`ll{<`s+Hp>(!&hhqlC7Qlo)-9D}{^q9wPJR>EUPC>=CeYL7$x zGY7=SS9pY!F+QD<2GpM4-GqLd=P_P)0xHX25sEUZCLp-^FBv8v==0ropxQ6XO>Ap?Tg+vI}2uv2t z2(QFC&ihg5BWe z(}dYy!ORakjo3>Ykz3>I<*Qotn>$Ju*uw)QNkh%^ z+OpLf3HMeBBU|e0W554ZSYKt5nLmAe$kgwT#DL)t@7Rtbj2Y{-&inmJiXgiNN0G@P$VqcN2Rf}g_3~9lO2RJ|y6VqH@jL7ys zLAJ?^igt4P8^NNYT`0_nvb-f>m%Xz&n(1-1Zf5|@q?k}+z6t9y zs&VlmjsI;6Oe%X|*-R4_ti}oQ-$7BGV2OL~X?w)eyt>~}I?T0gx(8*#aU*_5WdZ3X zYD~pK1RCUM+hBWZZF)MUvdieG_Hn!z(0fGx5L%jWiy?qKx&>W`=p>tyA z2NiDO6YM|KyBZ*@&#}x?+UO zAQ;8Fn#1Fb*CSP_)r#78`O~3a%o|WG#R8`iwI%@3!V&XSRg_zND+WSohY7wHy@7ZhC_SMQ?!GCyt*Q0KTi(0&*CM`j1wLaWO!C!fT; z2hK(7RP^#pSDCo1Nv#nYqk}Z+)Nwp6QNOEsPoV+}AUFgY7M%_zG-4b&a60~BzreFR z(!ePt8j$3AJ?V8~L*V@oomSk96toGVVw+SEQwKI;Ak_Fc)KBB>7>4^Jz3_Mn34|(S ze^1$4_Kb~v!%~P5bYf0GyhIU@P>z$;m!6PNoQa?k#74g8Aj|rq4d{&Bq_w`N5_)*? zFqubGY^44bmM|~Zgp+od`}{bjG_6a7_Gz5!b9^C8ES-#oOxAQ%u2#nWfJ`m+zLV#Z z+?qV<M&idGP`v~h7^igO5JgF-i`1>6k~F0;P)5`W{xXxKlR){0 z>2SCfmKM)LB?6nxf_cKht4#0mG|OR09BNfE!brmWrzZX60HK4^PDu6XodX)J7AY;4 zF-<3`;9RGj#*0m;GVnW&bCPH{P=e=K0#p5YvCGh5#ia>?9@D@}Y#_}@ZrI&ohnJ~o} zU+8vCUqFQ+3~z>3Mw2y{Dy&pHhyJ0(*RsbCT5u(%G+H~=)zEUENZRfZ$3ak6FqZCn zc+}n<7^U$l23vO4y!e7%0r`oQRIFv6?L%2IenL*MtP-J=(>lEYiT0FVvA`z0jnXxR zdUGw#vk+XQ1POg*UjMMVL(e&q^Jk4q28svfDq08#i6>1~n$mlL?@3x&} zKGVvuI_C{Ue6ZBA=L72Hw($p_)>$Imc^=%dA;kg>3~5L$Bl--N1b72%k@gX>gqdix zA_qLdvKS{2fqwpGlh(!>-C7HNgdw zKjxYPSSQC*2+dW0tN`kNw z)E(FCql{)d5msa~L2iTG=`^>`_*m;25HwmNLEW{!gRsi*_d@1cDwbFgh6RW<`_whW zsvZ&4g<-B+JHJDm4iSsBRhv`A!z_981*<{xWc$mQSqB^LuE`pXeL8|pEk0_KjiZJG zE2rzOnC0=$g}?=@(nC1MkTEU!2wfK}X8 zlod%VpZ_06HsI+=sv>C4Bg&31EY}l}#P`vxC1f|JH25RNq99Nidk1}BB8Bl%u2n1Liq(swYhUM#ZG+hrK}!$*oX!TR;HYf$mlv@6LQ z{=9Ti3KkI-aEvC5>*$$y2_EPqE`2_Xxyy!4%f@kwZrt9D-PRUDn3DIQ1#P=wc}%4>U6ks$K0-m^xEg8*Wj zj^r@%T*6&@-#_@AC@c(N7>mtmtzxjr)f%y?Erh#91@+u}GYVzwLp$Xccs)ffx9k1| zXoc|PALzYscZ`K;kpUHr25(k`EChKB`}?qZ zWvuu^gKz~zWuyaCeA&aHEARrIrW|-TS2Ql)9ad=~NkiNT zIW0YV3yNV!A{9i%!E%2QM}sF|x@AF$phXLbFaLNz3nl+t6{~3@jiu5Cmin=QANUwPG5({4TLUO)& zmzNgxm)q!8p#={HqU~ezk!=(7guq0S4pV^Pv@D`BiCC)WAAVRsEGqSgSY?a2ji9X) zn3^k1#ehPOrKNlStmZ&*dwP!}ivddDiT;?ox^SG89(r?-+uYPq_)2s?x zeps_>0-)E6V)XUcP;Ls}_1P6*I`L5PFH8)u-cs;WD8h6b=8GJCXf$Z8(4d#E8v67c zMA6xuPuruUS1Z@5jscN01UGr$*ydHV?xB&(3o-ny^1cGQ@3i1#cj3*S1(V8n9tvSx z4Bf5|Q^&hO+yD<)BqgTxh5ND$%2Fdo;9E2Ku2J9J5O6{x5=Y` zyxARWq>%L&s!`G!r$+rJoZM(YNly5(Wd&BN6h71P6VJKA%MRZqd5ypu zK@;||CR_w{`|j%Iq!9RVdUem-U5f#0&0=h+@xk0A@87&EcqME@y1%nd{V1W%DKPuM zG?|alPr1Tm$r>f~$Bu+PRr}q)b6rr=0*nz!PtK*|9vifMcdJja?5~M!%-@bRii1x+-P2K#-GAQ-Kob0muVi>Olgy zcV{w)AM5FS4+;N+M@Pc^w~@U3TovVK(mDE;v+~8Z6#d_N zNyJyyt>iJP)*=^~1F^ODmeMri)UI8=zX#P~PuKr>(vPdgOwM3ZPw_bM>D5mqk` zA{Ll>A7hwASiu8gaKX^}tn^}Lo)OgO*jeFh%b|8#(KzOh-t|PwR@i@b!{`Q$sXrq6 zL%i)U86#UG4X%-_&({1~bXh>47A7(5xXY#|9*I9 zDC@<|)rd7Rm4&m^GocxS#ZpREyVzSU6>OyAZT#^Prz}DVp=(0DZ7kLYK6ZnbC*yZY zCcz8gw7gz8eJq15nTeHMS|D#3rT8O3^JVSv8%nteDZw3?7?&lOE>VHHru3fApx$se z4Go@_B$w0uX0*9Vv0`Rw7-FeomLkN&Lf}DZb)|bO2CC==~^*FN+t%M1adr@`dsiQB|hLr7o>v?S(yno<~jevPc!b4qRPVUrgTulNbS$@0X4 zPO4r?p~HlRMx=tz)kV4h=utSq3zjT`>-R{u0t%dOSVW_hlXLvOoFF8Ty|E`^F$%c` zb-S%JrO+S?aH{mXD~Bt?Vkb3AMC27(F^p`6fBzmsMYdM+prY3hh)i9u)J00UrIE5b zRF-QK^sYE*VUz6H@0n+@l2n5pC_`z!F&3qk!?HIWw%3vzU&p#CV4+Smj|;-$!z7`8 zF+y|#PdJYzLg%g+Tg_d9n_Ft z8;A#W{X(+?*z$@|%tPs%Z1mq^E>eV$d#enGOqMX*HZkD_P%d;oZ+ClA ztXk>4p3|kG(9CZC1vXBM3l23PK9Zt);d(}yn8cJ^OtG9*fY+#+iu6FfbdzItsBh1e z?oahao?rca4!fG?;Nsf3LPXzlspp^vU|yYbW2$RJ$}k*`u!r@K?jt>qFgbjrz2SHh@EU@v-gw!>mQlc-i`LYQy^6D zU)h2lHIWom1+B7AR`mxCn&(SzB<_7^9;|D5`ZSc%DsBRm(>a4>HDC@`yIs}`N=66X z_z#uvItq9@7`fmUiY~*oVy9FHU3`cac$*~Rv#5wMe8Fj~`7SCQd-J{g1K{Bt--5?|m?5O%^!7O+(QNSW|T{%Dlvm$F2rWEklxg66E$7+ZZ zqcny*)l;S>WAp`F-`s&5%`{3vt9oo_Ao!`^CCgqz znNyn7M;am$b{c{&>GV)ZLuK~petu^$eOUHJ-gB$eW)&{p!Tjta=u;7>N#-rYAV@vO z4P$fKL!XNlwcwA6r~>-4vM(+&0XH8Dc|PnPBGl<<`P*s4#JXIKI!1iTrepXV80RVf zcCd?UNNNCCb&EzRu^uph%|AH0Tw7>V@@nn(g+Nb$X>K^m({^ZT;=UDEz*o_2fK0(g z8evymTB7*D+o%1w#yUb_3W^biRo^XA#1t0a{KsmXVT2|S;1AV6it$0bwR*3)4gBr_ z(NFjuOAK#SOWVKLR`b5U$^RB))F^Gq{LgleP+1E6u7PH>v!i|^Y#6NahN zCrr9^kNH|NlmB)X-^~`ujW%M^oJcZHf)J-8S%k(XY0UD|2<7`)JP)EqBa@&a^9FDw zmonXYzCl)93p4#C4dHJ72}73ftXD5wqeV;B^UZN#{>S3ujbBUSj~v`D@`>4}a-c?x zCxD@a1K7a6B$^=EAp|`VNC=9KxW-z|2c9SRJsoyw!0b83Cl9A#uD^JoW|i~sJfKF1 zwP_Ljasja?Se~6JGL61$KxMrF!`Hkgoy$Vr){g=rP+*{xHUa)_tH6aw$4?3@P*w=ypN>2Grc}j~k zh9C{n&0^(a)~%UobBPjm%t{XJSS`G}W3i`0xisM&O3Y|J?um-6tz<`yqE5Ly7~S!zV1S_M6K_G#q6m?k#bhW(K*LA3mwhgzba5Wx4+&EKWP0O# zWJ?0Cr}?7cmM53PEE;x`FII2|Nz0h8I_==)LcMA8N1d)@JKH5=mCT|!>4_c!(p2j!8!K7SBaH+x~!0D}5wNN0E5Dv4$(E3So&}b{I z{t#r4yKaA`08?*yxP*hun~uORtNSs6(9=dSh(=2nKME$YGIbeXI~C(vHDNeB)=A98 z=%61kFxP0L1lzuvaQYX?89gR2%&*?`>Vp_gszEPH$=dKHyvFFjHkRD2|C{$(y>5bc z3}rU|l_Ahu->_=#;eD z9OU2M;LWxi80p^oEF`qzEgPNuPtX})Xc5VAEwqllaXl(gdp`>xDPEMe;&N@Ob2_xJ z`ik;|e6tlz0*=!9-7}4^UJ}p~<*nomiPBhBF080kXn~2Rlx-=}pTtL#P<{M0I>|M0 zt{YV|pQgwTvk@47Q*kKey6lP=0DfzuY#~&FWUt`lNlxUMb(AN&4Ho_6d@h5|izu%`+4Hy%<#qB!>e!+l52e~i zDPNZq|(Un8rINHP*ghFym~0`U>#mofCEL^|EEm9-x3f>hqI z-Jd4=c7*Sp=2>psWLQPz@W`?RkN`!B4uosrtwo5a`1_l2JnqDrdz1dW8bfQsI7bcY?vv33F>9=3fTG{-BQ-#qS4_ohwCtt>(OP57o@18!=)$SomU&BrR`EvS`~-BYX7jZS_w=hNc;MBr1qveBTEi2$6U=G zI<^@ksCBv#Em3vvmUBGfglTw%;$FyRp(^Y#nrtg5z@;}2{f{O0_!)p~leB8S*tEG5n3mMS`hGY#O_m!-* zOYoDW_(BvN5d#k!d?yGea-n&Wp0v!O(mWWwowyr7+ka6yG>{1dqKFfaExlJ#I)c>> zIh3YEhnh+=qD! zP52MS(rKl>vsz|pO6LpA9CvMM)6&493(5iy#=}W~7^JAlcH!0Jv0-|kUgG9cgwiu? zPKvisO72RKFX2eO$@M%G^e@tNN*bMI0Y@?mF*)&=TWpdvGaJc=p|1T{*{gyUPo@JP z>OD9|AtL^X2mK}p!D%?H*fHT=(acPC!2Vq#7b^gD;+jy2)kq&qzR3}b!UWT`3WK|i z7aFqzyD^cS{Zf{S-&6lj!AsrF&CtZ(w&S{G62cYK(Kn|MZ%EZRX9;+eHr1YPnyh?q zJlmLs=s8PF$c3lG36y=ccSte3$VM-BtreAsCi@>*S7q43-!8qt7!!^4YW}XfW@>=u zl=b9Z%4c&68$J49s<+2EtPykgtAQe9`BuYcc_{LR-YI*&m<`rV#mt)Mh}?Aw;^aZUrz9 znG8lby);AgkIM|nOD`kf#WrJfs@#>ELheoMbT`|6V1od zrZF*)D(ZQK5VzDcIcB=0==wm!f-+c>i{KjU=J_etVLdY??$!_a?!knNc@9jV6!+2< zqEO1!I@sO%4XHVuDuk;s7QTEMsQE74a7pQi7}+E?QnIM(nDouFef^_@R%VF&hH(J0 zSxuzlA@8()FqNG6FToD3sKcnik1fv^sewzS<+$!gK@0sex*zBRqrEY7P zASc4YBsu{KDYx>v1u~u}3fCaocRM79G@;2g$2{LnoOx3M;OJA)vkM(unU|sTw%LXU zt0yW;1xd5^`GyxpJ37xf1#B=p&8pHK%GFq5bmR+5Zw!wKx>84y))kHqJ|O6S%pV!y zz0fj~s99X_Wdjfvmj*udoRx)X@c|uSq38&P5sDIGLuw*NRb6t8PAi&RP98Yu))l0* zzIe3DomtcumpW4?Em}55dvzh{Dz2A@`T_Nr85pSw7Jq6=iXLeNhlW+162kp>Q{48$ z*o6H>|1bOH(1+nSU*Xo&mE+A!8l2^Vjm(b?+*NNEy2vW-Ap@gMBt!=;m46yw7#BS< zS|+9PMI$^Bw3&-rO@{9C>T_d|LXa`ik<*Gq_mR6eoCkM9cn>bnQu^&iCtx~TEE)~x zP$XCAdZToaRUm29XXHGkc-+^Eft^^;bU|x9j&hML_hJj#uur3l0i@pF4hGzt1nUQo zIuPAkB=L^o`b7bCn0JYLO@F=*!MkygQK04_nE(L1fs9{5n*&GCXZv_0&9iL~5g1=? zZkzds+??KDNd?!`{w`Q(f2cb8-Gx$P2;(dIXdyMf_A+>LmHjD;cTS^c9uy4JT)Zgt0v?whN*A7QN(_+>ni zh6|@v5{NW12km06Ra!xt!h!1R0cSPR_$D$f6TU)q9T#uVT1t9 zUzr{b^dw)=No)JW@*~?d}t3n*b=fzCD70 z-r@G>ccS0?NZMs^?mm4V>{&=NSo&Rqc^9&i{U7^#auzdo^%C%os$p_r+ss{>#symz z37X%{g`&1WU~z%)_4K-D9jUoh#ON_57cS5q^`J15Rv_B}&EGzJmTA0H-`(-v){Zco zri85?rA9~5)T{E&w3D16{K#Q4k%89ekgc99c!8Kb8xagF=pR`PM0?~bHjdbyVFdH) zz{>`axpzDl1cx~+w}=AUE)Fcm^UL#hS}H#}w!7uE$?`MO8PafK<+BF%zHg{^?x5T= zQV%*2Ig}B~$$KMM-_526JSxhQi1(#ry?7>iC2?e|mmjmnk~IjB8miFBfAl-TLCX;t zVG+Yg5_tiWOIC@vjmFssbqQFzWw|5v1QdjbH;dHY#7-b6Hag3AUQY|3BajG|QV$nA z^>MdRQT@3r#Fr+lOY#R?@cgB!++j%F>*2=j_9(e~ec{sgIPiC{Lu2wMXADMe*UvMG zYb$)PwfCTrn1 zLVn>&Zu@_gQ8G^^M2}4TC%v0-{Fyt#0tVZ$LQ*}Mu53{v6*`I#f<$qp?4hB}f>B(w zAC}tI6oIwD8KjuDS_&2+tOSlRqsAplGGb6E6w$t!#y}Ky(^2iQ@IgI3W=cSJr?IZY zT(sAM^gn>>ugjnnrb)G#VN6R8P}%Aze4Og9Rd~4pZG8wBH1COJ8QXYF4i%mk$W59d zk!Iaz8NG$~B^OfVn0pSyVs+d!wQaJNS#2P-k`mz&K>G$Z3jObPq-+}OF4b};E)F~s z>Ey8?vdmFcEU6gK%q#@9j1+uL64Ujw`IU98WO@6M0DER(ScJd8amsQ*ndgYi)E_mT zS8N;HMiFCKUA#a*5``8T!avNiNoX!D&PwCXdM4rENUh%7#k!zScUSNsARqD#k^68t z*o1`9@2@8W<%pkyJa`}5XEn|_Kzaj)6|vXa>91PjXM$=|I5E1Ap!&h!%s4Cb(nm0l z0u&iOsywj?LsM{hRCmL_vjgoAe_-j~^oo1d{2w%Dr`2Jb(}d0xFx5nPARJ4L!8ZCNmuE&~SQ0u!Vd4On zBh!D7`OJH2YSVusDlR{@g>p%(eBDeRs8td&mr)d)U>+-L-f0ZNLU9{Z9|YrHE1Efz zn~rP|_`ycpoBt~~Iut8>sEZv3qHv63|Mb$;E5Rd?h*=CjH`!woIm=$?FD5H!aVULw;YWq6$VEj`WypDW~{g>Ot!GN_v ztp|q|w_T{??Bo*=)0}-KZrAwhM`PQMvF4ze0#A_xn$kD#bdNBzOcSk?un-7<gd zb^Wdi7lHP3#c)QXC5l~qdM;+t2|@sd=$T<^@gF4zzZy1xJt!lSh1#si^^NeX z>hvnuV}LUnRzA6 zvZ0LM`*m7Zj5ryMr2vs@S1Db4`<2)pvfymN>g=yhUWa^uWco^w2J29AStu2>z4p^I z%4Vc2t{2EVq!P)UBON2q->6#kO>3++Swz+m`>V^jGAY#oM940CCzio{yG(1G!!>}j zTdWOj61~)6@CKTl<+ForA06-mWBN~;g34aHyD|naJWEQImdyyFmVw|#`?J8Bh`;uv ziM}f6Q0xH`p$?p&Og4+s?C$-Mdl>%=de^A83jtt-s|7`7o`=R<$pq``w31b??+VWX z%$VTmrbIv@aw^6d)~U~f*Pl2!Mx{e>#hT=6_*2(J!j@o|UxY|zY@o_Qj9Xg>gIVtN z%{URvvxy1`8@kjGa+|DUscyBAp=2owwwOOF|2YPRIR~%#S~muhnK_FBJ7)dzuNzYh zeb}5akf2~vJ5VI}VX%?1$#~`N zDPf30RmU|G@(MCyLJirP^#{5kjA7p8gZU?@L5V+1PG;}{5h|P=?UJwc6h+G5s6}kK zo!0xgV+I0XWtX?-KMo>p0I9So*oNG^UN^gj5xrE`uuD8;@65_2Fr=hNsMoD!LAD3* zr~>B3RuY(XESj0s1yb0eNT@sHP)c&(lWwuFcGw6iRTq9xrp8q$=jssFaF)qgjUzq& zsRW>Z6yqt<^&Yl3(O@`>E?_X0YcFKI9xtmt7QK)*;27w|yktp^^r2(m5R1POUXpYG zuxhz)cwEj)^65l_pE(PE8HDRtUH@o;Y&Xw*>r-oM)CTKaYn8^91Bc3V5>;i$IE7qc zq}@G@a&yh{Tq=~d2B+Y^5JezlD}s6gVhxBs3J)utzN+;!2!`LAW^qIq#F=p7&XE^u zufS42u0$=Y^1>;zO*_v=`LxfV8j}N(D+$l&bFIG7U8hhw5dJuq`z6Cn;KsKfG>zcf^iN8V%A@Z91RqhPjT;cu}3UzXUf%te* zkeRa-9Zn?u`z*zJdyQ;yPjgMOc|9@!FH(4iBe3+c^PipciPX0afcHgjrJpg6~LT)Z&%Vfwx%r~Nf?(THAdiOl%duQH8s|q zG#&-YcR{~{N1Q7jG}-t4N3uU4L--;XlKrkQ5dh{MSIM?{8pTAC9|6eMeelP)J@uj9A!7PEb?h|QHB4s|0kpPqcrTNP(Wsyt)L#!BA3ezI z7Wz49QV8@E0wN>tMYH(;vG;!KQlksZN{0$laY`=!PIQthOuvhS#Q^;?u@u6T21BFK zY}b$siyqsOd@>HyL%{0rS*%diw#*X9Fs|!_63GRR)eW9%)@b^Fx+ZjCLk4TC%A=zr zZggmsvey4gtXC7iUxZx%Wfv|w{TVz{=w@pe{#Itga##KNpVjF4=HD~a_+5L$R~Svt z*+C}Zy(c)%rqqKveCnDAnKI7Wj70Ib1D4VDi^ybad5!Aq=u0X;a=So3^bIW;If zhlHMizp4ilsS{3jCWbO8p$G;-jv{fQ?S=y#ScvRN+?-BK_;X ztp$_npUQb~S8Bb^$H>+Q-vbX~b{9&Zriqi3e+!XaF>6z63K!alS{&>|&m1=%cb^y_ zMg@+Un}{%%S}zeJG+*vx?f}IX1L-Fze&h=&&69=&$0V{U-ZKO3UYH;S}Fce9v8H+FqnO4oCLPD$u@g z)E5bZT6rslfYygp@lbrme7iokCJH)ncxY3-Cg?G5^%}>kyZmRV-NAw!uxXV||lp36j5zfJ2Sujw7no6fJn>f4T z9Z;(Tq;CY`=ms1qlc#D6b4FUDQD%NY>W7W*AQ+Tx(c6p-U50IftUv%XVP@lv36_y1 zG*UYZZ!#5Xc(NsffJ@d^J2Wi_XEB%i7fs}`kbFP_j_=)@+2r-9{RGfHCa=C_4#H=w zrs4JjVzoH}T9kRm34?q^9CI76AyT}V;N;#BjdH);6|0nC zQA;+kL?N0~29&0;06p&j_Q}$>q79d9>*_i{ik*@`w@Yfon^D5FfKjH9Yzs3yCZW|; zToOxe>eim?)TTy7_N9%GC_{J%{k;zVV3z}|wt#X_L--8D?5I9s&Y>wqC=xcLAMi7> zw0`|;zkaRtV|W^vM!2)eZLxOsG#zB~Ci3tEJSwW6jNiuXB4gi5Ne$T2gUM5Afiw>d z6Z&#w6%}cWg%A%Uvu8g<-;SoBbvm>+J5S)fk5rYUrq{L?5gW)=OK9@h0d$?Jt#Xd2 zlGou7qjKi^o;ELg-e-AcQm8qBqfUZcT2;k!BP{erVAdkD(LjTMQRHTB6V!rrJ(liP zYNr%sU^4LAlZ1f=`W{aH!YK>8QGxXv!{tmN75_+LI#Qk^&V|pP1wf&L&gZl z^=EDEak~Qmka}un@h`dzYwGKd%V>zMvAbs!g@~#T*b*e6=+;WCmoBHqabIwOVEwDs z7J$uPWx-N-i&NS`MJ=r7&SV*!=O5$0j*|1H8xowLo@^i_2;e6N;Le?W;6y(C`c^2= zSAN_iWpC!sQXQKRM8TM7D6)i+$`%;K$VRrbrt$=N;26T@Y2>5ECuW$8LW_vQ++evG zhRYo%aX8>0)`GkKVFVf72-0O+NTAq`!$`A%Au){{2=Lp4hTGlHO@|$4J$*kp``)ld zJ2U&8cpU_gT1GUnoL-k#xwv@?dABimg^?r~gty?8Do=z+;^_mVCy|?LY}Kx_Ph$y< z$ToD@w=n2V8HSzc>?PKqnl%khcK<2EKpi&r*E-E5A=Dq*Y|-v|p?f{og|t01x=jTm zuRe|tUw?1L3zRW(CuUVB3Oa^yr}pBQZ`@Ot!9?;t<661=ON)2@58$#023+A8tQ;zB z2HDTvFDJEy3KYJzf5U4$mT{p`L;m2DD`1~T;_{4-BkDzH%y zA^r1CyoG5C0$7g$&{eo4U={=OYLC|_BoLG-5+C)WAk-Kiv4!Co<%fS@Q;jqm=Qa-7`vaB|9{yh#xDwPLOP}ttHjD~hV zidRV$1-}xoM|fF}8ckxdlv~!mU&E;tSEv-0X8?C78$5b`MHP8Vs1V5P+I0alpfEbn zJ7lfQPI%sj{A%s2v8{|E@%8g0b+VLmLkZiMMV!z&)`!c@U-5+iQybvA*Ri%a!xWvP z3`(O{e)9WEIIu!t&ZyIh^BjaKWa!EzDGxWBl1CRNp}?&pitu@ZURCN5XfImFq<|}t zb#BgYirpH#8g98>M29vvyJ2J$=L z1#lA!L?lK~PU?;wM|*wak#s9M#f|p8N2nrNJa9cW*@W&kx)@UIN-Wtd+*CLmTO=6& zzpK|KuT`gBR(J{$=BiF;f1YiR*v+y~pw1N%Kz>(-(PP&jnsPsKjlWzS27@8#Twp`~ zF|bL7Ggr|ntB29fAg!5#3+(rhfm)m)<3IyTN}|pZsQhy7Onz2AVOPdo_6@S+s_91g z3>&Xn^JafHMJHf~7?a;9jd(3yMOp<88tV=T#HS|)8e75IrZ^o$I{f_JNC&l7d`m>e1J!N+$h2YW)F6 zBGti_E-&5LW58hi^`5?> zULUPKs8klYODn_H-A}E`nA@*%eMz_@sjwVau{+5-W92U|AdNFAMl9-v=e)RFY2}<+ z90$X{^pRMCY_akt;wzBNSNX`okb#EREENhOIVyF?!4)v7d#fv1-bEe6w}t+`5?s$b zAZFH%uP%}@zcat|Ln8~g3nLt>x~5IOAkft16Q2`acNum>-fH6-T zLUS0!1k7rBvVQUhGN3Q&@8WzQ3RmVg`K8{4+9$)Y+xR=(L(Tnuah)P z@t#3pL@0IK7EB(*nJtqI%ohmi5|in?IFSc7EvB?%14Dv0TTty9(j$^VGYIl(;m?sb ziLE+$Vd<>1H!=2#UfGJN+;<1Jsg~@YLtZd@Vm~72z58f4(!}%Aoz9Flro~yVcToO3 zw%8gT=e&lq6|s<$hT%J3^Omk0G$H~Hzy_x%E~~m9 zcCYF3htcF_`NHS0(z#9-s0#VT*#-tk}8VqWy*h4Fx+k-~90VR);#8o%SM6N<> z1^%plZf4`j|1VN^R8t{W+mi8OFPdNlgP?nmmb=`oB4$R1Pry5Lw09d8-?SQ^v~-4s zw3MJ{y{@JA&9T;_wv%i~2d%22&aI81(Ka-hZ7 zH?vqBd~0aK0#!dAC~0gIQgOw3wO2Xj7dJi>p`En&GaV%_Q;u zT<-Lc#g~Ar4eQLVlV}W=YgT}BzMf$5-$!*VO^w7F5`#I*L>ZKO&~9`;Oy;M~Psvd3l2|4-P_)ACQYkfU@I&Xihj?0^j-YKsrZl7DZ|-kmqLU zYp+?98vg)PiR{9aV)=}mH8Gn*o0wv+Q>&P2=#&CuC~^8P2RL^pt6nbM4GzRM>m_oh zWI@l2B$dOO=^L$o=DO{CW8BnnJ)A7f^<-V-gzr z0QYjGShVgzrZ9Q`=#fXB^bcsZ7pcq_)#Y)<|3V8Bp0NP9bHK?fPjE;#f}=-E3G;MI zTz?~-N|Ipf;lFq@S5j{p<7Uw^PX9<`HEj>XEqK;u-5iPMV?U>(KC>lV*^b>%eZ;+L zNHiOz1JZutraR^tgPQNAyUdgZy;dt5V^*pV?=)tRTgVaOgb z^&Xzmni(dQJ}H?EsXMUA>yT@+Sx#0dZ)}CJ*3)9@Q)RJ#tQ-*Om{#2_Zg4tTWa+!o zShpk{$#@;~#LGsO8f|_>h*70+ioyx*#W_tX%NVN-I|kbF+m6|jT%`%kfhMHtfG36*kNs9MUiwR>TwCt4g5m|;Cx5$O3ks(OenzXVjOZnL70=fF`yd0E3 ze+yrLM;o0@c|72ZcnLAkK%?(PMEQUD0zq#I)ozL3B75{6dk#Gac3{M_V*Nqx0Z8XV zar700h2RMkjIqO#Z>(proepCD_Kt&uWtC~h0|%-bYphG()L*_Q>%$nz?kok0iZX>X zfAGLT5Lp}G%BMPxE>s*TBZPOG$w{9{wj_$wudV?)?T5MMMQYXB_3~)8>UI63VIA69 zf-tv-^$W}2k*80}l!j$uc0w&^j?;55ClP3Jj*<@(G4n6=RSYT!c+<7VGq`=uC7ay0 zvJgl%X%4p=ZhfT}z78~WyIE&H7Ep>N(h92*oUgnr(jM{b6OfHeQi@xuA}EOJ5{y#! zmOR)|eMk(0jqYpBKgH+~cL1bl@^BUk0I#VKngo5#^RIyUj58xV5;haI8fYMGc0?4(?xwVV0f)!*?tYJiSz=6ea-zSMB5h4I(K6+ug4saVS`khldcqtIxXRzA}s96d;%g#=7p zuaaUI6#OPQmi#9eY(eDpVzC}3IxeQ2P>mxWa*7B{uy=%Ia`%9X4j96?{NEa=w-G(F zLCKUDA!LJ-G}3_JDI&E74S3MpfXhY>a@Dvm{FH|2-IHyAk;4RD1N0d{?~n=)FW9c* z4~yAA@t%Yv{SVwVEoE-tpnN^u8~BJhQUNcBG64i?P_5|q)BVHArhgnc<-rS71+?>N zB~u=U+!fLBy=r>~y|V8~TlW=m76O#eQ1mO&#AMrXLI2Bm8?+;#?wTxRZz{BCbQgDg zM@M)ohr>$Tr{z94@kWVyF>M;yEC;kz5sPrH2FHXz4E_34m?k0U;YY^W{UFp01#ZQn zK*L8s?->dzBnEe9Ir3ZTft zV4;01T6%D4pcWU80q|1}=#|<-lMYkfSI#hE>-}yt0_FwB9!3-~;NKhOrd!5AQygxd8RnTs}!o+qCekDIrh)KxX{|f-P7& zScjXGnlpD-fNezhncLX<$lN#7DXP~!0RrrF-UG{Q@ezAwf#6CPRWl_U!PD%ad3`W> zS#b)+SUym8nl?}aVbB!j48i;*wTVp@mNNPG-OWM4l(A(C`tN}kwf?-$%`go6jPc#O zf@uB@Iy-7FMR41C_(H^sHh%IIBG)IW^&mi1Vk4@D2aHlY)*yFMv*l{b_tW$S79lUY z6F3DIB>S5fIN0^lD+(4fT##k}sqP!M!ndTR-}Q2kKL%s*V^>` zK-AKavZP+gP&R$Tv6asRp+6@#ZpmN>C_kPDZ(8;K7mtpIMjre!~ zWp{Q=c}f5xvEph}o^(ACXUk-5;=dewYd3h4YHn2>3t)`JjIvOB8v~^}pc8RA__)h}u%0I>2#x|z)Rq?p#A!eott^lYHz zT`zS*hqw`lDbWZzxU;tI|KOd)8N3j>x{k#RbH{Kju@CjD=yFpnCtrhHxV(heSxV-0 zfQ)48izRX3i)!~e3GK;RCW?jJ31+h)Jnm z36!Ir1aN35-o*M1J>@HL!$Fsoa;c=LVIcbw^c8q)10D=yEt?!knr;x=f9|#R6*X#> zst~A6;9w`hnrcqY6;FH+9$_01VndzwQOX?|8(GNvj1}_$_Oa8KO{O7CKWB`Vte}zb zbKwQ20&EEL?SKqd$hF_63T)fQT_%fLne9?kY!(`@GiNB}RVl$cO8lyoXGhD#70*9w zf2P&Op_al@@PO2BAx!)0+khzTdw-4lz4cUHu9(87kkz%|2;Nc?)5X`165i!sOr#0^ z%OL-_7^cu5bPy&(41sfVhTdH~e!H{xVTX4hZQ}qF zB&1rIcd`+BeX^0xM2E1HIMoZqD6swP=xv+GjjdwhR8D7xOy9WDq9C3oAmqlX&Z|Zd zHf+e21KG}~y*FIUovx=^HG>~*%d$}hvf9A(&~}}TBzCnCPA6I$eF$l>3>?*)MsXGZ zODLxi6}MdV(I`3sW5?uFgR#6@yQ?TE8jzO1E=*d@3Kao3a?($uNp1md=<-%5A1zC? z`M$kg>`BeICB@9Z)m6;$Od&!VtijS|Y1OgRh$n+=i!JRn;K2X7+zoC$K7nJ&(O0ZM=JeCUg;Q+(YjFr%wUNmK@!1=%d_e+!OlZMTpU zA+2A!8&*-0wc%#qD&=6COoKj;>zAhVOBgyd<%l+F4r?S8iKR@jRvV~SXYt{@V$q^> zUxx4&B*X(NF*!~NCQj(oSGrwBvS8I|UVv05Xb7>OS~aNLvP}H(no+LHFIDYmEZ#^P zHByMjaX#W1BP(vd|PO+f2au)3r(f1uu;{|xQMSTlq@WrT6r zidTWD>eIgjokmXAS*PbOQ}s)1d)0^UYv*Mp-4gMgDH3}k$~c-rhV2wDNbaUawmyW;?bJK;C%_EQ27n=3H+G;()HNI0Y3hiP;cS+eQZqymC*9i4*4POmO?8wE4aNVAccD25>X}eIKwn~+F#kFHPo>cPd_bqb;jFe zb%X?I)2n5Vjo=Z&MF$%Yz1g~6f9B}tR1|eDJGkSp9Qe;y8sG-zSRcQ9Uy`&{=IRe` z`;VYLAoxA#G$HdEJ1hB$pWw3O(aNu7E2qXv`28+TM{XeTW;XQ}tSysTOuKgbX3GX@ zh>g^w*#EB{LcMeQGTRe@VnF}FS$xZH7SiJ{DHV5isxFTs{S%j^(z0hl z9f?&p)m589&YP)x^3CM%6tVFto;iF=ECUC8QQ}7qw>RXv1S@vNQXFc7 zvngLKkCN-1xY+}n(jY#6tJviTSkfa=WvERzyBaz{9i z4UP0jz_NHdI{6R!SHl>NqvSJpyodOI`1NZZVBHqNs0Ds(xWFtl7tN+uO9QZnIeE*I zr%}+Pb+ns@wZ<%jmCnfC+)y9J0;v<-!734nWCDb|OcMgug(qIUKZE*B%T08qfaL{v zx~nh!CuC9Sz&r1z{N&UK!Epvh1+yg37taQ)Vj5JI)zi=m3pQVr3m7qgK2TuPgle~| z5ELZuSi!SvE5NZOoGH#61#8SUV`Ou^?wlnlhTNedj95G>u07hX(N0YONp&k0yJO;essxC z8Z6L80=sRSL~HNVZ>2etxTx|C@XYn#JNW2%fXvKHB0M%u%P6L1kfkOM69=#wJ{gi2 z?wSkK(L|?c&@0+=ckbS|LvK!HQH<8@jXML{wl7@>REFo@JNdBX{`h_Rv*w-eKY6Pl+kZSbq`d>X60d2Q+6=p22cMt?D5X)xJfj9y(aVpsyVgz$SUK>UMtwYc` zZQ-+8gbhMZd(bmEwo6n&mnA|zR#$vor6eSxw zU+2?=W}?_wR;Q_l(V}zc9AkvqbKabDtNnM?{F~t#^2pZTAPr+Seo$L|_&q-z4(QX~ zx2C!8*wWMM-kQBZGQ(JJ>K!v4NfCr5wE=AyosUL-8uST`q%w^5oS>JQlM~Rsn|HVF zrltz+=Ex6Yw(ZZXs!Dz4h(_Cw?_T14hnsc}2#@tf2 zWsKmJmD?c!?Qy3$o@l@Gx_p}}scF59%?_uM6^*wGXv?4`sFEJt_D$TbWQQ|74Q>JL zZC|p3$&RMEZHz%7(O!FE76FqAS()a_aHuUS+0lS9i~)_Q3Gzs+t!_fH!;qKdshVnU z=(;4;qIL{zs#(#Xw!~fq!>NY=n^f!&aGJ-?Komg%mWI)3y{W8Bv8CYxBb6$*n1PlVEw$MRY(ITX%Xl#eW?h>0um811wtjs{4?(8@ZC^iqUCGWwiyO=8FdD+w1QYGOcCQ)Fxt8u) zwrc`kcFmY=L(-#Z>Zw|EEgQT*6YaUansd!)|9oZst)KZr9@+MJ@(@%V*`*hvakt;r!~frHL{#k zXk%%bM%E}pm6f#^K@~5CGS@WGTx83`h_53jW@cXPA%nLuhP)gC52LcMYId4JcGM&} zEkbSxH4kcjVoS}=2l}>m2>Q+Dd@svGO`OnmO#<5YdT*@e)woyoLhYRt zK_`})tXf|h00j;-rW3}Z4bqE+&Q(jC)CZIuPcw~DV z%4DoebG))5(|)&-6V`k^t(P~$mcuBZDaE)#n-+KBPPDf>n_I@LB=x${D>kilr%O(R z*u#*zs;Wy_)@N!e>m#v=YEhRWkZ4fbQ;p5(=CULhaXroBb|zZK4g)$FvNB0Emhemy zZR1i>;h>fkIWjwtu9%?=(L4PQL=)u zX$se2Ey88EBcMUJ@4>yAgR7~g>$91cB%uA<=Aro(<5xi2w;qOe)3-8ISy+p2AHuhc z_dc8E-hlRQCpJ|yXK*Y)W49{N6pL=FN@_G70!@Q%v-aFNx0J**?FsyKBWIGAru8#M zwSC>lc74@kREzHrlMTMM_ey|uF{X`0KxkI(6~1doR=5vn&8`$BE3CGjnP}=VdV}uq zxyI)FGeKB;4ujo2(?shzQGmv+97d;YV@>;QQ?%C#>bPde>p3JpjF5GGnzJ@bFtAx& zGE>P7Pi)8YWorIFO!5HRM%+?R7*$7hnp=IZ>R7*OqL`c3I?-5FF(qJD)lAnM0J=0SsuEyw(nwF1%`4NO zYOBWfH0SAPqGA(P)tV8Sm`7fXH|lCsjZv?eH5j#m5#fu?MF=UVo6SVY<``pAa&yhb z8bf`dOM2Q?O(8W~gi1lE(qpv;RaSVKgAA(*xoJPEDXVDi>8JdZ@w`tZnm&~TVDTw- zS({m5T@60<6wuz&3HQ|bduxJ>rm@qH^;xGIY@(={X&Rkc8AdfTpvx%%?Kx$9nsfRD zvzjQ4e{2tJs!7vYHvZW8OiWG$Ob-Lp^gXikY4Kx*fT0|k@OR%=H1|(H^Gw6=$cs}= zRfX(et-Y~F=Joj0<0Uf`ErJ?!izBC}Sv9Xrdmd*dKLpOdqXdJaH#RG}W2ma+rt!6D z+nuHzr-^HRWQ#39K!cif?RAHMFC*7 zo|;Nh?eWwcM*?nNY+@O6PG~$-V_r?$jYLzc#jR*?J?&u=g;kPbHn+2~GK}DDuWM|r zj7}Dsld(xuIwe#ttJiF9`yggHu*=+O%)J=@%zI2KFL>25b5v1w%c)SU`jCz37>5Kzm2Q z=(vkn6LcC^nzk+yz^5*{z2-zA324#935|7SDjIY#)1Hg-k|>}#7bivVRr7}wt)KZB zp-Ej+2W$Hi9fo?-hm01Vf}+8vCaeJMeF2sRYwol5(`K3-ciGxI76FYn432E8sU~%3 zO~{R>MTc27eF(6PWmPcZtL7yq8gv?R4yZYooat%b9At&MA>%1`$Rpdf9MH6z!@wHs z4yT$h21Ta5Zmyp-)%;)#%p*6=31E1#Ool32Gh{2Isbtmmv3^=)$(a-k{VGIFjYU9% zj7_x1j0(q`iS`Sr>0)#;>#CZs#@=k=G`zR<~k?Ez^K*=ofUfIMz&SRXsVE{sYQjpQ8-oNAh2VAeG&Y|`lDY$i1^T^7|Mgc^d024Q=Q zPIGYLl9c8j#F{swva(5SHk0Q;8M+t}oeXrfeefv*E1<;(+k5U^k^%dpYwoI9VKL@L zR*Q_LDVrFvd-X@j53Y0S!9Xo`ct6R66jQ;UDi43q<4dyf&omsMqLntO`&?qSRRt- zYUIUfabGsr9mYk`UO#TGCp1%sakb~>%=i${y3?2+Ma>S@mOGkCUKwS~B0$q3GpejX zeigH-XpcG6$>c@YkPO)D7tCPmG-mqf=} zP?YQtWEj}QoD~IVZwWfh?T7JMb5&>&&>AD4kc~HOD@jeWgEdvF#gL`ZcnCaPNR9F=TY7vGgN@AG? z;bT-5Mp>BDfT;H1qp&E(N6Ap1m_3bn7!&qr1h1Rln7_hgpM%c7dPS5-38VuS9v7m^-La}@1=n?HuNemPwktD}(~ zscHQD1hjpI1l9B-9MIx(8hipqXj0Uipr(A!@MM~MY=-6~(cb07=(vX_Wl3yWJ5Mxj zmDR*)%V_E?x`k~(o!Owv_MCtKMrc#X%hQ}wvct%PsL3>&h_ZtPI-9*Z+I-iNg%U|>ymR@v04V5oaq>}aYGRng#Hi~*bW zmH?}{#W2uCKv6TpsE{3uqWv{9vqIBcXC*0u4nrbq-65zfMn_%}YpgP3_-5K_bWc+c zV^-A+&5q`p)dk90WMG|a+JFdXP_1fSoAy*PIM>YPr#a=!>AIw*{md{tlJYd?RI)-c z;L8gnDNCZ776Yd2vIr<@>M$y6Hm)X$Ing%CO*K)|(`gzVV$&lDXmM6p)YV{|ArPk` z;4n6qC6TokD>%)?4uhgSjB`R#ndTQmooWp;3~W{w0hNVG0vZ!k8iu>%w1tpmQ&?S~ z45&qjNe%%4jQ&r9(CMVw<4jD~Y!1H8i3&|rSQ*(It17HbMe7R2bv0Hut4dA++D^?i zrw=23*7Q+OwAf)l_cSF2rHSHlL26o zB7lgJkmjz-dN4Chnm_2d8m$SKWagR!8f_okR0pz})HHbTnxrP178-o-IgWK{@8Ez+ zUYa{NC9NH-Fg7=m;#6`@im|cD3hQ{I<)uCb4{tae-o4?@i^5a@n>C{iPG9LIce;VLxH5W z6P27q(`9Mu(>48tBqb?UHC>kW{7FZ13k8tZLGzwAAZckmV4|kfxI*^Js>!(;P5V)D zB4C0v*pHG|W{R}e7N@c(pGi|q*Mi5oM3%IGuDKv9PzHiz(z+att&EJcW#!24ph4-W zWQfupYc`jh2F>w{XunT_K60V?J}YBsCh3r#kaV=&=?Ynz?wbi&Hc2eWlA3E;n%g%Z zn<^~r^~sKun(J##O#|d5HP$CEFlEyK1Q5w-LS~et$k2369qEw>QAS>ksFI<~G-*&f znmNGHo>J0dS*(jQtBC?x8P6;LG-*Ar0}p88P*ZB_k=1m8u8FXjkf@Rqj1wsG;)_pq zI1-Ka@NwXqJTjp*XkyCZRE@TvDPf{!hE+4`Xy!C&5WY)ed1gU`1;COM%-S>uL7#yX zqRXl#iof@sMOluNr}nTxiU4p)FgcO$E9@ zQj;@+K^+MLU7wJnIp#F9UkZye2VB#j!Yrxz24rcy)$~kIOuO^4BrRqHmeY2 zEm$0xu`Y5mRnv88(=#F3tR_$-qU3a0nFJN!(VPkl48Rg`<|c9+Nm!vv0Fl&8ndXvN z)sP^LyrgDIXr4_MNKytMLzV!tNddB?tZGD9Cz}avD~<9aKOl>m8wrYF)@6AtM{^x% ziK=U6*fcRS0~)3bWMw7-3R;#~AxW7y*W|EJU|`A(D06{0Q&u%VlA06Nr9s$d7k~6DmX)iD!IhA#3eqjf#EsBExY@(T2j>ZB5aw98&0XbEZ!lEp#Q4+&I zmn?{;S%EI8L4kqG+DHmYS|aMv9%a4OZTJ5I0|b<1Eo`hw&4R}N`~S1Ts{9KK{QC!S zt_f-G|DB+nKSWW_-}w`Kdq1b2`?p_UfIvIzfBpUZ-~0pv*oT^(g$DJ1bIFe{FyOIuY#if948g{l9Y=hE7vIHi5C57I zmL)yIj|N!y3SUYQz5zi8!guh!HNW5Y@V!WLbJE^DL1k5vk_g^oZ4?ORq(S%Jocn*j zu4&Nxy`r)l(Ez{y?*#BYLebv4z`y|S*QA*$?cUa1-L2>x3Ec$-2278;bARt{+&+M$ zn4n5-w+jrw_5m>M+1UxOW}g_lG{CYeI{^=v{Fr@x*D(b1V=WL=)_SC{HkaifARvea zXsP86p%cgf zlhPJ8g+5_fjsY%$2b+UFu{kUKyz%pjoIdhGfDI7+J&y*sro@yTjitHgl=A{C2SGc> zIGm}{*g1joij8GO2%z%;Tws8}Isb2~qfu!7{msAM`tVy|fWUowXHs+T_Rb`RAd_hV zf)>56t0e`9)1J4$0D&|hAntDts7&nUk{j9 zM+3aq1FUNLV2|crw|8AlREGnSl!nsWbtNk-?V4b+>vc^qKy*E2K$U0!%yKQIg@2x| zhyUDIol5IxzM4`9MSrI5jcmSM*}=}K0qjQO_Bi! zuK8hs0RnE`ZrV)HVl!;UG9Gr#)ij}@5VYs!+{~c~6EHE?H6?sq3IyxR%hrT|)4@O$ zf=Lj!!R5Ey(OjU8BN||tfIvB_610yVnSdip1x!nekzZti0RnjE zglvKAAWKU7*N^$Jw2uik)2y`k-~-7^La@o)<9F=1vf8ma{&*}$i;gkr9%faX0vhe+dZM{>Pt`h7uvDrp!IT#H3?@b{$}Hy2D38c1ySzI^q5*byVRu4fT~dp?0s{qD z4gvydQratKWtIhNU4lw(t`!*AToOaDx~hwLCQFOD0s{n4vFUUPn#b+9(EyF(VwiPB z+D6YLX&OCofb7M!G6HY71GI$;cLJ`!0KtRX9Blu#`P&74yKkxK(DXqhBtQlPp-EYm zV{$HQy0?}UA-HDc)-AhrOHtECE)Wnnx9uMbNrUE3(D+qgV1S$oRzFVE#6Xrodq2RY zk^{J`Cd#6;b`=<4Z|mBitMokAtdfoaoU6gNhPt`8tpT*LiUC@b1Xu%1RHMOutrv*m zTAwXSQV1}L(gB+FYRjsu*MzJCJRSg>nahGS$J&0?SE-OCwO$n%hz8gt*n}*p#Z|ca zRxby^yUq%$(pFVqK%>H^+MKqJidmIO^QZ)xN>UlkqHY`@wiuNlbcL=-(P%HKzyLwC zspJ3;o5P06kf53-C20%QvMR2*(Fm1NfdNQ>{ZoMfNy*Rv1hb#=)15CqtK5nA5B}8q0)c@?0A$Vd5H~ z{kyEHc}bQPxum15eiRrOAbx`%FR8tE-_cwRf@^j(*`y%tLsnKr15~tct|%}tfVGiL zy_zzQ0s{mX^!RDdd!wNYK#*;)NmX(dwCy;++(=A|y$M;=guuBuN{OH`$K|LT8!d8# z{1}@iraAtN0t3+ilGeL18el60SdIoaQq(jn?QL`0o}iUNP7Fa~-Kg=Y(^$#PWg)cp z7+c54abpx1z%VHh$ZK9%WjUe&LYqq(5L8x2dNh;-@P=Sc=AAHX5qQf^Zz%WGUe!ZKuIU&IS z({K4-JHJ1t42?&_-57Gd_PYn)cX?7!@bD2n=dm#k%meR>%h0)QKp+~}Ns-s64PPUS zzaD{LX(&T~*ssprKM06~1m=d!&;J`cI)bAD@fyZ{@z=j09~4A1wx!665H{>x2n7d- zhEl}eb1^Q|*L_bCQ2-t4KGpaDL5QgD_i{tWMPktB`aysD{C^iP36*w#z5OT!6@>o& z-T%kix)2V^W1$r3h7QKp3$?o!6eN@frHFIwe*3;->{yvN7JQ}1YK*Ju{(SXCR4A2> zPZW-EG+KxqD`QKT%ka`0j&I-4!6D z$Tx&;`@sbZ!bKOl=)140E+!OQocHR3Z_tnuo+10cbzm$C4yyNCx6UyyNDxZvKDh6A z7a|H2-pGz!{UMA74hWHkP@Q9MZFTSgLW1Gv4K>FR6d=SXMf5lNcI5cpenMli z5Fu3Nj^9w@WpZ%P3t>aJ@u`CfD~^a`7y9$^TZS%T5@CoCMsfgva0P4mJ!L93phBFh=;Ca}AUTM7w+H+7Rl$Gc+0w+)EL- z?(w#}=JtreLc(jfuib6r2Vr9YQm_!ZeccNoYfmZ?NOT^*qxQRgs30K}v`Z0osLwS= z=S~$692y^Cze4>-LL}kUz1HWtt;(=aDR>Y%R;TXnaZ98H%xftUAIARIg@{Bb^hy!e zy06>L(Y-$=1{i%1!uRJKAwPm8lHeZ3c743=9_CWu@Q^n)lsH5lHcF9x7~gyC-o@33 z2ndB4y1Q-WT}%SRK~#4UuJ?0(U4VI5)-^w5=v;j2q5=Y?;_i>1!rk=A?W_^qnC z?ke{dBs3oW@ad{+RA+}lL?x;(bk8A!#Uk1FqP|;o_|23{gXA5A?BYrW7RTGS+R}94`g0OQL&K{t{J7uD9Wjz6!u;NA-(TmPN+=Rczo@Vot~2b10;E9sy$JPbqrlgytO@v(Ab@^HZL#n^RvRkLt+29 zUFZ7o*QH5dIpZyhB6b}AD=6CE?c^M`Q39b*qf3FX6 zbO#P;^8B?SbWz>i6<{C@Rw?pUAJq5%>J&~K5d|Kl)(ExrTQ@dD92VR`XN?S>yH~(m zB!!Nb*DZ|fxZ&V%;eD^5K!G7TDbn%x^}bgaokLVA7U;COSG)gv9|;B!v43A&_n^>l z5aWx>@7}I{TzG(B9>0%KpTB302o;Iq{QcpxtG;~-mj;OUd#-nz)!iuo&fAzW=SUAmRa`%TA#x?=!!|z=5)m`TM!`2p2jW6i{}R*WF(~eg2qWAR0c7 ztM3XD9x(5uNQ3aByI%*}xk4lX!5>`M>+Vn^ggjg#`&jqgx(Jyg1p*OSe(pKc$G`0d z5d{Qy-RiIUaNRTI!J*MCMOwSvWq%O%cf?c>Ed1{Ism5K%&|+}#&`^rJa(g@Leq5eF zCJOscV8Cr;=<53W?JIzg9?(T)=5?*`!GeZ_3bPb(UdRwS!^a;L8XS$+QY6CY9i#fb zGCLwt$Buu}Kukb|(W84D_#K9{?lvN?KZuIDU zafmQHlp<~2TV=R!_rYgSkuGr+Lih|Ljz=T9$1lF<`gI`=ED-S9MRtx2TQ3R=Qag1A z-MPN!Sc#Aro_qVQqtnQ6BM}i2Ln-17{oA8EjxZ`fFq4jtwI8oPbwDtaT`BU`qwC%n zT|cZeOdcLe5$O6o-H!h5D`|kZFq9(CFhbYR-xs>c#IfK}iu`NehWwUw;X*?L0-qFV z@kQs{yFtML!lAqPp6{-%CGkk9ub76QpCZ?&#Ce=|6(u;2JxkcM#s** zTi3X60Rh6myP5r)ceMc_!k`^L_xtNFq#!6b*kjxXy)kKEcu|Tte+*yWLe_^7m|vuh+g3f!d#zx!)^_u`9QL5NiJNs;y*H6B z@Ztaw*=BC1`Yt|)NG6t6cKh$J-NR5I8r({e78h>sI)2V^1L8p8;Vyf#yL%78@ql

5q{BK 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

O->J<9MM#7;I>G9#;El)vUmWv_#{(`5HeXA@g7 zSr{loqATnfSAdDebmo7-(XtrH9;ZI*%|VLK0U@H{8P7OwRxL59$=zHZ3drCvsBq|8w2jrc9% zoa48qGQRC&G?m+#VU)b3#Ga@YWg$i*dKIYsRga>|!;k-d<*PLofTi2c-$@q|W4a!g=A8l;q~jA`;Vl`ieQ8v7ET@Bs%!_|B34pZK)9_s+yz1r5 zdxvs!``>b1JiQ|dAA1ixaznAQr^xLcvlx&(Yr@$Sga|XA;lQ#j0Hqgpyp}@bL@X14 zhDQclfxyNK4hitjihC{r{-mltHagEIgjitmSKa&uvw#($26X+y!?&sUc}>A^w^FT^ zoh^mjzaD}qX9GhYkWqGi`K{QiMvaF^#qkdk_ljLJjbTZMN^cQ2FiC%d1r~Lptgp(< zKOje+3!i!++{d5Dv9qge@?o)ILGN)P{mX+nNRsQJbnD4(PaeLZ=dcU3meds z@>TxCus3|h#mLdT#&s`+aMXsY0iqvmIQ5Xb&{Lqb|3JK_^e$Z>%+nf1sn?OwK((BT zZ<2TKsYrEyWz`)SsOa(1Sj2sF0WmjL2(=U9*rXyNw6+}I#Vd$|qJceL{{P8>yg-(8 zAFO8PXHXAVyIF-gSq_eWW$#Idjrofm7l1P3i1PCq$$Kt|^U&OoXC{qKqM=N@aMuf` zo?tQ%$WRbXs6fO%q&VRc@T)Jr6>y9-sSD;yCKBIPaqo$<>M<$f%2EfCkC8 zbnJlEub1jk=yXgD2d4F*B=;I16@`>zlg}|3c0H(<+5AQfPD5WGWxdp=d-UlDIZvjf z8i&%_uZwQ)JDa444Prt_f*d-y9f?{}PzJ4^buxz8}RiWVUlUnJb>uZ@S}nDJ?*4OH0O zu^`_f9!4B9r=4FyVwy=o^Sq2C?F|}Eh~ux=K)-0f@3?JjL>XsKszlVaop{6=UP9~n zvkbc-Qs5qR4x`2wnm!k)8K4G#w{Z?ivEPD_o|t%V!Sn`L9pLwE@k~IHDph>mTHjYGfNb*kJq?&{-NqQINx#@brS5 z?7~Vqg}N1Q`2^3oKsU-k!*l%S8s*PE)NT-&f?ZrPLK@o>u;T3F=*&3ifr7D|#(hq{ z&A8qh!_5?_`T24|iK!rX%9d6=GNt80h|?F@cVSmWk;xBfrvTkpp@{G}1$bKrC*z@e z0_k1EUh7TVITRekjyY#zV{}OW@kINh*i$eHTU(K-IKXPT(UaH@#<3mk+1w3f6;Z)S zpq^{w4&YOr&j7CsRK;aC90w)i2#rc)p`)esSiyU*dp{a`v|Lr0Gy%?mg|Q0i>Lte- zrQ?Qm@UC)`KW|yH!gv`1u!+Cv3>rO5eru!5W3hU3f1&bpq6-P3a zDeg@|{;7I;3b)XP7aD1Vc?96B8WCN}rh5y)` zvuGf5uX@1=wpHE79)*MF?vzADoH$-vTB&T%^X`WTjS)cVs&L7Zui^DxoV5Vc#-Q_w zM>nS3fN^uEC2;n(u6Svxc}C4Q|NG7pSROoYp05VQT3hcXZJ4D1LJSnt7vY3*uGRmE zcZOpT^3mr1x^&Df;j<3x>H2c`1%sJ5ytTY7Yslt89oq%A~aUG{E zNdhoOXB$hRbqNV1`9v6Un5lNoG?4>f$7vdOH3d$khNXbrt=|ZdEyDYACxNL_B}o7o zOzgKp0()WU<`lqw>X&i9)IN!>?P4Qq8eMe;$&kI3`NT;fy=!@D&Ob?ph$29oK`1md-LP`D zc@r>N6Xcc0jWm#fZZ>v+d>t}-V{K3cmo`y`ZZu&v4B{}n1_)bvjbcv*luImatevgb zm7?7S;vEpJ8G0>`V9ub8mS%}vRZ4&f!jSreP()SqJ{l%HO6;`yR?uH%&=v!Wu4r#? zSE(RP-)|)1h7dLe1xcz#Yp@F9#5y}ca|C%Y6Wn$90F)Tg*dx456~11L4KlRr)#Y_1 zm-%dOt#~}FdSef(BQit4kbvC4n5w%!L6Qqy@47*)<>;z)(3wcGnFJvzXwmLlZ%{+= zruXpmryngUVmH9)xFR0z#)}C{08U{6N&5gO#6=eF(pYD{r5c42Dd2!fmn>(@ES1#? zK*mNIMKm=c>C}sZBs)$6YD6VPh1dA*yfw$g#$niZx;EZ6q_2I{8(xQr2C$wi51sTu z&QECDC#tiXJVNg|S%@IMbr7@=uwPh?>uFF%ZWQ}4{X%kBlXA%t^ah5fnvHkR1LwVfS0liRErk>? zY?CSpMJk@=zHv!_2#6!)faDTU3}%6HfbV8c$1F!VILFtW4^9zlz~9@TJMkawQHg|x ztu3P0LvRGw8Z3xJnreAE)gD>5yxX$jr^0u<4C`odNzm4-5bFFVgC?-QF_)}JStVQS zbb_^VbpEh)Mbi%7a+0LUupmyRaDukxba z7m~jZ71Og_s#Z=g(6!poK=~{-dJ$5LQk}b8bAj2)+-n5(XiKH7dX;f+Ai$*)FFPJX zNx=Dj>SQruf^qQ^X~b?Jk%I~TZv|>dp1du9F+F>P^yR<9DcwxxhSX}KFJ!zksjWRd8;dixY-9P0pk-Oeogj44RdubO;%gPetD9(a&(6s$k;uu z@84^-^YzfhKUP(bP>?D>68=t@RaDKqpJ^sWC^=w)6h=AUR^^l3H< zATl-JynoZ^vk;RQJp0keGr*UI4gVP`-c=*4TkEQ~1Zc$)%ay2ymetfr2DnF~rM=@K zp^T+i*y3~s6-)8RT~&4+3Y8ge2v_NuK=J1RcY+~LYLFBgIeOJSH4UYpfz3!Ea*zjE z5pJ$%I}F)~_DZmHh}T0*J3Q3P2D|T8gE#(?T>vUg$5zymT1Ojy$o^)Y>`p~ANkme8 z!s5;DzjH%5s-&hI7cXL_w5yB&w&tj*$P+6M_r((9-SMZ>kOk)U%agA) z9u-XN^6&u-i(CPbFT#5|;KM-m(21$M6Yi``>tku~&QGWXdvrGK5S@sc331>yVbUVW zf|^M8h+=xE_jkin!*0n`?2j{LQ+07)+`0Si$T|b3W*(_r!{Uw8-Mdc*?a%Dg_{|>; z8{K;m*~3!vrL2JP*a2~jL>(042e-g}F8kO;0Dt5Ec&R0|UBKGHIx>~B1z;fi_dURv z=VOI+oGg$-dXpi9pakzLlw;H8qMcw+o`g8DqqRe6|5vj45q^o141I3RlqMgmk-R|P;jFLJHsh_$BpmG{L! z97fp@^G0D?a}O81WjLy>XbquYJ9sXJ}zAARkWj^dFdXK zpc)MtAiu*v0N_XW+R4Nc`C24G0J~3ytU-gHl|dz90I**o9f{#2BjPhKM8mUBO4%%o zvXmHu<495kqf%JS{0GI!h4#}lOH8ziqpT8Wz2)rBSTzQfzrALWgQDBAk~#}s6sGN~ z3yRZiU!oM@1_33_LS5L%>#*ouW#l$9o6JBK` zEe+nZ2|?JG=_X#Xm)}Y700`gml8Hty7!aFgTR;d4#{@`s*IZOx%&4`z^LMgJ{lPYl zoh3D8GQvXX?G56{(;gpv9rmHg2p3aSiQa41s^hX%3By^I1^DOsJ{^4gDI*x$3rur> z^noch4u0tueb<8<{6%LH)?UVU>-0^B&l88*5IVTCG(l4=uO3VhECWu_>MakE&$ws` zUQrtYZt*&&t&_xY%N@Yc<<2PrQ>$JY*WkEdE%Sfbl!1G+z-Pd898o-@qIK zy7!$ZJ=KnJeh{Am+B%;sRq?DVK*w{LtW7;Qq@ms4Glk%^jDV%#C(c&e4n~j658whW z#-1mnu7c6IB?*N*!-}apZ?fJ1k;Pc@@xH1wTqKB#t>cTxDDM_=)nBle_~7zG4_O8`R(G{Cn8qlC_Kd6hATK*AYv9RC4k6A6-$HnF?kWn6 z2^o1CBLpBc%<&7sgG?x^>%(b{pRVMee*wY1Rju!OU$s4Tn;OOKPPio8^>?-vk?Z&< z+RQ%TD&CO1Du=NZ`E5c|usmrKMy$lFLc<1g{|~#8=C!mJ%{K?>N#fAFtnXO?2_ZsQ zs?H_bvvQ4-F+OZ~4TBpbCA&dsZ9R6{EA7 z#&ICU%ohM+K>+@VBvB)_4eezc`PES^7)4U%^dY03NsrS1VFHGUU;nXMv+jzko&r{y zD~@L6jMvaDL|g#0#ShTuJCrn0nW)xOgrx|#<#09w*eJ$R>dfp(VDw2=ynuK^CQLV` z_yIlP1<4iodBm@tqNJ1qkZ~czl-6Gt&QX1pVJ8h^<36AsyUOD`6YK-(RKk#BDxD_n zJ2fl(MP3*T+~z}CH*D#)vXD|hzWbk;`&Y&51!@X*S`t5kZb4iwm6R3a7a;3ETSnD^ z!RI^oBYt_KMN*DwuOoRO{MfXr?V{)EN_56IbEukqmAO6xak@!}Smb;g^`)Mq&Stqd zz8{a>kvwj0EbK`C5NTqrA8AE)DFB>6W4{g%NpG^JO-;08q9K@aw+8@!8%qpn?V7i8 zvj63qaDMp(g0f)wEqbP)3bQGG7&Zh>j3qUAM3Ty8Acy!2DUjRml4^w_`nv632ckan)>@xN6)2RB<*0ipB^Pl zEfC0WA}QU`J-w&lq);N-jSg=01SH4Pb>LQh*rQA_#Vfi~tN6%aR|T7*+|saaCJ;GT zLt?Dvm%m3MqQyOKyv-cPOtNa48<+SSa*QG#6T3miuPtYPbvh3h*sXrIqiiM+0!Rd+ zOBO2hKIsh*jyF6f7f%>G4fE#OSPH0hcV77KphFFXW4EUh*{p`;bKPTxT}C_+P| zz;H45YFuHfqeS^mk}jtj=0Nr!AA*_kVz_Yfup2#GHG3N1Ukh3v@x{h@fotJR^zwR^ z5&VQ~TwH0x)P*w@?Sx?u?4*sj8>bWSl{E5~3WX(T#(6_N%>AdD7LKGo*;X3~ZxgDT zsO5an$4X#>Z?daXOt%f}MOZk(Eo19Tch?sUu6wU~FR8}!?BF#fX*9!2N=8#-4UQz^ z%VHuIw?z_)Fg7Ln=$u#`(O3n6M`+&+c*Oep8_BWf)nnUuaG!)mgKuA)6TeWnQII{N-mwEvLt8lg<9(B=0ZbVHp65IL$hCuBXPU`2DujZm3xo(^ncxf4LcF^5Pi>Nk~8UOw;{FURXVIt@iTK4g(i=ll`2M75U^g(k!E^s zB~RKhS*@9b`QuWpoS?rAW{x1wrpV+=_birLgslQlZn~er-f1~L{BkQ?GIOhZk?|zZ z;(9!$O28u&G8J`fa4t|JZzWRyH*`FVK&gbIRWrm_1;P~3Gq;J*+@i=GN`>Rh87`)y zU>kRE63|JCmED2r-Jt(DO{ggD{Ai1q<;4x|RxH^CJT^@Grdfz#2X>tO zeDV|ga(xa!c@9OFZY6fJw*$sA$SN%&Q{732`l$+|UgwZWiEfuu9pYUXoK)Yat^Lwg zi)gZ`HzduuV+Eh2%!(6d29SC=F|9khTL*O^Y^5A)3`}n&Em64F#!{1h?=IQ^kpi-z zReWMjFn$7aVbKqv%siwe(u9umTaeYPq{77E)&`UXd~PUAd9hm*inZrK>VwQj`b1Ga zqfS(1PPa}aQIY-}h^xjMG+M+Dl^unt`Gqew`6W0ZqZq`nh)ehuq)1Oyz&N3&o2SF= zHuyP(^ogm|wYcxKh^f3?s-++LYvh0c{vZ!h3b^xsNOnx&B%_#5Z;N*Rs*YG@;Pc`%D=;Qh-Pt zcWXD=UipdBec$fOUk=ZLA2rzxA{{b6vn zr){2fPwsK_pbWTXOFhrv(f=Esm!7O5FUkVF-8G1_JLrjD0j^^KpqCOlieNZk5M+o` zbD+;u-L$0s2|vcYbcR(YP?lTK-Tg3y)P}%4Smt-2p9XG6o@c<)NiE=%*{5Ptpja3& z=y)4%0k>UkMV?e`=KQf#Whhp0)+CjvNslrQCsF4W<0tBAn%3Tq5x$0@_^|AmGL^_O z{DbMYv0}<7Ev2*ZW_u#gW5}ROyr>C_(wFjx&TUGz(hG%D?U;qYqb#{9oh>d9k6>xQ z1|KwfR(x=NLl~M*5C8;0?`J~djH+IBUL@4D2RgV5*lgqkiH{a*jH4sj(AMTZO|=FP z|Kwn2?=7-7Uz)olA%O{Og-Om8w@3XbNF`rEG#|p+uokO%(QvKOSt#n{{d&-K5XVr< z%hpRzGrU7MU<3n+5T5tWcGl%h;X%u=64VC8ruurocT+0~V6q3^w7Wh4q_X-P_aT9t zg|mYx)Oft}e;#|uH{U!p;_@d3c1A>?E9DfZ&GjfJ*f$tj2`291N#iwVo8&KU$m$X6 zwSw=AJ!fYpjDcFG#0V^i8D33x>w+zzioH`NEP-H>+5r#oCmagC12&{v&We>9Ya)Dw#0Kunf?6;N~O2I{`&0+)^pV||hDy;On=j-G~iE$Lz z*qCGs3z>biJt2^3sDJv!IEuziY-ZI&3v}|O#}@Wh!-r;PNW6BV*SSMO!+krJ&i6Tq z0;Z?JySx3!V_BXs)BOqkd<}(`Zhq1JJKmcIEHe`}g4=|?^1x@Ngh2FR?$vGUN_A^Mp7HU25dtz{i_rX8gQx7T zqRDMBc7-!r1U1p-_A_(wQHj&@EW&6r+W57()HHL{6a4m0yizuF#sw<*5)75GzCVca z2wcWrBF2sIWyj6x-7+`ESMw=qCSgyYT){Bybq1G->toEOq2g6P&DUs_1@`h6G|72e=HAMa9xgeUy7h7eF2`L&sqM&SbC z0NI2#n5^Zrvy4uMPc!X7R2dS`4&qhz@XmCBWez#-WlXs#c_cOl;?su$4SH6g660A0 zhNT`PT`?3D8}U-6hP{sj#i6a9A#>Y8w-trw1E_9_&k0~pyD%|6vKt1BHUhgqpwf-6 zN_?msG^VQl>pY?^)N{nJyIc#C*At4<`t*DDXGDLxpWi2dVrc#C5Rj)*spMJ4>8(9V z==l)-FH8d%=}riR?idpEb~+h#u8qPyN=^7Ff<6r*(Jzi<+zYg;a-pchcKqpQ7_P-l zs?4wf&sgp&igln^RPT}sSx&acJe(|1AXDH1y9ZTQPS>?MZ;~RucCoBag;Y+=F$riJ zHu8g5zZB2^e=+q)uvAAOo{ z&b+WE@X+{1kpAIJCq80+Om4^HNP|DLe)coz`gzFlqUp+QG$)(P+cD8&u{tdGi6~qU z6d_15{yS(C!JOY_zS{}u29R*jZ^OrG#S!T*Sj5Au>s9d*2FS@!zpIB#CRG3ALwxRd zCs2nb@y~F{6)i6GV=y#t;6mJEc|tnoYbDsXUGhP;2=?BgPSD`xBS9w0ERshvuR|Ii ziy+v7r$kgT|AKYZ5nSEiA)>O|kADZJ{`26Ncm%cFZtEnngDQ+BM#g+A-{~1bmtQ2~ zVa+~~Ix%D0>sz6^;5yTb^e9Jdb^s21zxcxB0}XN>AWBLS(~)k}#3lXe+YxF0n(K3Y zR{AcjsupE|TLhwZ#ht0rqUPY!R|1y!$w=pqW_b8E4AJ1Bs2-U;B6vQqdje|#XcBi%6c4jp4_@!>p6-k18LF|Bou>3)4bKasoca%25Rrxx4|vMk;C~VU-#Zj327;)= zC}7?St^$y_gS~}Yy7{y8ne16kRuRD0us7NxKYtrrd^c1qTp<;V*)6%L35>d3UpG9x zkCp8>U*JHhTqM=QX0UKvW)dXaUeAFF-*!j`a-yq5IDS>xjX(@;MyO&760E8$B(%kB zy7pxiS%bIKqRYnXOetjPn){o-ZxYFh1~GKh9B)t;;|(~)tOZxtILuez0wKyM|Hh=fLmiSZD;O&!tQ2h9FJHY#z!|! zp`E%@vwWI0Kf&k1exqTXlMb$~n2%&Tf^6p9@AC*Z1idoCG^G&^0TZJo+@oy?vv?6f z>Up$%X;#E5?FEwhryVmh|B!v&{K2y!y|Em#_@=NGJ8mDo4nPDW7ib~ zuoilYpSNNFYuJx z<(a(iY1**qm^{kjQqK0e11O$}@O5zrQI2YP09yAd*YCp^id8Ee*ys1tPEu z&=VkzeG81oyLZp%K}@m3Pm+tY{fD~%+Q&^j2W`lHiLgmg1(Q zi3s9EsLmU*j^42<7pUplqy~=3*gCwp9AG%?fac}Of_SJJrSoj;X?yPNy5t_i&u)lb zgvfT3v?YpFo&wH|budA0*LEfP3Z7tCI&(J|6l=RTOJ~SAcNu-*$)jGSqtTl@vk+O) z4u%o)`~HUq$htZsUWacor-Njcw~2h}u^|IeUTi5-0<)+p!{$@Dzc%mH+XL#R(wqf4yC1TWDRO#_lJD5=_wx1AwH%*t9@^~pQw1l! z)TkcxidEC_TqE6~vWwKTUVZ?_|BR;V9X%JlxnC5Wn4s~um5AVlC_e)3rv5!WgnfYi zDmgiXM}Bj8{Jm|vY_)jh(F4jA`UFVXE<2%b&MEhXpPU9IbCH<6b?j6W3z!UEVI$G2 z9{z_SPOCzU@4@w6)S2rHYJH{irf=a30t=w{tIG~>E`TuHIeyG}+K#S{>$u@tIS>O= zj3-tpGeu8=B3K|dYj9BPZ3NpLV|sqpfrPmt0vN3&&)YNv&1fYLaC;8p>1IBXJpj#f zU=+qILUIFz^Bgd67!s0f0P*xT7KYi7xB-Z#W>molELk3)0Z--_EHK3+5x`$R;xQJC z(NVZB6!(&vEDu9AW$4%R2ZhFes9c%2;J@lA5>knl!{{ht8)q-G2_~f>Mmhj8Q}?e zBJ;4@cP-%49mXE8X9la^B0z%TKDUETqnW5q&M$w2d4jq4p?boN$OUb;X|qD!G3!2p z$DcAziNlCvMR8V9U(cu{o>#*fV7$>4H>qx>Nfiw%dV_NzEqDCmSei(LCGnzY4~}%K zsJ)8Pv~XCmpJ69IhJsY+;~@WKR>2J_T}`UcT6E2P7{IB^!9D5m5(^R|i%siNfNU64 zd6hw$UTy+DN#O?wcYsYM0Z#}qAlWpx&x|tkLoxx@%HsrWXz-UXP_&g73bf{tEa8{Z z-51QA$1x=g7E@+!qd~DLp!*#bM1X4$=95F>TMDeZI;`D?hRlG66fpI+%>o<-f7Q24 zS${X;Iz5k2qm-LLO!_Xu>OM=a()F_rhf;rNTWuNADu;>mWZ$1VFR)__TH*yroDKA% zioJja(*ht33IX_z1pvMQ0Dugpl%|~Z%=A=f;tN;JOr>@di zOQBgp4gLw)`P~cY+Fz7hiQ^;Vo60Jz;k$b-m&P)bUmDP;=>xQkP z0f9?gMm!7(LTF@{o_2<(XHJ<7A2&4+!GV?qb{B?h3G=bNs*xeh_X-quxza3@qBW$e zAD^%h*qbx+KqQ{(9>jZ6h=54u24QyoQGob}OX5OKFZr$)jx~beQ|3)5Okpn)g#yT! z;FMW6>$JQk3&ROC#BG=IyIR5s!o^Qi z*aKj#V}_n8|jts;%VoMrZAS#D@2CrpC<$&YgC+xpmS~YSbd0sTCiNhTwCc?>8MC!oGJf( z%L0TFE!H)s4~q*nGI%4;X@mrpZxMbODmtu*u|9oW84n%abJ}^M1ipbI{U_rmWbB#9R_|1WNPIW@aaWV+Qc~#{lVh) zJPN4E($mI?dj(&FZ>wC#aR3FY*$%UmUb(>3y_l+i3v8Rz9!MPB0$e^0Oioecsvt9zvU+e)s)epiuY=Kt+jx1DK^^(vOzNj9U>hVw6RAwo4=3C7%?7ixzPR@ za2Xm{{=NeNLn*NBaClR&`9H?T4xq*13S~`YZ;S_uqIpVhgupHqwaiG3ck(xwXWg4O z=PN9i7i$jfB6Tk+w^RvW)o9fF0{gqOiOk2owt-k(h4O)LP5`uNP?1B7xHFE+hzkGL zZV{!yDX827P5!)6a$4rN0E4b{KX4rOa-{gC9`fxh30yI6-Bw@{%_Vj>s~s+P@rK{p z7SvVuC`B5QuWm1QlIaBaX%7EY-l$>F+9jleJ0fe(kPR9c(U`$bHXa*T_C=}^XB2$@ zfKYNU?1KVmc?`Aj+kn;>g89$&Qh1OKy3O0FC4NS1=5-czbn~l${%WJQ;j*n-fXQ4! z2MA0u*4{L?Ze9s9#E3IPja#BTEf87n9W~!4UK>c>p`zBgHl!L^UFilP$Scyho$}q{ zpwqf-NmF#+*7SXa`W~EGN~am_;@?~yyx^mYdhkL~w=ykRkzZGSwrT>hv6DiKixE1G zWZ8Wq!%mjK;0lFH%~G5jrJ&9A<6!K<&n<6wHt@#v5y}dUig(jW)axu5&eg*QhLM_N z#sWZ(ih%_E(jGO&Ay+SK4iET^svv>`(SwBm7o1De*ESa$z+#bXf6tO%YzccbW-Vaqb3Z7hdDRK(0&pfK(V_^n9KL<5RVD9{raa)<|5+&Dg zw}ba_)El^ey@=uuR3s0m8Qs7MdA>X<0gyRL8U0`x!_AL^5$S@s7|vhoCLXZPxE#Sy zjfqIYI;MKmJcS*@upRd!XB79=7P@Uc?n#v$?0AWB#f9k3*ZS}Ke9DL*4!y_uk31`+ zR)kiJS4FN5$`w31M|&fGq*VTi0Cl3RRIA_m!uP+yGVJqLdQ)Tg1{_%B~k?TM!?? z{*TXK*%tfJKyc(C4D^XG92qkDAn*3^4)~)U+l@Th?S0@w{cHz$Ys1l}C!8VA1keyg ztBJ8k3~e&B-;*Jp#@RB?#xp}t8ro!Nzb8XHjk9H(9V=t{rYlb^TKFZ^g#u`(5k z3^gl!jS5z#LXn|ng|AV;%2X&a)U5C|Dp;8cMTVLczD5NrQ=!PP$@c7}md2lTV+Y-o z0nT>#vu^A_w^s z`@nf}(7MP8BBY$+i{ScJ#(NhTePXx2dD@VJEqK_U7O1UF4&r+r(wl7a3Ai!P74;Zb zK&H0*Xt)COn|0vcGr#8Z#khwvzvAb|1gH9B$=sNOw*72D9tZtx()5WT_m@n(w+g9S z11Z~$Gi)5@46MB~1{eE1+5l2teG!naTr=_g6X@;xi7Bzw+1^=jrorcIdH{F0P^^L6 z{J{frw_2UgnBS8Pzg^M{bORS>6q=SXV|Ew}hXc2{j0M8XKTd5ht=v!#rXj}*+1Ted zy$v9=C&dO7W;zf-5bBiiXsJ2|EWV4WJZZ$u9oBZ!t196(hSTn1rN)HkI&jr`y}W#@_2u&NejCes z9bFQ+jhnJ!pA#zXzcq3F_!lYP6Af&W%1# zDYBzIpp)fnB6XVPUR%943P`3BLk- zJK=^?`@jG0+J=T%MJvFq)>O!MTm-|SfVK~TnS-b>)x$V zES2ccp~IC>_t0CZ(;`zQ)HzqH!iuOuLfuA%p%5>`b)D|z_^z$WV%Ha|Qr#1I`W#Ws zf-1q%46iuP{cW|v)*-MMQHQRC9huUx7VL0b4A-r67n-A2FLp?)g|kvum$g+>Tv2^V z&vTt^`q01Zy7%4npcBrs@}0`_?S_d|BaQMZMr9b2p6=^!eSo}>1)z#~?QeV}*N1s!%u~I9A3146-4kb&H z#|w4$p*PJ#Z<`hyO(IjJd7}56bfJmvkW`Z1X`;Syn+hxPLZLaX*y+>MQSi{5tpjzS zZbLUb^b~qSHyaPlLr<~Mo4;-fs<0yHo1R#%+PaWp6P?|GK%#D+D0+Q{=oTocJauln-tRef(z=R{5K^xiREXNCO} zLZO_x=t6HqSPXp|nx@b+=@AWe9H`S?N248&$Fou5HL8>veMKZSOQTXL?(0>mww|uj zETk_q$1nW$sV&N;E!a05lX^BD8y$t7LJxVpSleBxD%-?HZyQ$}@_M1PFRs!}pIN$z z2^-sbvl~Wz=`&X+>z3U@_DKI?0HnEJvZkyiPCjdK|xVd$VcZH$B&tXnmGK z(gvlV#P-GI1}WLv7nj?M#(l~!91Z(LGG0xUHKa z7kRXaG|4giwrLSxbMeta#+GwmO4Vsqai7pP%AE~*+KC-R-B$TnJJTadO)d`ZMR;udNqFz*!M1G@tw2Mm& z2XbL)t8&m7njp=lt!bkdd0n?j@kIJK7nj%G7g>P{Umq_fg;`tJ_B#ElEEtk@33ZLa z>20&oEwPhbS1*@HldK5M@btYaE0!lnqvq&C!PF3TZLxb_)Pbk-1TuvnS#D3iDz{mw zD!aD0ULZ_;PnC_esI7qj*=Q6+Wuv5T97p=V^8-5_n)b*uzcFPB%_6FhkPb~G(FA!X zB~hnD6@fk;&-1)c=L715M4*!p_X&wS&l7Q@~Z-yjrgslA?!0&CzEPPmPx1=qDd-hM{JuTu`D) zHC^>3MX4-R3Tjwv)xO(m<-9SfO{=c2dal^72 zH{ApEok-C`$6jZ;`An5hG*R!gc&?O6 z@6cz7vcYqmK0|RVkJ6l0Z7Ff|JNiY`A+RFq5ZGSbhqOr?c`w%cV!if0D&;g$ zDW~baU@m*_y|1=f(pD=*-UHHm>!W<%w!Pl{PH!C-C?HCrqAMZVQO!=PvG)Br6qPc+ z^XE8@LqnF0mSm|^g31zg3B_=#&1Qr8I0dLJo3>P>5-LU7rF-Z~xJTl6N|7EtT5)c4 zqhuJGD|YSl6)31uVdtybak?VQO;KK6zEX*rXvgz0p>`=GsdiW5v=m@Mga{EI zKB918@5|DmM>9pTLZUali75G@rEp}|mlm5->{KeuT}u#^LQis%gyu(bBGD}7cM?rh z3K5lc*HLp?(wF6?tRN+t!*WqctSi=ffg4>3Pa>&gqe<}$$q=(I=}F= z!SSGuX1Nz$jAM%Af(s3b=!c%?x4l(t%w=!=m&>Km@bpS@lR{mJI|RiPAYHub>Cxd> zqI6mlI*uuG1kDlLq|&{P-n5Dnv%07)Y~#JI2BKS?d!g;*QnE|S+bqi%2SdeloV4VNQx#2WuwHGcDw4P zLx<+HE4F2`+1eG`!f9XFr?&T`z!lGgS`mffnW|!+M&C#}T|$jgBS?xX7g)q)n_oD> zs4eW^%e#3cYL=&Io5GWacJ-#C&{=f4qy!5+h5pcwR2q$?xZio6@JyvRJ${`&(~bMm zrrJdV(WLWx37kw#Bc9C=9Js5FM>$Z=eUej@7I z<9U)H7^2Q~U;DzgZA&%BMRQ6hDVnHlLTxxM8xSYWlzil6BN zrJzJm3QA0wr*K52P?qXVPah$qIF3?hj7oMS%s0L19(vn0&Dl;jMd7&AS0tjcdu_YW z;W+w8UubSRPYLyQm4Z0V!*QKQL!lPgz*4p4u6uM!k^5vhP2!m%Q7CwV=ZBu5De}5c zhzhAh8q4tfMki;MA!&!Ea1>KS6IJR~L^8E{xw>v;B_?&f?aS(Jm57qxha)jbI3%13 zsnovIwzT)v^Icnz6^XoBt@Q4YHgyqswH{7?wBmt6o<2z%eGym|92Ogw*L8@%6se=o z9uN>9dZSBplR}cG)Axw972!FG;p?WY)~CX}PObX3xO=q7qtAs-K3%6mDt#mIL2{Hv zq2LJ>ah*<~oZ(l#6S=ZlJ*3b~oh)ZqqB+h(QL%~_`M%$3eZ4yrVu9}qg;j^V+RTQEcp`jU~cF806J3(1GW38#Ax$c^>3hD~&4L9f*;tz~Byrm7Y}{tGuB_OPrFy|a*Q@;&<2ITU zRo?0CMW!%&6M40oQ;3r-IonhKAsLyB8vP}b_sRvA(9jlO$x6N$&%b4ssvG`7y3sQScIpKEb_u! z>fYLmEj)eXN;smPI*FsXx85Z5rBbOoL7^w~YcM>?x^&f7QX!QzO4O-~LqR{33AOT_ zzV*;#ICdqUlM@dVqAAl!G_4TH6xy9|9Z#Q9ryfc16wlE}>$KHM(Ra8LQ4Cj#B_}pI zb-ko5s?#0#jYNhdQd9}eP^U{`k#}vaZ|tAWNoPWpB(x-jM~zUUkEdBsv?Rl>`$AQz zn|*RFwWWeUCg~eT@%uv{k2IoyCh^py5gb#gkEiqbd{mhA^MP4i+Ly}~8(pHe;1uD+ zY)U1Ov`;Az{9;Z~i6&W2meb>L9S=~q3D1Jde~j`@i`CQ<~V_v^N+OOO)1V@I2|VlV9KZg&+ziYChW>3lw* zPN(U9-HWZ4>WYy#l2lM3=^naE-#j6Dekb%SQF~O`Hbh=6>)oLf&I8h+lSD)Eolbw# zQD~DXw5f?u$m=xQdF;Aceb*>L#u2K8kf|+(5}v8O*}Ra6Dve?~w@tr!JRq)H`PS)I z9in=w5*XVucM4I%CLN9jR z8`Pm3b%tliao;@MMHgFFQVPXzDAEdww4%1@NE}s`Ra-+;FL&>seDtd2qPJDcWfSwN z_Ws6$rP?eNhr?3EV0){sMICJ#Kb?-#N2ZwP9+^TslJ8yTwy3uFq2h<8KAw|M>ExqJ z@+-+OZC{N7L6XSx{t0<29#H6`Ls3Xsg1ZcrB`W%G9*?KrzNf3d*laXMebXJAAKPX# zN`3Edo({)-gpb)~G17*NNtYD=dlE-o%EAc;qPi?o1BB3hEW5ZPEE8%QBHkz|>I*7j3Fqam38{(!e6()5#Fs#~bReNow+ zgibmdERmn-3rS>A(-aPasb+1v*&PGd;1yzFMC<+06G)ded>LXciigI1{R#90ho96J)`ypLQ zjY#CV%Tv|qk_^wrI(?OWwN#!S#}w(&YRk2<(Z_flmFk^$j`M&#eL}xImghm&FYAg` zVXoRrRepj%-FDFe^^xbfkQbgrlm%6S`<{;1>AktlMxR_K8b6i4@0dapq){?eg5bBs z&0?0Vm&umyHw{FJ&5$;AZCtfoV+v4B^ees7DJP2=qM&6Mu7o34%uPp|qqZtFCiHY^ zM3&;d=tPHSiWJ|4LZ0`HM5Hg0K9Th49Xm7-ATBG8sJ%CDj7r`e!p2ytEhapD_p2u}qMw{p9KsqGN5Csj-eYALjB^ib|k4Zeq{jK{zeV*wGRifus z+2{v;zrZw%yZ1pKPm|$TN{x1Bqgg(Z$m>L2=VC(LU0W$SbeJEyMML)XjG)J2qVGDQ z4mzTAMvwZcUr__^A!^{LGvtANU`PI zNIK{zjzpBwM1eTXGL~M-?sUj2Q@)X)zEg;zLMpwiuKR8DsE=ERw6Llv7UNJU6r~jR zSI$$3-dHM?x3AaTdplX3cs#Ca-&YGEQ=o2b9d$~P+P%k=%V@=kilpdux)Sj`@k;3T zPG=I&kR+<0Bv{&4orEPJ>5%(Px8@9KUnN%D*p}LET$j>x5Z9ez_|E^Pk((r8IEar&RD%W;S1Y^I8-vO!ZQk8agh^>|vEw6T{<`*OJs z_jT7674A!{rNopPi98f)K5gHa(ABC3b)|14qs~Teu-i^wxEtP$}G3vWttG%|c5+s$-b0E*@lsdPF zjww<+ZBjHx+k_fP<}RJ{lD>L-Srw62%Ng=&iL{&{ub1|PQ8_Q^yGh-Z`VZ%6^ivU0 zHYuX0Njy1|z4goL?$mw9qYqn$oTyU?mc)H>^c#DvUR{nUCpfz3M&E^Wc+J^+n;X4x zeS2N+t}pL5kH_5R)W0KJj>PjUQTIA7dvEjy7y7l@RJX<1-i@Au<%)0I9TwCS zNvF}Zi4@;;bO`!J0$WuKWZf3$r0}KvJ|EBXJP+tBjjD=O)z!;2ekqce zB9cf^Z=5)GQfwWSay&gCl&1RLT_^Ka`LW8FqS~Co12(5!g~&(w1t1I-idhYhR87k>dCbMr~m~VAK}2+N#^C zFltK@;>J#eRN_MVbSlB{8)z-nR!e$*?Ao$Qf6{4BYQHw?vS0N@Z<}+Yq3NBv#rkro z>T0)?DFA*qyT^K?8Mjgp^=CsiuLU5eY~Rg$RBMEB{ruPesBmBO^I zwpH8LJxEkaDN8A(s9P#^<#iy?d44FB(j<+gi)yZ{i2Lk1UUyH2KC`5jq{`k$#g(wt zqQiaN7i)80Eqia&Eml{HmX`~JSzFYrc2c!H#f~THh&u1I=k9mEtnKI{i6POXkVKvx zPYNlzjW$KnDTW7ybV(#rteYCe(pd_zbf@#%VhP+{$^2AE8}b7;ihkUuzilI_Qkp1e z6grC)iybB_r^P{?szAf7GeeaUHICoO>wr3K%2J6$-*l){Iy7g4xh)h>Y&Z`0gl?@? zss1rU^=j$ZXm{ljq-1+lck|Q9V?wQXOsEwdDmLb#gG43KpHTQN97o?crbv+7s4ppO z1Vd8?30R_8t_kbI1u~8wdXgfECV{zLDwXQCtgRKR!c;BSWmVX#g!QgOUSciks-&cZ zM3d;wONr*n5+Ed6hdw!)^Qz~N*ULFqI+`S%VyP73VmN(Dkzu!aqRv~XYO1Rjsd}|2 zl^PR%#%_F@sx8$|nn<05GzfkqbC*v6b;=UGXsfW7%Jo8zUkc0UJU^63b2yr#Ih>6P zP&B1TrH)pIHdDKa4hc(w7Ey(KHe2O0&w+G^rbzMh!mh2B)!lE5%6`PBgrF3Zx9xCk zP*RDO#HUE452i!X7SC73#$YTGjdFe{C{k*p=SH39-X4&Mq{_uraa=g5PNS?^ zuNeEHSyh#4vHDQ+TM9BmR9TW|791A3eF(Owo^{Pwi?oud*gLxrPNrpc~A*1cS??WbeyxTM?d8>`fBO4#?A<5Ku%n zI^3lFjRfRQ#&ASg{X@r)v`g_j@oYlQ6e2IKlIz_fPp1=gomUc)%99sfm~1;pT&Ydx zY4nn!ArI&2Kpic_T&=AXMw7&pFx2UE##E~nWB2=FVdY-e?*}Q_w)Taos}~9Cb_q?j zJYAwUuA`-pLbtlj<{NjOAgD~*?4H}LvP;h zI(M_)6vcU}+PC`L$V~pd$h`Df;wa=lHv7sqPLB=%TuFl zZcKXm)}b^@C}fwur>p+Pb;!@>L*&(>p{adg?c0rC%2=-DUy`1bEpC)V@`yTNNTZ>N zlp5{wB%x=A>on_fc5P9qHVR6nELbZ|S+GxM49&ZQVmKXz-d;C#(NXAaqdA*bebH0s zjl*%p*!N92u-N;mFQJYefm=PHoFpXpji}Hp$(WS4VX6hHHG;-ylpi#n~stg1?F_j&$2EQqt`mW-Sw7PgSHiKhgVUVN z3lOb;>>sbT4fPKonumT_-BumazKC?1(^F_5QfOCtq9iC}9PND)6%u_y#SuwFJrfkk zdt)gaOCec`Tg-<7ZZR8;ZqU>j$MPLdH=b5nTwKUQL(au`eLTQJvtp$ zzUq07#!6;0PS~$G&l!TXwO6@QFdYo?OF~SLgXik&@wEbfCl5Bm7>8nFhaW~LUGOg!arv5jHY5;|ML2qsjcOCo~2a@&yg9K@prL^W$M<0J#8K+|XbeFrkKq0840@XD1Lth|I*w z1kDmkXwUX=0UR06fC%lcK}?8@Wq^eC!y#ov#xW3pmib-mpvnB|6*QT@3<2247zRdY z$7sNUjf`KQBESp{b^#IEaUQ}(#x1y^Wqt&7K$H2iIKT%qNo=&A2LjlUl{kPGn#_*{ z4m6krIke1=1rH5gffCxW8ZaCg#}$0gAVGw73+Dsz=n35 z2bclmBZ$zBLl3Z#u?dRM#OR^P{HUhM{AU9+xCBIK$3PH+jZDOeq8Wk+?HUz1Y~&({ z(Ec!xY-A&d(4KW5Wh37RKn^sSAN6W5r)7SW_=E8)z~= z6JTNP39NDL4zZ(LwhEKJ?O|wXuk*y8UZxHa!cflC<+=3fgIYi3>t1^ z`~V!<-<4rR9>5aXwNVO3#ttAt%lsh(XmA6D(2hSQgvb~S0K7r_Js{9zeost;8K9j& z`#V7B0HMkJo*9}25J1cP9v7O-g!X$wG+&5XCUYF)#Et9)r~O$4cI3=899$fBTIM(tVgNbwbI8zSo~2dX z$Us0r019Yen9w*|Xo3hri-B6^=a^`!m_p0^Jy4*@L9|Q;hxYf-facYpp#41-pvn9_ zc8~HsrqH-Rv`nVe{6V``A~I3~ADSezzlQ-d3djfn3}cF%IetS06p%B2k03NKmN{r% zqn3Fl#vN{C)?@~nBedfx?7@ia;%Lu;kle^E9NGZlKpnrakkySm1d~Dgd0aq~`FWT$ znd1?pTGo(gnP+<-WmyX-v`psb5z?#~?U{=nvdn5i%ltf+(7Y5tI~IcwNMsj`gD7Y+ z&v;xQiL5@M;XtzjK^U6MzY)=>oY4La3r$NB+A|SkL{708+TR2!a13(hIHbgloB+Iu znv64`{TrvrJZpm#vb=Evw9GRic93NRU@)}IaYzSQ&H^()%REZ~jw~PG3+>;0L4$=> z0WFic_DRBxd<7EPu?dK9BeP^0(Eg1DG?{-xg=S^bGXG{oqq5O{5+|O>nV;mP$y)nK zSTvb`#~w6a4(%A_QzAzpg|;J>gm(Pni6e3f5$)e$(xfyRX#b9kCi6of1r3TJp#4y^ zn#{8qOu&eInrN9HiXa-ZM~*C8!9&aZMUu!eYSS{uJeWe3%Z--FJktS2mdUIg-@yu5 zK9OjdUkDj^3?rEz3KPwUF<_z*f-j)`PN1P-VhQcoi9RHeM|NnL--$CcRXm{`m*ERe z|x}kxZ1hk(3BF(4??dJdy3^4L7q5TBdXsGz1 zWqtxAp_xLYWqu|Opa~L+g9ZplJ7xk7JR_MOiI*nxtOplBWGQlJ*Rmjz$S0llr(5{Q z05H*xtx&?rHiFPHKN2R*k87DKXr5iy%j&vknW*hc74yPguj)!!7x#s|_Ud(4Hg=ZD z7VePOeOY5eRO!pAFsfS;d()Onb-kqT%B50QXPLZfi)(e)7Yr72-}dFYYHM|A*VS1j zE0?oOSSBv(ERz-Ho@H{DiL17-ly%QCc~jL{CN6iCwy0DuB{5coy<)so3A?)X5LNoR zyK~>wwYJU))%vC{7j|9GGI71Gx>DWrEEAXdzND~K>Vn1g%j>$FWzu?C)q9r7 zYIUjas?y?J5rMT*7?#Ovzt$nD*Q?d4F!x-B0`y;L`CDLKoe zO@XPK0g zs9M(6SthUb)ke?@>3#+!U5>?CETD>vqetETsw9YbFVX2CZxtwL9vP@L3_QmBA zYdOn=Wdd`hFUy2w0usfPuvBfzGHKV9%QA6YY0ENUnY=1k>T0R&+oo#^JIiE<>eV{S zq~$CVmdWd`EtZKZ#=fqLx_WuFV$L#gTWk8Ns|}02tg}qo7v@sm^(+$?m)BV)ER(ZL zT&n9VlUHS#urIsDN?vwdxu~nv>z-xeo@D}isa_SVRjsYcsxKujH+8vbjD0EMnwa=7 zF}VsW@}_UPQnjqDmh^33u=b_0D@WXe5h0}K3dk6kJgR(xZ7Ia zn2%L!jkR!|uG2wJiYM1Qt+xjS4F8TtpJ3_p={_D(gE}iv5=51#l}@jO+XE759{S^b zK%Gx#-E4aGa+x|>>y1>lZptcc^V=(%s!o`9pAK}Q;|OYWizgVK^+erGK8^z?WjN?fUKN%E3xl=!YK5snnU5w#MERNyxcDVoaB z#bt9Z#Bo;a>Mt)T3W`~xU#ClQm*?BQP7b6!Pvmu?DKtrB=mF`@)2WnX3YgMcqpfpV z#Bmx06}eJTr$bOgOY$7|>BN8}E+iTSu9&#aqsLN6mLyq{2bECaI}in;8x2WuH@-{}N`DW{Te^u}I)r%O^4(G_&1#3YeEbL+0t z>E7vR^IR$Iy@{C{O`WAqo5WLlozoW2@^nv^q}Npn3B$950&$;kMCq~Fo9>~T&>YRt zJ9car7nhFf^uNM?XwHk1Zc=siU?og_PZyUMj?>%L>AWk8N}*u4Lwg#C=D=d_S;S>! zV`s@%E&YY1V(E0aurHN~%c6j&sB)ex)e9DSUgy!BK1-p=LVl;RM8kg{iKM;qxoRtY zg*2)}34a38D0wo^@Krk@Poq$8EKw-b9!r(#qT#u|E$kgBo>XkirE6a{)FFz+(}|=e zKl9fdPIGj$S~1oKjJoonBPAq#(>pdTm)GVbg(11G17?jWKs8AbQ&xm1VHTZ^=XF_d zEqk}L?7c(tTdgnH##BEk$rDAD-WmGP+X@}SO=4A-YwMJ3G`pTi@h2KpqM$1wd5Wh| zjJjf1&T4&ysgPFer~Ii7T=6DWeD2y>+@p%BytbuP6P zj$8+$wy^R8{!nA>%QB81DXOmZ9nxxnyk5Zq!4cDKt%{uhS-lR&BLj?ThOQQnGCuNl2eeu|$?yY*+Po&=Bmjcs`_6LLjXYl6%FbEo|Dd zR~IxtUZ**p=5#d2qd6bV0clQ1b3~eRqB&g0={k2h?#w9Y@r0PCCuu zJWl6vJde}yI3ADl@i-ul6Y@ABk8|Q_4%gvy9gf%GbUGYQhx6%hKpjq~!x42jCmqe< zJeI!vTFbp$|v&;hcOl zhXZjs5XS>?Iv~y2n~m#e6_8Zg==YaZ#k9oSjiTYnd3w_>E-%ijo+UR`RIe8GkKb#1 z_oe+<@2axVFjPUqktwFs?S&*#{Gh(jKz5iTh?3sIVm5lO)1XN2l@;Pdolz(h>Nrq% zj%RpevIXUUL4X2~fQ|N8uQs32GIjsuw;;dGm?lh_kuicdO4akN%rAVP!f+{5&BCoNd zRaFYxP6CqXR%NMd)$1M4m@1K-s9SA-bfL4@R+~*Lg?ZE6ZEdQyz|O~`Pbtz(S?9LG zTy`rZqH><(J+Ic*K29Ymj7d)+hn^+M3;Swq{>EOYZ?;#$U9 z%2KuIUfouGNf&Wkw_)jtEX}fnil53Bq@;b{bmOWd4;5j^*Gyy3zL1|?jVO?4YUE=m z#?Z7d@@xw%niKLd4iIQL$j^=dqsbs22LYmiApc2-gT{gUbHE0g82MV}09plrFd{@g zwxS0D$j2r?GedxZ21fq*poXjubC5$E))+YkLK-qS^B zWLOya$54Rm3i)`49I`3oXIx-ImPUSt#TpqC^0O;KSrT%Vf(!*28Tq%unw?Mn1PX>Z7SA7J_biDhuj7>jQkTQaTxM(7&^dU7eJ`uom+123j}^BR?7+#zOwT7T_z4{8@Mcwn9EmA_lk$ zBhPpM0aGFWR#@>AMxH$(2`q(toPjamD2yEAK?xWN`S^_iPGjU*5?=g-{LdkSoiK9j zgb8j!{!u7kCX5{aU;)?%`4|Ulz&pr)84kcM$k(6%0+%2^E5H_bjFD$aPyvHr;f_13XJ?DPynXD$TKN$fG05We^CUMz{oRh<1j}41FYZ( zj9hD?4;TU?&(Z(@{D6^X+XUDFBhOME;0BBwbKnJoF>*{Yf*CM!OajFMMvjHpz8LxS zaKi|cFGs#c1s{^gfdh$rJjO@}yaF(2V&oqQ7RaiQpDln5GU!2OgZxYgR>&xjuSMZv zGvsG61>h~@XD~ouD&*rF7{Ecu$23sEJIKc|P{B3GzYzFBo6r+ScH)` zfSwp@Cqz@T1 z{sDkQ<^uVcj22`lkgst>WWvaQ9fD*YkdIZA$bgZ5 z91PI#kpCoHL6bv%=7AMxaLC7UfN5;Ve-?ev(2$Q`Q)p$#e-$iR81gY2*3i6=k898b zO^y7Q7SOPepOIT=Rmjhn*qRjb@e(9j6Y}4gK|>=Sr*Q`j3Hk3s8JZCCFGQ*RAV0f- z1MLR+nhqOU4f632M9^N4{~+F=u^>Owp@vpQ{xwk2$jH}7BMk)km=8*59mv-}pQeHQ zQ^5)i1Nqnle9$0}e*kEi9kMy(|4T!*Mt+tC6f!sDXJrT=6GQ%Sj503dXG2gxriJ|1 zfy}6ouR#%nj0yP~>57a9`59>=J0m|^%gAz&e;cuk2KmPV7+DPRKSm9*6y#@Fm7O5} zDn-ahkpDBdAPYhM0YHW91Nqq%VHQR{MnWokKt3KL1{oOn8i<1NkdHa=!F9;TM4SQ3 zAwSE*hvATaAV_c<@-sEOU^V1_B!bV7e%3o9WXlOaArepW^fOoaTqKmhoR{0xua9OPqFV>9xzG62Cc z$p3l(?1FrZh8M63@^K07fXT@J8FauT$k%wJc#QlbVG7)Vd@Oc21Nm5sm6-ewpa*Y0 z4w13S$4xjQ&BreQ5RiX0TCm8+C;(W=$D0l_9}BrcnXd^z8}qRiM~w3E5Y7^g;N;^r>~JFg5`clu$58lko(+UyCZ9pFQCM&;J;5P=XE5 z&kWE$A5(z@6ao;QpM9i7jpyGBBhUYj((^SNQgFc<&wmSe4DtMTM9;@d5Wxz{sK5oz z=Vvg;q~~J?h|kACeBk6qjvLQE8grmP44$8LVFnJ4=VKQX@qBFwAzgSAkbxmQ|3ozL zd<}>ho}ZaP2+zL~RGyD{5Cbu|DbLrEP{H%>2H5knFr1#BH6Z5sS&$Y$K|>~?eEz{u z2R}#wKR@e?Py{(VALk|32m%gZ>GLzxd;Zs;0u|54a2WFZtaE_pza#?B$3IxPHh`!D z8Vq>;lNg_$jd&bD6Nl%&0v{4NxWbL+Yes<2&-hS2AG3h)dvU@yi&`&qx4)G}Q3? z7ZHTk6q3-9!t-$--0*x1rq9PiRGy!$fkXu=czzZH9GRw z`R5`E&;JlB&(GA*hdw;u`7d>zpE+OvUFZ2Y3SW4BrZOaoE<8Uw!4sbUC3d)&@cchP z3MzP>k4>P)^YIPz^EJ{Ao{v93fGU_F_JJL2@%#rtgy-W70C_$>!WPfZP9_^fpawBK z|4QiL`PmAvkYb_>&p&Je&%X%*&p!!5&&T5mp05QlgXd>pK*95~Hk>^Fcvw9@i`l{R zvm>CM|E+rdSq$*}Bhi589}FctA49>#^KlnSo}axz1JBP$XgnXM`1#l*jpsj$7Cb-0 zqVxP)VGqxL8)EQ$9CL@~XF$mC{Ok{1JU>%I3eSIj=6J<}5&6#|0!8G^-+?tWVbEj^ zP@)N%42&c?z=2kiF`x?V=Rk`Fgk#fWGWZW#7~0PP9Gc8A9&T_WV?Shg&@#tp47rhU zAF?WFnV$n#gZYp#LCgFbFoR|TQPAK$?9i|tf-r)1TmUtIcmr$>M`WCbCA4Qv*x-na z@t_Gq%ls55fd=0pV+ZZ00829l?We$}$@~+jg9Zr=+W|vC%lr~pX>c8I6SO}JJ!mi; zlF;xRvL%#3gXNH+5z^o|WI)iuAkpA8vL0k-WIM>2Ka2oqFdVWOXqi6(DA3?HU^8fc z1jNu}{s_1<*bShTIX=S!vW(jhWDhjZGG+t5g7!b43L3nID74J~00U?;{~CU18LMFk z?SFs`jm9C#GET#ZmigU)MwT%ew3ay*029ib`5h3`;4_Tc-+(-5uo()VJtIK?N5*A% z(SAPcLCu&9NN7J4LNG)Q2@wQM1_~Tnrilg&NrNWygP{eD5I3~r6f7d+F&qH^0SL*N ze>HQAWUv^J(0(wMpuu4#6p&kDrgha+%(4l4i9;|#a-a->v<~ZYq0_4my7XgOISdA|@ znoI_3LF)jngZ6vz1Wo4mLIoO}1t8ip4-~MwwC#0@Sy2Y3WFwdEP@&UF+$`7n#@l` z3=Kwu3hgJd01Z|Gc7m4qi3Fj+Nx*1mnP(x;@C$P0hY`aRG#Ck1Xg`dr$^0-&Xz&qs zXn*Vv8f*lN0_~5HXtFL!phU(+z(>&jcLtib1R6{P>;w%9L8Bcr;RGWY4?%}^Jb@V$ zAY&o;(Ej%V8jT3;83zM4G7drx?HLp*92o;4iI;sf_y10nz*0$`W`94pN}JD~hyWh6H8_Q=odP+}cQyS^ z0ATnlqX#rj*6M~xUy|*H8_@sJpF*)lgCkIMZ7s#joho=DkOS@_o>#PIhDl>)tTf6D zn=~5D=t;ve!f4?>R9mY8`KhHQ%Le`N{nhKFH|aGYFnF*&3eW2I&h(kFi@>Or$pCh> zR%+5kQcI%EYVhwM`EC7Y4SaYm5gB95kXeR4!Bv99RWd;5g5(23~C9Eq*N3mTU;{-tMLTjz~o3A_ZxGpnH=fcT%m-4B&st@NPM z*Q$|FX{{P6r`AfL>a3Llc@$;{&f|E;MAf4lh`zuPA7pt?%c zKnFzAp)r!=-_|~gyxmtO^{R*3*&BQ&2mYZ`F$78KT!mzvtRYqqRbBtWhyI9Eulh;x z$D(*cBU%4@`CXD7z27hmjtTHT@V^mOdiKlhm;~-qxZt_L3SnD+_lZx_`y1001^{TS)-3;ciIlgw`tX+AC%1=S!gK#>26n}JSs!+A~n zbi{uyChs#TR`3HL&j6*k->kQZHx~x0Ur+W2G3-j&69&j=47xpk<}PcJcju^yt%T?d zNI)OI_Zz>04to>{;HytvkpMUt!OeMJQk%Ms(qMO1doTOnWUs9k`UXLJh6anR-&>!4 ze#k!1Yt=ZN?tQe}T}Hmi**TmY=r{@}_=x{1$w>=yjGO}~6eU=Z%L{XYBUVyHP80EQ zTA8=}Jo5}!KjPg5Y7jm$@(M^);FyOe?X%RHsUThvR5hMpAy|na=rH!|8ap!U9>@ti zZ)HsZ5q~w%t!gG9qhkF`4vCL_p^dC>y_(`NkY%PXV++No*8_R;=ZXJO$*r96>5t!b z{O~Un63$aw7S$SjaTKqpg<-**Ii*PFW8MMcKHwfNRp$qQ#JO`3<3^X~*|mt&tB{FU z8|dL!2tdmKpT)DsV*Kl0K}}3!*F#uT_1%whzsHSBHGq+LL%9c7eP&0FKOCW^L#Bqw zj=)u&tZpYevh{c7^VD9A9OafDH4Pz$^PiI%bt5w-uZX_n0nt&k?TzdhR#E>C2}eZ% zE-#y)l9C$siU9Yiy;D)KBRvA|oAg6(PP|Hf-hlSQ5n;flQ06Nw-r+g#8bXdwWo_fS zdt#mAP;bxR7d$LmFUjh+&y{0EjQn;Xl+3=-cBEb=xytYe@a_AQ{fRNqlL=~YR)L=}yG%37dGqn(NR7Mn%S;0M z^1A-0=bfhEE={1cNW!0PGz_#5VhR%I0gT!97HGsNf$Udoo_s>B;v~gc6A=f+V9*hJ zM#H*|iQe4L$I|Oc(I(St(Q(Is+rMZ_i-Ye4P1}f`jNZxqSsH8fc}4sjE{e#Y&ABXW zZTl2Q%lS5OJ8};SL@XyS;j|m{lMLj*>`8|Zy4V^x~ ztMj^tTh+v>n;SJ#k>`3OAJ2Eats>wq9(=Eph8^XJ# z@1QYXFU}+yVsD=;KnTE62?z~4J$zx96twH1BNr+oquvGH(>}@R(KMiyE*~ZV)vVcm z7}|7AOT3mLcPXBcO#hod@$Kg#7<@SPJzx*gi|(u9{LDGjeFHF!lhMj=LcX_tx-yuR zTV1_j7LaeNt58)T0}T@>@(VNhs6X!IB=C(9b8qRPkpDZD2Af1%`bu+>F!nh_Qc{#NEjOYg2C^wynv(-zM|5P}DW1!t3lg7*f3N1q zFtUMK43jyhQ-CPl4QppsPqIn&pp5pS4n78{s;n`6S5!;9qAEAOtO~~hh@#AKxZ^>w z^tx|MOZBd-i%@P3KY1W*fR2sk3FyRyq@*#RFlo+xkd=e-b9P}-*>CHp)F(dA9EwXz zK#WLeEu0Pno+kA(()9pVEBsq7rj=FJXNU%76yLK{E<(hGNo4}_1TpUq_pdq(F$}9(ynKONGZp$;5R3XFxJ}ty zhZb{8YJ>#<&cOS#>D;Cx`66sv4M0r+04j;>V^w!LIXmiGOJ>ytaMgXp#eaa+x#Tvo zZC)R^Rt63ISZyZ9!2mqkr(NitT>N~+e*QCxW*h`x3t%)$Tpr=lx96MdOBmxg(a}h9 zTcfZ(p)A(<9t;=bl8)M8K2{DFDd2J!T}EY?*VrY-kr?Qn`QK%27JTW5sdOZFvTv}M zt1Bq&qe@O%tcO4l&ciE@s+MHwkU&ALemrwSR8KG?%Yu^*;T{?Hpe7lH1zTh>po%Nl z+tezF-xC0;yxKiq56rV_8woOYV24FnsKio7v|OgDf;)bU@KfP9hpsyLGNDs4OBX}I z9bUE?ic}p!FFZ`F;11GeH2m!#1Ki@&Vx-i*X}V&W9rzKLkb!I=x{|2rD*!TVf#w@> zwSd~34@Kc?VR@s-!MYZ0B}_04Yg}nSE;)zOL@-SL1u={#*sR1aVM3b72LZAbodhB< z4PWd$@Jm;{qD?B3)@91EQCkj`^&E)uaw}Zkzjh<#sYHRlpPl(ACiHXErn&gI>_h%s z`{^#G?z&cWcOfVAC*J^0gyWmyA3!w>#&zwgT{cxrA|Z6sw2jHql^%RBMl`OU7)mfT z?aqBQ?lvKFHtQRv9nBd5ua1HW~y^A!b5yaIZ|SMj)(nT!wo9} z1ZUFn2U>F%68EP}Qq6cnSmw7WK~}OmAke4;W#ycJKpSRt8o1V*lv-yAV4t}URLCJg zq_{o*^?{1rrHf6o*Rng7CpcLerzF1wO-=DIN#bC0k!qz7-G}mgUag!v4AKz#!a>wz zcVNN;;9sjcaY@4#B4XFBJ7bo2LRy=)y$|J&;fN6xq|w+z7LCl1-r94MbO_?~I9Xkh z!b|aBOH`i8kiOwHP>_4w7l@PtwHd>rz6xa=wv9gg8Aq2zH%u|(K^x206eeyRkh?hK?2tuIo|z&Juw=y z2o(kh7k@}2K>dwBq{DWgp9Xo!_&IHrKTqg3rbNJ0&WV$x#nd-=*+>aXRTlwZ1YqNx zjL|3HICFseL$BY^4k9(Uz<2N@`=}{t&_F~LH6=jJ%ZR6*OboOrvmf|o5|A)>sl2A&YHLanTM0+XW_omY8)`3f>u0o#24ZPxD=63IP7JOvay0n1J62doK-t%&fYA*V?6{oGF|euMf31HVmv1EV z)wPq$Dvt072N`Q_HSKQ0!v2>=`wob6w@O4)>3*qo*{KHt+aFGfZKkYYaYb3S@yTrV zd08Z_H|NfY5#aiAQgAhjfUjz`)WoC#Q@eln+fqCyOP}T&JX6$uq!4r_OTU;<%dF_@ z5MT1sjW>RxLmDisOLoDca2 zgSEw!g=rbgs2PM}22IO&9uBYc`n1ewL*+ALqya-qSUzso4uRd;lJ0TDSCLm}3d6TY z)qN8yv&0^A2wY@=fM-g(zW%}(7}E{-xd-O> z^ME&*cAm$l%>sOi#L1T*Rjp9R#e2yO?rkkdS7BhNb??WTQ>o^0!W)H?56N4d_8S%d zl(DsOiI~L475B2B5TVJvtjB5i5v47HjaxvtJbC$qm||-w-kkfk`j4Mc28iPG4iolr zENSQ}Vvlza+^X(;Rd=qk>6_P7CrR#Q!iJST9q!SVH~ArrU7dbQfMPa(vycbjN)nTRdb zZHxtx0PwSuBTwt(^)x>Pqfz5}s3mfer>dhI018o}h4Z8r+6BE-)nylu*Y>g3sa-hC zcAEO}K^^$SlHrHwZ}3qnH4VgA0C|7_NLz!@>&h2iNcChl!dG}`2DlMSZ19B*@RNr# zzusaQKKFF2BQnO!4P;XfEVkL2_CpFPn&2E#xNwc%2F0 zibQinY3N*)dLeda^i)HuPcWypx~(a=xFZz`1HWv!`HLft%SF#~L#oTX2nfKs&uUlv zK-cRXfSyJecBzn!OZ0_sr|6B@y&GdgK~UNg^w+-*<)(+IgsFI!E10<;uG(sVtoXH3 zt8xc=cLS`$+enJ^tplSTUhPI@6BBD|jC3-x8BhcaqbnEtpSxdApj_ zptsSE*euVr- zJ1!!fNNap1Ytkp7wi|BuY87Saq)73Dn;=Z&#Kw98x^Vex%o$O1#m7wgVK9W-Z_t*5 z0ash*g7H=%-%v_}xVs!Ju1p2+@0n<#?`Bln}(rR$em{kIKAuQYf#_RQZzoMm^Knr}$7 zdm0go=5y!De?}2fBEFiJ=#O*x{QrQ7Fz8sSneqtrTq|9l#6$<)+zxFT#F zv-e0Kb3m^GpCD?U)L2vD|Jvr-|9lbP(b*=)hLnhIh`L)ujw);SqB<$R0uM$EWWaV4U_d zUTZL6Z9dl&cZ5Q&qb91_0{?gbD$N!by2Kvd1-uc$sUS~(JG6iK5nVm|r`wAQGZi`^ z^TE&#FA|&zPg=H@gB57zrAa6UdU*60=<%WtVxj``wtMF( zg&1X}8F>?QDBeiv6}-`KVi!a?K#%pAFM=*vPp-qVTav?9fNI+fL1(=wM!~wFI9dQm z^I5_Czn8w-HX#Hn4zw%whx!i+-z;wOzGWQ;q2mT{^(b)_SO(Ewgp$77i^_Q%BWV~y zBb}He#T@j(=7vNnULq!yv+n;-T2!L>60D+^E`;A|As~*Up8n{7eF3rB`eLn3^2)zq zJfE8+C%c|~O`Ic$>^RJdbh<>7Y|LR3yl4rB??V4_R}q0ngCR^b-Boam%hBYWcKfvH zy9IE+z{L|IC*i>sbrY6ef2FKIIW2=^vIFDb+i5tiiK`K!b*GcFPXh|YgsRD^v&~@B zuPbLG#H9MQPF8g_yf11(6PNhlf{VivlJSJxJ~eaTsw$6ag!&c1(9uKXXc&l!@JeSaX6& zaD>ZniBlwWvTOEzKdX&Y>q&JSCFXLU%9*l(^M=5khjpX^0X_w^0O;pm1xvf+RXn*Gt={-G9l9IQtfXLxtJmy&CfhiH`S*XNuquPq`179 z6>2fH?mn)%#U1OwL0wi1QU?V4qn2+KXGZzgC^=_^kOrnJxYrEn8iiAbpnO3@QgY!0 zAA1~*JrV{*?t2zQ$C@Ia)4yj!R`GEZ70QizFt_n;G8t`ioQ1L+U4&I|wpW+w8bW!g zmDX@wi@*Eo61a53D&C72mShJA_Th`8l>&-sl&O&xNLCH z`Sg8F*Pcxj+c+=^%h|}VGz>C9E&NDvSX%9GrpDD*uI@rzI--W#L@z=1wH%4P0i*oHZ zt-{Rfz|>QQm&n2`A+Xd)YQiV|lciCyHCj=xbi{KAl(uXs;WAANe@w_shAN3hj41?~ zU{I@+!P1O+0!((1C}~dc$vpSkl6#;hi*aoD?kqVkgVQb(`8aed_YtYqATA=YQ^-kz zd!X^t;j@TV+AQF#c_HW8L1GVdVEr&XgOsrIfKoa~&PWd#*?__7(GYNkSf7|>BoCKZ z^1`DE;6{I}bbvdAQh4kP>GZq}0T;3%`)=%djc7U2(n4J>GqNiG_s1`<7{LAMH4+lI z{<14YFLQ>?8ilQKD-yR{9pjkzlxHh5Y{FDSr7?orVQ4v6$nFWL&ViVHj|h_rQlmty zMUgO;Vac)|C2SIcm@kx*k^HPylHOdEpmc`d@>2&l^4uN3&*MR90Wil`R?(vU!Z3*~ zLS^b0nn|M?`i?5^nnKaK1kjx|ianTQl`1@L`?XB#p~xSINkh0DeYEQ{%Nfk+CYrUR zi)?ZfAz}@acTSxr)=VF^m<)NZ;U6F zOCIYjJXP4Fb9r^s;q}OBNTp}OgasKG2UkdTbA>0JoB(YSI7()9N*N`rM1I(837Di- zI1X5K8df7h3c)byO;Z+3Rz(_}d%nnEM@S_js|v=i_8ZpmUF(&pbqNl0Q0vpT~R+@(q!3cn1sTXLPb`+p0FA~Cmi>N2NR$g34&-F zE{C*fw+1KPXkKHeb#IZl(l;O%ZAy%-?7xTHh%=G1?RzM;NwzV$TcPo>gz}$-+X_$u6Z8l56%-ikIN;roV^O+M3-Bj#9#0lr-nn2Smz*R=E+1K#%*6lsaazhZ(QjY-6p#0S9h5Fx`Uqc@wzD*lwBX3(3B?lu+&HaNWEetK z7en-T0O?Kv2y8oWh#$ajA`Az3?-OnB^%HQ7Y?HFOYXAq^pTWD=5! zA6H}7DVfnk`!gG?^|a~ZWJZ zA}!(_50cnkY26h3r~1l?^9l4P&|#^ttFYp=eU(IO2bX^EEsbn={1mf0tzw?WpQhgl z=V)7e7#yUnIBB-`cC3s_m#H{AaZ}xUOOx!2dDT0m?D>+P#y&5X<2X!rh6gt z&AQ?{)^+Hlh@VFYc$GD*j9>;06rSoxPN?$wXZyg0DoW_;*G+@AjaC@Pl_pQ0s^sv)JgG$*-#YkIJE#343 zHH~;`_PcgMIe?l=DLl=rZ7xI0E^d=5{w3BcmJgFSgTzRXF>|NL-zo@j+jff0Og#;o zW|XQCT`NLKmj5@aksWY>s9}nU?}QKH5jxwL9z?3m7WEfIFC`#edi^6asyCX6)4a?4 z9+M;e+VtpCn!)ia*vg-;I&Jr+RCiFm%;C#J4g3gyp+9CPJRYL-g$R+rx|)xqmYYs2 z0!?4?8LNJtoBjVkDe%WD^y@AG<7kB!%(Xe9>U+=_x@*?uNPM;5AKuKqBEyfoi{!2I zWz7$0Q2sAEJ=5H6T~1)8xEV}L4Q6v9wJAoc4&H{_?>A-s(?B2j?u;hFCTE@Bq(C@9 zke*6!iy&!d4Zwzyz<|st{t2@PvSINIeXSuZkQzHYE8TGCweY}ZQAq9Ks>i-V-M;&H_v2oZRfu=-w#b-b4a$M0uurdTFGtd&pY_boiYo=cwfNDNL+t9t9g)p^Wi>Bp3RqIShAFwC3!gk&;x38%$@Ogcb&Gr`#&G< zKn-Q1hu(O{XOa*EKM)L8yt^U)KC$>2<7a+nq)(N z2i0jT`g+wVw?sQcYLeaboUuAICb`;2_6Sz?4VuC$`{J_v+j}p`<%oNUMX4mZ=lE-6 zxNnZ+nc`i8*q@n*0ga`~ahnL#of$W?bvfH#j(lmyJ^UXjc}KxfdF3O_=|LLcS(`m6-Adr-q(ia)y*niQs)l)_rEE9k}&K7maKwd4t`RU`*d zS(I)1T%p98JE?5f6IK}~PC*91Y;A)`!4%eVEzGIAG7t*g86QAg+flK_dM%sad+zMEMf9f&EvR({6w)&1W?s&{BX7ajsxbm0tr1+R!-AdYpzYZ`P_M@WmehxGzDIMAi7PjEjZHf zlqVdLmo|<6%DMn(U^@#3fe}}+8oY&b1txgmUkdJ>Jg{j!U!`M76(W=Fzzx*Bc7RU; zX9K!}kwnrX7ye-m20}Fx7zjk=c(5_Qp|h$N1#8ZyGy$dm?-#)9WwI5nppOl@e#rwm z{lbV9lWjyf$yoe|phbG`&8ks#ws)nEUUkFQHg2#rV&untm9-0f2GM0*%!(9~-pZyU z0uR>=!omCgev>7+>7*(U80G_VKM=o&B5(9C$Fa{itzBLUNOARi?W2)ev>Du(tP;{S z=-RYy&xNP+ZJ}7gTr!U>!I0E#S2H-BP1i{vtCjL!#KW;NOeCm;)pxuoQR ztbeSzVi4*`@dLZApQagw3ILgO!gST)Y6QmfC#>AM>*g&^Eph-C6!gGuOcUYTT=f)hhpcFRUF(@e~(+8A5`vJQy`%k~gJmK(g_^~G4 zaF9|&Fg?A|hA5D~E3bPe`N<;Hla0y3j2!8>+9Ex)@* zX!iB8u)9D3^m>EmNUvbkHDu>js#wtnAj9Sl1Tq1RZfz*tN47iUkg(bOrk2yhzZ7ue zeJ-?WX|dYs-WR#%Wd%0+IDYKLkS?k#Tv5t(tjac-lCZ!b3dYw*2t%B_5UHOUauUuj zj=75WE2g{27=PsVG3YS65{ieM(V5Y;s_~!+R`Zk^LUoo=^F#+16I>jmps$#1A#DHR z=GdecFWnw%ySD$kSP3<=H7q2IyYDQ0vdHjqIuIc~)X1kKKZ54=a?y~dgYt2)q<@rshl5|C)sV@jH@Z+N0~tX)swoEi~rE2>SV=frHQ5%NirE#%y9 zZeX`bT5w!|@#zF}TyF7Yjnlb-5h%$qd-(7wps#Qm1}Y<_YY5L8lEWKV3uSC70c_Dl zz|o`4dBfdK4m^AaQGFYHpiUJO;`V5FRq>NS0Ti`f=R-+`!}53}0$)b%hG+<1?kPU& zI44+iAt&zo`RZZjFv-Rk_vBv;;ze%q&uP!vYBHMM=h}3J`TKtO-47H()E)8g-`q3$ z7TQVmnZwI%P`@^H5gCTUHRM>E8D{UBIBOP-QFJ18;d=tEPBKY&wb(;@M0DVp2TIxq zzCww}f`FwiKqz;>fBg9h93v{>xNsQJqMiU3O~^a8mXdEP}5J zhL%voCZLB58=hLTDpuQr30`rErJUOyAKkLaMRb^fEneGDs}`%Y-q5efJ@H3d%S zH;K6>YtVS>7f;8oSIn_-AkaTDflZ0 zc>vgCI1cU-%ANBiRZO>Fs=;JE_dHNReVy~|$dBZ24;P-MW{HCY?$2Oa^j<8!+i&6j0^JR8~NRQ+cfc&Go(Dv1=YgE$^^z_cUmj`npGEL*`Qi;(XL zF68~93%~+S74=P$NrY=#=6?j;yQ-?uRl zxEq3qN{SC5Be1bIPyy@F0q?9r>imW_5cTE%+{>l~h##KA^bK>P1 z!H9@t&!b7q{%r-JN*uRN*@g^ImnM$7JD4=hL3HXduWU;!OdllfBOMdL%%F52EL_*l zTF@RmQd=nDj?>F8Q3vxN}~c! zP~Yv|O?nV_9zW4j(xfNu*N zAs9Z+UBZt+bYL}w=i->!RMIpggnAz`=mSLdL2|04!W+te?~9dw_4QCe)~g#Z0n(A{ zlSc;ss*9yNz+jmO39g~jAS<9%f zvCb|KS)d_d;pXAHac?>;;D$l~di7Po54%nrEx@Sovtn22WFaS`S|itNY^G@Uy7+l_ zWa~J<88LBFw|PrC*{n(4>BC}~V1CbXd8}?#wHN=b$okt_^s2YgW(7R7ijKzm&ebi+ zROsPC;JzNTv6c0|La02%IyKht^aqL#e!wqTjLm%osRKUDF03W*1!z$UJ0dVWb)~_4 z!hFkOxW5B)hn&}POkX4nLlsV?VRL9oJflhrYp^WbJx`j9ao<5>tG9Sj676m@8>GQs z{SXm}MNb*DR}T-5F`#gFGD!P~0*sRZkyt*fud^@V|ECVPliG26c2o&kFVqjAzrl^$ zjoJJ+!`Me@c)2=c70Xm9O-0+y1MZ>y&UpC$k5tqbsIeU6GaCLdhr(l}?cw|GwD`#; z_PKVaFzBssxTEb|)da*nKz;>C@xYuQ5z2$PA-Zdi+Vp>$zhmO>x1K5)#nSv`(*IV( z2|{bo`ZQRU{)2^->>5MK=>8_7d7}|(=qUvdocResKo_>+a^gy3)iU{|55#Mk@$#ys zL#AOqKsE~~*3EK+br;y))C{4fJ42)Tf2NY|4OL=h1-}jK2sTuqF;BlB#zjDaT7-3* z;}&;|fkY7mDmQAoZ6N^o)Hg5sIo)YZ|HCE(zHhSrVZ^?QZ*n>jFXSpDfgY(`mnb`| zk8e`k1TtHd5+=(XB==Hsm_ayNPqmo7?>%3{8U(Wmykfu(A*7M~o{!}0-(rLZC)L>A zMX~`A!U(I4S&Xp04nOUJ+;;Q5oy!(^s#zPtF-+s2?HZtd0cG9#D6BQu47)*eBR zR8aVw$tY(kvja1Lf{Tz(%v=n1Mrh#%%0~N6#W~BA%Q^x7V&Skf+1S_O5oWqF(O_qD zw0aLu1Jqj1IIy#00XB~RO4Utp!ig>G7rwgqCaoS&#QIgbaiQ zE?ymFCp+?M28_OFhWLT69HQYgh!g? zO)IwZ)z*hoy$SV}@|H-~6{aLvDFy2T#EbEeyS^l@AjC)lT#^=UhxIn6pr-xA(36fP zh7!PkZTt^GG!!Gx4J+7L21wl5hk@^*hwctSGLHv1!B{D zIhXzMU09-cLvW(*a639Gwn5di&~Di25xYc9Bv`rye}GR418QZLftA{spl)zoMsc@@Vf#1eMCKQOOKb-^{<7Hs9N;?v?Ei;*Vtu0v-6(B^ z!P0!rSQ&~qpc+FYrpc6Lqx;q^i2^sF;lwe(hw4ZTHEqX7ogjRzZ?7m+XjI_or9@~B z>H75h6T(k@lTOjSby#O_Kt!T&v0>KRU>zIq7Pfd4cdbe1P-(bW0Y1GVPS<@*zISZE|| zM_^lyt~cA&DM+xiJrKcnJVV1P#ycj|zx2(_;fYT6*wDqFMX zyK(XGNogZ$+ejg?9p8~4*#f2Bupb*W*+NI6KnQ&x%-0bgDRiUPzTXaED;&QDPyzg# z4l9$UQh|-U*hA173=P?ZdidF`KlE++w@Z$-xulK~-hN_PB$Ntsrbs z>mx-=#_HT^W9gfUwzY@k-Hw&N?mA8Lh}I~1Br#0~4{k2?OGU=EjSr8_2@Xu)V4$(T z3A+fLJOE-CweA?TW46-3T4v4$B910FXXMHSM(R0G0DBy&9B81yQ#U=dZdYT84-ht= zAn8b`vpTwX%cdhSYf?0@yUsIlxbwZ(d2H{)agJBg>K)w^%FG;_Rz#2`1{NwD5|_mt z#30IJF5%o)5!kVUthxgG6;N=H?C=4xtc$79N3F+`DTiFObGOnW*4G5!ow33_GUg6w z27Ytr>B*8hic0N2BhJgwe{>xw()cmCUwJQ3+WN8k1wF`Q9t^)uVw&I;CLR12jB?tB zek*m`L!ffr2P-W=LvUEIiH4*JO?3@Z_gpH$LQ4TZAM^m0k~MeKt>OMr=wlncW^5UH zDlKV|?}v$lsz3mP+uoQP*NMq~=9i}+AKx07PGr!BU;QB{poi#HCcPvLwD-&LQ)4S% zq9p4=IhrOH{t!)Dh8xPqv1L#kalB0V*u~h|piA{UV11BN5oFE~k~4*g2vGj0!{(~A z6mdyNK0}#BdqW)un;NpWBY`G{fILmT5D34(o4ugDk#}BHG8HLS=iY3|pfvsSqtM!J zv}PGTuv&hfF#QZ+wFo*Ha-bD8Um1+lOKF7!!@+P|vWKp-Gf8+o(BNLOq2LKBmYIC1 z>;jV;RFJc+6#tFyGkB;f7 z&Pr6)VaStnUYq4b?jIVCNsXZR&*D#Cu_-9b(?0Ow&w6FmXf7y$gb=^VL|^9bP|7|O zbXbh`DxQ%rC{Aq`i4uvB&BWq7y?;oI7*j0G96Ce5v0M=Iv5ZC~^7Cp?bzwLQQKLYe z;YuQ;y~oB2`|z_@UxFC&UARmG#Ot33`q?NfpMC!r&Oc%QRm%Q$kp4Gr{vu*!Dy4rC z#6LB{KasLO1FD@F+Tr-cTW;J?sc!36@!L>;!}Q8Pavttx0V2q(xwEE#S-Nlz66@=s zrLVIan9Sez5REMf+J~V;P{cNHFzF-N_1$$)#1qVtgjh2#IH9KNK1o%~Y_10K(NFnJ zN1c*23$6cl6icvpG@ZlkPtW=(;frpDk^uOE@Vv<3^LVH8nTg5Kq$=z}RuT8?%97ml zF4&E1PEBfXi;1NoLqupaefrgG6sCr?T0o?m3~rkxod(BhyT&wFz=GQ`@a@vlAiYbW zP2dCuv=r`3A@rn9@vvP@^nY@UQ&kqZawQ>mr4c>kqI=0LkTw%uw|cf+{K9)QZ^w!` zD0BdW*~$L36e*7}wn8F7tBn#xIZA?|Up*PFAbu-~F&446&QGxdLll1+RnGd@f{%!3 zlsF_)tcF699=@oDzx72>PM&Zpx|pHOpMoEuu2J5Ksi2_iTWPeW`e~?=osMtabcy7^ zpebsld@?|t7dZ`@gXzp;gKEsOJQxdyGN$sIE*$?jfG)$yStiL`gUL=X5>#w<9sr9V z({kQNQKqfsvyF`Ny0j>DpTfwsj+0b%6=_8JbKcV+EmSW>ZZSO+4&Nd}YnzMK@{SVH z55rfBcr;B)%o@GGkd7$8myF8L16@A^AN8c(I8B~1Sl-3oXDOUXUot|!9$F@?W4cYm@Y>Q?bexY z%j@oGfy~>o5@Z=fD;tnI2Ccq3Hgd=HUd|qkaH?k!Sr6Bb^ z?14&Zd8GxGq%(|n{C4Wph+AEpl~Sy9k{`ZsSvn%nBd6D!bQvHlM_F~TGbTdGs$PXE zhXY02Mk;#COzm^C#Ctn(lp{Cp$=y<5H2{n^T<%DesQD$y*h=|i_=sYaYYi~4T+!3y z`tN@4OhfHK19);z$1uNpBw#4bMUtYyQK}y?Xf*BZfWP*Sw()6}nrLDE(pn z4yaTg8Wn({QKh_IlsLhQd(v1^PTlPf_^Mq=7!OW0*&k@L)dD};9~_PgJ&4tLviU4Q z+gPM76?9#Eb&a-hhqPc2^>r{XI z%C3(BC4pnw>m+U$6*Ve$G%B|CP3~096TzCnpq?{iCpXi%0|LOXT%U@67hRvTfyiXJ zVS>WS`dD-FKRmy!2TTO_zR}gOMtQFPE}M+v5HDiOhYuhSxSD?sgBnWDAmGBMbAqv8 zPzM=|y)D^-^6nO0YQnXpJ`~}j6Z2RA(@hk%IUKqiDQ|$G9bnvbVbY9~6}d(HJC!Z| zGt=S_%h^sT-Ujwu@zX2Bt20OXx3~Cj0Z7iq%c_-^+^tUiq8`IxObx3|Hl@i#(4*Qc zok~G8{Q+q**LDV`p?@1HToR;ScjE)*Or-*q9f#l)gD@O}z~~jBZgz192iZd6AsJdp z@y)U015}-Ix_PAIYSkUbI~){xZD?~NRruOwMh?EX!f2C#R^%MD{j4i*3abPoGqr}b z3%gjHeG`Sp-leLBBgGDL4+McMTBa>jx5MFY>E!>|91}a2bZ`8|WLEYC(lQ?(uYLFE zs*TXO`YG=|G-&pRq(a8D63TH*fj*^ZFRxEGk&jo65AzEY?1x9#NYheRAg$27?&5sx*v=*$?2jGLiiO5MTz`SYnn zw6*MD@&;Z_S`67>4dQ&;qw)8LyS{m#bzNgB3eJBC*6e8U(K<6kC?~10xYD&fT!XaS z(63S`4^8^DmKXlopud%@HIU(5k$%0_e76-5zRFqi)+zS8F>{OUHmfjV%L;lOpVaFPnha?|859^Oz&quvsN!ms&UXuz^Gs-)zt$qvRRKVgDSY!k0 znVVV4We&8#SkZH2M#MEe*N;2M%uAp=R=BEOZvxZiE_T1+!`$PjPT{pAJlTfxt3Weh zg?$TC;Mi9+xPP|b#Yw`4n;Y!p?V#5Pq8p-epYFKsgFBvrG;1?OY|F+F<0>=H0JEa5 z^2rNbCiTYV#BanaoS0!P{)G4J`+!(oN^mLg?zt8-_KDpYlwS9Bm!w z27Xew?3Re41GAGjFI)(rvJ?pr7?nyk8J*BraPbu8^Mc$*{sYnS4Crlc#8g8GkhmNw|^Y z0a_IN0{C(i=%q2|JdU^X%ZLzfHm4M6XT$U`J%(IvuX7qfzQ|1;7jipY6*7gC%8^@prWVGVLGLk)j5vX7M4*~e z7&U?@`TrIvULUZwCPeA{;BBi*b! zBk*)2OGn@LsvOByE96XGK$)Zws&P3{0 zhZ#w~S9wO-L8ISl51hyS41W4oI2-@yiO6_bgT})!5e^?qyE@}?9;kR;(!W%fSIr!Z z2Hx*%dKPQ?egRNTi(pTRASZE4rN(;_z?Ob05SUNoG({3o&-^wGeh&&ne*uD&*4g@i zFJ99*H6cE`1|Xhr(?Wy}85!wyV}DW-ZBDp!?8#;>8U^L9`s{sNYFr34a@Sp(oQZpU zlL>g~Q74vG0E;0xL2mP3U^K^}hV3iw_|OdofdRwQKmra2{6*^o!VuYI?!f$7A3+mRmJf(Gps~hv?k{?MAXD*4bv81tZM^cdwPxs7@vPm}CnK zg`DJ#22D7Bp?@tKZjCBcgYxvHMACmRol}8&40>l9tChh{EHw*Gc@h`}Er`nZc*RsX zT{K|%htdw8tEc9gLmU~P{R?1i z9|NSLyymLc6-_CIW|8pkF>-73(ZVdADuiXZueufe{sSP4>*jTreHvlOtDY0YTU*|Q z%IOeYQQ|#E9*Nl}t3!5{Apa+Ciq`%0n4031yIEYw{4XJ#QB9Ipo*LYK16KMr!- z>NFvB3vZ@j%NbwHDKIiqy*b)Wjnp1{O|ytNyICuV?7@NObK)LagGU&}0yc{)hY;fy zf~LLYq*_Yp|5ncVvNp-Nh5nw$Ja!IbeSEQOLw1VyuZJiqmL~yh`2IRr3~)0rZ=3oLraLIoKJPN;$V{to1vhxA_-HVRuEchPf-UfCw(G^1`+nkz#!=<$s-3CL% zqMLb!^qm`d?C*dZLB@q4=CvSH3763@%a~V-<>&^21ejQQt!VhH!}$S3+aT@iM%^h9 zWLz=#Ed*{l+I2a-9+f6tNPZpeb%~?9r_TZcu30? zceL=ubIlTs#gMr;E4sKlf_~L)AcHhDlv=t!2jCjm1TCV}O8ZgfUp^HntI)dTvK^ew zkWIISuU^_fLoJnm%4x>{K*id#uGcq-@W|LIA3;RaX2ucEvUfZsj~)4^G{l5&Zf1o^Xi4~_9S1V`GzDsTM?nuxtJhCJlh6LZVd z)ja(DT~>%u)ntb8_*?*8kxmlp|F%rkUORrIHb{Fjf%y@nqH1dwxI5B(aPXHml%I9i z{r|`b(R7c!(A`pl_kjSEBop;x14QO(BS*8vT)?HP|F;=>i= z2m(1O8p&I}gI0?e{Ai3&BA5nU0uvVw992jTX0!-P>&6nE>}}6S1gp(cOLY#SuAhtN zr`lqO_+kPD6e2jvB9HH+4&f1+&81;=>bnmB$zYZLOhf zA&FD^J_tG7IbCC_HU%c%NHOMKwEzt_wrQ5R4{63gCjVR4Ll1z2+It9OEez(yPzwkn zl{AAsarhSPguSsvUTDR?ClVl6L(6n3>BT={sC)gjg;yQT)lK?w0{vRjq3$=pbJeMp zHUhUaHrs3hZ&(){F4B#ep{I&UntB(o(K%QDTUXk1FBxSMYtWm}sTiz;nO+8@%--FW zP5WcC!f{H@Tnw z^0Cn2%JREhs~M2Oet4%C2a0vKUP=0Y1S>VM<;^t@$id9%p7O>xVT3tzWMbUBm4{-% z;&}^t(d&8NX0g*ef3z^F#NK2I^8)oKiTG_*`(a!gdR0R>u68_aZiy~9+g<`*Lr9ot z@TYbHw_opMLJzejeJZ~N!Zcx(1ACM?lU4irPo_1dsD7UfFuB!Fc5&mq1Jz&Z7JDH6 ztP!swcJx!VX;>YDfPhsqE(1MmEr{JX9rZ_S;(ucrdI_HIFGdU~I1B|Hdafr^(RNxvq6*0#U=eps))D)>@}?#aZSH zFpq#;2VgjWQ%)KsINm8tovcb&yY|pS3FM|S615sZtkY{=OyT2qFF2lIV?`q&Do>Zi zT*8TU46c*2l^GK8DE1#d`h^c-Dch1OyO@OrvE=*wNcygOGuy+cEnLPu%M6YWkD%?_ zQ^?TAsni;Rt-FFb!|O7-#`Cjcz51*mNEk>K)(;p%$#sI_Q7 zH;-%F!o_5yG>KfpykO`AZppYJ?)rZq+#!1ax%=x9=FT1la9^-X`IEM?)4?_$E&bOJ zV4Vg&7CoYJRs-9^PAYd63wxEU(J;VFW1{Q+(4`h+S~0`T&Nsx-6K9f7aQTEJor7VN zAW75n5MLPnFiP1t6^ZD`)vDuGw9O5PbxP*=5f$qah%WQoAB`SQauRk@m9PhVz9;(mBVoV@P zU@tlBx;{&3m%cl};WcN5O|(b^1_pg+gn7>SWAlhPM#XJki-Ck2YMj$6H{95HhJp9V zmFQq38gI5R;09w_EC(s0V6oGaF(YI+oa05CKJd1^y5beJEhTHZcpCJNVXD@?;a&** z1!2E8w4%b(=CYhQCrz=EjpPW{st8fdy2i9NSL=N8@r>tSPjg!9rJ@d?-!Y$ERt8>*I?u534)eR;YuVv#}*6E$T+Vyrn9MGJ*zrN-D+H8 zA0wCUihweyAHw|vm<(EiBwzjz7b4!S=slhF^wOV+;=5MQQG2 zOxEepa>4>in}pNrL!J%Pv_a(crUSoBO3Vk`QTyykGtSqq<6+!nrd5Z-=8^FtAYRcX zk4xCUB}I!&~UvkSM?v>3XcYk~AZ&SdtD`yRs@-^SkdrTQ+2LgY$x;_h^< za!&Wz@+vP1Kkkn3z(oI17pfH;JdF)xC#fyA7dQQeJC&4$V(`1^4M}`%$!huK_FtP&DY|0h~ zjv{AWySC}BO^`h%k2dVA0T{OV%wUR8j(WJHQ-s-!6FAFOPirp}p1(}pPSp_djkR!! zr$;(`~>IEI4?dX&~i5LnbwA* zB+)cG3T3rp(Dd4*^Vv$`i22g_cB7>WEFDXJ6V7|Qc)Sh3)$)aoGST{=Q=p~S?0--q zm|wBP{ro~Q`X8^XKE6(KFB4mRH9Cr}Yz?<sYz&87)-c*1ej@u$FkjjaQ6QdndFuKtnm7zH%`Mrk(+6E2<&g*b@@E)%uvI36H zA6K>>JHW~-B%>$0&P>%w&MxU38W`KgBG_e>`a7i*{C80qi@wl+Gek`*=x89!5eZbqIMa+*)R9`+K8MqwQ@y_(z?H?D=a`w3y zqj+jPZM}y#kvGyMD}#n~w3A_#BzEGR+#ROBn9DiwBx4K{7jb&gK7}5njsX?Q+ZDW5 zPUDNg4^N&l!l18;;{b=hi5(n}-mAzM0mbO(WsD_z!v^qbtVe|LJmkekLgOVh>64*@ zlqFM0uZRpjFvh1Cig?hfaX?eLd_~%+d#VQX!!L>`31Uq_Rek$cjpdu0@5U($dU=(Hn(dd0;vmBmxJ1?Dy2C+d72(u^C!Ga*% zM!%T0E$2=A{}*>qt%Gfn$`{W;Y|h*P+~_gQn?1ekv7J8)s!|;)F_u_)^EFn!1A(RzGc+b!(v0k{@ z*;#2At&C1n5DY+O{2fo8VAH30UrKPd$Dbh=wj{!LY4zB0flgKgxmC$)vOTx{Lh@vL zDBNySKBJse>iqx|cDc+SoZMo-I0z`(7S C9S?e+21gD+{9)V2C`6@VQJE7<*t|Q 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 literal 0 HcmV?d00001 diff --git a/test_runner/regress/test_download_extensions.py b/test_runner/regress/test_download_extensions.py new file mode 100644 index 0000000000..b7692b71c6 --- /dev/null +++ b/test_runner/regress/test_download_extensions.py @@ -0,0 +1,324 @@ +import os +import shutil +import threading +from contextlib import closing +from pathlib import Path + +import pytest +from fixtures.log_helper import log +from fixtures.neon_fixtures import ( + NeonEnvBuilder, + RemoteStorageKind, + available_s3_storages, +) +from fixtures.pg_version import PgVersion + + +# Cleaning up downloaded files is important for local tests +# or else one test could reuse the files from another test or another test run +def cleanup(pg_version): + PGDIR = Path(f"pg_install/v{pg_version}") + + LIB_DIR = PGDIR / Path("lib/postgresql") + cleanup_lib_globs = ["anon*", "postgis*", "pg_buffercache*"] + cleanup_lib_glob_paths = [LIB_DIR.glob(x) for x in cleanup_lib_globs] + + SHARE_DIR = PGDIR / Path("share/postgresql/extension") + cleanup_ext_globs = [ + "anon*", + "address_standardizer*", + "postgis*", + "pageinspect*", + "pg_buffercache*", + "pgrouting*", + ] + cleanup_ext_glob_paths = [SHARE_DIR.glob(x) for x in cleanup_ext_globs] + + all_glob_paths = cleanup_lib_glob_paths + cleanup_ext_glob_paths + all_cleanup_files = [] + for file_glob in all_glob_paths: + for file in file_glob: + all_cleanup_files.append(file) + + for file in all_cleanup_files: + try: + os.remove(file) + log.info(f"removed file {file}") + except Exception as err: + log.info( + f"skipping remove of file {file} because it doesn't exist.\ + this may be expected or unexpected depending on the test {err}" + ) + + cleanup_folders = [SHARE_DIR / Path("anon"), PGDIR / Path("download_extensions")] + for folder in cleanup_folders: + try: + shutil.rmtree(folder) + log.info(f"removed folder {folder}") + except Exception as err: + log.info( + f"skipping remove of folder {folder} because it doesn't exist.\ + this may be expected or unexpected depending on the test {err}" + ) + + +def upload_files(env): + log.info("Uploading test files to mock bucket") + os.chdir("test_runner/regress/data/extension_test") + for path in os.walk("."): + prefix, _, files = path + for file in files: + # the [2:] is to remove the leading "./" + full_path = os.path.join(prefix, file)[2:] + + with open(full_path, "rb") as f: + log.info(f"UPLOAD {full_path} to ext/{full_path}") + env.remote_storage_client.upload_fileobj( + f, + env.ext_remote_storage.bucket_name, + f"ext/{full_path}", + ) + os.chdir("../../../..") + + +# Test downloading remote extension. +@pytest.mark.parametrize("remote_storage_kind", available_s3_storages()) +def test_remote_extensions( + neon_env_builder: NeonEnvBuilder, + remote_storage_kind: RemoteStorageKind, + pg_version: PgVersion, +): + neon_env_builder.enable_remote_storage( + remote_storage_kind=remote_storage_kind, + test_name="test_remote_extensions", + enable_remote_extensions=True, + ) + env = neon_env_builder.init_start() + tenant_id, _ = env.neon_cli.create_tenant() + env.neon_cli.create_timeline("test_remote_extensions", tenant_id=tenant_id) + + assert env.ext_remote_storage is not None # satisfy mypy + assert env.remote_storage_client is not None # satisfy mypy + + # For MOCK_S3 we upload test files. + # For REAL_S3 we use the files already in the bucket + if remote_storage_kind == RemoteStorageKind.MOCK_S3: + upload_files(env) + + # Start a compute node and check that it can download the extensions + # and use them to CREATE EXTENSION and LOAD + endpoint = env.endpoints.create_start( + "test_remote_extensions", + tenant_id=tenant_id, + remote_ext_config=env.ext_remote_storage.to_string(), + # config_lines=["log_min_messages=debug3"], + ) + try: + with closing(endpoint.connect()) as conn: + with conn.cursor() as cur: + # Check that appropriate control files were downloaded + cur.execute("SELECT * FROM pg_available_extensions") + all_extensions = [x[0] for x in cur.fetchall()] + log.info(all_extensions) + assert "anon" in all_extensions + + # postgis is on real s3 but not mock s3. + # it's kind of a big file, would rather not upload to github + if remote_storage_kind == RemoteStorageKind.REAL_S3: + assert "postgis" in all_extensions + # this may fail locally if dependency is missing + # we don't really care about the error, + # we just want to make sure it downloaded + try: + cur.execute("CREATE EXTENSION postgis") + except Exception as err: + log.info(f"(expected) error creating postgis extension: {err}") + # we do not check the error, so this is basically a NO-OP + # however checking the log you can make sure that it worked + # and also get valuable information about how long loading the extension took + + # this is expected to fail on my computer because I don't have the pgcrypto extension + try: + cur.execute("CREATE EXTENSION anon") + except Exception as err: + log.info("error creating anon extension") + assert "pgcrypto" in str(err), "unexpected error creating anon extension" + finally: + cleanup(pg_version) + + +# Test downloading remote library. +@pytest.mark.parametrize("remote_storage_kind", available_s3_storages()) +def test_remote_library( + neon_env_builder: NeonEnvBuilder, + remote_storage_kind: RemoteStorageKind, + pg_version: PgVersion, +): + neon_env_builder.enable_remote_storage( + remote_storage_kind=remote_storage_kind, + test_name="test_remote_library", + enable_remote_extensions=True, + ) + env = neon_env_builder.init_start() + tenant_id, _ = env.neon_cli.create_tenant() + env.neon_cli.create_timeline("test_remote_library", tenant_id=tenant_id) + + assert env.ext_remote_storage is not None # satisfy mypy + assert env.remote_storage_client is not None # satisfy mypy + + # For MOCK_S3 we upload test files. + # For REAL_S3 we use the files already in the bucket + if remote_storage_kind == RemoteStorageKind.MOCK_S3: + upload_files(env) + + # and use them to run LOAD library + endpoint = env.endpoints.create_start( + "test_remote_library", + tenant_id=tenant_id, + remote_ext_config=env.ext_remote_storage.to_string(), + # config_lines=["log_min_messages=debug3"], + ) + try: + with closing(endpoint.connect()) as conn: + with conn.cursor() as cur: + # try to load library + try: + cur.execute("LOAD 'anon'") + except Exception as err: + log.info(f"error loading anon library: {err}") + raise AssertionError("unexpected error loading anon library") from err + + # test library which name is different from extension name + # this may fail locally if dependency is missing + # however, it does successfully download the postgis archive + if remote_storage_kind == RemoteStorageKind.REAL_S3: + try: + cur.execute("LOAD 'postgis_topology-3'") + except Exception as err: + log.info("error loading postgis_topology-3") + assert "No such file or directory" in str( + err + ), "unexpected error loading postgis_topology-3" + finally: + cleanup(pg_version) + + +# Here we test a complex extension +# which has multiple extensions in one archive +# using postgis as an example +@pytest.mark.skipif( + RemoteStorageKind.REAL_S3 not in available_s3_storages(), + reason="skipping test because real s3 not enabled", +) +def test_multiple_extensions_one_archive( + neon_env_builder: NeonEnvBuilder, + pg_version: PgVersion, +): + neon_env_builder.enable_remote_storage( + remote_storage_kind=RemoteStorageKind.REAL_S3, + test_name="test_multiple_extensions_one_archive", + enable_remote_extensions=True, + ) + env = neon_env_builder.init_start() + tenant_id, _ = env.neon_cli.create_tenant() + env.neon_cli.create_timeline("test_multiple_extensions_one_archive", tenant_id=tenant_id) + + assert env.ext_remote_storage is not None # satisfy mypy + assert env.remote_storage_client is not None # satisfy mypy + + endpoint = env.endpoints.create_start( + "test_multiple_extensions_one_archive", + tenant_id=tenant_id, + remote_ext_config=env.ext_remote_storage.to_string(), + ) + with closing(endpoint.connect()) as conn: + with conn.cursor() as cur: + cur.execute("CREATE EXTENSION address_standardizer;") + cur.execute("CREATE EXTENSION address_standardizer_data_us;") + # execute query to ensure that it works + cur.execute( + "SELECT house_num, name, suftype, city, country, state, unit \ + FROM standardize_address('us_lex', 'us_gaz', 'us_rules', \ + 'One Rust Place, Boston, MA 02109');" + ) + res = cur.fetchall() + log.info(res) + assert len(res) > 0 + + cleanup(pg_version) + + +# Test that extension is downloaded after endpoint restart, +# when the library is used in the query. +# +# Run the test with mutliple simultaneous connections to an endpoint. +# to ensure that the extension is downloaded only once. +# +def test_extension_download_after_restart( + neon_env_builder: NeonEnvBuilder, + pg_version: PgVersion, +): + if "15" in pg_version: # SKIP v15 for now because test set only has extension built for v14 + return None + + neon_env_builder.enable_remote_storage( + remote_storage_kind=RemoteStorageKind.MOCK_S3, + test_name="test_extension_download_after_restart", + enable_remote_extensions=True, + ) + env = neon_env_builder.init_start() + tenant_id, _ = env.neon_cli.create_tenant() + env.neon_cli.create_timeline("test_extension_download_after_restart", tenant_id=tenant_id) + + assert env.ext_remote_storage is not None # satisfy mypy + assert env.remote_storage_client is not None # satisfy mypy + + # For MOCK_S3 we upload test files. + upload_files(env) + + endpoint = env.endpoints.create_start( + "test_extension_download_after_restart", + tenant_id=tenant_id, + remote_ext_config=env.ext_remote_storage.to_string(), + config_lines=["log_min_messages=debug3"], + ) + with closing(endpoint.connect()) as conn: + with conn.cursor() as cur: + cur.execute("CREATE extension pg_buffercache;") + cur.execute("SELECT * from pg_buffercache;") + res = cur.fetchall() + assert len(res) > 0 + log.info(res) + + # shutdown compute node + endpoint.stop() + # remove extension files locally + cleanup(pg_version) + + # spin up compute node again (there are no extension files available, because compute is stateless) + endpoint = env.endpoints.create_start( + "test_extension_download_after_restart", + tenant_id=tenant_id, + remote_ext_config=env.ext_remote_storage.to_string(), + config_lines=["log_min_messages=debug3"], + ) + + # connect to compute node and run the query + # that will trigger the download of the extension + def run_query(endpoint, thread_id: int): + log.info("thread_id {%d} starting", thread_id) + with closing(endpoint.connect()) as conn: + with conn.cursor() as cur: + cur.execute("SELECT * from pg_buffercache;") + res = cur.fetchall() + assert len(res) > 0 + log.info("thread_id {%d}, res = %s", thread_id, res) + + threads = [threading.Thread(target=run_query, args=(endpoint, i)) for i in range(2)] + + for thread in threads: + thread.start() + for thread in threads: + thread.join() + + cleanup(pg_version) diff --git a/test_runner/regress/test_timeline_delete.py b/test_runner/regress/test_timeline_delete.py index 764bfe62f9..5ba34122bc 100644 --- a/test_runner/regress/test_timeline_delete.py +++ b/test_runner/regress/test_timeline_delete.py @@ -404,6 +404,7 @@ def assert_prefix_empty(neon_env_builder: NeonEnvBuilder, prefix: Optional[str] assert isinstance(neon_env_builder.remote_storage, S3Storage) # Note that this doesnt use pagination, so list is not guaranteed to be exhaustive. + assert neon_env_builder.remote_storage_client is not None response = neon_env_builder.remote_storage_client.list_objects_v2( Bucket=neon_env_builder.remote_storage.bucket_name, Prefix=prefix or neon_env_builder.remote_storage.prefix_in_bucket or "", @@ -758,7 +759,7 @@ def test_timeline_delete_works_for_remote_smoke( ) # for some reason the check above doesnt immediately take effect for the below. - # Assume it is mock server incosistency and check twice. + # Assume it is mock server inconsistency and check twice. wait_until( 2, 0.5, diff --git a/vendor/postgres-v14 b/vendor/postgres-v14 index da3885c34d..28bf5ccfa2 160000 --- a/vendor/postgres-v14 +++ b/vendor/postgres-v14 @@ -1 +1 @@ -Subproject commit da3885c34db312afd555802be2ce985fafd1d8ad +Subproject commit 28bf5ccfa2fda9677566a25abd450e714d9ed055 diff --git a/vendor/postgres-v15 b/vendor/postgres-v15 index 770c6dffc5..553f2d3618 160000 --- a/vendor/postgres-v15 +++ b/vendor/postgres-v15 @@ -1 +1 @@ -Subproject commit 770c6dffc5ef6aac05bf049693877fb377eea6fc +Subproject commit 553f2d3618a6d4893bde67f1c065926ee8a3a118 diff --git a/vendor/revisions.json b/vendor/revisions.json index 8579b5abaa..80d161938e 100644 --- a/vendor/revisions.json +++ b/vendor/revisions.json @@ -1,4 +1,4 @@ { - "postgres-v15": "770c6dffc5ef6aac05bf049693877fb377eea6fc", - "postgres-v14": "da3885c34db312afd555802be2ce985fafd1d8ad" + "postgres-v15": "553f2d3618a6d4893bde67f1c065926ee8a3a118", + "postgres-v14": "28bf5ccfa2fda9677566a25abd450e714d9ed055" } diff --git a/workspace_hack/Cargo.toml b/workspace_hack/Cargo.toml index 3f47ef062f..d79c7a4104 100644 --- a/workspace_hack/Cargo.toml +++ b/workspace_hack/Cargo.toml @@ -60,6 +60,7 @@ url = { version = "2", features = ["serde"] } [build-dependencies] anyhow = { version = "1", features = ["backtrace"] } bytes = { version = "1", features = ["serde"] } +cc = { version = "1", default-features = false, features = ["parallel"] } either = { version = "1" } itertools = { version = "0.10" } libc = { version = "0.2", features = ["extra_traits"] } From 381f41e68503f6f8a268e1e0bea499793580ecc3 Mon Sep 17 00:00:00 2001 From: Alexander Bayandin Date: Wed, 2 Aug 2023 12:10:36 +0100 Subject: [PATCH 09/29] Bump cryptography from 41.0.2 to 41.0.3 (#4870) --- poetry.lock | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/poetry.lock b/poetry.lock index 74cec84a40..63e756a4c0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -887,34 +887,34 @@ files = [ [[package]] name = "cryptography" -version = "41.0.2" +version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, - {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, - {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, - {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, + {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, + {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, + {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, + {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, + {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, + {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, + {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, ] [package.dependencies] From ca4d71a9549be5638d84e6a9ff5c66ca14cbb05d Mon Sep 17 00:00:00 2001 From: Vadim Kharitonov Date: Wed, 2 Aug 2023 17:18:33 +0200 Subject: [PATCH 10/29] Upgrade pg_embedding to 0.3.5 (#4873) --- Dockerfile.compute-node | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile.compute-node b/Dockerfile.compute-node index 9759faf733..b2d096dc43 100644 --- a/Dockerfile.compute-node +++ b/Dockerfile.compute-node @@ -551,8 +551,8 @@ FROM build-deps AS pg-embedding-pg-build COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ ENV PATH "/usr/local/pgsql/bin/:$PATH" -RUN wget https://github.com/neondatabase/pg_embedding/archive/refs/tags/0.3.1.tar.gz -O pg_embedding.tar.gz && \ - echo "c4ae84eef36fa8ec5868f6e061f39812f19ee5ba3604d428d40935685c7be512 pg_embedding.tar.gz" | sha256sum --check && \ +RUN wget https://github.com/neondatabase/pg_embedding/archive/refs/tags/0.3.5.tar.gz -O pg_embedding.tar.gz && \ + echo "0e95b27b8b6196e2cf0a0c9ec143fe2219b82e54c5bb4ee064e76398cbe69ae9 pg_embedding.tar.gz" | sha256sum --check && \ mkdir pg_embedding-src && cd pg_embedding-src && tar xvzf ../pg_embedding.tar.gz --strip-components=1 -C . && \ make -j $(getconf _NPROCESSORS_ONLN) && \ make -j $(getconf _NPROCESSORS_ONLN) install && \ From e0b05ecafbb8935f9765019e3a9e8461e2f1d21a Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Wed, 2 Aug 2023 20:34:21 +0300 Subject: [PATCH 11/29] build: ca-certificates need to be present (#4880) as needed since #4715 or this will happen: ``` ERROR panic{thread=main location=.../hyper-rustls-0.23.2/src/config.rs:48:9}: no CA certificates found ``` --- Dockerfile.compute-node | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile.compute-node b/Dockerfile.compute-node index b2d096dc43..6dc6612e93 100644 --- a/Dockerfile.compute-node +++ b/Dockerfile.compute-node @@ -816,6 +816,7 @@ COPY --from=compute-tools --chown=postgres /home/nonroot/target/release-line-deb # libxml2, libxslt1.1 for xml2 # libzstd1 for zstd # libboost*, libfreetype6, and zlib1g for rdkit +# ca-certificates for communicating with s3 by compute_ctl RUN apt update && \ apt install --no-install-recommends -y \ gdb \ @@ -839,7 +840,8 @@ RUN apt update && \ libcurl4-openssl-dev \ locales \ procps \ - zlib1g && \ + zlib1g \ + ca-certificates && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 From 4ad0c8f960dad37def0220233a46ea22bf85e618 Mon Sep 17 00:00:00 2001 From: bojanserafimov Date: Wed, 2 Aug 2023 14:19:06 -0400 Subject: [PATCH 12/29] compute_ctl: Prewarm before starting http server (#4867) --- compute_tools/src/bin/compute_ctl.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/compute_tools/src/bin/compute_ctl.rs b/compute_tools/src/bin/compute_ctl.rs index 977a62eed2..ad747470c2 100644 --- a/compute_tools/src/bin/compute_ctl.rs +++ b/compute_tools/src/bin/compute_ctl.rs @@ -203,6 +203,14 @@ fn main() -> Result<()> { }; let compute = Arc::new(compute_node); + // If this is a pooled VM, prewarm before starting HTTP server and becoming + // available for binding. Prewarming helps postgres start quicker later, + // because QEMU will already have it's memory allocated from the host, and + // the necessary binaries will alreaady be cached. + if !spec_set { + compute.prewarm_postgres()?; + } + // Launch http service first, so we were able to serve control-plane // requests, while configuration is still in progress. let _http_handle = @@ -214,12 +222,6 @@ fn main() -> Result<()> { // No spec provided, hang waiting for it. info!("no compute spec provided, waiting"); - // TODO this can stall startups in the unlikely event that we bind - // this compute node while it's busy prewarming. It's not too - // bad because it's just 100ms and unlikely, but it's an - // avoidable problem. - compute.prewarm_postgres()?; - let mut state = compute.state.lock().unwrap(); while state.status != ComputeStatus::ConfigurationPending { state = compute.state_changed.wait(state).unwrap(); From df49a9b7aa9900b5c7d785d4300a955cb9030d76 Mon Sep 17 00:00:00 2001 From: John Spray Date: Wed, 2 Aug 2023 19:31:09 +0100 Subject: [PATCH 13/29] pagekeeper: suppress error logs in shutdown/detach (#4876) ## Problem Error messages like this coming up during normal operations: ``` Compaction failed, retrying in 2s: timeline is Stopping Compaction failed, retrying in 2s: Cannot run compaction iteration on inactive tenant ``` ## Summary of changes Add explicit handling for the shutdown case in these locations, to suppress error logs. --- pageserver/src/tenant/tasks.rs | 5 +++++ pageserver/src/tenant/timeline.rs | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pageserver/src/tenant/tasks.rs b/pageserver/src/tenant/tasks.rs index a758d4da23..6400eb7cbe 100644 --- a/pageserver/src/tenant/tasks.rs +++ b/pageserver/src/tenant/tasks.rs @@ -103,6 +103,11 @@ async fn compaction_loop(tenant: Arc, cancel: CancellationToken) { } } + if cancel.is_cancelled() { + info!("received cancellation request"); + break; + } + let started_at = Instant::now(); let sleep_duration = if period == Duration::ZERO { diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index 647c9b7b0e..e2f10bb4f8 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -697,6 +697,9 @@ impl Timeline { Err(CompactionError::DownloadRequired(rls)) => { anyhow::bail!("Compaction requires downloading multiple times (last was {} layers), possibly battling against eviction", rls.len()) } + Err(CompactionError::ShuttingDown) => { + return Ok(()); + } Err(CompactionError::Other(e)) => { return Err(e); } @@ -778,7 +781,8 @@ impl Timeline { let layer_removal_cs = Arc::new(self.layer_removal_cs.clone().lock_owned().await); // Is the timeline being deleted? if self.is_stopping() { - return Err(anyhow::anyhow!("timeline is Stopping").into()); + trace!("Dropping out of compaction on timeline shutdown"); + return Err(CompactionError::ShuttingDown); } let target_file_size = self.get_checkpoint_distance(); @@ -3235,6 +3239,8 @@ enum CompactionError { /// This should not happen repeatedly, but will be retried once by top-level /// `Timeline::compact`. DownloadRequired(Vec>), + /// The timeline or pageserver is shutting down + ShuttingDown, /// Compaction cannot be done right now; page reconstruction and so on. Other(anyhow::Error), } From 416c14b3531a858056d60ddee51a639e36170738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Thu, 3 Aug 2023 15:30:41 +0200 Subject: [PATCH 14/29] Compaction: sort on slices directly instead of kmerge (#4839) ## Problem The k-merge in pageserver compaction currently relies on iterators over the keys and also over the values. This approach does not support async code because we are using iterators and those don't support async in general. Also, the k-merge implementation we use doesn't support async either. Instead, as we already load all the keys into memory, just do sorting in-memory. ## Summary of changes The PR can be read commit-by-commit, but most importantly, it: * Stops using kmerge in compaction, using slice sorting instead. * Makes `load_keys` and `load_val_refs` async, using `Handle::block_on` in the compaction code as we don't want to turn the compaction function, called inside `spawn_blocking`, into an async fn. Builds on top of #4836, part of https://github.com/neondatabase/neon/issues/4743 --- .../src/tenant/storage_layer/delta_layer.rs | 4 +- pageserver/src/tenant/timeline.rs | 80 +++++++++---------- 2 files changed, 40 insertions(+), 44 deletions(-) diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index 98dc1230f5..54fcb6ec5d 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -614,7 +614,7 @@ impl DeltaLayer { /// Obtains all keys and value references stored in the layer /// /// The value can be obtained via the [`ValueRef::load`] function. - pub fn load_val_refs(&self, ctx: &RequestContext) -> Result> { + pub async fn load_val_refs(&self, ctx: &RequestContext) -> Result> { let inner = self .load(LayerAccessKind::KeyIter, ctx) .context("load delta layer")?; @@ -622,7 +622,7 @@ impl DeltaLayer { } /// Loads all keys stored in the layer. Returns key, lsn and value size. - pub fn load_keys(&self, ctx: &RequestContext) -> Result> { + pub async fn load_keys(&self, ctx: &RequestContext) -> Result> { let inner = self .load(LayerAccessKind::KeyIter, ctx) .context("load delta layer keys")?; diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index e2f10bb4f8..1e4e7dde20 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -19,6 +19,7 @@ use pageserver_api::models::{ use remote_storage::GenericRemoteStorage; use serde_with::serde_as; use storage_broker::BrokerClientChannel; +use tokio::runtime::Handle; use tokio::sync::{oneshot, watch, TryAcquireError}; use tokio_util::sync::CancellationToken; use tracing::*; @@ -3518,16 +3519,41 @@ impl Timeline { // min-heap (reserve space for one more element added before eviction) let mut heap: BinaryHeap = BinaryHeap::with_capacity(max_holes + 1); let mut prev: Option = None; - for (next_key, _next_lsn, _size) in itertools::process_results( - deltas_to_compact.iter().map(|l| -> Result<_> { - Ok(l.clone() - .downcast_delta_layer() - .expect("delta layer") - .load_keys(ctx)? - .into_iter()) - }), - |iter_iter| iter_iter.kmerge_by(|a, b| a.0 < b.0), - )? { + + let mut all_value_refs = Vec::new(); + for l in deltas_to_compact.iter() { + // TODO: replace this with an await once we fully go async + all_value_refs.extend( + Handle::current().block_on( + l.clone() + .downcast_delta_layer() + .expect("delta layer") + .load_val_refs(ctx), + )?, + ); + } + // The current stdlib sorting implementation is designed in a way where it is + // particularly fast where the slice is made up of sorted sub-ranges. + all_value_refs.sort_by_key(|(key, _lsn, _value_ref)| *key); + + let mut all_keys = Vec::new(); + for l in deltas_to_compact.iter() { + // TODO: replace this with an await once we fully go async + all_keys.extend( + Handle::current().block_on( + l.clone() + .downcast_delta_layer() + .expect("delta layer") + .load_keys(ctx), + )?, + ); + } + // The current stdlib sorting implementation is designed in a way where it is + // particularly fast where the slice is made up of sorted sub-ranges. + all_keys.sort_by_key(|(key, _lsn, _size)| *key); + + for (next_key, _next_lsn, _size) in all_keys.iter() { + let next_key = *next_key; if let Some(prev_key) = prev { // just first fast filter if next_key.to_i128() - prev_key.to_i128() >= min_hole_range { @@ -3560,40 +3586,10 @@ impl Timeline { // This iterator walks through all key-value pairs from all the layers // we're compacting, in key, LSN order. - let all_values_iter = itertools::process_results( - deltas_to_compact.iter().map(|l| -> Result<_> { - Ok(l.clone() - .downcast_delta_layer() - .expect("delta layer") - .load_val_refs(ctx)? - .into_iter()) - }), - |iter_iter| { - iter_iter.kmerge_by(|a, b| { - let (a_key, a_lsn, _) = a; - let (b_key, b_lsn, _) = b; - (a_key, a_lsn) < (b_key, b_lsn) - }) - }, - )?; + let all_values_iter = all_value_refs.into_iter(); // This iterator walks through all keys and is needed to calculate size used by each key - let mut all_keys_iter = itertools::process_results( - deltas_to_compact.iter().map(|l| -> Result<_> { - Ok(l.clone() - .downcast_delta_layer() - .expect("delta layer") - .load_keys(ctx)? - .into_iter()) - }), - |iter_iter| { - iter_iter.kmerge_by(|a, b| { - let (a_key, a_lsn, _) = a; - let (b_key, b_lsn, _) = b; - (a_key, a_lsn) < (b_key, b_lsn) - }) - }, - )?; + let mut all_keys_iter = all_keys.into_iter(); stats.prepare_iterators_micros = stats.read_lock_drop_micros.till_now(); From cd33089a665cc3caa8502e2ccf5259d450994023 Mon Sep 17 00:00:00 2001 From: Alexander Bayandin Date: Thu, 3 Aug 2023 14:44:48 +0100 Subject: [PATCH 15/29] test_runner: set AWS credentials for endpoints (#4887) ## Problem If AWS credentials are not set locally (via AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY env vars) `test_remote_library[release-pg15-mock_s3]` test fails with the following error: ``` ERROR could not start the compute node: Failed to download a remote file: Failed to download S3 object: failed to construct request ``` ## Summary of changes - set AWS credentials for endpoints programmatically --- test_runner/fixtures/neon_fixtures.py | 6 +++++- test_runner/regress/test_compatibility.py | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index 0a9735ce9e..392c4d4c0b 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -1595,7 +1595,11 @@ class NeonCli(AbstractNeonCli): if endpoint_id is not None: args.append(endpoint_id) - res = self.raw_cli(args) + s3_env_vars = None + if self.env.remote_storage is not None and isinstance(self.env.remote_storage, S3Storage): + s3_env_vars = self.env.remote_storage.access_env_vars() + + res = self.raw_cli(args, extra_env_vars=s3_env_vars) res.check_returncode() return res diff --git a/test_runner/regress/test_compatibility.py b/test_runner/regress/test_compatibility.py index 754d23a01a..eb26270a5f 100644 --- a/test_runner/regress/test_compatibility.py +++ b/test_runner/regress/test_compatibility.py @@ -337,6 +337,7 @@ def check_neon_works( config.pg_version = pg_version config.initial_tenant = snapshot_config["default_tenant_id"] config.pg_distrib_dir = pg_distrib_dir + config.remote_storage = None # Use the "target" binaries to launch the storage nodes config_target = config From 1497a422964bfdcc79018e6189303b7b6187d5d8 Mon Sep 17 00:00:00 2001 From: Dmitry Rodionov Date: Thu, 3 Aug 2023 17:20:24 +0300 Subject: [PATCH 16/29] tests: split neon_fixtures.py (#4871) ## Problem neon_fixtures.py has grown to unmanageable size. It attracts conflicts. When adding specific utils under for example `fixtures/pageserver` things sometimes need to import stuff from `neon_fixtures.py` which creates circular import. This is usually only needed for type annotations, so `typing.TYPE_CHECKING` flag can mask the issue. Nevertheless I believe that splitting neon_fixtures.py into smaller parts is a better approach. Currently the PR contains small things, but I plan to continue and move NeonEnv to its own `fixtures.env` module. To keep the diff small I think this PR can already be merged to cause less conflicts. UPD: it looks like currently its not really possible to fully avoid usage of `typing.TYPE_CHECKING`, because some components directly depend on each other. I e Env -> Cli -> Env cycle. But its still worth it to avoid it in as many places as possible. And decreasing neon_fixture's size still makes sense. --- test_runner/fixtures/broker.py | 60 ++++ test_runner/fixtures/neon_fixtures.py | 274 +----------------- test_runner/fixtures/port_distributor.py | 77 +++++ test_runner/fixtures/remote_storage.py | 143 +++++++++ .../regress/test_attach_tenant_config.py | 3 +- test_runner/regress/test_compatibility.py | 2 +- .../regress/test_disk_usage_eviction.py | 3 +- .../regress/test_download_extensions.py | 3 +- test_runner/regress/test_fullbackup.py | 2 +- test_runner/regress/test_gc_aggressive.py | 2 +- test_runner/regress/test_layer_eviction.py | 2 +- test_runner/regress/test_metric_collection.py | 4 +- test_runner/regress/test_neon_local_cli.py | 3 +- test_runner/regress/test_ondemand_download.py | 3 +- test_runner/regress/test_remote_storage.py | 8 +- test_runner/regress/test_sni_router.py | 3 +- test_runner/regress/test_tenant_conf.py | 3 +- test_runner/regress/test_tenant_detach.py | 3 +- test_runner/regress/test_tenant_relocation.py | 7 +- test_runner/regress/test_tenants.py | 3 +- .../test_tenants_with_remote_storage.py | 8 +- .../regress/test_threshold_based_eviction.py | 2 +- test_runner/regress/test_timeline_delete.py | 8 +- test_runner/regress/test_timeline_size.py | 4 +- test_runner/regress/test_wal_acceptor.py | 12 +- test_runner/regress/test_wal_restore.py | 2 +- 26 files changed, 338 insertions(+), 306 deletions(-) create mode 100644 test_runner/fixtures/broker.py create mode 100644 test_runner/fixtures/port_distributor.py create mode 100644 test_runner/fixtures/remote_storage.py diff --git a/test_runner/fixtures/broker.py b/test_runner/fixtures/broker.py new file mode 100644 index 0000000000..fa8b816e69 --- /dev/null +++ b/test_runner/fixtures/broker.py @@ -0,0 +1,60 @@ +import subprocess +import time +from dataclasses import dataclass +from pathlib import Path +from typing import Any, Optional + +from fixtures.log_helper import log + + +@dataclass +class NeonBroker: + """An object managing storage_broker instance""" + + logfile: Path + port: int + neon_binpath: Path + handle: Optional[subprocess.Popen[Any]] = None # handle of running daemon + + def listen_addr(self): + return f"127.0.0.1:{self.port}" + + def client_url(self): + return f"http://{self.listen_addr()}" + + def check_status(self): + return True # TODO + + def try_start(self): + if self.handle is not None: + log.debug(f"storage_broker is already running on port {self.port}") + return + + listen_addr = self.listen_addr() + log.info(f'starting storage_broker to listen incoming connections at "{listen_addr}"') + with open(self.logfile, "wb") as logfile: + args = [ + str(self.neon_binpath / "storage_broker"), + f"--listen-addr={listen_addr}", + ] + self.handle = subprocess.Popen(args, stdout=logfile, stderr=logfile) + + # wait for start + started_at = time.time() + while True: + try: + self.check_status() + except Exception as e: + elapsed = time.time() - started_at + if elapsed > 5: + raise RuntimeError( + f"timed out waiting {elapsed:.0f}s for storage_broker start: {e}" + ) from e + time.sleep(0.5) + else: + break # success + + def stop(self): + if self.handle is not None: + self.handle.terminate() + self.handle.wait() diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index 392c4d4c0b..ac237cafca 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -2,13 +2,11 @@ from __future__ import annotations import abc import asyncio -import enum import filecmp import json import os import re import shutil -import socket import subprocess import tempfile import textwrap @@ -17,12 +15,11 @@ import uuid from contextlib import closing, contextmanager from dataclasses import dataclass, field from datetime import datetime -from enum import Flag, auto from functools import cached_property from itertools import chain, product from pathlib import Path from types import TracebackType -from typing import Any, Dict, Iterator, List, Optional, Tuple, Type, Union, cast +from typing import Any, Dict, Iterator, List, Optional, Tuple, Type, cast from urllib.parse import urlparse import asyncpg @@ -42,10 +39,21 @@ from psycopg2.extensions import cursor as PgCursor from psycopg2.extensions import make_dsn, parse_dsn from typing_extensions import Literal +from fixtures.broker import NeonBroker from fixtures.log_helper import log from fixtures.pageserver.http import PageserverHttpClient from fixtures.pageserver.utils import wait_for_last_record_lsn, wait_for_upload from fixtures.pg_version import PgVersion +from fixtures.port_distributor import PortDistributor +from fixtures.remote_storage import ( + LocalFsStorage, + MockS3Server, + RemoteStorage, + RemoteStorageKind, + RemoteStorageUsers, + S3Storage, + remote_storage_to_toml_inline_table, +) from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import ( ATTACHMENT_NAME_REGEX, @@ -220,77 +228,6 @@ def get_dir_size(path: str) -> int: return totalbytes -def can_bind(host: str, port: int) -> bool: - """ - Check whether a host:port is available to bind for listening - - Inspired by the can_bind() perl function used in Postgres tests, in - vendor/postgres-v14/src/test/perl/PostgresNode.pm - """ - with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock: - # TODO: The pageserver and safekeepers don't use SO_REUSEADDR at the - # moment. If that changes, we should use start using SO_REUSEADDR here - # too, to allow reusing ports more quickly. - # See https://github.com/neondatabase/neon/issues/801 - # sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - - try: - sock.bind((host, port)) - sock.listen() - return True - except socket.error: - log.info(f"Port {port} is in use, skipping") - return False - finally: - sock.close() - - -class PortDistributor: - def __init__(self, base_port: int, port_number: int): - self.iterator = iter(range(base_port, base_port + port_number)) - self.port_map: Dict[int, int] = {} - - def get_port(self) -> int: - for port in self.iterator: - if can_bind("localhost", port): - return port - raise RuntimeError( - "port range configured for test is exhausted, consider enlarging the range" - ) - - def replace_with_new_port(self, value: Union[int, str]) -> Union[int, str]: - """ - Returns a new port for a port number in a string (like "localhost:1234") or int. - Replacements are memorised, so a substitution for the same port is always the same. - """ - - # TODO: replace with structural pattern matching for Python >= 3.10 - if isinstance(value, int): - return self._replace_port_int(value) - - if isinstance(value, str): - return self._replace_port_str(value) - - raise TypeError(f"unsupported type {type(value)} of {value=}") - - def _replace_port_int(self, value: int) -> int: - known_port = self.port_map.get(value) - if known_port is None: - known_port = self.port_map[value] = self.get_port() - - return known_port - - def _replace_port_str(self, value: str) -> str: - # Use regex to find port in a string - # urllib.parse.urlparse produces inconvenient results for cases without scheme like "localhost:5432" - # See https://bugs.python.org/issue27657 - ports = re.findall(r":(\d+)(?:/|$)", value) - assert len(ports) == 1, f"can't find port in {value}" - port_int = int(ports[0]) - - return value.replace(f":{port_int}", f":{self._replace_port_int(port_int)}") - - @pytest.fixture(scope="session") def port_distributor(worker_base_port: int) -> PortDistributor: return PortDistributor(base_port=worker_base_port, port_number=WORKER_PORT_NUM) @@ -464,140 +401,6 @@ class AuthKeys: return self.generate_token(scope="tenant", tenant_id=str(tenant_id)) -class MockS3Server: - """ - Starts a mock S3 server for testing on a port given, errors if the server fails to start or exits prematurely. - Relies that `poetry` and `moto` server are installed, since it's the way the tests are run. - - Also provides a set of methods to derive the connection properties from and the method to kill the underlying server. - """ - - def __init__( - self, - port: int, - ): - self.port = port - - # XXX: do not use `shell=True` or add `exec ` to the command here otherwise. - # We use `self.subprocess.kill()` to shut down the server, which would not "just" work in Linux - # if a process is started from the shell process. - self.subprocess = subprocess.Popen(["poetry", "run", "moto_server", "s3", f"-p{port}"]) - error = None - try: - return_code = self.subprocess.poll() - if return_code is not None: - error = f"expected mock s3 server to run but it exited with code {return_code}. stdout: '{self.subprocess.stdout}', stderr: '{self.subprocess.stderr}'" - except Exception as e: - error = f"expected mock s3 server to start but it failed with exception: {e}. stdout: '{self.subprocess.stdout}', stderr: '{self.subprocess.stderr}'" - if error is not None: - log.error(error) - self.kill() - raise RuntimeError("failed to start s3 mock server") - - def endpoint(self) -> str: - return f"http://127.0.0.1:{self.port}" - - def region(self) -> str: - return "us-east-1" - - def access_key(self) -> str: - return "test" - - def secret_key(self) -> str: - return "test" - - def kill(self): - self.subprocess.kill() - - -@enum.unique -class RemoteStorageKind(str, enum.Enum): - LOCAL_FS = "local_fs" - MOCK_S3 = "mock_s3" - REAL_S3 = "real_s3" - # Pass to tests that are generic to remote storage - # to ensure the test pass with or without the remote storage - NOOP = "noop" - - -def available_remote_storages() -> List[RemoteStorageKind]: - remote_storages = [RemoteStorageKind.LOCAL_FS, RemoteStorageKind.MOCK_S3] - if os.getenv("ENABLE_REAL_S3_REMOTE_STORAGE") is not None: - remote_storages.append(RemoteStorageKind.REAL_S3) - log.info("Enabling real s3 storage for tests") - else: - log.info("Using mock implementations to test remote storage") - return remote_storages - - -def available_s3_storages() -> List[RemoteStorageKind]: - remote_storages = [RemoteStorageKind.MOCK_S3] - if os.getenv("ENABLE_REAL_S3_REMOTE_STORAGE") is not None: - remote_storages.append(RemoteStorageKind.REAL_S3) - log.info("Enabling real s3 storage for tests") - else: - log.info("Using mock implementations to test remote storage") - return remote_storages - - -@dataclass -class LocalFsStorage: - root: Path - - -@dataclass -class S3Storage: - bucket_name: str - bucket_region: str - access_key: str - secret_key: str - endpoint: Optional[str] = None - prefix_in_bucket: Optional[str] = "" - - def access_env_vars(self) -> Dict[str, str]: - return { - "AWS_ACCESS_KEY_ID": self.access_key, - "AWS_SECRET_ACCESS_KEY": self.secret_key, - } - - def to_string(self) -> str: - return json.dumps( - { - "bucket": self.bucket_name, - "region": self.bucket_region, - "endpoint": self.endpoint, - "prefix": self.prefix_in_bucket, - } - ) - - -RemoteStorage = Union[LocalFsStorage, S3Storage] - - -# serialize as toml inline table -def remote_storage_to_toml_inline_table(remote_storage: RemoteStorage) -> str: - if isinstance(remote_storage, LocalFsStorage): - remote_storage_config = f"local_path='{remote_storage.root}'" - elif isinstance(remote_storage, S3Storage): - remote_storage_config = f"bucket_name='{remote_storage.bucket_name}',\ - bucket_region='{remote_storage.bucket_region}'" - - if remote_storage.prefix_in_bucket is not None: - remote_storage_config += f",prefix_in_bucket='{remote_storage.prefix_in_bucket}'" - - if remote_storage.endpoint is not None: - remote_storage_config += f",endpoint='{remote_storage.endpoint}'" - else: - raise Exception("invalid remote storage type") - - return f"{{{remote_storage_config}}}" - - -class RemoteStorageUsers(Flag): - PAGESERVER = auto() - SAFEKEEPER = auto() - - class NeonEnvBuilder: """ Builder object to create a Neon runtime environment @@ -2899,59 +2702,6 @@ class SafekeeperHttpClient(requests.Session): return metrics -@dataclass -class NeonBroker: - """An object managing storage_broker instance""" - - logfile: Path - port: int - neon_binpath: Path - handle: Optional[subprocess.Popen[Any]] = None # handle of running daemon - - def listen_addr(self): - return f"127.0.0.1:{self.port}" - - def client_url(self): - return f"http://{self.listen_addr()}" - - def check_status(self): - return True # TODO - - def try_start(self): - if self.handle is not None: - log.debug(f"storage_broker is already running on port {self.port}") - return - - listen_addr = self.listen_addr() - log.info(f'starting storage_broker to listen incoming connections at "{listen_addr}"') - with open(self.logfile, "wb") as logfile: - args = [ - str(self.neon_binpath / "storage_broker"), - f"--listen-addr={listen_addr}", - ] - self.handle = subprocess.Popen(args, stdout=logfile, stderr=logfile) - - # wait for start - started_at = time.time() - while True: - try: - self.check_status() - except Exception as e: - elapsed = time.time() - started_at - if elapsed > 5: - raise RuntimeError( - f"timed out waiting {elapsed:.0f}s for storage_broker start: {e}" - ) from e - time.sleep(0.5) - else: - break # success - - def stop(self): - if self.handle is not None: - self.handle.terminate() - self.handle.wait() - - def get_test_output_dir(request: FixtureRequest, top_output_dir: Path) -> Path: """Compute the working directory for an individual test.""" test_name = request.node.name diff --git a/test_runner/fixtures/port_distributor.py b/test_runner/fixtures/port_distributor.py new file mode 100644 index 0000000000..fd808d7a5f --- /dev/null +++ b/test_runner/fixtures/port_distributor.py @@ -0,0 +1,77 @@ +import re +import socket +from contextlib import closing +from typing import Dict, Union + +from fixtures.log_helper import log + + +def can_bind(host: str, port: int) -> bool: + """ + Check whether a host:port is available to bind for listening + + Inspired by the can_bind() perl function used in Postgres tests, in + vendor/postgres-v14/src/test/perl/PostgresNode.pm + """ + with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock: + # TODO: The pageserver and safekeepers don't use SO_REUSEADDR at the + # moment. If that changes, we should use start using SO_REUSEADDR here + # too, to allow reusing ports more quickly. + # See https://github.com/neondatabase/neon/issues/801 + # sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + + try: + sock.bind((host, port)) + sock.listen() + return True + except socket.error: + log.info(f"Port {port} is in use, skipping") + return False + finally: + sock.close() + + +class PortDistributor: + def __init__(self, base_port: int, port_number: int): + self.iterator = iter(range(base_port, base_port + port_number)) + self.port_map: Dict[int, int] = {} + + def get_port(self) -> int: + for port in self.iterator: + if can_bind("localhost", port): + return port + raise RuntimeError( + "port range configured for test is exhausted, consider enlarging the range" + ) + + def replace_with_new_port(self, value: Union[int, str]) -> Union[int, str]: + """ + Returns a new port for a port number in a string (like "localhost:1234") or int. + Replacements are memorised, so a substitution for the same port is always the same. + """ + + # TODO: replace with structural pattern matching for Python >= 3.10 + if isinstance(value, int): + return self._replace_port_int(value) + + if isinstance(value, str): + return self._replace_port_str(value) + + raise TypeError(f"unsupported type {type(value)} of {value=}") + + def _replace_port_int(self, value: int) -> int: + known_port = self.port_map.get(value) + if known_port is None: + known_port = self.port_map[value] = self.get_port() + + return known_port + + def _replace_port_str(self, value: str) -> str: + # Use regex to find port in a string + # urllib.parse.urlparse produces inconvenient results for cases without scheme like "localhost:5432" + # See https://bugs.python.org/issue27657 + ports = re.findall(r":(\d+)(?:/|$)", value) + assert len(ports) == 1, f"can't find port in {value}" + port_int = int(ports[0]) + + return value.replace(f":{port_int}", f":{self._replace_port_int(port_int)}") diff --git a/test_runner/fixtures/remote_storage.py b/test_runner/fixtures/remote_storage.py new file mode 100644 index 0000000000..1b80473377 --- /dev/null +++ b/test_runner/fixtures/remote_storage.py @@ -0,0 +1,143 @@ +import enum +import json +import os +import subprocess +from dataclasses import dataclass +from pathlib import Path +from typing import Dict, List, Optional, Union + +from fixtures.log_helper import log + + +class MockS3Server: + """ + Starts a mock S3 server for testing on a port given, errors if the server fails to start or exits prematurely. + Relies that `poetry` and `moto` server are installed, since it's the way the tests are run. + + Also provides a set of methods to derive the connection properties from and the method to kill the underlying server. + """ + + def __init__( + self, + port: int, + ): + self.port = port + + # XXX: do not use `shell=True` or add `exec ` to the command here otherwise. + # We use `self.subprocess.kill()` to shut down the server, which would not "just" work in Linux + # if a process is started from the shell process. + self.subprocess = subprocess.Popen(["poetry", "run", "moto_server", "s3", f"-p{port}"]) + error = None + try: + return_code = self.subprocess.poll() + if return_code is not None: + error = f"expected mock s3 server to run but it exited with code {return_code}. stdout: '{self.subprocess.stdout}', stderr: '{self.subprocess.stderr}'" + except Exception as e: + error = f"expected mock s3 server to start but it failed with exception: {e}. stdout: '{self.subprocess.stdout}', stderr: '{self.subprocess.stderr}'" + if error is not None: + log.error(error) + self.kill() + raise RuntimeError("failed to start s3 mock server") + + def endpoint(self) -> str: + return f"http://127.0.0.1:{self.port}" + + def region(self) -> str: + return "us-east-1" + + def access_key(self) -> str: + return "test" + + def secret_key(self) -> str: + return "test" + + def kill(self): + self.subprocess.kill() + + +@enum.unique +class RemoteStorageKind(str, enum.Enum): + LOCAL_FS = "local_fs" + MOCK_S3 = "mock_s3" + REAL_S3 = "real_s3" + # Pass to tests that are generic to remote storage + # to ensure the test pass with or without the remote storage + NOOP = "noop" + + +def available_remote_storages() -> List[RemoteStorageKind]: + remote_storages = [RemoteStorageKind.LOCAL_FS, RemoteStorageKind.MOCK_S3] + if os.getenv("ENABLE_REAL_S3_REMOTE_STORAGE") is not None: + remote_storages.append(RemoteStorageKind.REAL_S3) + log.info("Enabling real s3 storage for tests") + else: + log.info("Using mock implementations to test remote storage") + return remote_storages + + +def available_s3_storages() -> List[RemoteStorageKind]: + remote_storages = [RemoteStorageKind.MOCK_S3] + if os.getenv("ENABLE_REAL_S3_REMOTE_STORAGE") is not None: + remote_storages.append(RemoteStorageKind.REAL_S3) + log.info("Enabling real s3 storage for tests") + else: + log.info("Using mock implementations to test remote storage") + return remote_storages + + +@dataclass +class LocalFsStorage: + root: Path + + +@dataclass +class S3Storage: + bucket_name: str + bucket_region: str + access_key: str + secret_key: str + endpoint: Optional[str] = None + prefix_in_bucket: Optional[str] = "" + + def access_env_vars(self) -> Dict[str, str]: + return { + "AWS_ACCESS_KEY_ID": self.access_key, + "AWS_SECRET_ACCESS_KEY": self.secret_key, + } + + def to_string(self) -> str: + return json.dumps( + { + "bucket": self.bucket_name, + "region": self.bucket_region, + "endpoint": self.endpoint, + "prefix": self.prefix_in_bucket, + } + ) + + +RemoteStorage = Union[LocalFsStorage, S3Storage] + + +# serialize as toml inline table +def remote_storage_to_toml_inline_table(remote_storage: RemoteStorage) -> str: + if isinstance(remote_storage, LocalFsStorage): + remote_storage_config = f"local_path='{remote_storage.root}'" + elif isinstance(remote_storage, S3Storage): + remote_storage_config = f"bucket_name='{remote_storage.bucket_name}',\ + bucket_region='{remote_storage.bucket_region}'" + + if remote_storage.prefix_in_bucket is not None: + remote_storage_config += f",prefix_in_bucket='{remote_storage.prefix_in_bucket}'" + + if remote_storage.endpoint is not None: + remote_storage_config += f",endpoint='{remote_storage.endpoint}'" + else: + raise Exception("invalid remote storage type") + + return f"{{{remote_storage_config}}}" + + +class RemoteStorageUsers(enum.Flag): + PAGESERVER = enum.auto() + SAFEKEEPER = enum.auto() diff --git a/test_runner/regress/test_attach_tenant_config.py b/test_runner/regress/test_attach_tenant_config.py index b6b46f9401..bc6afa84a1 100644 --- a/test_runner/regress/test_attach_tenant_config.py +++ b/test_runner/regress/test_attach_tenant_config.py @@ -3,12 +3,11 @@ from typing import Generator, Optional import pytest from fixtures.neon_fixtures import ( - LocalFsStorage, NeonEnv, NeonEnvBuilder, - RemoteStorageKind, ) from fixtures.pageserver.http import PageserverApiException, TenantConfig +from fixtures.remote_storage import LocalFsStorage, RemoteStorageKind from fixtures.types import TenantId from fixtures.utils import wait_until diff --git a/test_runner/regress/test_compatibility.py b/test_runner/regress/test_compatibility.py index eb26270a5f..fa386ee75a 100644 --- a/test_runner/regress/test_compatibility.py +++ b/test_runner/regress/test_compatibility.py @@ -13,7 +13,6 @@ from fixtures.neon_fixtures import ( NeonCli, NeonEnvBuilder, PgBin, - PortDistributor, ) from fixtures.pageserver.http import PageserverHttpClient from fixtures.pageserver.utils import ( @@ -22,6 +21,7 @@ from fixtures.pageserver.utils import ( wait_for_upload, ) from fixtures.pg_version import PgVersion +from fixtures.port_distributor import PortDistributor from fixtures.types import Lsn from pytest import FixtureRequest diff --git a/test_runner/regress/test_disk_usage_eviction.py b/test_runner/regress/test_disk_usage_eviction.py index fc2d29c2c1..1e9b130b1c 100644 --- a/test_runner/regress/test_disk_usage_eviction.py +++ b/test_runner/regress/test_disk_usage_eviction.py @@ -7,15 +7,14 @@ import pytest import toml from fixtures.log_helper import log from fixtures.neon_fixtures import ( - LocalFsStorage, NeonEnv, NeonEnvBuilder, PgBin, - RemoteStorageKind, wait_for_last_flush_lsn, ) from fixtures.pageserver.http import PageserverHttpClient from fixtures.pageserver.utils import wait_for_upload_queue_empty +from fixtures.remote_storage import LocalFsStorage, RemoteStorageKind from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import wait_until diff --git a/test_runner/regress/test_download_extensions.py b/test_runner/regress/test_download_extensions.py index b7692b71c6..c4bee1a1ea 100644 --- a/test_runner/regress/test_download_extensions.py +++ b/test_runner/regress/test_download_extensions.py @@ -8,10 +8,9 @@ import pytest from fixtures.log_helper import log from fixtures.neon_fixtures import ( NeonEnvBuilder, - RemoteStorageKind, - available_s3_storages, ) from fixtures.pg_version import PgVersion +from fixtures.remote_storage import RemoteStorageKind, available_s3_storages # Cleaning up downloaded files is important for local tests diff --git a/test_runner/regress/test_fullbackup.py b/test_runner/regress/test_fullbackup.py index ece9dccf93..214f1f33a8 100644 --- a/test_runner/regress/test_fullbackup.py +++ b/test_runner/regress/test_fullbackup.py @@ -5,9 +5,9 @@ from fixtures.log_helper import log from fixtures.neon_fixtures import ( NeonEnvBuilder, PgBin, - PortDistributor, VanillaPostgres, ) +from fixtures.port_distributor import PortDistributor from fixtures.types import Lsn, TimelineId from fixtures.utils import query_scalar, subprocess_capture diff --git a/test_runner/regress/test_gc_aggressive.py b/test_runner/regress/test_gc_aggressive.py index e26b1a980e..53fa70903f 100644 --- a/test_runner/regress/test_gc_aggressive.py +++ b/test_runner/regress/test_gc_aggressive.py @@ -8,9 +8,9 @@ from fixtures.neon_fixtures import ( Endpoint, NeonEnv, NeonEnvBuilder, - RemoteStorageKind, wait_for_last_flush_lsn, ) +from fixtures.remote_storage import RemoteStorageKind from fixtures.types import TenantId, TimelineId from fixtures.utils import query_scalar diff --git a/test_runner/regress/test_layer_eviction.py b/test_runner/regress/test_layer_eviction.py index d4f0c94a29..1269210d0d 100644 --- a/test_runner/regress/test_layer_eviction.py +++ b/test_runner/regress/test_layer_eviction.py @@ -4,10 +4,10 @@ import pytest from fixtures.log_helper import log from fixtures.neon_fixtures import ( NeonEnvBuilder, - RemoteStorageKind, wait_for_last_flush_lsn, ) from fixtures.pageserver.utils import wait_for_last_record_lsn, wait_for_upload +from fixtures.remote_storage import RemoteStorageKind from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import query_scalar diff --git a/test_runner/regress/test_metric_collection.py b/test_runner/regress/test_metric_collection.py index 61c8f800f8..80ffe5126d 100644 --- a/test_runner/regress/test_metric_collection.py +++ b/test_runner/regress/test_metric_collection.py @@ -13,11 +13,11 @@ from fixtures.neon_fixtures import ( PSQL, NeonEnvBuilder, NeonProxy, - PortDistributor, - RemoteStorageKind, VanillaPostgres, wait_for_last_flush_lsn, ) +from fixtures.port_distributor import PortDistributor +from fixtures.remote_storage import RemoteStorageKind from fixtures.types import TenantId, TimelineId from fixtures.utils import query_scalar from pytest_httpserver import HTTPServer diff --git a/test_runner/regress/test_neon_local_cli.py b/test_runner/regress/test_neon_local_cli.py index 6dd47de8cf..becdd9ff80 100644 --- a/test_runner/regress/test_neon_local_cli.py +++ b/test_runner/regress/test_neon_local_cli.py @@ -1,4 +1,5 @@ -from fixtures.neon_fixtures import NeonEnvBuilder, PortDistributor +from fixtures.neon_fixtures import NeonEnvBuilder +from fixtures.port_distributor import PortDistributor # Test that neon cli is able to start and stop all processes with the user defaults. diff --git a/test_runner/regress/test_ondemand_download.py b/test_runner/regress/test_ondemand_download.py index ca43df350d..17a63535cf 100644 --- a/test_runner/regress/test_ondemand_download.py +++ b/test_runner/regress/test_ondemand_download.py @@ -10,8 +10,6 @@ import pytest from fixtures.log_helper import log from fixtures.neon_fixtures import ( NeonEnvBuilder, - RemoteStorageKind, - available_remote_storages, last_flush_lsn_upload, wait_for_last_flush_lsn, ) @@ -23,6 +21,7 @@ from fixtures.pageserver.utils import ( wait_for_upload_queue_empty, wait_until_tenant_state, ) +from fixtures.remote_storage import RemoteStorageKind, available_remote_storages from fixtures.types import Lsn from fixtures.utils import query_scalar, wait_until diff --git a/test_runner/regress/test_remote_storage.py b/test_runner/regress/test_remote_storage.py index 7c04ed9017..68116985d3 100644 --- a/test_runner/regress/test_remote_storage.py +++ b/test_runner/regress/test_remote_storage.py @@ -12,10 +12,7 @@ from typing import Dict, List, Optional, Tuple import pytest from fixtures.log_helper import log from fixtures.neon_fixtures import ( - LocalFsStorage, NeonEnvBuilder, - RemoteStorageKind, - available_remote_storages, wait_for_last_flush_lsn, ) from fixtures.pageserver.http import PageserverApiException, PageserverHttpClient @@ -26,6 +23,11 @@ from fixtures.pageserver.utils import ( wait_until_tenant_active, wait_until_tenant_state, ) +from fixtures.remote_storage import ( + LocalFsStorage, + RemoteStorageKind, + available_remote_storages, +) from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import print_gc_result, query_scalar, wait_until from requests import ReadTimeout diff --git a/test_runner/regress/test_sni_router.py b/test_runner/regress/test_sni_router.py index 9b78e8287e..4336e6551d 100644 --- a/test_runner/regress/test_sni_router.py +++ b/test_runner/regress/test_sni_router.py @@ -6,7 +6,8 @@ from typing import Optional, Type import backoff from fixtures.log_helper import log -from fixtures.neon_fixtures import PgProtocol, PortDistributor, VanillaPostgres +from fixtures.neon_fixtures import PgProtocol, VanillaPostgres +from fixtures.port_distributor import PortDistributor def generate_tls_cert(cn, certout, keyout): diff --git a/test_runner/regress/test_tenant_conf.py b/test_runner/regress/test_tenant_conf.py index 7c80d86863..60ec532db4 100644 --- a/test_runner/regress/test_tenant_conf.py +++ b/test_runner/regress/test_tenant_conf.py @@ -4,11 +4,10 @@ from contextlib import closing import psycopg2.extras from fixtures.log_helper import log from fixtures.neon_fixtures import ( - LocalFsStorage, NeonEnvBuilder, - RemoteStorageKind, ) from fixtures.pageserver.utils import assert_tenant_state, wait_for_upload +from fixtures.remote_storage import LocalFsStorage, RemoteStorageKind from fixtures.types import Lsn from fixtures.utils import wait_until diff --git a/test_runner/regress/test_tenant_detach.py b/test_runner/regress/test_tenant_detach.py index 77f93dbd92..932d821954 100644 --- a/test_runner/regress/test_tenant_detach.py +++ b/test_runner/regress/test_tenant_detach.py @@ -11,8 +11,6 @@ from fixtures.neon_fixtures import ( Endpoint, NeonEnv, NeonEnvBuilder, - RemoteStorageKind, - available_remote_storages, ) from fixtures.pageserver.http import PageserverApiException, PageserverHttpClient from fixtures.pageserver.utils import ( @@ -20,6 +18,7 @@ from fixtures.pageserver.utils import ( wait_for_upload, wait_until_tenant_state, ) +from fixtures.remote_storage import RemoteStorageKind, available_remote_storages from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import query_scalar, wait_until from prometheus_client.samples import Sample diff --git a/test_runner/regress/test_tenant_relocation.py b/test_runner/regress/test_tenant_relocation.py index 2805d56c98..eb020c101f 100644 --- a/test_runner/regress/test_tenant_relocation.py +++ b/test_runner/regress/test_tenant_relocation.py @@ -7,15 +7,12 @@ from pathlib import Path from typing import Any, Dict, Optional, Tuple import pytest +from fixtures.broker import NeonBroker from fixtures.log_helper import log from fixtures.neon_fixtures import ( Endpoint, - NeonBroker, NeonEnv, NeonEnvBuilder, - PortDistributor, - RemoteStorageKind, - available_remote_storages, ) from fixtures.pageserver.http import PageserverHttpClient from fixtures.pageserver.utils import ( @@ -24,6 +21,8 @@ from fixtures.pageserver.utils import ( wait_for_last_record_lsn, wait_for_upload, ) +from fixtures.port_distributor import PortDistributor +from fixtures.remote_storage import RemoteStorageKind, available_remote_storages from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import ( query_scalar, diff --git a/test_runner/regress/test_tenants.py b/test_runner/regress/test_tenants.py index e327910138..19bc3ed37c 100644 --- a/test_runner/regress/test_tenants.py +++ b/test_runner/regress/test_tenants.py @@ -18,10 +18,9 @@ from fixtures.metrics import ( from fixtures.neon_fixtures import ( NeonEnv, NeonEnvBuilder, - RemoteStorageKind, - available_remote_storages, ) from fixtures.pageserver.utils import timeline_delete_wait_completed +from fixtures.remote_storage import RemoteStorageKind, available_remote_storages from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import wait_until from prometheus_client.samples import Sample diff --git a/test_runner/regress/test_tenants_with_remote_storage.py b/test_runner/regress/test_tenants_with_remote_storage.py index 498563325b..79a3b353d4 100644 --- a/test_runner/regress/test_tenants_with_remote_storage.py +++ b/test_runner/regress/test_tenants_with_remote_storage.py @@ -16,11 +16,8 @@ import pytest from fixtures.log_helper import log from fixtures.neon_fixtures import ( Endpoint, - LocalFsStorage, NeonEnv, NeonEnvBuilder, - RemoteStorageKind, - available_remote_storages, last_flush_lsn_upload, ) from fixtures.pageserver.utils import ( @@ -28,6 +25,11 @@ from fixtures.pageserver.utils import ( wait_for_last_record_lsn, wait_for_upload, ) +from fixtures.remote_storage import ( + LocalFsStorage, + RemoteStorageKind, + available_remote_storages, +) from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import query_scalar, wait_until diff --git a/test_runner/regress/test_threshold_based_eviction.py b/test_runner/regress/test_threshold_based_eviction.py index 4d8c87e09e..b1bc9623ce 100644 --- a/test_runner/regress/test_threshold_based_eviction.py +++ b/test_runner/regress/test_threshold_based_eviction.py @@ -6,10 +6,10 @@ from fixtures.log_helper import log from fixtures.neon_fixtures import ( NeonEnvBuilder, PgBin, - RemoteStorageKind, last_flush_lsn_upload, ) from fixtures.pageserver.http import LayerMapInfo +from fixtures.remote_storage import RemoteStorageKind from fixtures.types import TimelineId from pytest_httpserver import HTTPServer diff --git a/test_runner/regress/test_timeline_delete.py b/test_runner/regress/test_timeline_delete.py index 5ba34122bc..ca737ac02d 100644 --- a/test_runner/regress/test_timeline_delete.py +++ b/test_runner/regress/test_timeline_delete.py @@ -13,9 +13,6 @@ from fixtures.neon_fixtures import ( NeonEnv, NeonEnvBuilder, PgBin, - RemoteStorageKind, - S3Storage, - available_remote_storages, last_flush_lsn_upload, wait_for_last_flush_lsn, ) @@ -28,6 +25,11 @@ from fixtures.pageserver.utils import ( wait_until_tenant_active, wait_until_timeline_state, ) +from fixtures.remote_storage import ( + RemoteStorageKind, + S3Storage, + available_remote_storages, +) from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import query_scalar, wait_until diff --git a/test_runner/regress/test_timeline_size.py b/test_runner/regress/test_timeline_size.py index cb993c93d2..f6e4a667a4 100644 --- a/test_runner/regress/test_timeline_size.py +++ b/test_runner/regress/test_timeline_size.py @@ -16,8 +16,6 @@ from fixtures.neon_fixtures import ( NeonEnv, NeonEnvBuilder, PgBin, - PortDistributor, - RemoteStorageKind, VanillaPostgres, wait_for_last_flush_lsn, ) @@ -29,6 +27,8 @@ from fixtures.pageserver.utils import ( wait_until_tenant_active, ) from fixtures.pg_version import PgVersion +from fixtures.port_distributor import PortDistributor +from fixtures.remote_storage import RemoteStorageKind from fixtures.types import TenantId, TimelineId from fixtures.utils import get_timeline_dir_size, wait_until diff --git a/test_runner/regress/test_wal_acceptor.py b/test_runner/regress/test_wal_acceptor.py index 24b32ad7e7..87f076d236 100644 --- a/test_runner/regress/test_wal_acceptor.py +++ b/test_runner/regress/test_wal_acceptor.py @@ -15,22 +15,18 @@ from typing import Any, List, Optional import psycopg2 import pytest +from fixtures.broker import NeonBroker from fixtures.log_helper import log from fixtures.neon_fixtures import ( Endpoint, - NeonBroker, NeonEnv, NeonEnvBuilder, NeonPageserver, PgBin, PgProtocol, - PortDistributor, - RemoteStorageKind, - RemoteStorageUsers, Safekeeper, SafekeeperHttpClient, SafekeeperPort, - available_remote_storages, ) from fixtures.pageserver.utils import ( timeline_delete_wait_completed, @@ -38,6 +34,12 @@ from fixtures.pageserver.utils import ( wait_for_upload, ) from fixtures.pg_version import PgVersion +from fixtures.port_distributor import PortDistributor +from fixtures.remote_storage import ( + RemoteStorageKind, + RemoteStorageUsers, + available_remote_storages, +) from fixtures.types import Lsn, TenantId, TimelineId from fixtures.utils import get_dir_size, query_scalar, start_in_background diff --git a/test_runner/regress/test_wal_restore.py b/test_runner/regress/test_wal_restore.py index f3d3a84c20..c97c69db23 100644 --- a/test_runner/regress/test_wal_restore.py +++ b/test_runner/regress/test_wal_restore.py @@ -5,9 +5,9 @@ import pytest from fixtures.neon_fixtures import ( NeonEnvBuilder, PgBin, - PortDistributor, VanillaPostgres, ) +from fixtures.port_distributor import PortDistributor from fixtures.types import TenantId, TimelineId From e71d8095b934ac007a382844208672a16e9d4702 Mon Sep 17 00:00:00 2001 From: John Spray Date: Thu, 3 Aug 2023 15:23:23 +0100 Subject: [PATCH 17/29] README: make it a bit clearer how to get regression tests running (#4885) ## Problem When setting up for the first time I hit a couple of nits running tests: - It wasn't obvious that `openssl` and `poetry` were needed (poetry is mentioned kind of obliquely via "dependency installation notes" rather than being in the list of rpm/deb packages to install. - It wasn't obvious how to get the tests to run for just particular parameters (e.g. just release mode) ## Summary of changes Add openssl and poetry to the package lists. Add an example of how to run pytest for just a particular build type and postgres version. --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c2452f435..5780608949 100644 --- a/README.md +++ b/README.md @@ -29,13 +29,13 @@ See developer documentation in [SUMMARY.md](/docs/SUMMARY.md) for more informati ```bash apt install build-essential libtool libreadline-dev zlib1g-dev flex bison libseccomp-dev \ libssl-dev clang pkg-config libpq-dev cmake postgresql-client protobuf-compiler \ -libcurl4-openssl-dev +libcurl4-openssl-dev openssl python-poetry ``` * On Fedora, these packages are needed: ```bash dnf install flex bison readline-devel zlib-devel openssl-devel \ libseccomp-devel perl clang cmake postgresql postgresql-contrib protobuf-compiler \ - protobuf-devel libcurl-devel + protobuf-devel libcurl-devel openssl poetry ``` * On Arch based systems, these packages are needed: ```bash @@ -235,6 +235,13 @@ CARGO_BUILD_FLAGS="--features=testing" make ./scripts/pytest ``` +By default, this runs both debug and release modes, and all supported postgres versions. When +testing locally, it is convenient to run just run one set of permutations, like this: + +```sh +DEFAULT_PG_VERSION=15 BUILD_TYPE=release ./scripts/pytest +``` + ## Documentation [docs](/docs) Contains a top-level overview of all available markdown documentation. From a241c8b2a41b076e074c661006f377f2773fe6d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Thu, 3 Aug 2023 17:36:46 +0200 Subject: [PATCH 18/29] Make DiskBtreeReader::{visit, get} async (#4863) ## Problem `DiskBtreeReader::get` and `DiskBtreeReader::visit` both call `read_blk` internally, which we would like to make async in the future. This PR focuses on making the interface of these two functions `async`. There is further work to be done in forms of making `visit` to not be recursive any more, similar to #4838. For that, see https://github.com/neondatabase/neon/pull/4884. Builds on top of https://github.com/neondatabase/neon/pull/4839, part of https://github.com/neondatabase/neon/issues/4743 ## Summary of changes Make `DiskBtreeReader::get` and `DiskBtreeReader::visit` async functions and `await` in the places that call these functions. --- pageserver/ctl/src/layer_map_analyzer.rs | 32 ++-- pageserver/ctl/src/layers.rs | 20 +-- pageserver/src/tenant/disk_btree.rs | 117 ++++++++------- .../src/tenant/storage_layer/delta_layer.rs | 138 ++++++++++-------- .../src/tenant/storage_layer/image_layer.rs | 12 +- 5 files changed, 173 insertions(+), 146 deletions(-) diff --git a/pageserver/ctl/src/layer_map_analyzer.rs b/pageserver/ctl/src/layer_map_analyzer.rs index da83c061c0..9d9a1fa151 100644 --- a/pageserver/ctl/src/layer_map_analyzer.rs +++ b/pageserver/ctl/src/layer_map_analyzer.rs @@ -107,23 +107,25 @@ async fn get_holes(path: &Path, max_holes: usize) -> Result> { // min-heap (reserve space for one more element added before eviction) let mut heap: BinaryHeap = BinaryHeap::with_capacity(max_holes + 1); let mut prev_key: Option = None; - tree_reader.visit( - &[0u8; DELTA_KEY_SIZE], - VisitDirection::Forwards, - |key, _value| { - let curr = Key::from_slice(&key[..KEY_SIZE]); - if let Some(prev) = prev_key { - if curr.to_i128() - prev.to_i128() >= MIN_HOLE_LENGTH { - heap.push(Hole(prev..curr)); - if heap.len() > max_holes { - heap.pop(); // remove smallest hole + tree_reader + .visit( + &[0u8; DELTA_KEY_SIZE], + VisitDirection::Forwards, + |key, _value| { + let curr = Key::from_slice(&key[..KEY_SIZE]); + if let Some(prev) = prev_key { + if curr.to_i128() - prev.to_i128() >= MIN_HOLE_LENGTH { + heap.push(Hole(prev..curr)); + if heap.len() > max_holes { + heap.pop(); // remove smallest hole + } } } - } - prev_key = Some(curr.next()); - true - }, - )?; + prev_key = Some(curr.next()); + true + }, + ) + .await?; let mut holes = heap.into_vec(); holes.sort_by_key(|hole| hole.0.start); Ok(holes) diff --git a/pageserver/ctl/src/layers.rs b/pageserver/ctl/src/layers.rs index 74613eb5f4..e3ddefc661 100644 --- a/pageserver/ctl/src/layers.rs +++ b/pageserver/ctl/src/layers.rs @@ -59,15 +59,17 @@ async fn read_delta_file(path: impl AsRef) -> Result<()> { ); // TODO(chi): dedup w/ `delta_layer.rs` by exposing the API. let mut all = vec![]; - tree_reader.visit( - &[0u8; DELTA_KEY_SIZE], - VisitDirection::Forwards, - |key, value_offset| { - let curr = Key::from_slice(&key[..KEY_SIZE]); - all.push((curr, BlobRef(value_offset))); - true - }, - )?; + tree_reader + .visit( + &[0u8; DELTA_KEY_SIZE], + VisitDirection::Forwards, + |key, value_offset| { + let curr = Key::from_slice(&key[..KEY_SIZE]); + all.push((curr, BlobRef(value_offset))); + true + }, + ) + .await?; let cursor = BlockCursor::new(&file); for (k, v) in all { let value = cursor.read_blob(v.pos())?; diff --git a/pageserver/src/tenant/disk_btree.rs b/pageserver/src/tenant/disk_btree.rs index 518286ddb0..b163d27b42 100644 --- a/pageserver/src/tenant/disk_btree.rs +++ b/pageserver/src/tenant/disk_btree.rs @@ -230,14 +230,15 @@ where /// /// Read the value for given key. Returns the value, or None if it doesn't exist. /// - pub fn get(&self, search_key: &[u8; L]) -> Result> { + pub async fn get(&self, search_key: &[u8; L]) -> Result> { let mut result: Option = None; self.visit(search_key, VisitDirection::Forwards, |key, value| { if key == search_key { result = Some(value); } false - })?; + }) + .await?; Ok(result) } @@ -246,7 +247,7 @@ where /// will be called for every key >= 'search_key' (or <= 'search_key', if scanning /// backwards) /// - pub fn visit( + pub async fn visit( &self, search_key: &[u8; L], dir: VisitDirection, @@ -269,23 +270,9 @@ where V: FnMut(&[u8], u64) -> bool, { // Locate the node. - let blk = self.reader.read_blk(self.start_blk + node_blknum)?; + let node_buf = self.reader.read_blk(self.start_blk + node_blknum)?; - // Search all entries on this node - self.search_node(blk.as_ref(), search_key, dir, visitor) - } - - fn search_node( - &self, - node_buf: &[u8], - search_key: &[u8; L], - dir: VisitDirection, - visitor: &mut V, - ) -> Result - where - V: FnMut(&[u8], u64) -> bool, - { - let node = OnDiskNode::deparse(node_buf)?; + let node = OnDiskNode::deparse(node_buf.as_ref())?; let prefix_len = node.prefix_len as usize; let suffix_len = node.suffix_len as usize; @@ -782,12 +769,12 @@ mod tests { // Test the `get` function on all the keys. for (key, val) in all_data.iter() { - assert_eq!(reader.get(key)?, Some(*val)); + assert_eq!(reader.get(key).await?, Some(*val)); } // And on some keys that don't exist - assert_eq!(reader.get(b"aaaaaa")?, None); - assert_eq!(reader.get(b"zzzzzz")?, None); - assert_eq!(reader.get(b"xaaabx")?, None); + assert_eq!(reader.get(b"aaaaaa").await?, None); + assert_eq!(reader.get(b"zzzzzz").await?, None); + assert_eq!(reader.get(b"xaaabx").await?, None); // Test search with `visit` function let search_key = b"xabaaa"; @@ -798,10 +785,12 @@ mod tests { .collect(); let mut data = Vec::new(); - reader.visit(search_key, VisitDirection::Forwards, |key, value| { - data.push((key.to_vec(), value)); - true - })?; + reader + .visit(search_key, VisitDirection::Forwards, |key, value| { + data.push((key.to_vec(), value)); + true + }) + .await?; assert_eq!(data, expected); // Test a backwards scan @@ -812,16 +801,20 @@ mod tests { .collect(); expected.reverse(); let mut data = Vec::new(); - reader.visit(search_key, VisitDirection::Backwards, |key, value| { - data.push((key.to_vec(), value)); - true - })?; + reader + .visit(search_key, VisitDirection::Backwards, |key, value| { + data.push((key.to_vec(), value)); + true + }) + .await?; assert_eq!(data, expected); // Backward scan where nothing matches - reader.visit(b"aaaaaa", VisitDirection::Backwards, |key, value| { - panic!("found unexpected key {}: {}", hex::encode(key), value); - })?; + reader + .visit(b"aaaaaa", VisitDirection::Backwards, |key, value| { + panic!("found unexpected key {}: {}", hex::encode(key), value); + }) + .await?; // Full scan let expected: Vec<(Vec, u64)> = all_data @@ -829,10 +822,12 @@ mod tests { .map(|(key, value)| (key.to_vec(), *value)) .collect(); let mut data = Vec::new(); - reader.visit(&[0u8; 6], VisitDirection::Forwards, |key, value| { - data.push((key.to_vec(), value)); - true - })?; + reader + .visit(&[0u8; 6], VisitDirection::Forwards, |key, value| { + data.push((key.to_vec(), value)); + true + }) + .await?; assert_eq!(data, expected); Ok(()) @@ -880,13 +875,15 @@ mod tests { for search_key_int in 0..(NUM_KEYS * 2 + 10) { let search_key = u64::to_be_bytes(search_key_int); assert_eq!( - reader.get(&search_key)?, + reader.get(&search_key).await?, all_data.get(&search_key_int).cloned() ); // Test a forward scan starting with this key result.lock().unwrap().clear(); - reader.visit(&search_key, VisitDirection::Forwards, take_ten)?; + reader + .visit(&search_key, VisitDirection::Forwards, take_ten) + .await?; let expected = all_data .range(search_key_int..) .take(10) @@ -896,7 +893,9 @@ mod tests { // And a backwards scan result.lock().unwrap().clear(); - reader.visit(&search_key, VisitDirection::Backwards, take_ten)?; + reader + .visit(&search_key, VisitDirection::Backwards, take_ten) + .await?; let expected = all_data .range(..=search_key_int) .rev() @@ -910,7 +909,9 @@ mod tests { let search_key = u64::to_be_bytes(0); limit.store(usize::MAX, Ordering::Relaxed); result.lock().unwrap().clear(); - reader.visit(&search_key, VisitDirection::Forwards, take_ten)?; + reader + .visit(&search_key, VisitDirection::Forwards, take_ten) + .await?; let expected = all_data .iter() .map(|(&key, &val)| (key, val)) @@ -921,7 +922,9 @@ mod tests { let search_key = u64::to_be_bytes(u64::MAX); limit.store(usize::MAX, Ordering::Relaxed); result.lock().unwrap().clear(); - reader.visit(&search_key, VisitDirection::Backwards, take_ten)?; + reader + .visit(&search_key, VisitDirection::Backwards, take_ten) + .await?; let expected = all_data .iter() .rev() @@ -932,8 +935,8 @@ mod tests { Ok(()) } - #[test] - fn random_data() -> Result<()> { + #[tokio::test] + async fn random_data() -> Result<()> { // Generate random keys with exponential distribution, to // exercise the prefix compression const NUM_KEYS: usize = 100000; @@ -960,19 +963,23 @@ mod tests { // Test get() operation on all the keys for (&key, &val) in all_data.iter() { let search_key = u128::to_be_bytes(key); - assert_eq!(reader.get(&search_key)?, Some(val)); + assert_eq!(reader.get(&search_key).await?, Some(val)); } // Test get() operations on random keys, most of which will not exist for _ in 0..100000 { let key_int = rand::thread_rng().gen::(); let search_key = u128::to_be_bytes(key_int); - assert!(reader.get(&search_key)? == all_data.get(&key_int).cloned()); + assert!(reader.get(&search_key).await? == all_data.get(&key_int).cloned()); } // Test boundary cases - assert!(reader.get(&u128::to_be_bytes(u128::MIN))? == all_data.get(&u128::MIN).cloned()); - assert!(reader.get(&u128::to_be_bytes(u128::MAX))? == all_data.get(&u128::MAX).cloned()); + assert!( + reader.get(&u128::to_be_bytes(u128::MIN)).await? == all_data.get(&u128::MIN).cloned() + ); + assert!( + reader.get(&u128::to_be_bytes(u128::MAX)).await? == all_data.get(&u128::MAX).cloned() + ); Ok(()) } @@ -1014,15 +1021,17 @@ mod tests { // Test get() operation on all the keys for (key, val) in disk_btree_test_data::TEST_DATA { - assert_eq!(reader.get(&key)?, Some(val)); + assert_eq!(reader.get(&key).await?, Some(val)); } // Test full scan let mut count = 0; - reader.visit(&[0u8; 26], VisitDirection::Forwards, |_key, _value| { - count += 1; - true - })?; + reader + .visit(&[0u8; 26], VisitDirection::Forwards, |_key, _value| { + count += 1; + true + }) + .await?; assert_eq!(count, disk_btree_test_data::TEST_DATA.len()); reader.dump().await?; diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index 54fcb6ec5d..70249eb60e 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -281,22 +281,24 @@ impl Layer for DeltaLayer { Ok(desc) }; - tree_reader.visit( - &[0u8; DELTA_KEY_SIZE], - VisitDirection::Forwards, - |delta_key, val| { - let blob_ref = BlobRef(val); - let key = DeltaKey::extract_key_from_buf(delta_key); - let lsn = DeltaKey::extract_lsn_from_buf(delta_key); + tree_reader + .visit( + &[0u8; DELTA_KEY_SIZE], + VisitDirection::Forwards, + |delta_key, val| { + let blob_ref = BlobRef(val); + let key = DeltaKey::extract_key_from_buf(delta_key); + let lsn = DeltaKey::extract_lsn_from_buf(delta_key); - let desc = match dump_blob(blob_ref) { - Ok(desc) => desc, - Err(err) => format!("ERROR: {}", err), - }; - println!(" key {} at {}: {}", key, lsn, desc); - true - }, - )?; + let desc = match dump_blob(blob_ref) { + Ok(desc) => desc, + Err(err) => format!("ERROR: {}", err), + }; + println!(" key {} at {}: {}", key, lsn, desc); + true + }, + ) + .await?; Ok(()) } @@ -328,19 +330,21 @@ impl Layer for DeltaLayer { let mut offsets: Vec<(Lsn, u64)> = Vec::new(); - tree_reader.visit(&search_key.0, VisitDirection::Backwards, |key, value| { - let blob_ref = BlobRef(value); - if key[..KEY_SIZE] != search_key.0[..KEY_SIZE] { - return false; - } - let entry_lsn = DeltaKey::extract_lsn_from_buf(key); - if entry_lsn < lsn_range.start { - return false; - } - offsets.push((entry_lsn, blob_ref.pos())); + tree_reader + .visit(&search_key.0, VisitDirection::Backwards, |key, value| { + let blob_ref = BlobRef(value); + if key[..KEY_SIZE] != search_key.0[..KEY_SIZE] { + return false; + } + let entry_lsn = DeltaKey::extract_lsn_from_buf(key); + if entry_lsn < lsn_range.start { + return false; + } + offsets.push((entry_lsn, blob_ref.pos())); - !blob_ref.will_init() - })?; + !blob_ref.will_init() + }) + .await?; // Ok, 'offsets' now contains the offsets of all the entries we need to read let cursor = file.block_cursor(); @@ -618,7 +622,9 @@ impl DeltaLayer { let inner = self .load(LayerAccessKind::KeyIter, ctx) .context("load delta layer")?; - DeltaLayerInner::load_val_refs(inner).context("Layer index is corrupted") + DeltaLayerInner::load_val_refs(inner) + .await + .context("Layer index is corrupted") } /// Loads all keys stored in the layer. Returns key, lsn and value size. @@ -626,7 +632,9 @@ impl DeltaLayer { let inner = self .load(LayerAccessKind::KeyIter, ctx) .context("load delta layer keys")?; - inner.load_keys().context("Layer index is corrupted") + DeltaLayerInner::load_keys(inner) + .await + .context("Layer index is corrupted") } } @@ -899,7 +907,7 @@ impl Drop for DeltaLayerWriter { } impl DeltaLayerInner { - fn load_val_refs(this: &Arc) -> Result> { + async fn load_val_refs(this: &Arc) -> Result> { let file = &this.file; let tree_reader = DiskBtreeReader::<_, DELTA_KEY_SIZE>::new( this.index_start_blk, @@ -908,23 +916,25 @@ impl DeltaLayerInner { ); let mut all_offsets = Vec::<(Key, Lsn, ValueRef)>::new(); - tree_reader.visit( - &[0u8; DELTA_KEY_SIZE], - VisitDirection::Forwards, - |key, value| { - let delta_key = DeltaKey::from_slice(key); - let val_ref = ValueRef { - blob_ref: BlobRef(value), - reader: BlockCursor::new(Adapter(this.clone())), - }; - all_offsets.push((delta_key.key(), delta_key.lsn(), val_ref)); - true - }, - )?; + tree_reader + .visit( + &[0u8; DELTA_KEY_SIZE], + VisitDirection::Forwards, + |key, value| { + let delta_key = DeltaKey::from_slice(key); + let val_ref = ValueRef { + blob_ref: BlobRef(value), + reader: BlockCursor::new(Adapter(this.clone())), + }; + all_offsets.push((delta_key.key(), delta_key.lsn(), val_ref)); + true + }, + ) + .await?; Ok(all_offsets) } - fn load_keys(&self) -> Result> { + async fn load_keys(&self) -> Result> { let file = &self.file; let tree_reader = DiskBtreeReader::<_, DELTA_KEY_SIZE>::new( self.index_start_blk, @@ -933,26 +943,28 @@ impl DeltaLayerInner { ); let mut all_keys: Vec<(Key, Lsn, u64)> = Vec::new(); - tree_reader.visit( - &[0u8; DELTA_KEY_SIZE], - VisitDirection::Forwards, - |key, value| { - let delta_key = DeltaKey::from_slice(key); - let pos = BlobRef(value).pos(); - if let Some(last) = all_keys.last_mut() { - if last.0 == delta_key.key() { - return true; - } else { - // subtract offset of new key BLOB and first blob of this key - // to get total size if values associated with this key - let first_pos = last.2; - last.2 = pos - first_pos; + tree_reader + .visit( + &[0u8; DELTA_KEY_SIZE], + VisitDirection::Forwards, + |key, value| { + let delta_key = DeltaKey::from_slice(key); + let pos = BlobRef(value).pos(); + if let Some(last) = all_keys.last_mut() { + if last.0 == delta_key.key() { + return true; + } else { + // subtract offset of new key BLOB and first blob of this key + // to get total size if values associated with this key + let first_pos = last.2; + last.2 = pos - first_pos; + } } - } - all_keys.push((delta_key.key(), delta_key.lsn(), pos)); - true - }, - )?; + all_keys.push((delta_key.key(), delta_key.lsn(), pos)); + true + }, + ) + .await?; if let Some(last) = all_keys.last_mut() { // Last key occupies all space till end of layer last.2 = std::fs::metadata(&file.file.path)?.len() - last.2; diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index f3aaed61b9..c92d27a6b8 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -175,10 +175,12 @@ impl Layer for ImageLayer { tree_reader.dump().await?; - tree_reader.visit(&[0u8; KEY_SIZE], VisitDirection::Forwards, |key, value| { - println!("key: {} offset {}", hex::encode(key), value); - true - })?; + tree_reader + .visit(&[0u8; KEY_SIZE], VisitDirection::Forwards, |key, value| { + println!("key: {} offset {}", hex::encode(key), value); + true + }) + .await?; Ok(()) } @@ -202,7 +204,7 @@ impl Layer for ImageLayer { let mut keybuf: [u8; KEY_SIZE] = [0u8; KEY_SIZE]; key.write_to_byte_slice(&mut keybuf); - if let Some(offset) = tree_reader.get(&keybuf)? { + if let Some(offset) = tree_reader.get(&keybuf).await? { let blob = file.block_cursor().read_blob(offset).with_context(|| { format!( "failed to read value from data file {} at offset {}", From 5263b39e2c3937c3de604fa02b93a45d5a31e9b7 Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Thu, 3 Aug 2023 20:34:05 +0300 Subject: [PATCH 19/29] fix: shutdown logging again (#4886) During deploys of 2023-08-03 we logged too much on shutdown. Fix the logging by timing each top level shutdown step, and possibly warn on it taking more than a rough threshold, based on how long I think it possibly should be taking. Also remove all shutdown logging from background tasks since there is already "shutdown is taking a long time" logging. Co-authored-by: John Spray --- pageserver/src/lib.rs | 108 +++++++++++++++++- pageserver/src/tenant/mgr.rs | 94 ++++++++------- pageserver/src/tenant/tasks.rs | 19 --- .../src/tenant/timeline/eviction_task.rs | 3 - test_runner/fixtures/neon_fixtures.py | 1 + 5 files changed, 154 insertions(+), 71 deletions(-) diff --git a/pageserver/src/lib.rs b/pageserver/src/lib.rs index f43651e931..1b1d0acaee 100644 --- a/pageserver/src/lib.rs +++ b/pageserver/src/lib.rs @@ -47,24 +47,50 @@ pub use crate::metrics::preinitialize_metrics; #[tracing::instrument] pub async fn shutdown_pageserver(exit_code: i32) { + use std::time::Duration; // Shut down the libpq endpoint task. This prevents new connections from // being accepted. - task_mgr::shutdown_tasks(Some(TaskKind::LibpqEndpointListener), None, None).await; + timed( + task_mgr::shutdown_tasks(Some(TaskKind::LibpqEndpointListener), None, None), + "shutdown LibpqEndpointListener", + Duration::from_secs(1), + ) + .await; // Shut down any page service tasks. - task_mgr::shutdown_tasks(Some(TaskKind::PageRequestHandler), None, None).await; + timed( + task_mgr::shutdown_tasks(Some(TaskKind::PageRequestHandler), None, None), + "shutdown PageRequestHandlers", + Duration::from_secs(1), + ) + .await; // Shut down all the tenants. This flushes everything to disk and kills // the checkpoint and GC tasks. - tenant::mgr::shutdown_all_tenants().await; + timed( + tenant::mgr::shutdown_all_tenants(), + "shutdown all tenants", + Duration::from_secs(5), + ) + .await; // Shut down the HTTP endpoint last, so that you can still check the server's // status while it's shutting down. // FIXME: We should probably stop accepting commands like attach/detach earlier. - task_mgr::shutdown_tasks(Some(TaskKind::HttpEndpointListener), None, None).await; + timed( + task_mgr::shutdown_tasks(Some(TaskKind::HttpEndpointListener), None, None), + "shutdown http", + Duration::from_secs(1), + ) + .await; // There should be nothing left, but let's be sure - task_mgr::shutdown_tasks(None, None, None).await; + timed( + task_mgr::shutdown_tasks(None, None, None), + "shutdown leftovers", + Duration::from_secs(1), + ) + .await; info!("Shut down successfully completed"); std::process::exit(exit_code); } @@ -172,6 +198,45 @@ pub struct InitializationOrder { pub background_jobs_can_start: utils::completion::Barrier, } +/// Time the future with a warning when it exceeds a threshold. +async fn timed( + fut: Fut, + name: &str, + warn_at: std::time::Duration, +) -> ::Output { + let started = std::time::Instant::now(); + + let mut fut = std::pin::pin!(fut); + + match tokio::time::timeout(warn_at, &mut fut).await { + Ok(ret) => { + tracing::info!( + task = name, + elapsed_ms = started.elapsed().as_millis(), + "completed" + ); + ret + } + Err(_) => { + tracing::info!( + task = name, + elapsed_ms = started.elapsed().as_millis(), + "still waiting, taking longer than expected..." + ); + + let ret = fut.await; + + tracing::warn!( + task = name, + elapsed_ms = started.elapsed().as_millis(), + "completed, took longer than expected" + ); + + ret + } + } +} + #[cfg(test)] mod backoff_defaults_tests { use super::*; @@ -202,3 +267,36 @@ mod backoff_defaults_tests { ); } } + +#[cfg(test)] +mod timed_tests { + use super::timed; + use std::time::Duration; + + #[tokio::test] + async fn timed_completes_when_inner_future_completes() { + // A future that completes on time should have its result returned + let r1 = timed( + async move { + tokio::time::sleep(Duration::from_millis(10)).await; + 123 + }, + "test 1", + Duration::from_millis(50), + ) + .await; + assert_eq!(r1, 123); + + // A future that completes too slowly should also have its result returned + let r1 = timed( + async move { + tokio::time::sleep(Duration::from_millis(50)).await; + 456 + }, + "test 1", + Duration::from_millis(10), + ) + .await; + assert_eq!(r1, 456); + } +} diff --git a/pageserver/src/tenant/mgr.rs b/pageserver/src/tenant/mgr.rs index 25c5e3f2e0..2635953e6d 100644 --- a/pageserver/src/tenant/mgr.rs +++ b/pageserver/src/tenant/mgr.rs @@ -266,71 +266,77 @@ async fn shutdown_all_tenants0(tenants: &tokio::sync::RwLock) { } }; + let started_at = std::time::Instant::now(); let mut join_set = JoinSet::new(); for (tenant_id, tenant) in tenants_to_shut_down { join_set.spawn( async move { - // ordering shouldn't matter for this, either we store true right away or never - let ordering = std::sync::atomic::Ordering::Relaxed; - let joined_other = std::sync::atomic::AtomicBool::new(false); + let freeze_and_flush = true; - let mut shutdown = std::pin::pin!(async { - let freeze_and_flush = true; - - let res = { - let (_guard, shutdown_progress) = completion::channel(); - tenant.shutdown(shutdown_progress, freeze_and_flush).await - }; - - if let Err(other_progress) = res { - // join the another shutdown in progress - joined_other.store(true, ordering); - other_progress.wait().await; - } - }); - - // in practice we might not have a lot time to go, since systemd is going to - // SIGKILL us at 10s, but we can try. delete tenant might take a while, so put out - // a warning. - let warning = std::time::Duration::from_secs(5); - let mut warning = std::pin::pin!(tokio::time::sleep(warning)); - - tokio::select! { - _ = &mut shutdown => {}, - _ = &mut warning => { - let joined_other = joined_other.load(ordering); - warn!(%joined_other, "waiting for the shutdown to complete"); - shutdown.await; - } + let res = { + let (_guard, shutdown_progress) = completion::channel(); + tenant.shutdown(shutdown_progress, freeze_and_flush).await }; + if let Err(other_progress) = res { + // join the another shutdown in progress + other_progress.wait().await; + } + + // we cannot afford per tenant logging here, because if s3 is degraded, we are + // going to log too many lines + debug!("tenant successfully stopped"); } .instrument(info_span!("shutdown", %tenant_id)), ); } + let total = join_set.len(); let mut panicked = 0; + let mut buffering = true; + const BUFFER_FOR: std::time::Duration = std::time::Duration::from_millis(500); + let mut buffered = std::pin::pin!(tokio::time::sleep(BUFFER_FOR)); - while let Some(res) = join_set.join_next().await { - match res { - Ok(()) => {} - Err(join_error) if join_error.is_cancelled() => { - unreachable!("we are not cancelling any of the futures"); - } - Err(join_error) if join_error.is_panic() => { - // cannot really do anything, as this panic is likely a bug - panicked += 1; - } - Err(join_error) => { - warn!("unknown kind of JoinError: {join_error}"); + while !join_set.is_empty() { + tokio::select! { + Some(joined) = join_set.join_next() => { + match joined { + Ok(()) => {} + Err(join_error) if join_error.is_cancelled() => { + unreachable!("we are not cancelling any of the futures"); + } + Err(join_error) if join_error.is_panic() => { + // cannot really do anything, as this panic is likely a bug + panicked += 1; + } + Err(join_error) => { + warn!("unknown kind of JoinError: {join_error}"); + } + } + if !buffering { + // buffer so that every 500ms since the first update (or starting) we'll log + // how far away we are; this is because we will get SIGKILL'd at 10s, and we + // are not able to log *then*. + buffering = true; + buffered.as_mut().reset(tokio::time::Instant::now() + BUFFER_FOR); + } + }, + _ = &mut buffered, if buffering => { + buffering = false; + info!(remaining = join_set.len(), total, elapsed_ms = started_at.elapsed().as_millis(), "waiting for tenants to shutdown"); } } } if panicked > 0 { - warn!(panicked, "observed panicks while shutting down tenants"); + warn!( + panicked, + total, "observed panicks while shutting down tenants" + ); } + + // caller will log how long we took } pub async fn create_tenant( diff --git a/pageserver/src/tenant/tasks.rs b/pageserver/src/tenant/tasks.rs index 6400eb7cbe..c067a84471 100644 --- a/pageserver/src/tenant/tasks.rs +++ b/pageserver/src/tenant/tasks.rs @@ -73,17 +73,13 @@ pub fn start_background_loops( /// async fn compaction_loop(tenant: Arc, cancel: CancellationToken) { let wait_duration = Duration::from_secs(2); - info!("starting"); TENANT_TASK_EVENTS.with_label_values(&["start"]).inc(); async { let ctx = RequestContext::todo_child(TaskKind::Compaction, DownloadBehavior::Download); let mut first = true; loop { - trace!("waking up"); - tokio::select! { _ = cancel.cancelled() => { - info!("received cancellation request"); return; }, tenant_wait_result = wait_for_active_tenant(&tenant) => match tenant_wait_result { @@ -103,11 +99,6 @@ async fn compaction_loop(tenant: Arc, cancel: CancellationToken) { } } - if cancel.is_cancelled() { - info!("received cancellation request"); - break; - } - let started_at = Instant::now(); let sleep_duration = if period == Duration::ZERO { @@ -131,15 +122,12 @@ async fn compaction_loop(tenant: Arc, cancel: CancellationToken) { .await .is_ok() { - info!("received cancellation request during idling"); break; } } } .await; TENANT_TASK_EVENTS.with_label_values(&["stop"]).inc(); - - trace!("compaction loop stopped."); } /// @@ -147,7 +135,6 @@ async fn compaction_loop(tenant: Arc, cancel: CancellationToken) { /// async fn gc_loop(tenant: Arc, cancel: CancellationToken) { let wait_duration = Duration::from_secs(2); - info!("starting"); TENANT_TASK_EVENTS.with_label_values(&["start"]).inc(); async { // GC might require downloading, to find the cutoff LSN that corresponds to the @@ -156,11 +143,8 @@ async fn gc_loop(tenant: Arc, cancel: CancellationToken) { RequestContext::todo_child(TaskKind::GarbageCollector, DownloadBehavior::Download); let mut first = true; loop { - trace!("waking up"); - tokio::select! { _ = cancel.cancelled() => { - info!("received cancellation request"); return; }, tenant_wait_result = wait_for_active_tenant(&tenant) => match tenant_wait_result { @@ -205,14 +189,12 @@ async fn gc_loop(tenant: Arc, cancel: CancellationToken) { .await .is_ok() { - info!("received cancellation request during idling"); break; } } } .await; TENANT_TASK_EVENTS.with_label_values(&["stop"]).inc(); - trace!("GC loop stopped."); } async fn wait_for_active_tenant(tenant: &Arc) -> ControlFlow<()> { @@ -237,7 +219,6 @@ async fn wait_for_active_tenant(tenant: &Arc) -> ControlFlow<()> { } } Err(_sender_dropped_error) => { - info!("Tenant dropped the state updates sender, quitting waiting for tenant and the task loop"); return ControlFlow::Break(()); } } diff --git a/pageserver/src/tenant/timeline/eviction_task.rs b/pageserver/src/tenant/timeline/eviction_task.rs index 354f971e11..3e407dda57 100644 --- a/pageserver/src/tenant/timeline/eviction_task.rs +++ b/pageserver/src/tenant/timeline/eviction_task.rs @@ -78,9 +78,6 @@ impl Timeline { #[instrument(skip_all, fields(tenant_id = %self.tenant_id, timeline_id = %self.timeline_id))] async fn eviction_task(self: Arc, cancel: CancellationToken) { - scopeguard::defer! { - info!("eviction task finishing"); - } use crate::tenant::tasks::random_init_delay; { let policy = self.get_eviction_policy(); diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index ac237cafca..f5d4ca3f20 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -1529,6 +1529,7 @@ class NeonPageserver(PgProtocol): ".*Compaction failed, retrying in .*: queue is in state Stopped.*", # Pageserver timeline deletion should be polled until it gets 404, so ignore it globally ".*Error processing HTTP request: NotFound: Timeline .* was not found", + ".*took more than expected to complete.*", ] def start( From 682dfb3a31ad13fd70b1d05fb099e4f54f93bf4e Mon Sep 17 00:00:00 2001 From: Felix Prasanna <91577249+fprasx@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:26:14 -0400 Subject: [PATCH 20/29] bump vm-builder to v0.15.0-alpha1 (#4895) --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 27bad61639..5030abdf6b 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -794,7 +794,7 @@ jobs: run: shell: sh -eu {0} env: - VM_BUILDER_VERSION: v0.13.1 + VM_BUILDER_VERSION: v0.15.0-alpha1 steps: - name: Checkout From 6a906c68c97faf6ed7bfb5f6c4847aea9c50e491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Fri, 4 Aug 2023 11:35:45 +0200 Subject: [PATCH 21/29] Make {DeltaLayer,ImageLayer}::{load,load_inner} async (#4883) ## Problem The functions `DeltaLayer::load_inner` and `ImageLayer::load_inner` are calling `read_blk` internally, which we would like to turn into an async fn. ## Summary of changes We switch from `once_cell`'s `OnceCell` implementation to the one in `tokio` in order to be able to call an async `get_or_try_init` function. Builds on top of #4839, part of #4743 --- .../src/tenant/storage_layer/delta_layer.rs | 21 ++++++++++++------- .../src/tenant/storage_layer/image_layer.rs | 17 ++++++++++----- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index 70249eb60e..fd002ef398 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -41,7 +41,6 @@ use crate::virtual_file::VirtualFile; use crate::{walrecord, TEMP_FILE_SUFFIX}; use crate::{DELTA_FILE_MAGIC, STORAGE_FORMAT_VERSION}; use anyhow::{bail, ensure, Context, Result}; -use once_cell::sync::OnceCell; use pageserver_api::models::{HistoricLayerInfo, LayerAccessKind}; use rand::{distributions::Alphanumeric, Rng}; use serde::{Deserialize, Serialize}; @@ -52,6 +51,7 @@ use std::ops::Range; use std::os::unix::fs::FileExt; use std::path::{Path, PathBuf}; use std::sync::Arc; +use tokio::sync::OnceCell; use tracing::*; use utils::{ @@ -242,7 +242,7 @@ impl Layer for DeltaLayer { return Ok(()); } - let inner = self.load(LayerAccessKind::Dump, ctx)?; + let inner = self.load(LayerAccessKind::Dump, ctx).await?; println!( "index_start_blk: {}, root {}", @@ -317,7 +317,9 @@ impl Layer for DeltaLayer { { // Open the file and lock the metadata in memory - let inner = self.load(LayerAccessKind::GetValueReconstructData, ctx)?; + let inner = self + .load(LayerAccessKind::GetValueReconstructData, ctx) + .await?; // Scan the page versions backwards, starting from `lsn`. let file = &inner.file; @@ -497,7 +499,7 @@ impl DeltaLayer { /// Open the underlying file and read the metadata into memory, if it's /// not loaded already. /// - fn load( + async fn load( &self, access_kind: LayerAccessKind, ctx: &RequestContext, @@ -507,10 +509,11 @@ impl DeltaLayer { // Quick exit if already loaded self.inner .get_or_try_init(|| self.load_inner()) + .await .with_context(|| format!("Failed to load delta layer {}", self.path().display())) } - fn load_inner(&self) -> Result> { + async fn load_inner(&self) -> Result> { let path = self.path(); let file = VirtualFile::open(&path) @@ -571,7 +574,7 @@ impl DeltaLayer { file_size, ), access_stats, - inner: once_cell::sync::OnceCell::new(), + inner: OnceCell::new(), } } @@ -598,7 +601,7 @@ impl DeltaLayer { metadata.len(), ), access_stats: LayerAccessStats::empty_will_record_residence_event_later(), - inner: once_cell::sync::OnceCell::new(), + inner: OnceCell::new(), }) } @@ -621,6 +624,7 @@ impl DeltaLayer { pub async fn load_val_refs(&self, ctx: &RequestContext) -> Result> { let inner = self .load(LayerAccessKind::KeyIter, ctx) + .await .context("load delta layer")?; DeltaLayerInner::load_val_refs(inner) .await @@ -631,6 +635,7 @@ impl DeltaLayer { pub async fn load_keys(&self, ctx: &RequestContext) -> Result> { let inner = self .load(LayerAccessKind::KeyIter, ctx) + .await .context("load delta layer keys")?; DeltaLayerInner::load_keys(inner) .await @@ -784,7 +789,7 @@ impl DeltaLayerWriterInner { metadata.len(), ), access_stats: LayerAccessStats::empty_will_record_residence_event_later(), - inner: once_cell::sync::OnceCell::new(), + inner: OnceCell::new(), }; // fsync the file diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index c92d27a6b8..6c19d0a871 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -38,7 +38,6 @@ use crate::{IMAGE_FILE_MAGIC, STORAGE_FORMAT_VERSION, TEMP_FILE_SUFFIX}; use anyhow::{bail, ensure, Context, Result}; use bytes::Bytes; use hex; -use once_cell::sync::OnceCell; use pageserver_api::models::{HistoricLayerInfo, LayerAccessKind}; use rand::{distributions::Alphanumeric, Rng}; use serde::{Deserialize, Serialize}; @@ -48,6 +47,7 @@ use std::io::{Seek, SeekFrom}; use std::ops::Range; use std::os::unix::prelude::FileExt; use std::path::{Path, PathBuf}; +use tokio::sync::OnceCell; use tracing::*; use utils::{ @@ -168,7 +168,7 @@ impl Layer for ImageLayer { return Ok(()); } - let inner = self.load(LayerAccessKind::Dump, ctx)?; + let inner = self.load(LayerAccessKind::Dump, ctx).await?; let file = &inner.file; let tree_reader = DiskBtreeReader::<_, KEY_SIZE>::new(inner.index_start_blk, inner.index_root_blk, file); @@ -197,7 +197,9 @@ impl Layer for ImageLayer { assert!(lsn_range.start >= self.lsn); assert!(lsn_range.end >= self.lsn); - let inner = self.load(LayerAccessKind::GetValueReconstructData, ctx)?; + let inner = self + .load(LayerAccessKind::GetValueReconstructData, ctx) + .await?; let file = &inner.file; let tree_reader = DiskBtreeReader::new(inner.index_start_blk, inner.index_root_blk, file); @@ -314,7 +316,11 @@ impl ImageLayer { /// Open the underlying file and read the metadata into memory, if it's /// not loaded already. /// - fn load(&self, access_kind: LayerAccessKind, ctx: &RequestContext) -> Result<&ImageLayerInner> { + async fn load( + &self, + access_kind: LayerAccessKind, + ctx: &RequestContext, + ) -> Result<&ImageLayerInner> { self.access_stats .record_access(access_kind, ctx.task_kind()); loop { @@ -323,11 +329,12 @@ impl ImageLayer { } self.inner .get_or_try_init(|| self.load_inner()) + .await .with_context(|| format!("Failed to load image layer {}", self.path().display()))?; } } - fn load_inner(&self) -> Result { + async fn load_inner(&self) -> Result { let path = self.path(); // Open the file if it's not open already. From 606caa0c5d9263b804b1fd7df0ed81f9cf194909 Mon Sep 17 00:00:00 2001 From: Conrad Ludgate Date: Fri, 4 Aug 2023 10:37:18 +0100 Subject: [PATCH 22/29] proxy: update logs and span data to be consistent and have more info (#4878) ## Problem Pre-requisites for #4852 and #4853 ## Summary of changes 1. Includes the client's IP address (which we already log) with the span info so we can have it on all associated logs. This makes making dashboards based on IP addresses easier. 2. Switch to a consistent error/warning log for errors during connection. This includes error, num_retries, retriable=true/false and a consistent log message that we can grep for. --- proxy/src/auth/backend/classic.rs | 16 +++++++++++----- proxy/src/compute.rs | 17 ++--------------- proxy/src/proxy.rs | 30 +++++++++++++++++------------- 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/proxy/src/auth/backend/classic.rs b/proxy/src/auth/backend/classic.rs index 5ed0f747c2..d8ee1e8b64 100644 --- a/proxy/src/auth/backend/classic.rs +++ b/proxy/src/auth/backend/classic.rs @@ -10,7 +10,7 @@ use crate::{ stream::PqStream, }; use tokio::io::{AsyncRead, AsyncWrite}; -use tracing::info; +use tracing::{error, info, warn}; pub(super) async fn authenticate( api: &impl console::Api, @@ -55,11 +55,17 @@ pub(super) async fn authenticate( let mut num_retries = 0; let mut node = loop { let wake_res = api.wake_compute(extra, creds).await; - match handle_try_wake(wake_res, num_retries)? { - ControlFlow::Continue(_) => num_retries += 1, - ControlFlow::Break(n) => break n, + match handle_try_wake(wake_res, num_retries) { + Err(e) => { + error!(error = ?e, num_retries, retriable = false, "couldn't wake compute node"); + return Err(e.into()); + } + Ok(ControlFlow::Continue(e)) => { + warn!(error = ?e, num_retries, retriable = true, "couldn't wake compute node"); + num_retries += 1; + } + Ok(ControlFlow::Break(n)) => break n, } - info!(num_retries, "retrying wake compute"); }; if let Some(keys) = scram_keys { use tokio_postgres::config::AuthKeys; diff --git a/proxy/src/compute.rs b/proxy/src/compute.rs index b1cf2a8559..e96b79ed92 100644 --- a/proxy/src/compute.rs +++ b/proxy/src/compute.rs @@ -230,7 +230,8 @@ pub struct PostgresConnection { } impl ConnCfg { - async fn do_connect( + /// Connect to a corresponding compute node. + pub async fn connect( &self, allow_self_signed_compute: bool, timeout: Duration, @@ -270,20 +271,6 @@ impl ConnCfg { Ok(connection) } - - /// Connect to a corresponding compute node. - pub async fn connect( - &self, - allow_self_signed_compute: bool, - timeout: Duration, - ) -> Result { - self.do_connect(allow_self_signed_compute, timeout) - .inspect_err(|err| { - // Immediately log the error we have at our disposal. - error!("couldn't connect to compute node: {err}"); - }) - .await - } } /// Retrieve `options` from a startup message, dropping all proxy-secific flags. diff --git a/proxy/src/proxy.rs b/proxy/src/proxy.rs index 5f59957b2d..e6fcf901d9 100644 --- a/proxy/src/proxy.rs +++ b/proxy/src/proxy.rs @@ -23,7 +23,7 @@ use tokio::{ time, }; use tokio_util::sync::CancellationToken; -use tracing::{error, info, warn}; +use tracing::{error, info, info_span, warn, Instrument}; use utils::measured_stream::MeasuredStream; /// Number of times we should retry the `/proxy_wake_compute` http request. @@ -101,21 +101,20 @@ pub async fn task_main( tokio::select! { accept_result = listener.accept() => { let (socket, peer_addr) = accept_result?; - info!("accepted postgres client connection from {peer_addr}"); let session_id = uuid::Uuid::new_v4(); let cancel_map = Arc::clone(&cancel_map); connections.spawn( async move { - info!("spawned a task for {peer_addr}"); + info!("accepted postgres client connection"); socket .set_nodelay(true) .context("failed to set socket option")?; - handle_client(config, &cancel_map, session_id, socket, ClientMode::Tcp) - .await + handle_client(config, &cancel_map, session_id, socket, ClientMode::Tcp).await } + .instrument(info_span!("handle_client", ?session_id, %peer_addr)) .unwrap_or_else(move |e| { // Acknowledge that the task has finished with an error. error!(?session_id, "per-client task finished with an error: {e:#}"); @@ -183,7 +182,6 @@ impl ClientMode { } } -#[tracing::instrument(fields(session_id = ?session_id), skip_all)] pub async fn handle_client( config: &'static ProxyConfig, cancel_map: &CancelMap, @@ -425,11 +423,17 @@ where auth::BackendType::Test(x) => x.wake_compute(), }; - match handle_try_wake(wake_res, num_retries)? { + match handle_try_wake(wake_res, num_retries) { + Err(e) => { + error!(error = ?e, num_retries, retriable = false, "couldn't wake compute node"); + return Err(e.into()); + } // failed to wake up but we can continue to retry - ControlFlow::Continue(_) => {} + Ok(ControlFlow::Continue(e)) => { + warn!(error = ?e, num_retries, retriable = true, "couldn't wake compute node"); + } // successfully woke up a compute node and can break the wakeup loop - ControlFlow::Break(mut node_info) => { + Ok(ControlFlow::Break(mut node_info)) => { node_info.config.reuse_password(&config); mechanism.update_connect_config(&mut node_info.config); break node_info; @@ -440,7 +444,6 @@ where num_retries += 1; time::sleep(wait_duration).await; - info!(num_retries, "retrying wake compute"); }; // now that we have a new node, try connect to it repeatedly. @@ -451,10 +454,12 @@ where match mechanism.connect_once(&node_info, CONNECT_TIMEOUT).await { Ok(res) => return Ok(res), Err(e) => { - error!(error = ?e, "could not connect to compute node"); - if !e.should_retry(num_retries) { + let retriable = e.should_retry(num_retries); + if !retriable { + error!(error = ?e, num_retries, retriable, "couldn't connect to compute node"); return Err(e.into()); } + warn!(error = ?e, num_retries, retriable, "couldn't connect to compute node"); } } @@ -462,7 +467,6 @@ where num_retries += 1; time::sleep(wait_duration).await; - info!(num_retries, "retrying connect_once"); } } From e3e739ee71d3329d0184493be22eac94eb1bfc3b Mon Sep 17 00:00:00 2001 From: John Spray Date: Fri, 4 Aug 2023 17:56:31 +0100 Subject: [PATCH 23/29] pageserver: remove no-op attempt to report fail/failpoint feature (#4879) ## Problem The current output from a prod binary at startup is: ``` git-env:765455bca22700e49c053d47f44f58a6df7c321f failpoints: true, features: [] launch_timestamp: 2023-08-02 10:30:35.545217477 UTC ``` It's confusing to read that line, then read the code and think "if failpoints is true, but not in the features list, what does that mean?". As far as I can tell, the check of `fail/failpoints` is just always false because cargo doesn't expose features across crates like this: the `fail/failpoints` syntax works in the cargo CLI but not from a macro in some crate other than `fail`. ## Summary of changes Remove the lines that try to check `fail/failpoints` from the pageserver entrypoint module. This has no functional impact but makes the code slightly easier to understand when trying to make sense of the line printed on startup. --- pageserver/src/bin/pageserver.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index b247fdf0ab..3569043101 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -38,8 +38,6 @@ const PID_FILE_NAME: &str = "pageserver.pid"; const FEATURES: &[&str] = &[ #[cfg(feature = "testing")] "testing", - #[cfg(feature = "fail/failpoints")] - "fail/failpoints", ]; fn version() -> String { From ea3e1b51ec07a053180c52d89228b7fbf6deae8a Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Fri, 4 Aug 2023 21:01:29 +0300 Subject: [PATCH 24/29] Remote storage metrics (#4892) We don't know how our s3 remote_storage is performing, or if it's blocking the shutdown. Well, for sampling reasons, we will not really know even after this PR. Add metrics: - align remote_storage metrics towards #4813 goals - histogram `remote_storage_s3_request_seconds{request_type=(get_object|put_object|delete_object|list_objects), result=(ok|err|cancelled)}` - histogram `remote_storage_s3_wait_seconds{request_type=(same kinds)}` - counter `remote_storage_s3_cancelled_waits_total{request_type=(same kinds)}` Follow-up work: - After release, remove the old metrics, migrate dashboards Histogram buckets are rough guesses, need to be tuned. In pageserver we have a download timeout of 120s, so I think the 100s bucket is quite nice. --- Cargo.lock | 1 + libs/remote_storage/Cargo.toml | 1 + libs/remote_storage/src/s3_bucket.rs | 310 +++++++++++-------- libs/remote_storage/src/s3_bucket/metrics.rs | 243 +++++++++++++++ test_runner/fixtures/neon_fixtures.py | 2 +- test_runner/regress/test_timeline_delete.py | 17 + 6 files changed, 450 insertions(+), 124 deletions(-) create mode 100644 libs/remote_storage/src/s3_bucket/metrics.rs diff --git a/Cargo.lock b/Cargo.lock index 4d59f400de..c18bddfbcb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3253,6 +3253,7 @@ dependencies = [ "metrics", "once_cell", "pin-project-lite", + "scopeguard", "serde", "serde_json", "tempfile", diff --git a/libs/remote_storage/Cargo.toml b/libs/remote_storage/Cargo.toml index 0877a38dd9..a4adae6146 100644 --- a/libs/remote_storage/Cargo.toml +++ b/libs/remote_storage/Cargo.toml @@ -20,6 +20,7 @@ tokio = { workspace = true, features = ["sync", "fs", "io-util"] } tokio-util.workspace = true toml_edit.workspace = true tracing.workspace = true +scopeguard.workspace = true metrics.workspace = true utils.workspace = true pin-project-lite.workspace = true diff --git a/libs/remote_storage/src/s3_bucket.rs b/libs/remote_storage/src/s3_bucket.rs index 37a6bf23e8..b79d8566bb 100644 --- a/libs/remote_storage/src/s3_bucket.rs +++ b/libs/remote_storage/src/s3_bucket.rs @@ -22,6 +22,7 @@ use aws_sdk_s3::{ }; use aws_smithy_http::body::SdkBody; use hyper::Body; +use scopeguard::ScopeGuard; use tokio::{ io::{self, AsyncRead}, sync::Semaphore, @@ -36,82 +37,9 @@ use crate::{ const MAX_DELETE_OBJECTS_REQUEST_SIZE: usize = 1000; -pub(super) mod metrics { - use metrics::{register_int_counter_vec, IntCounterVec}; - use once_cell::sync::Lazy; +pub(super) mod metrics; - static S3_REQUESTS_COUNT: Lazy = Lazy::new(|| { - register_int_counter_vec!( - "remote_storage_s3_requests_count", - "Number of s3 requests of particular type", - &["request_type"], - ) - .expect("failed to define a metric") - }); - - static S3_REQUESTS_FAIL_COUNT: Lazy = Lazy::new(|| { - register_int_counter_vec!( - "remote_storage_s3_failures_count", - "Number of failed s3 requests of particular type", - &["request_type"], - ) - .expect("failed to define a metric") - }); - - pub fn inc_get_object() { - S3_REQUESTS_COUNT.with_label_values(&["get_object"]).inc(); - } - - pub fn inc_get_object_fail() { - S3_REQUESTS_FAIL_COUNT - .with_label_values(&["get_object"]) - .inc(); - } - - pub fn inc_put_object() { - S3_REQUESTS_COUNT.with_label_values(&["put_object"]).inc(); - } - - pub fn inc_put_object_fail() { - S3_REQUESTS_FAIL_COUNT - .with_label_values(&["put_object"]) - .inc(); - } - - pub fn inc_delete_object() { - S3_REQUESTS_COUNT - .with_label_values(&["delete_object"]) - .inc(); - } - - pub fn inc_delete_objects(count: u64) { - S3_REQUESTS_COUNT - .with_label_values(&["delete_object"]) - .inc_by(count); - } - - pub fn inc_delete_object_fail() { - S3_REQUESTS_FAIL_COUNT - .with_label_values(&["delete_object"]) - .inc(); - } - - pub fn inc_delete_objects_fail(count: u64) { - S3_REQUESTS_FAIL_COUNT - .with_label_values(&["delete_object"]) - .inc_by(count); - } - - pub fn inc_list_objects() { - S3_REQUESTS_COUNT.with_label_values(&["list_objects"]).inc(); - } - - pub fn inc_list_objects_fail() { - S3_REQUESTS_FAIL_COUNT - .with_label_values(&["list_objects"]) - .inc(); - } -} +use self::metrics::{AttemptOutcome, RequestKind}; /// AWS S3 storage. pub struct S3Bucket { @@ -213,17 +141,46 @@ impl S3Bucket { } } - async fn download_object(&self, request: GetObjectRequest) -> Result { + async fn permit(&self, kind: RequestKind) -> tokio::sync::SemaphorePermit<'_> { + let started_at = start_counting_cancelled_wait(kind); + let permit = self + .concurrency_limiter + .acquire() + .await + .expect("semaphore is never closed"); + + let started_at = ScopeGuard::into_inner(started_at); + metrics::BUCKET_METRICS + .wait_seconds + .observe_elapsed(kind, started_at); + + permit + } + + async fn owned_permit(&self, kind: RequestKind) -> tokio::sync::OwnedSemaphorePermit { + let started_at = start_counting_cancelled_wait(kind); let permit = self .concurrency_limiter .clone() .acquire_owned() .await - .context("Concurrency limiter semaphore got closed during S3 download") - .map_err(DownloadError::Other)?; + .expect("semaphore is never closed"); + + let started_at = ScopeGuard::into_inner(started_at); + metrics::BUCKET_METRICS + .wait_seconds + .observe_elapsed(kind, started_at); + permit + } + + async fn download_object(&self, request: GetObjectRequest) -> Result { + let kind = RequestKind::Get; + let permit = self.owned_permit(kind).await; metrics::inc_get_object(); + let started_at = start_measuring_requests(kind); + let get_object = self .client .get_object() @@ -233,26 +190,34 @@ impl S3Bucket { .send() .await; + let started_at = ScopeGuard::into_inner(started_at); + + if get_object.is_err() { + metrics::inc_get_object_fail(); + metrics::BUCKET_METRICS.req_seconds.observe_elapsed( + kind, + AttemptOutcome::Err, + started_at, + ); + } + match get_object { Ok(object_output) => { let metadata = object_output.metadata().cloned().map(StorageMetadata); Ok(Download { metadata, - download_stream: Box::pin(io::BufReader::new(RatelimitedAsyncRead::new( - permit, - object_output.body.into_async_read(), + download_stream: Box::pin(io::BufReader::new(TimedDownload::new( + started_at, + RatelimitedAsyncRead::new(permit, object_output.body.into_async_read()), ))), }) } Err(SdkError::ServiceError(e)) if matches!(e.err(), GetObjectError::NoSuchKey(_)) => { Err(DownloadError::NotFound) } - Err(e) => { - metrics::inc_get_object_fail(); - Err(DownloadError::Other(anyhow::anyhow!( - "Failed to download S3 object: {e}" - ))) - } + Err(e) => Err(DownloadError::Other( + anyhow::Error::new(e).context("download s3 object"), + )), } } } @@ -283,6 +248,54 @@ impl AsyncRead for RatelimitedAsyncRead { } } +pin_project_lite::pin_project! { + /// Times and tracks the outcome of the request. + struct TimedDownload { + started_at: std::time::Instant, + outcome: metrics::AttemptOutcome, + #[pin] + inner: S + } + + impl PinnedDrop for TimedDownload { + fn drop(mut this: Pin<&mut Self>) { + metrics::BUCKET_METRICS.req_seconds.observe_elapsed(RequestKind::Get, this.outcome, this.started_at); + } + } +} + +impl TimedDownload { + fn new(started_at: std::time::Instant, inner: S) -> Self { + TimedDownload { + started_at, + outcome: metrics::AttemptOutcome::Cancelled, + inner, + } + } +} + +impl AsyncRead for TimedDownload { + fn poll_read( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &mut io::ReadBuf<'_>, + ) -> std::task::Poll> { + let this = self.project(); + let before = buf.filled().len(); + let read = std::task::ready!(this.inner.poll_read(cx, buf)); + + let read_eof = buf.filled().len() == before; + + match read { + Ok(()) if read_eof => *this.outcome = AttemptOutcome::Ok, + Ok(()) => { /* still in progress */ } + Err(_) => *this.outcome = AttemptOutcome::Err, + } + + std::task::Poll::Ready(read) + } +} + #[async_trait::async_trait] impl RemoteStorage for S3Bucket { /// See the doc for `RemoteStorage::list_prefixes` @@ -291,6 +304,8 @@ impl RemoteStorage for S3Bucket { &self, prefix: Option<&RemotePath>, ) -> Result, DownloadError> { + let kind = RequestKind::List; + // get the passed prefix or if it is not set use prefix_in_bucket value let list_prefix = prefix .map(|p| self.relative_path_to_s3_object(p)) @@ -307,15 +322,11 @@ impl RemoteStorage for S3Bucket { let mut document_keys = Vec::new(); let mut continuation_token = None; - loop { - let _guard = self - .concurrency_limiter - .acquire() - .await - .context("Concurrency limiter semaphore got closed during S3 list") - .map_err(DownloadError::Other)?; + loop { + let _guard = self.permit(kind).await; metrics::inc_list_objects(); + let started_at = start_measuring_requests(kind); let fetch_response = self .client @@ -332,7 +343,15 @@ impl RemoteStorage for S3Bucket { e }) .context("Failed to list S3 prefixes") - .map_err(DownloadError::Other)?; + .map_err(DownloadError::Other); + + let started_at = ScopeGuard::into_inner(started_at); + + metrics::BUCKET_METRICS + .req_seconds + .observe_elapsed(kind, &fetch_response, started_at); + + let fetch_response = fetch_response?; document_keys.extend( fetch_response @@ -342,10 +361,10 @@ impl RemoteStorage for S3Bucket { .filter_map(|o| Some(self.s3_object_to_relative_path(o.prefix()?))), ); - match fetch_response.next_continuation_token { - Some(new_token) => continuation_token = Some(new_token), + continuation_token = match fetch_response.next_continuation_token { + Some(new_token) => Some(new_token), None => break, - } + }; } Ok(document_keys) @@ -353,6 +372,8 @@ impl RemoteStorage for S3Bucket { /// See the doc for `RemoteStorage::list_files` async fn list_files(&self, folder: Option<&RemotePath>) -> anyhow::Result> { + let kind = RequestKind::List; + let folder_name = folder .map(|p| self.relative_path_to_s3_object(p)) .or_else(|| self.prefix_in_bucket.clone()); @@ -361,12 +382,9 @@ impl RemoteStorage for S3Bucket { let mut continuation_token = None; let mut all_files = vec![]; loop { - let _guard = self - .concurrency_limiter - .acquire() - .await - .context("Concurrency limiter semaphore got closed during S3 list_files")?; + let _guard = self.permit(kind).await; metrics::inc_list_objects(); + let started_at = start_measuring_requests(kind); let response = self .client @@ -381,7 +399,14 @@ impl RemoteStorage for S3Bucket { metrics::inc_list_objects_fail(); e }) - .context("Failed to list files in S3 bucket")?; + .context("Failed to list files in S3 bucket"); + + let started_at = ScopeGuard::into_inner(started_at); + metrics::BUCKET_METRICS + .req_seconds + .observe_elapsed(kind, &response, started_at); + + let response = response?; for object in response.contents().unwrap_or_default() { let object_path = object.key().expect("response does not contain a key"); @@ -403,18 +428,17 @@ impl RemoteStorage for S3Bucket { to: &RemotePath, metadata: Option, ) -> anyhow::Result<()> { - let _guard = self - .concurrency_limiter - .acquire() - .await - .context("Concurrency limiter semaphore got closed during S3 upload")?; + let kind = RequestKind::Put; + let _guard = self.permit(kind).await; metrics::inc_put_object(); + let started_at = start_measuring_requests(kind); let body = Body::wrap_stream(ReaderStream::new(from)); let bytes_stream = ByteStream::new(SdkBody::from(body)); - self.client + let res = self + .client .put_object() .bucket(self.bucket_name.clone()) .key(self.relative_path_to_s3_object(to)) @@ -426,7 +450,15 @@ impl RemoteStorage for S3Bucket { .map_err(|e| { metrics::inc_put_object_fail(); e - })?; + }); + + let started_at = ScopeGuard::into_inner(started_at); + metrics::BUCKET_METRICS + .req_seconds + .observe_elapsed(kind, &res, started_at); + + res?; + Ok(()) } @@ -463,11 +495,8 @@ impl RemoteStorage for S3Bucket { .await } async fn delete_objects<'a>(&self, paths: &'a [RemotePath]) -> anyhow::Result<()> { - let _guard = self - .concurrency_limiter - .acquire() - .await - .context("Concurrency limiter semaphore got closed during S3 delete")?; + let kind = RequestKind::Delete; + let _guard = self.permit(kind).await; let mut delete_objects = Vec::with_capacity(paths.len()); for path in paths { @@ -479,6 +508,7 @@ impl RemoteStorage for S3Bucket { for chunk in delete_objects.chunks(MAX_DELETE_OBJECTS_REQUEST_SIZE) { metrics::inc_delete_objects(chunk.len() as u64); + let started_at = start_measuring_requests(kind); let resp = self .client @@ -488,6 +518,11 @@ impl RemoteStorage for S3Bucket { .send() .await; + let started_at = ScopeGuard::into_inner(started_at); + metrics::BUCKET_METRICS + .req_seconds + .observe_elapsed(kind, &resp, started_at); + match resp { Ok(resp) => { if let Some(errors) = resp.errors { @@ -508,15 +543,14 @@ impl RemoteStorage for S3Bucket { } async fn delete(&self, path: &RemotePath) -> anyhow::Result<()> { - let _guard = self - .concurrency_limiter - .acquire() - .await - .context("Concurrency limiter semaphore got closed during S3 delete")?; + let kind = RequestKind::Delete; + let _guard = self.permit(kind).await; metrics::inc_delete_object(); + let started_at = start_measuring_requests(kind); - self.client + let res = self + .client .delete_object() .bucket(self.bucket_name.clone()) .key(self.relative_path_to_s3_object(path)) @@ -525,11 +559,41 @@ impl RemoteStorage for S3Bucket { .map_err(|e| { metrics::inc_delete_object_fail(); e - })?; + }); + + let started_at = ScopeGuard::into_inner(started_at); + metrics::BUCKET_METRICS + .req_seconds + .observe_elapsed(kind, &res, started_at); + + res?; + Ok(()) } } +/// On drop (cancellation) count towards [`metrics::BucketMetrics::cancelled_waits`]. +fn start_counting_cancelled_wait( + kind: RequestKind, +) -> ScopeGuard { + scopeguard::guard_on_success(std::time::Instant::now(), move |_| { + metrics::BUCKET_METRICS.cancelled_waits.get(kind).inc() + }) +} + +/// On drop (cancellation) add time to [`metrics::BucketMetrics::req_seconds`]. +fn start_measuring_requests( + kind: RequestKind, +) -> ScopeGuard { + scopeguard::guard_on_success(std::time::Instant::now(), move |started_at| { + metrics::BUCKET_METRICS.req_seconds.observe_elapsed( + kind, + AttemptOutcome::Cancelled, + started_at, + ) + }) +} + #[cfg(test)] mod tests { use std::num::NonZeroUsize; diff --git a/libs/remote_storage/src/s3_bucket/metrics.rs b/libs/remote_storage/src/s3_bucket/metrics.rs new file mode 100644 index 0000000000..4b7562867a --- /dev/null +++ b/libs/remote_storage/src/s3_bucket/metrics.rs @@ -0,0 +1,243 @@ +use metrics::{register_histogram_vec, register_int_counter_vec, Histogram, IntCounter}; +use once_cell::sync::Lazy; + +pub(super) static BUCKET_METRICS: Lazy = Lazy::new(Default::default); + +#[derive(Clone, Copy, Debug)] +pub(super) enum RequestKind { + Get = 0, + Put = 1, + Delete = 2, + List = 3, +} + +use RequestKind::*; + +impl RequestKind { + const fn as_str(&self) -> &'static str { + match self { + Get => "get_object", + Put => "put_object", + Delete => "delete_object", + List => "list_objects", + } + } + const fn as_index(&self) -> usize { + *self as usize + } +} + +pub(super) struct RequestTyped([C; 4]); + +impl RequestTyped { + pub(super) fn get(&self, kind: RequestKind) -> &C { + &self.0[kind.as_index()] + } + + fn build_with(mut f: impl FnMut(RequestKind) -> C) -> Self { + use RequestKind::*; + let mut it = [Get, Put, Delete, List].into_iter(); + let arr = std::array::from_fn::(|index| { + let next = it.next().unwrap(); + assert_eq!(index, next.as_index()); + f(next) + }); + + if let Some(next) = it.next() { + panic!("unexpected {next:?}"); + } + + RequestTyped(arr) + } +} + +impl RequestTyped { + pub(super) fn observe_elapsed(&self, kind: RequestKind, started_at: std::time::Instant) { + self.get(kind).observe(started_at.elapsed().as_secs_f64()) + } +} + +pub(super) struct PassFailCancelledRequestTyped { + success: RequestTyped, + fail: RequestTyped, + cancelled: RequestTyped, +} + +#[derive(Debug, Clone, Copy)] +pub(super) enum AttemptOutcome { + Ok, + Err, + Cancelled, +} + +impl From<&Result> for AttemptOutcome { + fn from(value: &Result) -> Self { + match value { + Ok(_) => AttemptOutcome::Ok, + Err(_) => AttemptOutcome::Err, + } + } +} + +impl AttemptOutcome { + pub(super) fn as_str(&self) -> &'static str { + match self { + AttemptOutcome::Ok => "ok", + AttemptOutcome::Err => "err", + AttemptOutcome::Cancelled => "cancelled", + } + } +} + +impl PassFailCancelledRequestTyped { + pub(super) fn get(&self, kind: RequestKind, outcome: AttemptOutcome) -> &C { + let target = match outcome { + AttemptOutcome::Ok => &self.success, + AttemptOutcome::Err => &self.fail, + AttemptOutcome::Cancelled => &self.cancelled, + }; + target.get(kind) + } + + fn build_with(mut f: impl FnMut(RequestKind, AttemptOutcome) -> C) -> Self { + let success = RequestTyped::build_with(|kind| f(kind, AttemptOutcome::Ok)); + let fail = RequestTyped::build_with(|kind| f(kind, AttemptOutcome::Err)); + let cancelled = RequestTyped::build_with(|kind| f(kind, AttemptOutcome::Cancelled)); + + PassFailCancelledRequestTyped { + success, + fail, + cancelled, + } + } +} + +impl PassFailCancelledRequestTyped { + pub(super) fn observe_elapsed( + &self, + kind: RequestKind, + outcome: impl Into, + started_at: std::time::Instant, + ) { + self.get(kind, outcome.into()) + .observe(started_at.elapsed().as_secs_f64()) + } +} + +pub(super) struct BucketMetrics { + /// Total requests attempted + // TODO: remove after next release and migrate dashboards to `sum by (result) (remote_storage_s3_requests_count)` + requests: RequestTyped, + /// Subset of attempted requests failed + // TODO: remove after next release and migrate dashboards to `remote_storage_s3_requests_count{result="err"}` + failed: RequestTyped, + + pub(super) req_seconds: PassFailCancelledRequestTyped, + pub(super) wait_seconds: RequestTyped, + + /// Track how many semaphore awaits were cancelled per request type. + /// + /// This is in case cancellations are happening more than expected. + pub(super) cancelled_waits: RequestTyped, +} + +impl Default for BucketMetrics { + fn default() -> Self { + let requests = register_int_counter_vec!( + "remote_storage_s3_requests_count", + "Number of s3 requests of particular type", + &["request_type"], + ) + .expect("failed to define a metric"); + let requests = + RequestTyped::build_with(|kind| requests.with_label_values(&[kind.as_str()])); + + let failed = register_int_counter_vec!( + "remote_storage_s3_failures_count", + "Number of failed s3 requests of particular type", + &["request_type"], + ) + .expect("failed to define a metric"); + let failed = RequestTyped::build_with(|kind| failed.with_label_values(&[kind.as_str()])); + + let buckets = [0.01, 0.10, 0.5, 1.0, 5.0, 10.0, 50.0, 100.0]; + + let req_seconds = register_histogram_vec!( + "remote_storage_s3_request_seconds", + "Seconds to complete a request", + &["request_type", "result"], + buckets.to_vec(), + ) + .unwrap(); + let req_seconds = PassFailCancelledRequestTyped::build_with(|kind, outcome| { + req_seconds.with_label_values(&[kind.as_str(), outcome.as_str()]) + }); + + let wait_seconds = register_histogram_vec!( + "remote_storage_s3_wait_seconds", + "Seconds rate limited", + &["request_type"], + buckets.to_vec(), + ) + .unwrap(); + let wait_seconds = + RequestTyped::build_with(|kind| wait_seconds.with_label_values(&[kind.as_str()])); + + let cancelled_waits = register_int_counter_vec!( + "remote_storage_s3_cancelled_waits_total", + "Times a semaphore wait has been cancelled per request type", + &["request_type"], + ) + .unwrap(); + let cancelled_waits = + RequestTyped::build_with(|kind| cancelled_waits.with_label_values(&[kind.as_str()])); + + Self { + requests, + failed, + req_seconds, + wait_seconds, + cancelled_waits, + } + } +} + +pub fn inc_get_object() { + BUCKET_METRICS.requests.get(Get).inc() +} + +pub fn inc_get_object_fail() { + BUCKET_METRICS.failed.get(Get).inc() +} + +pub fn inc_put_object() { + BUCKET_METRICS.requests.get(Put).inc() +} + +pub fn inc_put_object_fail() { + BUCKET_METRICS.failed.get(Put).inc() +} + +pub fn inc_delete_object() { + BUCKET_METRICS.requests.get(Delete).inc() +} + +pub fn inc_delete_objects(count: u64) { + BUCKET_METRICS.requests.get(Delete).inc_by(count) +} + +pub fn inc_delete_object_fail() { + BUCKET_METRICS.failed.get(Delete).inc() +} + +pub fn inc_delete_objects_fail(count: u64) { + BUCKET_METRICS.failed.get(Delete).inc_by(count) +} + +pub fn inc_list_objects() { + BUCKET_METRICS.requests.get(List).inc() +} + +pub fn inc_list_objects_fail() { + BUCKET_METRICS.failed.get(List).inc() +} diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index f5d4ca3f20..2d6ac6e29f 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -476,7 +476,7 @@ class NeonEnvBuilder: # Prepare the default branch to start the postgres on later. # Pageserver itself does not create tenants and timelines, until started first and asked via HTTP API. - log.info( + log.debug( f"Services started, creating initial tenant {env.initial_tenant} and its initial timeline" ) initial_tenant, initial_timeline = env.neon_cli.create_tenant( diff --git a/test_runner/regress/test_timeline_delete.py b/test_runner/regress/test_timeline_delete.py index ca737ac02d..1e8dd36206 100644 --- a/test_runner/regress/test_timeline_delete.py +++ b/test_runner/regress/test_timeline_delete.py @@ -272,6 +272,23 @@ def test_delete_timeline_exercise_crash_safety_failpoints( wait_timeline_detail_404( ps_http, env.initial_tenant, timeline_id, iterations=iterations ) + + if failpoint == "timeline-delete-after-index-delete": + m = ps_http.get_metrics() + assert ( + m.query_one( + "remote_storage_s3_request_seconds_count", + filter={"request_type": "get_object", "result": "err"}, + ).value + == 1 + ) + assert ( + m.query_one( + "remote_storage_s3_request_seconds_count", + filter={"request_type": "get_object", "result": "ok"}, + ).value + == 1 + ) elif check is Check.RETRY_WITHOUT_RESTART: # this should succeed # this also checks that delete can be retried even when timeline is in Broken state From ba9df27e78b501b679d2ae9000b7f355d91017de Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Fri, 4 Aug 2023 21:03:17 +0300 Subject: [PATCH 25/29] fix: silence not found error when removing ephmeral (#4900) We currently cannot drop tenant before removing it's directory, or use Tenant::drop for this. This creates unnecessary or inactionable warnings during detach at least. Silence the most typical, file not found. Log remaining at `error!`. Cc: #2442 --- pageserver/src/tenant/ephemeral_file.rs | 16 +++++++++++----- test_runner/fixtures/neon_fixtures.py | 3 --- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pageserver/src/tenant/ephemeral_file.rs b/pageserver/src/tenant/ephemeral_file.rs index 8d42150824..b088a3b602 100644 --- a/pageserver/src/tenant/ephemeral_file.rs +++ b/pageserver/src/tenant/ephemeral_file.rs @@ -266,11 +266,17 @@ impl Drop for EphemeralFile { // unlink the file let res = std::fs::remove_file(&self.file.path); if let Err(e) = res { - warn!( - "could not remove ephemeral file '{}': {}", - self.file.path.display(), - e - ); + if e.kind() != std::io::ErrorKind::NotFound { + // just never log the not found errors, we cannot do anything for them; on detach + // the tenant directory is already gone. + // + // not found files might also be related to https://github.com/neondatabase/neon/issues/2442 + error!( + "could not remove ephemeral file '{}': {}", + self.file.path.display(), + e + ); + } } } } diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index 2d6ac6e29f..79c1bb055b 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -1504,9 +1504,6 @@ class NeonPageserver(PgProtocol): ".*Error processing HTTP request: Forbidden", # intentional failpoints ".*failpoint ", - # FIXME: there is a race condition between GC and detach, see - # https://github.com/neondatabase/neon/issues/2442 - ".*could not remove ephemeral file.*No such file or directory.*", # FIXME: These need investigation ".*manual_gc.*is_shutdown_requested\\(\\) called in an unexpected task or thread.*", ".*tenant_list: timeline is not found in remote index while it is present in the tenants registry.*", From 95ec42f2b8e4bbc12e3c3469911dab94617ce3a3 Mon Sep 17 00:00:00 2001 From: MMeent Date: Sun, 6 Aug 2023 20:37:09 +0200 Subject: [PATCH 26/29] Change log levels on various operations (#4914) Cache changes are now DEBUG2 Logs that indicate disabled caches now explicitly call out that the file cache is disabled on WARNING level instead of LOG/INFO --- pgxn/neon/file_cache.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pgxn/neon/file_cache.c b/pgxn/neon/file_cache.c index 02795bc8b8..262814c818 100644 --- a/pgxn/neon/file_cache.c +++ b/pgxn/neon/file_cache.c @@ -172,7 +172,7 @@ lfc_change_limit_hook(int newval, void *extra) { lfc_desc = BasicOpenFile(lfc_path, O_RDWR|O_CREAT); if (lfc_desc < 0) { - elog(LOG, "Failed to open file cache %s: %m", lfc_path); + elog(WARNING, "Failed to open file cache %s: %m, disabling file cache", lfc_path); lfc_size_limit = 0; /* disable file cache */ return; } @@ -557,7 +557,7 @@ lfc_write(RelFileNode rnode, ForkNumber forkNum, BlockNumber blkno, Assert(victim->access_count == 0); entry->offset = victim->offset; /* grab victim's chunk */ hash_search(lfc_hash, &victim->key, HASH_REMOVE, NULL); - elog(LOG, "Swap file cache page"); + elog(DEBUG2, "Swap file cache page"); } else { @@ -574,7 +574,7 @@ lfc_write(RelFileNode rnode, ForkNumber forkNum, BlockNumber blkno, { lfc_desc = BasicOpenFile(lfc_path, O_RDWR|O_CREAT); if (lfc_desc < 0) { - elog(LOG, "Failed to open file cache %s: %m", lfc_path); + elog(WARNING, "Failed to open file cache %s: %m, disabling file cache", lfc_path); lfc_size_limit = 0; /* disable file cache */ } } @@ -583,7 +583,7 @@ lfc_write(RelFileNode rnode, ForkNumber forkNum, BlockNumber blkno, rc = pwrite(lfc_desc, buffer, BLCKSZ, ((off_t)entry->offset*BLOCKS_PER_CHUNK + chunk_offs)*BLCKSZ); if (rc != BLCKSZ) { - elog(INFO, "Failed to write file cache: %m"); + elog(WARNING, "Failed to write file cache: %m, disabling file cache"); lfc_size_limit = 0; /* disable file cache */ } } From 64a4fb35c93d3d59ff48e9b049f46da713b67fc0 Mon Sep 17 00:00:00 2001 From: John Spray Date: Mon, 7 Aug 2023 08:24:50 +0100 Subject: [PATCH 27/29] pagectl: skip `metadata` file in `pagectl draw-timeline` (#4872) ## Problem Running `pagectl draw-timeline` on a pageserver directory wasn't working out of the box because it trips up on the `metadata` file. ## Summary of changes Just ignore the `metadata` file in the list of input files passed to `draw-timeline`. --- pageserver/ctl/src/draw_timeline_dir.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pageserver/ctl/src/draw_timeline_dir.rs b/pageserver/ctl/src/draw_timeline_dir.rs index 568078808f..0e77ef0563 100644 --- a/pageserver/ctl/src/draw_timeline_dir.rs +++ b/pageserver/ctl/src/draw_timeline_dir.rs @@ -23,6 +23,7 @@ //! use anyhow::Result; use pageserver::repository::Key; +use pageserver::METADATA_FILE_NAME; use std::cmp::Ordering; use std::io::{self, BufRead}; use std::path::PathBuf; @@ -71,6 +72,10 @@ pub fn main() -> Result<()> { let line = PathBuf::from_str(&line).unwrap(); let filename = line.file_name().unwrap(); let filename = filename.to_str().unwrap(); + if filename == METADATA_FILE_NAME { + // Don't try and parse "metadata" like a key-lsn range + continue; + } let range = parse_filename(filename); ranges.push(range); } From 9559ef6f3bcc4262cd5463b040229cd30f8de95c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Mon, 7 Aug 2023 17:14:15 +0200 Subject: [PATCH 28/29] Sort by (key, lsn), not just key (#4918) ## Problem PR #4839 didn't output the keys/values in lsn order, but for a given key, the lsns were kept in incoming file order. I think the ordering by lsn is expected. ## Summary of changes We now also sort by `(key, lsn)`, like we did before #4839. --- pageserver/src/tenant/timeline.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index 1e4e7dde20..0e715998ab 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -3534,7 +3534,7 @@ impl Timeline { } // The current stdlib sorting implementation is designed in a way where it is // particularly fast where the slice is made up of sorted sub-ranges. - all_value_refs.sort_by_key(|(key, _lsn, _value_ref)| *key); + all_value_refs.sort_by_key(|(key, lsn, _value_ref)| (*key, *lsn)); let mut all_keys = Vec::new(); for l in deltas_to_compact.iter() { @@ -3550,7 +3550,7 @@ impl Timeline { } // The current stdlib sorting implementation is designed in a way where it is // particularly fast where the slice is made up of sorted sub-ranges. - all_keys.sort_by_key(|(key, _lsn, _size)| *key); + all_keys.sort_by_key(|(key, lsn, _size)| (*key, *lsn)); for (next_key, _next_lsn, _size) in all_keys.iter() { let next_key = *next_key; From 33cb1e9c0ce01d1fd1544a85bc6139b8d7cdfe81 Mon Sep 17 00:00:00 2001 From: John Spray Date: Tue, 8 Aug 2023 09:16:21 +0100 Subject: [PATCH 29/29] tests: enable higher concurrency and adjust tests with outlier runtime (#4904) ## Problem I spent a few minutes seeing how fast I could get our regression test suite to run on my workstation, for when I want to run a "did I break anything?" smoke test before pushing to CI. - Test runtime was dominated by a couple of tests that run for longer than all the others take together - Test concurrency was limited to <16 by the ports-per-worker setting There's no "right answer" for how long a test should be, but as a rule of thumb, no one test should run for much longer than the time it takes to run all the other tests together. ## Summary of changes - Make the ports per worker setting dynamic depending on worker count - Modify the longest running tests to run for a shorter time (`test_duplicate_layers` which uses a pgbench runtime) or fewer iterations (`test_restarts_frequent_checkpoints`). --- test_runner/fixtures/neon_fixtures.py | 28 +++++++------------ test_runner/regress/test_duplicate_layers.py | 2 +- .../regress/test_wal_acceptor_async.py | 2 +- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index 79c1bb055b..cdda8c414e 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -86,19 +86,6 @@ DEFAULT_OUTPUT_DIR: str = "test_output" DEFAULT_BRANCH_NAME: str = "main" BASE_PORT: int = 15000 -WORKER_PORT_NUM: int = 1000 - - -def pytest_configure(config: Config): - """ - Check that we do not overflow available ports range. - """ - - numprocesses = config.getoption("numprocesses") - if ( - numprocesses is not None and BASE_PORT + numprocesses * WORKER_PORT_NUM > 32768 - ): # do not use ephemeral ports - raise Exception("Too many workers configured. Cannot distribute ports for services.") @pytest.fixture(scope="session") @@ -200,6 +187,11 @@ def shareable_scope(fixture_name: str, config: Config) -> Literal["session", "fu return scope +@pytest.fixture(scope="session") +def worker_port_num(): + return (32768 - BASE_PORT) // int(os.environ.get("PYTEST_XDIST_WORKER_COUNT", "1")) + + @pytest.fixture(scope="session") def worker_seq_no(worker_id: str) -> int: # worker_id is a pytest-xdist fixture @@ -212,10 +204,10 @@ def worker_seq_no(worker_id: str) -> int: @pytest.fixture(scope="session") -def worker_base_port(worker_seq_no: int) -> int: - # so we divide ports in ranges of 100 ports +def worker_base_port(worker_seq_no: int, worker_port_num: int) -> int: + # so we divide ports in ranges of ports # so workers have disjoint set of ports for services - return BASE_PORT + worker_seq_no * WORKER_PORT_NUM + return BASE_PORT + worker_seq_no * worker_port_num def get_dir_size(path: str) -> int: @@ -229,8 +221,8 @@ def get_dir_size(path: str) -> int: @pytest.fixture(scope="session") -def port_distributor(worker_base_port: int) -> PortDistributor: - return PortDistributor(base_port=worker_base_port, port_number=WORKER_PORT_NUM) +def port_distributor(worker_base_port: int, worker_port_num: int) -> PortDistributor: + return PortDistributor(base_port=worker_base_port, port_number=worker_port_num) @pytest.fixture(scope="session") diff --git a/test_runner/regress/test_duplicate_layers.py b/test_runner/regress/test_duplicate_layers.py index c1832a2063..7f76a8e042 100644 --- a/test_runner/regress/test_duplicate_layers.py +++ b/test_runner/regress/test_duplicate_layers.py @@ -33,4 +33,4 @@ def test_duplicate_layers(neon_env_builder: NeonEnvBuilder, pg_bin: PgBin): time.sleep(10) # let compaction to be performed assert env.pageserver.log_contains("compact-level0-phase1-return-same") - pg_bin.run_capture(["pgbench", "-P1", "-N", "-c5", "-T500", "-Mprepared", connstr]) + pg_bin.run_capture(["pgbench", "-P1", "-N", "-c5", "-T200", "-Mprepared", connstr]) diff --git a/test_runner/regress/test_wal_acceptor_async.py b/test_runner/regress/test_wal_acceptor_async.py index bb8ee8f52c..cfc131a3aa 100644 --- a/test_runner/regress/test_wal_acceptor_async.py +++ b/test_runner/regress/test_wal_acceptor_async.py @@ -245,7 +245,7 @@ def test_restarts_frequent_checkpoints(neon_env_builder: NeonEnvBuilder): # we try to simulate large (flush_lsn - truncate_lsn) lag, to test that WAL segments # are not removed before broadcasted to all safekeepers, with the help of replication slot asyncio.run( - run_restarts_under_load(env, endpoint, env.safekeepers, period_time=15, iterations=5) + run_restarts_under_load(env, endpoint, env.safekeepers, period_time=15, iterations=4) )