From 7dedecdfa8a0c60ccdd65e6f61ca86a0d94a6b2f Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 30 May 2025 15:36:40 +0200 Subject: [PATCH 01/52] Re-organize the documentation frontpage. - Update the README to reflect the new structure. - Update the frontpage to reflect the contents of the documentation. - Delete all the content. It'll be gradually reintroduced and redistributed when appropriate. --- docs/website/README.md | 56 +- .../contents/about-ouroboros/References.md | 34 - .../website/contents/about-ouroboros/index.md | 73 -- docs/website/contents/explanation/index.md | 0 .../for-developers/AbstractProtocol.md | 286 ------- .../contents/for-developers/AddingAnEra.md | 129 --- .../contents/for-developers/Benchmarks.md | 11 - .../for-developers/BlockBlockDiagram.md | 139 ---- .../for-developers/BootstrapPeersIER.md | 109 --- .../for-developers/CardanoPraosBasics.md | 154 ---- .../contents/for-developers/ChainSync.md | 161 ---- .../contents/for-developers/CivicTime.md | 230 ------ .../for-developers/ComponentDiagram.md | 101 --- .../for-developers/EraTransitionGovernance.md | 140 ---- .../contents/for-developers/Genesis.md | 777 ------------------ .../contents/for-developers/GitProcess.md | 89 -- .../contents/for-developers/Glossary.md | 567 ------------- .../HandlingBlocksFromTheFuture.md | 44 - .../contents/for-developers/HardWonWisdom.md | 557 ------------- .../contents/for-developers/NodeTasks.md | 333 -------- .../contents/for-developers/PreflightGuide.md | 311 ------- .../PreflightGuide/plot-active-slots.png | Bin 150564 -> 0 bytes .../PreflightGuide/plot-grinding.png | Bin 149543 -> 0 bytes .../plot-pooltool-slot-battles.png | Bin 52858 -> 0 bytes .../plot-single-slot-leaders.png | Bin 92092 -> 0 bytes .../for-developers/PreflightGuide/plot.py | 69 -- .../for-developers/ProfilingTipsAndTricks.md | 218 ----- .../for-developers/QueryVersioning.md | 121 --- .../contents/for-developers/ReleaseProcess.md | 488 ----------- .../contents/for-developers/SanityChecks.md | 23 - .../contents/for-developers/StyleGuide.md | 648 --------------- .../for-developers/TechnicalReports.md | 22 - .../contents/for-developers/Ticking.md | 97 --- .../VersioningSchemeDecision.md | 645 --------------- docs/website/contents/for-developers/index.md | 7 - .../for-developers/utxo-hd/Overview.md | 28 - .../utxo-hd/future-ledger-hd.md | 258 ------ .../for-developers/utxo-hd/migrating.mdx | 211 ----- .../utxo-hd/utxo-hd-in-depth.md | 333 -------- docs/website/contents/howtos/index.md | 0 docs/website/contents/reference/index.md | 1 + docs/website/contents/tutorials/index.md | 0 docs/website/docusaurus.config.js | 38 +- docs/website/sidebars.js | 64 +- .../src/components/HomepageFeatures/index.js | 37 +- docs/website/src/pages/index.js | 9 - docs/website/src/pages/index.module.css | 15 + .../static/img/ouroboros-consensus-banner.png | Bin 0 -> 1457079 bytes 48 files changed, 122 insertions(+), 7511 deletions(-) delete mode 100644 docs/website/contents/about-ouroboros/References.md delete mode 100644 docs/website/contents/about-ouroboros/index.md create mode 100644 docs/website/contents/explanation/index.md delete mode 100644 docs/website/contents/for-developers/AbstractProtocol.md delete mode 100644 docs/website/contents/for-developers/AddingAnEra.md delete mode 100644 docs/website/contents/for-developers/Benchmarks.md delete mode 100644 docs/website/contents/for-developers/BlockBlockDiagram.md delete mode 100644 docs/website/contents/for-developers/BootstrapPeersIER.md delete mode 100644 docs/website/contents/for-developers/CardanoPraosBasics.md delete mode 100644 docs/website/contents/for-developers/ChainSync.md delete mode 100644 docs/website/contents/for-developers/CivicTime.md delete mode 100644 docs/website/contents/for-developers/ComponentDiagram.md delete mode 100644 docs/website/contents/for-developers/EraTransitionGovernance.md delete mode 100644 docs/website/contents/for-developers/Genesis.md delete mode 100644 docs/website/contents/for-developers/GitProcess.md delete mode 100644 docs/website/contents/for-developers/Glossary.md delete mode 100644 docs/website/contents/for-developers/HandlingBlocksFromTheFuture.md delete mode 100644 docs/website/contents/for-developers/HardWonWisdom.md delete mode 100644 docs/website/contents/for-developers/NodeTasks.md delete mode 100644 docs/website/contents/for-developers/PreflightGuide.md delete mode 100644 docs/website/contents/for-developers/PreflightGuide/plot-active-slots.png delete mode 100644 docs/website/contents/for-developers/PreflightGuide/plot-grinding.png delete mode 100644 docs/website/contents/for-developers/PreflightGuide/plot-pooltool-slot-battles.png delete mode 100644 docs/website/contents/for-developers/PreflightGuide/plot-single-slot-leaders.png delete mode 100755 docs/website/contents/for-developers/PreflightGuide/plot.py delete mode 100644 docs/website/contents/for-developers/ProfilingTipsAndTricks.md delete mode 100644 docs/website/contents/for-developers/QueryVersioning.md delete mode 100644 docs/website/contents/for-developers/ReleaseProcess.md delete mode 100644 docs/website/contents/for-developers/SanityChecks.md delete mode 100644 docs/website/contents/for-developers/StyleGuide.md delete mode 100644 docs/website/contents/for-developers/TechnicalReports.md delete mode 100644 docs/website/contents/for-developers/Ticking.md delete mode 100644 docs/website/contents/for-developers/VersioningSchemeDecision.md delete mode 100644 docs/website/contents/for-developers/index.md delete mode 100644 docs/website/contents/for-developers/utxo-hd/Overview.md delete mode 100644 docs/website/contents/for-developers/utxo-hd/future-ledger-hd.md delete mode 100644 docs/website/contents/for-developers/utxo-hd/migrating.mdx delete mode 100644 docs/website/contents/for-developers/utxo-hd/utxo-hd-in-depth.md create mode 100644 docs/website/contents/howtos/index.md create mode 100644 docs/website/contents/reference/index.md create mode 100644 docs/website/contents/tutorials/index.md create mode 100644 docs/website/static/img/ouroboros-consensus-banner.png diff --git a/docs/website/README.md b/docs/website/README.md index 27e591694c..50c70cde34 100644 --- a/docs/website/README.md +++ b/docs/website/README.md @@ -1,64 +1,72 @@ -The website for `ouroboros-consensus` is generated using [docusaurus](https://docusaurus.io/). If you want to build and view the generated website see Section [_Building the website_](#building-the-website). +The website for `ouroboros-consensus` is generated using [Docusaurus](https://docusaurus.io/). To build and view the generated website, see [_Building the website_](#building-the-website). -# Website content +# Website Content -The website source pages can be found in the [`contents`](./contents) directory. We divide our pages into two main categories: +The front page is defined in the [`index.js`](src/components/HomepageFeatures/index.js) file. The main sections are configured in [`docusaurus.config.js`](./docusaurus.config.js). -- "About Ouroboros", which contains high-level information about the Consensus protocols that the code in this repository implements. The pages for this category should be placed in the [`contents/about-ouroboros`](./contents/about-ouroboros) directory. -- "For Developers", which contains information relevant for contributors to the Consensus code base. The pages for this category should be placed in the [`contents/for-developers`](./contents/for-developers) directory. +The website's source pages are located in the [`contents`](./contents) directory. In accordance with the [Diátaxis framework](https://diataxis.fr/) for organizing technical documentation, we categorize our pages into four sections: -The pages are written in Markdown format. +- **Explanations** ([`contents/explanation`](./contents/explanation)) +- **Tutorials** ([`contents/tutorials`](./contents/tutorials)) +- **HOWTOs** ([`contents/howtos`](./contents/howtos)) +- **Reference** ([`contents/reference`](./contents/reference)) -## Adding a new page +Refer to the [Diátaxis framework](https://diataxis.fr/) for guidance on the type of documentation that belongs in each section. -To add a new page create a Markdown file inside the appropriate directory (either [`contents/about-ouroboros`](./contents/about-ouroboros) or [`contents/for-developers`](./contents/for-developers) depending on the category). Then edit the [`sidebars.js`](./sidebars.js) file and add a reference to the new page in the desired place inside the sidebar item's configuration. For instance, if you add a new page `for-developers/foo.md`, Docusaurus will generate a reference called `for-developers/foo`, which can be used to add an entry to the sidebar as follows: +All pages are written in Markdown format. + +## Adding a New Page + +To add a new page, create a Markdown file inside the appropriate directory (e.g., [`contents/explanation`](./contents/explanation)), based on the Diátaxis category the page belongs to. + +Next, update [`sidebars.js`](./sidebars.js) and add a reference to the new page in the sidebar configuration. For example, if you add `reference/foo.md`, Docusaurus will generate a reference called `reference/foo`, which can be added to the sidebar as follows: ```javascript /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { - ... - - for_developers: [ + reference: [ { type: 'category', - label: 'For Developers', + label: 'Reference', items: [ - 'for-developers/index', - 'for-developers/ComponentDiagram', - 'for-developers/foo', // <--- Your new page - 'for-developers/ChainSync', + 'reference/index', + 'reference/foo', // <--- Your new page + ... ] - + } + ] ... +}; ``` -The order of the page in the `items` list determines the order in which this entry will appear in the sidebar. See [`sidebars.js`](./sidebars.js) for the rationale behind not autogenerating this. +The order of entries in the `items` list determines their placement in the sidebar. Refer to [`sidebars.js`](./sidebars.js) for the rationale behind manual sidebar configuration. # Building the website -To install the packages required to build the documentation site run: +To install the required packages for the documentation site, run: ``` $ yarn ``` -After the necessary packages are installed by the above command, the -documentation site can be built by running: +After installation, build the documentation site by running: ``` $ yarn start ``` -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. +This starts a local development server and opens a browser window. Most changes are reflected live without needing to restart the server. ## Build +To generate static content: + ``` $ yarn build ``` -This command generates static content into the `build` directory and can be served using any static contents hosting service. +This command outputs the static content into the build directory, which can be hosted using any static content hosting service. ## Deployment -We deploy the website using a GitHub action. See [`.github/workflows/ci.yml`](../../.github/workflows/ci.yml). +The website is deployed using a GitHub Action. See [`.github/workflows/ci.yml`](../../.github/workflows/ci.yml). diff --git a/docs/website/contents/about-ouroboros/References.md b/docs/website/contents/about-ouroboros/References.md deleted file mode 100644 index 1b3a6d11d2..0000000000 --- a/docs/website/contents/about-ouroboros/References.md +++ /dev/null @@ -1,34 +0,0 @@ -# References - -The following artifacts influence and/or describe the Consensus implementation. - - -* [Technical reports](../for-developers/TechnicalReports) -* From the IOG researchers: - * [Ouroboros BFT][ouroboros-bft] - * [Ouroboros Praos][ouroboros-praos] - * [Ouroboros Genesis][ouroboros-genesis] -* [Ledger specifications][cardano-ledger]. -* Consensus (Praos) specification: - - [Agda style](/pdfs/consensus-spec-agda.pdf), - - [LaTeX style](/pdfs/consensus-spec.pdf) -* [Quick reference table for all Cardano features](https://github.com/cardano-foundation/CIPs/blob/master/CIP-0059/feature-table.md). - This includes the dates and first slot numbers of all eras and hard forks. -* IOG media: - * [The abstract nature of the consensus layer](https://iohk.io/en/blog/posts/2020/05/28/the-abstract-nature-of-the-consensus-layer/). - * [Writing a high-assurance blockchain implementation](https://iohk.io/en/blog/posts/2017/11/03/writing-a-high-assurance-blockchain-implementation/). - * [Semi-formal development of the cardano-wallet](https://iohk.io/en/blog/posts/2018/06/04/semi-formal-development-the-cardano-wallet/). - * [The Cardano Wallet](https://www.youtube.com/watch?v=6VWCB0_uLLw). - * [Combinator makes easy work of Shelley hard fork](https://iohk.io/en/blog/posts/2020/05/07/combinator-makes-easy-work-of-shelley-hard-fork/). - * 2020 July hard fork combinator presentation at Cardano2020: - * [Part 1](https://www.youtube.com/watch?v=D8OTZULEsaI) - * [Part 2](https://www.youtube.com/watch?v=wNZq6VPLIXg) - -[ouroboros-bft]: https://iohk.io/en/research/library/papers/ouroboros-bfta-simple-byzantine-fault-tolerant-consensus-protocol/ -[ouroboros-praos]: https://iohk.io/en/research/library/papers/ouroboros-praosan-adaptively-securesemi-synchronous-proof-of-stake-protocol/ -[ouroboros-genesis]: https://iohk.io/en/research/library/papers/ouroboros-genesiscomposable-proof-of-stake-blockchains-with-dynamic-availability/ -[consensus-report]: https://ouroboros-consensus.cardano.intersectmbo.org/pdfs/report.pdf -[network-report]: https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-design/ -[cardano-ledger]: https://github.com/IntersectMBO/cardano-ledger/ diff --git a/docs/website/contents/about-ouroboros/index.md b/docs/website/contents/about-ouroboros/index.md deleted file mode 100644 index 7cb7628db8..0000000000 --- a/docs/website/contents/about-ouroboros/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -sidebar_label: 'Overview' -sidebar_position: 1 ---- - -# What is Ouroboros Consensus? - -_Ouroboros_ is the name of a family of _Proof-of-Stake_ consensus protocols which provides foundation for Cardano and other blockchains. _Distributed Consensus_ is the mechanism through which a single, linear, eventually consistent, _chain of blocks_ is established among all participants of the network. This -website aims to provide a comprehensive and detailed technical -documentation about the implementation of Ouroboros which is at the -heart of Cardano. - - -:::info - -This documentation is a work-in-progress, please feel free to raise -issues and contribute on -[GitHub](https://github.com/IntersectMBO/ouroboros-consensus) -repository should you find missing or inaccurate information. - -::: - -## Very High-Level Motivation - -The Consensus component allows a network of Cardano node to agree on a single (block) chain. -To this end, this component implements the Ouroboros family of consensus protocols. - -Another functional requirement is that the network should diffuse blocks and transactions as rapidly as -possible. Also the network should be very difficult to disrupt. For example, a successful denial of service attack should be prohibitively expensive to execute. -The Consensus layer must contribute to these goals. - -Whenever the Ouroboros protocol specifies that (a stake pool operating) a particular node should lead, that node should extend the best chain it has seen so far by minting a new block. -A newly forged block should contain as many valid transactions as possible. - -The primary data handled by this component are _blocks_ and _transactions_, the validity of which is determined by the ledger rules. -The Consensus layer in combination with the [Network layer][ouroboros-network] implement a _filtering forwarding network_. -Specifically, Consensus determines which blocks propagate between neighboring nodes (those on the _best_ chain). - -The Ouroboros research papers that formalize the different protocols (such as Praos) contain proofs that: -- the honest nodes will all continually and eventually agree on what the best chain is (unless an adversary controls more than half of the network's stake). -- the best chain grows over time. - - -The Consensus Layer defines the core Consensus components and logic, notably the -Ouroboros protocol. See [References](References). - -## The Neighbors of Consensus - -The Consensus Layer integrates the Consensus core with the [Network Layer][ouroboros-network] and the -[Ledger Layer](https://github.com/IntersectMBO/cardano-ledger). We therefore work closely with the Network -and Ledger teams. - -The Network Layer manages the nodes' connections to its -neighbors. So it ultimately provides communication channels to the Consensus -Layer, while the Consensus Layer reports back to it if a neighbor has misbehaved -etc. The Network Layer also provides the library used to define the Consensus -Layer's _client_ and _server_ state machines that let each connected pair of -nodes exchange messages according to the various _mini protocols_ (cf -[typed-protocols](https://github.com/input-output-hk/typed-protocols) package). - -The Consensus Layer uses the ledger rules to validate blocks and transactions -and apply them in order to maintain _the ledger state_. The Consensus Layer in -turn needs the ledger state in order to determine when a node is allowed to mint -a block, ie the _leader schedule_. - -The primary use of the Consensus Layer is the [Cardano node](https://github.com/IntersectMBO/cardano-node). This -is what IOG actually deploys on the live Cardano mainnet. Such a node runs the -full Ouroboros protocol and mints new blocks. Secondary uses include the -_Cardano wallet_ and [Cardano DB sync](https://github.com/IntersectMBO/cardano-db-sync), which -connect to a proper node and only follow and _trust_ its chain selection. For -example, these uses involve problem-specific queries of the latest ledger state. - -[ouroboros-network]: https://github.com/IntersectMBO/ouroboros-network diff --git a/docs/website/contents/explanation/index.md b/docs/website/contents/explanation/index.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/website/contents/for-developers/AbstractProtocol.md b/docs/website/contents/for-developers/AbstractProtocol.md deleted file mode 100644 index 05621018ac..0000000000 --- a/docs/website/contents/for-developers/AbstractProtocol.md +++ /dev/null @@ -1,286 +0,0 @@ -# Abstract Protocol - -## Tutorials - -### Overview - -- [Ouroboros.Consensus.Tutorial.Simple](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/unstable-tutorials/Ouroboros/Consensus/Tutorial/Simple.lhs): - Simple round-robin instantiation of the abstract Ouroboros consensus protocol. -- [Ouroboros.Consensus.Tutorial.WithEpoch](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/unstable-tutorials/Ouroboros/Consensus/Tutorial/WithEpoch.lhs): - Example in which the leader schedule depends on data from the chain. - -### Generating documents - -From the `ouroboros-consensus` directory, run for your choice of ``: - - pandoc -s -f markdown+lhs src-docs/Ouroboros/Consensus/Tutorial/Simple.lhs -o - -## Key Type Families and Classes - -The following diagram depicts the relation between various constructs in the -abstract specification of the protocol and the consensus-level view of the -ledger. -- Red boxes indicate concepts, or informal kinds (e.g., `ShelleyLedgerState` - would have the informal kind `Ledger`). -- Blue boxes indicate data families. -- Green boxes indicate type families. -- Type and data families map the box attached to the incoming arrow to the - box attached to the outgoing arrow. Where there is no outgoing arrow, the - family maps to any type (e.g., `BlockConfig blk`). - -```mermaid -flowchart LR; - - classDef df fill:#4285F4, border:10px; - classDef tf fill:#34A853; - classDef kind fill:#EA4335; - - Block(Block)-->BlockProtocol[BlockProtocol blk]; class Block kind; - click Block "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs" - Block-->BlockConfig[BlockConfig blk]; class BlockConfig df - BlockProtocol[BlockProtocol blk]-.->Protocol(Protocol); class BlockProtocol tf; - click BlockProtocol "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs" - click BlockProtocol "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs" - click BlockConfig "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs" - Block-->StorageConfig; class StorageConfig df - click StorageConfig "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs" - Block-->CodecConfig[CodecConfig blk]; class CodecConfig df - click CodecConfig "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs" - Block-->Header[Header blk]; class Header df - click Header "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs" - Ledger(Ledger); class Ledger kind - click Ledger "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Abstract.hs" - Block-->LedgerState[LedgerState blk]; class LedgerState df; - click LedgerState "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs" - - Block-->GenTx[GenTx blk]; class GenTx df - click GenTx "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsMemPool.hs" - Block-->ApplyTxErr[ApplyTxErr blk]; class ApplyTxErr df - click ApplyTxErr "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsMemPool.hs" - LedgerState-.->Ledger - Ledger-->AuxLedgerEvent[AuxLedgerEvent l]; class AuxLedgerEvent tf - click AuxLedgerEvent "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs" - Ledger-->LedgerErr[LedgerErr l]; class LedgerErr tf - click LedgerErr "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs" - - Protocol(Protocol); class Protocol kind - Protocol-->ConsensusConfig[ConsensusConfig p]; class ConsensusConfig df - click ConsensusConfig "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - subgraph ConsensusProtocol[class ConsensusProtocol] - ChainDepState[ChainDepState p]; class ChainDepState tf - click ChainDepState "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - IsLeader[IsLeader p]; class IsLeader tf - click IsLeader "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - CanBeLeader[CanBeLeader p]; class CanBeLeader tf - click CanBeLeader "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - SelectView[SelectView p]; class SelectView tf - click SelectView "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - LedgerView[LedgerView p]; class LedgerView tf - click LedgerView "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - ValidationErr[ValidationErr p]; class ValidationErr tf - click ValidationErr "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - ValidateView[ValidateView p]; class ValidateView tf - click ValidateView "https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs" - end - Protocol-->ChainDepState - Protocol-->IsLeader[IsLeader p] - Protocol-->CanBeLeader[CanBeLeader p] - Protocol-->SelectView[SelectView p] - Protocol-->LedgerView[LedgerView p] - Protocol-->ValidationErr[ValidationErr p] - Protocol-->ValidateView[ValidateView p] -``` -## Birds Eye Overview of Consensus Types (Galois) - -See [Diagrammatic Conventions](#diagrammatic-conventions) - -### Type Families (standalone and associated types) - -From inspecting the directions of the arrows, it should be clear that `b :: B` -fully determines---directly or indirectly---all the other types. - -``` haskell - P[rotocol] B[lock] L[edger] -- (the P,B,L "kinds") -=== === === - ┏━━━━━━━━━━━┓ - p ──(ConsensusConfig :: P→*)──────────────────────────────────────────────────────────────▶ cc ┃{- static-}┃ - p ◀──(BlockProtocol :: B→P)──── blk ──(BlockConfig :: B→*)────────────────────────────────▶ bc ┃{- config-}┃ - blk ─(LedgerState :: B→L)─▶ l ──(LedgerCfg :: L→*)────────▶ lc ┃{- data -}┃ - ┗━━━━━━━━━━━┛ - - blk ─(LedgerState :: B→L)─▶ l ──(AuxLedgerEvent :: L→*)─▶ lev -- events emitted by ledger - l ──(LedgerErr :: L→*)───────▶ lerr -- errors when updating ledger - - - blk ──(CodecConfig :: B→*)────▶ codecc -- for serialisation and deserialisation - blk ──(StorageConfig :: B→*)────▶ sc -- for (re)initializing the Storage Layer - blk ──(Header :: B→*)────▶ hdr -- link block to its header - - blk,l ──(HeaderHash :: *→*)────▶ hash -- link block/ledger to a hash - - p ──(ChainDepState :: P→*)──> cds -- protocol specific state (part that depends on the chain), would rollback when chain does - p ──(IsLeader :: P→*)──> isldr -- evidence that a node /is/ the leader - p ──(CanBeLeader :: P→*)──> cbldr -- evidence that we /can/ be leader - p ──(SelectView :: P→*)──> hdrVwCS -- projection of header used for chain selection (using 'Ord hdrVwCS'); often 'BlockNo' - p ──(ValidateView :: P→*)──> hdrVwHV -- projection of header used for header validation (not full block validation) - p ──(LedgerView :: P→*)──> ledvw -- projection of the ledger state ('l') that is required by the protocol - p ──(ValidationErr :: P→*)──> valerr -- the error result when failing to add new header to 'cds' - - s ───(Ticked :: *→*)───▶ s' -- time related changes applied to some state ('l', 'ledvw', 'cds') - - blk ───(GenTx :: B→*)──────────────────────▶ tx -- generalized transactions - blk ───(ApplyTxErr :: B→*)─────────────────▶ txerr -- errors - - blk,tx ───(Validated :: *→*)───────────────▶ valb,valtx -- add proof of validity to b;l,tx -``` - -### Type Constructors That are Type-Generic - -These type constructors effectively function as type families (as type families are used in their definitions): -(This list is not exhaustive of all such types.) - -```haskell - blk ────(Point :: B→*)─────────▶ point -- newtype ... -- a point on the chain: hash & slotno - - blk ────(LedgerConfig :: B→*)─────────▶ lc -- type LedgerConfig blk = LedgerCfg (LedgerState blk) - blk ────(LedgerError :: B→*)─────────▶ lerr -- type LedgerError blk = LedgerErr (LedgerState blk) - blk ────(TickedLedgerState :: B→*)────▶ tls -- type TickedLedgerState blk = Ticked (LedgerState blk) - - blk,l ──(HeaderFields :: *→*)──────▶ data .. = .. SlotNo .. BlockNo .. HeaderHash blk .. - blk ────(ChainHash :: B→*)─────────▶ data ChainHash blk = GenesisHash | BlockHash !(HeaderHash blk) -``` - -### Key Type Classes - -The main `ConsensusProtocol` class: - -```haskell - class Ord (SelectView p) => ConsensusProtocol p where - type family {ChainDepState, IsLeader, CanBeLeader, SelectView, LedgerView, ValidationErr, ValidateView} :: P → * - checkIsLeader :: cc → cbldr → SlotNo → Ticked cds → Maybe isldr -- 'Just evidence' when we can lead this slot - tickChainDepState :: cc → Ticked ledvw → SlotNo → cds → Ticked cds -- update the 'cds' based on passage of time (SlotNo) - updateChainDepState :: cc → hdrVwHV → SlotNo → Ticked cds → Except valerr cds -- apply header to 'cds' (may error; leader check + etc.) - reupdateChainDepState :: cc → hdrVwHV → SlotNo → Ticked cds → cds -- re-apply header to 'cds' (never errors) - protocolSecurityParam :: cc → SecurityParam -- get security parameter 'k' -``` -Classes connected to headers and blocks: -```haskell - class (StandardHash blk, Typeable blk) => HasHeader blk where -- abstract over block headers - getHeaderFields :: blk → HeaderFields blk -- i.e., return three fields: slot, blockno, hash - - class HasHeader (Header blk) => GetHeader blk where - getHeader :: blk → Header blk -- extract header from the block - blockMatchesHeader :: Header blk → blk → Bool -- check if the header is the header of the block - headerIsEBB :: Header blk → Maybe EpochNo -- when the header of an Epoch Boundary Block (EBB), ... - - class (HasHeader blk, GetHeader blk) => GetPrevHash blk where - headerPrevHash :: Header blk → ChainHash blk -- get the hash of predecessor - - -- construct the two views on block 'b' required by protocol 'p' - class (GetPrevHash blk, ConsensusProtocol p) => BlockSupportsProtocol blk where - validateView :: bc → Header blk → ValidateView p -- project from hdr for hdr validation - selectView :: bc → Header blk → SelectView p -- project from hdr for chain selection -``` -Classes connected to ledgers: -```haskell - class GetTip l where - getTip :: l → Point l -- Point of the most recently applied block - - class (GetTip l, GetTip (Ticked l)) => IsLedger l where - type family LedgerErr l :: Type - type family AuxLedgerEvent l :: Type - applyChainTickLedgerResult :: lc → SlotNo → l → LedgerResult l (Ticked l) -- apply slot based state transformations (tip unchanged) - - class (IsLedger l, HeaderHash l ~ HeaderHash blk, HasHeader blk, HasHeader (Header blk)) => ApplyBlock l blk where - applyBlockLedgerResult :: lc → blk → Ticked l → Except (LedgerErr l) (LedgerResult l l) - reapplyBlockLedgerResult :: lc → blk → Ticked l → LedgerResult l l - - class ApplyBlock (LedgerState blk) blk => UpdateLedger blk where - {} - - -- | Link protocol to ledger - class (BlockSupportsProtocol blk, UpdateLedger blk, ValidateEnvelope blk) => LedgerSupportsProtocol blk where - protocolLedgerView :: lc → Ticked l → ledvw -- 'ledvw' ('LedgerView (BlockProtocol blk)') extracted from the ledger - ledgerViewForecastAt :: lc → l → Forecast ledvw -- get a forecast (of future 'ledvw's) from a given ledger state. - - class (UpdateLedger blk) => LedgerSupportsMempool blk where - txInvariant :: GenTx blk → Bool -- check if internal invariants of the transaction hold - applyTx :: lc → WhetherToIntervene → SlotNo → tx → tls → Except txerr (tls, Validated tx) -- apply an unvalidated transaction - reapplyTx :: lc → SlotNo → Validated tx → tls → Except txerr tls -- apply a previously validated transaction ... - txsMaxBytes :: tls → Word32 -- max number of bytes of transactions that can be put into a block - txInBlockSize :: tx → Word32 -- post-serialisation size in bytes of a 'GenTx blk' - txForgetValidated :: Validated tx → tx -- discard the evidence that transaction has been previously validated -``` - -## Some Commonly Used Base Types (from pkgs ouroboros-consensus, cardano-base, and ouroboros-network) - -``` haskell -data Forecast a = - Forecast { forecastAt :: WithOrigin SlotNo -- Forecast a - Forecast the effect - , forecastFor :: SlotNo -> Except OutsideForecastRange (Ticked a) -- of time ticking - } - -data LedgerResult l a = LedgerResult { lrEvents :: [AuxLedgerEvent l] -- LedgerResult l a - The result of invoking - , lrResult :: !a -- a ledger function that does validation - } - -data WithOrigin t = Origin | At !t - -newtype SlotNo = SlotNo {unSlotNo :: Word64} -- SlotNo - The 0-based index for the Ourboros time slot. - -data ChainHash b = GenesisHash | BlockHash !(HeaderHash blk) - -data HeaderFields b = HeaderFields { headerFieldSlot :: SlotNo -- HeaderFields - fields we expect - , headerFieldBlockNo :: BlockNo -- to be present in - , headerFieldHash :: HeaderHash blk -- a block. - } - --- | A point on the chain is identified by its 'Slot' and 'HeaderHash'. -newtype Point blk = Point { getPoint :: WithOrigin (Point.Block SlotNo (HeaderHash blk)) } - --- Point is commonly "viewed" as the following: -pattern GenesisPoint :: Point blk -pattern GenesisPoint = Point Origin -pattern BlockPoint :: SlotNo -> HeaderHash blk -> Point blk -pattern BlockPoint { atSlot, withHash } = Point (At (Point.Block atSlot withHash)) -{-# COMPLETE GenesisPoint, BlockPoint #-} - -``` - -## And Some Commonly Used Projections - -``` haskell -blockHash :: HasHeader blk => blk -> HeaderHash blk -blockHash = headerFieldHash . getHeaderFields - -blockSlot :: HasHeader blk => blk -> SlotNo -blockSlot = headerFieldSlot . getHeaderFields - -blockNo :: HasHeader blk => blk -> BlockNo -blockNo = headerFieldBlockNo . getHeaderFields -``` - -## Diagrammatic Conventions - -- Code should all be viewed fixed-font, at least 140 chars wide. - -- Regarding `P`, `B`, `L` - - these are not kinds in the code, but "morally equivalent", created for the sake of documentation. - - `p`, `blk`, and `l` are used as type names, respectively elements of the `P`, - `B`, and `L` kinds. - -- Associated types are not being distinguished from standalone type families. - -- NOTE: For the sake of line-width, or clarity, "type variables" are sometimes - used in place of "type-functions applied to variables". This should not - result in ambiguity. E.g., - - `p` in place of `BlockProtocol blk` - - `cds` in place of `ChainDepState p` - -- `a ───(X :: A→B)───▶ b` should be interpreted as `type family X A :: B` or - `data family X A :: B`, where `a` and `b` are typical names for the type - family's index and result, respectively. - -- To reduce the "noise", these type-class constraints are being ignored: - `NoThunks`, `Eq`, `Show`, `HasCallStack`; `Ord` is *not* being ignored. diff --git a/docs/website/contents/for-developers/AddingAnEra.md b/docs/website/contents/for-developers/AddingAnEra.md deleted file mode 100644 index 5f091477bd..0000000000 --- a/docs/website/contents/for-developers/AddingAnEra.md +++ /dev/null @@ -1,129 +0,0 @@ -# Adding a new Shelley-based era to consensus - -This document walks through the steps required to add a new Shelley-based era to -consensus and to add it as an extra era to the Cardano blockchain. - -Prior art upon which this is based: -* [#2666](https://github.com/IntersectMBO/ouroboros-network/pull/2666) -* [#2679](https://github.com/IntersectMBO/ouroboros-network/pull/2679) - -The steps are fairly straightforward. We have put things in place (in consensus -and in the ledger) when adding the Allegra and Mary eras that should now make it -much easier to add a new additional era. - -There are two main driving changes: adding the new era to -`Ouroboros.Consensus.Shelley.Eras` and including that era in -`Ouroboros.Consensus.Cardano.Block`. The compiler should point the rest of the -way. It's mostly a matter of following the existing patterns by imitating the -previous Shelley-based case. Be sure to run both the Shelley -(`ouroboros-consensus-shelley-test`) and the Cardano -(`ouroboros-consensus-cardano-test`) tests. - -For exhaustiveness, we give an overview of the changes needed. The new era we'll -be adding is the Alonzo era, which comes after the Mary era. - -## Preparation - -* Locate the new tag in the ledger, e.g., `AlonzoEra`. This is an empty data - type that is used at the type level to indicate the era. The ledger should - have an instance of the `ShelleyBasedEra` class (the class defined in - `Cardano.Ledger.Shelley.API`, do not confuse it with the class with the same name - in consensus) for this era. This class should provide all the instances - consensus integration will rely on. - -* Note that both the affected consensus libraries and test suites are parametric - in the Shelley-based era or in the general era. The test suite relies on the - necessary `Arbitrary`, `Show`, `Eq`, ... instances to be available for all of - the Cardano eras. This means that a new era can only be added to the Cardano - eras when the ledger provides all the necessary instances for the new era, - *including the instances for the test suite* (e.g., the serialisation - generators). Note that because the test suite is parametric/generic in the - eras, it is not easy to temporarily omit a single era from the test suite - until the required instances have been added. This means that we can't extend - the library with the new era without extending the test suite too. In the - past, this has been the main blocker: the library was ready, but the required - instances in the ledger were missing for our test suite(s). - -* Add the required dependencies on the ledger package (and its test package) to - the `cabal.project` file. You will have to add it to some other cabal files - too, let the compiler tell you which ones. - -## `ouroboros-consensus-shelley` - -* Define `StandardAlonzo` in `Ouroboros.Consensus.Shelley.Eras` and add any - missing instances to that module, update the export list appropriately. - -* In `Ouroboros.Consensus.Shelley.Node`, define `ProtocolParamsAlonzo` just like - the existing ones. In case the era in question needs extra parameters (e.g., a - new genesis config?), they can be added here. - -## `ouroboros-consensus-shelley-test` - -* In `Test.Consensus.Shelley.Examples`, define an `examplesAlonzo` similar to - how `examplesMary` is defined. If necessary, i.e., when new type families have - been created in the ledger (e.g., `TxOut`), the `examples` function might have - to take more arguments. This is where the golden test examples are defined, - but only the Shelley ones are tested as part of this test suite. The others - are only tested as part of the `ouroboros-consensus-cardano-test` test suite. - -## `ouroboros-consensus-cardano` - -* In `Ouroboros.Consensus.Cardano.Block`, include `AlonzoEra` in - `CardanoShelleyEras`. Update all the pattern synonyms in the module with the - new era. Don't forget to update the comments, the `COMPLETE` pragmas, and the - export lists. It's easy to forget a case and the compiler will likely not warn - you, you'll notice it when trying to use the pattern synonyms. - -* In `Ouroboros.Consensus.Cardano.CanHardFork`, update - `CardanoHardForkConstraints`, add additional translations to the `CanHardFork` - instance. - -* In `Ouroboros.Consensus.Cardano.Node`, update the `SerialiseHFC` instance by - following the existing patterns. Add a new `CardanoNodeToNodeVersion` and - `CardanoNodeToClientVersion` that enable the `AlonzoEra`, update the existing - ones so that they disable the new era. Be sure to include the new versions in - the two methods of the `SupportedNetworkProtocolVersion` instance. Extend - `protocolInfoCardano` with the new era by following the type errors and adding - the missing parameters (including `ProtocolParamsTransition`). Don't forget to - derive `maxMajorProtVer` from the new final era. Update - `protocolClientInfoCardano` too. - -* In `Ouroboros.Consensus.Cardano`, update the `ProtocolCardano` type synonym, - add the extra arguments needed for `protocolInfoCardano` to the - `ProtocolCardano` constructor. Update `protocolInfo` accordingly. - -### `test` - -* In `Test.Consensus.Cardano.Serialisation`, update `testCodecCfg` and - `dictNestedHdr`. - -* In `Test.Consensus.Cardano.Golden`, update the `ToGoldenDirectory` instances. - -* Create a `Test.ThreadNet.MaryAlonzo` module similar to - `Test.ThreadNet.AllegraMary`, to test the transition from Mary to Alonzo. - Don't forget to include it in the `Main` of the test suite. You will have to - create a `Test.ThreadNet.TxGen.Alonzo` module similar to - `Test.ThreadNet.TxGen.Mary`. - -* Run the golden tests - (`cabal run ouroboros-consensus-cardano:cardano-test -- -p /Golden/`). - Golden test results should have been created for the new Cardano versions. - Don't forget to commit those files, otherwise they will be recreated on each - run in CI and not compared against the previous results, rendering them - useless. - -* Extend `Test.ThreadNet.Cardano` with the new era. - - -### `unstable-cardano-testlib` - -* In `Test.Consensus.Cardano.Generators`, update `arbitraryNodeToNode`, - `arbitraryNodeToClient`. Try to understand the logic of these two, you will - also have to add a new case to these. It would be nice if we could write these - two in a generic way so that they won't have to be updated with each era, but - it's not so simple. Update the other functions/instances. Be careful, you - won't get warnings for missing cases in `Arbitrary` instances, so go over all - of them and add the missing cases. - -* In `Test.Consensus.Cardano.Examples`, update `eraExamples`, `combineEras`, and - the rest. diff --git a/docs/website/contents/for-developers/Benchmarks.md b/docs/website/contents/for-developers/Benchmarks.md deleted file mode 100644 index 36190736a4..0000000000 --- a/docs/website/contents/for-developers/Benchmarks.md +++ /dev/null @@ -1,11 +0,0 @@ -# Consensus benchmarks - -We are in the process of adding component level microbenchmarks for Consensus. -We started with microbenchmarks for adding transactions to the mempool. The -mempool benchmarks can be run using the following command. - -```sh -cabal new-run ouroboros-consensus:mempool-bench -``` - -We check for regressions in performance on CI. We might publish benchmark results in this site shortly. diff --git a/docs/website/contents/for-developers/BlockBlockDiagram.md b/docs/website/contents/for-developers/BlockBlockDiagram.md deleted file mode 100644 index 03eb420a7b..0000000000 --- a/docs/website/contents/for-developers/BlockBlockDiagram.md +++ /dev/null @@ -1,139 +0,0 @@ -# Introduction - -Many parts of the Consensus and Storage Layers' design primarily focus on points, blocks headers, and full blocks. -This document visualizes their contents, as of the Conway ledger era, from the perspective of the Consensus protocol. - -The names of the individual fields were copied directly from the corresponding Haskell code; they are merely mnemonics within this diagram/document, not necessarily recognized more broadly. -Moreover, the order of the fields does not necessarily match their order within the valid CBOR encodings; see the corresponding CDDL specs for such details. - -# Block Diagram of a Point - -A point `(s, h)` names a (supposed) block whose `hbSlotNo` is `s` and whose serialized block header has hash `h`. - -```mermaid -block-beta - block:point - columns 1 - - pointSlot - pointHash("pointHash (aka headerHash)") - end - - %% palette from https://davidmathlogic.com/colorblind/#%23000000-%23E69F00-%2356B4E9-%23009E73-%23F0E442-%230072B2-%23D55E00-%23CC79A7 - - style pointHash color:#E69F00 -``` - -The `pointHash` field has the color #E69F00 because it's a hash of the (serialization of the) fields inside that background color in the block diagram of a full block below. -The same semantics of text color matching some background color is used within that diagram as well. - -# Block Diagram of a Full Block - -```mermaid -block-beta - block:fullblock - columns 1 - - block:blockheader - columns 1 - - headerSig("headerSig (KES)") - block:headerBody - columns 3 - - block:election - hbSlotNo - hbVk("hbVk (DSIGN)") - end - hbBlockNo - hbPrev - hbVrfVk("hbVrfVk (VRF)") - hbVrfRes("hbVrfRes (VRF)") - hbBodySize - hbBodyHash - block:ocertBody - ocertVkHot("ocertVkHot (KES)")) - ocertN - ocertKESPeriod - end - ocertSigma("ocertSigma (DSIGN)") - end - end - - block:blockbody - columns 2 - - txSeqBodyBytes - txSeqWitsBytes - txSeqMetadataBytes - txSeqIsValidBytes - end - end - - %% palette from https://davidmathlogic.com/colorblind/#%23E69F00-%2356B4E9-%23009E73-%230072B2-%23D55E00 - - style blockheader fill:#E69F00 - style hbPrev color:#E69F00 - %% style pointHash color:#E69F00 -- find node in sibling diagram - - style headerBody fill:#56B4E9 - style headerSig color:#56B4E9 - style ocertVkHot color:#56B4E9 - - style blockbody fill:#009E73 - style hbBodySize color:#009E73 - style hbBodyHash color:#009E73 - - style ocertBody fill:#0072B2 - style ocertSigma color:#0072B2 - style hbVk color:#0072B2 - - style election fill:#D55E00 - style hbVrfRes color:#D55E00 - style hbVrfVk color:#D55E00 -``` - -Some remarks. - -- The relative sizes of the rectangles in this diagram are meaningless. - We couldn't figure out a reasonable way to better control them within the Mermaid syntax. - -- The `hbPrev` field has the same #E69F00 color as `pointHash`, but note that it is the hash of the header of the this block's predecessor. - -# Block Diagram of a Transaction - -There is very rich structure within the transactions themselves, but the majority of the Consensus and Storage Layer does not concern itself with that structure. -The `txSeq*` items are shown within the full block are just for orientation, since the alternative would be to simply write `body`, which is much less perspicious. - -An individual transaction, outside of a block, has the same four parts (due to [segregated witnesses](https://github.com/IntersectMBO/cardano-ledger/blob/81637a1c2250225fef47399dd56f80d87384df32/libs/cardano-ledger-core/src/Cardano/Ledger/Core.hs#L562-L579)). - -```mermaid -block-beta - block:tx - columns 4 - - block:txbody - body - end - wits - isValid - auxiliaryData - end - - %% palette from https://davidmathlogic.com/colorblind/#%23000000-%23E69F00-%2356B4E9-%23009E73-%23F0E442-%230072B2-%23D55E00-%23CC79A7 - - style body fill:#CC79A7 -``` - -The transaction ID is the hash of just one of those parts of a single transaction, its body. - -```mermaid -block-beta - txId("txId (aka txBodyHash)") - - %% palette from https://davidmathlogic.com/colorblind/#%23000000-%23E69F00-%2356B4E9-%23009E73-%23F0E442-%230072B2-%23D55E00-%23CC79A7 - - style txId color:#CC79A7 -``` - -The `hbBodyHash` field, in contrast, hashes over all four parts of all transactions in the block body. diff --git a/docs/website/contents/for-developers/BootstrapPeersIER.md b/docs/website/contents/for-developers/BootstrapPeersIER.md deleted file mode 100644 index 1bb62f5509..0000000000 --- a/docs/website/contents/for-developers/BootstrapPeersIER.md +++ /dev/null @@ -1,109 +0,0 @@ -# Bootstrap peers - -## Introduction - -We are currently implementing a small refinement to the syncing node. -The Genesis release will supersede this, but this can be released sooner. - -## Desired High-Level Behavior - -**Desideratum 1.** -The following state machine depicts the desired behavior of the node. - -```mermaid -graph - subgraph OnlyBootstrap - direction TB - PreSyncing[PreSyncing] - Syncing[Syncing] - PreSyncing -- "Honest Availability Assumption\nis satisfied" --> Syncing - Syncing -- "Honest Availability Assumption\nis no longer satisfied" --> PreSyncing - end - - CaughtUp[CaughtUp] - Syncing -- "no peers claim to have\nsubsequent headers,\nand its selection is ≥\nthe best header" --> CaughtUp - CaughtUp -- "vol tip became older than X" ----> PreSyncing - - StartUp[[Node start-up]] - StartUp -- "node was most recently in CaughtUp\nand vol tip is younger than X" --> CaughtUp - StartUp -- "otherwise" --> PreSyncing -``` - -- `OnlyBootstrap` - All upstream peers must be trusted. - - In the context of bootstrap peers, as all peers are trusted, the _Honest Availability Assumption_ is satisfied in the following cases: - - - The node is configured to connect to bootstrap peers, and it has established a connection to a bootstrap peer. - - - The node is not configured to connect to bootstrap peers. This is the case for eg block producers and hidden relays. They will only be connected to trusted local root peers (eg the relays for a block-producing node). - -- `CaughtUp` state - The peers are chosen according to the P2P design, including the _ledger peers_ etc. - -**Desideratum 2.** -In particular, the transitions should happen promptly. - -- `CaughtUp -> PreSyncing` should be prompt in order to minimize the duration that the node is exposed to untrusted peers (aka non-bootstrap peers) while its stale volatile tip is making it vulnerable. - Delays here would directly threaten the security of the node. - -- `Syncing -> CaughtUp` should be prompt so that the centralized, relatively-few bootstrap peers are relieved of load as soon as possible. - Delays here would not directly threaten the security of the node. - However, wasting the centralized resources would threaten the ability of nodes to join the net, ie the availability of the whole net. - Determining the exact load constraints for the bootstrap peers is not yet finalized. - -- `PreSyncing -> Syncing` should be prompt to allow the node to conclude that is is caught up as a follow-up. - -- `Syncing -> PreSyncing` should be prompt to prevent the node from concluding that it is caught up while it is not actually connected to a bootstrap peers. - -**Desideratum 3.** -The node should not return to `OnlyBootstrap` every time it restarts/briefly loses network/etc. -Such unnecessary connections would also put unnecessary load on the centralized, relatively-few bootstrap peers. -This is the point of the "Node start-up" pseudo state in the diagram above. - -## Information Exchange Requirements - -- When in `OnlyBootstrap`, the Diffusion Layer needs to know the addresses of the bootstrap peers. - This data will likely come from configuration files, and so doesn't require communication between the Diffusion Layer and the Consensus Layer. - -- When in `CaughtUp`, the Diffusion Layer needs to know the addresses and weights of the registered stake pool relays---aka the stake distribution among the ledger peers. - This information is in the ledger state, and so the Consensus Layer will need to provide it to the Diffusion Layer continually. - -- For the sake of efficient reuse, the Diffusion Layer must manage the disconnections from all peers upon the `CaughtUp -> OnlyBootstrap` transition. - It would be wasteful for the Consensus Layer to achieve this less carefully, eg by simply killing those threads. - - Therefore, the Consensus Layer needs to promptly notify the Diffusion Layer when the node should make the `CaughtUp -> OnlyBootstrap` transition. - Ideally, this happens immediately, so the implementation will likely involve an `STM` `TVar`. - - As the volatile tip age approaches X, the Consensus Layer could forewarn the Diffusion Layer, eg "it seems like the transition back to OnlyBootstrap will be necessary soon; please prepare", if that would be helpful. - -- For similar reasons, the Diffusion Layer should also manage the disconections from all (bootstrap) peers upon the `OnlyBootstrap -> CaughtUp` transition. - -## Anticipated Interface - -See [IntersectMBO/ouroboros-network#4555](https://github.com/IntersectMBO/ouroboros-network/pull/4555) and [IntersectMBO/ouroboros-network#4846](https://github.com/IntersectMBO/ouroboros-network/pull/4846) for the definition/implementation of this interface on the Network side. - -- The Diffusion Layer should monitor a `TVar State` (maybe via a `STM State` action). - The Consensus Layer will update that state promptly. - The Diffusion Layer should react promptly. - ```haskell - data LedgerStateJudgement = YoungEnough | TooOld - lpGetLedgerStateJudgement :: STM m LedgerStateJudgement - ``` - Here, `YoungEnough` signals that the ledger state's distribution among stake relays is sufficiently close to that of the actual real world. - For now, we conservatively return `YoungEnough` only when the node concludes it has fully caught-up, and `TooOld` otherwise. - -- The Diffusion Layer will inform the Consensus Layer whether the Honest Availability Assumption is satisfied. - ```haskell - data OutboundConnectionsState = TrustedStateWithExternalPeers | UntrustedState - daUpdateOutboundConnectionsState :: OutboundConnectionsState -> STM m () - ``` - -- Whenever necessary, the Diffusion Layer can ask the Consensus Layer for the ledger peer information, eg - ```haskell - lpGetLedgerPeers :: STM m [(PoolStake, NonEmpty RelayAccessPoint)] - ``` - Note that this is completely independent of `lpGetLedgerStateJudgement`; we anticipate that it will be called conditional on `lpGetLedgerStateJudgement == YoungEnough`. - - - Additionally, the Consensus Layer will provide the Diffusion Layer with the slot number of the latest tip, to allow the Diffusion Layer to support the related `UseLedgerAfter` feature without the Consensus Layer having to be aware of it. Concretely: - ```haskell - lpGetLatestSlot :: STM m SlotNo - ``` diff --git a/docs/website/contents/for-developers/CardanoPraosBasics.md b/docs/website/contents/for-developers/CardanoPraosBasics.md deleted file mode 100644 index 017c7be245..0000000000 --- a/docs/website/contents/for-developers/CardanoPraosBasics.md +++ /dev/null @@ -1,154 +0,0 @@ -# Basics of Ouroboros Praos in Cardano - -2024 November | nick.frisby@iohk.io | nicolas.frisby@moduscreate.com - -## The Main Theorem - -If both of the following hold - -- {PraosGrinding}. - The adversary is not expending an enormous amount of hashing power[^GrindingPrereq] (ie hashes per second), on the order of magnitude of the the entire contemporary Bitcoin network. - -- {PraosHonestNetwork}. - There is always a set X (that may vary with time) of honest Cardano mainnet nodes that satisfy all of the following. - - - {PraosSelection}. - Each node in X promptly selects the best valid chain that has propagated to it. - - - {PraosSemisynchrony}. - The best selection among X will always propagate to all of X within much less than 20 seconds, despite the adversary's best effort to delay it. - - - {PraosHonestMinting}. - At the onset of a slot that elects some honest stake pools, for each such pool, exactly one node in X promptly mints exactly one block that extends the node's current selection. - That mechanism is the only way that honest stake pools with more than half of the (effective[^GrindingWiggle]) delegated stake mints blocks. - - - {PraosEpochStructure}. - The on-chain protocol state maintains an evolving nonce that accumulates every block's election proof. - The elections during epoch E on a chain are determined by the value of that evolving nonce that was snapshotted on that chain at least 129600 slots (ie 36 hr)[^GenesisBump] before E and a stake distribution that was snapshotted on that chain at least 172800 slots (ie 48 hours) before the nonce was snapshotted. - - - {PraosProtocolStability}. - Similarly, the protocol itself (eg parameters) cannot vary on a single chain with less than 129600 slots (ie 36 hr)^[GenesisBump] of warning. - -then the Praos paper proves a vanishingly small failure probability for each of the following. - -- {PraosCommonPrefix}. - The 2161st youngest block on any selection in X is already and always will be on every other selection in the (evolving) X. - (Seek out the pre-computed table of worst-case _settlement times_ in other Cardano documentation.) - -- {PraosChainGrowth}. - The 2161st youngest block on any selection in X is not older than 129600 slots (ie 36 hr). - (When all stake is behaving honestly, the age of the 2161st youngest block will be approximately 43200 slots (ie 12 hr).) - -- {PraosChainQuality}. - Every span of 43200 slots (ie 12 hr) on a selection in X contains at least one block minted by an honest node. - -[^GrindingPrereq]: Remark. - The PhD dissertation https://eprint.iacr.org/2021/1698 established that an adversary with less than roughly 9.5% stake will not successfully grind, regardless of hashing power. - Generally, though, more hashing power or more stake would both benefit the adversary. - -[^GrindingWiggle]: Elaboration. - A grinding adverary is effectively amplifying their portion of the stake. - The Praos security argument requires that even their _effective_ relative stake is below half. - -[^GenesisBump]: Warning. - Ouroboros Genesis increases this by 43200 slots (ie 12 more hours). - -## Grinding Attack - -In a {GrindingAttack}, the adversary attempts to choose the nonce for some epoch. -Suppose the following holds simultaneously, where C is the best selection in X and C^2160 is C less its 2160 youngest blocks. - -- C has between 1 and 2160 blocks after the slot that snapshots the target nonce. - -- The adversary has some private chains that are longer than C and fit the schema "C^2160 … H? … D …" where H is the youngest honest block on this chain (or else C^2160 if none) and D is the youngest adversarial block on this chain that's before the snapshot. - (The schema requires C^2160 because of PraosCommonPrefix and/or PraosEpochStructure.) - -The adversary can harvest a combinatorial number of nonces from each such chain with a different H. -The method is to drop any adversarial block after H up to and including D, but not so many that the result is not longer than C anymore, else X would ignore the resulting chain. -Crucially, each such chain snapshots a different nonce. -And preferably the chain still includes at least one block after the snapshot slot, so that extensions of it don't alter the nonce. - -The adversary has to expend their hashing power to calculate those nonces and additional compute power to evaluate them to find the most preferable nonce (eg the one that maximizes how many of the 432000 slots in the next epoch elect the adversary) --- that additional compute power has not yet been accounted for in any grinding analysis. -If the adversary finds a chain with a good nonce, it can release it to X, thereby improving the nonce for the target epoch. -And it can do so again, if it can find a chain that both has a better nonce and is even longer. - -However, the grinding calculations can only happen in a particular time interval. -Each such chain includes some honest blocks, at least C^2160 and more than that unless the adversary is gaining elections faster than C is gaining blocks. -Therefore, these calculations cannot start until the wall clock is somewhat close to the snapshot slot. -The calculations also have a deadline, since the chain C is growing during them. -If C^2160 reaches the intersection of C and some attacking chain or C just becomes longer than the best extension of that attacking chain the adversary can muster, X will never switch to that attacking chain. - -The duration of the grinding interval depends on various factors, but generally becomes longer if the honest chain is growing slower or the adversary is gaining elections faster and/or already had a big lead. -If the adversary wanted to remain covert, it'd need to continue contributing (most of) its elections to X's selections. -On Cardano, that typically means the time interval would not last significantly more than 12 hr. -Moreover, Praos would have to explicitly fail for the interval to last more than 36 hr, according to PraosChainGrowth. -(TODO that previous sentence doesn't consider that the adversary might be able to start grinding early.) -If the adversary doesn't have much stake, then it's extremely unlikely they'll have many excess elections. -That both decreases their search space and also reduces the interval since it makes them more dependent on orphaned honest blocks, which prevent the calculations from starting earlier than those orphans arrive. - -(TODO integrate the fact that 100 blocks already generates enough chains to require years of hashes to compute the nonces?) - -## Protocol and Leader Schedule Stability - -The delays required by PraosEpochStructure and PraosProtocolStability, when combined with PraosCommonPrefix and PraosChainGrowth, ensure that all of X will always be executing the same protocol with the same the leader schedule for the current epoch. -This does not actually seem to be a fundamental requirement for the protocol itself (since the headers/blocks that use some nonce identify their preceding chain) --- and it is in particular not crucial to the preceding GrindingAttack explanation. - -Instead, the Praos authors merely relied on this property to tackle the Praos proofs. -It similarly simplifies all reasoning about the protocol unless Praos has already failed in some way. -That includes third-party (community) tooling, etc. -So these two requirements provides some convenience to developers at the acceptable cost of a lower bound on governance delays. - -Notably, these requirements enable the Header-Body Split optimization: the honest node can validate a block header even before having fetched or validated the preceding 2160 blocks. -(Seek out more details in other Cardano Consensus documentation.) - -## Unspecified Behaviors When Praos Fails - -PraosCommonPrefix is both trivial and crucial to enforce within the node---without it, the node would have to process/retain incoming data regardless of how historical it is (eg headers/blocks). - -PraosChainGrowth, on the other hand, has been indirectly assumed in various places (notably PraosEpochStructure and PraosProtocolStability), but is not enforced anywhere. -It would also be trivial to enforce, but it has so far been considered unnecessary and even potentially inconvenient. - -For example, suppose Amazon had a very bad outage for couple days, and the Cardano network's "X" nodes _almost_ satisfied PraosChainGrowth but came up just one block short. -If the node were to enforce PraosChainGrowth (eg it refused to select chains that violate it), then the community would have no choice but to invoke the off-chain disaster recovery plan, which has significant instantaneous costs and long-term reputational costs. -Perhaps it's better for nodes to make and best effort and possibly limp along in that scenario, crossing sparse intervals of chains as best it can (if the adversary allows it). - -On the other hand, some unavoidable disasters could knock out the (public) infrastructure Cardano relies on, such that there can be no X. -EG a https://en.wikipedia.org/wiki/Carrington_Event solar storm could partition the Cardano network such that no set of connected nodes mints on behalf of a third of the delegated stake. -A PraosChainGrowth violation would be inevitable in that scenario. -In such an extreme scenario, it's easy to assume the nodes' behavior is irrelevant. -However, today's node can proceed (adversary permitting) as long as there's at least _one_ block in every 36 hr period. -Who is to say the Cardano community would never want the option to preserve that weak history of the chain instead of invoking the disaster recovery plan? - -One major downside to the current scenario is that almost no specifications for nodes, community tooling, etc were ever intended to scope over behaviors when Praos fails. -Thus some simplifications/optimizations/etc are likely to fail in surprising ways during disasters, including those that are fundamentally unavoidable. -This indirectly suggests that the community itself might effectively be partitioned --- whether that was immediately recognized or only manifested in surprising disagreements among tooling after some delay --- if the historical Cardano chain itself violated PraosChainGrowth. - -Thus, the _most careful_ option would be to enforce PraosChainGrowth in the node. -This does force the community to execute the disaster recovery plan even in "slight" disasters. -But doing so ensures that essentially all of the Cardano infrastructure can _safely_ continue to take PraosChainGrowth and PraosChainQuality for granted. - -(Like PraosChainGrowth, PraosChainQuality is similarly assumed at least in PraosEpochStructure, but it inherently cannot be enforced.) - -## Protocol Refinements/Extensions - -Subsequent work on the Ouroboros protocols refines/extends the Praos theorem. - -- PraosSemisynchrony indirectly precludes X from containing nodes that are still syncing. - Praos itself does not provide any protections for nodes to catch up to the honest network, ie to (re)join X, it merely ensure the protocol can benefit from nodes that manage to do so. - As of the Ouroboros Genesis protocol, X still excludes syncing nodes, but now an honest node will eventually be able to (re)join X after it's had access to X for long enough. - The specific Cardano implementation of Genesis additionally requires the syncing node is never eclipsed during its sync. - -- Ouroboros Peras sometimes expedites settlement times[^SettlementHashingPower] such that {PerasCommonPrefix} and {PerasChainGrowth} will reduce the 2161 count of PraosCommonPrefix and PraosChainGrowth in intervals during which Peras voting was not disrupted. - -- The count of 2160 blocks was chosen for Cardano's PraosCommonPrefix etc in order to absorb the risk of the GrindingAttack. - If that attack were somehow mitigated, the count could be reduced. - Improved anti-grinding measures (eg involving a _verifiable delay function_ in the evolving nonce) will therefore also expedite settlement[^SettlementHashingPower]. - The 2161 count will likely not be as reduced as it is in Peras, but it will be reduced _always_ instead of _sometimes_. - -- At the very least, PraosHonestMinting requires an accurate wall clock. - Most cardano nodes currently use the Network Time Protocol (NTP) for that, but that's regarded as a vulnerability. - Ouroboros Chronos replaces NTP with a bespoke on-chain clock. - Even without the on-chain mechanics, Chronos informs how the Praos node should handle blocks that arrive well before the onset of their slot, for example. - -[^SettlementHashingPower]: Remark. - Expediting settlement also reduces the search space and grinding interval of the GrindingAttack. diff --git a/docs/website/contents/for-developers/ChainSync.md b/docs/website/contents/for-developers/ChainSync.md deleted file mode 100644 index 90a1557611..0000000000 --- a/docs/website/contents/for-developers/ChainSync.md +++ /dev/null @@ -1,161 +0,0 @@ -# Chain sync client specification - -The aim of the chain sync client is to replicate the chain of an upstream node. -For every upstream node that the local node is connected to there is a separate - instance of the client. In the following, we consider a single instance. - -Note on terminology: - -- By "intersection" between two chains we will always mean the most _recent_ - _intersection_[^glossary] (could be genesis). -- "Their" _fragment_[^glossary], "their" chain refers to the chain of the upstream node; - "our" fragment, "our" chain refers to the chain of the local node. - -## Key invariant - -0. We will never roll back more than `k` blocks. -1. This means we are not interested in upstream nodes whose chains fork from - our chain more than `k` blocks ago. - - If an upstream node does not satisfy this condition, we will disconnect. - - Note that this includes nodes that are on the same chain but behind. - - It will be the responsibility of the network layer to decide whether or - not to try reconnecting to such nodes later. -2. From (1), the intersection between their chain and our chain must be within - `k` blocks from our tip. -3. Since our fragment will be anchored `k` back, from (2) we get that the - intersection between their chain and our chain must lie on our fragment. - (NOTE: In the case of corruption of volatile DB -- or being near genesis -- - our fragment may be shorter than `k`, but even in that case, the length of - our fragment will dictate our maximum rollback.) -4. We use their fragment as a proxy for their chain. -5. We must be able to _adopt_ their chain, and so their _fragment_ should give - us enough information to do so. -6. From (5), this means that their fragment must contain all blocks after the - intersection with our fragment (because those blocks are new for us). -7. From (6), it means the intersection between their _chain_ and our _fragment_ - must lie on their fragment: if not, the intersection would be _before_ their - fragment, which would mean that we would miss some blocks. - -Note that if both nodes are following the same chain and are up to date, the -intersection will be the _tip_ of both fragments. - -## Chain evolution - -Property (0) will continue to hold, which means that all of (1-7) must continue -to hold. If any of those _cannot_ continue to hold, we should disconnect from -the upstream node. - -### Our chain changes - -When _our_ chain evolves, we get a new fragment. If our new fragment still -intersects with their fragment, all is well. Otherwise, we throw away their -fragment, wait for the pipeline to drain, re-initiate the intersection finding -protocol again, and establish a new fragment for the upstream node. - -Note: It's not impossible that such a new intersection might exist. For example, -if both the upstream node and we are part of a network that temporarily got -disconnected from the rest of the world, we might at roughly the same time -attempt to switch to the same, much longer, chain when we get reconnected. -The check is also not expensive, so there is no need to try to be more clever -here and decide if we can disconnect without doing the check. - -This is a simple approach, but we need to argue why simply draining the pipe -(rather than executing the instructions) and throwing away their fragment is -not too wasteful. - -The number of headers we might potentially have to download again due to not -executing the drained instructions is limited by the high watermark, which is -small; this is no big deal. However, the fragment we had before we threw it -away could potentially be very long, so we have to make a case that throwing -it away is okay. - -The scenario is something like this: - -``` - k - /~~~~~~~~~~\ - -..................\........------------ our fragment - \ - ----------------------- their (potentially long) fragment -``` - - -Since we will _never_ adopt the chain for which we have all those headers -already (since this would require us to roll back more than `k` blocks), -the headers we have downloaded will never be useful, and so we can just discard -them. - -(There is one special case here, where there is no intersection between our -fragment and their fragment because we are far _ahead_ of them on the _same_ -chain; but in this case, starting afresh is only beneficial.) - -### Their chain changes - -We get notified through the chain sync protocol about updates to their chain: - -1. Roll forward. Two possibilities: - - a. This block does not exist on our fragment (they are either ahead of us on - the same chain, or they are on another fork). The intersection point does - not change. - - b. This block _does_ exist on our fragment (they are behind us on the same - chain). The intersection points shifts forward one block, but must still - exist on both fragments. Moreover, since it moved _forward_, it can't - violate the "intersection point within `k`" condition. - -2. Roll back. Two possibilities: - - a. The roll back point is at or after the old intersection point (before the - rollback). All is fine. - - b. The roll back point is /before/ the old intersection point. All blocks - before the old intersection point must be shared between their chain and - our chain, so the new intersection point must /be/ the rollback point. - If that rollback point lies on our fragment (and hence is within @k@), - all is good; otherwise, we disconnect. - - Notes: - - We could additionally (and optionally) check that they do not roll - back more than `k`, and if they do, treat them as adversarial (disconnect). - (This is anyway limited by maximum rollback supported by the `ChainState`.) - - This might mean we could disconnect from peers that do unnecessary - rollbacks; we consider this acceptable (they should not be doing that in - the first place). - -## Trimming - -Our fragment is always `k` long (unless near genesis or data loss), so no -trimming needed. However, to avoid unbounded memory usage, we should trim their -fragment. - -We have established that the intersection between their chain and our chain -must lie on both _fragments_, and moreover, that this intersection will be -within `k` from our tip; since our fragment is `k` long, it means the -intersection will be somewhere along our fragment. - -This means that we should allow the remote node to roll back from its current -intersection point with our fragment to any (earlier) point on our fragment, but -we do not need to allow it to roll back more than that. This means we can always -trim their fragment so that it is anchored at our anchor point. - -- In the common case that both nodes are following the same chain and both up - to date, this would leave both fragments identical. -- In the extreme case that they are `k` behind, it would leave their fragment - empty. -- More generally, this may leave their fragment shorter than `k`, thus not - allowing them their full rollback. However, this is okay: if their fragment - _is_ shorter than `k` due to trimming to our anchor point, and they _do_ roll - back to a point before their fragment, this new intersection point would be - too far from our tip, and we should disconnect from them. -- This places a bound on the length of their fragment: the `ChainState` will - place a limitation on how far into the future we can validate headers; for - PBFT this is `2k` from the intersection point. In the worst case (in terms - of fragment length) the intersection point is the tip, and so the longest - fragment we will ever have in memory is `3k` headers. -- We could, if needed, bind this more tightly still; as long as we have a - sufficient number of headers to determine if their chain is preferred over - ours (this needs careful consideration when adopting genesis). - -[^glossary]: See the [Glossary](https://ouroboros-consensus.cardano.intersectmbo.org/docs/for-developers/Glossary/) \ No newline at end of file diff --git a/docs/website/contents/for-developers/CivicTime.md b/docs/website/contents/for-developers/CivicTime.md deleted file mode 100644 index eaf4f3a888..0000000000 --- a/docs/website/contents/for-developers/CivicTime.md +++ /dev/null @@ -1,230 +0,0 @@ -# Civic Time in the Cardano Node - -## Introduction - -This document discusses how civic time (eg a value the wall clock could report) relates to the Cardano node, both the current design details and the higher-level fundamental needs. - -It also raises the question of what behaviors the node should exhibit when the Praos security argument has failed. - -## Pre-Ouroboros Chronos - -The Ouroboros Chronos protocol has not been implemented, but some of its basic rules have already been implemented. -Today's node behaviors related to Chronos can be summarized as follows (see [`./HandlingBlocksFromTheFuture.md`](./HandlingBlocksFromTheFuture.md) for details). - -- The node trusts NTP. - (A full Ouroboros Chronos implementation would not.) - -- The node silently ignores the wall clock moving backwards by a small amount. - It crashes if the wall clock moves backward by a large amount. - (This would be an NTP failure/attack vector.) - -- The node enforces a small bound for acceptable clock skew with respect to some peer's apparent clock. - -- The key indicator of a peer's apparent wall clock is the reception of a header from that peer whose slot onset is ahead of the local wall clock. - If the header's earliness is beyond the acceptable clock skew, the peer is considered buggy or dishonest; the node disconnects with prejudice. - If it's instead within bounds, the ChainSync client for that peer is paused until the header is no longer ahead of the local wall clock. - -An honest node will not fetch a block before validating the corresponding header, so the above rule prevents a node from receiving a block before the wall clock has reached the onset of its slot. - -*Aside*. -It is possible that a block from the future is already in the database when the node starts. -That's a corner case that seems unlikely to matter in practice. - -## Time Translations - -The Ouroboros Praos protocol and the Cardano details built around it are almost exclusively defined in terms of slots rather than common civic measures of time, such as POSIX time, UTC, etc. -Each block explicitly inhabits some slot. -The same is true for block headers and the election proofs therein. -For the sake of determinism, transactions are labeled with a range of slots in which the transaction can be valid. - -The are only two exceptions. - -- The node's (commodity) operating system cannot compute the current slot, merely the current civic time. - -- The Plutus interface exposes the validity range as POSIX time, in the [`txInfoValidRange` field](https://plutus.cardano.intersectmbo.org/haddock/latest/plutus-ledger-api/PlutusLedgerApi-V1.html#t:TxInfo) (see this [blog post](https://iohk.io/en/blog/posts/2022/12/08/time-handling-on-cardano-part-2-use-cases/) for high-level background). - The Consensus Layer design would have been simpler if the Plutus API provided the validity range in terms of slots, but that ship has sailed. - (And developers writing Plutus scripts are almost certainly relieved that it did.) - The "Slot to time translation" paragraph within the Alonzo Ledger specification [`alonzo-ledger.pdf`](https://github.com/intersectmbo/cardano-ledger/releases/latest/download/alonzo-ledger.pdf) explains that this design prevents script authors from assuming the wrong translations between slot and civic time. - -Because of those exceptions, the Consensus Layer must use the wall clock and/or the translation back and forth between slots and civic. -Those uses are listed in the following table. - - - Every use involves some translation, whether it be from slot-to-civic or vice versa (which is always the wall clock as a slot). - - - This table excludes some uses that the Consensus Team is in the processing of removing (eg those that could be replaced by annotating validated headers with their slot onset). - - - The rightmost column of the table judges whether the use obviously involves some entity that obviously determines which ledger state to use for the translations. - The column is for the benefit of a section below, but the key idea is that the translations are inherently chain-dependent, but users and most developers are blissfully unaware of that and, moreover, such a dependency is fundamentally contrary to human intuitions about time. - - - The last few rows make explicit Consensus features that are not yet implemented but will also involve civic time. - -| Component | Use | Reads wall clock (whether translated to slot) | Which slots are translated to civic | Whether which ledger state is "obviously" determined | -| - | - | - | - | - | -| ChainSync | enforce the clock skew bound | Yes (raw) | header's slot | Yes, header's intersection [^HeaderBodySplit] | -| ChainSel | define Plutus `txInfoValidRange`s when validating a block | No | validity range | Yes, the block | -| The Mint | checking whether to mint | Yes (translated) | none | Yes, the new block | -| The Mint, via `getSnapshotFor` | recheck validity range[^MempoolAdd] | Yes (translated) | none | Yes, the new block | -| Genesis State Machine, aka GSM | detect that the selection is an old chain | Yes (raw) | selection's slot | Yes, the selection | -| hypothetically[^MempoolAdd]: Mempool (add and resync) | enforce the validity range | Yes (translated) | none | No, dangling txs do not | -| Mempool (only add[^NoResyncTranslation]) | define Plutus `txInfoValidRange` when validating a dangling tx | No | validity range | No, dangling txs do not | -| LocalStateQuery | the `GetInterpreter` query | No | arbitrary slots | ⚠No⚠[^GetInterpreterWild] | -| Ouroboros Peras | ? analogs of ChainSync + The Mint (+ Mempool?) for votes | ? Yes (both)| ? vote slot | ?[^GiorgosIdea] | -| Ouroboros Leios | ? analogs of ChainSync + The Mint (+ Mempool?) for IBs and EBs | ? Yes (both) | ? header slot | ?[^GiorgosIdea] | -| Mithril | ? analogs of ChainSync + The Mint (+ Mempool?) for votes | ? Yes (raw?) | ? | ? | - -[^HeaderBodySplit]: Elaboration. - The node is allowed to ignore headers that intersect more than k blocks back from its current selection. - So a relevant header's intersection will be one of the youngest k+1 blocks of the selection. - Also, also, the k+1st headers after that extension are completely sufficient to determine whether the node ought to switch to chain with those headers. - Thus the youngest k+1 blocks of the selection must be able to translate the slot times of a chain of up to k+1 relevant headers that extend that block but not its successor on the selection. - (Being able to translate one ChainGrowth stability window into the future suffices to ensure the second part.) - -[^MempoolAdd]: Explanation. - Today's Mempool doesn't actually use the wall clock to enforce the validity range; it instead uses the slot after the selection's tip. - But it might be preferable to use the wall-clock. - The recheck in the Mint means there's no risk of minting a block with a stale tx. - -[^GetInterpreterWild]: Warning. - The consumer of the `GetInterpeter` result could use it for anything. - Remarkably, the fact that the LocalStateQuery mini protocol forced the consumer to explicitly acquire a concrete ledger state (aka a point) before it could even issue the query is not obvious to the user of the consumer. - One notable known use is the CLI tool's computation of the upcoming the leadership schedule. - That tool's UX does not currently loudly indicate that the result depends on which ledger state answered the query and that the output could therefore be different if the same question is asked, even during the same epoch. - - This same thing is true of some other queries, but they all have arguments that are obviously chain-dependent. - -[^NoResyncTranslation]: Explanation. - Only Plutus scripts require `txInfoValidRange`, but resyncing the Mempool doesn't re-execute Plutus scripts. - See "Two-Phase Transaction Validation for Phase-2 Scripts" in the Alonzo ledger spec. - -[^GiorgosIdea]: Note. - We briefly raised this concern/request with Giorgos Panagiotakos. - He brainstormed an idea of perhaps recording the relevant nonce in vote/header. - -## Some Time Translations Cannot Be Predicted - -Different eras of the chain can have different slot durations. -Therefore it must be the responsibility of the Hard Fork Combinator (HFC) to define translation back and forth between slots and civic. -Even with all available information, some translations involving the future cannot be predicted. - -Recall that the Byron era of Cardano sets the slot duration to 20 seconds, while all other eras so far set it to one second. -Because eras can have different slot durations, a ledger state is fundamentally unable to correctly translate times _arbitrarily_ ahead of its own slot. -Even if that ledger state were to be perfectly recent (ie its slot is very near the wall clock), eras that have not yet been implemented/designed/even considered could have an unpredictable slot duration. - -Using a ledger state that is perfectly recent but otherwise arbitrary, how far ahead could the HFC do translations that are necessarily correct? -Ultimately, it depends on how quickly the net could fork to an era with a different slot duration. -In practice, that's a matter of months on Cardano mainnet[^EmergencyRapidity]. -In theory --- assuming only that the Praos security argument holds and that honest stakeholders wouldn't vote for the hard fork unless their nodes were already ready for it --- it's one stability window less than the lower bound on the duration between the current era's voting deadline and the proposal being enacted. - - - In Byron, that lower bound was originaly 2k slots = 4320 slots = 86400 seconds = one day, but was doubled to two days before the fork to Shelley happened. - So the lower bound on translations was at least one day ahead, since the Byron stability window was also 2k slots. - - - After Byron and before Conway, it was 6k/f slots = 259200 slots = 259200 seconds = 3 days. - So the lower bound on translations was at least 1.5 days ahead, since the post-Byron stability window has always been 3k/f slots. - - - Since Conway, it's been one epoch = 10k/f slots = 432000 slots = 432000 seconds = 5 days. - So the lower bound on translations is currently at least 3.5 days ahead, since the stability window is still 3k/f slots. - -Those lower bounds are for an arbitrary ledger state, and so they're the "worst-case". -For specific ledger states, their detailed location in the epoch can increase the lower bound by up to one epoch, which has always been 5 days in every era so far. - -The limit is one stability window less the the post-voting buffer because --- assuming only the Praos security argument --- that's the upper bound on the age of a block the honest Praos node might need to discard as part of a rollback. -In particular, until the oldest such block is after the voting deadline, a rollback could switch to a chain with a different voting outcome in that epoch. -For example, switching from a chain in which the next era is only a few slots away to one in which it is at least another epoch away. - -*Aside*. -On the other hand, when using a (non-recent) ledger state in a historical era, the HFC could theoretically use its knowledge about the upcoming eras in order to translate even further ahead. -For example, the HFC could safely assume the one second duration for slots between some given Babbage ledger state and however many slots it might possibly take before that ledger state could transition from Babbage to Conway and from Conway to whatever comes after, because that mystery era is the first time the slot duration could change. -The HFC does not do this in practice, since the extra complexity is not worthwhile; it's not necessary for syncing nodes to be smarter than caught-up nodes. - -[^EmergencyRapidity]: Technicality. - It could perhaps be weeks or days in an emergency, but a change to the slot duration would almost certainly be avoided in that case. - -## What About Chain Growth Failures? - -At a high-level, today's HFC was derived as follows. -The exact thought process was not recorded during the design work, but this is a plausible reconstruction. - - - {ImmutableTranslations}. - Because of humans' general assumptions about time, it would be prohibitively confusing if the node (even its internal interfaces) might give different translations of the same slots/civic times. - So a switch from `t1` to `t2` for the result of some translation is unacceptable. - At the very least, the node should refuse to do a translation that might be invalidated by on-chain governance in the meantime (eg several weeks into the future). - - - {NonemptyForecastRange}. - On the other hand, the node should be able to translate slot/civic times slightly ahead of its tip. - At the very least, some users presumably want some capacity to plan ahead (eg to smartly schedule their node's brief downtime). - - - {RollbackInsensitiveTranslations}. - As a specific subcase of the first requirement, the node should even refuse to do translations that might be invalidated by a rollback. - - - {MonotonicTranslations}. - It would also be too confusing if a node agreed to translate some slot/civic time and then subsequently refused to translate that same slot/civic time. - So `Just t1 -> Nothing` is also unacceptable for some translation, not merely `Just t1 -> Just t2`. - - - {DespiteChainGrowthViolation}[^Anachrony]. - All of the above must hold even in the presence of a Chain Growth violation, except switching from a chain that violates Chain Growth to one that does not is allowed to violate the RollbackInsensitiveTranslations subcase of ImmutableTranslations. - -[^Anachrony]: Clarification. - This was not originally a "requirement", but the behavior was eventually discovered and has so far been accepted as reasonable and potentially even desirable. - -**{Iteration 1}**. -The ImmutableTranslations (excluding RollbackInsensitiveTranslations) and NonemptyForecastRange requirements are simple to achieve without the rest. - - - Refuse to translate a slot/civic time that is after the enactment of a governance outcome if using a ledger state that is before the corresponding voting deadline. - - - Require that a governance outcome is enacted at least X slots after the corresponding voting deadline. - Thus a ledger state can always translate at least X slots ahead of it. - -**{Iteration 2}**. -The RollbackInsensitiveTranslations requirement can be additionally supported with simple changes. - - - Refuse to translate a slot/civic time that is after the enactment of a governance outcome if using a ledger state that is less than one stability window after the corresponding voting deadline. - Just as with the third phase of the Praos epoch structure (which fixes the nonce for the next epoch), this one stability window buffer ensures --- via Chain Growth --- that there will be so many blocks after the deadline that no rollback could alter the governance outcome. - - - Accordingly require that X = one stability window + Y. - Thus a ledger state can always translate at least Y slots ahead of it. - -The MonotonicTranslations requirement is motivated by the following scenario. -The node may switch from a chain that is at least one stability window past the voting deadline to a chain that is not. -With such a switch, the node's translation for an argument after the outcome is enacted would switch from `Just t1` to `Nothing`, according to the above rules. -Due to Praos Chain Growth, the first chain must already have enough blocks to prevent rollbacks from reaching the voting deadline (since it returned `Just t1`). -And the selection rule would therefore ensure that the second chain would have at least as many blocks after the deadline. -So once the second chain grows past the threshold slot again, the translation would switch back from `Nothing` to `Just t1` (ie the same translation). -However, that intermittent `Nothing` is exactly what MonotonicTranslations prohibits. - -**{Iteration 3}**. -A pivot from slot counting to block counting can achieve this, since a chain switch can't rollback more than k blocks nor decrease the block count. - - - Keep X = one stability window + Y. - - - Refuse to translate a slot/civic time that is after the enactment of a governance outcome if using a ledger state that is less than k+1 blocks after the voting deadline. - -**{Iteration 4} (latest)**. -In order to satisfy the DespiteChainGrowthViolation requirement, today's HFC inlcudes a radical rule. - - - Silently ignore the on-chain governance --- ie the HFC continues with the current era _despite the on-chain governance outcome having signaled the transition to the next era_ --- if the stability window after the voting deadline contains less than k+1 blocks (ie violates Chain Growth). - (TODO this is today's intended behavior, but a bug is counting all blocks after the voting deadline instead of only those in the subsequent stability window.) - - - Keep X = one stability window + Y. - - - Refuse to translate a slot/civic time that is after the enactment of a governance outcome if using a ledger state that is both less than k+1 blocks after the voting deadline and also less than one stability window past the voting deadline. - Ledger states that are more than a stability window after the deadline but have fewer than k+1 blocks after the deadline do translations assuming the next epoch is in the same era (regardless of the actual on-chain governance outcome). - -Altogether, Iteration 4 ensures that the node will satisfy ImmutableTranslations, NonemptyForecastRange, and MonotonicTranslations as its selection grows without rolling back any blocks (thereby excluding RollbackInsensitiveTranslations), even if those extensions violate Praos Chain Growth. - -The Consensus Team would like to remove at least the DespiteChainGrowthViolation requirement and the corresponding possibility of ignoring the on-chain governance for the following reasons. - - - The occasional clarification to colleagues that "the HFC might override the on-chain governance" has always been met with (reasonable) alarm and confusion. - - - Even despite the extreme measure of overriding the on-chain governance, the HFC still is unable to ensure _all_ of its desiderata in the presence of a Chain Growth violation. - (It's not yet clear whether it would ever be possible to do so.) - - - It seems unlikely that the Ledger Team would agree that it is worthwhile to upstream the block counting logic such that Chain Growth violations prohibit the governance outcomes relevant to the HFC. - Making the on-chain governance itself detect Chain Growth violation (and specifying as much in the community documentation about governance) seems more reasonable than enabling HFC ledger states that are incoherent in surprising ways (ie increased major protocol version but still in the same era). - (For the record, the Consensus Team would be on board with this if others consider this option worthwhile.) - - - The rightmost column in the table above indicates that the most fundamental elements of the node (headers and blocks) inherently determine which ledger state must determine their time translations and therefore can freely rely on time translations (likely via a hybrid of Iteration 1 and Iteration 2) that vary depending on which ledger state is used. - - - The other node functions in that table (Mempool and user queries, for now) could prevent sensitivity to rollbacks by merely translating times according to the node's immutable tip ledger state instead of ever overriding the on-chain governance. - -It is not yet clear what all the resulting node behaviors would be during a Chain Growth violation --- nor whether it matters! -The node's behavior outside of the Praos security argument is very rarely discussed or even considered. diff --git a/docs/website/contents/for-developers/ComponentDiagram.md b/docs/website/contents/for-developers/ComponentDiagram.md deleted file mode 100644 index 2b64ff45ab..0000000000 --- a/docs/website/contents/for-developers/ComponentDiagram.md +++ /dev/null @@ -1,101 +0,0 @@ -This is a very high-level diagram that indicates how the core data flow within the conceptual components of a single node's Consensus Layer. - -```mermaid -graph LR - - subgraph Consensus[Components of the Consensus Layer] - direction LR - - TxPool["Mempool\n(aka 'TxPool')"] - BlockPool["disk part of ChainDB\n(aka 'BlockPool')"] - ChainSel["in-mem parts of ChainDB\n& its threads\n(aka 'ChainSel')"] - - Upstream["Upstream Peers Adapter\n& Mint"]---> |B| ChainSel --> |"U(H(B))"| Downstream[["Downstream Peer Adapters\n& Wallet"]] - ChainSel ---> |B| BlockPool -.-> |B| Downstream - Downstream --> |T| TxPool ---> |T| Upstream - - ChainSel ---> |"H(L)"| Upstream - ChainSel --> |L| TxPool - ChainSel ---> |"O(L)"| BlockPool - - BlockPool -.-> |B| ChainSel - BlockPool -.-> |"I(L)"| ChainSel - end - - subgraph Legend - direction LR - Publisher --> |latest payload| Subscriber - Server -.-> |requested payload| Requester - X1[" "] - Y1[" "] - X1 --- |"T = transaction"| Y1 - X1 --- |"B = block"| Y1 - X1 --- |"L = ledger state"| Y1 - X2[" "] - Y2[" "] - X2 --- |"H(X) = header part of X"| Y2 - X2 --- |"U(X) = an update of X"| Y2 - X3[" "] - Y3[" "] - X3 --- |"I(X) = only during intialization"| Y3 - X3 --- |"O(X) = only occasionally"| Y3 - end - -style Legend fill:transparent,stroke:transparent -style Consensus fill:transparent,stroke:transparent -``` - -The current implementation architecture is not an exact concretization of the conceptual components in this diagram. - -- The BlockPool component in this diagram is to blocks on disk as the TxPool component (aka Mempool) is to transactions in memory. - It corresponds to the on-disk parts of the ChainDB, ie the VolDB, the ImmDB, and the disk part of the LedgerDB. -- The ChainSel component in this diagram corresponds to the non-BlockPool parts of the ChainDB, ie the background threads and the in-memory part of the LedgerDB. - -The other parts of the diagram more closely match the implementation. - -- The TxPool is one-to-one with the actual Mempool. -- The Upstream Peers Adapter component in this diagram represents all mini protocol components for upstream peers (from which this node receives blocks) and the centralized BlockFetch decision logic. - For the purpose of this diagram, the Mint component behaves like a special, simple, trusted upstream peer. -- The Downstream Peer Adapters component in this diagram represents all mini protocol components for downstream peers (to which this node sends blocks). - For the purpose of this diagram, the Wallet peer (or any other _local client_) behaves like a special, simple, trusted downstream peer. - -Remarks. - -- H(L) must contain at least enough of an L to validate headers (ie H(B)). - U(H(B)) corresponds to the `ChainUpdate` data type (ie roll forward or roll backward). - -- This diagram distinguishes ChainSel and BlockPool in order to explicitly enumerate the three sources of blocks: Upstream Peers, the Mint, and from disk during node initialization. - -- The difference in the plurals of Upstream Peers Adapter and Downstream Peer Adapters is not a typo. - The logic managing each downstream peer is independent of the other downstream peers, whereas the logic managing upstream peers involves some centralized logic (eg the BlockFetch decision logic). - The double-box node shape is the closest Mermaid equivalent to the more standard stack boxes. - -- The peers are divided into "upstream" and "downstream" based on which direction blocks flow, but transactions flow in the opposite direction. - -- Q: Since the upstream peers pass the blocks to ChainSel, why does ChainSel ever need to read from BlockPool? - A: Two reasons. It may receive the blocks out of order. It reads them during initialization. - -TODO. -Ideally the diagram is a cross with BlockPool, ChainSel, and TxPool all on the top-to-bottom line and Upstream Peers Adapter, ChainSel, and Downstream Peer Adapters on the left-to-right line. -But I can't figure out how to force Mermaid to choose that layout; [nor has anyone else](https://github.com/mermaid-js/mermaid/issues/270). -If we rework in eg `tikz`, we should do the cross. - -The diagram is much simpler for a node that has no downstream peers, no wallet, and doesn't forge blocks; ie its sole purpose is to follow the chain and store it on the local disk. - -```mermaid -graph LR - - subgraph PassiveConsensus["Components of the (Passive) Consensus Layer"] - direction LR - Upstream["Upstream Peers Adapter"]---> |B| ChainSel - ChainSel ---> |B| BlockPool - - ChainSel ---> |"H(L)"| Upstream - ChainSel ---> |"O(L)"| BlockPool - - BlockPool -.-> |B| ChainSel - BlockPool -.-> |"I(L)"| ChainSel - end - -style PassiveConsensus fill:transparent,stroke:transparent -``` diff --git a/docs/website/contents/for-developers/EraTransitionGovernance.md b/docs/website/contents/for-developers/EraTransitionGovernance.md deleted file mode 100644 index 7d5c7f35c2..0000000000 --- a/docs/website/contents/for-developers/EraTransitionGovernance.md +++ /dev/null @@ -1,140 +0,0 @@ -# Era Transition Goverance - -This document explains how on-chain governance ends each era within Cardano, with a particular emphasis on testnets. - -Every era ends when on-chain governance increments the major protocol version past the greatest within that era. -According to [the table maintained alongside CIP-59](https://github.com/cardano-foundation/CIPs/blob/master/CIP-0059/feature-table.md), those versions are as follows. - -| Era | Least major version | Greatest major version | -| - | - | - | -| Byron | 0 | 1 | -| Shelley | 2 | 2 | -| Allegra | 3 | 3 | -| Mary | 4 | 4 | -| Alonzo | 5 | 6 | -| Babbage | 7 | 8 | -| Conway | 9 | >= 10 (Conway is the latest era at time of writing) | - -All eras forbid proposals to increase the major protocol version by more than one at a time. -Thus the governance process within those eras (Byron, Alonzo, Babbage, and Conway, so far) that contain multiple major protocol versions must take place multiple times. -In turn, for example, at least the first two epochs of any Cardano chain will be in the Byron era -- see the "Initializing the Chain with a Later Protocol Version" section below for the one exception. - -## Byron Era - -The relevant Byron update proposal increments [the major component of the protocol version](https://github.com/IntersectMBO/cardano-ledger/blob/f5b35692b4d92d664187781a98b7af3fab445bad/eras/byron/ledger/impl/src/Cardano/Chain/Update/Proposal.hs#L219). -As with all Byron governance, it's a six stage process on-chain. - -- Event 1. - Some genesis key delegate registers the update proposal at least `4k` slots before the first slot intended to use the incremented protocol version. - (On mainnet, `k=2160`, but that value can be different on testnets.) -- Event 2. - Enough of the genesis key delegates vote for the proposal. - The exact quorum threshold is a protocol parameter; testnets can ignore the particular value by simply having all keys vote for the proposal. -- Event 3. - At least `2k` slots pass after Event 2. -- Event 4. - Enough genesis delegates then extend the chain with a block that endorses the proposal, by setting their [`headerProtocolVersion` field](https://github.com/IntersectMBO/cardano-ledger/blob/f5b35692b4d92d664187781a98b7af3fab445bad/eras/byron/ledger/impl/src/Cardano/Chain/Block/Header.hs#L158-L159) to the proposed version. - The validation for this field is lax, so testnets can simply set it for all Byron blocks to the Shelley protocol version (ie the one in the proposal that ends Byron). -- Event 5. - At least `2k` slots pass after Event 4. -- Event 6. - The next epoch transition will adopt the proposal, thereby incrementing the major protocol version. - -The proposal for an increment and each vote for that proposal must each be separate transactions, due to the limited expressiveness of a Byron transaction. -Testnets when possible should introduce those transactions in the first slot of whichever epoch is intended to be the last with that protocol version, to maximize the probability that they enter the mempools and are included in a block soon enough, for example. - -## Shelley, Allegra, Mary, Alonzo, and Babbage Eras - -These eras all use [an update proposal that increments the major component of the protocol version](https://github.com/IntersectMBO/cardano-ledger/blob/f5b35692b4d92d664187781a98b7af3fab445bad/libs/cardano-ledger-core/src/Cardano/Ledger/Core/PParams.hs#L355). -The stages on-chain are simpler than for Byron. - -- Enough of the genesis key delegates make the same proposal at least `6k/f` slots before the first slot intended to use the incremented protocol version. - (On mainnet, `k=2160` and `f=1/20`, but those values can be different on testnets.) - The exact quorum threshold is a protocol parameter; testnets can ignore the particular value by simply having all keys propose the increment. - (Voting is no longer distinct from proposing.) -- The next epoch transition will adopt the proposal, thereby incrementing the major protocol version. - -Unlike Byron, all of the proposals for one increment can be introduced in a single transaction. -Testnets when possible should introduce that transaction in the first slot of whichever epoch is intended to be the last with that protocol version, to maximize the probability that it enters the mempools and is included in a block soon enough, for example. - -*Remark*. -The function that constructs the initial Shelley ledger state from the final Byron ledger state actually ignores the incoming state's protocol version. -This function has other inputs, principally the given Shelley Genesis file, which includes a protocol version. -Note that the Byron Genesis file does _not_ include a protocol version (no one has ever needed Byron to start from a protocol version other than 0). - -## Conway Era - -The Conway era uses a dedicated [`Hard Fork Initiation` governance action](https://github.com/IntersectMBO/cardano-ledger/blob/f5b35692b4d92d664187781a98b7af3fab445bad/eras/conway/impl/src/Cardano/Ledger/Conway/Governance/Procedures.hs#L805-L810) to increment the major protocol version. - -See [CIP-1694](https://cips.cardano.org/cip/CIP-1694) and/or its [formal specification](https://github.com/IntersectMBO/formal-ledger-specifications/) for the stages of the governance process, specifically the dynamics (eg dedicated quorum threshold) of "Hard Fork Initiations". - -## Examples of On-Chain Governance in TestNets - -A few teams within IOG already have test suites that involve on-chain governance. - -- `cardano-node-tests`. - The SDET Team maintains a set of tests that involve a local cluster of nodes building a Cardano chain that has some blocks in every Cardano era. - [Their script]( https://github.com/IntersectMBO/cardano-node-tests/blob/05d0c4989d3d1bbebb7af894b4c5f9ba9fd32a25/cardano_node_tests/cluster_scripts/conway/start-cluster) demonstrates how to use `cardano-cli` commands to construct, sign, and submit the necessary transactions for every era except Byron. - - The Byron era there is currently termninated after one epoch via a `TestShelleyHardForkAt: 1` configuration setting, but the Consensus Team is currently working to [remove that functionality](https://github.com/IntersectMBO/ouroboros-consensus/issues/416). - Byron on-chain governance as described in this document will replace it, although it will require two epochs, one each to reach protocol versions 1 and 2. - -- `cardano-db-sync`. - The DB Sync Team creates a "mock" chain to use when testing their tool. - [This test](https://github.com/IntersectMBO/cardano-db-sync/blob/0f1d93f9b868caaf14c6cd0e77991e63c07c067f/cardano-chain-gen/test/Test/Cardano/Db/Mock/Unit/Conway/Governance.hs#L451) raises the protocol version within Conway. - And [this test](https://github.com/IntersectMBO/cardano-db-sync/blob/0f1d93f9b868caaf14c6cd0e77991e63c07c067f/cardano-chain-gen/test/Test/Cardano/Db/Mock/Unit/Conway/Other.hs#L447) raises the protocol version within Babbage. - The linked definitions use more combinators defined elsewhere in that codebase, but it's only a few indirections until the definitions start using the `cardano-ledger` interface directly. - Do note that these transactions have no witnesses, which can be sufficient for the testing of a tool that trusts its upstream node. - -- `ouroboros-consensus`. - The Consensus Team wrote tests shortly before the end of the Byron era that tested the mechanism that would transition to Shelley. - In particular, [the `mkProtocolByronAndHardForkTxs` function](https://github.com/IntersectMBO/ouroboros-consensus/blob/a9a5f3aaf3ddd45b3dd58a132d65b657bbf285e5/ouroboros-consensus-cardano/src/unstable-byron-testlib/Test/ThreadNet/Infra/Byron/TrackUpdates.hs#L318-L363) and the `mkHardForkProposal` function defined just below it use the `cardano-ledger` interface for Byron in order to create the transactions for the proposal and votes --- each with the necessary witnesses/signatures --- in order to increment the protocol version via Byron on-chain governance. - Those functions are used within the Consensus Layer's "ThreadNet" tests, which submit the transactions listed in the `tniCrucialTxs` field at every possible opportunity. - That degenerate persistence and eagerness reliably ensures that the chain increments the protocol version as soon as possible. - - A similar ThreadNet test transitions from Shelley to Allegra; its `tniCrucialTxs` field is created by [this function](https://github.com/IntersectMBO/ouroboros-consensus/blob/a9a5f3aaf3ddd45b3dd58a132d65b657bbf285e5/ouroboros-consensus-cardano/src/unstable-shelley-testlib/Test/ThreadNet/Infra/Shelley.hs#L431), which leverages the fact that a single Shelley transaction can demonstrate the necesary quorum for the protocol version increment. - -The key features of these three suites with regard to this document are summarized in the following table. - -| Repository | Byron | Shelley, ..., and/or Babbage | Conway | -| - | - | - | - | -| `cardano-db-sync` | No | Haskell, unsigned | Haskell, unsigned | -| `ouroboros-consensus` | Haskell, signed | Haskell, signed | No (eg see [Issue 1065](https://github.com/IntersectMBO/ouroboros-consensus/issues/1065)) | -| `cardano-node-tests` | No | `cardano-cli`, signed | `cardano-cli`, signed | - -## Initializing the Chain with a Later Protocol Version - -It is often convenient for testnet chains to entirely skip some initial protocol versions. -The node currently supports that for testing purposes via the following steps. - -- Choose X, the desired protocol version for the testnet's chain to start with. - As a running example, suppose it is 6.0. -- Declare the `protocolVersion` field to be X (eg `{major: 6, minor: 0}`) within the `protocolParams` field within top-level JSON object of the Shelley Genesis file. -- In the node configuration file, include a `TestHardForkAtEpoch: 0` declaration for each Cardano era up to and including the era that contains X. - In the running example, protocol version X=6.0 is in Alonzo (refer to the table in the Introduction above), so the following declarations need to be present within the node configuration file. - -``` - ... - TestShelleyHardForkAtEpoch: 0, - TestAllegraHardForkAtEpoch: 0, - TestMaryHardForkAtEpoch: 0, - TestAlonzoHardForkAtEpoch: 0, - ... -``` - -*Warning*. -Values other than `0` should not be used with these settings. -Instead, use the necessary governance transactions to increment the protocol version as explained in the sections above. - -With settings like those, today's node still starts from a Byron ledger state corresponding to the given Byron Genesis file (and with a protocol version of 0), but [it immediately](https://github.com/IntersectMBO/ouroboros-consensus/blob/a9a5f3aaf3ddd45b3dd58a132d65b657bbf285e5/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/Combinator/Embed/Nary.hs#L268-L276) applies the ledger's translation functions to reach the appropriate era for X by the onset of slot 0. - -- The translation from Byron to Shelley uses the protocol version specified in the Shelley Genesis file, regardless of the protocol version of the final Byron ledger state. - Some pointers into the code: - - The Consensus Layer translates the last Byron ledger state to the first Shelley ledger state with [this function](https://github.com/IntersectMBO/ouroboros-consensus/blob/a9a5f3aaf3ddd45b3dd58a132d65b657bbf285e5/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/CanHardFork.hs#L265-L269). - - That function mostly delegates to [this function](https://github.com/IntersectMBO/cardano-ledger/blob/f5b35692b4d92d664187781a98b7af3fab445bad/eras/shelley/impl/src/Cardano/Ledger/Shelley/API/ByronTranslation.hs#L92-L100) in the Ledger Layer. - - That function sets the first Shelley ledger state's protocol parameters according to the translation context, which is built from the Shelley Genesis file by [this function](https://github.com/IntersectMBO/cardano-ledger/blob/f5b35692b4d92d664187781a98b7af3fab445bad/eras/shelley/impl/src/Cardano/Ledger/Shelley/Translation.hs#L77-L85). -- No subsequent translation (from each "Shelley-based era" to the next) alters the protocol version. - -This interface is the result of historical choices. -It's not ideal, but it seems sufficient for the testnet use case. -In particular, the whole thing could be replaced by simply determining which initial eras to skip based on the protocol version given in the Shelley Genesis file and a flag indicating whether to skip Byron. diff --git a/docs/website/contents/for-developers/Genesis.md b/docs/website/contents/for-developers/Genesis.md deleted file mode 100644 index aab5c652a2..0000000000 --- a/docs/website/contents/for-developers/Genesis.md +++ /dev/null @@ -1,777 +0,0 @@ - - -# Cardano Genesis - -This document contains the High-Level Design for adding Ouroboros Genesis to the existing Cardano implementation of Ouroboros Praos. - -## Prerequisites - -The following is taken for granted. - -- The reader is familir with the core architecture of the existing Praos implementation ([ChainSync](Glossary#chainsync) mini protocol, [BlockFetch](Glossary#blockfetch) mini protocol and decision logic, etc). -- The reader is aware of the motivation for Ouroboros Genesis ([paper](https://iohk.io/en/research/library/papers/ouroboros-genesis-composable-proof-of-stake-blockchains-with-dynamic-availability/) & [blog post](https://iohk.io/en/blog/posts/2023/02/09/ouroboros-genesis-enhanced-security-in-a-dynamic-environment/)) over Ouroboros Praos ([paper](https://iohk.io/en/research/library/papers/ouroboros-praos-an-adaptively-secure-semi-synchronous-proof-of-stake-protocol/)), ie safe decentralized syncing. - -## Notation - -- {X Y Z} indicates the definition of X Y Z, helpful for use with search functionality, such as CTRL-F. - -- Occurences of the word _peer_ in this document almost always means upstream peer, one providing blocks to the syncing node. - -- {Valency} is the number of upstream peers. - -- {Kcp} is the `k` [security parameter](Glossary#security-parameter) parameter of the Common Prefix property of Ouroboros Praos: how many blocks a well-connected honest node might possibly need to roll back in order to adopt the honest network's latest best chain. - -- {Δ} is the parameter from Ouroboros Praos's security argument: the maximum delay before a block reaches every well-connected honest node. - -- {∩} is the intersection operator: X∩Y is the longest chain that is a prefix of both X and Y. - -- {Scg} is the `s` parameter of the [Chain Growth](Glossary#chain-growth-property) property of Ouroboros Praos: the greatest possible number of slots it might take for the honest chain to grow by Kcp. - -- {Sgen} is the s parameter of the [Ouroboros Genesis chain selection rule](Glossary#genesis-chain-selection-rule): how many slots after an intersection are considered when comparing two competing chains' densities. - This document assumes Sgen equals Scg, though other possibilites will be discussed in [Parameter Tuning](#parameter-tuning) below. - -## Requirements - -Any implementation of Genesis in Cardano must satisfy the following requirements. - -- {No Praos Disruption}: The new behaviors do not alter the behavior of a node that is already done syncing with the network, ie the Ouroboros Praos behaviors. - -- {Sync Safety}: If the syncing node always has at least one peer that is honest, not itself syncing, and connected with reasonable latency and bandwidth to the syncing node as well as the honest network, then the syncing node will never select more than Kcp blocks of a chain that is not extended by a recent selection of some honest nodes in the network (ie approximately within Δ). - The antecedent of that implication is the {Honest Availability Assumption} ({HAA}). - It is beyond the scope of this design to ensure the HAA, but it seems viable even if non-trivial (see the Diffusion Layer's _Ledger Peers_ design). - It is important to note that the Sync Safety requirement directly prevents the [_long-range attack_](Glossary#long-range-attack), which was the original motivation for Ouroboros Genesis. - -- {Sync Liveness}: The upper bound of unnecessary delay incurred during some interval of the sync is proportional to how many of the syncing node's upstream peers in that same interval are adversarial. - It is beyond the scope of this design to ensure that count of adversarial peers remains below some reasonable bound (eg 50). - -- {Limited Sync Load}: The syncing node does not incur unnecessary load on the honest network. - For example, a syncing node should only request the same block from more than one peer as a last resort. - -- {Disaster Tolerance}: Given sufficient configuration (that is hopefully temporary), the new behaviors should work even despite a disaster on the Cardano network. - -## Components - -This design consists of the following components. - -- The {Lightweight Checkpointing} logic allows for configuration data (comparable in potency to the genesis block) to force the node to reject some chains as invalid by fiat. - -- The {Genesis State Machine} ({GSM}) determines whether the node has finished syncing. - Moreover, while the node is not syncing, the GSM disables all components of this design except Lightweight Checkpointing and the GSM itself. - -- The {Limit on Eagerness} ({LoE}) prevents the syncing node from selecting more than Kcp blocks beyond the intersection of its peers' latest selections. - That interesction is called the {LoE anchor}. - (The implementation maintains an LoE fragment. - In an unfortunate collision of names, the LoE anchor is the tip of the LoE fragment, _not_ its [`anchor`](https://github.com/IntersectMBO/ouroboros-network/blob/88bf7766ddb70579b730f777e53473dcdc23b6d0/ouroboros-network-api/src/Ouroboros/Network/AnchoredSeq.hs#L94), see here[^loe-anchor-example] for an example.) - -- The {Genesis Density Disconnection} logic ({GDD}) disconnects from any advertised peer whose chain has too few blocks to be the honest chain and could prevent the syncing node from finishing. - There are some absolute limits, such as having no blocks at all within some interval of Scg slots. - The primary rule, though, involves comparisons between peers: disconnect from any peer whose advertised selection X doesn't have more blocks in the Sgen slots after its intersection X∩Y with any other peer's advertised selection Y than does Y, if Y has more than Kcp blocks after X∩Y. - -- The {Limit on Patience} ({LoP}) disconnects from any peer that is claiming to have subsequent headers on its selection but not sending them promptly. - -- The {ChainSync Jumping} optimization ({CSJ}) avoids fetching the honest header chain from more than one peer. - -- The {Devoted BlockFetch} decision logic ({DBF}) of a syncing node prefers to request blocks from only one peer at a time, the first peer it finds that serves the best available header chain and serves the blocks faster than the syncing node can validate them. - The Honest Availability Assumption ensures that one such peer exists. - -- The {Node Versus Environment} tests scrutinize the behavior of the partially-mocked node when subjected to adversarial inputs. - These are notably the first Cardano Consensus Layer tests to explicitly simulate non-trivial adversarial behaviors. - -All components are also depicted in the following diagram, with the exception of the GSM, which simply disables all other Genesis components (except Lightweight Checkpointing). - -```mermaid -graph LR - LightweightCheckpointing[Lightweight Checkpointing] - - subgraph ChainSel - LoE[Limit on Eagerness] - end - - subgraph ChainSync - LoP[Limit on Patience] - CSJ[ChainSync Jumping] - end - - GDD[Genesis Density Disconnection logic] - - DBF[Devoted BlockFetch] - DBF -- "new blocks" --> ChainSel - - LoEAnchor{LoE anchor} - - ChainSync -- "(enriched) candidate fragments" --> GDD - GDD -- "kills peers with low-density chains" --> ChainSync - GDD -- "maintains" --> LoEAnchor - - LoEAnchor -- "influences" --> LoE - - LightweightCheckpointing -- "reject certain blocks" --> ChainSync - LightweightCheckpointing -- "reject certain blocks" --> ChainSel - - ChainSync -- "candidate fragments" --> DBF - - LoE -- "stalls until we disconnect peers offering low-density chains" --> GDD -``` - -## How Components satisfy Requirements - -At a high-level, those requirements are satisfied by those components for the following reasons. - -- The Lightweight Checkpointing logic directly ensures Disaster Tolerance; during and/or after the disaster, some decision process (likely off-chain) would certify some additional checkpoints. - With sufficient checkpoint configuration data, a syncing node will be able to succesfully sync past a disasterously sparse section of the network's historical chain. - - Specifically, this allows for the GDD to favor some alternative chains over the network's densest chain, since a configured checkpoint could prevent the GDD from ever seeing those alternatives. - As a side benefit, this means the initial Genesis deployment can include checkpoints that cover the Byron era, which has different density characteristics, and some portions of the historical chain that are unusually sparse. - Without checkpoints, it's theoretically possible that the "missing" blocks all ended up on some unknown adversarial chain that the GDD would actually prefer to today's Cardano network's chain. - -- The GSM directly ensures No Praos Disruption (unless the node becomes [eclipsed](Glossary#eclipse-attack) or the honest chain actually stops growing for too long). - -- The LoE directly ensures Sync Safety, because the Honest Availability Assumption ensures that the LoE anchor is a prefix of the latest honest chain. - -- The GDD and LoP together ensure the LoE anchor will advance --- and with only moderate delay --- which is necessary but not sufficient for Sync Liveness. - In particular, one honest peer suffices for the GDD to disconnect from every peer that is advertising an alternative chain, based on the core assumption of Ouroboros Genesis that the honest network's historical chain is denser than any alternative. - -- The advancing LoE anchor and DBF together ensure Sync Liveness. - -- The CSJ and DBF together ensure Limited Sync Load. - -- The Node Versus Environment tests provide assurance that each component is correct. - -The descriptions of each component in the remainder of this document will include lower-level reasoning in support of these claims. -A single completely detailed proof would be ideal, but is beyond the project's resources. - -## Component-level Designs - -Each subsection specifies the high-level design of one component. - -### The Lightweight Checkpointing Component - -[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L318) - -The Lightweight Checkpointing is one of the simplest components. -The node configuration data will include a list of pairs of block number[^checkpoint-block-vs-slot-no] (ie chain length) and hash. - -[^checkpoint-block-vs-slot-no]: We decided to use pairs of block numbers and hashes as the resulting semantics are very simple, in particular because that any sufficiently long chain will contain a block with a given block number, in contrast to slot numbers (as slots can be empty). Depending on the exact context, one scheme or the other might be more convenient. - -Each pair N and H incurs an additional predicate to that node's header validation: if a header's block number is equal to N, then the header is valid if its hash is H. - -If some interval of the desired historical chain is sufficiently sparse that the GDD might not prefer it, then checkpoints can be used to prevent the GDD from being aware of any competing alternative chains. -There are two main options. - -- Add a checkpoint in at least each interval in which the desired chain doesn't necessarily have greater GDD density than some potential alternative chain. - This ensures the node will never see an alternative chain that would cause the GDD to disconnect from peers serving the (by fiat) desired chain. -- Add merely one checkpoint that is after the weak interval. - This is enough to ensure that a node that was tricked onto an alternative chain will not be able to finish its sync. - But it's not enough to ensure the node will end up on the same chain as the honest network. - -It cannot be emphasized enough that the list of checkpoints in the configuration data must be obtained from/signed by a trusted source. - -The Lightweight Checkpointing component is always active, regardless of whether the node is syncing. -This could be changed, but this configuration data already needs such care that it shouldn't matter. -In particular --- except perhaps _during_ a disaster scenario --- no configured checkpoint should ever be recent enough to affect a node that had already synced the desire chain, as required by No Praos Disruption. - -This component makes the Sync Safety requirement more flexible/expressive/accomodating, since it introduces the possibility of the community deciding to explicity overrule the GDD comparison for some (eg sparse) interval of the historical chain. -In particular, this flexibility may be required by Disaster Tolerance: both during a disaster and even possibly after it, if the community decides to remain on that chain despite its weak interval. -Ultimately, though, disasters may require more severe remediation, such as temporarily falling back to the Bootstrap Peers mechanism instead of Genesis. - -### The Genesis State Machine Component - -[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node/GSM.hs) - -The Genesis State Machine has three states. - -- The {PreSyncing} state artificially sets the LoE anchor to the node's ImmutableDB tip --- the node cannot make any commitments. -- The {Syncing} state enables all of the functionality introduced by this design. -- The {CaughtUp} state disables all of functionality introduced by this design except for Lightweight Checkpointing. - A node in the CaughtUp state is "just running Praos", and so it no longer needs to _constantly_ ensure the HAA. - -The transitions are triggered as follows. - -- The nominal path consists of a cycle among the three states. - - The GSM transitions from PreSyncing to Syncing when the Diffusion Layer indicates the HAA is satisfied. - - The GSM transitions from Syncing to CaughtUp when every peer simultaneously indicates that is has no subsequent headers to send and the syncing node has selected a chain no worse than any received header. - This trigger is notably not time based, because an adversary is free to create an alternative chain with a very young tip in order to cause the node to lower its defenses by selecting it. - This is especially true in the context of an adversarial CSJ Dynamo (see below), which has a temporarily disproportionate influence over the syncing nodes selection. - - The GSM transitions from CaughtUp to PreSyncing only when the node's selection is older than MaxCaughtUpAge (eg the node was offline for a few hours). - The MaxCaughtUpAge duration is a parameter of this design; see [Parameter Tuning](#parameter-tuning) below for constraints on it. - Moreover, this transition is delayed by some small random duration (eg <5 minutes) in order to avoid an undesired simultaneity amongst honest nodes within a struggling honest network. -- But that path is not necessarily guaranteed. - - The GSM transitions from Syncing to PreSyncing if the Diffusion Layer indicates the HAA is no longer satisfied. - -This diagram visualizes that state machine. - -```mermaid -graph - PreSyncing[PreSyncing] - Syncing[Syncing] - CaughtUp[CaughtUp] - - PreSyncing -- "HAA is satisfied" --> Syncing - Syncing -- "HAA is no longer satisfied" --> PreSyncing - Syncing -- "all peers have most recently sent MsgAwaitReply\nand the selection is ≥ the best header" --> CaughtUp - CaughtUp -- "selection became older than MaxCaughtUpAge" --> PreSyncing - - StartUp[[Node start-up]] - StartUp -- "node was most recently in CaughtUp\nand selection is younger than MaxCaughtUpAge" --> CaughtUp - StartUp -- "otherwise" --> PreSyncing -``` - -The node initializes its GSM in PreSyncing unless it was in the CaughtUp state when the node previously shutdown and the tip of the node's initialized selection is still younger than MaxCaughtUpAge (ie it wouldn't immediately transition to PreSyncing). -The GSM therefore maintains a marker file on disk as a persistent record of whether it is in the CaughtUp state. - -The GSM state does not influence whether or not the node attempts to mint blocks. -Superficially, one would expect that a Syncing node needn't bother minting blocks --- and perhaps even shouldn't --- since those misused elections might give the adversary an advantage. -On the other hand, the transition from Syncing to CaughtUp may be preceded by a duration in which the syncing node has the full chain but some peers are preventing it from concluding it has finished syncing. -Wasting an election on a stale chain seems preferable to missing a minting opportunity. - -This component directly ensures No Praos Disruption, since the CaughtUp state disables all of the extra features and the Syncing state does not inhibit minting. -The only difference is that the node will defensively transition to PreSyncing if it sees no new blocks for too long, eg if it's eclipsed for a duration of MaxCaughtUpAge and/or if the honest network actually doesn't mint blocks for a duration of MaxCaughtUpAge. - -When reasoning about this overall design, a virtual fourth state is often important to consider. -The node is "almost CaughtUp"/"almost done syncing"/etc when it's technically in Syncing but its immutable tip is relatively close to the wall clock. -This is the most difficult state to reason about because the new components are enabled while peers could be justifiably sending MsgAwaitReply and/or MsgRollBack. -These messages are trivial to handle when syncing obviously historical parts of the chain, since they immediately indicate that the peer does not satisfy the HAA. -But when it's almost CaughtUp, the new components must accommodate the potentially non-monotonic/stuttering/non-committal/reneging/etc semantics of these messages --- especially since even honest peers might be sending them. - -### The Limit on Eagerness Component - -Link to code: [Trimming candidates](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L691) [Trigger without block](https://github.com/input-output-hk/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L320) - -The LoE is another of the simplest components. -The LoE prevents the syncing node from selecting a block that is more than Kcp ahead of the LoE anchor, the intersection of all _current_ peers' header chains. -(Recall the exception that PreSyncing instead fixes the LoE anchor to the tip of the ImmutableDB.) - -It is possible for the LoE anchor to move backwards, for example if a peer sends a roll back or if the syncing node connects to a new peer on a chain no one else was serving. -This is the only way that the node's selection could be more than Kcp blocks ahead of the LoE. -Because of the HAA, the GDD cannot favor this new chain, and so the GDD/LoP will disconnect from the peer unless it switches to the best chain. -Thus such violations will be ephemeral in the design's assumed environment. - -The LoE anchor will always be an extension (possibly non-proper) of the ImmutableDB tip. -Note that the ChainSync client already prohibits peers from rolling back past the ImmutableDB tip. - -One subtle consequence of the LoE is a necessary change in the existing Praos implementation. -The chain selection logic ({ChainSel}) is currently only triggered by a block arriving. -However, when the LoE is enabled, ChainSel must also be triggered whenever the LoE advances, even if a block did not arrive. -This may seem unnecessary, based on the idea that a subsequent block arrival should happen within some reasonable time bound. -But that is not necessarily true. -There are edge-case scenarios in which no additional blocks will arrive because none have been requested, which cannot happen until new headers are validated, which cannot happen until the forecast range advances, which cannot until the selection advances, which cannot until the LoE anchor advances. - -Moreover, due to the now-spoiled invariant, ChainSel is implemented in the context of "the block that just arrived". -There isn't necessarily such a block when the LoE advances, so the new trigger of ChainSel must emulate that. -Thus, whenever the LoE changes, ChainSel is invoked once per block in the VolatileDB that is an immediate successor of the tip of the ImmutableDB. -(That is equipotent to reprocessing the ImmutableDB tip itself, but only involves mutable blocks.) - -This component directly ensures Sync Safety, since the HAA ensures that the LoE anchor is on the honest chain. -It is worth emphasizing that every subsequent component below is designed for the sake of Sync Liveness and Limited Sync Load --- the LoE alone suffices for Sync Safety. - -### The Genesis Density Disconnection Component without CSJ - -[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L10) - -The GDD must disconnect from any peers serving chains that are preventing the LoE from advancing and also can be inferred to not be the best chain. - -The logic compares every ordered pair of peers. -An optimization could avoid symmetric comparisons, but that factor of two doesn't appear to be necessary for the relatively small expected upstream peer counts. - -Let {the GDD window} be the Sgen slots after the LoE anchor. -Also, observe that when a peer's latest message was MsgAwaitReply, the syncing node must assume that peer does not have subsequent headers to send. -That might be an incorrect assumption, but only for the short duration until the peer's next ChainSync message arrives. - -The GDD will disconnect from a peer P due to comparison to a peer Q if all of the following conjuncts hold simultaneously. - -- P and Q disagree on which header directly succeeds the LoE anchor. - To clarify, this conjunct is satisfied if (but not only if) P's latest message was MsgAwaitReply but Q already sent a header. - Additionally, this disagreement can be determined even if P's first header after the LoE is not in the syncing node's forecast range: its validity is not yet relevant. - -- Q has sent more than Kcp (valid) headers after the LoE anchor. - This prevents typical Praos short forks from triggering the GDD when the node is almost done syncing. - -- Either P's latest message was not MsgAwaitReply or else P does not already have more headers in the GDD window than Q does. - -- Either P's latest message was MsgAwaitReply or else no extension of P's chain could have more headers in the GDD window than Q already does. - The non-existence of any such an extension is conservatively established by there being too few slots in the portion of the GDD window that is after P's header chain. - -This component contributes to Sync Liveness. -The LoP component (in the next section) ensures that peers sending an alternative history must soon enough reveal their chain's sparseness so that the GDD will disconnect from them when compared to one of the HAA-satisfying peers. - -In the "with CSJ" section below, the GDD is enriched beyond its primary responsibility for the sake of the CSJ design. - -To prevent this component from spoiling Sync Liveness, this relatively-expensive calculation is rate-limited with a parameter {GddRateLimit}; see the [Parameter Tuning](#parameter-tuning) section. - -### The Limit on Patience Component - -Link to code: [Token bucket](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Util/LeakyBucket.hs#L30), [ChainSync integration](https://github.com/input-output-hk/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client.hs#L1905) - -If a peer claims to have subsequent headers, they must send them promptly. -Otherwise, a disagreement amongst two peers might suffice to prevent the LoE anchor from advancing but not suffice for the GDD to make a decision. - -This is in tension with the fact that any honest peer will inevitably exhibit some bursts of latency --- even just garbage collection could cause it, eg, whether that collection be on the local node or on the remote peer. - -To accomodate this tension, the LoP is implemented as a token bucket. -The bucket drips unless the peer has most recently sent MsgAwaitReply or their latest header is beyond the syncing node's forecast range. -If the bucket is ever empty, the LoP disconnects from the peer. -A token is added to the bucket whenever the peer sends a valid header that is longer (a la the block number) than any header they had previously sent, but it's discarded if the bucket is already full. - -The rate TDRIP at which the bucket drips and its maximum capacity TCAP are design parameters that must be tuned, see [Parameter Tuning](#parameter-tuning) below. - -This component contibutes to Sync Liveness because it forces a peer to enable a GDD decision within a duration of at most TDRIP × (TCAP + L), where L is the number of headers that can be in their alternative chain's GDD window before the GDD disconnects them. -Parameter Tuning will ensure this is less than one minute per adversarial peer, for example. - -### The ChainSync Jumping Component - -[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client/Jumping.hs#L14) - -The ChainSync Jumping optimization is a backwards compatible optimization of the ChainSync mini protocol. -Instead of simply running the normal ChainSync mini protocol with every peer, CSJ runs it with at most two while syncing the historical chain. -This saves significant bandwidth and CPU for both the syncing node and all but one of its honest upstream peers. -By the time the node transitions to the CaughtUp state, all peers will be running full ChainSync --- CSJ inherently ensures that, in addition to the GSM. - -The {CSJ governor} is centralized logic that divides peers into the following roles. - -- The {Dynamo} is a peer chosen to run full ChainSync. - It has never sent MsgAwaitReply or MsgRollBack. - -- A {Jumper} is a peer that idles until the CSJ governor occasionally sends it a MsgFindIntersect that offers to jump its header chain to the Dynamo's current header chain. - -- A Jumper that rejects its offered jump becomes a {PreObjector}. - It sends subsequent bisecting MsgFindIntersect messages until its intersection with the Dynamo is exactly identified and then idles. - (A PreObjector is referred to as a "dissenting jumper" in the code.) - -- The {Objector} is one of the PreObjectors with the oldest intersection with the Dynamo. - It also runs full ChainSync, in order to compete with the Dynamo via the GDD. - -- A {Disengaged} peer no longer participates in the CSJ optimization; it runs full ChainSync. - These are peers that have sent MsgAwaitReply or MsgRollBack. - -Under some circumstances, the CSJ governor must choose a new Dynamo. -The only constraint on this choosing mechanism is that it should eventually find an HAA-satisfying peer. -For example, a simple round-robin queue or random choice would suffice, excluding Disengaged peers. -This specification suggests using a round-robin queue such that the head of the queue is the Dynamo. -Peers are removed from the queue when they become Disengaged. -Peers are added to the end of the queue when they are first connected to. -(The Devoted BlockFetch component specified below will also introduce an event that causes a peer to be moved to the end of this queue.) -This is named the {Dynamo candidate queue}. - -The Dynamo offers a jump whenever its header chain has advanced by {MinJumpSlots} slots since it last offered a jump; the value of the MinJumpSlots design parameter is discussed in the [Parameter Tuning](#parameter-tuning) section. -To offer a jump, the Dynamo makes a copy of its current candidate chain C and (via the CSJ governor) sends a corresponding MsgFindIntersect to every Jumper. -If a Jumper accepts the entire jump, it's header chain is updated to C. -If a Jumper refuses, additional bisecting MsgFindIntersect messages are sent to that peer in order to determine the exact intersection of its selection with C, and the peer becomes a PreObjector. -While there are some PreObjectors, one with the oldest intersection is promoted to be the Objector, which might require demoting the current Objector back to PreObjector. -It is crucial that no PreObjector has an older intersection than the Objector, since otherwise the forecast range might not be able to sufficiently advance for the GDD to resolve the competition between the Dynamo or the Objector. -It is also important that there is only one Objector at a time, since all honest Jumpers would disagree with an alternative chain served by an adversarial Dynamo; multiple honest Objectors would violate the Limited Sync Load requirement. - -Whenever a new peer becomes the Dynamo (eg because the GDD killed the previous Dynamo), all others peers (even the Objector) forget their most recent jump offer and are reset to Jumper. -The new Dynamo immediately offers a jump to all Jumpers. - -If an Objector or a Dynamo sends MsgAwaitReply or MsgRollBack, then it immediately becomes Disengaged. -In order to prevent adversarial peers from using MsgAwaitReply or MsgRollBack in order to waste the syncing nodes bandwidth and CPU by running full ChainSync for the historical chain, CSJ also enforces a {Limit on the Age of MsgAwaitReply/MsgRollBack}. -This cannot be a perfect mitigation, since it's possible that an honest peer would need to rollback a header that is at most Scg slots old, even though that's very unlikely. -But it's sufficient to simply limit that extra CPU cost to the final Scg window of the sync, instead of potentially paying that cost for the entire age of the chain. -The maximum allowed age of a rolled back header is HistoricityCutoff, which cannot be less than Scg; see the [Parameter Tuning](#parameter-tuning) section below for more details. -Any MsgRollBack that rolls back a header older than HistoricityCutoff (according to the wall clock) and any MsgAwaitReply that is sent when the candidate fragment tip is older than HistoricityCutoff immediately incurs a disconnection from that peer. - -The Dynamo, Objector, and every Disengaged peer are continually subject to the standard LoP. -A CSJ Jumper's token bucket does not leak, though it does gain tokens when the Jumper accepts (some of) a jump, since the peer has effectly sent those headers. -When a Jumper refuses a jump, it is only subject to the existing relatively-generous MsgFindIntersect timeout. -This may let an adversarial peer prevent the LoE anchor from advancing for a some minutes, but either the exact intersection is found, this PreObjector is reset to Jumper, or the peer is disengaged for sending a roll back. - -This component contributes to Sync Liveness and Limited Sync Load by eliminating redundant ChainSync exchanges. -Under normal circumstances, all honest peers will be serving the singular historical chain. -CSJ eliminates the wasteful remote retrieval and local validation of each honest header by only syncing it once instead of once per peer. - -### The Genesis Density Disconnection Component with CSJ - -[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L268) - -There are two possible deadlocks introduced by CSJ. -Both can be resolved by implementing additional disconnections according to Genesis density comparisons. - -- Without CSJ, the GDD is always comparing each peer to the best header chain a HAA-satisfying peer can provide. - With CSJ, the HAA-satisfying peers might instead be dormant as PreObjectors, with the Dynamo and Objector both adversarial. - - There's no guarantee in that scenario that the competing header chains of the Dynamo and Objector will (eventually) include more than Kcp headers. - Since that is one of the plain GDD's required conjuncts, the syncing node would be stuck. - This state might last a very long time, violating Sync Liveness, since the Dynamo and Objector could each send a header beyond the forecast range in order to also avoid the LoP. - - To prevent this attack, the GDD trigger is relaxed for the sake of CSJ. - Specifically, Q does not need to have sent more than Kcp (valid) headers after the LoE anchor if P has already sent a header beyond the GDD window. - - It's safe to make the GDD disconnect in more scenarios, as long as it will still never disconnect from an HAA-satisfying peer outside of a disaster scenario. - In this case, if there has been no disaster and P satisfies the HAA, then Praos Chain Growth ensures P's chain will have more than Kcp headers in the GDD window. - If this relaxed GDD were to disconnect from P, then Q must have at least as many headers as P, and so the plain GDD's conjunct would also have been satisfied. - -- Similarly, if the HAA-satisfying peers are all dormant, then it's possible that the node's selection is simultaneously longer than every peer's header chain and also branches off from some proper prefix of the LoE anchor. - This is an unusual scenario, but may arise, for example, if the previous Dynamo recently disconnected (which implies it did not satisfy the HAA). - In this case, the DBF logic would idle, since no peer's header chain is better than the selection --- the node would not select the peers' blocks even if they did somehow arrive, since they're worse than the current selection. - Moreover, deadlock is possible, since the Dynamo and Objector forecast ranges' do not necessarily include the entire GDD window. - Thus the GDD is not necessarily able to make a decision between them, just as in the previous deadlock. - - A relatively simple fix is suggested by the observation the GDD only compares peers to peers and not to the node's selection. - Filling this blindspot suffices to prevent the deadlock. - The new logic fits nicely in the ChainSync client, instead of in the GDD itself, since it only involves a single peer at a time. - - If a MsgRollForward arrives that is beyond the forecast range (ie Scg slots beyond the intersection with the node's selection) but the predecessor of the new header (ie the tip of its validated header chain) is not preferable to the selection, then disconnect from the peer. - This is effectively a Genesis density comparison between the peer and the syncing node itself (but not necessarily in the GDD window, which is always anchored in the LoE anchor). - Even if Sgen were less than Scg, this comparison would still be sufficient and sound, since Sgen = Scg is the most conservative assignment of that Genesis parameter. - - In some sense, this rule is an optimization of the existing ChainSync client logic. - It fires as soon as it becomes inevitable that the existing logic will subsequently terminate with ForkTooDeep. - -The latter addition also prevents another deadlock. -If a peer P sends a header beyond the GDD window without having sent any headers within the GDD window, then it must be disconnected from. -Because Sgen = Scg, such a chain includes a gap at least as large as the forecast range. -No ChainSync client can progress past such a gap. -This has always been true, and it has long been identified as a disaster scenario, since it is a severe violation of Chain Growth (PR https://github.com/IntersectMBO/ouroboros-network/pull/2844 is related future work, but remains Closed). -With CSJ, though, it's now possible that the Dynamo and Objector are stuck on such a gap while some PreObjector would be able to progess if it weren't dormant, just as in the deadlocks discussed above. -Because this trigger does not require a comparison against another peer, not even Lightweight Checkpointing can prevent it. - -The following concrete example of the second deadlock arose in our property tests, inspiring the fix specified above. -(It could be minimized further, but this one was actually generated.) - -``` - Kcp = 5, Scg = 8, Sgen = 8 - - slots: 0 1 2 3 4 5 6 7 8 9 10 - trunk: G──1─────2──3──4─────5──6──7──8─── Honest 1 - ╰──3───────────4──5──6──7 Adversary 2 - ╰──3──4────────5─────6──7 Adversary 3 - ╰─────1──2─────3──4────────5─────6 Adversary 1 -``` - -Suppose Adversary 1 is the Dynamo first, serves its chain up to the block 5-8, and then the peer disconnects. -If Adversary 2 becomes the Dynamo and Adversary 3 becomes the Objector (or the other way around), then the (HAA-satisfying) honest peer is dormant as a PreObjector. -In this case, the LoE anchor is the block 2-2, but _not_ the 2-2 that's on the selection. -This is an example of how the selection can be longer than the LoE anchor but not extend it, which is how the second deadlock above arises. -Note again that the forecast range (anchored in G) for the Dynamo and Objector ends in slot 7, which means neither chain can become longer than the selection. -(The block used in this test does not have any tiebreakers, so DBF will not fetch the 5-7 block. -Even supposing tiebreakers, there's no guarantee that it would.) - -This component contributes to Sync Liveness by mitigating the discussed deadlocks, ultimately compensating for the fact that the HAA-satisfying peers might be dormant in the PreObjector state. - -### The Devoted BlockFetch Component - -> Note that in the code, this component is still called *BulkSync BlockFetch* at the moment. - -[Link to code](https://github.com/IntersectMBO/ouroboros-network/blob/28b731cde005a1de0b4be0ea0bd16852e827c1bc/ouroboros-network/src/Ouroboros/Network/BlockFetch/Decision/Genesis.hs#L9) - -The rationale for Devoted BlockFetch continues the theme from the HAA and CSJ: one peer suffices for actually fetching the chain, once identified the amongst the peers. -For this component, the key insight is that --- so far, at least --- most Cardano blocks can be trasmitted much faster than they can be validated. -Thus, once the syncing node starts requesting blocks from a peer that satisfies the HAA, blocks will tend to arrive faster than the syncing node can process them. -That's a sufficient steady-state because the syncing node doesn't need to receive blocks any faster than that; doing so would just be wasting bandwidth, its own and its peers'. -As a result, under nominal conditions, the syncing node will be able to fetch blocks from just one peer at a time. - -While in the Syncing state, the node will only send BlockFetch requests to one peer at a time. -If that peer serves the blocks faster than the node can validate them, then it will continue to request blocks from that peer. -There are two additional concerns. - -- The first time the syncing node sends a request to some peer, that peer will of course not be able to instantly respond. - A naive implementation of the above rule would therefore irrationally penalize that peer for "starving" the node. - This motivates the {BlockFetchGracePeriod} in the logic below; see [Parameter Tuning](#parameter-tuning) for constraints on its value. - -- The syncing BlockFetch logic should, like the normal Praos BlockFetch logic, still only request blocks from a peer that are on that peer's header chain. - The syncing node's peers may have sent different header chains; they might disagree or merely be prefixes of one another. - -In summary: prioritize both fetching blocks from the longest header chain and also fetching blocks from the same peer as long as they're arriving faster than they can be validated. - -The following specification of the DBF logic maintains two variables, the set E of blocks that are considered in-flight, and the latest time T at which E was empty. -When the node is initialized, E should be the empty set and T should be the current wall clock. -(The implementation is free to maintain these variables in some other equivalent way.) - -Each iteration of the DBF logic executes the following steps. - -- If E is non-empty, then all those blocks were requested from a single peer --- that's the DBF invariant motivated above. - If now > T + BlockFetchGracePeriod and the ChainSel logic has been blocked on an empty work queue at any point since the previous DBF logic iteration, then set E to the empty set. - (The BlockFetch state must still ultimately track those blocks as in-flight, in order to enforce timeouts, per peer in-flight limits, etc. - But the DBF logic is no longer influenced by those in-flight requests.) - Also, if that peer is the Dynamo, signal the CSJ governor to rotate some other peer in as the Dynamo, if another peer is eligible. - -- Let the {desired headers} be the headers that are on the most preferable header chain but their blocks haven't already arrived. - Note that some desired headers might be in E. - -- If E is non-empty and that peer's header chain includes the first desired header, choose that same peer again. - -- Otherwise, set E to empty and set T to now. - Also, choose one of the peers whose header chain includes the first desired header. - The only constraint on this choosing mechanism is that it should eventually find an HAA-satisfying peer. - For example, a simple round-robin queue (which would first be filtered according to the presence of the first desired header) or random choice would suffice. - It is suggested to reuse the Dynamo candidate queue, since both mechanisms are intended to find an HAA-satisfying peer. - -- Prepare the next request for the chosen peer, using the same logic as in the existing Praos BlockFetch decision logic, except first truncate the chosen peer's header chain by intersecting it with the desired headers. - Note that this may result in no request being made in this DBF iteration. - For example, the chosen peer might be in the PeerFetchStatusBusy state. - -Some alternatives are worth mentioning. - -- BlockFetch does already have a low-level timeout of 60 seconds on its requests. - That is an insufficient per-request defense against an adversary, though; BlockFetchGracePeriod will be significantly shorter. - Moreover, BlockFetchGracePeriod does not disconnect from a peer, it merely deprioritizes it for CSJ Dynamo and DBF choices. - In particular, it's very likely that an honest node will occasionally fail to serve blocks for BlockFetchGracePeriod, so disconnecting would be too aggressive. - Block costs are more variable than header costs, so a token bucket like in the LoP is less obviously applicable here. - -- A possible alternative to the BlockFetchGracePeriod duration would disable the check just for the first in-flight block, but practical networking concerns such as the TCP congestion window make a time-based condition more effective and easier to reason about. - -- It would be possible to let a peer finish sending their in-flight blocks even if they aren't serving any of the desired headers. - This would avoid the risk of subsequently requesting those blocks from someone else. - However, that risk is unlikely and relatively low severity, so it seems more important to not delay fetching the better chain. - -- The logic could require that the chosen peer is serving more than just the first desired header. - There is a tension here. - The existing logic maximizes the number of peers considered, for example, which in turn maximizes the chance the same node could be chosen (in particular, even when they're not also the Dynamo), thereby avoiding another opportunity for the adversary to delay for a duration of BlockFetchGracePeriod. - But it also risks wasting a round-trip to fetch just one block instead of prematurely switching peers in order to fetch potentially many blocks from a newly chosen peer. - -- It would be acceptable to not demote the Dynamo if it fails to send blocks fast enough. - However, as a side effect of CSJ, the Dynamo's header chain will almost always be the longest header chain. - So it seems beneficial to act upon any indication that the Dynamo does not satisfy HAA. - -- The logic cannot be simplified to merely always choose the Dynamo. - One key reason is because there is not necessarily any Dynamo at all when the node is almost done syncing. - Similarly, the Dynamo isn't necessarily serving the longest header chain. - Another is because an adversarial Dynamo could satisfy the GDD and LoP but be extremely slow to serve blocks (although demoting the Dynamo if it's too slow to send blocks might suffice to redress this). - -This component contibutes to Sync Liveness for two reasons. - -- The node cannot be stuck indefinitely. - If the unfetched blocks of the longest chain are offered only by adversarial peers, then the node will only request blocks from them. - The adversary can simply withhold those blocks, and the node will wait for a duration of BlockFetchGracePeriod before it considers requesting from a different peer. - But it might be in the same state once it does. - - The node can escape this state in a few ways, but the most important is that the longest header chain will soon enough be held by an honest peer. - When the node is syncing the historical chain: GDD and LoP ensure that the longest header chain of any peer will soon be the (honest) historical chain, and so offered by all honest peers --- CSJ doesn't spoil this because it will eventually offer a jump. - When the node is almost done syncing: a healthy Praos network will frequently have its longest chain held by honest peers, so HAA ensures some honest peer's header chain will become the new longest chain. - -- If all peers have the longest chain, the syncing node might unfortunately choose to request it from an adversarial peer. - That adversarial peer can withhold blocks for BlockFetchGracePeriod, after which time the node will re-request those blocks from another peer. - - The probability of each chosen peer being adversarial is proportional to the ratio of honest to adversarial peers. - The HAA merely requires this to be greater than 0; it could be 1 out of 30, for example. - The lower this ratio, the longer it will take the DBF to find a peer that satisfies the HAA, assuming each adversarial peer is delaying the node for a duration of BlockFetchGracePeriod. - But once such a peer is found, the node will fetch as many blocks from it as possible. - (Unfortunately that might not be all blocks, since the Dynamo might eventually be the only one with the longest chain.) - -This component also contributes to Limited Sync Load, since it avoids unnecessarily fetching a block from multiple honest peers. - -To prevent this component from spoiling Sync Liveness, this relatively-expensive calculation is rate-limited with a parameter {DbfRateLimit}; see the [Parameter Tuning](#parameter-tuning) section. - -### The Node Versus Environment Tests Component - -We introduce several test modules, which test one or several Genesis components. Refer to the documentation of each function to get a detailed description of each test. - -#### [`Test.Consensus.Genesis.LongRangeAttack`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/LongRangeAttack.hs) - -Checks that the Praos protocol without Genesis is indeed vulnerable to Long Range Attacks. - -#### [`Test.Consensus.Genesis.LoE`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/LoE.hs) - -Tests the LoE module in isolation. - -#### [`Test.Consensus.Genesis.LoP`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/LoP.hs) - -Tests the LoP module in isolation, and its efficiency in stopping a delaying attack. - -#### [`Test.Consensus.Genesis.DensityDisconnect`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/DensityDisconnect.hs) - -Tests the GDD rule in isolation, as well as in conjunction with the LoE. - -#### [`Test.Consensus.Genesis.CSJ`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/CSJ.hs) - -Tests ChainSync Jumping, in conjunction with LoE, LoP, and GDD. - -#### [`Test.Consensus.Genesis.Uniform`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/Uniform.hs) - -Randomly generates various "real life"-ish situations, and checks that the Genesis algorithm yields the correct result, *i.e.* that the tip of the immutable DB ends up within Kcp blocks of the tip of the honest branch. - -## Parameter Tuning - -The design description introduced the following design parameters. -Some of the requirements, especially Sync Liveness and Limited Sync, ultimately depend on these having well-chosen values. -This section therefore motivates the recommended value of each. - -A new piece of jargon improves some of these explanations: -An adversary that is preventing the LoE anchor from advancing is {leashing} the victimized syncing node. - -- Sgen = Scg. - Sgen cannot be greater than Scg, since forecasting wouldn't necessarily allow the headers to be validated before being counted. - Despite the authors of Ouroboros Genesis expected a smaller value would suffice, the engineers have never considered a value less than Scg. - If the requirements (eg no unneccesary delays) can be met while minimizing the adversary's chances, then that seems ideal. - -- TDRIP = 2 milliseconds and TCAP = 5000 tokens. - A peer withholding promised headers would therefore be disconnected within at most 10 seconds. - If the adversary were leashing with a relatively-dense chain, they might be able to extend that to (TCAP + ~4×Kcp)×TDRIP = ~27.28 seconds by earning and spending tokens during the leash. - This could happen at most once per adversary, which the HAA bounds at Valency - 1. - In total, that's at most ~15 minutes of total delay tolerated by the LoP while the node is being leashed. - - While the node isn't being leashed, it's making progress. - Especially with modern Cardano blocks, 2ms is much faster than the typical time to fetch and validate a block. - Thus an adversary cannot protract the sync at all while satisfying the LoP on average. - - If the LoP is spuriously disconnecting from honest nodes unacceptably often, then TCAP could be increased. - The duration for which an adversary could potentially leash the syncing node increases somewhat proportionally, but that's a less severe risk than the syncing node eclipsing itself. - -- GddRateLimit ~ 1 Hz. - When the GDD is eventually triggered, the peer is disconnected from, so an extra delay on the order of seconds seems harmless. - The HistoricityCutoff parameter establishes a reasonable window in which an adversary could attempt to abuse this inattentiveness of the GDD by serving a leashing chain for 999 milliseconds and then serving of non-leashing chain for 1 millisecond, for example, and getting miraculously lucky with the thread scheduling etc. - However, the LoP ultimately bounds how long that game could persist. - -- MaxCaughtUpAge = 20 minutes. - There is a tension in this value. - - Too low and outages that are inevitable in global public interconnects could cause the entire Cardano network to return to PreSyncing embarassingly often. - Prediction Network Solutions has advised that tolerating outages up to 20 minutes without cycling suffices for due diligence. - - Too high, on the other hand, and a node might fall out of sync with the honest network without re-enabling the defenses of Ouroboros Genesis. - It is assumed that a node that missed out on just 20 minutes of honest chain growth is not a significantly higher risk of selecting more than Kcp blocks of an adversarial chain than is a properly caught-up node. - Because the Cardano chain grows by Kcp blocks in about 12 hours, that's only false if the adversary was already very close to creating a private chain that's longer than the honest chain, ie violating Praos Common Prefix. - - It is worth remarking that this MaxCaughtUpAge mechanism is not intended to detect and/or escape from eclipses. - The primary anticipated trigger is a user re-opening their laptop lid, for example. - -- HistoricityCutoff = 36+1 hours. - This value must be greater than Scg of the Cardano chain's current era, which is 36 hours, and will remain so for the foreseeable future. - It seems very unlikely that the community will increase the upper bound on settlement time, but if they did, then HistoricityCutoff would need to increase accordingly. - The extra hour is to eliminate corner cases/risks/etc --- eg 10 minutes would probably suffice just as well. - - The primary cost of increasing HistoricityCutoff is that an adversarial peer could remove themselves from the CSJ optimization, thereby forcing the victim to sync every header younger that HistoricityCutoff from them as well as from the Dynamo. - Thus, the potential cost of HistoricityCutoff is proportional to the number of adversarial peers, which is allowed in the definition of Sync Liveness. - -- MinJumpSlots = 2×Kcp. - Similar to Sgen, this parameter must not be greater than the smallest Scg of any era the node will be syncing. - However, unlike Sgen, Lightweight Checkpointing cannot be used to remove eras from consideration. - Thus, the recommended value of 2×Kcp arises from the Byron era's Scg, since it's the smallest of any era. - - If it's actually Scg, then just before each jump, DBF will have no choice except the Dynamo, since it'll be the only one serving headers. - Note that the Dynamo can't validate the header that's Scg after its previous jump until the syncing node actually _selects_ that previous jump point. - Hence the next jump point won't be in the forecast range until the node has selected (and therefore fetched) the entire header chain of each Jumper. - -- BlockFetchGracePeriod = 10 seconds. - If the node chooses to fetch blocks from an adversarial peer, it could simply refuse to send them. - In that case, the syncing node would give up on them after BlockFetchGracePeriod, and try a different peer. - Once DBF finds an HAA-satisfying peer, however, the node will not be delayed again until it's almost caught-up, since that's when the node could learn of a longer chain that the HAA-satisfying peer might not yet have (ie a short fork or new growth). - Thus the practical worst-case delay via the vector is likely at most several instances of BlockFetchGracePeriod × (Valency - 1), which is almost certainly less than an hour. - - There is a noteworthy corner case. - The entire DBF design is predicated on the assumption that the syncing node can fetch blocks from an HAA-satisfying peer faster than it can validate them. - This is a generally reasonable assumption but could be violated by a node that has a terrible network connection and/or extremely strong compute hardware. - In that case, the node would sync as many blocks from the HAA-satisfying peer as it can in 10 seconds, before being forced to give its adversarial peers an opportunity to abuse BlockFetchGracePeriod. - It would be possibly starved in 10 second increments until it finds another HAA-satisfying peer, which would then last for another 10 seconds. - Thus its duty cycle would still be proportional to the ratio of adverarial peers. - (CSJ would also become unusually inefficient here, since the Dynamo is being rotated so often, many headers will be downloaded multiple times.) - In practice, this corner case is most likely to manifest as a node with a terrible network connection syncing even more slowly than it already would, which seems like a fair exception to the Sync Liveness requirement. - -- DbfRateLimit = 25 Hz. - The DBF logic is relatively expensive to execute, since its intersecting/comparing/etc full chains from each peer (which typically contain ~4×Kcp = 8640 blocks). - However, the average block tends to take tens of milliseconds to validate. - Because BlockFetch requestes are both pipelined and batched, it is unnecessary to analyze them every time a block arrives. - Thus several iterations per second seems sufficient, and benchmarks have shown it leads to neglible overhead. - - The existing BlockFetch logic already has a rate-limit (100 Hz, set in `Ouroboros.Network.Diffusion.Configuration.defaultBlockFetchConfiguration`), but DBF will set the frequency even lower. - It's more important for Caught-Up node to request blocks promptly than a syncing node, since its pipeline tends to be empty. - -## Compatibility with the HardFork Combinator - -The constraint that Sgen <= Scg indicates that the Sgen cannot exceed the smallest Scg of any era on a {HardFork Combinator} ({HFC}) chain. -The only exception to that is if the Lightweight Checkpointing will be used to preclude any alternative chains from some era from even reaching the GDD. - -In particular, the first Cardano era, Byron, has much different growth characteristics; it's Scg is 2Kcp as opposed to the Shelley eras' 60Kcp (ie 3Kcp divided by the active slot coefficient of 0.05). -So Lightweight Checkpointing can very usefully prevent Byron from bounding Sgen, since all Cardano eras since Byron have the same Scg. - -However, the eras before Babbage also have atypical growth characterstics, due to the use of Transitional Praos. -The 60Kcp is still likely a fair asssessment of Scg for these eras, but it's not as directly interpretable as it is as of Babbage. -So Lightweight Checkpointing would also be helpful to dismiss that complication. - -Currently, there are no known plans to alter the Scg or generally Chain Growth in future eras. - -Thus this design ignores the past via Lightweight Checkpointing and ignores the future because it's not known to disrupt the design. -If the future does end up changing Scg, for example, that bridge will need to be crossed then. -For example, perhaps the GDD will need to be aware of the HFC's era transitions and some how accomodate GDD windows that involve more than one era. - -Other parameters such as MaxCaughtUpAge and HistoricityCutoff have this same caveat as Sgen. - -One caveat: MaxCaughtUpAge and HistoricityCutoff are indeed constants in the implementation, but Sgen is actually implemented to vary as the chain transitions eras. -This is technically more complicated than necessary, superseding this specification, due to the planned use of Lightweight Checkpointing to prevent alternate Byron and Transitional Praos histories. -The extra flexibility may prove useful on testnets, eg. - -## Deployment Recommendation - -No reasonable amount of offline testing could achieve the stress testing that a feature will endure when first released (as _experimental_). -The basic recommendation for deployment is therefore a staged approach, where the default remains the Bootstrap Peers but configuration can opt-in to using Genesis instead. -Staged releases are common practice for new Cardano features, and Genesis is no exception. -There are a bevy of new flags in the node's `config.yaml` file, most notably the `EnableGenesis` Boolean and the `LowLevelGenesisOptions` tree. - -Full node wallets such as Daedalus will also need a means to update their Genesis snapshot config files and to opt-in to Genesis as an experimental feature. - -The Ledger Peers approach to ensuring the HAA requires a so-called "Genesis snapshot" in order to find HAA-satisfying upstream peers with sufficiently high probability. -Such a snapshot will need to be somehow regularly produced, certified, and distributed. -A stale snapshot is not necessarily useful; the threshold is beyond the scope of the Genesis implementation. - -Additionally, the SDET team should be able to catch fundamental regressions via a scenario in which a very slow upstream peer serves a denser chain while a very fast peer serves a less dense alternative chain. -The denser chain needs to have at least k blocks after the intersection, and the syncing node must select the denser chain in order for the test to pass. -The [`immdb-server`](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/app/immdb-server.hs) tool will be useful. - -The Genesis feature is intended to supercede the Bootstrap Peers method. -However, the fundamentally stronger assumption of Bootstrap Peers may be more useful than Genesis during disaster scenarios and/or attacks, so it seems beneficial to preserve the capability to spin-up Bootstrap Peers on relatively short notice. -Either the logic for using Bootstrap Peers could be retained despite the introduction of the Genesis implementation, guarded behind configuration, or else bespoke Genesis snapshot config file could indirectly force the syncing node to only use Bootstrap Peers without actually being aware of their special status. - -## Follow-Up Work - -The following additional work on Genesis is suggested, as priorities and resources permit. - -- The HAA explicitly excludes disaster scenarios, but it is likely useful to anticipate/explore how the implementation handles disaster scenarios before they happen on mainnet, especially violations of Chain Growth. -- As mentioned above, the engineers have always assumed Sgen = Scg. - Any such coincidence invites accidental conflations, so it will likely be useful to consider/excercise smaller Sgens, such as Sgen = 0.5×Scg. - This could result in some specifications and/or implementations being refined to invoke Scg directly instead of indirectly via Sgen, for example. -- The Parameter Tuning section above characterizes the upper bound of unnecessary delay by assuming that disconnected peers are not replaced. - For example, if a leashing peer were immediately replaced, it could start with a significant number of LoP tokens and pick up where its predecessor left off. - A reasonable compromise would be for the Diffusion Layer to only replace peers disconnected with prejudice after a moderate delay, eg 15 minutes. - If the HAA is indeed satisfied, then an extra delay when replacing peers would not introduced any extra delay to the sync. -- Refine some names, such as PreObjectors being called dissenting jumpers in the code, the Devoted BlockFetch implementation not including that name, Disengaged peers incorrectly suggesting they're inactive, etc. -- Tighten the PreObjector MsgFindIntersect timeouts. - The Network team advises that this is not a high priority vector, but it'd still be preferable to simply eliminate it. -- The LoP and DBF are tuned based on an assumption that modern empty blocks are not particularly concentrated. - For example, ~4% of the ~650000 most recent blocks were empty as of writing. - Unless a bulk of those are contiguous, the LoP and DBF buffers will likely absorb one out of, say, 15 blocks being empty. - It may be worth checking for a string of empty blocks. - It also may be necessary to consider that the disaster recovery plan could create such a string. -- Potential test improvements: - - Integrate GSM into the peer simulator and test for consecutive periods of Syncing and CaughtUp states. - This would require some rethinking on expressivity of the point schedules. - - Adjust genesis tests to allow for a non-zero GDD rate limit. - - Implement mutation testing for Genesis implementation (see test plan). - - Standalone unit/state machine tests for CSJ; test for more CSJ invariants (like [here](https://github.com/IntersectMBO/ouroboros-consensus/blob/b14da83d982224edc1700b0bed31ebd96c9ceaf8/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/PeerSimulator/CSJInvariants.hs). -- Define finer grained coverage for Genesis and Praos, make plans to measure it, and then measure it. -- Small optimizations that didn't turn out to be necessary so far: - - Only compute the LoE anchor amongst the Ledger Peers. - - Do not trigger chain selection when the LoE anchor moved backwards on a chain. - - When computing the density upper bound in the GDD, we could use probabilistic argument with a sufficiently low failure probability to bound the number of the remaining slots that could be active to a value lower than the pessimistic current estimate that every slot might be active. However, the LoP guarantees that this is not necessary for liveness. -- Make MinJumpSlots dynamic such that it can vary per era (and in particular be larger in Shelley-based eras). -- Ideally a peer whose candidate fragment branches off before the ImmDB must not satisfy the HAA. - Therefore, the LoE anchor intersection could exclude that candidate fragment. - However, we've seen a repro where the honest peer does do that --- we're currently debugging it. - In the meantime, simply treating such a peer as having the ImmDB tip as their candidate fragment tip is sound; they were ignorable because they're doomed, so we can instead just wait for them to be disconnected. -- Possible improvements to the LoE implementation: - - Small-ish optimizations: - - We have a special case to avoid fetching the selection's first header from disk, as it was slightly faster (see [here](https://github.com/IntersectMBO/ouroboros-consensus/pull/1118#discussion_r1613855402)). Determine whether that is still the case, and whether we want to keep it, also from a average-case=worst-case perspective. - - Perhaps we could maintain a flag that is True only if the LoE has prevented a selection since the last time the LoE advanced; we don't need trigger ChainSel when that flag is False. This would force the adversary to violate Limit on the Age of MsgAwaitReply/MsgRollBack etc in order to let LoE-advancements trigger ChainSel. -Related idea: maybe that flag could just track whether the LoE anchor was an extension of the most recent ChainSel result? - - Long-term optimization: Use a "chain selection datastructure", ie a data structure maintain a rooted tree that allows efficient inserts, advancing the root and queries of the longest chain (subject to the LoE). Also see section 24.10 in the Consensus report. -- Possible improvements to CSJ: - - Skip MsgFindIntersect during jumps if the candidate fragment contains the jump point, or if the chain in the immutable db contains the jump point. - It is unclear how much this would optimize exactly though. - Most of the time, jumpers jump to points that extend their candidate fragments. - When a dynamo is elected, they might be asked to jump to a point behind the tip of their candidate fragment. - This could happen if the dynamo was a jumper that was about to jump but hadn't yet, or the dynamo was an objector. - - Avoid re-downloading headers when rotating the dynamo. - In particular, this might be useful to mitigate the impact of long ranges of (almost) empty blocks which might cause the DBF to induce many CSJ rotations. - This could for example be accomplished by letting the jumpers jump to the tip of the dynamo just before rotation. -- Possible improvements to the GDD: - - Rerun GDD to disconnect peers earlier if the last run disconnected any peers. - -[^loe-anchor-example]: - For example, consider the following candidate chains, all with anchor `A` and ending in `E`, `F` and `G`, respectively. - ``` - A---B---C---D---E - \ \ - \ \-F - \-G - ``` - The most recent common point on these fragments is `C`, which we call the LoE anchor. - However, the LoE fragment (the longest shared common prefix of the candidate chains) is instead anchored in `A` (a recent immutable tip) and has tip `C`. diff --git a/docs/website/contents/for-developers/GitProcess.md b/docs/website/contents/for-developers/GitProcess.md deleted file mode 100644 index 00490414c6..0000000000 --- a/docs/website/contents/for-developers/GitProcess.md +++ /dev/null @@ -1,89 +0,0 @@ -# Consensus git process - -This document describes the git history we strive for in the Consensus Team. The -git history is a key asset for understanding and for debugging, so we take care -to refine it before merging each PR. - -As part of each PR review, we also check for consistency with the content of -this document. We find that the rules herein become familiar and intuitive after -some use: eventually it'll just be a document you refer to only occasionally. -But we don't expect the first several PRs to perfectly adhere to these rules. So -please make an effort, but don't worry too much: our highest priority is to see -your PR's content! We'll help tidy up any deviations. - -## Guiding principles - -_Messages matter_: Commit messages summarize an atomic coherent change and its -motivation. They help reviewers do their job, future developers understand the -past design process, troubleshooters debug changes in behavior, downstream -developers understand recent changes and their context, and so on. In these kind -of scenarios, commit messages are often the easiest documentation to read first. -Write commit messages in the imperative, as per [these -guidelines][contributing-to-a-project]. - -_Small and organized commits_: The commits themselves, beyond just their -messages, also contribute to the story in their own way. Prefer small commits -that include only necessary changes, and choose a commit order that seems most -natural to you. Doing so often also makes it easier to write useful commit -messages. Rebase before merging, so the repository's full story is as linear as -it can be. At the very least, this effort will make it easier for your teammates -to review the PR. - -_Never break the build_: The code should build and pass all test suites after -each commit, not just after each PR. There is no good reason for a commit to -break the build. It is only slightly less important that the tests pass after -each commit. The Continuous Integration (CI) machinery ensures that the tip of a -PR builds before it's merged, so every commit on the `master` branch will build -and pass the tests that are enabled in CI. In particular, this process ensures -`git bisect` can be as useful as possible -- when you reach for that kind of -sledgehammer, you want it to work well. - -Note that CI enables `-Werror`, but we don't require you to enable it locally. -If you'd like to opt-in to that or similar, add a `cabal.project.local` file. - -## Guidelines - - * Write useful commit messages. There are lots of guides on the Internet about - how to do that. We don't have any strict guidelines beyond appreciating the - value of a good commit message and appreciating their permanence. - - * We only merge via GitHub PR. Moreover, we make use of github [merge queues][merge-queues] for our PRs. - - * The tip of the `master` branch is always the latest and greatest we have to - offer, closer to our current primary goals. As mentioned above, it should - build clean and pass our test suites. We do also rely on some additional - and/or external testing that is only done near release points. - - * GitHub copies the PR title and description into the merge commit, so the PR - title and description should be useful and meaningful. Don't use the default - title. - - If you want to initiate discussion on the PR (eg "This is the direction I - come up with, what do you think?"), do so in the first comment, immediately - after opening the PR -- we don't want that recorded in the merge commit. - - * If the PR resolves an Issue, the PR description should start with `Fixes - #NNNN`. See the [GitHub documentation][gh-auto-link-issue] for similar - keywords and syntax that will trigger useful automatic behaviors. - - [gh-auto-link-issue]: https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword - - * Your PR should be a [Draft PR][github-draft-pr] until you think it is ready - for final review and merging. I often open my PR as Draft PR in order to get - early feedback and then later promote it to a proper PR. Or if I realize - there is big hole in my PR, I will convert it back into a Draft PR. - - This is far superior to including "WIP" or "DO NOT MERGE" in the PR title, - or a WIP label, etc. - - [github-draft-pr]: https://github.blog/news-insights/product-news/introducing-draft-pull-requests/ - - * Your branch name is impermanent, so it's less important than the above. - However, we prefer the format `username/issue-NNNN-short-description` or - `username/JJJ-MMMM-short-description` to indicate where the work is being - tracked by one of our lower level GitHub Issues (`NNNN`) and/or IOHK's JIRA - issues (`JJJ-MMMM` where the `JJJ` is the acronym of the JIRA project, eg - `CAD`). - -[contributing-to-a-project]: https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Commit-Guidelines -[merge-queues]: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue diff --git a/docs/website/contents/for-developers/Glossary.md b/docs/website/contents/for-developers/Glossary.md deleted file mode 100644 index 060436be9b..0000000000 --- a/docs/website/contents/for-developers/Glossary.md +++ /dev/null @@ -1,567 +0,0 @@ - -# Glossary - -Notes on the use and maintenance of this glossary: - -- Definitions are preceded by a semicolon (`;`), eg `;Slot` to make it easy to find the using `Ctrl-F`. -- When adding a new definition, add a semicolon in front of it. If the definition has synonyms, separate them by commas (prefixing a semicolon for each synonym). - -## ;Active Slot Coefficient, ;f - -The active slot coefficient represents the chance a given slot elects one of the registered stake pools. -In other words, the probability that each slot has any leaders. -It is usually denoted as $f$. - -On the Cardano mainnet we have: - -$$f = 1/20$$ - -So this means a 5% chance of electing one of the registered stakepools. Thus, under ideal circumstances, each slot has a 19/20 probability of having no leaders whatsoever. - -In the implementation we assume $f$ won't change. Dealing with changing $f$ is a hard problem which requires proper research. - -## ;Adversarial node - -A node that exhibits any behavior beyond the honest behaviors. EG it doesn't mint when it's elected. EG it mints multiple blocks when elected. EG it mints its block "too" late. EG it mints its block "too" soon. EG it mints invalid blocks. EG it sends headers but withholds the block, etc, etc, etc. - -## ;Adversary - -Security analyses typically assume the worst-case, ie the behavior of all adversarial nodes as well as any environmental interference is concerted (eg the adversasy "controls" more than just nodes, eg natural arising network delays). - -## ;Anchor - -A chain fragment always has an anchor point, which is the predecessor of the oldest header/block on the fragment. - -## ;Block - -In some slots, the protocol allows a block-producing node to contribute to the chain; it does so by minting a new block. -A block at least identifies its issuer, its own real point, and the hash of the preceding block. - -## ;BlockFetch - -Download block bodies corresponding to the candidate fragments, prioritizing whichever fragments the BlockFetch heuristics consider most important (chain length is a key factor). - -## ;Block-producing node versus relay node versus client - -A node is a party that can participate in the network. - -- It can be a *block-producing node* if it has the necessary setup to mint blocks. - -- If not, but if it is still intended to be connected to from other nodes, it is a *relay node*. - -- If it is just used to get a local view of the state of the network, it is a *client node*. - -## ;Block validity and ledger rules, ;ledger rules - -A valid block satisfies the ledger rules in the context of the ledger state that resulted from the preceding block. - -## ;Bootstrap peers - -Trusted honest caught-up peers that are used for syncing before a Genesis-capable node is released. By default, these are public root peers. - -## ;Chain - -A sequence of blocks. - -## ;ChainDB - -Wraps several other components and provides *chain selection* (ChainSel) functionality on top: - - - ImmutableDB - stores "the" honest immutable chain, i.e. all blocks that are known to no longer be subject to rollback. - - - VolatileDB - stores all blocks that could become part of an extension of the immutable chain - - - ChainSel - processes (stores, validates) incoming blocks and maintains the node's *selection*, which is anchored at the tip of the ImmutableDB, and will be of length `k` (unless near Genesis or due to VolatileDB corruption). - - - LedgerDB - stores a ledger state for all points on the node's selection. - -## ;Chain growth property - -This property states that there are at least $k$ blocks in $3k/f$ slots. - -Here $f$ refers to the [active slot coefficient](#active-slot-coefficient). - -The main Praos theorem also establishes a similarly-shaped bound on the probability of the immutable chain having less than `k` blocks in any contiguous run of `s` slots. The IOG researchers chose `s=3k/f` for Cardano. We started calling it `scg`, since `s` is a pretty common identifier. - -## ;ChainSync - -Chain sync is a mini protocol to exchange chains of headers. - - - maintains a *candidate fragment* of headers for each peer with the following properties (might not be satisfied transiently): - - - validated (detail: currently, it is *not* checked whether the headers come from the future, but that [might change soon](https://github.com/IntersectMBO/ouroboros-network/issues/4251)). Note that this places a bound on its length as header validation is limited by how far we can forecast. - - - selectable (ie forks off at most `k` from the node's selection). - - - The server can *claim to have no additional headers* when asked for updates. This is signaled explicitly via `MsgAwaitReply` or implicitly by the server's selection tip point that is sent with every message (though the latter is currently not used on the client for any logic). - -## ;ChainSync Jumping - -In the context of [Genesis](#genesis-consensus-protocol-paper-version), a node should execute [ChainSync](#chainsync) with all of its peers, thus often re-downloading and re-validating the same header from multiple peers. This would unnecessarily increase the network load on honest peers, which by definition will serve the same headers on the historical part of the chain. - -To mitigate this load, we use ChainSync Jumping, an extended version of ChainSync in which a node only downloads headers from *one* of its peers, and periodically asks all the other peers if they agree with it. If there is a disagreement, ChainSync starts downloading headers from another peer until one of them gets disconnected. - -### ;Dynamo - -The dynamo is the only peer from which a syncing node gets all headers, and run the normal ChainSync protocol. Every once in a while, the syncing node sends a message to all of its jumpers to check if the tip of the dynamo's chain is also on their chain. - -### ;Jumper - -The jumpers are all the peers of a syncing node from which headers aren't downloaded with normal ChainSync protocol. The syncing node will periodically send the tip of its chain to all jumpers. If they confirm this tip is on their chain as well, the node assumes they have the exact same chain as the dynamo, up to their current tip. If they disagree with the tip of the dynamo, they might be promoted to objector. - -### ;Objector - -An objector is a peer which disagrees with the dynamo and from which headers are downloaded. When a jumper doesn't have the tip of the dynamo's chain, it might be promoted to an objector, and exchange headers with the syncing node as per ChainSync protocol. This lasts until either the objector or the dynamo gets disconnected. If the dynamo gets disconnected, a new dynamo is selected by the syncing node. - -### ;Disengaged Peer - -A disengaged peer is a peer from which headers are downloaded as per ChainSync protocol. It cannot be selected as a dynamo, and never becomes a jumper nor an objector. - -A dynamo, an objector, or a jumper can be disengaged if they rollback their selection or if they claim to have sent all headers. - -## ;Checkpointing - -Solve dynamic availability by providing syncing nodes with (trusted) information: the points on the (immutable) honest chain every few (i.e. `≤ k`) blocks. - -## ;Common Prefix - -In particular, the main Praos theorem establishes an upper bound of `a*exp(-k*b+c)` for the probability that honest nodes in an Ouroboros net will disagree on more but the latest k blocks, despite an adversary with less than half of the stake and the ability to delay any and all blocks by up to `Δ` slots. On Cardano `mainnet`, `k=2160`. - -## ;Delta, ;Δ - -`Δ`, aka maximum delay - The Praos theorems assume that messages (aka "chains"!) arrive within `Δ` slots. IE every honest block minted in slot `S` and also its predecessors will have arrived at every node before the onset of slot `S+1+Δ`. `Δ=0` implies no message is delayed beyond the next slot, aka "synchronous". Remarkably, the node is completely unaware of `Δ`; it is only used in the security analysis. - -Note that this implies in particular that (Praos has to assume that) there are no long-lived network partitions. - -## ;Density - -The density of a chain in a specific interval of slots is the number of blocks in that slots. - -## ;Density interval - -Due to the incremental nature of ChainSync, we often only know a *prefix* of the eventual chain inside of a Genesis window. Density intervals allow us to bound the density that extensions of the prefix could have eventually. - - - Inclusive lower bound `lo`: The number of blocks in the Genesis window (i.e. the density in the relevant Genesis window of the upstream peer's current candidate fragment). - - - Inclusive upper bound `hi`: `lo`, plus the number of slots in the Genesis window beyond the tip of the peer's current candidate fragment if the ChainSync server claims to have more headers in the Genesis window. - -## ;Density rule - -A rule to compare two chains `C` and `D`: prefer the chain that has the higher density in the interval after `C ∩ D` of length `sgen`. - -## ;Eclipse attack - -An attack on a blockchain (or any other peer-to-peer network) system in which malicious actors attempt to isolate one or several hones participants from the rest of the network. See [this paper](https://www.usenix.org/conference/usenixsecurity15/technical-sessions/presentation/heilman) for an example attack on Bitcoin. - - -## ;Election proof - -A cryptographic proof that the [Ouroboros](#ouroboros) protocol did indeed assign the [block](#block)'s issuer to lead the block's [slot](#slot). - -## ;Epoch - -The sequence of slots is partitioned into a sequence of epochs, each of which is a contiguous run of a fixed number of slots. -In the latest Cardano era, each epoch lasts for 432000 slots (= 5 days). - -## ;Epoch structure - -The ledger rules take snapshots of the nonce and stake distribution at different points of time in the course of an epoch. A snapshot may only be _used_ when it has stabilized, which means that their block has become immutable (being older than `k` blocks). Currently, Cardano `mainnet` uses an epoch length of `10k/f` slots, divided into three parts: - -Note that nothing in the implementation happens on the transition from Part 1 to Part 2 (in contrast to "from Part 2 to Part 3"), so there exist no concrete values for the individual length of these two phases. The length of Part 3 is however explicitly recorded in the implementation, so the length of Part 1 and Part 2 combined is `10k/f` minus the length of Part 3. - -- Part 1, at least length `3k/f` - At the beginning of this part, which forms the boundary with the previous epoch, the stake distribution snapshot is taken. - At the end of this part, the stake distribution has stabilized. - -- Part 2, at least length `k/f` - At the end of this part, the nonce snapshot is taken. - - The nonce is snapshotted after the stake distribution to prevent _identity grinding_. - However, this does not prevent _nonce grinding_. - - It must contain at least one honest block (created by an honest party as defined above), so that the nonce cannot be solely influenced by the adversary – otherwise they could identity grind before Part 1, knowing what the nonce would be due to owning all the blocks up to its snapshot. - This criterion is a minimum requirement and wildly unrealistic not to be satisfied with `mainnet` parameters. - - The nonce snapshot could likely be taken earlier without sacrificing security, like already after `3k/f` after the start of the epoch. - Waiting all the way until the start of Part 3 is playing it extra safe. - -- Part 3, length `4k/f` since the Conway era, and `3k/f` for all prior Shelley-based eras - At the end of this part, the nonce snapshot has stabilized and can be used for the leader schedule of the next epoch. - - Most importantly, Part 3 has to be at least `3k/f` slots (one stability window) long for the nonce to stabilize before the start of the next epoch (such that all pools agree on the leader schedule). - - As advised by the IOG researchers, the nonce should be snapshotted even a bit earlier for intricate reasons related to Ouroboros Genesis. See erratum 17.3 in the [Shelley ledger specs](https://github.com/IntersectMBO/cardano-ledger/blob/master/README.md) for context. - -## ;Eventual consensus - -When Ouroboros runs as intended, all short forks are short-lived. - -## ;Forecasting - -Forecasting is the ability to validate headers that are ahead of a node's current selection. -Because of [Common Prefix](#common-prefix) and [Chain Growth](#chain-growth), the latest `k+1` ledger states along the node's selection always provide sufficient information for the node to validate its peers' headers that are no more than `3k/f` after the peer's first header. -Since the node hasn't selected that header's block, it has to use forecasting in order to validate its descendant headers. - -### ;Forecast horizon - -The forecast horizon is the number of slots ahead of its current selection in which a node can validate headers. With current Genesis parameters, it is `3k/f`, which is the [stability window](#stability-window) for [Shelley-based eras](#shelley-based-eras). - -## ;Genesis block - -The hypothetical [block](#block) that precedes the first real block, ie the empty [chain](#chain). -It's the beginning of _the_ chain: all [nodes](#node) in a net must agree on at least the genesis block; otherwise, they have no common ground. - -## ;Genesis chain selection rule - -The Genesis paper describes a new chain selection rule (`maxvalid-bg`) to use instead of the longest chain rule from Praos: - - - Let `C` be the currently selected chain and `D` be a candidate chain. - - If `D` forks off from `C` at most `k` blocks deep: Compare `C` and `D` using the longest chain rule. - - Otherwise: Compare them using the density rule. - -## ;Genesis consensus protocol, paper version™ - -Praos, but using the [Genesis chain selection rule](#genesis-chain-selection-rule). -Note that this protocol requires rollbacks by more than `k` blocks! -We do not want to change that invariant at the moment. - -## ;Genesis Density Disconnection Rule (GDD) - -Disconnect from nodes whose fragments certainly lose to other fragments according to the density rule. - -Motivation: allows the intersection of candidate fragments to progress - -## ;Genesis State Machine (GSM) - -Mechanism describing when a node can conclude that it is caught-up. This is used to avoid connecting to lots of ledger peers (for the HAA) when unnecessary and to disarm certain timeouts. - -Key transitions: - - - Syncing -> CaughtUp: All peers claim to have no more headers (via ChainSync), and we selected one of the candidate fragments. - - - CaughtUp -> Syncing: Tip of our selection becomes older than X number of slots - -## ;Genesis window - -A number of slots `sgen`. Consider the honest chain `H`, and any other valid (but potentially adverserial) chain `A` such that their intersection is more than `k` blocks behind the tip of `H`. -Then the Genesis paper guarantees that `H` has a higher density than `A` in the `sgen`-many slots beginning immediately after their intersection. - -The Genesis design uses `sgen = scg = 3k/f = 129600`. - -## ;Grinding - -A difficult to quantify behavior of the adversary whereby they leverage a lot of compute power to make choices so that they lead more slots in the corresponding later epoch than the `phi_f(α)` random variable would theoretically allow them. - -## ;Hard forks - -Moments in the life of a chain where old nodes cannot validate new blocks. -There is one at each era change but they can also happen within the same era; they are then called “intra-era” hard forks. -Intra-era hard forks are mostly ledger related, for instance to fix a bug of (de)serialisation of transactions, or to add a new smart contract feature. -Recently, hard forks have been given names: Vasil is the hard fork from Alonzo to Babbage; Valentine is an intra-era hard fork within Babbage. - -## ;Header-body split - -The [stability window](#stability-window) enables the engineering design of nodes exchanging chains of headers before exchanging chains of the corresponding blocks. - -## ;Header and body - -The two key parts of a block. The consensus part of Ouroboros directly involves the header but it also indirectly depends on the body. - -## ;Header validity - -Boring part: parseable, strictly ascending slot number, issuer's crypto signature, etc. -Interesting part: the election proof. TODO also interesting: not from the future. - -## ;Honest Availability Assumption - -The assumption that any syncing node is always connected to at least one honest caught-up node. - -Motivation: ensure that one of the candidate fragments is (a prefix of) the honest chain - -The Networking teams plans to essentially satify this assumption by always maintaining a minimum number of [ledger peers](#ledger-peers) from a recent stake distribution. -The foundational Praos assumption of an honest majority then quickly implies the probability of no ledger peers is extremely low. - -## ;Honest majority - -Ouroboros assumes the adversary always controls strictly less than 50% stake. -Typically, the researchers bound it even lower than that. But Praos is 50% - ε, as long as eg `k` is large enough. - -## ;Honest caught-up parties - -All honest block-producing nodes that are fully synchronized to the state of the system; i.e. they act indistinguishably from nodes that have been there since the beginning of the system. - - - active parties - honest caught-up parties plus the adversary. - - [Genesis](#genesis) has two natural requirements which must be met throughout the system's lifetime: - - - The ratio `α` of honest caught-up parties over active parties is above `1/2`. - - Phrased differently: The honest caught-up parties have more stake than the adversary (historical honest majority assumption). - - - The ratio `β` of active over all parties is bounded from `0` by some constant. - -## ;Honest node and selection - -A node that follows the Praos specification. -Assuming infinite compute resources, this is abstractly summarized as: at the onset of every slot, select the longest valid chain you have received breaking ties arbitrarily, if you lead this slot mint a new block extending your selection, select it, and propagate it to the world. -On Cardano `mainnet`, the tiebreakers are carefully chosen and universal, but the Praos protocol doesn't technically constrain them. -There are many many more rules for an honest node (eg "put as many transactions as you can in the block you mint"), but that summary is the only crucial rule for Praos. - -## ;Identity grinding - -This is an unofficial term. If an adversary knew the nonce snapshot before the stake distribution was snapped, they could use infinite compute resources to find a private key that optimizes the leader schedule, and transfer their stake before the snapshot. - -This cannot occur on Cardano thanks to the epoch structure: the nonce snapshot is taken after the stake distribution snapshot. - -## ;Immutable chain - -The immutable chain of whichever well-connected and caught-up honest node has the worst current selection. - -## ;Immutability/stable/settled/etc - -Because of Common Prefix, no honest Praos node will ever need to discard more than k blocks (when switching to a longer chain). Thus, any block with at least `k` descendants on the node's selection is immutable. So is that block's contents (eg its transactions). - -## ;In-future check - -As nodes can not be expected to have perfectly synchronized clocks (ball park: <=100ms globally), blocks that are early but within the *maximum permissible clock skew* (currently: 5s) are not immediately considered invalid during ChainSel, but are instead stored and reprocessed immediately before the next time ChainSel is triggered by a newly added block. - -## ;Independent aggregation - -`ϕ` was chosen in part because `ϕ(x+y) = 1 - (1 - ϕ(x))*(1 - ϕ(y)) = ϕ(x) + ϕ(y) - ϕ(x)*ϕ(y)`. Therefore reapportioning stake amongst the stake pools you control doesn't alter your chance of leading a slot. - -## ;Issuer - -Who can make blocks. Every issuer runs a node, but not every node is an issuer. We distinguish _block-producing nodes_. - -## ;Issuer's leader schedule - -Which slots a specific issuer leads is private information, until the issuer shares an election proof. (This privacy itself is an important feature.) - -## ;Leader schedule - -Which issuers the protocol assigns to lead each slot in an epoch; there can be zero, one, or many leaders in each slot. -This omniscient view of the schedule only exists theoretically, because of crypto. - -## ;Ledger eras - -The sequence of ledger rule sets used by today's node to validate the respective segments of the historical Cardano chain. -Byron, Shelley, Allegra, Mary, Alonzo, Babbage (current one as of August 2023), Conway. -Conway is currently (August 2023) under development. - -## ;Ledger peers - -Relays selected to be peers, sampled according to a sufficiently-recent stake distribution. - -## ;Ledger state - -The accumulated result (of a [prefix](#prefixtipetc-and-fragment-chain-fragment)) of a [chain](#chain) (which necessarily started from the [genesis block](#genesis-block)). -The genesis block is not actually a block; it's the first ledger state. - -## ;Ledger view - -The small part of the ledger state actually required for header validation. -It's the same part whether or not the validation is done via forecasting. - -## ;Limit on Eagerness (LoE) - -Do not select more than `k` blocks past the intersection of all candidate fragments. - -Motivation: ensure that we can still switch to any candidate chain while respecting the maximum rollback limit. - -### ;LoE Fragment - -The common prefix of all candidate fragments, anchored at the tip of the current chain selection - -### ;LoE Tip - -The tip of the LoE fragment - -### ;Long-range Attack - -An attack on Proof-of-Stake blockchain systems that refers to the ability of a minority set of stakeholders to execute the blockchain protocol starting from the genesis block (or any sufficiently old state) and produce a valid alternative history of the system. See [this blog post](https://blog.ethereum.org/2014/05/15/long-range-attacks-the-serious-problem-with-adaptive-proof-of-work) by Vitalik Buterin and [this paper](https://iohk.io/en/research/library/papers/stake-bleeding-attacks-on-proof-of-stake-blockchains/) for details. - -## ;Limit on Patience (LoP) - -Disconnect peers that advertise a better header than their current one, but haven't provided it quickly enough. - -Motivation: because of the [LoE](#limit-on-eagerness-loe), we don't select headers past `k` blocks beyond the common intersection of all candidate fragments. Therefore, an attacker could prevent a syncing node from making progress by stalling indefinitely at an intersection, promising headers to extend their chain but never delivering them. The LoP mitigates that attack. - -In the current version of Genesis, the limit on patience is implemented by a "leaky token bucket" algorithm. - -### ;Token Capacity (TCAP) - -The LoP bucket has an initial and maximal token capacity of `TCAP`. A token is gained when the associated peer sends a header with a higher block number than its previous one. When the bucket is already at maximum capacity, extra tokens are lost. - -### ;Token Drip Rate (TDRIP) - -When the peer has advertised a header with a higher block number than its previous one, but hasn't served yet, the LoP bucket loses tokens at a rate of `TDRIP` tokens per second. When the bucket is empty, the associated peer has exhausted its limit on patience, and gets disconnected. - -## ;Local root peers - -Locally configured peers that the node should know and try to maintain a connection with. These are usually block-producing nodes or relay nodes that SPOs setup in order to shield their block-producing nodes from direct contact. - -## ;Long-range attack - -An adversary presents to a syncing node a chain that forks from the honest chain far in the past, in order to prevent the node from ever selecting the honest chain. - - - Superficial variant: An adversary, even with very low stake, can *eventually* produce very long (i.e. longer than `k`) forks. If a syncing node is served this chain before the honest chain, the "maximum rollback" engineering decision implies that the node can never switch away from it. - - - Fundamental variant: After some time (multiple epochs), an adversary will be able to create blocks on its fork much faster (due to accumulated block rewards/governance) than the honest chain grows. Because it's actually the longest chain in the system, the theoretical Praos node---and also the real node, if patched to allow unlimited rollback---would select this adversarial chain. - -## ;Maximum rollback - -The node relies on the exact value of [`k`](#security-parameter), at least for engineering purposes. -By appeal to [Common Prefix](#common-prefix), the node design is incapable of discarding its selection's immutable prefix (eg this bounds the honest node's RAM requirements). -If a peer tries to send blocks that diverges deeper than that, the node disconnects from them. - -## ;Mini protocol - -Nodes communicate with other nodes via a set of two-party protocols in which one node is the *client* and the other is the *server*. - - - The dynamics are specified by a state machine, which is enforced by the [typed-protocols](https://github.com/input-output-hk/typed-protocols) library. [List of all mini protocol state machines](https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-spec/network-spec.pdf#chapter.3). - - - The client can *pipeline* its messages. - - - All node-to-node mini protocols are pull-based. - - - Each directed edge in the node topology is a bundle of (multiplexed) mini-protocol instances. - -## ;Node - -## ;Node's immutable chain - -The prefix of the node's selection that excludes the youngest `k` blocks. - -## ;Nonce - -The [ledger state](#ledger-state) maintains a nonce, updated by each block's header, independent of the block body. The ledger takes a snapshot of this nonce once per epoch. The snapshot taken during one epoch is used by VRFs in the next epoch. - -## ;Nonce grinding - -When the nonce is the only undetermined leader schedule input left, an adversary leading the last slots before the snapshot could compute the nonce for all permutations of blocks and pick the one that optimizes the leader schedule. - -This is possible on Cardano, though suspected to be uncommon. - -## ;Net - -A network of nodes running [Ouroboros](#ouroboros) to continually grow a single agreed upon chain. - -## ;Opposite of a short fork - -We don't really have a word for this; it's when "something went wrong", and a [short fork](#short-forks) is so long it's problematic. - -## ;Ouroboros - -The family of consensus protocols that underly Cardano. - -## ;Ouroboros Classic - -(and/or (?) Ouroboros BFT) The protocols the older Cardano nodes actually used during Byron. - -## ;Ouroboros Genesis - -A slight refinement of [Praos](#ouroboros-praos). - -## ;Ouroboros Praos - -The protocol underlying the latest Cardano era. - -## ;Peer kinds - -These kinds are maintained by the Networking layer: - -- [Bootstrap peers](#bootstrap-peers). -- [Ledger peers](#ledger-peers). -- [Local root peers](#local-root-peers). -- [Public root peers](#public-root-peers). -- [Shared peers](#shared-peers). - -## ;Phases - -Byron, Shelley, Goguen (current one as of August 2023), Basho, Voltaire. -Part of [the Cardano roadmap](https://roadmap.cardano.org/en/), also regularly called “eras”. -Voltaire might happen before Basho. - -## ;Point - -`Point` is essentially `Maybe RealPoint` where the `Nothing` case identifies the [genesis block](#genesis-block). - -## ;Prefix/tip/etc and fragment, ;chain fragment - -Any prefix of a [chain](#chain) is also a chain; suffixes and infixes are instead called _chain fragments_. -Because (valid) blocks uniquely identify their predecessors, the prefixs and blocks of a chain are one-to-one. - -## ;Protocol eras -The sequence of protocols used by today's node to validate the respective segments of the historical Cardano chain. -Permissive BFT, Transitional Praos (aka. TPraos), Praos. - -## ;Public root peers - -Peers coming from trusted public information (IOG relays, Cardano foundation also hosts similar nodes). - -## ;Real point - -The slot number and hash of a block. - -## ;Relative stake and phi - -Relative stake and `ϕ`, aka phi: If some stake pool contains `U` ada in the stake distribution from epoch number `E`, and that whole distribution sums to `V` ada, then that pool leads each slot in epoch `E+2` with an independent probability of `ϕ_f(x) = 1 - (1 - f)^(x)` for `x = U/V`, the pool's relative stake - -## ;Security parameter - -`k`, aka "_the_ security parameter": A parameter of the Common Prefix theorem that bounds how many blocks would exist on a well-connected honest node's selections after its intersection with another well-connected honest node. - -## ;Swept into the adversarial budget - -Obviously, some messages on a real network will exceed `Δ` or even be actually lost. In that case, the security analysis considers the node to be adversarial, "sweeping" it under the rug, consuming a little bit of the analysis's budget. Other things get swept there too, but we try not too. - -## ;Shared peers - -Peers that were discovered via the Peer Sharing protocol. These can be any kind of peer, e.g. ledger peers or client/wallet peers. - -## ;Shelley-based eras - -All eras apart from Byron share most of their code. -They are sometimes just referred as “Shelley” eras. -[For instance, the `ShelleyBlock` type has two arguments: protocol and actual era, giving eg. `ShelleyBlock (TPraos c) (AllegraEra c)`](https://github.com/IntersectMBO/ouroboros-consensus/blob/4c0a421d187478f9f740d27521b682988d843596/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Block.hs#L97-L106). - -_For a table on phases, eras, protocols, etc., see [the Cardano features table in CIP 59](https://github.com/cardano-foundation/CIPs/blob/master/CIP-0059/feature-table.md)_. - -## ;Short forks - -If a [slot](#slot) has multiple leaders or if the leader of a slot hadn't received the latest block, then they will issue multiple blocks that all claim to have the same predecessor. -These competing chains are called short forks, unless they grow too long. - -## ;Slot - -Ouroboros discretizes time into a sequence of slots. In the latest Cardano era, each slot lasts one second. - -## ;Stability window - -The node relies on the exact value of `scg`. Specifically, the ledger rules prevent any block from influencing the leader schedule until at least `scg` slots later. Note that a block thus cannot influence the leader schedule until it's immutable. - -## ;Stake and delegation - -In Praos, stake pools are the block issuers. Any party that controls ada can _delegate_ it to a _stake pool_. - -## ;Stake distribution - -The ledger state maintains the amount of stake controlled by every issuer (every issuer is registered). The ledger takes a snapshot of this distribution at the boundary between two epoches. The snapshot taken at the boundary of epochs `e` and `e+1` is used by VRFs in epoch `e+2`. - -## ;Stake pool operator (SPO) - -Some entity that maintains/controls one or multiple stake pools. - -## ;Syncing - -The process of becoming synchronized with the system, either from scratch or due to a temporary restart/crash/local network outage. - -## ;Transactions - -If a slot has multiple leaders or if the leader of a slot hadn't received the latest block, then they will issue multiple blocks that all claim to have the same predecessor.A [block body](#header-and-body) is just a sequence of transactions. --Each one modifies the [ledger state](#ledger-state) in a way determined by the [ledger rules](#block-validity-and-ledger-rules-ledger-rules). - -## ;Valency - -The number of peers the node maintains a connection to. - -## ;Verifiable Random Functions, ;VRF - -Verifiable Random Functions are used to ensure that even the proofs don't leak the issuers' private credentials. The VRF's output is determined by the issuer's private credentials, the slot number, and the nonce and stake distribution of the epoch that contains that slot. diff --git a/docs/website/contents/for-developers/HandlingBlocksFromTheFuture.md b/docs/website/contents/for-developers/HandlingBlocksFromTheFuture.md deleted file mode 100644 index 48094675b9..0000000000 --- a/docs/website/contents/for-developers/HandlingBlocksFromTheFuture.md +++ /dev/null @@ -1,44 +0,0 @@ -# Blocks from the future - -A node can receive a block whose slot is ahead of the current slot. We call such **blocks from the future**. - -The Praos protocol ignores chains with blocks from the future during chain selection. -It assumes nodes have perfectly synchronized clocks, which is not realistic due to imperfections in protocols like NTP and leap seconds. -In practice, a clock skew of up to 2 seconds is considered acceptable. -Our implementation differentiates between blocks from the near future and those from the far future: - -- A block is from the near future if the onset of its slot is ahead of the wall clock, but only by at most the admissible clock skew. Despite being from the future, these blocks are assumed to potentially have been minted by honest nodes. -- A block is from the far future if the onset of its slot is ahead of the wall clock by more than the admissible clock skew. By assumption, these blocks cannot have been minted by an honest node. - -# Handling blocks from the future - -As of [#525](https://github.com/IntersectMBO/ouroboros-consensus/pull/525): - -- When receiving a header from the **near** future in `ChainSync`, an artificial delay is introduced until the header is no longer from the future. -Only then it is validated and the corresponding block body is downloaded and added to the `ChainDB` for chain selection, where it is not considered to be from the future due to the previous artificial delay. -- When receiving a header from the far future, we immediately disconnect from the corresponding peer. - -In addition, we never forge atop a block from the future (which was the case even before [#525](https://github.com/IntersectMBO/ouroboros-consensus/pull/525). - -### During initialization - -Since we now delay the headers until they are no longer from the **near future**, a caught up node will never contain blocks from the future in the `VolatileDB`, according to its own clock. -However, there are two caveats: -- Clock rewinds can violate this property. In particular the node [will error](https://github.com/IntersectMBO/ouroboros-consensus/blob/4488656439e78c572c3dce0f7ed2cf98f61c65bb/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/BlockchainTime/WallClock/HardFork.hs#L138-L146) when we rewind the clock by more than [20 seconds](https://github.com/IntersectMBO/ouroboros-consensus/blob/4488656439e78c572c3dce0f7ed2cf98f61c65bb/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs#L485). -- The node clock might be set in the future relative to the rest of the nodes in the network. -Thus, it is possible that after restarting a node with a clock set in the future, and setting the clock back so that the clock is now synchronized with the rest of the network, the blocks in the `VolatileDB` are regarded as blocks from the future. - -When initializing the `ChainDB` we do not check if blocks in the `VolatileDB` are from the future. This presents two inconveniences: - -- When the node diffuses these blocks from the **far** future, it will be disconnected from other peers. -- The node [will not forge](https://github.com/IntersectMBO/ouroboros-consensus/blob/16fa8754be24f26eddef006c03ba945ea00e3566/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/NodeKernel.hs#L708) a block on top of a block from the future, thus missing its chance to lead in the slot. - -These problems can be solved by wiping out the `VolatileDB` in this situation. -However, note this is an extremely rare situation: the clock of the node would have to have been set quite far in the future, as shutting down a node and restarting it already takes a significant amount of time. - -In the future we might delete blocks from the future from the `VolatileDB` to improve the user experience and robustness of the initialization logic. For now it does not seem worthwhile to handle that rare case. (Downstream/bidirectional peers will disconnect from such a node, but only until enough time has passed that its `VolatileDB` does not contain blocks from the future anymore.) - -# References - -- [Original issue that prompted the fix](https://github.com/IntersectMBO/ouroboros-network/issues/4251) -- [Blocks from the future (Incident report)](https://updates.cardano.intersectmbo.org/2024-09-07-incident/) diff --git a/docs/website/contents/for-developers/HardWonWisdom.md b/docs/website/contents/for-developers/HardWonWisdom.md deleted file mode 100644 index 630936dbfc..0000000000 --- a/docs/website/contents/for-developers/HardWonWisdom.md +++ /dev/null @@ -1,557 +0,0 @@ -This document contains a loosely organized list of small summaries of realizations we had while working on the code base. - -We do eventually want to integrate these lessons learned into more coherent and targetted documents. -But step one one is to record them at all; this file is supposed to make that easy. -Step two will be to occasionally extract cohesive insights from this bag, creating new documents or refining old ones accordingly. - -## Why doesn't Ledger code ever return `PastHorizonException`? - -One of the `HardForkBlock` combinator's major responsibilities is providing an `EpochInfo` to the ledger code. -This `EpochInfo` uses the `Either` monad to return `Right` only when the query can be answered with certainty. -For more information on when that is, see the [Consensus Report](https://ouroboros-consensus.cardano.intersectmbo.org/pdfs/report.pdf) -and the recordings of Edsko's presentations at the Weekly IOG Seminar([1](https://drive.google.com/file/d/1m_jKQM_gxBm0ctLqIq9NGj5_nXPI66Su/view),[2](https://drive.google.com/file/d/1QIJ-VBlj-txB6K6E7DIEnY5TzaD89qQm/view)). - -However, most of the the ledger code that interacts with the given `EpochInfo` assumes it cannot fail by using `epochInfoPure`. - -```haskell -data Globals = Globals { epochInfo :: !(EpochInfo (Either Text)), ... } - -epochInfoPure :: Globals -> EpochInfo Identity -epochInfoPure = hoistEpochInfo (either (throw . EpochErr) pure) . epochInfo -``` - -Thus, it is the responsibility of the calling code (eg the Consensus code) to check that the `HardForkBlock`-derived `EpochInfo` will not fail when its invoking the ledger rules. -One example we've been looking at recently is the invocation of the `TICKF` rule, which is the `ledgerViewForecastAt` definition below. - -```haskell -data Forecast a = Forecast { - forecastAt :: WithOrigin SlotNo - - -- Precondition: @At s >= forecastAt@ - , forecastFor :: SlotNo -> Except OutsideForecastRange (Ticked a) - } - -class ... => LedgerSupportsProtocol blk where - ... - ledgerViewForecastAt :: - HasCallStack - => LedgerConfig blk - -> LedgerState blk - -> Forecast (LedgerView (BlockProtocol blk)) - - -instance ... => LedgerSupportsProtocol (ShelleyBlock (TPraos crypto) era) where - ... - ledgerViewForecastAt cfg ledgerState = Forecast at $ \for -> - if - | NotOrigin for == at -> - return $ SL.currentLedgerView shelleyLedgerState - | for < maxFor -> return $ futureLedgerView for - | otherwise -> throwError OutsideForecastRange { ... } - where - ShelleyLedgerState {shelleyLedgerState} = ledgerState - - globals = shelleyLedgerGlobals cfg - swindow = SL.stabilityWindow globals - at = ledgerTipSlot ledgerState - - futureLedgerView :: SlotNo -> SL.LedgerView (EraCrypto era) - futureLedgerView = - either - (\e -> error ("futureLedgerView failed: " <> show e)) - id - . SL.futureLedgerView globals shelleyLedgerState - - maxFor :: SlotNo -- Exclusive upper bound - maxFor = addSlots swindow $ succWithOrigin at -``` - -When we returned to this code for the first time in a while, we thought it was odd that the code both handles an `Either` in the return type of `SL.futureLedgerView` and also does its own `for < maxFor` check; can't the Ledger code instead return `Left` whenever `for >= maxFor`? - -We looked at the upstream code to investigate; how easily could we arrange that? -The answer is: it could be done, but the core architecture of the State Transition System code in the core Ledger library does not currently naturally allow for that (at least in our subjective opinion of _naturally_ and specifically for the `TICKF` example). -At the moment, any rule that can _fail_ must also provide a "default" value for the rest of the rule to use (see the `Predicate` constructor of the `Clause` GADT, specifically its argument of type `a`). -For the Ledger's code implementing the `TICKF` rule to observe the `Either` layer of the `EpochInfo` would require that the rule has some way to continue when the `EpochInfo` query (used to determine if the requested forecast crosses an epoch transition) fails. - -It is not obvious how to do that when `EpochInfo` returns `Left`. -While it may be possible to work something out, such as perhaps the `TICKF` rule emits a new `PredicateFailure` and simply leaves the `NewEpochState` unchanged, no idea seems natural to us. -They all involve creating an incorrect `LedgerView` and then only throwing it away at the last moment. -And notably, the rest of the rule could emit additional errors, all of which would be presumably spurious given that we already know the very first check (ie querying the `EpochInfo`) failed. - -So instead, for now at least, the Consensus code must do its own checking before invoking Ledger code that relies on the `EpochInfo` never failing. - -- By design, any invocation of Ledger code that causes the `EpochInfo` to return `Left` would be a _bug_, with no obvious way to recover. - Thus this isn't a particularly burdensome requirement; not much extra code (such as `for < maxFor` above). - And also thus: throwing these exceptions from pure code is reasonable choice. - -- We asked the Ledger team, and they didn't immediately reject the possibility of enriching the base monad's feature set to include short-circuiting failure (eg adding an `ExceptT` in the Ledger rules) for use in computations such as the given `EpochInfo Either` where it would make sense to immediately abort the rule computation. - -A couple more observations: - -- The ways the `TICKF` rule can currently fail are all sanity checks. - In particular, if they fail, then there's no way this chain could ever successfully cross the epoch boundary, not via `TICKF` nor via the full `TICK`. - This justifies the use of `error` in the `where`-clause `futureLedgerView` above---there is no useful way to recover from this error; the node is doomed to never tick past the epoch boundary until an operator manually truncates its chain so it can switch to a better one (if one exists :fingers-crossed:) that isn't doomed. - -- At least one part of the ledger _does_ use the `EpochInfo Either` as a test: the validation of the `ValidityInterval` of a transaction that contains a Plutus script. - The code here accommodates the inflexibility of the `Predicate` rule by using an additional `whenFailureFree` combinator to skip over invalid tx, thus avoiding the computation that would require the result of the `EpochInfo` that instead returns `Left`. - (TODO ... Frisby wonders if every use of the `epochInfo` could do that same thing). - -So, either by mimicking the approach of the existing `ValidityInterval` validation logic or by altering the STS innards to allow short-circuiting failure, we could reify the `EpochInfo` failures into the `PredicateFailure` hierarchy, and thereby leverage the types to force each invocation of the Ledger API to independently handle the possibility of `PastHorizonException`s. -But it's not obvious that that is definitely worth the extra complexity it would introduce on the Ledger code. - -## Why use the Honest Chain Growth window as the Ledger's Stability Window? - -Suppose we have selected a different chain than our peer and that our selected chain has L blocks after the intersection and their selected chain has R blocks after the intersection. - -REQ1: If k LedgerState blk --> Either OutsideForecastRange (LedgerView (BlockProtocol blk')) -``` -(in reality, there is an intermediate `Forecast` type, see `ledgerViewForecastAt`). - -The HFC implements forecasting like this (for the actual implementation, see `Ouroboros.Consensus.HardFork.Combinator.Ledger`, in particular `oneForecast`): - - - Due to stability requirements of the safe zone, the HFC can always determine whether the desired slot is still in the current or already in the next era when it is within one safe zone of the current ledger state. - - If the HFC can not yet know the era of the slot, it fails with `OutsideForecastRange`. - - If the slot is in the current era, the HFC delegates forecasting to the underlying block type. - - If the slot is in the next era, the HFC calls a user-provided function to forecast: - - ```haskell - newtype CrossEraForecaster state view x y = CrossEraForecaster { - crossEraForecastWith :: - Bound -- 'Bound' of the transition (start of the new era) - -> SlotNo -- 'SlotNo' we're constructing a forecast for - -> state x - -> Except OutsideForecastRange (Ticked (view y)) - } - ``` - (which is available via a field of `hardForkEraTranslation` in `CanHardFork`). - -Hence, the HFC fully offloads the task to work out a safe way to do cross-era forecasting to the user, in particular, the task of determining how far ahead one should be able to forecast. - -In our case, there are two cases of era transitions: - - - **Intra-Shelley:** These are trivial to support, as there are almost no changes regarding forecasting, so we can simply forecast starting in the old era and then convert the resulting `LedgerView` to the new era. - - The `LedgerView` actually only depends on the `ConsensusProtocol`, which only changed from Alonzo/TPraos to Babbage/Praos (Vasil HF), and even there, the translation only consists of un- and rewrapping (see `translateLedgerView`). - - The stability window/forecasting range also stayed the same so far, but there already is existing logic to handle changes there, see the usage of the very conservative `crossEraForecastBound` in `forecastAcrossShelley`. (We definitely will want to revisit that in case we actually ever do a change here.) - - - **Byron-to-Shelley:** This is implemented in `crossEraForecastByronToShelleyWrapper`, and exploits the fact that the ledger view for the first Shelley epoch is independent of the Byron ledger state, and can be constructed just using the static Shelley ledger config. - - Additionally, it allows you to forecast up to one full stability window into Shelley (which is much larger than the stability window of Byron, from the ledger state for `2k` slots vs from the ledger state to the epoch transition and then an additional `3k/f` from there). - -Future work could include making the HFC itself handle more details of cross-era forecasting, in particular around determining safe forecast range bounds in case of a changing stability window. - -## Which slots/times/epochs can we translate? - -In early May 2023, we spent the Consensus Office Hours discussing a node test of the `slot-number` CLI command, which translates a slot to a UTC time. -In particular, the tester's question was essentialy "When is the slot-number command expected to fail?". -The answer is ultimately not too complicated, and generalizes to other translations between slots, epochs, and times. -But this is the nth time we've answered it (sometimes we asked ourselves), and each time required a substantial effort to re-learn it so that we could answer confidently. -This topic definitely deserves better docs/dedicated tests/etc---but we're (as always) strapped for time, so this section is stop-gap measure (that's the point of this whole file as a staging ground). -This explanation summarizes abstractly and then points to key parts of the implementation. - -It's worth noting that this capability is not used only for queries. -In particular, these translations are how the node determines it leads the current slot. - -### The HFC "Shape" and the HFC "Summary" - -The Hard Fork Combinator lets us specify eras separately and compose them into a single type of chain (ie a "block type") that can fork through some prefix of those eras. -Any piece of code supports some sequence of eras. -For example, the original Cardano code only supported Byron. -At some point we added Shelley to the code. -And at some later point we added Allegra. -And so on. -It's notable that the Cardano chain hard forked into the latest era before the addition of each subsequent era. -To be pedantically concrete: the code supported only Byron and the chain was in Byron, then the code also supported Shelley, then the chain forked into Shelley (hurray!), then the code also supported Allegra, then the code forked into Allegra, and so on. -In general, it's possible the code could know about an arbitrary number of future eras before forking into them. -Or it could know about a future era and we could change our minds about it, deleting that era without ever forking into it. -But, so far, on Cardano the code has always been either zero or one eras ahead of the whole network's chain (ie "the Cardano chain"). -Even so, a new node syncing today will at some point have only synced enough of the chain to be in, say, Mary, even though the code knows about multiple eras after Mary. -So, despite Cardano doing the simplest possible thing with respect to the whole network's chain, new (or even just very stale) nodes will exercise the more general possibilities (ie the code knowing about multiple eras beyond the tip of the node's current selection). - -Thus, at any given time the code supports some non-empty sequence of eras. -And, at that same time, all valid Cardano chains and their prefixes (aka all valid Cardano blocks) will inhabit some prefix of that sequence---in the absence of catastrophic release and/or operator failure. - -A Hard Fork Combinator ledger state provides enough information to determine which era it is in. -It must also determine (ie record) when that era and every preceding era started. -Trivially, this also determines when all the _preceding_ eras ended (ie when the successor started). -Thus, every ledger state determines the start time of `N` eras and the end time of the preceding `N-1` eras (note: there's one more start time than end times) for some `N`. -Every `N` will be at least 1, at most the length of the sequence of eras the code supports, and subsequent ledger states on a chain cannot have a lesser `N`. -For the real Cardano chain, it's possible the ledger state itself inhabits either either the `N-1`th or the `N`th era, since it it _might_ also determine when its own era will end. -However, beyond the concrete case of Cardano, it's possible that a ledger state could already know when eras after its own will end. - -### Aside: Warning - -(Skip this section on your first read.) - -That invariant about how many era starts/ends a ledger state determines was coyly worded to exclude one perhaps-surprising exception: the code allows for an era to be specified to never end. -The above invariants remain true, but can be tightened in this case. -Specifically, when the ledger state reaches the era that is specified to never end, it is thereafter always definitely in the `N`th era (not the `N-1`th), and there will never be a greater `N`. -(The code may support eras after an unending one, but that would be an awkard/wasteful choice.) -No Cardano era is specified to never end, and we currently do not foresee every doing so. -The possibility of an never-ending era is only supported for tests and for reuse by other blockchain implementors that are not concerned with extensibility. - -### The Wrinkle with Time - -For interpreting slot/time/epoch translation queries, the key motivating fact is that each era can have a different size of epoch (in slots) and/or a different length of slot (a time duration). -Thus, we cannot handle a translation query unless we know which era its argument---be it a slot, an epoch, or a UTC time---is in and the durations of all preceding eras, or, equivalently, the start times of all eras up-to-and-including the one the argument is in. - -Each query is handled by some piece of code and with respect to some ledger state. -The code (including config files) determines the supported eras (including their epoch size and slot length), and the ledger state determines which prefix of eras has known start times. -The known start times are enough to recognize when the given argument is during some era with a known end time, in which case the translation succeeds. -(The translation starts from the chain's start time, adds the duration of all preceding eras, and then adds the relative time since the beginning of the argument's era.) -Otherwise, we need more information to know whether the given argument is during the last era with a known start time, ie the first era with an unknown end time. -When the query argument is after that start time, the fact that the era's end is not yet known means that the query argument is either in that era or instead in a future era with a possibly different epoch size/slot length, and so the correct translation may differ from the hypothetical response derived from the assumption the query argument precedes the first unknown end time. - -For a ledger state in the first era with an unknown end time (ie the last era with a known start time), the code relies an a lower bound for that end time, ie the soonest that era could possibly end. -If a query argument handled by that ledger state precedes that bound, then the time-slot translation requested by that query succeeds, otherwise it fails. -For this purpose, the code (including config files) cannot support an era unless it also knows a "safe zone" for that era, where the safe zone (along with any additional assumptions the Consensus code makes) is enough information to determine the bound induced by a given ledger state. - -In general, it would be possible to design a system such that even the final ledger state in an era did not determine when that era would end. -That'd be an empty safe zone, consisting of zero slots. -For example, perhaps the first block of an era identifies itself as such simply by setting some field in its header. -For that kind of chain, some ledger states would not provide enough information to do any translations whatsoever of slots/times/epochs _after_ that ledger state's tip. -(Note that if the first block of an era declares itself as such, then the node that minted that block has some how already decideded to transition to the next era. -Hence the correspondingly hypothetical leadership check would have known whether it's about to forge a block in the current era or the next, and so it would still be able to determine the slot of the wallclock _according to the era of the block it's planning to forge_.) - -For the case of Cardano, however, other concerns (not directly related to slot/epoch/time translations) already require a degree of "stability" from the ledger rules to be above some minimum. -This "stability" is a stronger requirement than the safe zone, so, for the sake of simplicity, we take that same minimum (aka one _stability window_) to be the safe zone. -Thus the safe zone is `2k` slots for Byron and `3k/f` slots for every Shelley era. - -Recap: - -- Consider some Cardano ledger state. - There is a first era that has an unknown end time according to that ledger state, which is also the last era with a known start time. -- Even though the end time is unknown, it cannot be sooner than one safe zone after the known start time. -- Moreover, if the ledger state also inhabits this era, the era cannot end sooner than one safe zone after the slot this ledger state was most recently ticked to. -- Overall, it can be defined as: the _safe zone_ of an era is a lower bound on the number of slots that exist before the end of that era and after the latest-possible ledger state that does not determine the end of that era. - -### Aside: The Necessary Stability of Header Validity - -[Esgen suggests that this could eventually be migrated to section 24.5 ("Eliminating safe zones") of the Consensus and Storage Layer Report (or the succeeding section).] - -(Skip this section on your first several reads.) - -- Headers declare what era they are in. - -- The stake distribution of the next epoch is determined at least one stability window before it starts, regardless of whether that next epoch is in the next era. - -In conjunction, a header that satisifes its declared era's rules can be validated as such by some ledger state even if there is an era transition between the two. -Today's code handles this by ensuring that any such era transition is necessarily already known by the ledger state, but that's not strictly necessary. -Relaxing that constraint (eg admitting an empty safe zone) introduces more complexity, which Cardano has so far eschewed. -For example, there is no guarantee that the ledger state the header actually extends (ie the one resulting from ticking the ledger state as of the application of the previous block into this header's slot) is indeed in the era the header claims to be in; so it could satisfy the rules of its claimed era but still actually be an invalid header (when that claim is a lie). -Moreover, era transitions are not the only updates that can affect the validity of headers. -One excellent example is the the Transitional Praos (aka "TPraos") decentralization parameter `d` (any protocol parameter change requires a version change, but it could be minor---only major version changes can possibly cause proper era transitions). -Another example is that no part of the design beyond (probably wise) convention is preventing a so-called "intra-era" fork from influencing the header validity. - -Continuing this hypothetical: an adversary could lie about what era their header inhabits in order to send an apparently valid header that is actually revealed as invalid once the intervening blocks are available---obviously that's undesirable, but is it truly problematic? -We generally consider that the Header-Body Split requires a ledger state can correctly determine the validity of any header within one stability window of the (last applied block of the) ledger state. -But that's just an ideal case; we could relax that, if we had a reason to embrace the additional complexity it involves. -The actual fundamental requirement derived from Praos is two-fold. - -- No false alarms for honest headers: an honest header (which is by definition actually valid) must never appear as invalid. - -- The only possible harm of missed alarms (an adversary's invalid block appearing to have a valid header) are DoS-vectors preventing the node from concluding the honest header's are attractive enough to fetch the honest blocks as promptly as Δ requires. - -- (Compare that pair to the "Why use the Honest Chain Growth window as the Ledger's Stability Window?" question in `HardWonWisdom.md`.) - -Roughly: the fundamental rule is to not (at all) underestimate the honest chain growth and to not excessively over-estimate the adversarial chain growth. - -Consider some examples. - -- Even in this laxer rule, the real `d` parameter cannot change within the stability window, because if it does change, then honest headers that are in an overlay slot according to the reduced `d` might not be in an overlay slot according to the unreduced `d`, and that would lead to false negatives for honest (overlay) headers. - -- It would be possible to have defined the overlay schedule such that the overlaidness of a slot was monotonic in `d` (thereby preventing the above counterexample). - We didn't do it that way; even if we had, then there still would have been false alarms for honest headers, because some honest headers in slots that were actually not overlaid would be rejected since the incorrectly greater `d` would interpret those slots as overlaid. - So the `d` parameter is something that even the laxer rule could not accomodate (even when assuming it can't increase, because the its overall influence on honest headers is not monotonic). - -- As of epoch 257, `d=0` (ie no slots are overlaid). - Since then, no change to the Cardano protocol parameters (including era transitions) has changed the (average) number of slots any given issuer leads during any given interval of slots. - Also since then, every change that has at all affected the validity of headers has been an era transition. - Therefore, _none of those subsequent changes truly required a stability window of warning_. - Honest headers after such change would correctly identify themselves as such by claiming the new era, and therefore would be correctly validated. - An adversarial header, in this hypothetical, could have falsely claimed to be from the new era; it would not be identified as actually invalid until its block arrived. - But the crucial insight is that such adversarial headers are still limited by the adversary's election rate, and so probably could not prevent the node from fetching the honest blocks---unless the next era has _abruptly_ and _drastically_ the number of slot each stake pool leads. - -Recall that that discussion was merely theoretical, to better delineate the fundamental requirements. -The real Cardano ledger always has and still does ensure that header validity is fully determined at least one stability window in advance. -We have had no motivating reason to eliminate that simplification, as of yet; so far we don't anticipate one arising soon. -(Currently, the protocol parameter changes are even known _two_ stability windows early! -But some factors are still just singly stable, eg the stake distribution is only frozen one stability window before the next epoch.) - -(TODO What about the config file overrides that result in empty epochs?. -I'm actually unsure how that's working now... does it only work if a whole prefix of the static era sequence is skipped? -EG you can't skip only the 3rd era?) - -### Aside: Warning - -(Skip this section on your first read.) - -That reasoning implies some non-empty suffix of the ledger states in an era will each determine the exact end time of that era. -It's technically possible a ledger state could also determine the end time of subseqeuent eras, but the Cardano ledger rules do not permit that. -On `mainnet` Cardano, only blocks in an era can cause that era to end (technically false, but it's the right sentiment). -This also implies each era with a known end time on a `mainnet` chain must contain some blocks on that chain. -On the other hand, the Consensus Layer configuration inputs do permit overriding the era transition rules for the sake of testing, in which case a ledger state (including the initial ledger state at genesis!) could anticipate the end time of several subsequent eras and some eras could be empty (eg main use case is skipping from genesis to some later Shelley era ASAP, in which case all the intervening eras have no blocks but also have no slots!). - -### Aside: Warning - -(Skip this section on your first several reads.) - -There is one last notable caveat at this abstract level. -The Byron and Shelley ledgers already had some logic for the evolution of proposals that can change the protocol (eg incur an era transition). -When designing and implementing the Hard Fork Combinator for use at the Byron-to-Shelley transition, Edsko de Vries reasoned through that the state machines of that logic needed to be adjusted to ensure "double stability". -The best resource we have for motivating this constraint is [Edsko de Vries' IOG seminar from 2020 June on the HFC and time](https://drive.google.com/file/d/1QIJ-VBlj-txB6K6E7DIEnY5TzaD89qQm/view). - -- At the 16m04s mark he motivates that the forewarning must suffice for at least k+1 headers. - -- At the 22m42s mark he starts explaining the Byron proposal state machine, and this ends up motivating "stably stable", aka "doubly stable", aka "double stability", aka "stable stability". - (This recording was made before the Byron-to-Shelley fork happened.) - -- From 30m46s to 38m52s, he explains the justification for cross-chain translations (and off-handedly that it's technically optional). - -For example, [Shelley the `PPUP` ledger rule](https://github.com/IntersectMBO/cardano-ledger/blob/180271602640bcac1214084b6de61d0468332f00/eras/shelley/impl/src/Cardano/Ledger/Shelley/Rules/Ppup.hs#L192) requires update proposals to be settled at least two stability windows before the end of the epoch (ie `6k/f`, not just `3k/f`). -(That links to the tip of the `master` branch at the time of writing this, although this constraint is not new.) - -(TODO Frisby wonders whether, instead of double-stability in the ledger rules, we could instead only draw conclusions that should not be subject to roll back (such as time translations) from the youngest immutable ledger state.) - -### Answer to the Question - -The ultimate answer to the Office Hours question is that the query will fail if and only if its argument is beyond the HFC's current lower bound for the next unknown era end (whether that's the current era or the next). -On Cardano, that lower bound is the end of the ledger state's current epoch UNLESS - -- the ledger state is within 3k/f slots of the end of its epoch -- and/or the ledger state has already determined that its era ends at the end of its epoch (ie the necssary votes are in by the `4k/f`th slot, and there are `k` subsequent blocks after that slot, which tends to happen shortly after the `5k/f`th slot) - -in which case the lower bound is instead the subsequent epoch boundary. - -### Implementation Pointers - -The key corresponding parts of the implementation are as follows. - -- The `ouroboros-consensus:Ouroboros.Consensus.HardFork.History.Qry` module defines `Interpreter`, `Qry`, and `interpretQuery`. - Both `Interpeter` and `Qry` are opaque types, so in reality only whatever pre-defined queries that module exports, such as `slotToWallclock`, are available. - -- These are ultimately used for every slot/epoch/time translation: `EpochInfo` passed to the ledger, the leadership check in a block-producing node, and all Consesus queries (see `ouroboros-consensus:Ouroboros.Consensus.HardFork.Combinator.Ledger.Query.GetInterpreter`). - -- Every downstream use, such as the `slot-number` CLI command ultimately boils down to issuing the `GetInterpreter` query to the node itself and then invoking `interpretQuery`. - -- Crucially, that interpretation can fail when the given interpreter cannot answer the given query, which is precisely the topic of the Office Hours question. - -- Remark. - A significantly fresher `Interpreter` will be able to answer more queries than a stale `Interpreter`. - The `ouroboros-consensus:Ouroboros.Consensus.HardFork.History.Caching` module captures that idea. - -- The `ouroboros-consensus:Ouroboros.Consensus.HardFork.History.EraParams.EraParams.EraParams` captures the data underlying the code's (including the configration files') support for an era. - The (start/end) transition points are represented in triplicate: as a slot, as an epoch, and as a relative time (where `0` is `cardano-base:Cardano.Slotting.Time.SystemStart`, which is a UTC time). - -- The interpretation only depends on the eras' start and end bounds, not on the safe zone. - The safe zone is instead used in an preceding step to safely determine the least possible value of the first unknown end bound. - This determination is implemented by the `ouroboros-consensus:Ouroboros.Consensus.HardFork.Combinator.State.reconstructSummaryLedger` function. - -## The hard fork combinator interface - -To run the Consensus Layer on a block type `blk` requires the following (whether or not it's a `HardForkBlock`). - -- Values for various tracers, ChainDB options, etc, as required by `Ouroboros.Consensus.Node.run`. -- A `ProtocolInfo blk` value, which is `TopLevelConfig blk` as well as initial state of the ledger and protocol. -- Instances of `ConsensusProtocol (BlockProtocol blk)`, `LedgerSupportsProtocol blk`, and so on (see the `RunNode blk` class). - -Suppose there are two blocks types `F` and `G` for which the above is already available (everything will generalize to cases with more than two eras via simple replication). -To run the Consensus Layer instead on the hard fork combinator that sequences `F` into `G` requires the following additional information about `F` and `G`. - -- A value of `EraParams` for `F` and for `G` (ie `Shape [F, G]`), which decomposes as the following for `F` and `G` individually. - - The duration of every slot in the era as a [`NominalDiffTime`](https://hackage.haskell.org/package/time-1.12.2/docs/Data-Time-Clock.html#t:NominalDiffTime). - - The duration of every epoch in the era as a number of slots. - - The era's _safe zone_ is intimately related to the `singleEraTransition` function introduced below, as explained in the next subsection. - The safe zone cannot be 0 because---as discussed elsewhere---that would imply a stability window of 0, which is impossible. -- An instance of `CanHardFork [F, G]`, which decomposes as follows. - - A function `LedgerConfig F -> LedgerConfig G -> LedgerState F -> Bound {- starting slot&epoch&time-since-genesis of G -} -> SlotNo -> Except OutsideForecastRange (LedgerView G)`. - This function will be used for forecasting the ledger view across the era transition; see "How does cross-era forecasting work?" above. - - A function `ConsensusConfig F -> ConsensusConfig G -> EpochNo {- start of G -} -> ChainDepState F -> ChainDepState G`. - This function will be applied to the chain-dependent state immediately after the last `F` header. - Then the protocol rules for `G` will be used to tick that state to the slot of the first `G` header. - This use of `G`'s ticking rules instead of `F`'s to cross the end of the last epoch of `F` is subtle and somewhat counter-intuitive. - (We haven't yet had any concrete issues here, unlike with the `LedgerState` issue linked just below. - However, we did only realize recently that the extra entropy parameter of Transitional Praos should have been considered when translating to Praos at the Alonzo->Babbage transition.) - - A function `LedgerConfig F -> LedgerConfig G -> EpochNo {- start of G -} -> LedgerState F -> LedgerState G`. - This function will be applied to the ledger state immediately after the last `F` block. - Then the ledger rules for `G` will be used to tick that state to the slot of the first `G` block. - This use of `G`'s ticking rules instead of `F`'s to cross the end of the last epoch of `F` is subtle and somewhat counter-intuitive (eg see Issue ). - - Instances of `SingleEraBlock` for `F` and `G`, which decomposes as the following for `F` and `G` individually. - - Types that represent the ledger and protocol configuration _without_ any `EpochInfo` (see `HasPartialLedgerConfig` and `HasPartialConsensusConfig`). - - A function `singleEraTransition :: PartialLedgerConfig blk -> EraParams -> Bound {- era's start -} -> LedgerState blk -> Maybe EpochNo` which must return `Just e` if any extension of this ledger state will end between epoch `e` and its predecessor (ie epoch `e-1` when `0 If a chain's configuration data and blocks so far together determine when the era starts but not when it ends, then at least `d` slots after the latest block (non-EBB) will be in that era. -> (If the latest block is from an earlier era, then those `d` slots begin with the first of the era. -> Otherwise, the latest block is in the era and the `d` slots begin immediately after it.) - -Consider an arbitrary `[F, G]` chain with 200 `F` blocks followed by 30 `G` blocks (these counts are only real blocks, excluding any EBBs). -Each block on that chain results in a ledger state in the same era as the block. -In addition, however, there is also a `LedgerState` at the beginning of each era that is not the result of a block from that era. -For `F`, it's the initial ledger state (resulting from the genesis "block") and for `G` it's the translation of the last `F` ledger state to `G`. -Thus, this chain will induce a sequence of 201 `F` ledger states and a sequence of 31 `G` ledger states. -The `F` safe zone constrains the output of `singleEraTransition @F` when it is applied to that each `LedgerState F` in that sequence, and similarly for `G`. -(Note that those sequences _exclude_ ledger states that arise from any EBBs interspersed among the real blocks.) - -Specifically, for the sequence of ledger states within an era, if the era has a safe zone of `d`, then its `singleEraTransition` function cannot return `Nothing` for a ledger state in that era and `Just e` for the next ledger state in that era unless the epoch `e` is still far enough in the future. -Note that the second ledger state in that specification necessarily arises from a block in the era, since only the first ledger state in an era does not arise from a block in that era. -Let `y` be that block; the exact safe zone constraint is `slot(y) + d < firstSlot(e)`. -(Lastly, recall once more that the ledger state sequence in question is intentionally excluding any arising from EBBs.) - -That interpretation of the safe zone constraint explicitly only considers the evolution of `singleEraTransition` _within a single era_. -In particular, it did not at all constrain the output of `singleEraTransition` for the initial ledger state of the era. -The rest of this subsection discusses that, including notably that that initial output is always `Nothing` in the fundamental use case, in which the end of an era cannot be known before any of its block exist. - -In the fundamental motivating use case of the HFC, `singleEraTransition` will return `Nothing` for the first ledger state of each era, and subsequent governance events within that era on the chain will cause it to return `Just` for the remaining suffix of that chain's ledger states in this era. -However, there are a total of three possible trajectories of the `singleEraTransition` within an era on some chain. - -- EXTENSIBLE trajectory. - It starts with `Nothing` and ends with `Just`, as in the fundamental motivating use case. - Note that once it becomes `Just` it will always remain `Just` (with the same epoch number `e`) for the rest of this chain, by the monotonicity of `singleEraTransition` within an era of some chain. - This is the only case in which the above single-era interpretation of the safe zone applies, because it's the only case that involves both `Nothing` and `Just` in the same era. -- NEVER trajectory. - It starts a `Nothing` and will necessarily remain `Nothing` on the entire chain. - For example, `singleEraTransition _cfg _params _start _st = Nothing` is a compatible definition. - In this case, any safe zone value would satisfy the high-level rule, because the era never ends---the implementation names this an _indefinite_ safe zone. -- IMMEDIATE trajectory. - It starts as `Just e`. - Note that it will always remain `Just e` for the rest of this chain, by the monotonicity of `singleEraTransition` within an era of some chain. - The IMMEDIATE trajectory can arise in two ways. - - Case IMMEDIATE-INDEPENDENT. - It's possible that the configuration data determines the end of the era, entirely independent of the preceding chain. - For example, `singleEraTransition cfg _params _start _st = Just $ foo cfg + 42` is a valid definition. - In this case, any safe zone value would satisfy the high-level rule, because the end of the era is determined even before the start is. - (TODO the HFC is "technically incorrect" because it assumes the safe zone applies even in this IMMEDIATE-INDEPENDENT trajectory, but only in the corner case when the era does not contain even one safe zone of sots, eg it contains no slots, as in the next subsection.) - - Case IMMEDIATE-DEPENDENT. - It's possible that the preceding chain before the era determines its end. - No known chain does this. - It is technically allowed by today's HFC, but only by accident. - There are two notable subcases; see the next subsection. - - Subcase IMMEDIATE-DEPENDENT-BOUND. - The determination instead depends only when the previous era ended. - This is less obviously exotic. - For example, the era could specify that it lasts exactly 10 epochs, regardless of when it starts. - In this case, any safe zone value would satisfy the high-level rule, because the end of the era is determined exactly when the start is. - (TODO the HFC is "technically incorrect" because it assumes the safe zone applies even in this IMMEDIATE-DEPENDENT-BOUND trajectory, but only in the corner case when the era does not contain even one safe zone of sots, eg it contains no slots, as in the next subsection.) - - Subcase IMMEDIATE-DEPENDENT-TRANSLATION. - If the determination depends on the result of translating some parts of the last ledger state in the previous era, then the blocks of one era are directly determining the end of a later era. - This seems incompatible with the fundamental motivation of the HFC. - This case has an intricate relationship with the safe zone. - Either the output epoch is at least a safe zone after the start of the era, or else this era starts in epoch 0 and all previous eras both start and end in epoch 0, since that guarantees that the initial ledger state is immediately available, so that the era's end will be determined when the start is, thereby trivially satisfying the high-level safe zone rule. - Note that this prefix of eras therefore contains no slots, which is the topic of the next subsection. - -Every era of Cardano mainnet today uses the EXTENSIBLE trajectory. -However, other Cardano chains used for testing and/or benchmarking instead use the IMMEDIATE era for some prefix of eras in order to "skip" them, starting the chain in a later era (see the next subsection). -Lastly, due to bugs, some mainnet eras were previously using the NEVER trajectory by accident (eg see PR ). - -The intended use of each trajectory is as follows. - -- Use EXTENSIBLE for eras that are expected to end on the chain, even if they could not actually end today (eg even if their current `singleEraTransition` implementation will never return `Just`). - For example, this could be `F` and `G` in `[F, G]`, if the plan is for this chain to later transition out of `G` into an `H` era that doesn't exist _yet_. - In this way the HFC combinator enables today's chain to eventually transition seamlessly into eras that do not yet exist. - The core idea is that an `[F, G]` chain should still specify a finite safe zone for `G` despite it currently being the last era in the sequence, since the blocks created by nodes running `[F, G]` will eventually be validated by future nodes running `[F, G, H ...]`. -- Use IMMEDIATE only for eras that ended in the past or could end on the chain today (ie next era's implementation is already deployed). - For example this could be `F` in `[F, G]` but not `G`, since there's not yet a next era in the implementation. -- Use NEVER only for what is known to be the final era the chain will ever have. - For example this could be `G` in `[F, G]` but not `F`, but only if the plan is for this chain to never transition out of `G`. - It's always safe to use the EXTENSIBLE trajectory instead of the NEVER trajectory, but the NEVER trajectory will allow the HFC to predict eg slot-and-time translations into the indefinite future. - -The HFC interface currently requires the user to specify the `EraParams`'s safe zone and the `singleEraTransition` function separately. -As such, it is possible to accidentally specify an indefinite safe zone alongside a `singleEraTransition` that sometimes returns `Just`. -It's also possible to accidentally use the NEVER trajectory for what is not actually the final era. -These violations do not necessarily lead to irrevocable disaster, but they are likely to cause confusion and/or require eg some patches to the the ledger rules of preceding eras when releasing a new one (eg see PR ). - -### Eras that contain no slots - -The HFC interface and contract together permit `singleEraTransition cfg eraParams start st` to return `Just (boundEpoch start)`. -In that case, the era contains no slots on the chain. -Since it therefore contains no blocks, `st` must be the era's initial ledger state, and so this equality rules out the EXTENSIBLE trajectory. -It also cannot be the NEVER trajectory, since `singleEraTransition` is returning a `Just` at all. -Therefore this equality is only possible for an era using the IMMEDIATE trajectory. - -As explained above, the constraint induced by any safe zone value is trivially satisfied for the IMMEDIATE-INDEPENDENT and IMMEDIATE-DEPENDENT-BOUND cases. -In the IMMEDIATE-DEPENDENT-TRANSLATION case, however, `singleEraTransition` cannot be applied without the initial ledger state of the era, and so the end can't be determined before that initial ledger state is. -Since in general some chains in the preceding non-empty era will determine the start of this era before they determine its initial ledger state, the IMMEDIATE-DEPENDENT-TRANSLATION case only necessarily satisfies the safe zone when some prefix of the era sequence contains no slots. -That's when the era's initial ledger state is necessarily available as soon as its start is determined (since it's just a sequence of translations starting from the chain's genesis "block"). -Therefore that's the only circumstance in which the IMMEDIATE-DEPENDENT-TRANSLATION case is allowed to return `Just (boundEpoch start)`. - -In summary, `singleEraTransition cfg eraParams start st` can only return `Just (boundEpoch start)` either if `singleEraTransition cfg eraParams start undefined` would also (ie in the IMMEDIATE-DEPENDENT-BOUND case) or for a prefix of the eras, since that ensures each era's initial ledger state is also determined (ie in the IMMEDIATE-DEPENDENT-TRANSLATION case). - -It's unclear if it's even desirable for the HFC to allow eras that contain no slots, with one exception: the Cardano system-level benchmarks already rely on this behavior in order to skip a prefix of the chain's eras. -Indeed, skipping a prefix of eras seems like the most natural use case, since the "genesis block" itself is already not an actual block. -Moreover, this is the exact case in which the era's initial ledger state is definitely also determined when its start is determined. - -But there is likely a more direct way to support this "skipping" use case. -Specifically, it seems possible and desirable to remove the IMMEDIATE trajectory from the HFC interface, so that the HFC only ever applies `singleEraTransition` when there is a block in the era. -Something along the lines of "if an era's end is determined before its first block exists, then the era must end before slot 0". -Or more directly: require that `singleEraTransition` returns `Nothing` for the initial ledger state of every era and also provided a separate and isolated means of constructing an initial hard fork `LedgerState` that is in a later era (instead of only the first era). - -TODO The current code, Edsko's chapter in the report, and the "the precisely-worded high-level rule" for the safe zone semantics sometimes applies the safe zone from the first slot of the era. -Perhaps this suggests that the translated-but-not-actually-ticked state is indeed kind of summary of everything that came before, a la the "genesis block"? -In which case it does in some sense require ticking at least parts of the last ledger state of the previous era across the epoch boundary (as in the minimal Babbage->Conway bugfix PR ). - -## Ledger predictions: time translation, forecasting, stability window, safe zone, double stability - -We often mix these concepts up, so this is an attempt to relate them all to each other in one place. - -- A _stability window_ is defined as the number of slots in which the Chain Growth property of Ouroboros Praos implies the best chain in the network will grow by at least `k` blocks. -- By design, the Cardano ledger also ensures that the leader schedule is known at least one stability window in advance. - See "Why use the Honest Chain Growth window as the Ledger's Stability Window?". -- Within a single era, we use one stability window as the upper bound on how far the forecast logic is willing to predict. - Indeed, one stability window is the greatest value such that there are no arguments for which the forecast logic would be unable to predict that far. - But, for some arguments, the forecast logic could correctly predict up to one epoch farther than that, if we allowed that. - But we don't; the `ledgerViewForecastAt` will refuse to forecast beyond one stability window, even when it could. - (For example, if that logic always forecasted as far as it could, then the number of headers held in-memory by ChainSync while syncing would oscillate significantly.) -- When forecasting across eras with different stability windows, we need a different limit; see "How does cross-era forecasting work?". -- For Cardano, the time translation's safe zone is also set to the value of one stability window. - The value is equivalent, since they both are predicting things that change at the epoch boundary and only do so when the change is known at least one stability window in advance. -- However, there is one more subtlety. - - Forecasting predicts essentially the next epoch's leader schedule. - The ledger rules do determine that schedule after the last block that is at least `3k/f` slots before the epoch transition. - - Similarly, time translation is predicting the next epoch's era according to the hard fork combinator. - For the Cardano eras, the hard fork combinator will transition to the next era at an epoch transition if two conditions are met. - First, the ledger rules must increase the major protocol version protocol parameter at that epoch transition. - Second, there must exist at least `k` blocks before the epoch transition and after the ledger state in which that protocol parameter update became certain. - - For this reason, the ledger's governance rules require that all votes for changing protocol parameters must be cast at least `6k/f` slots before the epoch transition. - Thus, Chain Growth ensures that `k` blocks will extend the latest-possible ledger state that determines whether the protocol major version will change, and the `k`th such block will still be at least `3k/f` slots before the epoch transition. - And so the safe zone of `3k/f` is respected, since it's ultimately the existence of that `k`th block that determines whether the hard fork combinator will actually transition to the next era. - - The arithmetic is `stability window + safe zone = 6k/f`, but the value could be different if the safe zone weren't equivalent to one stability window. - The safe zone can't be less than a stability window, because then the leader schedule also couldn't be known at least a stability window before the epoch transition (the next era might have a different leadership schedule). - But the safe zone could be greater than a stability window (eg maybe requiring the ledger rules end voting `7k/f` before the epoch transition). - - The above terminology doesn't match Conway's new governance rules, but the nub is the same. -- In contrast to the forecast logic, the time translation logic does do translations beyond the safe zone when it's able to. diff --git a/docs/website/contents/for-developers/NodeTasks.md b/docs/website/contents/for-developers/NodeTasks.md deleted file mode 100644 index 1d3da9818f..0000000000 --- a/docs/website/contents/for-developers/NodeTasks.md +++ /dev/null @@ -1,333 +0,0 @@ -# Overview of the tasks of a caught-up node - - -This document gives an overview of the tasks of a [caught-up](./Glossary.md#honest-caught-up-parties) node, both as a relay and as a block producer. - -## In a single node - -We refer to the [component diagram](./ComponentDiagram.md) for a very high-level overview of the data flow in a node. -Another good diagram is [Figure 1.1. in the Shelley networking spec](https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-spec/network-spec.pdf). - -Also see the [Glossary](./Glossary.md) for jargon explanations. - -### Chain selection and storage layer - -As a basis for all other operations, the node needs to maintain a *current selection*, ie the best valid chain it has seen so far. - -The selection is made up of an immutable and a volatile part: - - - The immutable part of the selection consists of blocks that are no longer subject to rollback. - This is the case when a block has been confirmed by at least $k$ (the *security parameter*, $k=2160$ on mainnet) blocks, as guaranteed by *common prefix* property of Ouroboros Praos. - Immutable blocks stored in the ImmutableDB. - - - The volatile part of the selection are the newest $k$ blocks. - They are stored in the VolatileDB, together with other blocks that could be on a fork we might switch to in the future. - - -Additionally, the LedgerDB contains the ledger state corresponding to all [points](./Glossary.md#point) on the volatile part of the chain as well as the tip of the immutable chain, in order to validate new blocks and potential forks. - -The flow of information is depicted in the following diagram. -Rectangular boxes stand for logical components, and hexagons correspond to Haskell RTS threads. - -```mermaid -graph LR - subgraph ChainSelectionAndStorageLayer[ChainSelection and storage layer] - subgraph ChainSelection[ChainSelection] - direction TB - - CurrentSelection["`**CurrentSelection**`"] - AddBlockRunner{{AddBlockRunner}} - - AddBlockRunner -- maintains --> CurrentSelection - end - - ChainSelection -- "backed by" --> StorageLayer - - subgraph StorageLayer[StorageLayer] - direction TB - - VolatileDB["`**VolatileDB**`"] - ImmutableDB["`**ImmutableDB**`"] - LedgerDB["`**LedgerDB**`"] - - CopyToImmutableDB{{CopyToImmutableDB}} - GarbageCollect{{GarbageCollect}} - CreateLedgerSnapshot{{CreateLedgerSnapshot}} - - VolatileDB --> CopyToImmutableDB - CopyToImmutableDB --> ImmutableDB - GarbageCollect -- "cleans up" --> VolatileDB - LedgerDB --> CreateLedgerSnapshot - end - end - - UpstreamPeersAndMint["Upstream peers and minting"] - - UpstreamPeersAndMint -- "new blocks" --> ChainSelection -``` - - - **AddBlockRunner**: - Sequentially process incoming blocks (from upstream peers, or minted by this node if it is a block producer). - A new block is first stored in the VolatileDB, and might become part of the selection (only if it is valid): - - - Common case: The block fits on top of the current selection. - - The block is part of a fork that is preferrable to the current selection. - Usually, this is the case when the block has the same predecessor as the tip block of the selection, and a better tiebreaker. - - **CreateLedgerSnapshot**: - From time to time (by default, every 72 min on mainnet for a caught-up node), the node writes the ledger state at the tip of the ImmutableDB to disk. - This is a rather expensive operation as the ledger state is quite large.[^snapshots-slow] - - **CopyToImmutableDB**: - Once a block on the selection is confirmed by sufficiently many blocks, it becomes immutable and is copied from the VolatileDB to the ImmutableDB. - This is a very cheap operation. - - **GarbageCollect**: - Blocks that are either immutable or can no longer be part of a fork we might switch to are occasionally deleted from the VolatileDB. - This is a very cheap operation. - -### The Mempool - -The mempool maintains a bounded sequence of transactions that are valid when applied to the ledger state corresponding to the tip of the current selection. -When the node is a block producer, this is the source of the contents of its minted blocks. - -```mermaid -graph LR - subgraph MempoolComponent[Mempool] - Mempool[Mempool] - MempoolSyncState{{MempoolSyncState}} - MempoolSyncState -- updates --> Mempool - end - - LedgerDB - LedgerDB -- "wake up when the tip\nof the selection changes" --> MempoolSyncState - - DownstreamPeers - DownstreamPeers -- "new txs" --> Mempool - - LocalClients - LocalClients -- "new txs" --> Mempool -``` - - - **Adding new transactions.** - New transactions can be added via downstream peers (another node) or local clients (like `cardano-cli`). - The transaction is only added to the mempool if it is fully valid, and otherwise discarded.[^tx-validity] - - Adding a transaction requires the acquisition of a lock, so no transactions are validated in parallel. - - No work is shared between validating blocks and transactions at the moment; so it is expected that a transaction is fully validated both when it is added to the mempool and when it is later validated as part of a block. - - - **MempoolSyncState**: - This thread wakes up every time when the tip of the selection changes. - Then, the transactions of the mempool are revalidated against the new ledger state; discarding all transactions that are now invalid. - - Crucially, transactions are only *re*validated, which is much faster than full validation as eg signature checks and script evaluations can be safely skipped. - Usually, transactions become invalid as they are now part of a block on our selection, and hence consume already-spent outputs. - -### Minting[^minting] blocks - -When the node is a block producer, it will wake up on every slot to check whether it is elected to mint. -In that case, it will decide which block to extend[^mint-block-context], fetch a corresponding *mempool snapshot* (a sequence of valid transactions) and create a block using the largest prefix that fits into a block (depending on the current protocol parameters). - -```mermaid -graph LR - MintingLoop{{"`**MintingLoop**`"}} - - BlockchainTime - BlockchainTime -- "on every slot" --> MintingLoop - - CurrentSelection - LedgerDB - Mempool - CurrentSelection -- tip --> MintingLoop - LedgerDB -- tip --> MintingLoop - Mempool -- snapshot --> MintingLoop - - ChainSelection - MintingLoop -- "newly minted block" --> ChainSelection -``` - -The resulting block is then submitted to chain selection, and not treated specially compared to external blocks (out of robustness considerations). - -### Upstream and downstream peers - -The node maintains network connections to other peers as well as local clients. -The connection manager is maintained by the Network team, and described in ["The Shelley Networking Protocol", Chapter 4](https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-spec/network-spec.pdf#chapter.4). -The details are out of scope for this document. - -For every (active/hot) peer, we run several [*mini protocols*](https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-spec/network-spec.pdf#chapter.3). -A mini protocol specifies the allowed communication between a initiator/client and a responder/server via a state machine. -In the context of a mini protocol, we say that a peer is an *upstream peer* when that peer acts as the server/responder. -(Note that we might also separately run the mini protocol in the other direction with that peer at the same time.) - -In brief (see the linked network specification for more details): - - - **ChainSync**: - In the context of a caught-up node, the ChainSync mini protocol allows the client to subscribe to updates of the selection of the upstream peer. - Such an update might either be a new header[^ChainSync-N2C] (`MsgRollForward`), or a rollback to a point in the past (`MsgRollBackward`). - - The node validates all headers (in particular, this encompasses the validation of the stake-based *election proof*) and maintains a *candidate header chain* for that peer (the result of the messages received so far), which is used to decide which blocks to download. - - - **BlockFetch**: - The client can request arbitrary blocks from the server (potentially in batches). - - - **TxSubmission** - The server can request transactions from the client. - - Generally, blocks flow from upstream to downstream peers, while transactions flow from downstream to upstream peers (in order to allow nodes without any downstream peers to still submit transactions to the network). - -#### Diffusion of headers and blocks - -```mermaid -graph LR - subgraph PeerA[Upstream Peer A] - PeerAChainSync[ChainSync] - PeerABlockFetch[BlockFetch] - end - - subgraph PeerB[Upstream Peer B] - PeerBChainSync[ChainSync] - PeerBBlockFetch[BlockFetch] - end - - subgraph PeerC[Downstream Peer C] - PeerCChainSync[ChainSync] - PeerCBlockFetch[BlockFetch] - end - - subgraph PeerD[Downstream Peer D] - PeerDChainSync[ChainSync] - PeerDBlockFetch[BlockFetch] - end - - BlockFetchLogic - - PeerAChainSync -- headers --> BlockFetchLogic - BlockFetchLogic -- instructs --> PeerABlockFetch - PeerBChainSync -- headers --> BlockFetchLogic - BlockFetchLogic -- instructs --> PeerBBlockFetch - - ChainSelectionAndStorageLayer[ChainSelection and storage layer] - PeerABlockFetch -- blocks --> ChainSelectionAndStorageLayer - PeerBBlockFetch -- blocks --> ChainSelectionAndStorageLayer - - ChainSelectionAndStorageLayer -- headers --> PeerCChainSync - ChainSelectionAndStorageLayer -- blocks --> PeerCBlockFetch - ChainSelectionAndStorageLayer -- headers --> PeerDChainSync - ChainSelectionAndStorageLayer -- blocks --> PeerDBlockFetch -``` - -Here, BlockFetchLogic is a centralized component that decides whether and in which order to download certain blocks based on the candidate header chains. - -#### Diffusion of transactions - -```mermaid -graph LR - subgraph PeerA[Upstream Peer A] - PeerATxSubmission[TxSubmission] - end - - subgraph PeerB[Upstream Peer B] - PeerBTxSubmission[TxSubmission] - end - - subgraph PeerC[Downstream Peer C] - PeerCTxSubmission[TxSubmission] - end - - subgraph PeerD[Downstream Peer D] - PeerDTxSubmission[TxSubmission] - end - - Mempool - - Mempool --> PeerATxSubmission - Mempool --> PeerBTxSubmission - PeerCTxSubmission --> Mempool - PeerDTxSubmission --> Mempool -``` - -## Relaying a new block - -As a concrete example, we will consider how the node relays a new block B from its upstream peers (which includes a "peer X" that will give us B first) to its downstream peers. - -```mermaid -graph LR - subgraph UpstreamPeers[Upstream peers] - PeerX[Peer X] - PeerY[Peer Y] - PeerZ[Peer Z] - end - - subgraph DownstreamPeers[Downstream peers] - PeerA[Peer A] - PeerB[Peer B] - PeerC[Peer C] - end - - TheNode - - PeerX -- B --> TheNode - PeerY --> TheNode - PeerZ --> TheNode - - TheNode -- B --> PeerA - TheNode -- B --> PeerB - TheNode -- B --> PeerC -``` - - -We assume that no other blocks arrive in the meantime, and that B extends the node's selection. -We also provide rough numbers on the time budget (ignoring garbage collection time here) of the steps for illustration. - - 1. In the ChainSync mini protocol thread for peer X, we receive a `MsgRollForward` with the header of B. - We validate the header and add it to the candidate header chain for peer X. - - Time budget: average ~1ms, upper bound ~2ms. - - 2. The BlockFetchLogic wakes up due to a change to a candidate chain, and notices the new header. - As the header extends our selection, the BlockFetchLogic tells the BlockFetch client for peer X to download the full block B. - - Time budget: essentially instant. - - 3. The BlockFetch client for peer X downloads the full block B and submits it to chain selection. - - Time budget: depends on the bandwidth and latency between the node and peer X, as well as on the block size (at most 88 KiB at the moment). Usually, it should be (significantly) less than one second. - - 4. Before chain selection starts, B is written to disk. - - This is very cheap (no `fsync`). - - 5. The node checks whether B is eligible for *block diffusion pipelining*, an optimization which allows to already announce a block to downstream peers before its body has been validated. - In scenarios like this one, this is usually the case. - - 6. Because of block diffusion pipelining for B, the ChainSync servers to our downstream peers send a `MsgRollForward` containing the header of B. - - Soon after, the downstream peers will request the corresponding block body of B via BlockFetch if they do not have it. - - 7. In parallel, chain selection for B continues by validating B. - - Time budget: average ~30ms, upper bound ~500ms (based on empirical data). - Depends on chain load, as well as on the on-chain parameters controlling the size of a block (block size, Plutus execution units, reference scripts size). - - There are also known pathologies in the ledger at certain points in the epoch (just at the beginning, and at 40% into the epoch) where blocks can take significantly longer to validate (multiple seconds). - This is suboptimal and should eventually be fixed, but sufficiently rare to not cause problems at the moment. - - 8. The node updates its selection to include B at the tip. - -Changing the selection triggers various other tasks[^on-selection-change] in the node: - - - The mempool is revalidated against the new ledger state that arose by applying block B. - In particular, this will remove all transactions from the mempool that are contained in B. - This is fairly cheap as it doesn't have to perform eg any cryptographic checks or signature evaluations. - - - The block that is now confirmed by $k=2160$ blocks is copied to the ImmutableDB, and will eventually (roughly after one minute) be deleted from the VolatileDB. - -[^snapshots-slow]: Also see https://github.com/IntersectMBO/ouroboros-consensus/issues/868 for more context for potential upcoming improvements. UTxO HD will also help with this problem. - -[^tx-validity]: One case that requires a bit of care are transactions with invalid scripts. When such a transaction is received from another node, we still include it in the mempool in order to collect the collateral. In contrast, we do not do this for local clients, as they are trusted. - -[^minting]: "Minting" is a synonym for "forging" in this context. It is sometimes preferred as "forging" could also be (mis)understood to mean "counterfeiting". - -[^mint-block-context]: This will almost always be the tip of the current selection except for certain edge cases that can arise eg in multi-leader slots. - -[^ChainSync-N2C]: Note that the ChainSync mini protocol can also be initiated by local clients (instead of remote nodes). In that case, `MsgRollForward` contains entire blocks instead of just headers. - -[^on-selection-change]: Not exhaustive, e.g. the (computationally inexpensive) Bootstrap/Genesis State Machine is missing. diff --git a/docs/website/contents/for-developers/PreflightGuide.md b/docs/website/contents/for-developers/PreflightGuide.md deleted file mode 100644 index 7e259f55be..0000000000 --- a/docs/website/contents/for-developers/PreflightGuide.md +++ /dev/null @@ -1,311 +0,0 @@ -# Preflight guide - -> "What I Wish I Knew When Working In Consensus" - -This document lists possible steps in getting familiar with the core of the Cardano universe with a focus on topics that are important for the daily life of a Consensus developer. - -Every step has a clear **goal** as well as optional ideas for other activities. - -This document contains various footnotes with additional information that can be safely skipped on a first pass. - -If you have ideas for further steps, first check [this epic][preflight epic] to compare it with existing ideas, and then create a PR! - -## Setting up a local node - -The [cardano-node][] (usually just called "node") is the most important consumer[^other-consensus-consumers] of the Consensus and Storage layer maintained by the Consensus team. -It is *the* way to get a full copy of "the" blockchain for any given network[^cardano-node-purpose], in particular and most importantly, for **mainnet**. This process is called "syncing". - -Having a local copy of the node is not absolutely essential for your daily work, but it can be useful in several cases: - - - Assessing a change for correctness and performance problems by using the entire multi-year history of Cardano as a test case. - - Quickly gathering empirical statistics of quantities of interest, like minimum/average/maximum size/validation time/frequency of blocks. - - Directly accessing any on-chain data, like the current protocol version, stake distribution or UTxO size. - -### Disclaimer - - - The node is currently relatively resource-intensive[^resource-relative], see the minimum system requirements on the [node release page][]. - - It uses a lot of memory, and the memory requirements are growing as the chain evolves[^utxo-hd]. - - It inherently requires a lot of disk space (as of January 2024, 150GB). - - During syncing, it is quite CPU-intensive (albeit mostly only on a single core). - Once syncing is done, it is very light on CPU usage. - - You do not need to run the node at all times. - The stored blockchain can also be consumed by other developer tools that are independent of the node. - - Syncing can take multiple days (full sync in December 2023 on a decently powerful server: 2 days). - Unless your network connection is very slow compared to your CPU, the bottleneck is likely your CPU. - - It is safe to cleanly interrupt syncing, eg via Ctrl + C. - The node is able to gracefully resume on restart. - -### Running the node - -First, get a [cardano-node][] binary, see the README, eg via Nix, binary from the releases or compiling locally, depending on preferences and context. - -A basic invocation looks like this: - -```shell -./result/bin/cardano-node \ - run \ - --config /path/to/mainnet-config.yaml \ - --database-path /path/to/db-mainnet \ - --topology /path/to/mainnet-topology.json \ - --host-addr 0.0.0.0 --port 3001 \ - --socket-path /path/to/node.socket -``` - - - `--config`: Get the default Cardano mainnet configuration file [here][cardano mainnet conf]. - - The logging system supports human-readable or JSON output (look for `ScText`/`ScJson`). - `ScJson` sometimes contains more information, and it can be handy for automatic processing via eg `jq`. - - Note that Genesis files are still mutable as long as their corresponding era is still in development (like Conway as of early 2024), so your configuration file might need changes once you update your node. - - `--topology`: This file defines how/when the node will connect to other nodes. - Get the default [here][cardano mainnet topo]. - - While syncing, it makes sense to set the valency, ie the number of nodes sampled from the given DNS name to connect to, to `1` for better performance.[^genesis-syncing] - -Make sure to store the log output somewhere. - -### Syncing to mainnet - -Now you are ready to start syncing to mainnet! - -During this long process, you can stare at the log output, and eg look for lines containing `Chain extended` or `AddedToCurrentChain`, which (at least) mention the slot number of the most recently added block. -Bonus points for a plot of your sync progress over time! - -### Syncing faster 🚀 - -As seen above, syncing is relatively slow, and you might be in a situation where you haven't caught up to mainnet in maybe a couple of months, but don't want to wait several hours. -Here are two options: - - - If do not mind a little extra clutter, it's possible to sync to mainnet in about two hours by using the [Mithril client][]. - See [here][Mithril instructions] for instructions. - - Maybe someone you know has a very recent local copy of the mainnet ChainDB. - If you are sure you *really* trust them, ask them to send you their ChainDB (or at least the missing parts) via eg [Magic Wormhole][]. - -## Understanding ledger snapshots and using db-analyser - -You need a local ChainDB for this step, see the previous step. - -[db-analyser][] is a tool maintained by the Consensus team to gather information and investigate problems (especially performance-related) by analyzing a local ChainDB, providing a variety of analysis passes. - -### Ledger snapshots - -A *ledger snapshot* is the CBOR serialization of the (extended[^extended-ledger-state]) *ledger state*, which represents the summary of all blocks up to a specific point[^glossary], the tip point or point of the last applied block, that is necessary to judge the validity of any block extending the last applied block. -Here, "validity" refers most prominently to the ledger rules ("Does this person actually have enough money to make that payment?") of the [Cardano ledger]. -On disk, the file name of a ledger snapshot usually contains the slot number of its tip point. - -### Running db-analyser passes - -Most [db-analyser][] passes need a ledger snapshot for the specified starting slot. -Read the [db-analyser][] documentation up to the [the corresponding example][db-analyser snapshot] to create a ledger snapshot for slot `4492800`[^first-shelley-slot]. - -Starting from there (using `--analyse-from 4492800`), try the following two db-analyser passes: - - - `--show-slot-block-no --num-blocks-to-process 100`: - You will see that many slots do not contain a block; our Consensus protocols involve a _leader schedule_[^glossary] that determines which slots are allowed to contain blocks. - On average, there will be a block every $1/f$ slots, where $f$ is the _active slot coefficient_[^glossary]. - On mainnet, we have $f=1/20$. - - `--benchmark-ledger-ops --num-blocks-to-process 1000`: - Look for the `mut_headerApply` and `mut_blockApply` columns, which are the bulk of the time that is spent when validating headers and blocks, respectively; in order to get a rough sense for these durations, as they are relevant in lots of situations. - -Feel free to run other passes that sound interesting to you. - -### Reusing ledger snapshots - -The node regularly creates ledger snapshots while running. -You can reuse these snapshots in db-analyser, and vice versa. - -> ‼️ Note that the format of ledger snapshots can change with every new ledger release, so in order for this to work, make sure that your db-analyser and your node use the same ledger version. -> Some ways to achieve this: -> - Click on the [release page][node release page] corresponding to your node, expand the "Individual packages' changelogs" section, and then check out the corresponding `ouroboros-consensus-cardano` release tag in the Consensus repo. -> - If you used Nix to get the `cardano-node` binary, you can use `nix build .#db-analyser` to get a compatible db-analyser, assuming you are in the root of the `cardano-node` repo. -> -> You might also run into this when you update the node to a newer version. -> The node will automatically detect this situation, and create a new ledger state starting from Genesis.[^apply-vs-reapply] - -Use a ledger snapshot of your local node (make sure to add the `_db-analyser` suffix[^snapshot-suffix]) to run the two db-analyser passes again, but now starting at the slot of your ledger snapshot. - - - The pattern of filled/unfilled slots will look very different to what you saw at the beginning of Shelley above. - This is due to the usage of _transitional Praos_ (TPraos) at the beginning of Shelley, where the leader schedule gradually transitioned from being fully centralized to fully decentralized. - It has been fully decentralized for several years now. - - Comparing the benchmarking results for block validation times, you should see that validating a typical block takes much longer today. - This is mainly due to larger allowed block sizes and this size being actually used, as well as more complex ledger rules (most prominently, Plutus smart contracts). - -## Dynamics of the leader schedule - -This section focuses on high-level statistical properties of the *leader schedule*[^glossary]. -The definitions and most of the basic properties come from the [Ouroboros Praos paper][], eg section 3.3 and 4.4. - -### Active slots - -In our context, time is discretized into slots of a specific slot length. -(For Praos on Cardano mainnet, a slot lasts for one second.) -Every slot has a specific number of *leaders*, ie stake pools that are allowed to mint a block in this slot. -The elections for different slots are independent of each other; leading in one slot does not make it more/less likely to lead in another. - - - Most slots are *inactive*, ie there are no leaders for these slots.[^praos-origin] - - Some slots are *active*. The probability of a slot to be active is determined by the *active slot coefficient* $f$. On Cardano mainnet, $f = 1/20$. - - Most active slots are *single leader slots*. - - Some active slots are *multi leader slots*. As the slot numbers on a chain have to strictly increase, at most one of the blocks minted by the elected stake pools will end up on the honest chain eventually.[^ssle] - -The leader schedule of Cardano is *private* due to the usage of *verifiable random functions* (VRFs): -Nodes only know their own leader schedule for one epoch[^glossary] in advance, and nobody can know whether some pool is elected in a slot until they reveal this themselves by minting a block in that slot. -The advantage of this approach is that eg targeted DoS attacks against slot leaders are impossible. -However, it also means that it is generally impossible to retroactively distinguish inactive slots from active slots where nobody minted a block for some reason. - -Let us apply some common probability distributions to this scenario. - - - The number of active slots out of a number of slots $n$ follows a binomial distribution $\mathop{\mathrm{B}}(n,f)$. - This number is often of interest as it bounds by how many blocks any chain can grow in that period. - - For example, consider the number of active slots on Cardano mainnet within 12h (43200 slots), with the probability mass function also depicted below. - The mean is $43200 \cdot f = 43200 / 20 = 2160$, note that this is the *security parameter*[^glossary] $k$ that comes up in many places. - Importantly, the number of active slots is rather strongly concentrated around the mean, which justifies common statements like "Usually, there are $k$ active slots within 12h.". - - - The number of slots until a slot is active (including that slot) follows a geometric distribution $\mathop{\mathrm{Geo}}(f)$. - - For Cardano mainnet, the probability mass function is again depicted below. - The mean here is $1/f = 20$ slots, the median however is only $14$ slots, ie in ~50% of all cases, it takes at most 14 slots until a slot is active. - On the other hand, there is a non-negligible ~0.2% chance that it takes more than 120 slots (2 minutes) until there is an active slot. - Concretely, this means that an interval of 2 minutes without any blocks on Cardano mainnet does not mean that anything went wrong; the randomness of the leader schedule means that intervals of inactive slots of this or even somewhat larger duration are bound to happen from time to time. - - As a generalization, the number of slots until a given number (potentially larger than one) of slots have been active follows a negative binomial distribution. - -![](./PreflightGuide/plot-active-slots.png) - -> A useful library for various calculations in this areas is [scipy.stats][] (in particular available in sagemath). -> For example, we can calculate the probability that at most 2000 slots are active within 12h -> ```python -> from scipy import stats -> stats.binom(43200,1/20).cdf(2000) -> ``` -> which yields 0.0185%, or the probability that it takes more than one minute until a slot is active -> ```python -> stats.geom(1/20).sf(60) -> ``` -> which yields 4.6%. -> Calculate some other probabilities that seem interesting to you, maybe inspired by some of the empirical data gathered via db-analyser. - -### Multi leader slots - -The probability that a pool with relative stake $\sigma$ is elected in any specific slot is given by $\phi_f(\sigma) = \phi(\sigma) = 1-{(1-f)}^\sigma$. -We have $\phi(\sigma) \ge f\sigma$, ie a pool with stake $\sigma$ will be elected in an active slot with probability somewhat higher than $\sigma$. -For small $\sigma$, $\phi(\sigma) \approx f\sigma$ is a fine approximation. - -The motivation for choosing $\phi$ like this is the *independent aggregation* property -```math -\phi\left(\sum_{\sigma\in S} \sigma\right) = 1-\prod_{\sigma\in S}(1-\phi(\sigma)) -``` -for any set $S$ of relative stake quantities. -Intuitively, this means that for a party with $\sum_{\sigma\in S} \sigma$ total relative stake, no matter how they distribute their stake across different pools, they always have the same probability to be elected with at least one pool in any given slot. - -Unless there is just a single pool with all of the stake (which is heavily disincentivized by the Cardano reward structure), there is a chance that an active slot will in fact have *multiple* slot leaders. -The exact probabilities depend on the stake distribution. -In general, the more equally the stake is distributed across many pools, the more likely are slots with more slot leaders. -In the extreme case, which one can think of as the stake $\sigma$ being distributed evenly across infinitely many pools, the number of slot leaders $L$ of a single slot is given by a Poisson distribution $\mathop{\mathrm{Pois}}(-\sigma\log(1-f))$. - -For example, consider $\sigma = 1$: - -![](./PreflightGuide/plot-single-slot-leaders.png) - -We see that having three or more leaders per slot quickly becomes very (exponentially) unlikely. - -In particular, we can calculate the probability that a slot is an active multi leader slot -```math -\mathop{\mathrm{Pr}}(L \ge 2) - = 1-\mathop{\mathrm{Pr}}(L = 0)-\mathop{\mathrm{Pr}}(L=1) - = f + \sigma \cdot {(1-f)}^\sigma \cdot \log(1-f) -``` -via the definition of the Poisson distribution and $L \sim \mathop{\mathrm{Pois}}(-\sigma\log(1-f))$. -For $f=1/20$ and $\sigma =1$, we get $\mathop{\mathrm{Pr}}(L \ge 2) = 0.00127$, ie 0.127% of all slots are multi leader slots in the worst case. -In that case, we would expect to see $10k/f \cdot 0.00127 \approx 549$ multi leader slots per epoch. - -On the community-maintained [pooltool.io](https://pooltool.io/networkhealth), we can observe the number of "slot battles" per epoch, ie the number of times the nodes reporting to pooltool.io observed two blocks in the same slot. - -![](./PreflightGuide/plot-pooltool-slot-battles.png) - -As the stake on mainnet is "only" distributed across a few thousand pools (and not completely evenly), we are not in the extreme case modeled by the Poisson described above. -And indeed, we usually see even less than 500 slot battles per epoch. - -### Grinding - -The discussion above completely ignored *grinding*. -In the context of the leader schedule, this refers to an adversarial influence on the nonce that is used as a seed for all of the VRF computations for slot election within a specific epoch. -The exact mechanism is out-of-scope for this section, but it should be said that such an attack requires both a considerable amount of stake and computational resources, and it allows an adversary to choose the best out of multiple epoch nonces. -An extremely conservative upper bound for how many nonces an attacker can choose from is $10^{20}$ (based on the computational resources required to even compute all of these nonces). -The mainnet parameters of Cardano (in particular the security parameter) were chosen with resistance against grinding in mind. - -Concretely, an attacker with $\alpha$ stake that can choose out of $N$ epoch nonces can ensure that it leads any specific slot with probability $1-{(1-\phi(\alpha))}^N$, which is a huge advantage compared to $\phi(\alpha)$. -For example, an attacker with $N=10^{20}$ with even a very small amount of stake has a chance of close to 100% to cause themselves to be elected in any single specific slot. - -Usually, an attacker wants to maximize their total number of active slots within a larger number of slots, like in an entire epoch. -For this, the impact of grinding is smaller (but still large), as every epoch nonce affects the entire leader schedule of the epoch, and the attacker can not choose different epoch nonces for different slots. -Calculations in this area make use of the [largest order statistic][order statistic]. -Here, we plot the cumulative distribution function of the number of active slots without and with different levels of grinding. - -![](./PreflightGuide/plot-grinding.png) - -Grinding does *not* impact the number of elections by any honest party, as an attacker can't observe what the leader schedule of honest nodes would be for different nonces (privacy of the leader schedule). - -Finally, we shall note that there are various ideas of how to eliminate grinding, for example by making the epoch nonce "difficult" to calculate[^nonce-difficult] or by replacing the current source of the nonce with a special protocol[^nonce-protocol]. - - - -[^other-consensus-consumers]: Other important consumers include: - - - [cardano-cli][], a CLI tool allowing to query various information about the current state of a running node, as well as submitting transactions. - - Indexers like [cardano-db-sync][] or [kupo][] store certain historical information (like old transactions) in an easily queryable format (in contrast to the node, which, by design, does not store information in ways that are unnecessary for its core responsibilities). - - Other services or tools that need to communicate with nodes, like [hydra][] or [ogmios][]. - -[^cardano-node-purpose]: Note however that this is not its only purpose; it is also required to actively participate in the ongoing evolution of any Cardano-based blockchain. - -[^utxo-hd]: The main reason for this is that the ledger state, ie the aggregated information necessary to validate blocks, is currently fully stored in memory. -The Consensus team is currently working on *UTxO HD*, a solution to move the ledger state to disk. - -[^resource-relative]: Cardano is not a huge outlier in either direction, there are many examples for blockchains that are either much less resource-intensive (due to very low activity or new age, or due to very fancy cryptography, like Mina) or much more resource-intensive (due to very old age and large accumulated history, like Bitcoin, or a hyperfocus on performance, like [Solana](https://docs.anza.xyz/operations/requirements#hardware-recommendations)). - -[^genesis-syncing]: As of early 2024, syncing is a fully trusted process; if any node you are syncing from is adversarial, you might end up on an adversarial chain. -There is an ongoing effort to implement *Ouroboros Genesis* in order to reduce this strong trust assumption; in particular, it will involve reaching out to lots of nodes while syncing. - -[^glossary]: See the [Glossary][]. - -[^extended-ledger-state]: A ledger snapshot also contains the _header state_ in addition to the ledger state. -As a rough idea, this is the state maintained by Consensus protocol (in our case: Praos), and much more lightweight than the ledger state both in size and in time it takes to update. -An "extended" ledger state is a ledger state plus the header state, but people sometimes/often drop the "extended" prefix, especially for ledger snapshots, as there are no "unextended" ledger snapshots. - -[^first-shelley-slot]: This is the first "Shelley" slot, see [here](https://github.com/cardano-foundation/CIPs/blob/master/CIP-0059/feature-table.md). -All previous slots were "Byron" slots, which is a legacy era that is largely irrelevant for our work, except in the very annoying case where it isn't. - -[^apply-vs-reapply]: It will be much faster than syncing from scratch, as the blocks are only _reapplied_ instead of _applied_. -This means that certain checks (in particular, evaluating smart contracts) are skipped, which is sound as we know that the blocks were already applied/validated fully previously. - -[^snapshot-suffix]: db-analyser only ever reads/writes snapshots with a `_db-analyser` suffix in the file name, eg `4492800_db-analyser`. -The node itself will create snapshots without a suffix (eg `4492800`), but can also read snapshots with any suffix. -Crucially, the node won't ever *delete* snapshots with a suffix, as opposed to unsuffixed ones, which are periodically garbage-collected, as well as deleted if the node can't decode them. - -[^praos-origin]: The fact that most slots are empty (such that there often are periods of "silence" in the network) motivated the name "Praos", meaning "mellow", or "gentle". - -[^ssle]: With more sophisticated cryptography, one can avoid multi leader slots and the wasted work they cause, see ["Single Secret Leader election" by Boneh et al](https://eprint.iacr.org/2020/025). - -[^nonce-difficult]: The core idea is for example described in the abstract of [the paper introducing *Verifiable Delay Functions* (VDF) by Boneh et al](https://eprint.iacr.org/2018/601.pdf). - -[^nonce-protocol]: See [the paper "Efficient Random Beacons with Adaptive Security -for Ungrindable Blockchains" by Kiayias et al](https://eprint.iacr.org/2021/1698.pdf). - -[cardano-node]: https://github.com/IntersectMBO/cardano-node -[cardano-cli]: https://github.com/IntersectMBO/cardano-cli -[cardano-db-sync]: https://github.com/IntersectMBO/cardano-db-sync -[kupo]: https://github.com/cardanosolutions/kupo -[hydra]: https://github.com/cardano-scaling/hydra -[ogmios]: https://github.com/CardanoSolutions/ogmios -[node release page]: https://github.com/IntersectMBO/cardano-node/releases -[cardano mainnet conf]: https://github.com/IntersectMBO/cardano-node/blob/master/configuration/cardano/mainnet-config.yaml -[cardano mainnet topo]: https://github.com/IntersectMBO/cardano-node/blob/master/configuration/cardano/mainnet-topology.json -[Mithril client]: https://mithril.network/doc/ -[Mithril instructions]: https://mithril.network/doc/manual/getting-started/bootstrap-cardano-node/ -[Magic Wormhole]: https://github.com/magic-wormhole/magic-wormhole -[db-analyser]: https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/README.md#db-analyser -[Cardano ledger]: https://github.com/IntersectMBO/cardano-ledger -[Glossary]: https://ouroboros-consensus.cardano.intersectmbo.org/docs/for-developers/Glossary/ -[db-analyser snapshot]: https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/README.md#saving-a-snapshot -[preflight epic]: https://github.com/IntersectMBO/ouroboros-consensus/issues/887 -[Ouroboros Praos paper]: https://iohk.io/en/research/library/papers/ouroboros-praos-an-adaptively-secure-semi-synchronous-proof-of-stake-protocol/ -[scipy.stats]: https://docs.scipy.org/doc/scipy/reference/stats.html -[order statistic]: https://en.wikipedia.org/wiki/Order_statistic diff --git a/docs/website/contents/for-developers/PreflightGuide/plot-active-slots.png b/docs/website/contents/for-developers/PreflightGuide/plot-active-slots.png deleted file mode 100644 index 32d309968445d9837c9aa16aaf82225f1e455a32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150564 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 diff --git a/docs/website/contents/for-developers/PreflightGuide/plot-grinding.png b/docs/website/contents/for-developers/PreflightGuide/plot-grinding.png deleted file mode 100644 index ca9869183751deccf97c10766ed234c48e100dd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149543 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ⅆZq_NkagFR6W(Zd7lhRF5-3QCAV6$ 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 z zQe2pyjU9+$dv%q?VHWzZwUmFFw(LZK=YnNxc*MoUPuSZ@9qv^rUXEu+BD-N=HZizx z1Ev=eqTLfOjoA*!*g;dBh)Yk@!i7>c_FQ`?3|xIRu%~0NG8LZ!=8Af}9vdhY0P<-p zBwx%Qp*M^2yCKBy8%Vnk)WF(|dm-2Rw5K{wa^MRyXhghzIxG2 zIvgrba8#S(@Ch(QaiI>pg&oHlwj9r{T_1e=(Wj+~sx$A_&wy>J0fcCWuxib+^A|u@ zrXg_+#gQ65sowTpU?+6=(rh2TY0zQL-|nB-V_eFK$#949qR9FSmqi=^2|86#*8nY! zhq=-+aK&7P_$KBNwK<HGyv*&Vg=@?dN_U*>zE;x!1{MswBM>OPG;kY zuO@HP$1&d($GJRCgna3ndBG)J>Q^r-m}kg&)8!r8an8K)#Ky0!t-W4e0k!-YCqD2a z#}69w#t^4XIn>!uI-oyu3<{0AIH}sd=h4cJRXS`5u!7IlE;2Zm)1c-6>MCdqC2UfY z$P?VtlvUj+wB*wwN{z-5VLv&&95p`usCQpg_!nyP<^f?J5%FU-WKNU6nBV%sc5x-`W`wv8qA3v_;$>%stQ$z$j z<^k||i>+hoc+A{UUu1Go1a`LV&lVW!zSZm_>9S+0xHQFV!}%+pcu>3{TJ^Vyk><9) z(m#x7AbQvnC{?zuKlqynfUQ>k`lNP0{%6_kUK1Q*I{q0KQFN)SKY{D+E@frVLhV@jCGu0}Z4RCjP zQuZ7Km)U9sSB()HLk2UbGTUrgP|=zJ%qPjD%@gCSBm_p{{J4QS(Q7L4_PZwBa8$11 zZoxQ{ucHpA8*0#TQYI_+Gu>Ahl7op0>ajSB&!_eE`G@e!p=En5z; z-{v-$$Vh=wg-=rr7tK1$csv)XQN)!6wV~~XXRo+&A09^(>MCuJICo6vuUA;IWJxu8 z9g5lXKaqqpV+|bFG?@{vC(F0~kKPxEGRO=W%f=CU9&|lknXXqxn-@Sqs;fw(TJ3~q zHvD>t;CE1{w%wV;KEU&%3k^U~tOT#3SR1hiVVjvlo5RP~Nv&_P>8 z0W~r>aG?0!J6Iw}$?wpyT%UG%{rJ=w&+)$oCOk&T=M7Yif&bsXBwFOq_x1FJC z7Oy(^xybf|#8?vzCgBAH6zPg6VDf%RR7D?zlNR8PJk1esS&Lqy{G!Afc$H^}u4 zfetx=TbIT@^|Ys)7H|f=grN}0>ngUaL|cWY)i!bRN){q_o!L$p<-y$^{OLG~#lqIi zl*S*vSDT{kQh1ShPId|$QaLp@Qz>tfB#abJTGEjNl7Zwuc-Cpuu7F(#%W}naMGWLl z>+Ohu1V*I@Vp6yov5e&B_)g+p-~&P@bRIrM|urtdt3RCoe0hd&oST&ZPp0Bt;#!TxwlLs6;1kAwoGu%0!riej^1{`=Q9Y?%Mch zyf7`CQVz~>FM{5Xl$u&)R3fUlYvfcI&F{~?_)ZlBaD~TI_W^TvI;~O>kA+KiXxtOs zR22|?iXjJZrJH1}XHBN%jZqY+rNXGR2A(43Cy0KLT2FwGPaqXPkHW}`<#*;??375< z@a9+xntg%*H!0l!>biOyEsoVJwQYX?u|(slcu3d91qmdjTm656dHm$q`6p6m}&;?F%2hU2vnD~c*}mha^a{|I%(P= zt|S|y;>uiQIFhKHrHGq!uFE*RYthLO9TqM2Gk68kP;vh&QS`wd3gTaChQFXP*MQb$ z1dr}xNK0er?^|Wg<4~mWRTKz;^!B58RvHjo*-FIh;s>$s46qGRrKmG0b>dwyVlHdw zDFa^l4(%2}A0eXF6v}{QK(GT^Aeut=P3z@(Tu(IO45ia~@E-I*S93AxMIurqigLYy z#W^`V5Qmf=-AN^N%3vKWJY><9ljH-e(>~k^&AmZM2Q0nafCP&oI)c#IW&~=gi)=~$ z9mN{7l==Wxa!3w}2b87ep%9CHl!AY;hDA!eEO5CH(gISj7PZoYh<)bRSow&fgp5HI zxGT-n44KGhVPWY6L|IElP!y}?aG}#{ZXCHhiEv6vp)`e|jB>0WcB8e@p?yd17Fd6q z(y}inalVl&2WgL$AO|24{8$?6BJ0a@-&#d?m9K*EkS7|St1bI;&D8TsU^+D^Xcuf7bx_7Z+wuIM zXRfDcW^7ZZZ#O3sUPFCLxEir;0410-uk2wrf?iIcld8h~fXgHN$VJ;mY#ii^QU_dv z%UfVl83_}6!RS$kfMr#;gV`^1_U}b>)WaC?eo(6dCNM%r=q|?Hx9uHduxb0=0vCQp zYXav6B~sIzH?$qa375GQLa$+oMc@?@6kIIC*+^O)QM(V=6lrH(U0ugw-(ZF`LHhi# zK8ZwuRr^x969EDA_91q!!h`90k^S)x9F_Dn_$bvop|hhPZkn-i%L!tQ7%V%=ly?4n zWnpmsDrJEExL!}eEmH+4D}8<(w-+uYuYnB3fdWeC8Q#~!BD;!Ld5b>xX@MB9PNp~y zh<_v~AF1n&owjlyy(#7uSz*#B*s5qJ-Jke5IoXXVm>+;I)+Xr}2zY;i0{{nB&_e;u zaGHc;-*ZtNX%WZoa^BBchw=jQzrTBXvAGmbQ`LZ(TF1QvIT$18UFpWnT60oRngrn# zTMxxqJoL))%sV{rtaH2c?8ddAMQgm;O}?H^X4(gcP>ID;*TH(x0EVWDrQts@X;o)F z3#rR_sLt0Qp-asfKsEKKXciBYHlih>ngzUI4O}2`=yUd~83Q*Yo|i5{(s0l)PVWWk z^D^x<5rsOK^E=~0d=}>P&_Rk<*oFHHRJbY-RF2<&568iU4$XPzK{X2nw1EiEe2g{7 ziwtCRoD?cfSY5Pr3;O~P0=Q7lwa>^aC}^M^LZC?k7{SWt`HR8E(0DjyWaERYq1k(c zejyB=npjlZI{6=Vlp>wx8CK>0?JL2@LN*)p@@<#C1!-4OfIH3Rgnt?(InCz8`>Mr7 zr8C_EJrpGpKh8sO>5NBJ^xDkYy2X%Q+_W+T;F<{_eEIooRK&6F(OgYP@ zO*LAc3s+iql-r>vkN-j=4lsnUOqx#!ln+Ehz$Bi)Cz`RB-`5ZDjm{?AR|E!Qrfxib zhXjBCf_}kZ5VJ)voE0!}lYmh`kH5Z|loUNQG`uvd5*{n9GuB@rxYZ-^JCMcyn0-pH z|DgM&VFWn%)Uc>s7vH1r3gR*#YYJQ*O(_>nprKMEQUV02f~5=q_}8#d2sYnE)El>9 z9Z*e;2ICpfT?9$R;z*&li$;LnF3|Athg`k!k8_Y=LB%H4g;Ba2ee76}ae!vVSF$ha zxX|n%XO-5f5WN2h?qjV;v~Fc~LqhNsA<&=_uoV01)x018DY64KdM)hO0sNMKLDft* zAAGPMP?A%u5AHGm7CI;!i$@v`5($gG)rfnt8lzkxj0MmXPY)Q^)Dx6+vQTMP;kyfs zInqkT+(q2*)BxOY*FPa8MLsl&j|VKz2NHm$KH@J^Chv)>TuUO*Mg!eCj36IxbZDD! z)5G*h*(9Kdb2?Ah*l9onKzIa7B0{gxq7kx23l>YhP4l205+86$MB&J!wF1tjOx%&i z3E+CnGoAMmA@L{!{xiYSxUYkdRX1IHR7Zq2ueFjuU5SCg&k>^=(xCCc*LMrnv!8(G zFY6<2T~!49i+9cgH1l3OQ8&v*sw$1~66JFYI(P16?gf=#q4(nAD{aI1l_P%V(Pn%@ zEzCb7Kn9M9(jg5bJ`ANb+mg#0a1|c2BETth%W4pnpnl@VlZFC75j%&~kXfGqr8bQw zU=|!4as^x(j{O@;YZdDdOirPM1taSwWRbsqWWH&@FE5)MSPN_4uOCe@pCu&!`Q?BA z-CF$_gqWWPknZtv`M)D=$xzk%j$%fG1%We$&6fXxc-%K@qyQP*#-poBiu=T-N@G zW4Q+3aw>7brKCZc=K1S)+Y@g^)|N8pN+V?G|<}&ub_8tD$@6s=Ctb>u| ze}DY{;uzNn+SrCo(1FmN}VSpsd1I-xM-SOYQdHL3*Hb)i)qYk$2kf6Z^2OKm&2 z>|cYcQMu53>iAe=2*2p*ev@s+dmt6TcL>1h(46)ps(@Xi;u|E^KF>?)ry(i?WfY$Z zj~#8>&+4G$cgJ6@#BZ*?xe)<1-f91O7vJX3i8!-m)W$^MHdFy7mWHC`h{%pa1J0;Df`Un| zF^d_D(Tc;PAGX4=E}GrBo}L1LSOIcL6P;iXn!jZIlN^jgRt)|M?C)7C0a7MYorSn5Rua zP+Q#CDAwo-byL*KD$LBflxp=qU#@r>`2ZUfc3^aaSr&>d`HnPQD(JXlR{YP`vAg3u zcrOffDQT(Iw9s0IlrxcR8{dXc19R%%Y_|W`K4vg3zrKqi#i<=QAVv>W=&)hR`-Kb7 ztH-ZhyT-9*O<-0qPCh_QE~#FOdutag=N7;s9!Fnx%w2=`9a)S8eUM6d3{Py!{LlN$%vybO0BA>nQR8rF zTenAso_@oWL{4v!r|Zq7LAm=HOV0(26m{DS^-i~|WQ`Bs95O#xD0g#X(S@J-B_ke< zGt;v(mM{E88V8egHl7&Yk)`YImEo-&V!)X_bFkY;T4=_4e0F9>>&>B`_(u%VMwfL= z&lcoceLU;Vv#TTT<9^YH08B%LOI^P10K;W%-g;j|4FOS1zA zoo}=J*p9}gT-xuS_c`ckz$sI*%QrCeNzI<4yq&A-XQn-peD@qRT|GO?RQHe-@eOon zow!*gyfkv{>=<*czE@S1<&3dl@67@uL(bw|ON}^-mj=Ga&xSn0ikk{ESN?W!x*(ui zM?e3Ib$!NG-N_{0q>D$hXJ(V{X9at&=e|7mP59DreyJ-m>X)}_UXjWF!jxuJO`Z~n zm!oNWvn?N44-v)*}=Y}VOL%>C}$JGt!+uV&FIZrQLw`>>+w zx(!$7d4E>$&Sc};xo%OWqW9PRSG8ZwiP^yCtm^gt_^6&T&klATOWqyL!UYHKo!r11 z!hG60X|Jo(o06YZy+F%HA@tT&CB}twQ%jb;+!YWI;9!Z{Nl3r7X)l@-j$*sxP&Okd zr6jeziA&|znmtsesAHk#aQJ@m5UXE+MoiCCc!A_fKH;R32gYv{@8D6lI$YW5eM2g} zVuheK)5YZ;Ay4)ZLX{#P{M!nn8Gmlixn1`({dA~zZUGIMK;1WMSjhJUsn~bK_ zHn1{c1k`Wv99c%4^jL~c9Yg%$tr%k~*%iSk@dIlVRH`6K%e)hZW5xo-~* z*KAzAoL+NfVfdaqZ)#U4d8QsTj698Y;ia77F4mVur`j%wm^#%lF2|!=lm$FxW53jY zwV1;*+-2QeoOmNKH=n7;3k|aR1qLMjp*b#7R;*#B-qKkitdKF=S5Y4uJlE(ON4Drb zMvaWUZ|usbh}-+ttJqd6?G@ot6IKb|bc%OSxGhVR`||JXvUo)wb_xpij!I5%e_JiP zdSyy{#FLwg6m0G3!VNzBiic4+fByWBX|^^t#jc*V^}#N3zjpBF8N7(9F4k zv~~WB)!7U(wQy zc{NVVQ!UF1f@phz_c0bs%04*3h3ruBF=0yKU>% zUmycaX3EOSq&h(45M@KhB{x1R?(awYPZSryK-}EixBvW85r_q*XEn;4)H^^}7_NDq zjT;Z6v?YEH(}`o?11ZsYwLKdW?^Ng$>968X$3atx?ooM74Iy$zFpX1}EpxX%-H(?qM#6kyr*=ZB-AfB;7U425PV@VJ9-RIC(?X=ElqH!wj|(!EVHLB7dc1{ zEDyaE(+J_hl@b2AULNzW9j0>s)sn;hGk^+~6RykUsp`o&uIOQLo zVBMoo!abV1=XOu_zB;I^WE(hof8-iWV{t*|wSR_8oi3 z7G=o0RT$US(vDt(hXon8rg8-a2U6d^s}@-AU2t%0GE+tsG$E_!ZsImPJ!!jKzlCvIEBbk+V!YS0D#yu!>cQ)6d;&Y44K^+vWmC`8 z&phIKg#9a5_=f%sH-28{`6%{rG}=ppYuss~h*_6e z&hgtl+SuK=SBZy(} z-EWOam=tF)3?Y#J=`-4D#Is6F_M~)hbcFWe%aG5Ji%&WZ5N}aQyj}kpXg0ICk&^U# zQV2wxltu==zm8-R?NfN~edT6pT_?4?@KJvV`zyf1t@Ojpw^MDa)S0?%<%@;~6z?TP zcm2E+I`iEno9laPEW>*FxQq6;{@#rqg5Cv^Gqt1X@B5P^4+`E9-@(o`C+4s`m!HE9 zUx%Idyex#;_mzbzD_&=>`8FJO`A5M_jsH~l^mLZO^J7o8D{gCGY0%2_cp}N1&hj!8 z^~g^Z@48g0q^jr}-gPWi`ph4Dhpl5KW=3jXCSB>8toKj4WgXeVZN?p6o9B>$A}6Md zhm++DCpc)(qln=+N)`JC6l zkv5_AObl;otO!6WN!=;Vp(>nddk}f5Yg4q<&$a_AL+A11nA5x838xL6&vxKGFm1vd zIAzqXHr=Pf(Pp%pzlJIMWJZs5$&ZOiTMxk-6E6IJSE$&#O7z}7I?q+yaCeIEcE(8` zR-32IOxd7={$Dj@)h>#sMHi@MM5<=gc6vXlRK8GMzDf{&ZX<77}6hBNL_7u60yd*~6gviR120 zOwz7li7@fnA{nvghTJa zgv+NgBsf=tu_|_3+YyIi2vl(e|4I}zsU%aNB=bZMFf_krUxV~3d$ju~Gy{GY`gdC3 zLne{u7Fa_JK!F89V{uNT1NR|MX&$!%3z0VU;vETq}teb()fV>9KW%*`;(K!iY{2QnG*QPh5-iSU7 zb@}pF%)Oh3B?m7Qwl1t-|HB<6cy@cB`MPqHq-hi_6pIZ&4AU0U#*$@#7~)&zIF~84 zr(pyl24(Ph_CFo>f!?Cvu7a5n!JO8z^&rldt(Vjxk3_$&cm>Xa7*whsKhbJ{1`XrP zyNBAHFJ1b+e)i`rVy2s z$UK;d{Wyv~K)lj(!5ykNGU4c6e8ZuYV(baNPxFe4nlnxnpQq#u?DTqqB{6{nN&<_C z-1d>5ZTbm=O0UB;iF&-Hq}Q(t94oWG++0iAfCi3rVM@@`kUEK!($MYeJ$VNd>5!UC z1@DK4N4KYqD+ca+7gkeOXu6YmV9&=270;ut94mU_|2%VWFWZ1x#2Nj)i$rzTX^FfH zifEbhnD2Cga+8edh<4Qslh0jZ_5yEmMop@BO=ga2LEblMgVksD#Mj0#*`}j3>I%YJ z8{U=VO2*0iF4)Hvb46}J+|g#X!96bOhh=c&F#2v&Wk&&URAQk*lJP-&%dfaVsOz^T zPU4oNt5Z7%_gfc;7(e3#d9TQhxY>AFU9O0?+T%YD?Oi-#Yrpgs`Rb$JTsJ|A*9isj zf$L;r*4CG1xk0fz0B@eK({fc8KG;Q+Gq zUQ<)kD03l4H4;(5{PtcQB2Aw5s~Ee988Lp&W`LGByiLqSEIuldIJEF=WeS;8Cm>xz z2I^PksD-%jwEpVMn%KNgs{5=;8t=^0vpz!0Dn7RvsH;8-3#=W{P<=Gp`SrtZ`uLDk zjy+GB%5!4%J(d@{n`hmp{wU+vXFO<3OCcl11MfsDP}bi z!SG^Iq<6*$opuOkh^;<%trZhs;MZszp`b#cpa!@3_qJddg#^5`k%2B)`5!shts1^g zNnOL^YfKAs?&5_UU;oEGft7dkE`4FinfneoQEpYLt(QuxNbG$PWgSoExA)I z9p8~3Jm1BO7kv!*wHyo)+~Ux?ko(dhCu;%WyD=^I$nEbtH7~7Rd|{z_yc)B2R$eg4L$l#VL!?%#!RQAyB@NR{C0`)- z3@Y8Gr*dV9=79&?08w;*9CUlUK=$Ox=VE4Kzns$4jVENb>p(?8^WP)e*WjW+E`UK} z!w&F6fYjk;O|g5!q4BYdg6SzvBqzdq5~`#itL#{1;W@RMuoB4XzT||~093k>NtnCx zKo8fp3Ux)r$B_LsenOp-J>DK98`6oIRuv*DUvM_kq~0R;1@DQpB+Zn!i4r#7-U}tH zM+RlAL%f|auAnwOZSLc)9!HNJ-D~*%p0WwOGy|3hDC@F&l1pSH3Lt4o4>N6OXecf% zRXud*rPENk+d9AW@25rcT1~-n+Ce&}oP_I#C#mV`rs)+fM@nW-)pbqt-t5`128WOO z$h?}k!;iIYER3_ic4%+Xstx){J__jbGe6vytD4;wCV4gg+3QAWE~|T=m>X{FO`5V` z@NJP0)K#fFRcU?8oxgU9QNi%EkWh|jysPduJE0cL7Q^|6HZicAURRYKFM!H149vga z{(i78W_6_lE4Dy8K#!DfuYZF@9iqAbE(k)>b<)QULj}PQ9D@`~6_uw^nike+;*i6f zyZnA^U6`}hgg7Yzu0WZcNIgz;xJ-UnyS zcN2G!2&bZuk-cH#zDX`2c%1a2Mj*cB8MD+DSP6k@Y*Tkh;h+81C}0g=_|CkU-Km>R z1RmlEjf&N|A(DcmS|hgO*7fTj(;x}qT6s5gdOs^0n>zVZd@1gMoPfot3()4JvW2{_ zt2+1~b+}^7^u^ED2U+jLe{;wcFix}jErxBy;jZ75PFSv~Q7W036W7|Rxiw=UBW7+x zY_ubL^B!&G)ehD}i+x0yo9w4=)jU4x_hz2rZjY#$*oFR*F`ENU?A%|E-pety;AlpA zp4t_?D+`{^E56Ky-Nk5HfXYoL9Ae-JR9(^7p$&cSzri!|=I_7v>)2LGt?ERy2j+d` zZeF>+F^k1!)z{APu{#CeS=l;*bA*k+^A!ivcr5hO%k{oL8l3IT}cMVsBDvfjF#n3l~m2wHz zRT3fnN`ERegvt^dqd55sFePy;bTOUSy7g2~z^QO+2%>T1t7pq%Xx@9L8;2P3{hzcO zPz9LQv$3-B0shr}5E!WSj?uVmC}Jh{i$IWf6K-Dua>N$t=iX}qyEC62Lz zaPN(=XT3M$Uz9H97pTJKnlLg6pUIfals6W0Pf>8HT{5hm5w)>v`)-<)32vF6nWy039xk#k@8T<`kS>R+r!5a^wxxQ` ziM`DCvVxH6LZw}-HD_?xs=2SNW98oXrL!{@<*pf$Q^;FLs!}kgGCnxlpMtuL#i{1E zBJH?2=eGzy@8x#(ch@8t-1Cm#%-P;l&=@6isVYh+aicU?GKXH8qn;qxJ@x5va=u8d zl+^m8ZMt}t_p}wCGRM&4hWw?KEg~J@bi>b~w|!))Hpl6a^RXLU;ZYmS)_v9PcCVOs zSp{L!fLx*#V^2D7dUVG@N`|oguTYuNRGdb-yDxs z7}_;*n@y$v`>q@Hu@cr7@OpVgbSFBMOyAW<2Cc8vUn4GM)|4l6ZcdE&o4T`dn!-{` z#smc}>e(r#>g9b?OJlRNR20I8z}UMO+YN#T0KN{rV3hsF*PvxJ`Kw+a2_;a@D15g_ zF=r|#F<+cJ5&12qoWcd_z5e=(w|e6B>myvyR|;)jU3~ThNx0DX-rqtx2r)5jclSua z+>VR$84Q`TI01KT)MZ*rgiAGg0VYa%UB7g6s3tO@E7qgLxvN_Il;>49{*Anh$66;p zZ7$1`64kstd*{|MX^lMRiABy1feYf6p-e;}a_QCC%9723^-J9J?}cq&d-Czk&n6tG z{lB2yXD~WUnfZC}X!<>Puvz*OEP@m*NfI_QHzlR}R7BO+)0!&6{13sLQOM!!G1|=6 zc^bds-+IE{p>NC)Vs1zid~coTbl=+q)_ri0PjC3M3`vGD4Rwn&M1IIw&PoKfqnsco zCkNkWW1J8!<(MdCp`p|ZLo3P}FPvQHlfvhkC+~S}&to--W#|7$Ecd)-w0r0*AEQRp z#lt5*PrJB6z$x^NY}e$y8jq{rih@`#cl`~trFL0TSGU{N{te>!-Itnc2X+SVJU?o0 z*mlwxAC@CA6^#Af2;111|MM)#SgSg@w&GSWZ?>=3jnpbYBtE>M4WEE;Kz`uKw^bW5 zxNohk5lu}x(p5kKX|#}X@0md8OVOr0QMOSv>2UX;34qWom;vF8)S4w?+erNAQf~2& z>bv-)shx>kavWlf1Z=Fh+qfO#0>aP6tN*>FyL;KKk%H!TYNvH(Rvnqn6Tx23v&UiyCX&Zgln zz0GM(Rc(O>vV*L8>K>g{0@}nn6v^VKn|Zp%@cshH&7RYOZ^94l9VvOGKODAW_M&Lt zxq(V;|2(M|JaH2IVpLXSF8ftW9>sE0hvmtF5Z^93%+Dx&+3YP&u7}1?R3RY(fq!o! zIx!Gfg4!;qNvVkkjKEbc$iwq%EF9Udlx|t>pWzFIFg0qPk z5C8st+Sv*WTu(==_D-v~ikbeimVtIzQQlqQC5^TI-qDe)%JUd;ez~Vi%Xv&YrhGbX z9G7*RQOF+NUG&<(=8%2rUeowcy|$_G{emg}E%`l`x>Y}apZAMZjp_WgYuP{+bz@G{ z^X?$DNr>qWN6`~3LbJV*Wd4*gS#o9|uJiB8{F!_neq;E5%<9M9uCfyT zlqA2iAq4?SJ~hrUd#rBMWCrcdVyI?6?b#xcIefTnm6+tRqQaghA`9}Lw0JtN4PLs7 z^8~2{IlVGMu#ln?^G3BKhDwED{44N21oVno1N_du=c5t|P+w#aL+F|Yhun~tUskJ^ z7!7k&l};y90m*-%ayIX7#6U7q`$wDa%;^!L&J2}BXhMbRov?fK5%gtsaML{7^nAhm zpGVLmE5XMBP4X|?u_aHN@YS*`d;!^Ra4I!%yx{jltx2;&bsZXvJ{5QrJgv^T>4pzS z-Z5ftz^OnahSQdWS*s;+Jy3S>?J0vJ4eJLcdc60CytkP;>n>fojc$iEb!qo^TGt<% z(<08Xka1y?m|CD)h@I<+qM@B`N3!k04cnJ3JY-C@)o9zOk+8Sr;W3)~ z?^Ca2`9okYI)_SNdr27lOi5hD6|<94gAnzef5-Mt@a&^9V;U*z424&`fPax;6(XW( zI1IT=pbpqt?g2N&Fp`_P5e?)p4N;!j!xy5IFH>rqLQ`D3`FHNbaIbC(*B)wT+EvTZ zn6SNv{NSvLQu6!ous{J8s^%VG5@v1>+MCk@Moy%>KFHBoFvJjPO=} zYt}MRSj@}AH#8CT#C=U|-V2;E$Ch1njoYx1@%VU=yq{#wp%*dHVS9RXW2bi&o}Cl3 zrr**)l`RdF_l1FEtdEzh63<4a;=WVl} zoGkFnq>-f#i+Zh(C33H_+a7Aum{xO$h(s@ZzKo$;Pmn)@*%#lFOLkTxJJQ0bs;a7| zZXpZHYM*M|kcQnucsli%!WD~iODwn^8&G2EM~W$d=%NBehp*N$m>`;NbN5?r2=*!AI%h`n{V zUZsIhkW^Wr+@!`TWb3C)5@X9KkqEP!}8ednMAt!dW+eYoj>i%lBz?v z`u6NvappJvU(HG{04Y)g? z%oq=iT%k8P7#gc!jje~ie@n>DY|ODrQp&kIXuFu9*w`cKEMq;Bu5ib3z2MNN_qz^G zM`%37hkp8%yPn!THiqIkj&CyhEj(`$>?F6x#14DkP;OrNwr#HBR-r-RJyVlkM8WPj zma`df?U{^g7)<^lw$&`uckH0z;9Be8`u^&y2Z3%QeoKCzb7({(V1$)nwn}dR)soRy zRNQb(VlK6NqL=bcSRTns0?iq4Dm5Ip8S=u@~w1^p11fnafZN>JbZl zBI3~)J==FuVCa*qR&Di1$@^#r->)`yndhH#i;RgTU?|GDya(}j^9uJ3jaA6ho}YIM2Xp6-~!7k^$}B+=AsaP5yd zi7(mEAu#%`QhRt~ z;a0X)vdO%IVP)vbzUh$&UF?$mk8x#+V1Nl3)6vn&UF_h^3z6AwOS*S$g zjm|lYmp9niIn2wmk2()!xQPbnDt6iTuBofcn-|y}$F}U7!Ix=hiDYbqN^inP96 zYRd7lYn;oQ8t~)=Lp9`RG+Sp%bJzhc%>S|l-7CC{l#!P|{a=i|d038l`v-g*gBj~s z5^V+vr6NkZETL7>zM)hq?R&If2vMd*LW!hJr9Ev*lq{uvUr5qUt4j5L&byiC_j`WF z@xI5~KhHeJOjq}PUEk~bJj)iBRBfbA1x|m@T zjJyMLv^XG$iUj0-It6${62zd@1JVh>o-J_~w`xZk)IQ!D&ZE~NADj^!mu8fkIxLIk>b;O>NZOqlsT^i~4(5+LZcYxjElKgp1S6&7=`z--iSF9z*F^WFEw zQj=2xQ_FQHT36~`UhwrJn0;?Xmz)wAy0D26zVPQnpu?HCq3?0W10D(rZ(HgWn=$d) zoL@ofi_Nxon-!Nio_+m6(n~>G43ujij6fYw=f}e?jtD#yh6A09Bb=0w`N<1ZgeO1_ zvjrIKYN8e(|5Mnk?n9lG;JakE5Y`1vElGP%`8#;9TR@G+T;k39_dy_p@7uqh#+Kms z^uVxE17Aj;6L6jAO_0tqf?s}ZS6_e=J&Sc?M9)M|K>@#`Qq;j@l`SBm@k+2BW|y{; z_V_LuGs#)hF-N82+BKiyfh99e%)^iO1K)@I19-X&8#d}}!y5*_efxkHg9M$LhxQ7u z#;ry1XMrXl!56Rpn*wxQ&m~rj{PfEXa^cNTv*@1hV)3FQepl>SBUi0=>i6(M$3=49 zS}pbYoMi0tU7t4n-4CpPdH0q|w$|)(K{bPxntoz~E<7~M&FJ--9-8#%U}ZUOlUKss z>~hpd%1+io__x6wC>I$1HKl={G{m`fhD5UO`TLh1_Pf8!1WlftStfqZw(etH_4@>k zD7VnXSb#fb_ad5`GJm2)oVes_+lMkN#&&GZP794NO;J(GOV4c(jy?9O1kXyL!oaM= zzO;CO^d{MnodU}k`#-aG^yKyph;gLc-jH}w{6sJ(Y4`G|24VK zH)zPdV)aPcA^Ab~$TG{g9`W7&SM@Cz3{YfldHe`g3+!~skrRw*{ncpaob4}P+`c6L zPToP($=#=iMSF8a8}lKb@S|6lelpXPzHc7+@zYZL<~_%PXRA}>j3y6sJt*L3`PyzK zBhFxyCVe;BdNQ|tMfcd)GP8hJH2{P9hlYUl|UTeavg_8J3AHk+T4jC|P&zr)X!9Hl)v-m0G7**?hF z{%*kAv-acl!llJlXIvxL=Is&^UEX%^pK6r(UeR?khD;4FbKT33J-c$JfM|xVpEr+w zrSfhki+A6_JE_IateO{aU;q6AIeqJ$BDlR;@fz}IW7jCyc+T&>_`31H4 z(B+rx>|ShU3Kgp@kJR_u^v0TK#+>(@i*4WP@vcLpamxSWf9?bKvXf~>A*#$ zONPcO>}#DrRCBUFjoZS=A3+a%oJV}!x*w^lR+#B=F)mLy)J7>67p1NHgR3q+M4$-$=sgB0AyKd;YV6j!%(kYiIRTb6{KIfMJBW9M>J)&3Z#Z*x^QkB8?xfxn(_#Dy+L{Hp-Gyj38* zJATs+Hw(FU^E#c(Ry^5l-Tg2+YkEHSTt+yDho?dEYB8?t;T>C_o=Gs3?^svgsN=EjE>Y(u|r93!~T}cx$*Xwd>cFz8*!23k;8KX82x4D z#@@8PXMr#L10%NTNTXj@(s*NF=)mXKEzceN7MFWk^~GM^n>T+GzVy9M8gfZ*IsB>z z{&dVN{~*e^uCAu{=)R$+ooJ1~lh6k5wB4f1=|X`^|NYX@D=>Pq=D%8g_xUS5n|`Ta zky?Cd{{@FW0NA+Lktn{7eV4Y-(9q)O5)rP}=tuXsy^S{NCS`9?F=sBC*+ZMIsnSK8 zTiwq-oz%Y5SBHMdks5AzU7D4=f9^$pym@=QYZVp*OK|!0@}=c8(Xt*h>h)VXnfuOw zZH4g5wp}v9`G1oV&+6j8yP8_;qw9LjQ}sNSQuj1Ib`Nodh9^}+$s4P`=jh4|sD z-z7J=%x&1h@0_?uPc@@}DoZtcu!9>g-Gb*Y(IifT#Ri7m(;J5l9=sKIv+{4qzNr&G zjvfY;E@vsAAV1jqhQpmUaD0N0PFPt~+V0u&TrFU;dZ6%3@@Ei9X+MR0`AwFWzXy6*V_*7ZQ0wsuDrEv7k(9Aigr7dC3K&F1XrTw z30-Zakq+B;vNBc&P5J5&kt#v&Bts83G<}E?Ki=Kw0+57ME9$#=aUH$3yEnW?K4(a% zY4x7#S#$h|PfKQuPeSj9{Crf8YW^!1Jj&f8#^v)>Kz7+KZ0?1ToskyRf2%JoPPme@ zFKqP@>>ky+N@8-0h;a#WA!-Sd@9X5aB%RF2K+GEMlp>U!>Cyouk9-8O4wsjg%Og$z zy*0GQhU_!2|G`LbD_MaG-F<)A7}cd$5{g!nZOw_bs|WaO4K9jHPn=eCcD(YN5WR>& zXZjSyq>hbM6xZvoik^3i%OLi}r+wZ=wFizH;hC`|+3`r>8rk7)a~WQ2FELj{ub)_D z!Nbk{^)kEFQ@+(0TqZ&x9tj$0H>u!YWf%lnVMdFaLRgsRa~}_s(qtmUD~zp{(RAqK z(WJ0xtIl~ovJ%2eE5?=$lR`kn-8f2KH_t(Gb&G+y>m_VknJ@kKD{zeN9<+WW@KOKz zlDSpC<d^n?U5KX@3lu7JNBVZhh7_SahJ( z@Qtk?t?hatyG0JQy*G56x2L^ybsn*J9F<_jmlCpp4S!DK_U8DR58t(9++*5r6n&Y~ zwgP-wRfD5pg-O(|-UI576Tmwo3me%IqVKyVMRUIo*$JZn+4RvRyPLwX^bBm8;SF-K z7KXZspcwYpBw$owmDR=Lj?@Mk$dJ%8I5-MlhfM5ak3Y{Na0$?l9K1!$UiJThKf>F4 zN+a)}XKKPr!=nLmZYHO7rRUU>he6_vj^}wbf4y-zIuJM2L{;e<$>Kin~}hY}5qjD+E*zJybp+%GyZcSi<*`~ye5e_9!8eGuYM{oK78-B%@#$mBvAkscv@`Ck!YAnsB%URe~3dEx9s+Wq1r%;5#=(ZkON- z)30KD#R9`1umj*IYZ7!b&#t#I;|Pf_fkgnNQU^Z^u#^&dswdyl+S}Vl&@z9mOELma zlgvYCPz)GSeV-k6p-xOPnn%mUUvV3YhqfEh$kf^Y5ztd*$|(SEf-kOmS}q0NjMxL; z)o|f6+!8!)WpQ6(<_re-$$Z}^bD0P(IMjMTp{|1CQ3U2I;(CpESoHZc0N#fhw1&V~ z#2jxg_?)e-M(Ah>p(7L%GL+rc<(?#yT#o_ zXay{AqCxNw*JJ18jK>g38PKMHeG%NxXq2r(u3+CWzwUykc?CdpJ~=i#IT+hnvhM+N z26~w{=dyw3fBbOu%#CT6_@z-_L_=48ZGW)LdLRL4=X@SiH48Z#c{ZJ~k*w*^C=sl} zk*a5is>^t_s7K|h;_|sz^3lqo)VGV0Yi+g@u-(seDvf~mlVmXf*QzG%`Aa4yAIx|G>aU zZw0ayK{mKjX?RqQ7^V|r1BpdUG zCyP3fV&NK}g}fkzpIk*nMcpuWtem?{Ql)#q2Q+rdp~UsynI%O#xM@~`y>$e_-rVHm zFRp^#&sjkKkDX~AvVwv9P*XyeOZq|4j!xsG)Y zsLo7e3V;ilfq?tOw{zz)Vs&H48ifdvhamt{2=)t7bMD_Wm7F_;i`Z86^z`*l2svtniyzSbOmvLnGS8mSAgKxZ0NTz(vb zJy#tUj|G{3&K04$Q>KgA>~hffM?V`cy0Ol>wQJ34rQzH}-ZVFF-V`#ehrwRoP>SE$ z#ApD76e0uKG(KV_y|i%&S#SE+jAMA6J2O4$20|um0-kttxkWc+faPh@SUw1Fy&3`; zYgo~a=A3bLE%gz4(@jQq$OR+2W@KeUd+grXw+8NjZa0uAF`7$*Q(A7D6gURLZHiE< zSZQuE7YZ4MqbL1t+N6hWyapW+q|3uWFoNg8uCaX_W7VxF3H*rwY&Q70gglX&?~%&@ z809rE89T1q3R`&MkOyaG_haB}W56^Qi$;KUU(WLduw|n0Eg7%j>@5EFP#cG;dF%JZ z%@ZGWpe2+Dt=u3fbG)hk7zRFz73VX&=A^$5Sjchzz(X!)w!8DZ-u518OvG%^+bCE# z_Z?b>C523Qme~}VUwF8$t7^GsRP=cFfy1{Nh9Y(%b0mS2iwjIKFayb7*~%&*UQkLZ z_uae*P^PFH!#HZ-jJ^(gb{0(R=oAt+RliUiXIw7x~-4wMc^n zT$IE+E-||U09Bvpw_@N%OpJTGYflN8y}r4A0`u-F?A2KNN5;oXeU9)}h78o=zY6VN z!-mrlV?&%7BS@LJ%guBo!>QuX8R~odH@wbO;5A#VtomNB_FaDtO-pLCM6+uiw2(wLnvJ zYn%^S&;Jot^H3vtKIR6@= zefQ-RZ#;P229}%Y7=gOud0>_me9gz_t&8BB0f=96+rAHi-bsaI!m}>}tkWJdQ_fNI zBB(z^-4Wjm_wZa)b*%3OfjXPRK@*={b8F>X#)&7nSEC$yyn6z5_9dP6i~hr1GTpoT zht02>8R7Hg>$XJx>~iUSxMRg3mAPp}-5cXLN1YRDwHB^+H1H?k~Dz~zO}BxjY&Fb8B=Gb!_h@jCugzf3>*|^6cV&=kV{O zae8clCv8G#K)|st7WcBhG+D@3a5^^~?G6>>s|1s(w*du;VC4iJ#l4K|Q)a?eOu+@L!FJnkrA8H_z93jRexW^|LV>Gk!zrGDLI*nkl&kbxbRa9>4fvUvc(f zwc#Dy>b*4oHikYWLRVTZ?&Yy(%AI-@v0SvM8VZ0`(bpUI$|HxqylxfI)beOdt77)bBjIh1pu9J;V;MX|f!V(-+KpPw%j4@Y(7 zXV%$IGSt_;`|@TcZ2%G>r@p~+N~P}i)PrI(XIR`9%dwmV5m80kf9K$?i9$zt(XO9M z_7S~n*>w30LzwZrcNS6>&wTM+E9x%yGVA^A44cr*W47Y{t}j2X`KLBbpxV^@g81@^ ziyUTp9o+{q#m_$|ZRQt(Kv%J+EOZ@c`d{?9;`}o*rWQ$}lpOrFWh(I?c78we_;|&% z-XDJ+@_Uf{3HQb(EkJubt1rUwno^0Kc+_#9EVujgDJ+wwEIN(!53&c(^?DmGm0ol5 zdHpGkfy=o|l;>6{@>C~u2I8JH%>n4AvQkU((aq#_mlg*;0`uId4^@A#nLFws{cMQc zSxVJHO8E_>Tn8V4?k1lrEi9atyir}E(_;xZ({In+7<^*O>dUp?_*MIFj5hiD@k?1o zHS?!jB@4UmaUESh(dI<0YT94bynR24zH43dRV`Geep;1%#ct7F>vc5-1=0mYm*>Pv z%u+?!nIIwu9gg~EF;sn1S}HIy0XBKCieWyDUm9v@*u_ru5pz{T>E6t!o%6 z3f%oSRY%3Rdd|hsB3DaF(_&w_Tbv_1v*6YIDBLB6*PH!>soO*YWazHy8VKEq#uFNt zSk=Vi=+pEkF{qAxaysZCJo}vbaLn8?bJy;yJ%D#N!y-|?=f`aUQ?M;HLu?m!VsKg- zD$&@0nAch~;PSa1c#jbe6npJ7K-lQay4d1Q>)Jv066MZRvp=GVU^Z{Ug^k`uR{Qkq zXhl_T_Qf}T$xmDQi1R~&a&yNi}(44M>r~-B+~lfW62!;PLTSW*KlojQ!!J$ z*_{S^;=RVjb3mTKyJj#kz{THW_p)4Fx{ z<;ygegQQ*#jgYy;I=Bv^Dr%Zni+ON298nYBoUVQYB8^pTn53&+ObrPek?L>XPixl;mWGxBMAjA!69R!60qBRg-A8VH@!n zP^JmmD#2>SD!Wevt-7XT4lgTuXjCKB%)bFCG`Va=S&&O4IYVGaJ9yw%M!w1P<6m=s z4jDwX7kGqC^p^TmZ>g)zSHlqSchll>-JD11wNxuBu;}`vef%-s+enISc)RElm19qt zWm`6cg1}RGaV~-Y**PVrsF->ecC24*43LElh*!Wx0z0Gn;lo$rb8*lv;gZxkJJ!I; z{<)*0i}ardeN$T<+Y#iNB$3_}iU702D1=jb&LYc;(oHD>nta0z4GmM>M$9Rwihw#Kc}QAM12CoEr>fV$z+iA}Y&WlYkSkj1s;4LS z>rTS(p6qq|vw8%kP&T3h3nsXg{H>{3r!EuY`f9v*WTJo44!dHqo98ti0h{T|^8rCi zb2jehe=!#fTZY%&ExdtFo&zpVI#~RzpFXfC_@M^t%|*a>gd%lTw66(Ap9JiWS6=Wrkz zxKT;cux#+QK&LxG24ZkJcA82X$GH+MKIv=vHB3+>=4st`UjZ(YfR^084UU#7lAcR`gyVS*ps)zRg-E zPV_b3fQXeOp%mb*@40vHd6d6o)Jo(Ow95p^K*n!-F+d{}ly@^!Oj)1(6$C_gLzoJO zx+)e;y#kz8Djohpc8wqn>bxbu&YF9b##e)5NTrDl3oC@C05g zBfTkQv5-asECnAlnA~4Ly(f`8`P`tL=EwK~sd(8Izs{TYj3?*rx6x4&Q_<4_RZc^> zlk%}3PpW`ly2%M~Bjg2Cq*r!>gIERUGWZC-!A_59O%=eF2<+gh2&gy;kY&?V=vKq! zjXPPpOSReIl~dex&-8M7_0xpq^B?~LN6%HP3THhWBx?rkN_;+T4;M+obGnyW|53|t zzSLsW48Jg+>4{9*~vb9vw)=uU);G)I-7GU@-9pE|2C# z?Vb;zK9NBi+W{qZBaQeF2j4$YJj?O5!>UC%R_gBFVgF|Iy zJ=p(|+LqLuE?cB=;AuhD(~~Ktl?_Xn`zK5_~_Z{uenAhAG6cCUW3{Wn8H& zKJt>6F+l3Mbl)jhYnwP`ftxLP zkv`i@e5dC!s_Zo4QceGEPx=xp*K(e|uU(^mhFGul+9uWMuxS)D=5wZX@ml^frhP*@ z!OYLjJ$)0j-LOXPbxd>Y(IBWGJssR%%Z%nPFAkuEGt}?>U1`E2s`C4l6UWiiX8+6) zb-*X)Y~+nxXD3frwj(w zd2LM?WYRPNZ1bd%@remS#?{v@ug*vO1m*VfZrs>@!9Ez~>7dx@VI`&KVbN>Ql{1q9<9PlDD-hx%179C}lUa8W)qdOKdwl}tqc?Sq8`EtL{`>xexn>JE zd>s>N>v53xoe)ZTMTkXt9q>Iyl{tns#KeWgU>xvkEud3mNc|W)D*o8jL-!J5Nw*dOvT7&AnRcoE2tgDKTQ9JzF$9gMjUOsBdw@VquX*jEtwW zMyFNos|YWJIVpLOF`_pxi*$2g7>dmM^;dLm*q(QpmU84ybjPU&F058Mefo5W-;pf* zUlJogRPg+o>Kul-PuC21vVGG14nNZklt%nojuy=W)myx7%x5S`Lz4~NN@LxvocAX^ zgWdE+McAW-em3I)ZD%9el$TCC3UHul<#-b0W`)X74lkSym&m~TLulXUS3&Fab*Og^ns-hy1%N9&K-bD6kCYflXkj%AMr;aD|N%H zxTHD>^x1qtiIpRz6;sN^XAgOs4W{*hN{;d1M-+w=oRNPzt@zda?!!+TERVE+jAQR& z%7ioisc(6q*O7_ugc%YfnmWWQkBbOr^SN^618gN?0O(d$qg+pWIsHgcYT`z_{!Q)} zv*`OKzIlhkRxiB`mZ!4EEeD%R?MWK@sm0~zIJ_tP-33K&BmHj29U|xm(7&%Y*g^k` zXJUfYB-}rA-F~4%^i}A{Ek%pj8nI}@+wa#7)V5BW(66MzTngS%DpV+JFJGM@YC7uoS zU1q*A!BfBHMLsBRYCDUa!>W@P$(;Z{>4foDWJCg;ftTUrXCAGc>e%|fT*S0Y@4h{1Mh%?fQA2uz0ko+uP!Yu zZn%`TQl(`jg~6rF zD?RP`tG)fJ`!?xoORtHb@P2EFYJgjQwEkrhBUxJB@o zcq%%np||w-EqkSt8c%xme5e`Reimq9^aJLIYj!?PAE~YA)^x}t=U`47aSzkyCRyqB z8|Q*_rK0pI@zyoYftvW$7n#=)Z9Mt!UH*feNPVQ~rVB6_yB)Vl9a@>!(Cv_;d+G|0 zL3L543~sV%sc*zs9AEXoY3!y}>l3#enLN_(%w!N1n0c{XU&6#$NU6;Hv5JN!c;-%u z?B*2CfxlKmD>c(pp&qt6tYr=(Ty3c+ZjDFCsV|*dRoMF!nxpnvJSd!{TLO#tzW6uh zHN4o}raUK8cT7L3{N5EI9(VLhwHytW;d=}Vh@Y2`fy&nolPRRsR` z841}kSsDLX$u>I`W)v&3-!2v9T<2_-3N2nMbJ^IJIR4{To;uF=3;zakGTPwmj9 zO6P<|>3=k<%#V`!_sd~Dr61;TmEW!YUhg)1t%kX2@m$gWlKFh^p{;*5!9TjmJLN(- z+;qF?V5oWjhfJD0ofR&waibCymq z1Yg{!8`fgcS;Xm^_PZs$jhEY*BkK&NR1z2RVy|=Dr9U%0awMv~UEpd>c=`x)M_Xcx zjm9G-swy>@c^UW3V`9ByyUz0RZh2F;UB=SbkjXrYV9FD4oi;Qi44a>G`me%o~H?qx8aLU;a zBQ|l4A?O$S?qgfyFY{xdnGuZXBo}C(OXkTi==A%0u*ZlA2$m3Q?X{Xanokmm}fCdi*>xy=`9}8j-O>o z3NZIgV={*LhwNX8_WU6d`c8v#fw2PLP#Q^ZVT49uQCTpzqqtpo%Dp}%RB}ovsOt_~ zh~2tlqN-3vqN^`~3<=F5*&$($mo8))ceV7Kz7kIWth3s>MOjv}vYI;Ihqs#Ur=M^s zs(ZhHksm}`_WkEdo0A7QeRoH zKL?xYgy=F&$f6i5E0HLIVd-hK?o9TXb;}bBARAra6!2`J7^fVH9KfNN*c{&~T>V|* z8(C$*@98v7)yS+b=xK#vbg|G>7a4nWfWik*&L6A*9+U{2qBb(*)PgC0JWfG%%pjt_ zSz;emyIfXVWYKlMWNEP?j~U1qEWMq^HXw|d-+Xbd>w`|Q(R+a%w1$$IYe>H}YvIW6 z!npN|W|0fBI3gw(7!l;_1jgLgRGXCKDcBqls{l~6{Jjhu_wm{(2LUtH0G<(qoAn|C zWE@4KBk!(=^dX0DatnubSY#<~Y!t?QyqIr;P*R0-X-xkX$f;s@N(NEy@9#NI%_U8i z;7gTMRf_^Rdf|d&$-@<%W1^hTC;d;4m>JYESC33_y8JwC-{OZ@9p*btC9WrDqvS;8 z#oTRUAAoOQ4l}#U%`FHK-35t2N9T;YUMy;ESyuf=@OZ~9Gy{PK1y9lqPY{Mkxt%xJ zF98`>cC-(T?XcN1HGC{&kW6sk7!rtCBPk6jqgO-&!HvX9B2HnBYYG=2 zJbg%f2Zx8ZRa)ZHsNI5cnQPMIE|{8}zRp*oBMu2zTQVO(_zz*S8RA3pp6 zrN6P}m1hXUC4uH9gVy5W;smYKCxDoSfqp6Y!?E2+bDP^`u%t){C|3bx!U$lD;K@;Z zR^ILa^#y4-5ej##JCf3p6BCys>GB3M;f3~KJq2+2U)t^eOPcy#+w)5wt+NrW5qcDf z(@E#TN+zjyej+Lf6(v_Uw^&59X2G74LX|Agn1fyU0fRHOn2epSgQr3z$DQ}?2mNgr zI_nq$#D_p7AnKDljAERo5Ou8y#$2R{cq6>4)Kygelq2P0r7Mv;ETbx0J!f*?3}#Bi zRhv(y5G$^DM-v`!ZyuJ)8cR>r%hS0(u=gI(Z`J_#w3w>NCGZ{MoGARRRoOyssK(OA z>(ox#;!p%4e%<)rR)sd1a5mBq(q4id|0`zpgmcD&?-*U-r|k!&9l2!!d=vy@AnqmS zUT;LZ?=UK=YnWxlnMZyRZ^Xl~ybp#?OIJ>Qz6?#2{8Pc@Bx z>ttJ_TyIL*L{wgj>t>8^gLnjJLRQx>f@g-guq2VWEmg^Ep2U5DA44gvLHN5tK^r`FOm%ht-p<%cVz4vg!A z)7P{tCGLH(dDr^(p{8{&cS=Yzob;nt;k*_;d-%p#>V|adJ?)+sPJazQ?W)5&wqzW? z2)?+a9#bBl2$EGp+5locRpUV-i+4jpCth_qe=uiY4`oO#T2R;yDBDKIFI_ubcHPw2 zSl!Jx1wH|07(9~~yq%pLNN*bvhYo{W1EITd{Zr!L0at_d8UsWTARFlfvw&Cgxp&s@ zL3ZMFF>s1ou1v2|`NsaAvkR*8$%)jHtR+78pUGG{{W;}TIK8@nAEk-RC#3+~tbOuNtV!L)Z{hw!2_EMFV?~dnK$xy}iAy z5Ohe8G8$VOH}^wi6AG?x4>~N{%#}~THbRQ!WAZ(~A~4QMcbKq!c5d8Gw^8TC(Zjfp z$$b9P|9|LlZvzuEGquPg0#nV$KYsieD#Ce8gfB7%1i*G32InNR@8h?pS#-FQ(^MkKb<3U z6t=Vv$-xPr8bk@P=!|w%7ANEaI+HJPOh8azV<$?6O{G#h4Pb91U$(=2!hxiRNE)<7 z7>FFgn}{7DkUOjj)3|DZmNZXIOLninWu}{JNA@lGrMcW(4;;$g?T8%& z*{|H8@}Tvl`n7v7()NLEyF!R_X7YpNmDx&7cpbAV^rn#PTC4JhXATJoTU*Wi+ViY7 zZX0-C$?g<&jsP|Bd%=JI{Qy}E3jQFGYQ?OjAa0VncaCJhVGf&TAXWycGg0y&-Rdwv zsB+K;97;9?2TqE>I%5}taT^5^U^xYf?6ClzDCf-*K-H0`q1N9ck!;;6O;!@}N=iZ8 zVE;ygYz;&*f%X{0)5DdrN@NBzAvWoAnHaTu6d1NsxCMalYd6wbKdwh48(eFXV0{X9 z`a@#W0b>#q6Qgkm#lmZJyKh6q%n*DFqoZry@u;!kgy(gYM+E#GU zvR1kfOmrAVsKKfW#*3 z=rlzo@Myj12=X>55SfMdVJKV?z^j6v_y|1mdO(*=ZM0Mu&owfYk&$_3-L8k4juI7- z5X3aD21f(&dg->{@PUO%95f9lr*!VE2(iJbUHeEbKt5*_(~=|EhUF-xD6F&^Y>V~e zB;sjc5GFnGb)(Wf(W5XqpukApzG?l}WH1cJEW#(jiXqd2Qog_Rv0uY*+H!J|RI%i3 zi}!Bp_Xdjp)K7}Wt`vskVA>mfX)(2+`n6>hkrA7~6g}8aBVw7yi3P0Eq~nzh#?1 z)%V_O>#T41SC7RBF0=0&FL&*?Z3jgg?7~0(_!G9Q9bdjQOjJ}>^5vc&M}{m6%qT${ zC4vGtLTU&8a{nj`yFAjs$f;u4gsu*{Rg8KJW|;eQC!uBdfTDfVGQXj9d^oL%;1-AK zRBHN1yRx6Y;0<&Maus;c2{fqucyDL+4UJp4V`*TRpwLnWTc?zLcZedn+>yy6-YeZ1 z%2PEBb1mvRnoYwpDpz$S{`^yh?aJC(8*-%ar;jG#5gXvb1vyRVf9B0t2*a zJh__D7ACFluF|-og41{2q-%F1yXZA8=n`yQa@(gL=iYcfC%=#5uteL_J+aDa@oxRB zHtav|1OCjn`B}DrVeSQYPREW5d}O6LY5Y>~+HcWP5;DdnCJkxs?r%NRVxjBRFZder zOO`!Fp5f(AAFY@5LPe3@*oQgps5yetnU(!}w~S?Y=ZqOSojqrJ{e*Mp>>Zn7`y0@03tiZl9G zu;_~Br3hocBUU4jcb=}{(m1;DI@`sKiWWEaXZT~-DH`?aq3N&4@CHav;go&T{Q$>` zKUST|&2zb5`8}pKP17aZkBQxE8WeiOy?L{n4TqFUk67c$UE){Tzn+hM#hj}5zxZ$B z+l9;aK8j_zU)ECNMvrVV1;g*gIt(OCc8`Li8kQlAm`tK$U$}6Aa)IGru@`tZbski{ zxuaKw)W;3~<5;P*J80ZPbSE4}vq!QgE@?t!|ABnzE!9mGEuPqMu*~Wkz#PRM zpcZ2lf&Y7X_2Rh<`7-FKV=hSq9#i>j^D|lGV^)Iw#)}v+swi;Ob4ST;y`kVS_fM}o zf+FvMk_@$dnZKC{FxD~wq(FIBUj^a8E7h=CHpdg9ZIfahP)L%m7|KDi$fq_75uNJY zmI+M9NyIy-CibC%WE1A~d~g`Yd1!x~wmRGhbh@8)uD*qw39)+_C|Q}5xl>76@{a7F zyctj2(X0Z=Kp^vM@7l=R8S?6ea>Ei}`Pn#>c#);2K2I%R1h!<{^*e2>c&%`Ur=X9) znws+wU*|xH{yRIz*yJU-2fcs(R%J5p)x2waSO#pa!zF?B<4h5X&RHa?O+`k=OFvt( z*x)|V-NKfG=Qv3 zV@mV#*Kb^OFfIae8QM}C;NHMLB>X1j%XN4q+9mQQ+WY*e022|jT7fNFY(xh@GR;%6;uU)=$R+kTE`y zCf<575buXh8M-Z#0PUlW4EzvCMg9(c^%ig|f8l&W ze621*HXA-adO-8|^XoreRqrs*neZ6V=PXd^>>pmUZr$<6Bb}womMr0~TzaFww6U=< zA@u(J<6kTSO_h{PV~vaF4vPNbb!X$o44JZX8I@f>rsnEK8@so+e#6W)-VVF5M}YRV z%-5L1Hz}XVYUex{aZ%Kl3x8Oqk5J7j2DPHUfnO z2x%&L_A0TnKTw-3CPvvwDn_<+N*pGmV7X~`X5YOg?F)=9ZmJfz)3sXGfy$&|J#VA< z?gd|4=Ddd)1w)4aGsZpNocwoNH!;j5Oy@1{wC zrRn746jKY@ZPv>kb!U{2%a?nynim%p-RkPuC`Yl>y;{}EQxl^SV?{4t2AWNQh043r z_ao|uz0R;?N3pbpl5`K?*Quch}@C{L{NM#oWM5HCO&qtBAG7%QD~mbMZsk259yy;Y??+~nxdZ=UjEzJ(>K#O zmF-1qw!c2)x75t?%%6DPaS^)Q7D??%Jgn>h78#tP}A zEoWhgguO>&16U1i7{e;0je@wQ0i;1)cIP{g+Kg&Fkb@T(6y#Xo2$|xkU>$}{Qs6tu z+=;i~bp<3^CL&FO3HbYP*7s(%Zq{08X+@*F&JQvBmrnLf)C4_`dQN!Pm01xxa~hK$ zL%IdhMLKzSZYrla1PJX#(h&E~g!$is8VqvzqJ(*a1nU_zV+_id-fbBRVh|O494x*#U_p& zu$Kg&Tym~v(QWv|XhNbi0)IvVsV9JCrU5;1hqW3laS}+!fPX>CM`#rnRnEmsOJww~ zyykN+KisyhrEBNJEj2H~YwthuSQ`O02BR8O*r`?P z27ZKoHmQ*QcRB^D!UteE}aakP_!YNxTT+!WXjXT68y`|fQ)^)8f-@}%7xss2*@2V>3F=TEg}&x+>)77reu^k5E@Z@pCx zQZ5qXvN(WKq4QA1F=C%F!qY)cPh=meWMJ2kJFr&`M4SY{K?XD0WMJ@pN6t~AsSWFVw$ zKVSt#p!(@ON1!|h&KXO3N?_mVhDXuP5Dbq8Z7+agbB`RRN)lL z)!ZH}vga}*|M0r_Yt^6ypbmk>L7BqC*<+~ljPud1VR#~#r(O8;3ulSLIdKM7g3tH) zF8HRit|$M+MhkRV?1FP>m*@03`t#UX=kqwk&tJmE%-I2c?Fg4I3Pp$O^)0M-go2Sx zAF0d8=?)bmFCt(**Q3JLyV>Nv3*7+dg_YPc)Nv|!+hdjNGJN?P5iv*y2y?p@VyVLR z(0#CEGv!B6R6C`m10%s|A@uqd7(D>V^>H=@o|+Mj?ekmD*#3eVhFtEVt{;nPoo{9w zdhb~XeuGuVSCitYIU|wcH)saY$5A5saD&C)g-NevaEKVqPSLZOr*CWwLZ%9>cOt9} zJ$eGUWK!D&p@+PpB8^0dYX^-Ewg53x5$|?nU-;ghJzNWn+=S&BTEUIKqdWD-DmS&EiJz6X!b~& zpW``AE7Trr#PM!f6%_iGv1M82E9R+_`$SW zKzrWbooSg938Em!W{=fq0+Br+LrPu8RT=4quNG!I0W8!D{FPzu4a1qP45?zYz7sBA zyB=U}jhQO9*dG79a@nFUjJ8{!lwW~0_O(@|WwkX(+i7aXXD(xrdA%uMdU6PC|8Fxo zHBDv+&t1?A)k1&1Fq9f=w~A`_TV@vTc0Q*LdjF3?D^w5Ll{Hh*e}7Nx7^LDEX+(sB1df#lwW8(d9nn`jpr-V!S^h}( z?4aRJ%z$lAr3@wg23}O#&%+3%!}xE!NzmF7HK~{aUS^JBf@)_V~c(quC)9k zA3tuG5O?l>f+wNjsF?W-d*X2lctB5yAmdLC2GFy%cuZOn0_ijbK~8Y}yU7AZI4`&H zXELl&E{-y2HCVkf(GJwL6(CzIGv^(zW!|S%_fg}v+1)$LwBw;s;#C?W6L<~{6o;=j z_EwV6!5JYc%khTmhHCVi0BS41qDzHDVMQm3ICTPIfelO_;o|yPIWIpKL*3J8wcPsB zY8?;?1XbhS?xtrccngR{g)Hkn$N;FdhC-M-Ze+l;nBH_ean{G)*>xaV!{##v+Xzj6 zNjitEJs#Z}bXr>>ibsN$cixXri*T-%Sy^I~whPlU)=dk%?hI5PpH?$5Kqau8Rk%i0 zX+Lw>o$(c~Kbd-zb-xkA=7`uOF{ZKAL457`iaFziIi6P2pChbiV)A%;yv!5IEZ0q? z3V33KM3Hr8ifLI5ww>5rnudlCX&%6@pOvaM1Y3}YXj{ABrTYQ9Ir-@EVp865^#9$- zE?RlT%9ZFJ7sCuDLTyL_&y?JRU+T-vVRU44e2{zJ8rWvDEx&R95xshtF5$BknIpjh z?k>?x^++VV^~5-RVpkgL{Sls?lFVco62U&Y0GmCWPNQ24@>*KiqmJzmfmW5}(qiPLjUT$tK#M{nYs9T^-^<;?z z%QYU1z^!|F?Zl-$R2E&T{l0^20iOo^y~TKw1eX!$AO1^?MFrN3K*(`YW`fj&p#FxYOIa2~h_SMayalyT;`28Gm{h^$@8`0e0ug zzlYi*3W#;x2-9~L9uFL)NW!Q|HLF|&buZZjq))?{TOFk&0UUh7>tJw*^ib+KFe1+u zUl^N&p)e*z%H+Iq(}6cbCUH6$hIz0N3kdeE&&Nt_lPtcs>Uz!9n?DQbFy$AM@Rv?r zy7~5;%d>>Ni~>G(nI*(x1#(~40AR@x0@=%eF(Gg;&KM#u$|rSob@J~)l-!W*gjz<} zb@20|gltp`WqjdcV>+}VRJ2>B`44Ul8DCmFKVwO)SIx(z#aJijS7eCwTfgpq$WT^z zt!Pu%%Kh|efgJrpz7!NpRWblbDg9i(6^<#k1&-)eDc77j*B3)hbK|4!7pWuy2!>D1 zahp((B%tcGsAXNb@>ongT}8$pTt)MmJEGo32CGxT);5&Z$>7>Mz`GD>`#hf!wdoYr zt|doZT^l!pW0n*}WTq+^*u}?zJ~|6?0n>@pIa|!>T*uTS$-l>`YFum8lsSCl%`P*; z8Q)f3(uKStH0dpgfXo}oz=n74*kSpbn0#9^&_7O<>1wn}5!V;Cs*HsIZkG=RnVhYug* zOK@cd!}LkZ{fDii++rMY$BT8xmYq3ivw@I@PfI(g{ga z>P36{Y{jQPt6O#q^nG;TKs&Of9J5PkFaNl7f^l!%Awjttzp$;n{j1l#Rn}k; zZkd;#NqXB>cQ0J3SQ+Ph6Sr2a;}=kdE z-LClW*ZA63d9m@3%Rpae=Vow?g!DHe2|Xb+EX<%>%L&JJ1W6sRH^d=P8y3qEcyGHf z17miO*t=j#v5A}eG&TzAF^N9jIDtb95^TAkJHOLM>Kg?|Vw3S_F^+7I)g1j63X_AI zP3)hCP4*QV%0XE}6ck8`tYE5|Qv&FZQzR*x0g1U-1%V*q;k-p9UBR$4rm{xAF@r zY0uMMT72hMksY%n;ml?9g7f?zVYdd;83!ecuC})49&G}(sYilj<|uMf0R%aq_(ih*5g$Om6+_@*h>*fEQp`Z80F37V7>(ivJ^+N; zh&cvAJDXiQL(R({Uc&jQyY(5ysM5&xOIEZ%kXRy)VD&eBc*z;tTV|Zr)n;7;A@X6* zcu!535_9_#c#VQcLd-u;dR_!W8O*F)zgLG&N}q)C$qYs;yR!aA?;$dR{+u~g5VOB5@Gb`xkCS&D#@F!ExN;9-9Xy}KQ8rQPT^P03vFFf6zU({)7K=+oB z_Iu(vhOi=z)O{E#On?}m_SoWOaq(;z(nmdi3et<$&#p;G+=Y3UB8J4Uu}G(^NE+qI zm(0gS!kxxVj$JSeNa64uv0VQ6ZNsJfJT%vm|n?4d&~xKkh1^;H%SqLwzM z4K?)y0ph!(PYtPYUePlPbhf-Jm>UiMa7p(?`8TiaMMZKf{%Y905WcOT)e7TCt+BQ~ zvy@>4xp8<_+xt8CLy-cTHo~KR56+nVQ!BA$=*jFodVWR9N={#h6xuf6 zl*551LXA-P`u&$**Vfk7OrsN`oGR7$P}orEp9K#f=oUGR;k(ZKJcb}OLXXt?duaZ>hduD%mS5nuJa={?;p(KE>P!WSYUG5_cd6#({|f>ZX?@hY4L_%Hh>mR zpR)fFzVH0Op`pqfyIW4zjzOucXVVPu9ytd4bQ=o`_hVnTi0lASAOP#=Odr5jg8Cv2 zX7CBS0S7y|qiTvvJx5nFPlxrw#7{pLCJQFZ^TZ;U9KuRfZu%J6l*Y9d&`wr^6J5C& zrnz?F^YiB^G6}~gcF_w&PF>(}rly&`zY_^!QbE^G{5{f(!jvy#g!vMqRl1sCBoxv+ zy-hd$T^GcZb_VNvPhLka4h<{ga{xD_c zJ(-oowX11CXWZ-#%I=w~Lko}&yn7u(B|8U^Gj9a#awsxBK!WH3ZW&Pd% zg-iPauS#EIF8jK5pEx({IikFZp?Bdw$Tuo*D5sg}E&~WgA;&W#%~iZ|fOX3u3?d1T z?s2^BJV(Oxx}Jr(k7|S9(a-=Zi0;ZLzZTa{PVeH%&dyE?tu{#2WMoGZQcQE< zK5z`1H>G`o6B7+;;vH#sH`(Vnox<-lxDN-ewvzf}^TdPGy16_mq=1fz5Kia8q9Kq< ze7uR?&rfCX;uCWh=J$Pj?19Bt_OxWML)ksVN5TN*u8PkE%!UzQ6_<8b7=B@l~&I{jd7qh-Cy?m zZk3d58>n@(bu1k_TN)xEa$0C8WU@c7KNL+f311%rUXMxo{`E)n;GiA9PU>Nbd{>s} z+cnZ#e++AlQfg_L;*eWcZ zT#0Z%L#L4{M6%RXoSe;{#$l5~+Q5Xo33CK@7F2US%gNF6{86}W_-^aZgX-$)1ak(4 zg(blIlEc{#54Z~tPeWGrlCt#pDL@fw8xL}D%F;_k#*XAp> zQJN?XL>e?uX|CVe=i$CTzpsC;dv87GJm4zkm?9?~ zVdV@yaMTzhv9zZfBr4Yhfi0-JW-BYhu-mkMX2-!NPo5ZHWqAJZF*b(pdcq_q!uuqOJLZ!ucfT43~&v{r$SjprNudCAcS9h-+PPhQQ36_ z8v)!huj(Yi{56i#4MXn(-g&n*H59Zd-&0jRPu2tAomC9eYk2TrE$KvgcplhVX2Zh@ zIG9M92-XM<2|Z`hh<4Hy69L!8+upmzgwy;6p!;~H@tBOGK_e_$??yzJH@&-?;58VZ zRuhBO{rFTg%7+n~_l98_&fkLDrZ)1&--zmd@EBE2k@)f2pu`yhT#&h-3rOK$CXqYe&wF^4I{3oo%0!2s75r`2dHS>nQu5SI3t}K zN5bI}@)!R&gJ~inH8DAwHkbeTCme{wN3m6MCQrwrYSP3&#A5IlyD$uL1tt<}DE37d zPU{4ts|-0)$>*WMr+3t-o!0Gwo5*jS4dNS`dsi1@tGpFk<+=;Xdy0Fidx28Kb|NR} zIDw}_Fa2Xq=hJ^?{`I^qN+!WRd*?$D7z6(FS+8O=W&h5LF^H|jk+tfqSnxYGyk zT9M+4^>-uPqD&Vz51LflB%rKF-kIG!LFtNIX|^2WlA>%D?xz*xUC<=K<8Yff!4bsb z37#e}ZuBm6!%7p4a}vbsWf3&?CK_ElIo7}m$03Pt{3qMER)Q|lg#-MNU*6NF$%p<8 z;1BJgUKfDEeHCTp<-0XMA(E7AKUd3OSmF)vt3S~}eibjhPQMH?Jrco?n)v4fwELWq9CjFwe7qIg?tdk?EyQ_m%!^-Y-0fqFh@z=+ z;HDUJZA+l{svg%Dcv9(8SnXcscmfK%?#k4OE>Zx4WpL^qay zs>PJS98C2d>aWOg63&4&7c7SJk9^bC)y)tIUB1=LItLWkGRI^Uv|wRPO6_L+zgXB( z(V%LO9}~mE-V9{E0X%n?TV6G`4$@;U5xG|nBks;D2t1$ zV>!vS#66rjdv?WbHyLSZ@~y3WXy%VxjLzJyE(e;a4AS$hzR_|oC8iKEO3nw^aKMjB z!&Ufj4i_)tJjA+>L4Sr)6u1~`xw@tULu(BTc{(b0Zkdc+cfNmIhR^WZaa*k85SbmW zYkL>lF8g3Ofl0h-c-bmlWY%AIA0_!^8L^>f*ee%`9tp?Z4inObB-BHGjQhAXUBVd788_#l?j;P3gI*=TUVadHRE2}Ivktlcg$HB~2Ppt`*ay~|*yQ&ai)Don3&BA@%rwt9If zb%F=dsW{LsN*%2Q%IDb_KR9&Wa65su<(L`w6}vrZI;NgSH`Wa z9%#CEOEBm~@N`@TmZys2HtzZs43Rc!iT2C z5%CVK4>j!CD>yNL82@)q!y6%-UC ziv!E=@9%>Y>=xVZfk`qUM_-8&?|4_Tg1@hI{ijrn(fOuHpET4+xmRC7rJd3TP~j>N}*S?oSOWKl7dF zJw5#G#PGLA-2e}WcR^OsAZANLVu+Y!r|;YefqRxrA1UU z&gp;%Aag{GZOzWP0avXS1a2)%AX`k`CY)J&pwB~uB5K9ghT+~jgJ34md1O#tYKueTM-N^yoVp12iz+k@A^$~a)%Nhn8Xjst(Q?N}e62z|j&x_oVQaa{tZ;(; zs8eHW1$et0ypMPwEgA8sfLfq9ECFpLk(^1j7Z|L3yP@+U-Z36tM3rrZ8cu`6>h$;> zD)LS*p1FumBZ@85J)(;iZ6T>iq(&%}{T10J0wfnAK8?1vu<)pxaPp;Hgn(n`(=(hn z(!V+_$sA>%Cn9DG4xl}#&aAQ!Z-@v&7EdrtCN-_dK)?DI+!ONrli-DmRkhCqQh10)oNXPt!x??|AjSjzje($cBtQ4lh(tAZ5P_>TD z7YSiY;?zYLF}eO_^AzvQi`>=Jymqk0%YUPeUSd~*c%F1&zHd}yYU@n|4g^%tMa=8jIlbFrZ!LqNF7=LwfB2su7?_lbS8lZpk7#b$ za$3ZrYmX|qR+!#PRu{&q_fWBMG?#?bTQ*!iML zQhirD{7Z)8Sf(BMO{hh>Srm;&5~nEkeVGAaRO=%T){tbnH*ontcU_<9g8%^#B*$>J^moMLqN}oQtq;hc+ zj*1GzNh$QnD@IgE1`Np6>cib0yooYY7GLEsockR~VCh)wT!u*&xS=LUc%2=uk7EYS z|2^li;@-V=)fvrQip_xnrpLCS%+33mv(C6(`byX&W_F&0!@YM4B?Q&>&urYwzLpNb zO&kvPPKP>{qHR9rvDsv+bXxh1YYZYfHvy}t+ejBeNQR*>zd{2}y)2-ih$^?KR6ys~ zp%rVq5mDO7*K7ncQtzP+BYi^bFv8Y%{`WgU@i89h*DXmh*QC-0P0Y$q-*VvQEtYpD zWC4z97)?n|^^tb`V0w+1O$qhizkjcnE0?BI@ZZ*6vP+wCNMs#q429mh)62vw^C+I) zN=jAq=%)!1_QG?|-A1kP?B^g!CCY|$0tiGXNNQYz1x&5`%I==Om_dCD$1I~>$r6Xv z3njP9gj$KzU||}Gzg;L1nP+yN@P8C${4TJE*3VCJ7QbZdKyAL=tkeS899zb&gG=L&*iRagC6-6Ub&YH zZ&*E6@!k{WQ_OmUSV@poeDZ}d*&lxUGz|?~%Jq@t=K)2q4-QocpaO{eVonU!&tt_& zpsV44&_wP?`HrFO<8A1d*;Zu5Tfa|w(&_@pC_dW>UiV~Le)L$p@k`r(@o~V(!kjo& zM$mm7iG6D$vZ}D4V4VU%y0-Z^{&b)QjlH!9ooG4>(Ss^!PM7<9YO=VjNe`r!1KkkA z^q_t|Dja&`#T;xX-B>GtL#Y_Zepe@yj~R};_dtDhe8JjkpQ(JszGhRCsAjI4KC5r9 z_U%5ZI3$nUd+ILaVZQrbz@mR_5(u$oGG}m)dc>!+`ew_{BkE!no@$+LcoDkiOp=>4 zc0vHq4UHdZ0&$vYs;T)Rc_W3T+Xl!C(UeYUIRZ!I@x0bm*9~L+qT`F_7{5I~Wv+Bw z*|()jm!=C}yLvU~RvJ#`w0iWhQlcYMZ`Do@`Oz&iBoa_LtWbQpeF4)Uv)cXF=@l)4 zYCQ?Tr5fjpO{8@JW^H&HlW~s#58I@j~Ul@Aakb)fQ>rN}93Rg~aWM?A9nT+&HN5TO9Q~N|9H)-`8{@bbI)P3p{+!&5MhSNU1IgyC2F3QVl;TYyDLtK$BtEg~$ zu$bu(Rmt#aTUWjF{G^hPKRmvRA%k|&QM;ja%PPCVH+Q+$yfT^c*s%0mheS6m=MqQ8 zXnxXobrc*f<8YHqt`<&g%=B%Nvo$v_LS<{GrbpQD-Lav>Q*nwn)^1A3?~#5lg{$ZdS^0IX+~dJ-`YcpKZA0Y*NwZ*63V35 zLtrPJ`0_A^yk_V~_0~83FFt;LYo!F`$#=}3a=@<_n@xGUk@TO!*-%W@< z(}ffFJ$_Jj@?T_J@p|{~tb6r94LKahk1cYFD1nIGqQkKgP!7)i#^lz1xmM9^7uqgE z&#~g;kvWlWcsAZ&40i=i^bPpz%5JH{Qhr7U$Q_AcB-vN1N8szJ)2BK4pk7**z3d>5 zb2iFC@!jF#!Lb2ad%@S&Q8))2Cu*9jyHvyDwi|zQI&7gBZdaR4wNeYZLU}~TH*jo4 z+Hn_V#&1>>N)rd5>PMny_eyOYom(C0sNt@Pr!b=p3aYmatX#Y5y#rdoy_ZJ&utP%eBqCgMGG&2DzeeI7ZuuTp$sZ?q@at z5G;pn*}i-jwv+X~{KMDcWVu43NgErS8Df5uYC%kTgK?{YSFSi5b<7U$+n7iFV!)3U zKZ1ZuH)2V)ynbK}!nqKTyCO&IC?k&hkLT29%WME6rsTv(&xxwt!i-B)=1;+)p~-9p z+Y>iB95JEj_2nI%y!5xsGf&uI!vrHU%)CI0;;fx<$sHHDj4 zl)dV#gCjO^mQ!Du;ycvleN&DQLx?6OY^d72ODJK2Tr+bp|-)+PzZ5rdt8~}oVfU3i77NymNLey z7oY4KfwAsEflQRqv~DHp1zBPa`Kwp20u~2ez1mEYTyl`Zc`6FW30O+><3|u=R#25k zN%h^(q3>oK{dARGfW>G`5W1gHsI^u1qD&->1K4+4&?bPx3>pV=aAVGt#(420vz{uD}hhXF;NFGw;@(i_*V+F!AZTpSh09%D z&Ib>GVCz*afN`H*{=|%IeR~75r-|`HeU9=(<3zx5G;!yGpPvpFFO3H`^@GthnHw1U z5SwA-3BWQTpVxZ}XjfOiVUmshxd|_RC4UuxD4whuE4w$e#>;@CK{yBkun05~>V(ds zga_R=5Un#hOU7MAj#(A?4FN?h_H78bfY9dDo@=g7=^04`Gm3MpP>L!5br%{W6PBJX zS8>E&By-Z}+?=dr@tsoL4b|K1?$D7p{CtH((4_@umETj6rqdp$yUFn+7j=Kax}hbq zaW7dP`w-dvO_b_Ui2jy<(G%)%bgWa)JWo(Az6s!vw&uN=l{gj}oZJCNIqq4)6!q9x^JR+0k;WdC z=VQOOvh^3mb^(4bS`z8A|5xDUam$nJW4j z1-Ncq=R2;0hnram;(suV^;ItRSYgwOMR0t!_84RG7$%E_gnBR&EP?!R^rkZow=PtU zA9D1#+GMm@>t2Ij0b3pvMNiqX;{CyF6hlm*Q1pfaEWmxeNFX>CpUp7s%5*-2ohB@T zwNvo)9G>*H8sgkHaxJS+TR$$RnPtb`tdCl^^9T;{3sWf!BYZ=*O z*tVp7JnD1mRPPTFuM_fVNIebhvqtP>HDG z&B$f~iw_N|<3;1q2a3mu)Et0YFC8UiXbRBCPin#A=zytkSY@SwFvbW#DPKx+MOtfG z6@z{NAKoCY#KR2ViOk-!I-yXKEwJ9c{cdHq3D2f;*6{wUYn%7a^vcK!Y*^Ifwsno4 zNC*Ep+E7fL7@J?YY)3s!5iSc@RJ`0qxKL9}#yyw)8~Eg!5Uxq6+O6XaH*`WaT9z)S z!vM|QkbQF)2Vc|R2im*$n5E0Kzs|nkKP82ITunSZL5be^JNNv{2IQ1dlbK%E!pUXV ztM$4*=sQK!4YA>Ep}q(WbwTIwgR1tE3K%FPHw}VrUG3gkNc}zdBjJCHQmTltF)y7Q zdc%3P@06+KDKiE>5Hy*z?eaG7;xEG&6UN!!TolNEvUvIEaIcCm_DU7(;#Qi#ar$5? z2hmy0i4hMv0qOA*R}5KwS!wBVd|gnx$Yl!-9CW^0;4tHGq%&WGY<(NKdJEoUIqKru zfOc1+!HTAjCE!k!l_A6?AWH9H_dizu_t}DLHI?WWNr~u`vov9t%##s}YmY%7T6GoGtCuvAgF4JF^aXj%VuLSPErv8~=>N7H+-6xCHh%3zhTr1xC7E z3k^yzI=_dlnXNU=hi^|;McHL96nms=`jhDwCi^^mEXde=-Orkiwz5l-E^8ui?pA7} zxZsydwn49#8!*hE!R_a={r6^yu6;+;`7XV@=mbegIx{OJ%3 zbq|f=c)!}!<0%&t)qi(u6}wylwf9Tj;PYi+B#vZQpU9JfE$v8PtrD~ zjNz8y!RdcpcIaF`7FBhJ+cuq(dysd@BLC_yy{8qta#YbmwrF*k%Dy~2cGG5E@N|l z{ER_cx_4|)1n$aZYEAbzW_6vtEL3BkQ+4$9KWr;Q`oRJGTXn?VUIH+TLpl|?k~jPg zFwEF9cXqX8MGXHc8D5X2M5@)lwID!@V@>q*U;URg|Eto<3tnz0*D;+u_aN zONYeYx%0I3QQwJhCbxw5s#Z%#;!(Apb3GSJo}CnB7f1S5Jg)9X4x+1G)fiw=4+8P& z3Mdr|z~{>RA8HAcxfNwx)e$wd!Xqbz8Ai^K!>K+ZtUT%B=tgVAK&{gygN5P2OZmbI z)-cS;J4JWuWpQF%f0<~xK;jj9#4-|8y=86%PYK0abvalF6MaWB)+I$nVPLqvl=!&C z5Ehplt?6D$yZ7lwnFjM-Z!=x2(zI;RJ8p++PAqTuzercccxk+heY1|^&+Dt>usqR} zQ9Q}_Hvt;r5wS3^6#9yXia~z}Hk5UeY!OnwnJBFwZY6QY^1m}TGP&z+sz)`qwBVR0 z+6uajX+zL5)GHP-%&o3hFFaxr>?Er*hU12Lct00n35-@|1K-JC<#+>njsm7a3Uz1y zS2TOgR)y*Wh&+<=kL76NqCFoz=-x729xvO##pThvca7gCgmr3_Ni_ye9oW?a*hH$n z)aVyK0IPI$4_~bVHIDmKag^I{h|M*()Qb7t?P(9&hU#rP(0C9O$Vn`A=O||EBk(hj zGY4bk%9Z^roS?N&8|P>1v+N5Kzt&>ujlKBU?E&i>-hzzf}&?(5iK~kF#p(Srbr(dY#CAV&z*B}6lDhWJi;~cZUG=p;wwgV&RsEA z%4A(tE?s$Ffr!vM9=+AexaUm2|5HC^UdsEl8#>BBq>V8#D}cjA-?_7yb`AI#xqRz| zcyR?Jy+)AgjNLZs{pae$V~$A?l@4}oy^0t7ztkcGjJ@(StD$9*N5mzT`!eHa48>VF z@6-GgyPXyxDK~ok$$mK?X)Kz6#d#7SkC=9-?qa;WF)88SPxc+3S22d`L(bhADb4iJ z)3d*n5M1<@js>M_E0Y@~g4i(Ldl4(1HyoMM>SqH8cnllQdZ*!OgLh0v0X5?^vfq}p zEtpzUKj>GD5 z@eQz6<=+&r6@k$2nr@(3y2xz)sJ|~wL{eAe$tI6UbALzT{XXBHuE@%%Pim@}GxU#C zjPt3iari3jyRVqu|8(iE{`UqvOznQD07a=4Wq|dPc?d3MGROb->p2N;14=$C+@Wu5 zhggv7M&H=KMfB`D(P;Vkb{-&GxRXFjldb>Mk~ClAkOwT0NLS3%Qw z=9zkRRIc+EUBj`;2)r&!ws0R4|L@176h#S6z@NR?dd0zQGG0T?-M=A8sEkZXFLDS$ z81%o*ChUJsNiX&8H@c5stxlAx4t7>Pw{Y`mmWJdqH7}`6B8bl92A-J7yDBsnYSKX$ zTSTXGt`(Ry?1Bh+Au(mh)F!gYXsh|91d&h^HnE7+61prHQ%Jc)?pDVwDJz;+?&{$l z%Sr{mk7qCS&Zai^R>cFuhugld$qEz@KFs}Htgyg{t=Q8zEoEKL1Is(chNb=TzmLkW zlFUca1rF7pE+vF0O&rU3d6~@;nCcUFC%{^4oR?japvr2T9hq1E&laY8b+{1n_^v@( z#bDvb$>+Lv*IqGa*S%5H%fY-QJDT0PW-MijF5*GIytIAW*{vV;5f7c|<^OY4P4>n{ z}R`()42n|v9Q zxBTRu+zH&?j?%Rr@A+ z>4dY3pkh833}7}`_BD)Ik!T}Pond=mid7c_*$h_L`VHd zN>fc){o0wc_z$oz-f9+Yto9}2yervFDS%CwJDUwb|66Y&ofVD)yDHGV?(ds3=NCT$ zTBacmGRm%!cI)UyB8_blp~thH1#R}r{C<78i?aU}EsONn7U{N8xJ)zp$aFURX9nSg zM{sx6Or6;VZM1UcaD%|OKiS;$)ro11e=TjQoHTYL;_bTUh%rUdI#4}`iZ1;3#SVHb zxiT!Eg1-r0)zt}iPWu+r7E-fXbw3)c#;$-ee-f*N!EA=M&nEr#xFEc!vpoC@Y+F|_bzG8)Q^E3M9t%n894X4*^ z=$Jl3l4 zf@N0@1t%{1m69@r$v%s%ZzhyXk>gwcIjR~JaSxgjy zlKYiSK9qyou>c7El3c*oH>>~4fO|<+r?-=C=$GZ}zEI4=X;+j_r`^TzW~VP$A@BZQ z*U){&?^j>NJ6LKk?hYc%3_n|t4(d_;A+s>?IKw$eE^(!_ zKhe>^wD0Pe7#sVbwqg!WzvLYjeuriW;vDtjpQ&9!Ep}887k)>4+1uxoqlQzDUchY7{z&$?Dr1p-v>%sdH1;$wDwO7}}%r|hg_6#MHPf|Pui%D%{l zMU~D29y(lliWCv_qFo6#qjvnCE@R`{58Xt-G*lR( z)1OuGgFn4uTIK?xKv#pQjJT~%Tk+Z@6I#_55Ev1RDTkZ<|KxBn#TI&g;qCl$6GAU; ze@Nnkx~f-47weBz#t{)V?ra%QEfjvZgi_U?ye3kyPh4Zdg&6ef<+A*rZg$bfJ4`-F zIVw&zV`0YK@9Xyd?Fhk&zASK%S|5Vth(G&Z#blV9Cv7>FUpx*DFUgm2W9h*&`Az9A zc@XL6u^de%@lS*jGP5%}Tizy$v$ye!N$qa%Y1i2EEv?S|t)@P~o-zo5j(*BuB z@}<({F?X_`I;^ILZb_e=oAzht*w(xc2!EBXT#|L%tSd0@$xB(FZoK%^H#q=gt;j zTcQ8kYWvDt#dhm#y4zHv4d83T;`c1@WxTxLa@^B}w7R(QXTM6)=co173FEy~{+~3+ zN87ph(tPg*zwiMd2IkA?S~F`4XxrUAqcnN^i|luFm0ikl1arCH$(Lbo-#xaw+BdfzHFLP?s@Wfc>VD ziErQb{x2^n#1`3(XJ`Co{z*o{0E+2s+7{AO^Y+clOL?2BfWj7yGR0y+@H5xnBgHO$ zCRg(h3N|#@61EipVS zz9)KX{*1lnd*f_nu&znEjG6Vkvu8UVVC{D>v6s7WGTM(u+}m<`^DJRO8;X0}uwZoB z*^~X~^SKA#a|oPQN;{Z03!GW#?#7E;+|0yuT57v^2epYOlmANA=B> z-YCB)kG-TZ(ta-|%V;{@@QVJ_fYbIj&kb?)&`fPI%DG~$CUA+HklRU>s($q@q{2=1 z@CRr}^Z0HjvO3d?c+p6-)5@a;LmhiCoHA(pIB71MG)c3vZi+2`gsq|T>g@h|tmuYv!f`|pG(G)BEyFL; zT9Z8Xe3ot_dg!gq5GUcAYYq-|S{G!6hFmr|xCF4q{3{|7#{N;U>%C^6Q(Cud%3<2B zlv^vUqj{PjoW_E3jR7{d2j*a>$FMgCt`Y9a`=t$&iPsaX9E!qE>xr zXe_LC+~zd4`HK=tIvhq9~5l*djFG8_K<}@ied%IfL#5> zbq?s|HGxp0g?60oHJr`}cL$KEvzf^Ot$X4kH`sz3-(6VJ7*E-2#_|{`vbs1w{rsOT zgHJAc4Q*+7=-`)S3DYO$4_82YQkAME^U?k^4W8KM!%yvFj{XX|KyqdI_X8fzk3Krs z{d!+>Vd7LacbqnDmHfqDsnoWJiimvXpzv~fL~nJ`cQn;{J5%y+ymo8he3T~#}*<1>48IcQhW zG|hDc&AG*oorSBDOiq*N5-b>P8oEgQa2gi4a;Ho;bi0k`m)$CYFPB;m_-QmgfFy-l zAo~}Vu~OcH{tA&_3$De+z5cxIkSb`t;dwb@)aS!PiM$=jtQ?)GmTNhKchQhK zB-yw4rilO?!iwnn=oh!ZlAsiHX0fP}4`&1C(Icku%rsqMiqDR{5GveqYgK%MQP4}G3=Z!wl;OSr${JE%TvVo=pE9Udd^gTm9tch+hoh^RQ@ATClx zk>NLARJxGTgqxoYP_B+eE&r{EOJhZHR=FQS4OeKyh^Ios7=th{c%`gsT+2PQW9f@P z*|-mCDp$;84h#;iTGA~oE!})!WkL}c*dNO?;0Xz@4UA{imxJ3UCuQe5XhvcCCyAbY zLP<+(LISxGvC3BPT+_>BmVj@o=(tXUd0tobodlL}^Ve3uALiZ|Y{7wVw?T$eJSgV3v5J?Ai@%vA zA~j_T6q8_Vl1C>=)iGPE5naR7ls6e|={rXtN86Ww`}Xbr6C>>-qG%z~gC_C`aX?_W zTQtY)<|nyC$O%Z*$}7Bfo_^CL+#LoU+jf(aH@yzHw{?Nf-k8->Lw@IxpmiHkD-)we zpmMddzz;*Y(wngEm* z@+k?gU+*GkC|fHEw(zaQ{Bx&|6-l6eq!pQi(F2OsM~iNSf$tAp(G1_04;?#MNDy-i z(zp^U5Zmb;W)1hZfG&JZE*_RCOm1lAuje>n>gIbV2vk+k38Trvn{v$I`6}m!S(s!ig~KDYU*uvG#bNchusb^QzHhKj zcdk*5Zk|4m1x@FN>5W$|+$h1zsG+c%$ndh+&U=tA>qcSb`)Lx`!X#to#(@uSuY`oO z^8cmqOC=z-#T=>xP{eI9sa+ZTl1_64=$~C-s{gSZzw%~=kqqJ-HLw%v&z&0&wRUNE zit4*9dm28j;0 zlE+Un!*n*N`}+Dqw;xCjXE3X1{E}V=8MNy$@bIw zgO=+@eYUrV0~=1TBa8CMY_#{hLVFJ5VfNO0j@gT=M9(_P%(&P05N2| z!l|rr+7sAR6ByOAXZN&&wfHK_Vq_PtpZl7dU%ji`Tafk49%(^s-CZh92-Gon0(2dc zgi?(Y{hDO@MoL9^w|r?{>iYdAnZ@BKEG8}}L@4A;V#M0v}YzE3n-X)Fxr$AapIaJ27Ag@}LG1nG#abf+w@1 z|9-H!y?qia*6!lrZKZfa2iWsx&u(_qY&kcj7!vb(o{+Yhtg3^K82?=Ge-wGP`B1dm zcw5OG#wXh5=Rb`jZ9lkaByb_?Pn?M4p$BU~SWm2C*_6kRKhAH)cVGrTTz(+vk-74% zL;I=e3Sj$vWDmw%(T5W+o>Nx6>@Z<$(Sv}XzY4O>bc|)oXav0(M?Y(N<#u95L=%Wh z6*NnQ6iAyx@;Bc(XR=&OObv{-EIP%Za!P4A9^^C}7Z>;4J{_utE)FocEQw&p%I^N^=xW4k&0G6{-#+9!@iTT}EgkFb^D|&Fp00`Ut+xK~<@}__W z5pph+mJgxH=7*t0q=9)3k^;^4vilC!Pt7Yr0u@im6P&tuCN;e`z8w(}eo#|LWYF|p zM8vaJ*%d2xpaW@>u7bHURYwqLRSE(ek`G#Gf@z2m?6G8$xjqDO1@_~po7-~&`(){`Qjsm_d7L*eQ0C7L__gKRgrf$J+>@y#%3fFriAVhE}oU9@n!q3v?Rg2$<&>FMbioM2HYHVb#% z!EcrQR@2tPm&F}iy2e=HKVC)J8d(Ktbg0%|!vpEJ1a6tzEnwtkB@$*p9iIKzp2UZg zsdo5>_@@w=_-|D47f~SB5|^%9|C1i&ns>UT>H>WLBe3NMq7Nzag|P6!&BAfljXk~( zN1sFd$S1xNMMywM8SG#Bi5Dujx45D}qk*TH8RmN1FCD&FS-_rWxt10nz1;Ky z$fUTTre-ta!V2Bl4rbU5;`jwit3mYs5K5kp(QjvA3dO^>iW!=r;R>OzTjDf2^?gI; z!Oj;#Tg&wa6hT$S0F*Lv{5jrvxT2pnvwNq5A$!*&z$ecWRzAsaX^s>lgMNHX zy7$HHBrSmu$8!DnbWf5dL5z=yGaRc>&;Dq{p0ZDs{Hyee8U|?e08%7u9B<@d;o#s9+kW}lH^rxG7c6)(B~(Ou%X+3?SW8B)*~az=gk0( zOq`afgXcsI2c>nyJ8khTh0RNvyoABty`P;{XN(Squp8FUTF4Kq#Bg*$By7{I0NPr+ z(*`&c`j=jX)Eqpyvhv~HrA~0c4{j^Y9Ak}aOT`jN5#wHMWqc?&LFLT&rU%6rJpn07 zuXre+GEYc++Y(YTglZWWTBhHcc56R&#Re`|YqaPdYN^c2pPm>SY&f1+ZYjcx!on^% z!LIU2$#>7zSwcc_$P*sLLxz(^K{7Eqy2+k{t9d0>8S6!-xbf`j5l4US$7OC^KRO62 zJ7HPKGv?-QkAqokBl)jIzfo*qK&TyCkdE8S*E~9MFg6iZYo(yr8fF@+T!c)$^%2N` zY89}sU%&qGX+q(dY&+!ZZIGWI>B7II5|ARIQgMt~rek1M!_fj7S$Cp$J_0B!9}J1G zFe?t5?=}*{art!CHXrUf7TwVAB@i*D#igsU7?!gcIP)>k^ovs_ET^P7IS2E3)9Q^N z&3&{Km&mt(BjKI{Rki8yWbhGb zNMOt8%9>0bkISYt_eUNSH(i*-Oe|AbriX0?CzuKMKJC4C&D}@WU>* zo&Wtu@}VMUBj_m-QXto_h5|BVuOXaW93X6dG&&5QNEW)RVjSA(vxY?}sGwG7bp?>! zK)%>(G7%&#dD9i{yS@+ceE}$=YgwL5-H6t#9lnkY^pcZL;nW4_LXdKkImR}zkz*o_ z1zc}pwj)o1Tu_qxYF>&T+oX|6N<_qB z9NtaP-IM83RSLwf{rMY*Kk>UF&M>3Z)I7pg{TZJ*YiGIG7(rig)(nS6Jhn29&xp1ieC9r;nr3C_)alq8tKz60tm zDY{W+wLm|vi@f^lW70`rTO^z0jemLvcjy&i8vHuHIRBh?W5DGQ85s94VcURBA9UNX zDRarFx@YKOz+`Ih?fIpfvEgz%8znAyfo&$%Lqia9ZXUw)SB-fiK+mAjAa{CweSIpn z30s5f1LkKghxY+ST$@+?-P5q3>X$6sOB}G^MKLM_6J#IL)Ja%qAv(mM7$NNq#Jq{T z8`*Sr^{?4FmU(<}Ya(>4?UQrF`7^_x7a3X^b>?Csl7wPiJz~!Kwdn#L5gQ z)ugvS&NRHGlz_1*Zj?+uP%x?_Yg6=O2^Pv!P9^st8JU9+W%N5{e@y2*7jyB_Ikq4YSQs9>+WX3CZVnRyb`E&t5C z`(p^Y^@;c*qtV54*sZE|zDW*$+xUE|D}J_$%|G#%)xWmsTwXhQ1)9?WRfd~3WoF=> zGJ%vb!fd4?GEc;gaxypq;HUqi+!$GZh_q(mu)`tcZ27>fD!sbX@oR${>M-sT>e%Ww zdDQ;N-lzGV&_e?HgipX{#3aWUjZ_{1h4bS-djkb$vyc_T|B6??{rTMwx~P#r&CS)| zHe>&=19Nv~Jr+}OoC>Y(N{x2viZP7Xa=Qf*f+cy>kX@B0!RCx)g zR{&bP2?cq$wAFv0{({fU@&MG!C+E)g5S)F02!9KSlIK zuWN1|c#7R$8YMzxk~7%TDtU9CNv9)4jJrTTO1hs-1b1%OM*`h_N_rQD$%ed15T|d> z7$mpszLBlC`#`!3_5v8Ju>$LBGLtEW{o(Y~wtU z#geV_jp12hcA9l(NDe?Izvd>}v0~~(xrry!@t0J$uj{d@O(j`Jh64U@gPG*b#}m4Z zR$=WY^HRC@<^Ru;ty?mjRe$M~^yd7u_#Me(??JB=?rVM z-_7QnD`um080}{I<8r=2Mp%O5?=!JjLpg#C6NvQl)*AaaiH{psMWv1D`T)gKc&D{@ zxQe6S&Gfo)0K}6;W6^6tfDv7IB?;lXV=ucJ6gx(Tb?>m+p;j?Rm9Lkc4z4uo&m~WO z4KB>^+3{}HLC|WjS;==zj}}nA#FSYT{K0>y)*F@)=l^>bP#WPhC$fy{5YjLo-az+l zzl(EP)6V_I!E_n$n9oH%XM>c|T(m`sHkC~+i*YUwCjR2!wLC8M6?y(Pr5hM5TeVsQ z06h8`Vz=ri9p;Ae{5aH@X9FE0-E`kkgV9AE4MsjUpfV5R(tUQ|{e=D|svuI0`q%vV z>ZS4AV7K9uqtB5pFbdKSX=$)RI`i6{5w43q2hCS|(4s z+=BlbZ8w;Hy*lPbD2T;Ovuo#?Iuv ziA+_HRxgO*ya(B!?4HpNwtHNp{8elmk*dQS>CmpI&+7}B*kQ$@Q%S-s2>=l2!qB!i zC7&KZl(qh#TfvjL=q~401pUtv}PV6;uSNK`Pp!8kml|BifzlbH_$hrVTOD9Q3sSJ!mcy2l>2 z$y**nu=f5I%Xnn-ll-&!ACL&+PcK&rh7#*!pmD>!VhhEqtrzZRvCkna#Gn}oLA;g$ zUTdx$7t4q}0|7WrzgMsJA}I!h`NdxL%Ju8_fJ6YtO^n@1r+(d{o9Z~Dg8jqWL;s4$ zHf2dYVIi+p;Tzl~@4!$U9mB)vZ}7Rb+|LC;;N%Q@xe)5szToIeB~6!(^)%eqh?2+wmS_x!yl}I|R=$z+9KFTUX-v=6)w2ViR~; zSpW{?be^S)cF4u1Hrz`nwn&%x)}_dvOhu!Jl}!5}rTLs?nS6^{&*!I~i6@mmXUbiq zDjiEHgO#@Zc+XqJ^`%(v4QP|m-`CVNI(`?xsaoR7RjW!NI;U~F)MjM+cJQ|qc?XCi z0yXr9K2!GEo6%f+3^85TneA$V*IB{{BfR^nRo3j_!$glW(C6IvO0GO3howJI;S_>w zL}?uv8C#9bS_}_^on)2(YhLp?{DBcDf63<ebB3JccTj#+_citK zY%7gheecUbFoxhsW(S@i-~DC@!5hoDD(FyCq_i-S>mB!ByGz_*lGYew!W zMgth;yw%NMtf*LFSRqYdSm~0Ex(Rdc9Cj4a_j1o~34Wd7Gk$%?PZ0iCg=DAXh$n_g8{*&OzmDB&BUJ6 zd26eKH!Rk+_;HyVbT+X?*?V^X5Wp-lLoobO*fj7W_OE6y!eSv?ZQF`9p2-XGVno4S zOii)u$->x(IGDdbej1hEMyLFIiL6fT1eO~4r_sr52z&im>g^**3g{&}T2L>O!e9m$ za9@E%uoQZ+mLKSx$h+r6_L#fc(Vd<&`_O=Dk= zYA)Zp)mA(pC2U5$4*wcLRK42YA4$@Z=e>HP4YZzXn@{(33t=mV{oK;fLVJ0Wetcj1 z4pcjXW3f2c;J$s7+LSqKpLM%{NFkhUT;e8~B}1Q-d!P)6oDgc6jy>wj@Y611xuG~$ zk?vo8{nwdO=d9g|g$Srwn8&vbBR+@(BE;)Go>%A|<_5VX?WJ#(eJ3Vilbv0GRJHsu zr3Y&R!nsNI7)nmE`iz8-ILDiTZ>)F`g%_71%f(d*IB)p@fWFF+4+$xz0#*D#qfl-i z#Vn?_tLE1hRx}ZO%yl03VNC-P@E4^m=S}xt;SKjX!A)Fr(RP-62>S#w3;{kd&!g*d zLVEKG;KM2X{ScLraa}(G!4g#n@|`C8QyiMOiV6dc#@{?;^UOsB`!5Dq%zDA=z%x{M8KEw(R*G~1$nV{4{$nzoYxoEgucQ*6B zsnROZru#Ac9e!iY)Mh<9c{avtY$Nx0TB{gb2viZq9+qgqkX6JXfpZr}=EhzEz;Wfu zOxpN}Gr+a>nt8zd2#cb0EkbpG!`G%P8&Z7b=Dk`qI{XOLanhzKrjac_Ot6+tln(g1ib zTkh`BV;dPA^JCFTV^19Lwk!p$c9G^{te14Q9SA~Ren1eC_wL+Ol6r18J+IyzK4+0V zN3^q=YHr?V8HkE+)=E_7QT;DT>j2c16GaD*Tajn;w%j$>-RR5ZjxUfl3r-+>=JRET z8oX&m*k5DACX;~`{=5gVcJvM%9UZcX#_nbg&DOCPs@YtUwNs-h`ksWRFk+%&!eCOL z99FJP(O&Q3M@h1Cf$S|2_>4SYzkJQ@%}W2ieA(E{lF7z;eKkZ(+wl&)=lh^>Lu6L8 zdzp4aaQkxtf?e4sdU?U+KS1oMCVyPkXbBa_^d~n|Qc^DE=uW?;nvPpX1TVkQ+lG)_ zzrv5p(VVO28(}7-Fik*+*MO4V|B6PDuF&?MS9Fc6(q+8a9DQE$Oab2}TRI*{2;D1z zBfXaEA3+<0uH`j>)y*lamDDRyZ?a%Z#*kdpH|RPnt)$fa@GJqfi5f|1L?L1(PQ%-x zzjR!J&I&RQN|sb2Ma37EvK6D;Ce%9J*W3OIHys7`_V)fq9kK+0F6pJx?myac$E85S zqhFG*Crg`I+adlU*;_@y8M%6x4XFCw>(K3<`#W|nfb(MAN}kD+(FhR7U^DW-QIC44 zRzX&a?Gdl&c3j3pl_UwNY?P2vjxv?Fg%)G)c`B8Z=7QvrhiYQf$^W8ga#&cH5^YT* zw^k{1iqp3AkRd95CC$-oGI+@llDZXH(B4BIG5~qWc~5>a_7$OX)6# z@J(cXJYkbPET z+#|5%*3XIf(u|UsVTzPWw{OEdfsCJjQl0ZR)uZ8xxdQ?u7^u zjEHr(rGmbCt|CsE4-I1?-Ln2!=%_pbYBpAS<5umn0S}+B1i{L%xP;f#%b_1HTF+KJ z!LsmtM(5f2>^2%<0w0`On^O0kbU0yxX%ifh0!;+^F}t9w)CQ4GtPzsePb0w05ieyNr5RxhL(5YnRltRYRpiIe> z*~wfXLx@nwkSVi_@Achxo#(vo=l%Tt`t`?ip3`yL``&wf*SglVuC>-BW;e3S8{*As z%iAO<{#3}ym&mj@o{o;vTaOXU%$zhVXJt3>x`bBo|Yd2TPpJ>!usTKnO5xjWOJuX zN=C@x1mEq2!#qGXKaW5ZO_EI?bgm(g-H@(y%wWfli?R)zpQnhL<(sV-dCi)}wsB*} z^>SZUF^#Mi2*|Yjcy{j=SKdx;)-2H^2`w0Rjyx1}Gl$Jl)SK%a2ql-U`47f>=<5$? z=GT2N{|x2!}Dc0l$iBNIa6sH*zOyz|6E0r|TK>!f&raY`Z0)Zz`zvz5;dohJ92 z(-+Z*@dns;QGHnAb_b4QDi3vri4eITT+Q}tB3C* zGd-iN9S8B|4=5Nc`!II%2T9SOWZPLh=d_y_gTk;ZE9n~rxi8$IGHxYwp#(g-#Q|%M zc)2%_^dti_Mf!kcF#l$bo-}fAHz<`enQvx4joRXtG${;5CAtYWUBDzmEd3G1_<4-x ze~t(E0^`o?vB-XBsdYIKDsJ9uDLAs(sUE~4O={WfVjBT7&4(>7riG8uwR zByXp#UHfU?i4w9L>N2&V2Q7&z^i8ebZQKg#XOpE$&X1oe1X8pR?dQ6G8M^8z4kPI_ zX3F=y`Wp&-DYo{^TP)$vE!Em4RQ$ zA6LGT-O)9j!ADV(l6%gxLx5^J!sq@r$l2OR!MQ9-p7#cTMf&USfmaAErrWYJ%xqiVIi%&f9!csqW}`ZjOZEB|RTpU$LqHmQJP%k_k!ReNI#;96w%l zYuP#hY)#OHhIaY#$2a)!YrpcHZ?Vd=lGwdR9evZ))Dz8+#(0m@dO1w@t{Cs4IkMeQ z+2&855EwrG*g&#q4E{!2TatV~hLT_XfLK2b8R07P#tg$MFbi z`!RT>rLU!hmH#*jyhgKH)(}bKB)b76rhn$&ZQr=iT4W266=5s%lZlBaK8*k*G;j`N z>VBAI?=;z(jRDaRaGTdTQcha*Nu`nD_l?kp6S8qvHd;XNJ|i(5K}d(e!+*z8+j)j8 zbQ~v5s&xWM=54ZMaN*T|Dj;hn3(hjIzyb?EOzgG6YeA&-vUsb*3D6oAly|_6VSnC? zt{vDgQC`kRzNqUG$5b($^rwQLb-nw_x&+V&B=TO+j0^wLqoS<7s5ZEI1I7bjg-1EpheTk z4`XbwuIdCR8uLX;!f2KV4F$B@gbPS_mhi+>{umg7C}?x#k!33MvB@8A6J=flh?Cq4 zo0u;F3aL}QPZa80$0B3`Cl((`W@a|UGu}gLNv6*BBw}JCV5Xe$BK+o$>1xiwQIJ(K zc^^bpL={wc30R>&gF7>xOT; ztunSUU{6v0xUs$8vvI1Z-6S-v9KGP^C+ame#mf^kAsI)iC*t|^nbF(6{+vXXKpkks zC(oZdj5sT{$RP23E;m3(p~&H^tCiXU0`-qJk^NGnV#M2F60m#t!?+$vAVOY?5-XtB zd?|in-^G$Ob!}vC)r7O+K;=j?ehV#&%!!u#Vu#8fRutX;-5^ZUj(sh?e-9^jA>5sG zV=^=ID)eBJpASRw`mtcw^U%j+c_EsGT5__FJgNkd*+t|IiwuP27ilJh?bJ+*!c8sXcZ#hR@P zrdO|{BEkw7X)v_0UC_Z>(>qcIF53~qWBk%tO!Y1d! zXCh`JV19Eo)!#tNx`iZHodnEG>iu4LL@j6+Ue^6%K23}aAdQoR!sRG%FlH~+q9cT? zb|ef88Fi2T6C|`;h%QxCr^rZn(s-~k-+$1>aswKJ0`A^@j0cVMsSBMBKVta^Kj69~ z01e&QW~+ny!w&3JZED*=l?U<^0@(JUqNa-i_%xYXAtYXl=4|}g_7h}?^f}1bw)m#{ z2#H*uP2}&wEGW`wk!I<8TP7r2M@uUf3zSsdbm{%rj(MaV&h%!r6`JG8Ok3J~X2J)q zfpghXU6f{uc>Z-BB81wNU4{*{Yj%_C44~WXd>XS{3p?*&1BQO8*^PF-;5C_^LNhhM zS(n_?j9aRIOXui>x1%br|5E|tKbq_198u-R1FHi=`pdRfD{TMg5JlO3J-QoK`7;z~ zpnCMpHG)R&JR`L^u%Vu=ckkc-MAwD1vnTbtyQz~VX!IN^6s;xHhX2|+jgPv!`@G0 zp{J^|;aE+)=Z-_mm!+kwr{z>&w#823>eR`@q%GuZ{zZYMg|V1|rruw+ zsj;|-*g{qS3?uap@sKMnrPNYA%=3^8;6J6VAQr2Wc(qBCOj9Ki$Nz7I%7;}<4FivB zuZbd6=^M}&l`(1b9Mf{AW+ubXXhu3J%@BWuB1(m#iUyV}n zQ!rAXIMc3mC0;Nbma6jGehRELo*)@73CVlUJ3h*8JeuU*rCf4J>~8)Zg(~)MyqmS2 z94UVQZn{p8eA_(OOkM#p1ysSlZ=@+=CkPpHjESMA(Xexu)TwMqor-j_BJNUo3^tk3_w{>-(%g7wJ;}QfNHM9N_ns1hP|3>q_%C$wrcYVTcq_9H8REE>)_kMy_ ziDB<1BR5IEhF31-5sGVSgs*%`g%r1X|60LlhghnhYWrgHN~xZs0K7sUSri36te8Fr zkMLn-;#h-v*Vi}P4+G=D;3SYa@yl0B4jy|K8M%!#hLMTvs4Mj?58IlFk}!_t_&??O zyI;H%ZVEZ@fDoTF-ak;52{m>Rz~ya~)EF(ORc>&uW|NEsN0TmF32&Q^N$#gY2B@Ve z0D}9yqu7F{CVLXd3O1!c;%`wnE~3PJ(1B4kzpsV(3k9Md<3;8_pOHQN~iz=g*} z8?;GB1sZmbWDZzkiyM#7Sh30jdgUmxrWuqvE-MjY`P_${5`t8CyUynpR z`KdlEK{LGZ|F#KCtubsZ`J0}jl6_E+eKt5HKuYezhL_|(aA=q4d!Y~;4DvdtKUGh> zfGY!Lo^7tyw%|XqQM&P*FPX2s#(&GSI9xX!w_z7Vd@&|0qXdKo*dBBAS>G8T)xXFY z(wcjX`MM!^KD9SRiqHB z5;?zl&KUBba_DFrIQ#0~^btce8OJur(70gf2|UKH1Ooo<8?VHuZ~43QQQx5_4KfGF zk~i#o%kY(`OeEo7dMZ1o6iY`g8oq*Tot_>!y3$7;8D=&VX?zlT=;F@D8~U5t#|(mx z1z35oQy#DsC2OoVJ(@X?V)6a>_s&i>8#DY$+L)N~nWq(F?IHa$R%agmnZJ;?MBVqv z0MV08A3hfc?nmAe3CouSe-uo_SQSUme1#ez8g|}ynWi;8`|#m|Pz%?A1E)!w`Ib3h zSzT;9`%#w=@f!u(qZFZ;Bef6pV``SxR~`WAyqmubYW_wFywh8WP|pD$fxDLT-BO7; zw<7~CbD5v&T%htLn+wVQ@H!{5Y1Lx`F#tn(B)L4P?LqxvHSB6p4$$f%#<=nsn)vT7 z6HA7sQraP)_JKx!;cY~->5UY-ltt2nV6t8l6Ep*?tORC2ds&f1WoYRj%GVU9sq2`y z`=&erThvgUiz2<&&?r72Szr5>*cLPpkkf};0L4<9)~WyrWLaMA-xSKI*cI4b8|qI_6> zga-k__G%ql&+aSCZeTOWk8=wM)bvw%Sl*mnpBE~rB_A(n3(@Cp&>UrM7n1ogWc)@d zCV+uUTzbLL9V7%*h*(EFDp?*-7A~O~92^|)dqno$-^c7P?FOVKJ6BQRLo)h|biiQ5@Q7ve1?)1nNzj?BG_Vp#y^qh_W*v%O{@UJ zI#RGs$q+gS(s^1Nr}-S&BR3WZ!hzg_Cf1>?n*(S+rmYG=-L<<9oxVyDvU zjTK-~t59BePB?f(vq~_37f#>qn8nV9@i(ss$oaStqQ$r`78u}Ys1YhV+Nvmzzg75C z5^_RGh=_vC1gJqfq?)eg?&I?b)9MAVHX)w(sp4i97HiVZj}2OZjrPBn(PBYP57LK^ z*nz3lwhfCEA7kW0H<=AhAk1SEvPvDA`sW#x@bIgY}Edw2Mu; z0?#PG#PT!+84SJrMK6ex)y28k2oc{#Vieh+#H3cU4{s|_Q(XXimz2Z@Z;{SLxSjOc zTrzaOl_~d{587tpK9Mb#W;wrP(eIa9t9AD5b1Y>$iOqghm9MU%qcTnq*UppL)0B)( z4p2dXVO76<-AV!)f-c>uMC&TK!3%+rWR?Rb>AQkPTdEtaa5X4K-wzLO{=|`@iDm)P zCzY0RpXclqY|gr>t0KQy$RtQD;d~tWfb&z-&{ha#eB&wO(`XQmB+CKhPsz%DUmpl<+yO&dN&NnzBsz2t96 ziN_W&94zX!VXcUe(m`8kk~kSx4zo00aW7}2N&$3EZ;fckB!ccJ62J`K2#hv3Dks-C zHjRt_WJ@qBPyLd4MT-puSNyxmcU;nz%;%(|rmuS)e`TxVCv`9w&2R_$*+xaseYAq7 zJLt!cD`dCARbyxXI+rC(&Gk0fg@#$%3C|jj$zSHY=ftt>+)_>TwQH7ot>E^u{%51- zDJ^b|z}l3!$>h|(`l^21%?)c9j~-g{R&V3d?JS?yaRzhT`&=== zAh7>i&XKzZEh7$eX0;@oJ>M~VzVpj)@T-zg%dj4eR~HUxVVlZS{M6)RE0%1O*ks8# zIXMj$yG$2X*3~gFGMd@F*KEbGgLm!53uww3_LGZSYwrki)^03kUdOd{pHQPTjmECX z%T$>tm|iO&*tkc!^q981*<0>_)X-%xfI^vk?yNij#_<_vuttkc>=(edHL$vVy+8B( z>x=SREI;g9GWrG6BP>3SB0@c=GclU&j+osAZfi3mBl;ozut?LTyuD{WP1(L*D@QQA zvHG5R=5+GsP0#1im~V{rdv+>owPj?) zk-9HBX*tpVrp@5TSh{l?UQ(bINAHK&yd(TtlkFliYv z^(E3M0WwSOtG4`htWHNvRkOaecYDC}&qub=5|#*^lV{kH5kDK>wdvSZ8Mf2Ub=SXp za39G^a5b*Z4_@=l*S}Wm2z+0Nlh}%G7V}5!tPijfWK{;fdg&plv`3G&pA`9a>yW|w zK)wov_?-(DEHDSbaMZ@eMn)zS%Tfk?ZL;+1bI^+a)U?dk*Y-l0rALZzs5txPo|o%j z{8`ct??flv-50ZsEMBeMU{$$vo$RA_+!syxjDYuB=h<&;v)eHRntexWKHKcIMP8P zS(z~6#8gIH>fA88Q~Z#PY!vzQkFk-F$AbqC4jCj}W^G_;o06KvdeW^H@jJ1N!Yg+& zCbz+61{H@P{}9BjuW1?fQ*E_!LY%cH#UCHsSpJi9CoS(#_pxC92AJCx=~5Bp{ODy- z%0;o5n^zL*rgH3O_;?mq&T!a(4C-*=0L|tY4^rINJeK+fqa5_GNj4GNnGegINP!~c zP#sp;`MSBe9myzeFTGiJJS8=CwV>K#8?3~dn%$!$+Wll=SZZ!q_m?Oh!yU0eGav1+ zY>$-pN(Ug4{Ti8KrXXn+de?Myiv)CBlx(ESu72-?=EsK&4 zPZ`_E@Qh!3{X6O`60@8t&Hj4&Dym2-gCT5ZEZEzt&8CFCYwPORaA`BRcj2HGd zWwP(kLvP<83AOo?qcj?~Q;RdVU524d!T0ByP)1)nc7l1)P;4C6Q{9?dU@}}!Y)YIz zW%uj7&iVB|;df#Z6U{%4HfK99{MtGtWiaQkx)4i&nMteQxV8&^ioDvaCN`SuQ1z!q zww7}l`x38LeMmH)9_jF2H;?9hjkWP!1q+u!$O7(7FIGiydLOo9`DdVXKF#~gW?5Y+ zR1C}>v9FZhC+v+i3I`;A-eBm>bbhbdyp~DZO67dN#F+tymZ{b%1wM%?!*xH95JcWl?$G_Q6*K`M_5kJ(|xQ5Y*A} zPxU=fF)@AA5AFyQT277qvu+`_iiP+Y4&GpJ+=kgO=u!ID8@_iM*2VIneRi*xA(djU zq`&@`c>Q4ld#Ts2)gU^#l&AYfe(i%Q_jp_^jCkX7umFzB(A)0Ag6?{p$DAZ2%LR!j zB77WIN26h6Pn56dm6G&uz>bNrwA}20$s=r&%5c|3=(1Wpk%jJEhK&BMF6NO?SY?pl z`xP;*zLO)>cfIUh-cWU@E(3j2BWEMT9V>y@RGL<$+{^yQk#DHU`*kIUz zqd|+crRA{KLkth*W;3cj%D$snk5z(}_eddxU!##(r7p;HW8}pk!aFN(*^Q$o`!FXb zr#{tGGgd2oKTt*~`TrwhV;e1@lOHSr{3UCUsR4 zhLUPnTQ73`q43suwAJStZmCosy|LY}NB%0aX}oc{$TH;p+Q{Q1;pnz63v!ijkv$keG9DS>02#_r9i5h( z9uTU90lUtxTuh6cm>yWC`8Y0yFY$VMH!$*@=ST9n{dLl{cvHw};9jDJzNhu;Rz+Q- zVOW6o*{s$L=I?erFJQ{~d0Rch%4lSC^eAs2%Sa5|42h>Y6K|PX5#fBuPbOM?fA`n- z97HI+nrM}&csARwH*B#~kKso;C=ytLaCWz%U8xoRDz~em?}D=vcK2A!6q7*mF-pEf%Gcy}mwbP|u3HE)E9a@3?h>xcn zvC!KGaIUz*Wp=pad-zbAxPiD*nC1H!JX_U&N3K z$>HEY$7al%XoWte#Rk5V70avbnuq7n@|5>B)@=5Z$P`N)TjJ&Cu9BkqdGUN2_l7=A zobBhA$=RmNrKrY;0Q8c(Bud;*aO7wn4j-2x!B)Iw{bZxZ11w!L2N)Ft)buw)L&N$yk%#ZUw?c5_A`a6Fc40$9x(|c%&zm>P(J6j+0+C)MdY3@! zuYq5vaCm{ua%uUDn(z7K)j%AchcwTcO^-)~tTTRIv58Gi(deBBBTaf4Tvtib0!5qx z({lc0%2s~@Z+(T%bfJ!nnVFf4c<%XG4E6B<)F*K+mXV+ooKCz;)00ED_1^ z^a@}Oo>mOBXs#1zsIFc|U|#rW8r&S|5vR3^k;)8(? zpC!9hs(gxi{Ol!X;^Kfc>tL0ho^C3(H_*>qggkb`hTLBQjpX+ekcynKEpouTfKjf1 z{5OnvYPPvvr)^VM9=3}wd36-ZKx6?_+w1qdELIqiF$Q!g*7`v6s)yWGyPXz%6NgOU zqzBP2Elief#kS2yThhDl7K3F=gm>0*3e^@aDh_d6M7vf$)_W{L@Cx&y)k>N+7WvWE zhzqpO1VsK!ikR6mIW;vdsO(Il8RSJra+Cnk9r16?HW9P4vlE{yoFCN1E#ES<)x>hH`+*G(7h;z9ZpYd^CWROWiGPV|iRnYtAuSLYgY#GZwKlVDX5OZ-@ zF}15E(t+t6wzaK=*jPSRJ5z{w8&LGVDDxGdGeRFR-W<(KM@>!pwzmiie=yz|pELR6 z4Q93683l~xw{RQ|>{(aA!?UB=Vlvjd8dxjH*R-_rz93^%u|dcp?oBux9-Ro!!LP7` zA~M>L`8HG6j~@-=Q($?omyC;nl^qxK&iUDVTfm?^H0XfA$w&G~QMWfXH*c`nqY!Ry z-M{aieo?*3CN8*!eMakKS)K>c7H>%fS}98@+r%}`(|0Zh&LLFW>F0cS?3VGV{NU8| zT&Cu>+oT4&x~VMJUTAXh-RGyY%!_)ddyK?~6;Hn|n-{Pi!7XdmcaY^GHrvDbjIceUUnU6^xDd*bcir@P^3^3n8b6p!Cs%v#6^`I-Z((+%S zQkV|l_Z6X7eY_9*sY_rrSV~;*V6W!tsq^H?5-)^_42%#}xN|5xXy3OB&nz%PJY7Pl zuQ>z>(#ScLb4Ir}(enJQO_YF9LxEABB-^BMg&Q+3qRwnMxld?4Y&*qTHZd|H`53J9 za~^p$Fp7T&EMB~L$BtH1INvEq0+*d_al8g!Z>oAp%l;iBOEp7t%he4_g$ zt4B&*IKLpLK<%Z_rL;(y|KaK<$=B03!-eaF3_=%j3w5BvauFe=_j!CgFG=T!YiYMg zpXfD^Vj(Vj`sW>~FT(o-O7rrhr@tvBEy^*a(cWEH}Lf~FkX z2F6wQ_WR5a@J+TJVN|O+^0|b{hfW|V_$!o63!Lj$wW~&6cj^X?$Ii^QvOi8N_e-YH z?5e}7_(jnet*V%M&h>6(L(@YIiI*N1vLM&lqyn>VsU$d6TE*_-OuVgyv4dV8gO1RFA1`C}pIk^&UMz}V_NxvLz_wY-nDPhP z4GDIMjCO3h(cb-d!v@B{2q7MV^)Ky+(@mDo=e{;Uj$+Ai;0e4d^0S5}W<8#4)AkB_ zefL*z7Je9vIzavM46z;dqIZGKlgj1?1k|`y!kUzMEhsd(fikT1K4wxQCctmGfB&rI zNIGy5y`4FX>KZCX}B7daN`Mi9yXhkcI^45-FhUc$j|reo}f_T)%I8B z2xbG?@Gp#$fcM@k`^cLa-3C4tTV<5W@Owz z#V}X_KD{W-LP1kJIi4f&`e5k+z22?{k^lz$oqT@;VD`wX=Qc_!+ZV4jrc&3>C7%h0 z0)r(tdacEF8`N0K0zY=ZU`o04#i)WtfDM`EY&(XRU9T5a-F@xP$X(+t&5L zgZrF5F+1PwNt`AQ25nYs0WESH^%VTm2P9JuHe^h$H8#`PFSa|&h(`1G@eQ~?qDag@ zpF?5|uwjTS-f1e!xU{h0V^Ul}p&u*P%l{k1=$*_bV^I*!& z%q*CxtgQZ99ic(y7D@USJtos~T|bbg8)df5F1eubK@bQD{}(rIxJxwNBS+=P$I3>= z^nk>_;H-m7H(@08Z`=3xh;N>K^X;Ei9x3cx-oAlsg1g#e;B(@K)7@|6v_Axwu_oD? zDmtNR$R;D-B*tDfa9xRa3b zTyQXJ$L`08&-S$mNbCLyEwDZQ-mO}VYkAUkDg~vF)CBK)mcvQz_Q^?R)1dV#=k8M; z1*htzspq@pW=fQ`MwH-|nXk|N@=EdOgj+R}8ZIH$_cLp3Z)qp^3!uBu)c$t2%8rZ< zoQtC|Z%@I+(hqOmEBn-^2b`04*fn*>_=az>tkM@2q=>c^Qjf$2{GN z2!8jH{&#%wNrQJ*l`r3U+BV*$EdRnQU(;?u@K)Qgo0xxj)(wG=u2JLxbXAim_)9CFn_tGX z36x4;M_U2j)+6d|Wu-fOPpwaOFryOPquSQ0)F%Rjbd$}GlRTojq57fic~zASs{~g8 ztuLp;Sh_37`qjW!%Mo6urdq@nCMnj)k0U~S2PXwld_6puA6NwISq@NvCt{aqa@trt zIh7-EZ1Uc-;wR5Ch~@cn2YMMQ88HjubB|NQ1KcV_d%A8geUx5JQ(i+EUx` z&`N?LXs4`A6cPYv+@cXY2k|@*Grv&)=Rye_^JEvxv2f8yEBRerch_;DUhn!{!Lq%Gr&X8y-DFVga4Uop6*noXI$c=r}PM|XJu+l-m0y< z5l?prPSFBx`QK?U@mxsX@OD-=o*mE(u|0oUm2p6X?zygA!xs{I2neD5 zf@bKiMP!eHaIdFaEueSyY(e+FODCMjMMSt?tdpgA_8NpQexp9TaYP z&~pk9P)5tTJapwf)Bp%K?f=fVG8#t$N!UmkOMX`SuxC1S>7`Ovos*}D2H<7Ztd?vmi(1IBSmqlidgUW0s&|d z-Ii|N1&1fquX#^BCNADPjW;-q9E#QFic{My;grRX5vNSxN2D$Fmg$)Fn(|iLj&xf+ z{h{Qb799b0uub&qJpj?5K^#O)?Y-A`n-OhX5dUfGZ_%IUyWE*Q6x3D4c_Mk&oxP@S z4e#N7eS9k9U3&$-^*1i0Jl9u_xcV;}r8HC66R(3`X^Y;aNFAwH$!7B493Fym*a@Sr zqjT~U0Q-4&cE+IMNp17YQ2HiLRQO(vTFdn|-PeK#D!ED67%Bzx3@4S;-_KwHiL$eu z9_{jHxGJ`=JTKc6K|KTo!dl@WWbx~+w`HVU2_1c|?#hTr@R_~Q&NSXK>}jW>y8|Ve zl8?@=Zk3#{)Q^Y(0mlxOjx;;XiM@{rh`wQG`%gogRQ3YZqNGzs@{YRYF zVz+0RxndcUnZI*{^mlOn|3b1Kxz6d5V`F1TW=4n7RaA{OwLc$}3r$Ti959604U(E9-c@kBI+{qeE)duv1NNs?AaI=o-AUzw+N%2T=Yj{ae zCV5F0N*dBQB7_y+3n6e;sa4gf)yg_qI~5tZJ~n_l?RRwldbD3XM^Gr)inEqi%1KSY z?`0`DVMo9dCKIgErQx8luA;aGC9X?*4GQqNeN<+fw~gTDp=v>olppUrC)$!asq>L# zsH7<`MdGJC(8Lv#Z)nnk^y9c~TxwWr+Wz#=#USBuarS3|e$-h$Qrp6mXkcIgZ?ui! zy3N2zaW+k1q3SJpCCa*7{|4R*{w`D92VSJuikbBaNB-#>cNOcb#ku-jUy&SjtV%5 zfYYE8C3SMfrK^v2UJ61$%etaq#2ok1hgm|BK#AjF{2DR3>yIhxlGs5{*SGE1QQO<) zJ}@Vm{`ZB-*u=rt>~tWJ1z6Z1pqjtfp9!pkeoygbmWABB|BZ$q-&&j}Py8^R7;yfT z75(uTp-FKDPgdZ4y@r((*Z7u-EaTr{8@B9^b*u@wKH$^%;Og;MR>AarN6`t;u@YG7BxM_uizgpv zr%5CVrCv2j)rIdnMj^(?4}FFMzGhO%+Y^N>r=x9WJZb}QVr)&3ed)u*kJL5a`?6;< za%2Cu{|my(9XVrODV0sa{^|}DJRL`^@3XPaqsfXBP9-_h!RAU_x*94*NulKUA1%yu z#`P}6rX&f^_S_itNGVmcHZR>JN4KS(CYH(+vGixean$zL)*u^^-tj-gD7|T_XhF|o z%E5E-MX;bAL+pOr03kA907H-Cp6?yZdiI)ARu#6kO8Lyn|3T+>HR1g^6TnHFwM9Ph z9%-QhPD&Xyl)7~y;tTcqd{?__QtLCp~`=1|n-M=461z%I9Xrh|- zIYyTuPdn<9^@QIz0GNM7jUvP7hlQKnW>3rJm{eLX&m92 zWH*_z7Ug>bJTlcxe7Mq5xoXclyiE=gezA|bQs!7(cgnLDpTE#Ts!) z_`my){el;_82rVSa5B#2>zAngC%_|LZV-B2hhJ>>vGyKRGDug}F#hK#yY9a>{?0Vf zLSZPxHbFx7$`*+f%FkTffzX=&#Qo(%0ySO`YUnb#7<3N55vy`5Arohdm7dqOm}S7X zc3&Z>1U<17RnG4UYS@Pu>ZwvrK0^mkkp(lh-^bK*4%%gOEh<*>(0^{XfPofyksk8e zZFGp`Tm2FZQ4uDUvRiEWN z&u<9K&fp2sQRMM@rSOKWxy=F79Zkl*A#013%*shz2);tk31F=xk~=pq+(8}w-}ff- z9aQ~v6UbXBL+bk|Xw#!XX+u-C*q|e@mdQ;TyVpFzThPr_rYZA^oOsSYyQ=pweqmcy z7zB+$3Rbmvl3g^F1IZ-;?dM41LY*k((Eps_;~y0inPyzOA45K6R^jWeHY;6ge zc54D;^}J``TPB3m^mb+Ve%)jv4VkBDOI)W7`;Y;{>7TMax)fyYt(7a=TN~Koj>ozD z{3LfNXfce0B;=F|N?yT~ISzcH*ZIhBr)>VmqbV7*!rpm>SE(TrHQt+Z^%hk z=I_(ITY;Ohs}lRj!kW$ML23(~|KTPA+-Gs3au=Lnnkg~fc#*o4F=8F-0SUrrTp@|C zPaI2#_L>Xr|KTVC+~=J1EXA`W>|Vbo8T#!5Cu~4w@gRlBH?bM-r~I>wOgoh(pt=nh ze_R^KWO}$siK`a13rQ1V6TggFLP4%lSUA6F9shPYQm%0fj>>AfJUBs)Qc^D;J@g-uNb%r5|bXjv>eo;Sd_(YL81wYJA#6XwX{{>9Uk8;L_Q|R>E_vaO!-THBx z!5eAfCRRQX^!CN;HC+>F`}u#YqqlU0wN-KMoQa}dT+Xxo&ExMVXC4`yY0W&QfdFl}1;oF~601l?iqg4L~sX|Dr$cOR2MC6W04NoQ7 zpc{dwR472V{S1>R%|8z6q$1RIHmFw`r!MS|~m))(UCUe`8m zsQjg6fi!WOAN9ULxjC~N5KOtR^7f)jtyqEOgDE;fTcM08m?Xt?RQkP?oPM0%XWm+% zTlU(jyJ}(p3zObpOl&J=;(0bVH`f#k2?!KGKE06*<;ONC)3?;3;Kg1zH&ywvtDEgu zZ1#ZaaFm_Z7~4X;O!wsHCzyPYzLbPC-)QdY>N^%oPL?V2g@s_&X_0GUpWInnS6N9H z;zDPpXu8qI-4GH=KFHh17kx8aE_R1Q;q2M7A3}urFa#}NA~Sa?6T{7&&GRlpV?t{1 zbva`xq*CfQ-NxopS`6(@hH7I&Tk2Dmb;hTQY6=?zw*;GRgCQyPJR2b}3Ne$Ax+u2W z&ZEmDps{=lB?9#f$XB~rj!j4FG5g)KqoczXQrlLD0errgIjdv!k!IGQkC`_*$Hmad z)|=JQ-P7ZRjXYUhS&tv@@RgkG3KBF{I}s|fPgGP?52N>PZf$I7VT<_n!Jrk|8(&O0 zFMViFi!^Z>D}N3yzGtqN=!9p0SijF=qJ&Zb-+FIAt#EPCUbF=|ms(%e_ zN+G5iu19m9zDY}t1ZJ0PBA;{Y(QNS?a30Sb!~(&BdHg7)Wir>V?h-`+AFc zwDn1#R6GGI6k^MQ>(>N^+shE_&3)W-*E%Ypi%t>CrpN?PC+w&Gb<@Xd&`IBleJ|6I zNt##FIc9q+X7^k%HeM3OhS`XNXhXDBuI@s60uzy5Hd|tGN?`;P(nOEfxX z5qm5s4!3x>%e+Ejyg;*g=)s}Rxe=wg^%&Y&;UI(p_5-j82W-THHRimA{d^zpmTH}c zA}amX4A0iZ7Yt9noMhHMAPP!-@HOFRgKUKvkJms9y)HXDdn&#KTI2$jmWiU8V!zFT zyU{o>d8q6Ogcdxc!)0_HW)xLvqX3X>X_Xqwr2z#wCu=93J(t_TAASo zD`*#Xl6wE($A$+54a*KZY?zi|*#hE?G^>Gow70(Tv16$ zmMx>0sNWi-?|U%1v%e+CuF*8@yI|ut4U7Pc>?sR5{cI=7Rgt7j%#)hTK~Y}i;ZhW+ zTu-9wO8k1F8l?M0MI<M$g04BJo79EUl6i88b2s>q|!+N8TcN zf#6F@s;Cg?813b?+cC-&?bhu|cBe)v8!Pm$?W#_{l zpE1uMvInyu<&NY(5?p&CT-@%XwXt!JvOa4n+&5A9Np$r>yheZxw_OFYcQc7M+Y@Wg zoMmMb8HlEGr5(vnPcRE2Cri@S&Rko8Di%)q`A@f3)7sDe|7f{a73$1>*D1o@l#GFl zXU{nCFS8s2ItCb1nFuNO5&Lp9=M0B0fZAPhCZ8+HWt-i?{D^QdsUqQ;%cRD^xZU(^ zH1N0|NyU-0CZec*O_>thAa_*OgK|4AAwjC$p|^!UV@@JzC?&yZuOxPkGKgkE9nyvn zSw2jyPBA5^7ZFtoTMbMlO7L2njF_U zTKLFCeBfI6Ju`SFxvWl!flXFp8FksbvlVl{q!t}th(an!#qt@{p4H9`{S_6J^K5rM zl4fsi6fqBwLRvBq!f9hLe4j~y;j2IO&g<(%y6n*jeaF#nCL(E0;!Y#+A`>^ICT@21 z^)=aCANy=jtSH=cW_?*K3fA2&;q_bm%ua;YSiJS_u+5j}JTi}VjfSK;1fcd;QjGE0 zE2bt*^}T=5*wt&bzL z(+dkdNBqN+AW42R(du=FYYlK3X+fYn51s6>`smmZJv0OCnzY{`n#xs&Q!&JC$}t0= zsiLDDVZJ#snu5|0IUM#dy1F&%$J3;w0}#Ni!@TV!PJVrjOLC*dA?S9Lagc}VSSHkE z_E%-YWG2(Yje9lLlYoPLgO}BF$J$Hp=|e!6KS?@H-nq=`X`3{JP2Y$(%O-a4!G{pa z*kuEJ;~4+03cxq?m&?o`8FCCup!wPh1+P`t0Dcnqfac*_%)(cHuGo*3Y>_7pv6vC` zaa2W)Rj^%)?-FE~gJ>=g#loktu)SJu_|bO||6wzhNi8>Wa5(EY82)^nvFiN|gM(h+ zn~>tMpZvqR(sMSGnfeo!H1->${z1s`fJh?A`v^^U4BP`*DD!n@s1Kq_PdHOPeDTDA zUU*Uuf(|%OhKj`Mu+Spar>j|&3d6&pZ9)xk(=eAXMOQOEx7HuBGu4-A`g!%|ym#;8 zc`5c^b_cBfFNnxQx+Woj73u24oD(i|9eONi=8Hh<7%LgvZ_<=u-SQdVa|1>LDV+%3 zf2lr)7vRor`g4={d-hVZe&J85#dpqUZzIXS_c4-0et0#up@auVVEb?jh7OS&^f+0z zf(v0hpF~$@GiFPpH7aeu9u2VhwQtg|_ce&%_v;ULv}F5B*z|uPXiyJ=)cheqloJ%8 z#!{LY@T{3!qT_Vtgh}jse)0^l^8_+aX=nKEEy)zuMSpZFc;9T3_1T;7s-t3#RtDh#Jg>R)XqtA=cGD#pXm8!Fb1ZPX&I?(A;gjX~r`4M^l1+_ONTuRv`fCVtMudPS3Pu^>pWm!`*6>n}ALuLfefaR9QymoNPL61$P;hd@#kB0c z->k~xnEeI52t^{csVmdN!D25ag9bvb40;G&Z+H{z={t-tH zLQs3X1rsU>3b>E)y56 z##e!J%eZ*`L&O&sZ|(ch za9@Ma(X_}nsvAXV{8>oj+OQ1Uo8aMckv8v|Vhj?HY@TW!F9LLL#q#M7{M%{LcHKQ} z?n=&Pc2{O9Dx^do%GF&Af~DVmCH7R;YNWvZp$chDYv}K9dXWNd^1%Cf-q)zA2xKwJ zoJ0Ztru{CoacBrbCRd+jX9+{*!s^=1Nd^_ZN#&wEz~KzPa_+p|I19DrQ^6r<2&WQs z;{EPxHmo%+K4I$lhZYXFRqIpQ3F6U?)I}gnx$@GHwzl4Hd@)^N&W+tkA3T7B*NZNu zNuO(gD7mgVWp~PKT7nes%iTU_5e)fB+8q{*l36>rIyze9f2_((#5ijR2SK~o&gSy- zVzLbY4`|C85zA&u1fslOLwIL|FzBfv9@Dp7Z!#bpohM64Cy2TojLAyzHy!D3W-6g( zs7z5E6iyK1B`%MsmT!0yQ`tI_!zn}!!YbaiIWl};*F0Yzt&#~CDh%d}8jkbSi!z0gB`K=;!v~ACvBj=dzczpH(<(k>52j zIY=JLt$&+RK}_(cyNs68^#*9CY)fz%sHe!ByTniU@n^3niGhGQGvn@ALj3{ZIa6ed z+ac(5r^{>tpVmr^{D{(f7c{w&&}yU}fR?rP&*9Ayl?OiFQ)iJn4)NJi$LN2ncPnqY zWZEc-C+REc^>yu192`5~_kj?9PmRat;fb`X{En;_>FhE6<%v67mXn+AQBr$eJJ;WO zTjlik;(avQ&`xWPY$WQ=sP|bNp1DP`%5ch=e`7t4S1!JpxukF|y|1paTFPI2ZszEL z*5rfF;vsgEBjpEh9Ya0o@ttccdSZV3E{?PRMLtg&(oo3QN>qtR(%LhTQy zsk&UHvdzI!AtTzIV}1w!6dFtJkuYi4^FtwaZ?M>Q-h+iKV>DX(=YE4~WBtn)0~c_w zK!66qdqLq|y1;4ZE0>a~-<+MJrCwZW#{SuF<4Ui>8ECH4joFgFvcROKbdO0pr}Tmv zg}vORR3prf%foXf3i>GHws9tDgD%pBcd{D!UG<+4AKx8@lu89e*pbu!sW37>o*R!+ zO*9&BE@=2`m(L(7N`WNZcvlpU!pu4Hxwn?u6&&G8(GmUxfc;lOy7Hd{;nX5)DV-3F zx#AY7?N?%Ex)#9#KWA_M2=>b-CpD3tV*WF z&=p;M>E(Cc_5{UA@HDY9hL!d_(kInX=alPdMNrL>oC1fUgrbhW^6x=Ql}^TZaLuHk znTTXj4c)iCz6W*9Tkzon8W|d=jL9=X$>Pr|6p@i|S}+)xCdufuE3-=nF6vF!Eu&4( z!E^P(xv8Cz6=3@t8oYMAht+7DB%0z}#=`Wk(WPETiAqC`VdYIK zQ7iV_uf6^lrR)DwJ=*f5d6s&@O4>(V{uw;oI?APS6smGrV%s5M@Wy*kTW6!F0pcKe zDI;If-O}&GsrDrHF`HNh=PWsvx?z}DdQRS$QbaA@>u?W+lRBWDEsGN#fgYmt6|Ogb zw%4Xk1UiJDjMEu*Yty$l?c_#SB8NDlTl_r-mLs|HP)Adlfv! zJLoFD6)0A(`@wZFbRo0Ke~#g)WSh~VJ7)HKEOzmkMFVlMXz3U}-&4maR$|^viX5%#?=Gfw%T9 zilK7*C%#|%MG7(T6Z5@Aj3NpklBVlr-%Ot}|syNAsiF-`Ppfk9x z2Bphuf4a@WDgI3ryYie<)2s`1nr3@yCPN^)KX3UZfVikUXS{PbMz=%nn{l8#qur^B z=7NBwni!0{{1C-vuOQ7P?=>UbNgMd+XQT`*S^aOkPvhe&R<4xk)dl-iyB1T?6=ZN<+EYtyP@{Ffs787%alQ! zu4x5h<}iUPr_f|@SLHvY(g`0z-wt4>amuVg!b7&_AGQV(CwA=PYtC#T=d0K8wFkd6 z!@YC)h6lkL(d#ty@{_xJw#3Y!f$$!m{u~h79&!T3Qx&MSoqWxjKyKPSUx<$>IUyLxs9sWYPHC8GYf_lGX9vF12 zG9>i|%7_oyrmZ6;-r}OC;E0OGi_u)?zQlcIr}T;Gf2Caqm%=K=h04}{r3FshB|S~Bl5+8acO`|RoM^DfURFKBq8LQdTSfi%W__c4b}eMZ17!-yOzFsr(eBZ&lU>K^wd8pC)pYX4NvLCfk&9 zQv@`|$2e~cvwCs8nE_OpVL=Zmt@P2?mU!JD<34mGi)UDB5`7&>kbo#*z!Lri~))B!$F)bE0t zd9r5GLFXV}xmfLHB_xCO@d3-C@Evtg6FUPSq-=5hce^s~=A3$Vw#00OY3|9m2uZx$ zU!=~6qS5O78+bx1Z$hRL1$?+#=O|U_UrLP7^=@5d6Vt%2j;gNSZlzeID=)qHv~sv# z#!S0|Rb+&`v_4599oCOVhS!PuW{@N-i{d1{>TfEf?rtXU?zjdr^4vGS25|@MiRaHT z4&F}N<5{XWx`_*O3y&llYg5X>AaY%rGU>wsqU_Ugc`ZtWP${#4Ok36&d=T7#z8=P} z=>~U+b1d3I!rGpZRU?J*@!B2`9pw3+q11T4Z```#USq2zfwwNBiTB!?_|h`g;q$HO z&+kpvE!xY?9+-29==kyW)5?;J5*$6ndo6sXRot+`=tw)Qki zP>MyRc>7D?^-hLHAkvxi_I?SrJ+H08s^3$DMik~p|0~tH-X&5Fsa*PV8{LO{cp_qd z<+R%i{0euAgE&kd`o4sqC(5~IB0Bb`5IexcvHyp>?+(lA>b}Gn^)nWN1`7xnP*AY| zQbd|Yih@WNP>O&QsnSF`iHV{JC{?;jl`0@8(lj7Q7my-V>Gef==bd$4V)A{z=Qs1r z{5doCNl}E?d(S;*@3q%nd+%;8VcbBB3q?lZoi=xNY$FxBy6froI79NXC$1nVPigFF zk;H<1B?kLifc?~)A8GsP`ZJ(TvlevKs3Eh`_B53km3 zrl*;YOBc5w@Z&mDk_ZtyKVsDAc!o0oO3qz;*DcksR*L;kUKh!+; zH3a{b>b>!7Xp;DGj5-sYZhBc}$Y5m%2s)?qd>IcTv`4pI1Ws-5C%r0|UDvuk;~tC` zJYNOflFeqKTl(u30+8sjD#$%daXsWHrXyKQ=rr{RF|Hz*cb?54EpMbKq{^Q-1Q+$G zImf|xsvmW2IHtFPj$<^l@UKiId%V;kidiR!GpoFsl_uO zF6B`I)}Hn9ths#3Dy$Bn9Tkr16kqfEH6*wdH`YJnGJo$KA{H6wk7VCe-8EZ%ldz)5H5Er@q0E-jptG<7}iYQI$4s^AUdd;B~O zaM3^x)aL1#?1{q}s9*C2U{Ya@GoAWwD@`)G8o%)9CqtMzwhUXreAewrPIe++!9uo* z0ZG{V!&mdPD*8b z7kBuDZ1=ru$&MpHL7_!<;b1gkk~?qy5#Stf5^2fpPH7U`)!On}g>CX~r--1AL)X-1 zV1!faQBJ|4z}duES%VXQF?$s4BqCaP1iJSDT=sa8X#H_Q7G>1?rR(Sujae<@A%j%W z;rFkGMud0A!5H6vVdXtwDxWGZPRbWF&s{#32GHpB15MsQLnw+bW@e^J)tab>P+}?P zS}C{Y^7cEk;_CX4r`T4D@{k~$C>X9806Erv{R0H4qT`BjK;Pg$Y!RNm}m z-{PWShgk7GQZGq$_*AB(_Du69C@`{I4JRDCKYG@7lM+JjhzJpm;JO}xSUp()bHARV z&Q($oZvW)++8kN{;~XU$X|#>OdgKM~IGdHbCQ(2?+Du2s7t}~}pgi}p?V6R#$Mwy9|c>i$)l@B5834hRv6yhn;Erg^6Y0!QJJ)= zBZ7!vRO-K_`sSbFL)Euga^IV zfBJP)fip@${3yX;K&tPVnMq{^je>Z*mpuEV1b5fMVpFVm963xAjVfK?(VT`m@e1!r z;T)8el5#cf{N?;~+p+3mLhTh`o;P8yR!>wV$-$;koi%A7(Dzwtvgfho+OC@owf?jf zlzLitOut{HEbAPs(U(luv6=U=_rDM4Yms&O{A2HZV&Ycq`uS=4o~~#_nWVUBnwR7z z-oeZ!`A$lML^Mn^l$Uf@SdEA*T8TCQ0V@Ijv^vlSAtc_L3}f?M-A@hpY2p|*?YvMy zTZfQQZus;=9Gpkr(@yBfC%>B=8uh!pv%HCw3jRl5^}e_xa%HZbIjBTT!BWBXyu6y! z(r~X=_fog~;Wc!RD=n7oC+6pJ7zCyXZYz)Tk-tkQ!aKB*lvP38t{W*4`PS%~$w;5p z8MyjZ$}cP2C1rg@SMge7vc(^|h)@4c&=-mkraVhH;4%VU{6Ler(hfXNa(0&eyVk-P zMbVrrG1}I!Zg17yVO$mUNRJP1UjH(yf_T&oWfBYdH}af}z9x-$qK+mtS`}+=4zm}T zEoOwtBGM+;^JsPEGRktytG@rjd)lI;&!jN0wE7W0p_lzkELQIY3T%jjM^6{H(;W)t zZ7l9C%W3+?G73Wmp)w7{?mF`s8lq-ev@`nN;+&=o8w0Nz4u{Lah6RJ+$dtQTgWmNh zEDqrRN1FA(!6B`A2hIJV9(J0SNK@Rk?VS!kLWT>EvTF@g^uEIEPv2g3yE11!+_u9t z2eKjtZwP|dA6S?3cOnImjJj^2yEZm$g~4aKv~@MmWDv8V4;9s?b#TTH^(zd@`cd*( zWUeAJL2H&o^k}~l3%vIj(Rk8JXzZqrPiAd!Y5Q}xLDvGeg4bPd``!ET!wj5A_`TRp z1l1AVqs-fD!iGbm)3ZrA;yGG<+bW_zll?MYLfoa^z`ArI1s@YK$yu!4;Uvr7&~!Bb z=SKQbb&zM{7Fun;9%;PcR5XPO!~I1>Zu-{-@srP;Es1jJ{-RNkGwR{%Ty(C!JL;$y zFR2ulh3(?_&`647$cqVXPIdBU7N&Ft>1%jCo6PqnshN|!$+^_9x# zWbTCsVjFH^!;9YWp2^$iNO=uxdBhfrvh6;;w03%&Yk|5~O~B{psIu8IewV7VBY$}? zZQ-KY#bSxPYkFEU8JfG%M%9DCT(120+GkwSs&jNZc=7~aa0%V7X6o*D!pT#naY`rl zcTIk-shOJ3Moke#c`rY`%I{%D~c$C;H-(E>F5;R2WpIpUy9OY@J%96gG z-t{fs*z;o4LL1?$C=-2(negXsqx&q3)bSaW?&fO-v?ba9ICFnjP6H7~yy0=qUjFp4 zr7|vLH|H8z*=nL{UUe)d4$zBEYUNQ|eM_o+C~L(jFE~m|gHtv3Y-b)`{TTi3qQR`) zUc?^9VpWC*h7*VMCkD!h8HgfO>8i}~#AC3;)R}sLaRmqQ-D{8W{`mPweAPX(j_WQT zFRB}D-->NjR&vJ=1-(-IVU!J<)3%J3As-%QByIRd)Fh(he>8tFrlTX?g|DW^=W6d+ zY;e(1GnCR=Ug+*ZGaDJHKL%mPuWLlQ^2{%J220J2nO}K?OhH5gKQ|3NY~D$L?5U@B znzD*FSh*ZVBM|2|rQXci+o=mOUfq?B+mDkSvp)fLw!W^XrLvwl?^w8+%n}erw|}KC zf*+s}RaYJm1t>V@Qi;y|q5bL~qWEpiT?T!3ltL?zu@TDISkuLOo{>I1p`el04!1UP zMb?;yhCrGfLyLP>OZ*qjueCF?<&CG`G_k0V6Q8k=Gb+`kcBCt*YX_btrpcO_O;$WD z(fiR2eG;_Q*EMX*%|$~1pFOr$<1{_^Xq3llnJMZa78T6z7OsrxmQt!a){0xI%B#76 z^6@0qBGJTHu8)+zwkx9Gz|+@93A)v6eJz+J=rGa-ZalV>0JPONU*1Nkj+_e{J4%S- zNjdQw9Wl4(CK%(32~gjMz08NAET`fMB3OtONHN=16J{Ew500Jme4*o^Nyty_&h0O= z7*9uVapQ$UVUI!QQbx!)$>vBmE$|{_oJcf~DNYR-bUUsU4 z-*SIRmfFDyeqwVL!n025Soy2LFUGnP>GIPJi}YRU$(WHn6Es}=e;H%KHt^ZU^23bCL-1|_*-D=u}ui^Vi=p7;K~^NMQLaC zPC0S6m7bDUGxQ4gw)^f9S^9!oYRj_nYA#^U5u9ZtKC&*fQQ#RZdj3audTQh4>}LYv z^FUtj7qpMfH{ZMG=@2Q#wX(EC6PVnx!=6uG)^xJ)xvg|%F2z(c@TQKg8e2VcJo-N! zU}lsif}hI*tvlu! zkc(wncR(TO#(vl_HW7)$L#~fe>3Yi%b^acegkSa8R);E2X7{Y0#hv?A(vvc0_p|AO zPAG-Q)i=CwFE+wB)|D@?A{HOvY8Z6RgKuUkHGX@|&ilH^5a7>lhdKO?9Uv*1QLsOC zrQ_b*bX?;trzNz1={oLyT|b=PcI4}N+?1c#?0L!7lGVco92eO#t*USF_5=x=SMzT) zhx6uNvz0zRb5zPrKD5>teaxzRS$j8|)3nlfD(V~M)p~j2@nOm-^XDcUr3{N78WWAW zoX9NYJ`wH`=brbiyAokHOl6!MP<)Wo)k-hMyu5b9?4QF#t)A3*-33V#o=TV_k6@JB zy0w&%77ZcaA5clU0ew1)z)S*;Trcg&t=7qNRFZ0%Ay>1mPWNoilgr>s z85w{o@1vS}31Oc)NV%V`ia_N?gps$hzXUV1r_f|_(m`WdkvH9@UZDvJ&gZEe1YMtc zC=xCWjqIdv*f#gc*WCmj6g`5)K5{x1Lejeuo!u`+76tym+?|{;ue1vxL1w37jdUAwc`uh<7EtE6$VgYQrj}FTAZ3y zmbGptDW<>79eMfTB@xR%t>M*xSGY-t@c67KsEej$7mKzf)GL3gcmGgh#;Ue`Ov1q} z&%SIVAt{xqbeVHrgG4~bv-z>W@?7MIHKZZi4dy>8-0p}a7@2X;@OKNnr6(yxLpvF^ zI@@7z(-v|*_a$l%fW+fy${36J=@7e*GtmoAWSKT4(uCGWBJ)lV#CDu~7OfKBLr)M! zOE=Z^Xu)*F7VG|rlv;;>ne}r-Mjco{8=P+K{z~t2@=Q`|=&lqq?ee_2RMOLue4M@H ze2pNzVs?B=*Q6w zzh3(4c8lIwuwhqCi6hCOX`iVSA54GFnh{mi}`6> z7JYXT$=iRUV|gSAG@EP?>2_!B+~aVha|cVi>mBul>i_~*jShU}9O(ShexT_zr1V{26ha{wjcRz00 z4$aKm?6qxDu3ait+Icl>!vV8ds{)DfrJgb_nKSZdXssVeUr3yM50om*4XTKAr7~Xb z29+=4-1H@d^`GoO`q**`CoR;YHvS*O7pP5%Dt5R>Q(_ZF?{D^eB z#k%4a&EwUisIVhXkc7ZGm{#hs6Mfv$Nf!&d1|OOT`g2Rrz##LkIx*jnmY>{j4pqLo zS$lt1r(#%q45BN~2NhCFOHux2jA{(=d1Cb^PC4dU)w_~XO}*yh@lhcV8y@}#ZYj=y z_b*vaawtJH6N7}Ssf@YhDAR;k7{al4TnfH&3K6?Y71*{jGK%w}xXJL^r~-$eSh$wR ziadh>>Zq_N4k@|Z<1Tmt38elj*MpuRDOw#xo_ZVHCOK2%+IT zu*4_V^X&P?F+Zs!oda2&N79KD2fE(k7uV|bN#{V)$6H=r{&eOM?brN~ZVQ9WFRrOb zN}@j_2kEwk8iYe8N9m*s@ZxUX)Rq%{mA#*cTSe2;1r{bg>}6t5f*6%+2bJ~2i3 z1_MMU7els5zdD_l6@I3@roR<01 zjjv`}%(@}XJDcnaNfIXNX3Twz7iYxSp~}PRXnpBIv5oSg&iPV3jUyd7$9X6FYkVEh zjC%Z`uS?8l`4qaJ3K1;~M-JbYAzc`RMtn*m+gTtQ?=}2wz)GM|t(4n0@~3__2>~7Z zsTh;QSt?Q~Z`_=6*(pm&Qw!V@k=i>vJYS6tqJpio0UhV!!$YwPM!r$zPm1laaJe1R zsjtvlo__8XI>F6N1Q+hXz>mu=%fq_9P#9i8o@9Bde!NepP#B#Wo!*qDpmnkM%D8Xo zk(X`TNc}@)l!SY8<{BOwcvqj^u-2~hExFyb#t!ccYA8PK5&4ePlVHz?>%L2Tr(B=B z=WA1cNto`nbMN{&ZluViR=LX;Cj%p{4R|Tf64td+HOtjl9p?QY(SfsnyqCT!|2iE^xb~Z(C-U-QA(qSM? zgGX4W;EH~@T`|%7K65~#ayFN=OdCEos=bsx>KB&X!B3UPVF8|1 zgy?tU;#{eOc!K5&D7{njXIkd`CFcDTQc~I-3ZRlF%@%X4v|Z74Rtv57$A@*PC*$P9 zf@ZZy^Y`(0JLye#M4;A5%YAv;8uK6Mokmz3+8ESz91Wpo6+k_Csy4HgQ+-%hzXa7$ zRYPr!q953~5tL##w2J6Yqe;BeWtrr*x*gmvUl2j9-g1jd>BrKFo#*dE4Y|j-CTdqz zbV?{fxUEVxU{&+D_4gW1zCCE=OZI;V>Y^I!cL<4xaDs*caG=N zOO9xSXr-|+TT?oXm^OYc;j+3F1O_8l3ye-|x75<}`m>2_tb-R7jI~j?E+D9S|mK`?Jv$LgKC@?u~OjM%!nFCf; zA;-DM3x9CZJx((j;aGLeuFfHZukFf`}hw8YGN=Wgae}9x-apr~{#gnQv z6LmKW)!<#zwz}wr;nDdu<1kHz^T#&K&FgqI-T3y{d3QA2bS~>ZqVat1QS>E$g#sK7 zcG7bmvomhb6?2I{d}%I$DggsXAQw~7@0LMb%le(1_!wT7nG3mpOg%=wON{s0KHKT; z9*(hLjuq?QJQ*Bi^F#}>^w=zJ!Lg3qF?XRc%Dp2gHM%cH1`lc!l;87QrxL1 z{#@A>Fyk5I-A}~#Kpg+>KT388ftI@re zfngk@L`q=M^fCE#UCm6ndVvkfx#`{Kiin4q^xO1Ul|a09XJ`GU$d2arPup|h+f%C} zo7?A?rh%Yb3p+oJyBG}Mg#S`1{un{A@OI{|SJw=>UJV+Mrh`bd#64TC(VdDjL6(=9qMSaXh}j`(j$(o$B_4)1R|HQ(vxIWn z1E(v3j-bBhYMI|HH%lm+!>|9jk=#5*ptwEnlMiBk8L+e(OWr0~E3 zsp3P;7t9`uji84Zwn((zb+~@hq|*$^&n4 zF~QMMA4E!^Pxt99(cBl4JyB}su-X8BV2s-S@ip8=DF$?HU6?0bUGHw^Dyc@ci~VU~ zp#(-)Gm<{?c*1>1a{vR(D7wt)OAH& z-OAl=M%2BrVKH|yUu-SruXtT+a$X-N)Kr>R=5774C+-n7Y<=y#KeK_$EqXjIoz&x8 z4lvdXNn<`YhwdM|X|}vj~pSN2SNp*jU34pOQ5*w+>=%!e0Y8Ja5+8)t;%EZtY*n)aVxcSLja9~yVD}pr%Jd?A)*Kw@6O)yE&v4tn{ZX+U6vjU1r|zF1_5R zz9VDK%}@2BYB2(?N3gd3p{54XwkY*?76uCu_Li-E zeMM6nr?q}vNv@;zs)}x2cb2;LKwGEK8C5@bC7G7lscnvO6KSI-^>GFLgYO^o#Hpm?rOJPYtos%L%*gL9PE zfcf2lW+wDYUGF|=e=M)aOYNg%_`ETLfQ;l}>L(s|da2ZX)a5X?l|s=7iLkZrrR-+x zrJWU=U(CLcsptsOsL$pkQJBa{42~&|Su47nxV?k5boRVYq<2_G*`|Q}UsHRol_DS{ zXPP(HVT{#I%xP-C#KZ&zLH||+Cspi~IZCzPT5{dc;OZ+XTgOf=u@4h<^xsPd{ObAD z?`OnPZ6$0ADg~3?o^#S2{)#6n)#UnX`ra_PPnxw@rPiE?!4wYB?bOII;)w4<#qp#V zSbpE96zd9Q&)0t97)jyXGv`YQ`plt)?+fY`rtqlye9c1dw9MyTZtdO{Z&tm!G`;ngcMqtW?~OT^C;83I-0lzC zwa_VYXYmg&>ap@CT!&Z21|P&O*&k}g9uAVHoTtvPuAv@g2~}Qn>v~LO@@{iay{-H1 zIn`C?p8L%H88Mc=mnv=8+k%%nsOGYRR9`>0H%Hg0WibS*ohhjLN)>VJIYe>q|0zf! z%x)z_R$WDHdjq4uA3kfKW0q-y%hyny$paLPE4pxm@=0SSGbecvn%N_d~tLC4YVV`vVI|%hgLdy!@99bQ4z8z7Lpv zgXu+0$(pur7FkkJT6r=t(M>2t4>gsw9UX2TYOKu6ywKL4lAD^Ch)nY12>+4Gj%V_z^Jy?Rp%5{*v45 zzWlLs>+1rHhruAJ*>(qAjM^B@)p=o}gfg@Jy0y0hEU2YAcC}KDXF+SMUWyCkZ+`v1 z9=I`of9C1pa+CYA`qb=fVb3I~xFsWOIH8{oL!nQNoR&B4wrMw@XE10jcDnYn0qm9{n$Eq=?G4H>8 zu%!0?!CVXUI6qyeWBSg8fGt4iTh-zd4}FVKnyws`Y1#gI4$as_2S!Mbgy@XA!au() z1v+_HavxCoR&n*8<0#nm(bd5kBhlW`hQpX+T+KMnYEG;`*&=RBZ z(0!uic~4?;@_j6^7(qJC&-KnoN}_SV{-c=kbz&$Xx(kzNeG%MamX|M?%;ZFQD8ss& z#NDKJO-}IJ!+R*B73lwd5!Gh1Y}9MNLu3Bvo0DOkdwkJ7pg=Yl=Sa?xU7q;*U^>^%x=H7B%4U*Zr9b*KzE9{+)NTLgYis&&ub zr<%u)5FpbX1hyHiY9!#jhYjH6iWTtQOo7v~G?XgC|0p;R#-+%wT zy2fdxGylrpxbeszJN9n;{%l(R>>XXBoRG?^oFV6pIMe#Od3`tZ_q}jFJ~j{@-nRIA zYMx=mj%%pmotFRCsX+G0Q&nduzlPpvTPr}Hv%!?rhW_K>tE>r*?_H8qiasW?<=rlb=vFcOkbda`z+d@BsnwDCI4Re&nJoYkWUg* z%zWVZxbNrL#`*ly-|Jp_AQ@r z^&a`%9^L=*wH2dl-pLgkkVrZA9}kS3H}sV@o&MjyyrGov^Z#-EU;d^3OYJC)pqqL2 z{JA3L*!Fb2^Rk&9QX3y1f4F`N(^*XUi-ql1Mg;|hjT<*U zB)jeA%~u~`R+X18Plo&X`Sk!$beSL#59=NQcV!MQd1o^NF5hu@qNiQxdD`Pi!==?@dgPRTeUk6ikZB~{X?|OOp zV}x&x>tgoJn>Wv%I^}`Uwpu40C|ZNm_+#Fyr^cM#%;{9sn^0E8d_F$D9!&nRp|lC- zI8Mg(^!Ao?(vprK@?ke*ygc4Ke4o-|D{WX=81z zgy~U3Xr&V`A60*Q3$rSwzQ48pZtdEJfP*Tk2zz5of9tk=(Kgnet1dQKdAz*6z1^e( zO%W10+!ihDyGyo&NpQu!7du?a6jD=Ou3TGNJA~22iqX>E%9tsvdf~!_P-_g@QW~_T zWLy+~FFF#)(X;aBADc{JMNHp6__@5MCasMc&vxSaY6#9@d$11{Ic9lM6Zv!%6(1uqc!JvFMDW~Z{O;^enfOf}V{C6> z0xa^yg>a4fwRDRm1K!f~juiQ_G7Ofq zmD<76mLY8Y&5LRoX}=&41_Bi?)F;X#*~;V`R~ zd&43NO*Vdr*lFf;mDR)G3egkZFvmi2x_dkuDM`nq!QtgUp8Naz-}CfTEV@Ilj(OKA z_Cp_QnP+Qd*wnBujeLdBZ-K8S`kX&!qE%;sDJJ?3VZN{`8b7FHnKsn9C}w8aVk(aE ztqt^z!(7;W(_@{wTiC?4@HywK^s0)A&R~>pnCs~0<~>JdF|K+D#MM#T6(kleDu~a= zFbS9jU_82R$fhgsjz&j#{PCb>h8>-qojulv7XMllR$*ld2RnQDNSa>J?L^S8rp2BN zra*{^=62!f4$ygJ!Q{rAJ7P95ZDH&j9A^YfKD^N<`@wgQF!sYk=YXnO8`@G? zW2r1!vjaZ`gIgmHf9CdP3aw zvATTqwcVg!$I}b5ly)^Ot?)P<9i7MpjD-sf3k!>*ARw(`vcecIr+$8$p0oBCXwEmh zbLY+^v_4<6+7U02#~ zl0(H@*XinB^gdHAq^{)ZwEy|%FIg`0Hu-;yJ$Ue={cz)vFyYk`btyz>YEvu@<&bMi zM&a4)zm8AuO2?LH1jDKrxUAG)6Ll<;(pwSSfT(!7uRdCaUQJn9zwRbEMGtMP?rq%8 zIZ*O!r29mf*hpY>U!;JT4Sf+_99h0y>J1@<4n+yRzP_P6dcVOf2bY(X)h1n5R(^_S ziV5Yv_EabeW8-RjcyaC~>Go_Oj`q0$j2>pDTPB{lv(>aN=A0?|Ck%c4Qk3}k@hLQR zXw~;RKfA(*8dO!)fbyy;0S$K`SSL0QY)pBkVVtG%h6c6CFC?DjtjT)*{6maWj! zw0!!c%h~3<8WLPwGGk}@y^a-_)CoT^y8fa~$f8BnN-yW}<2NQ@*qMju>FMQj(O0C& zsQPYOkzaD4qr1Di+Dl7qftz2iOk>_*61Kx2>$>(N^Xy$13KwA3*Ib#or z-A@{-v}(yQS{+U+U<@Ge7)HR4U`iecf`TI|O<+BvJw9kijZ z$dK*}RFLC@px2dsOf}stuuDud0`O|vl5BxpHJnCYSbsq z39s=uVuO<2D=)wM?z>`iBatoD$Taf)Y3I)2a*VtSAhYA!Ze$u&)dj#n9CLJZlx{_D zmeXX6JNN8hy-bNOn^oWa3gZ-8Y@0y1ET+-u!zq`t{LrZ87xklu4*8)YUO?+sfm?VC zUS1^?%w$df{mz{*{!&ag)KU?5poG^hkT=E@vXkK%n)U?x>Q%WsaBMyoikzJfM(XD?jvN!_!1_d%FY!E4ENwrJ1d ze{Pgc?)gROjLb}dUUat!5iKq8W;QF|y?eLxu)p);1M_y^M70 z1Lrr{qwv(?^F7J3&%yc=(B^k&5mRlElDYT2&3gPrMJY*KBGMElWBF`F+Jj4Vh**+58apfRxGWe)=F&vw^4=`R^o0flxu*=+Y z9o^el&{a_P+#Qy-DF8E6V}bhC;}yKgu8I&*uMQXHV0RZiY5V2RKLRQL?cF-S341ph z%PV+QuD$-fIrL3*>*0y7l^?nEf+xuprqO%GA#Lr3ttRCT65$79uVUyspWD(+z*z6O z#YH*n|9$-YstYrt++zicsr$IN!bG|7C@wB}4JF?leiyoXe0n;N*Pvve94Bf5U5A21 zq^+&fT`aEwj5hy>l=c3_s>z*wA%N)XV83p<=51_ zo8$T$fA}HMt`P5tC3#TI^6(qh^f>jLbdMps{%RIt82dDEci!20@@X~(IPLnx!0{wZ z>FyT1R#%)n^W@2s&l`oeD*`CK-1|Vwy%MJ+wvSUl??(@-GPWRTh=n_Rke9}=3z)*9mFi! zj+k(oVb*l?)-)iQA-aCqObsZtr(=+)B#fKU^DQ|W5~BnrPxq}^3TyG zW^A@NwA3VB=-pk zsjuI>YcGfN{RbF2{eG;FdKB9*7@)8WgBg1us(Ap{KiuLl+MuN!n3`$K@?#KH%+q-g85iKo25BxhWYMv?Yo#5bL#43a3At51#joiy? zEa1)jA|sEoyD#Yv#s=&7oxZjH9KhH<5s}M2Y!XMo_5}kv4YceLb5g~t;zVD}q*pmP zYQw^srs2-JU*GW9uX%jdK>$8~W~}oV2KolnNKm!5vWXu?bI#!D;U;GD?LYmrFD-B4 zUf#;W@cK!&o&UUSVtw;vR97&>H~7t)Q_-XE#jZGab#?VbICRto_E&|)=WNn6M7Vb2 zd7S#piCOm9>#E6vyDi}k%zpUchpPahp|eJC7KYeh(yi%n#y7*AA3D;_+!mpk8d-Of zL(9RAaR-*4JhO{pXP=*+_lt^36TX2+lYxPp+TzmE3N+h{QHT<^p)SwL!4_S`nrvfX zIRdiq!wWBO??4z+=5XJv>at7SbU_!j$J)EP^ba0Ax&y!_+F{3!4AriDgg(ZY>|?(XQ(CYxgc6MtD&R`x2e>Fb(##B_WXE&N_S zr*XdDgzCI2U9)GMnNytaTGe;}|FU1#Zm=^1g4N72Rm*W`yegm8)lKJd#DI31H61sJ zGg_!)_kQ^UDs93sPfSh;cSyyc7KU*wFY4|b>=s9$>SZ~cke!g zv%|gID=scRd+yxb+6CBDzwz!;Ie$+1t7sOhCN6Q=YHc%zSzl4mq+H*x5?XmTm2Pj| z{dC@a?!yPgd5na%IO*HNdZ6_Vo7(~8B(^g!0EB5~n}@u5^-6W{QFgc<{8ve6WN!=I zjHf_;dDfcbUJ$Ha7$Sekc7(*RqEjEv7|p)J1GnOFXy}XQeQBwTN;Obuu5X=%?Ce4I zuF=sW)zu5s%aB8)?b6mLFzd*3>>3+Oe*5h^bh8UZgT6BWa@?t@sqE~2K|!3y^1l9t6rpB-a)aB2 z9#)=8fqGHUj_2-`L1miX`HHL+mNsoGnIqT@leKgBv4)FA^dTB%nWR`%O1MthO5p+bMlOe zrf>d%<+HM909E!A=+)PJtZ+%$NL&2+cO{yW`C+(64jG?-ygX4@Og2|loR6!G$(nUf z&TJT;o!u!UB=qd^%hb)gcut|E??FWM+kW~f#%%K4PTlvIzOFvnFG*Qbq@k5Mcfx}s z7p8h@v{k)2QY=a2V*CY`PY5J{_3C=uaP*i1lqVorA|S`pli#fIJSg(Z`w3k_&R@DU zopTA^SIL^>QNaBN5N%1>nj?_Txc=oA|HUi+u`>rc3cv20H~9Je9&j~IY@w#`MMmv) zrNfOW+>qS}I3^>3a;+R(kYQtHqi`TA7vcyYs46CI0fDSGYdX11BZ|b_=e6=wK&>Fy z5wEDIs9Ih``<$IFliq#Jy3_^r{K_^d%CAFzowc?C*UJmDW5-CWM$rI=Gt!o$LI{V8 zx&+DSx{Uup4E*bfx>&h)6%|RcCG6j<>78f;VpQ*>Xy!X*l>J*!kSqvmf>h z*T?&68cbuOsdNy#H%&HIav(h)z$3nAx9H91BdsqL94c|(af*);nnf{+yrkKVs(u)i z2k?ApZB6eVatOGh8?RK_1;qLt8mnN3JjWdlJ=)!hC04xbbmNB4$s@6g4`Dw58249K zGq$o8hw985(A)vZk-T|~EY7uZt_$H0;O_lfON)zljgIMzw!Ul%uxfv8IB~+Tf&Pad z4rN9P)I6JN(l;=WXXSz)L=#WFiB)>h&@d1D9jC9##pS7~DZb&qiNxpHczJww1B%EB z`BEOeeED(--3x;f5)yuxm0RWASFtg@OlfGOxDEZ~bo=3pyM=9H$lLM}8!z6TVN}Ir zZEgMRdSUY5HQcn1$LdWlOb?swaP_)(kH4_(NDWNG(}VO({O_-{!&P5n{o~=IM}W}$o^%MZE$6AZHQBD*{9fF05$aEv17-yg#`sK zUWgL6sM7$@_!uBpvpYey@%>pGzT%o11=|rc`82AU1icZOk)FHz!QaQ|2*|>Tk17gf zsoJ@ArP#k$vFVK@3hI8ep;s-u{L=ESa(QwSB259;-*4X@Y8d?RhFQuLucq0wc_PA zGb5UxfUQ$UhK3FSm>qh_f+(o`EE)<6^kUby^$6?a-jL6>Y)=$68VQ#D8&jIgC@DR} zG=bw8u8TL?dEq5KA)J7hc%$Eqg+ZEz0Ld|W0BFDsM9fOiY6U?;)?oYRIgI0OIolq_Q{ELpYE-AzH5G!aqb?r0N!?h6-7wUYi`rtZAtf-oJ0(0o;{*DwTj60+(@p0QQF*H+|oIKd?7F>=ptp;nl)=eS6(}erFM093rtT;Onijnj+tF!hU774RE@91 zNhqyFaq$ja6#-N=A5FQRH8w{(-3I9vVAYuWHx_g7@jt^0L4(kv0!OSR&LM{G<)d(jCX=6zJcT-`yBCuNw8{ z@bIbXet3uD!z~~tW7?ub94>$d9GLzxGLn4KZs2jG)6hY3R6$nnRYSL3z8XWYY@kNp z#Eice8+jsvLewv9ov>WT?u^}V@6AP?4Rw+C~gnL&jfO; z^0wVzt7x=$+M(kTNECWq)s|GnUvd6F7bQGP(C1+6$3nE}=9BQ)?c}{jSlQ6fP;DSj ze0fTxcXZTZLIX6V8ZR%ek*@)`w#rIXgqS>z;dt0Aob1ff(^a2MazG2KLk=XkxCc-D z5&W_mFq|eV7!nr?f7EG{Fcai_K-=Y~)ZAk#LiZ1WB8%EX?)xK+Z+`e+`R0BTX6ZnE zd0!AAKUIUax$^Ywtqm2Bi}sQ*5qXYV(*%n#3t0w$=p!ch5Pu^QQ9YnJC)#Xl?xv-s zy~U|)@XxXBF9#vI@6e(05o-j~;^N|fIVV3o*Slpm+*oxbACVu4M#4oMm5JY)IpGnj z$-zNjUvskt;+{ZBY3X~g0<{Yu`}y#`KIJ;39oBxWnwOVX$>iI%wxNa``M)#V#M6R= zTK(@G0WtU>-V+C7Rqe@0St|AXxD|8wc^|J4IM{y|t+cu)rnZYpK)&1Rtf32@LA4}LxqW8GbXFgRu2 z&4*bi^>w_-EW~d+s|0Y`E$tPam4t{mr1m*~tvFVwIvcRMOBAKFlAN*CY1b7q0NGyT z{enQ(4n=;`6lr|#K-f)kc{pnoxM;GvPALg`g`nA3?*YaA+6F-#VP5L8EiR8wO?_mU9Up(@g92OHb?Ofq@T2{jl8%_Cy%79c z542tSwm=fJEBBv8nUhdY)p`ht+h92e)~lH&j6?0YFAu~fLTy63PI-UUq6rFUzq@R` zykIY%gUn$AKT#Qw>-k|C!%TkphFVr$UKh~b)|PmUlY9Z!6-`kxDUe(zNfZDT7YXm7 z2{?xg^FBU4WlTI#YF9~mfLQykk53Ssd>JCocdf0L;pVwOg#CoVrf7>a-NK`=$bJC< z`v5Gr?b&k}xgbA~&6;*Th-hsldd}t8^xgxsKX+^WmKX>D>k`$ty{2?kRrhV!y5~W0 zvE(^9Ie+-{ja#<{L9i%`Z05WA`g->6w!qNPLyNOx!N`ltIyt?bo0}t~=aC!YvHLkW z%b%RNv+u|edCSg%BfuESNTS`ne?I^rLRh=*xpU_jE9>l#ak5#Mx|VbO%Ws6ag+JK0 zcke0W+xOCo&prNr!-mV|$-wHub^{OgadMKs#VKkl&%S<#0f}fGoy-0F-S^Oox!w z%NkgG_o%Y+Jh8Vx>}M}s3MKN2vu8bj|KpEyAWoB(U9ZYDt!~Q4mkzGJoR9y4g8L%- zQ)lGSWM;GQiV{iWR^T?qEh?&I(OJ+QV+|DuzXd+PtWne%(C?a6C6u82_Q+1B1Sk(- zK}bVft$P?DTkgPs(VZooW!C`aiZi)?vvw&a5=&zLpGr$JD zuc5HqI=K0&9&1^kD;1z_Wj8ms^`&1YCY0fP6^*OId2>2JglRA0Kkeh4Zj16H*3EhK zYQQ_wr1t3#Q8Jpa_YIh;qY4ncB{Ix20cpQPILZV+zis|CWgmlc#>~zji}w*u^dmt( zG>yYcY{{YFw8D#6Nk&#%s32$weO7g$fy0c8f};*@wL@ zM}97-{X??=<{et#W#oa%ca7A1s8Lb@Ihe3!?RtXIZ`uB9<3^>lf`vp`1qGp&;QgKI zYW69sFKdLwmy8<3mGBlprQzJyFMO75CrCK@)~VE&Ef`^H8F(n;cc0WMzZBhx1%jV| z(yk0~cSW*4xMzg48RsAIoVH!Uv?;%%+OOXOL|T2l;1A_;AORhqYqoH$s+BQ>gjQKg%lsnsxKZT;?36Oh3FrZ)UO$Z4UF9SkC3*wIsUMOj zUo}DEdIWYh2wpfupy?jymlrS0nl9+L%^M1noaAd6U)DgFm2)_gz1T=OMFQ_3;W}?KQv{0==lZVM?JksOz3XzV+(L(!5P?IpeKq z!V%X*iq%0sP98iKuyiCRgdJ)HNMo-#q6i5VK{`OWHyfPG0|;l&x&ixpRmVbZg~=la zkedjmF7-<&YiO7}w=^|PJgoIf5ij~EBz&0zqMOrW%~n0Y6}g-H#AvVZ)D|cb*s1HnLz+)lm}1us99oFG2*&f<(W*S<7eg;qg#twi3=apKagy9P94e zo}N%r$UvmQ4saEOT>D)x=*h{4wU-&WFA_c1d88?zi9d!9t&gxmh!Tr^hd7C2=P{jt z<;7V!#I2s52V$=x`&)-S8!V4$|ZHnhQvS^kGlu~kY206juHq{Q%~0T z8QlH^Ml&R}6_6b3U9QLnP(vu$wpCTh1MBa_*sN_J>*!7Y73t?8-MrfA=} z)M}Z!4c~u%fI$hbQyH;`D)wdQ0+z)TNySh>nCT&s6EC%ufsPJz%8Ld9Z_5a|#}5npN0p;8I{fKmr~riBmq*q$Lj}_?$IWKLPQC zuH@(EHxP~kH@7AG-1+mWIDF}_AUq3`MQt*5I1t033)q80?koN7sxU@6?L?A=8kJKj zo%Qu9Bu|!>8rz|+=J>Z``KA;$^{ivgq*(4~&$bAwy#eoh5oznj7p+KLyj^I>(NmRF zMWt5=b3Fxt{9`^Lo2~Hiz5V^n<__3?2<*k=TY(<(8ZVT0xFIPX$rG~| zRj@{h2tfHq#aHGGqAkw1zcD!&=i*Bt8%~}TNB$!`oOkxYe9gM1rY4iya=A{^iEq=q zSwt?@zXb78J~|n z0m(|Ys`k061^xxL-gF3~K?J!>Q736s23z3WI6gV)kKbJLSw@;fO*loC1mFCoAK#lq zfY+ueS_s(Hb)61;m7B|K-rwKP1?_6>p5wEZ2v7w`MqZ`DBp(@5l1a7eMbhj&ph|gi zQh;CK@~9O}t%6E_wNNwxptwAJ`jp?I25tpXvV$+%wV|rcFl{&#-IS6+@FZ+i{hmb- zf-#u-C*3NBl%bO^qwWinhaCo=ll%{MMmq~!tCK|fBZj*ZSQiz?M$g@(rEjn5DWcq0 za;66BOMA#$Gj80IR33BApPyzcKUxAi;)OrumH_pRgqf;QJ5Yx%XiWQFDX$%6z}yuq z9Q*c3B25#`jr^-wfkGhd)y^Z95=_d6X_V?4hqw1smQ`mJG=G%0G*KblN|u2j4x-Ow z5xM#G@e&O1ju4e=|5!bSzxVY4aN3U34eIiVmz`7~P?AZ~mkr#($haRuoI@{l06?Y% z%~9I!1>3J^*$S*-R*w5VZsv2WVD2gK`tvrYqeqWI2c=b&4wxLIiTRT4B>d2J1W2zd zaCP?Y=Z8+Cit`y9dT84XSjla>cA3~L-$RoT|EoquL*)-2KJ2x$D=>rjhG?p_g@69} zG|s-kxbUTV6rLr1dJHtKbIV>mO(!Mi2B{H%&Nf@NUtP^kc)Rp$#ojBAAX*h|0*W#j0BohcyALRvGFK zOKb;0hB`*@3g(P%R}j@})L>L{y48<5X=9tqNNSTDP3?-g67u9&E|}?ifE{K!5Q&D4 zl$4e-kMtv;tqag~8jL*@W~*jvW8+73oRAK_qitmiWfhfP5Ux#uC@&{MDZ|EgAoxDY zQ^N3{5D9zv`wHZ%!z-?^8#y<}pK6Y7xz_$VD{cw=?>RlaCsGT74M4&Bu~h05XjER9 zHk9|wpjx{&AnDMZ?Cam0Y2a#U0$H+#XrK+FhBWQm?4F(;XtZELXj^N?4kH_FcX#R! zSx4F_K**fFgGfO(Mo18`6k?Cp^6s(+Nv^S@yI9UD?*}Mc5DEI1qN0CtvVK_v;vlR* zdHdmhpz+3e)sH0Z=!FFTe{^@9QBj^**qofBn_V@B7(o{WML_|T1u4OT8wATMsfuLvAl&1SOrF{Kq zfv?}lKOA@M{9@6fbi^Z^-(C$@2JXnRmBw=nJRa&d$yy{%3-47^kQ0aQWE` z2%4t@1NqIJ@oqK_Kzl2Zt=JxF5E(Ib?RL?+^e%-y&o7FsfP0(b#i*7#gZCdiAgGwv z4wIOmqsPB>uoHZ!MTj3f zX(nc)OI;=EZsuEAoyV63E-BcDBL_p3VAs&TpCqeRCC zdA092n5h${wA^zaU!=da84L>AGG^U@jKEZuIs2wmD!({`;TbtOM33VE?OsczIwj@m zxEBl!njE}L_aL5`nAtno$u0a^bUh_yg;`s|aE{$lKy#f_uWZ;*?RM@&@iIaFbPW!& zYiX{kt4qLwG`3y{848E!)wqgj0wEqvL=$a6KB30a20H}A-N*ypd+Zd>4wN#f9L4&y$sf%-52xnbJeG9CP9zfB$P)Z zA}W);NLGNVAqeW^uaX<>a%sMeAqM0`H1SGf(MADxt$W}b5xI982zvW-I5)V5!}86H zZ+yo-HS(_Ds_nmCg(oVTkz$OF^sMLpy-SNKgs0JQWoc-K2s#wBbDU z8ELha+WF%V1Ep~un7R-`BPo^QI(xyoOGPE;1q$9#%b+Ejf?lwI6?hYt=v+Wtg%&~9 z`r!a&jqOLT15R0#of^^^wCnyIBxL^PG|2Z34ra6MPvhIH@(7viUxP`i?1&R>QQ-7E zd!Xte-sZd;;43u?nDFKw#iO(_f0nhSL0@u}%uGHJ@AW)nZ=VxTyJy0BIm1ghJ~3fX zGK2?fmWQ1J9L*^3tX8BK8Xg{=k(8Y5)$l%AJt(oEjK32zldFKhOS`cEzmS(_dWIk$ zBL@KHz(!?{MWQ{m%`Opc5M@|=*TI*w2!btdJ34Iy8@=;^%W<5WnX9f?ovH_w%6qmu zE}jKlN6f)OC_Cj~sIG46`(oP;bhMt4keR^6bv63rD&^UiSa_C0r~4qSw<6zMowFGZ z;fcN+TW{=FA3E@`U>Dl_%iHu-WD7*zw8ujl5xNYNN(u5K^M zJWa!RjbwSnJ!IoFQ(e9}WXknmuev2cY=+m73J`<)lN;)hThI&8MS&~)5;y*GI87zw z%zh+vay4C8tSYzsa_37`%uj(y%u2@8_WH6p90@6hhT|=Vye>73gUm{SO;4U%I>}Z$ zHa)>j&;L&ZHD_HOC^b){&X2(Cz=`oy=Z4Ig%ml0$3n1U<7QUfxMxXZ>L<&y8?Xqf& ze!L$q5+hoANoN19d* zIBxg=#`6}8Z#~(xmNLwF_6H8Ep!^7+J}FlVZfI`UkRUKQFQG6SbqlCV^{;A~Ex$Yw zzqcAL8!>W_;eH!2DrAe;R;P0XoC#Zz(+~5PeRTkh!SA6UEzJo^HX z&-Go@#)y~{7@Q#vo~FT86&0w)Ybn2aKT=^2f`Bv*iwp+vcg3Pf>UeqzPOTy-cat6(9< zL0lLV6+=N|W6P9#aNFo5L%3KBeq2>k6Hh8~WaQ&=t!xGjOCYB$#pW52-|xnhLOOm9 zly)tm0kK@JDtQKP-<~#SoOl|H#tmlg6vGC$oVkF{Y(W2>MmqNTQvF~+0IjTrj2Meg ziUif9Z6Svrw*U!H@&W;{vklrB?|xSp+*&_6pxKHUckLn*xI6!Hl$ z9uYU0iAbDjx9uT%U=a7QU8r_#_shqPjZWz0bD#NxtI`l^mUaGRy^IqgUfkg!Y^R7zQ@^So@Ssv@P*Tw+*=O2i^@z zz<`uWh}(E%Av+NXl=(_qY$(GEb>b>cLB8MfIwu$F)dxbVEdb_q*M>W;9heTI*e`JH z({|^EGDzHOP|}SJ7=h@pKOVi?LsKW7QMz3GLY&8KnkEpiFb+-W-Rp>mzoCH^5h#)1 z4XVBBrcHJ?+}l(@&||fvV&#+N5F|2Tp@Nfkedc{dcaPPEX38(eCQ{y26CK9^q@%uNGrfS44A{Z zP(op5ZU7FESJt994k8Q~M5jrW(9lpai|E5e1F;+1`tlF3W7Gjj<6xOf0Q~)*XhOHM zD?F(RP9X2)HKLJhg0caB*cf&8gY^PSng%$Om6hpQs4$|2=kWT;s)p}RRyBNavZ`Ua zl2r{Ctc3589kKrKul?lPfqRsZ{OVUD6HG-OUgp5|Yw6Al)(Kkn=9D z`}Y4n@7L!&j_3aJ%z=k)XV^1)&06RB)wx5I6r`{)o?)P&p5JhyXlJ5Mk2`mT&j-@T z&CT3#+$*_Gp5cOb`>#hZPJQ9szXxa^Lf@$1{5^U-@Vp59@4<7kFXR7t9WLkF?K^*; z2_|`Y`uE>xKOV<;{pY~=fwb^{4%q#3DgGXONc!J+o8)$(qJq-gq!=VU4PqqQlR$zz zZ2EAqP5>NTC2B&*AO1akT==nfD#_DLktT1Q!Y@55rlxB?*C%T~$26tx4$U{6=Z-E- zSnLVwogHZF-d>XOT(KCowq7p(y`m4O;9{Gi9^omP{xH_Ss~smy3#u z+UC|6JL?P2y+C+8c6Fc^5-E}SG4?aY#?Uis6Vrs)W0UF48L^UVlVy~e#osd?@|M`B zu!+3j=h{s$`Wf=|_zLHKK)NVB9i5<))!F^>br$<%uH8)qur>wSi{MQ?i z7j!<0BAD`#t>STkl4W00EzKjEXJ zD$Zt+o=yh?8%T7fLJZNNvGJ_czKEG)+45hY#G?t zczur!bv5tei+q-9Z*^Q>-H#;KiN}+s8=eFoTePK#h|=?_do3rH?s0T{JVQ=fY3V@Y z$PHUMobq_z%xSmP9B1glPJgm6>&8Cq-rsRT+Q#qs={_?N7dCtG;)S+Fd|lqwk}oM1 zmg@!0vu9Ri@RT|?Yqw2{-qo#s4pQ=!1L0*`|)#3Yi7{T zO1Zh&SDl)IA_G6`V-5ejP@Y!~ZFWarxEK!nU>%-I1=z zraWO~IXN?>mi`990@6-=A<~(&!?;6XSetVas;UvelHtkD`^((M+XL z)_@@UX0PC}|GiFFP{ZZO2Huc31xAI6%7oEPfN@g;+1b%){>nafc=|2$>|_LTa)`jR z&y1Gy?|_|Wrt!P4&E`={26|zxN8<1k=&1c5oFxq#+!lS00sRyS#?fR2pLl>|cN3o&F+OY+vf#bW<~k_Mz0kLJZ;@%M?U=c@a@ETz4TIM`4Ee> zl=M$;jyzfdWO)gRh^n+o_x0yAtsjGFD=syN-?xc3^7{_l^nGrV-u`$p(>)lPxtUpo zUQKMUij^z+42NAZU3o{R3o z(Qv<>M!ls#GsE_Le7w}bgv8jA{6eJA91IUHv0qrZ)KOb(xd&&&5i(x*=5z>!oB2h} zcub78UbBLFp(Wypj_YZ+zFF2g=_+C0Tgk$gEH~a78rXP6#q^j7yv|myA)cNW=4^T_ zZJ8%7OG4CmT{JJ*G4)&K17h53HY#jqtF1A4Gevox0^soP;~P}Z6t=hzCw}F;Z*?n6 zBXOTowKL1#+wEYq+@6gM%eBtWpN@D@MnfZCHAsV%B~>dWm7a-7Mp~LvE8SaXGc~_6$(bb0#X|&+dNLoJ)DUC4r;M3 zp<*0Dm~&_AnAe1MV0dVVWV}69O4ocULB1T`NT=0PBz;4!o3OoYp}v>J1ksiC4}N^& z%9?h@RyLF=$8p5|5l@VieryX_Uq+5dc8+zaI2&T2o+#e+6xG;Eh|ARwHJ;f?@TRyL8QuigdcQxFIl1Vc8W^ylsxC26_mv6>4yL6d zW#VM`c~p;#jg5^@OpHyqbzhGi7}y;%?-Xz)Kl{DpOtrm`*V^J!H|+2S?Ed>u^ObIW zaJt>w*N3a@;_}I;=~Igk-p`*ui57o!&$j%~zj2aLr%?A8RX0l#P1n(})oq}!`ebyr zt;oo@ynq3H3)zF~b8%0EYJQ1{dtbwJ)!t1eW?)dB9wdvXd$wKNh1oeo8SV=`K5Duv zwiXZ|kysH(5dHa{uB>Wn%*Ve#@3p6ztcs$tvR~Jz<-k!>*wj7Eu5KE9+2;$g03!EBD8-Gb0B1;?kbr348P1iE!jv)d5TeP zT&1N-i{0wXQkmgz%YUv>=e92*1_3w#)=+`l=hxTYf3c_Iy4*X7f9$(P?8C^##1s@v zG?=O-tE=iT0f3kMvni&wpRMSMA-%JGa`aezW;LnYwyz-<_wQ%6`;^J4{T)Fig?MsR zMZ=1O)Gz{6UU+z1M4e~*!h%=xEX3tz{RYer%t=w7-SNJ>vAo>eq5B7L_rv$^)k@1F zHFyu)*3BfZ1&SH_7#L6r11XuAl$l>_-WN_y^so3r26_|?MSOyNuS7x(UvO{)YEL)1 zEsT8NB#VS7_2yM~4h;-saF|?VkTccRaeW`6oQH}2c0+cyT>qm=;4dO9AjsqNoJtlm zwqSVi`nKpo-~B)oF$Xn1{IEZm!qZ6NW;3;50*ZcYOk8b=33nsZU0fVqT1w`sPS~NU zrcAQPnOHVkZ~T)>SbuLPOUmtn-1}c4 z)@VGWJyl4@N)@y&RbVNbv>Vicaf3bJ##ALLSRuWMnTe^!ZjD(&;v&QZU7k!ZxSg^6 ztI^2lV9(v*o68%`sF~v_+&^1Y#N*SXhJnPG7y+MwU3a{Zc%dH@s1@+dh(EY2EGZdE z;R!XQAS6ef!O@4$?8Hu2mSZm;r>!0B;e9h-q{`K zHK5icBZDEPy9aj{laOdKw6|xGKaHzc6!DY66R?PCTS;U|S)TrtRam%rI@jwY>COCG z4w)|18Fb=gJM-hUVNlPC?{%CLn0zb3+fKv)D(Begm>mjl^p0|ve`g`$8@>A$-}w+My(##%Ns-9)3Ad*5_v7nd zr`eIqqB3T~90?f-g*k;yPC-LUG`@JQPY$8Eyj(`QOd$fHDNOduCi_V$ zl^!-{M`o`x4y>`-pUI6Yqv7K5!|2NmD%iH^t;$oUI0_V{pSV6jJ3JSc{a;0v1TQpo z=EKdi1Qs$`z4&WHe^B9ckD`I?oad_*?{!M--J^@Uu6wrU7oKURDZeM1`3TW>HI7dI|S@P5z-+5hurx5PYE_PZSOpfv28 z*r32?*{SX@fZ}kK0a0evYgU#V1d_tewuP`aB47UM7RuO+&&T7$N8FMaoKnAg`GT=r z02{%6CK5!g+|p86NzW>>C9Y;OJ#pwS^(id0al-LrGpi>hKy&v9{TKv#+TAr+$R4k7P9`0em=Kn@E&$5)}vzH_-|0``RL$cMk_ zw6&9G>l4z2bgvE!$X$Gb0s~VDsV{xWBJUknH5&h{_2%{eacSac)LtGLL6%Ulz#0=y zfwxBdq*P~Pt~$UZ%8nd@k2ZeKq6l4y<>>ghU_gsii;9U!RaSRwBF|D7U6-3XelL{> z)_fikB9Gh?uXVQfG&&HVs;;(d@c#{8Qf6AqJT}Mw(FXXmtgE%6zb_=HzHd@$q1OS0EKk_NR z+kR#g*6oUlii&It-yN&3`f~}KB&`TlB1&OD9ft{^pQH$K3wasEhKHY&+xDl;oecE# z;VCDfzIRf-)_X|NiFPKYr{2*A+xn1=ijGtlzG_p?Nu7&XRhzx0Y94en}UFInmLvkfQw%3#P7<&bd+k3iEV( z@IK5Y%?%rmWOFA}fan9t`TSPZtfTLHZmqy6na$P7wvCDHZNaBY-!}!U zt-h2JkTSjW$B%z(x$R8N>1t@uBGoKRy*4%DcX!ijh|3um7*CE6Ph6Rw|Fh|b`TQSH zMj>%&*G9?Zb z!6U+Oy}x2Bhyx@gO(f(4-<&?y=oh(2*SZ9e4NjP1tB z5cYMkm@X5!OBVs=@cM~z4B1eGE)JmDnzKV|tM8-8=f`UuZ>~Rm0veNEvrlZhjJky7 z{N~3pc-qOSi^q?!2>BMrosWyR9{_6=6MVPMZUb*yY_PYK!nUcd;-JnB#$mtyDB&;? z$^aAtv#iR>%31-S^Yv@kCdNnmU0nKlo)zU63%%QY&Z|l13)dlw{82E>;Jz<1Q*F}z z`(-NW}4`eNgzgEa!@RtcQlB|{&Ik7^-Y`0e%bz> z-tDm>1Qe7TFK<_i4J(`6ilVH9xNCj^TE8ghYlNaLt~Cb-$F=Etn{MU%6;MUVQ;FS= zY~&&Rn)cAE{k!dvQo0*{t*tu()5V4KrhdbrNL=S_xg^xb*R1C#3Z!3KiGZ6$o!{63 zC}&{neahXU*m>y&bkIyuXshSd(hxjoQ39g51pAHf(5>HFZ1ZGK9o+xDbOi0x!&km9 zS`cbdr3EB%pni7!n0~FO3Hw@kxYEOBzbJ7*&gY2g0G096r+L`MJ1}Ot^^{sIKF)~r zG?AtfzzP87&~3ap#6&+kkc7~Qvtp==_*vAXhK(If%<)bWlGZ}y@K9w?l3Yjq988|Js0uX>xKiNiFj5$V1F&PgV?vZo^rhX3XI25 z8VNELxLHc3JQb;m5RC*{$V(cQt`=qmdHF8DI`D3g(M)Ou^<{aj>2*dS$wgV<$GShC zfuTs#etwOJ5HC79+D{oTv5Sf)RUR@>km4NH?dDo4%WNKLTv#Cs0n8Rxh(4?fF#Vbe z6P6c<8hCj^elz$np$@vJ>4CT0yr$oIXK((8cYS?rps!!|rd1#(@ca=BKO-aK4TQ8| zKP(cj<_-HT<{v|W=OUjrFi$^?#y0O)t)p;1;b* zU)SO=+y2g1F#lKI==cF%8>4gaG^|wxXI$R^;YD_>hX+5v?50VXnn!PSj zmn{h~(bt}VwpY&1Y0u4RN0H2&FXa%65kE~Gq{^Ndlj7$oE%|y_v)J*Y%D>G|KJQ4s z78p;$ewW2*8~1LX=GQRdVNv{c22^jfyL6^;jhLYQu&Lgr*|hT?TNW(8kgDjms%SrA zwsVPoo&z}XH?nL1+t}DLJD1+Rt@IQ!@bkNa=hzfa&Rzgy5^`N8DuElt9kI5b1c3u7 zJTjG^QHOuj!YKojq(C%13SRJ=EFB4}4#D)IqM1E8-@j*%_VquM1j^0DvZXK#bw%eZ zF0Kz`1VF|qMEpjey=v=c?*L$<5N`b0)I{A5QPk80lM+lez^!X{gy=aruNo9F$9>H5 z1Lt^H?3607+kcFH|MOE|edUX;IF!=Ryc-q~JU*fBZmUb{@rb+BeyXx9-MXLlJnSZN zZS0rQ@myWXg&@`+)vCB?7CgT(vruL|JR(O+CEEU+jm=O-CZ@|67!&=-yRQRI_SU+L zs|u&#IRJiT6njfHUZon^(DdOCd>u>Gc+LyH+lGbZwNE9?0}(6(5&g~(ZEccso;C6u8Gr&e7Gks) z8eI+f8$OB3>F9(81KrTi(=j2aDLJ|+SsCH9J|%)O1)6C`XPwQGmJh+BM{Xf&T~#x? zz~>cIc3L9Us_2UkcRD! z2Mu!pGjrOMf{h`AW*fv$b_H>fhlu{PG)iD~i9c}B)YR0kdav{D-4Z}jAr`Zxgkxr9 zM)_qv#CZByGxlMz@$n;L6Lx!(Hp|m*z;+l^*jP5#^j=Q;Zx-MjQ^NsBx$EQ6kS7GG zl|7=*kHl@1m7}vh+8t!1KjW^nA8lMfvfl+5Q6BQc{P$wdp2K zj7}cHonLb8o&hL;?Zz`ki^IvzW3fM82`mfRvS0IqLAS|rlc?85G<31*${GL!Zq2}* ze|^}8JaG~@nT>#bBD{7h8y%ZicWSyrHyjiQzr5s@myoD(%xU(&bO$;$yw$fU-gjqy zUWoCA{X5rNHt07(0Te#|Zs!%x_LkMg#s(!Hna}Z=|G{Dnfa!r)+u8;7rsu4C_VX=J zp+h}W1-#&ds_0vgLP%Z%KHI~xy>)oGf^9!AC&^*h!1g$*@tfmidDnI*O;6v2kYzD7aPqoz{t$T z*DOd$9;Y^`8+dh}gE{2nR4v!}uzs&-F!wxPx~;V_ zWdntB=LWoiTf!%+XL|;KGOhqcT3?_cB1CrgH+RyOm$8|Z$NDOTynJ1NGu>gVSGyyd zx%oy*RB(M2kNrr?NVEyfWAVpO_J0#0Uuk7zQ6hkhV3llC&+JNK?cyBFeMwICy&B2^ z+Z}MsDze8`S@ijm2hD(pzPn&OFt%Zz^!-<*ZcyZBGSQZCpXv(g$1ziZOD9ge8SIks>il#YQa~j|w!2m=wj4CD8FkKj0&f2&((wxUJwi8c==)3# zj4pO0Rm3|Fz^eSizB)mv$aHL>=E1(v+FC4E*V+fz>2AOhUN?oj9{>Wsy*@uH8{1T_ zBfPJH&}yz(!qS~7u^-;pWj}Zc|Ah4!{03OeblLIN?sn7H_IH;s6YYe2PK*~bxWO!N zCAT@a;at^@FZ^{;VQXz^YbgWaTrU-I;rd)e=68-rcGjer$C&)3WIfk>KgP>At4USd zlt$uKmMAPQE6d8-cA;wy(8HMEA%jM*n|0r;vhDHumZx6Mn}x}riptj&u#&?Usy=YW z7O<_j>x+84^gwgAw3*>~Gz00(`3= zzr!ir@T+p}zYH)Ck-(SPcHJ3`47Qv10!})y-;3CBZxEcZ4C3J#JrFjc5=ErM$JbcQ z>f*gwdY@-OC zE!^)z=7u&;yzlMu=^-pC zAW)E=nYsD=caeXqJd5pMF_y{Mi893H?0RC^Rt<*?`;UfR)0(Q-fISdJ13(n;YN@=g zA&p^|ecXazlw|)90Pc6W4!GZ4de(6&lognb*-7!E%gfzRA`6gOn~Adqd(p#w5=xb@BqS*E4hySVe%gQh)3(MjS*+hoa zh@m%M{WhmkRFu+nAmk(q{S9NHHp1T6AWd9#NIDA5fcg!GZ?G+5Xbjy%^ZE`k`nKwT zK!%*>8^Tl7z+#$?TTiTTijjtJD_|2P3)|ZwbiWn`!(7%h?C>-lCdQ>ZgXy_hOm3I4 zPKHfBF14c|0969#P>zgu+WkP;4lglS%Z8}N?Iyof47N<TFrS%Jjq5jZUO=W0|i>Pu1+vTCc)*~aa_JCJ-PZR84;ZFrOCUzeB zNdv_Z*&eB9_((EAqm>SkSr zw7s3rEbZv}`kH|=0kbS7CZ@WY%W`Ai_-lnY#QXZL*|4GNEbd2?9SsACi;t8^PjfV- zak^eJqW=PJQ?{$~$gPH@N>4$7hjp0<4~tY-aMgt#kAc3os|6+v0kj-jgizUFgDF68L>(j01T1TkP-7iioRkO+Y{W ze(rln421R%jAP#4AXGXHR&IbFgZPe@%QH1&Zhr0L`_A3GmU>aa>#TZ)EfFF034tM1 zZ3-;%U?uzdlEVZv0Gft8q0F4O?|tG|2g)lj)5IX@&Dg}(5jr|e2lb|t3Hb%Xfn{^G zU`8`f=5b!-=H+2vU}9p*AUUzax?-ZEX|wgcqbNk&Qi4Gqrru8P2iMhbU!UjY_2~|8 zbj6}%nxA>giu9cjFgyqlP zx4e#}bJmo$>p^f{FqYGpp&wX#d}2 z-0EGU*Bf6YQm0s^E4}Ox7-`Vk?}oCvoD3J7iT(O5KK;NFKXs{7yuU9acL_2MIlvzg z@i@swzS{d^6CTpN_#+e~W%ACYk1TOY3_}yVIgE%Xp z4a%Kfq)#_7G!$fRulIDDlZ)ON__h5OiFgdv@TSD0nbyjwJ({1_qmq&DH*y0=`G;KU zw}UlhFa&aDvAp)wne86D=G_*+nFd6TC578+q!bU&)XdDV&B=R0z);RhHx?Wb6B6Mm z14H}h`icGIiMinZp+QF)eVSAk4}-n@Ck z`r?J>w@S+%Y`e)(HA?>4^ILzq`)q17H20~DYi2&FE)r>Ksr`Tw%l(7!g}5Nj1Hv?X zz*ps6Yby<5Gi)Uw6Jg`!Jph@(>#EOBo~(k%iYk!li%mIo8V-6Wxuk;2%X#p8Z;$F~ zJ89^kFR1cq^tpcy4JC8gG8`XLPFIkM7HM{OiZTjhNK0wF&`-}~=}Q)!i~DH!?x5`h zj&c=eez?u_HwD8A4WNV#xO@iD#I(n4jgDc9=L4n1SonXwkG{LWvBg7Puk8dC@`0=g zXDk$2wl~vM-5P|62l5($`hcyR!ZwpWCnbFzHf&=}6MQ$&>!(gC4lrW=;CLvv;H3Sm z?ob&>*8cGVn3%@0wR6nmNx4exHK#g&iqIC82s1}-U=@~BUwW_gT!&Khc6Y8MFVDbO zMNw8ZUE9dX(?^K0MD?AGUUtK9F90;oM5S|pLZqbh0S0j2Tp?WXEkMBSo>yTE`H9a{sjcFS1g!5-8dvA+m1 zpM$OEY#VcbGRPkogK{Z8SR6L$QS}Y>n;0}V@v)0;gNuh*rB^7K5J>;DYElQL7}>5Z zQoJf*F^aMYZ1!TEc6iZ11O-k)N#fv_`1oW|Yd!RX7ZbP)!LQX^$ZCwtte#%HsQ0+< z%t=jkiQJOa&``K=7X-i_jKm+xRht-9kQ%0{m>JolkcQQMh0I*(CWwxR_gwo<92lmt z``&adH{TSLl_}>+78vbSrgAIyxVo(DHn{fu{FIn%v5>*Oq#b?^#(EC+#Gqcv+v~|9 z9t|_XK?~?j$}@)}Asai`f{MZ5rxHPAXa^30U8gE=m)UlWs~xIXTt_Xb4gh7DR6=;?D81yD3Gv4H=VbcL@SiBMfOoZp4Y ztp-h>gkwB@!{oB~sCYvuwKEzl25TQNCj{2Ta8P2!0;gtOa#3_jF-KI7_tCB^qWb_J zA0PM^+RPd%M;ohAnf;M{^8;Gy5+OY+!d^$!;a09TEXhM8YzA%p{ln&wD(!Z*RH0#t z%ftA(Ja>K5b!Jll0B197HQj6f}!V z?7aHdISH1lI)RBlQ1c3g4HK&fkXJyVeg2P?72^O-@07jY8BwWW1rN{(=dpCJL!qB| z3hgz?-?ey=FB#dd%x6~t#Q`Bn1Xx(oD>tQg@7{S=bZBeyg9!5+FB@$(_l`SfGM*%; znt&dsa23xLXl^hb&_1AgLZ131F_Ddhg}c&_*Q`zSO);ZPy6_zC2<%*$##W!PBYHP~ zNQcCa`?ZFK8N8T(sLY$A#++k}+`_7u+j{mx=GIEhD_*mFnKU7j8IT?97a?NRadbbu zOb4O96t42ACX-ZEbJj%Qly`*$gQ&QiO_6v^yYKn282PV?{)9dB&y)2wOTZU>4LMj) z-}Ndl1S=kFS0?Dp$<6vHDC0CbKc6v2Osqn7|bA3M)Swk_YKCsRUa6*MJ!JUR_s$F1EyHXi&W>1 zPG*>D*2`FjlP{inXLd$=93Fath6kCFm4)t$FDNf6ojSXXTk$tQb@@>UgVe&$e^tlN zeP)C;@sW$xCI@Sj!+#FE?KE1S!~1uYWG)q)e+U_PEJ`Sh0$!orXyg9Iu;CRpe#SjT zO{txW&SS`G1M2hQEx{VU?BPawyGwd9y-7z*1Q0@4QGsIT>0ebp!qQU4H{QN=IS}R% z)J0ZQn){!D+}`@?wZ&MLA<*}OuYELKcYlR;8Q%}ko2@%9RJvgx2;$hP|Km&F2))R@ z@t&+dcVJ*##?VK7YW8TlveTD@{E=ED>CA;5bN85YGwIn?IA~ixI$&1Pm}FTTp^!YC+09QR3;1a@_cV3)6W8R9QK}Qsn1V zfqD(F^n zp9^~X_N|#;UQ+Tig=go^#>v0O5|i=?tTl($qki;!Nk{-M4g{RNx_UWhv;gwEQ-W!~ z{))o*NDl-jw#G_oK7T$;Bm(6%Syigu*o$!@C3peM4zpdlR(&s(-Ebug$v6a-7U?MiX<8q{>q zDgmwwn7_zuzq zJ4eqyL$6AJ82o(zz1jXeMSaI-QA)DEuU9LH6yy)r)|cZ_Q|YLwZQmF2dO;RTruJLH zK$!Tpz+RIr3Nvf!*y%W#=Sf~XF)?Z4ChTex#4`omZA`39mKsnH$ot2sgI3eu{5D@x zy1Gu(o*aOTvk~LQ+L|E-Y^I}gqN@o}<)0c!CK`K<0DUMXc4mO(@E%iNKz;=j3r9TH z0YkO}uZgWs=uW`G)Ysu@^4e1Xb#79_tkv7a__hZGhi{OX_9K@j=)9?^B=9DRP1wd}SmHr-b#)oDJUZ5!+1Ehl0C?Eium=Lt*=UZA8?(9r#|6a<@%94a+iWCf_H01BLf^fzD z=*$h+n}`)I4$cJ6HWB@lO`f2cj5_edm^N9z%?k$X{dH}tuN5oH^Lzq4FIZTpfvuIu z9@f<<3Pi~-Z$z-RC$#G=LQ`eORLwh$jR`>amoAJOTsJ}Lpx@c@VDw5sav#{ZWn^wk z0jhG|?gd-_JI&6qQ4WCi0Za^fyvs_%aIqq_--J2k=V|s@jzzb%%(;gLu$2w5Yiu%X z3;_4WHlFB{mr=llbejb5qER2eHJI|uoWY%Kj27(z1DjJPhwS&q54Y=Je-g~L*6cnG zig)kA&Dj>l>l#>!=UrAMBqTsX#K+dwbXR~a^?ZyGk0l(N1!lVrGynr-k{tt`9!yLO z_#^o&x7Q(F-w#CgS7(|FqRfqt3Y>|{0Ylo_v;Zw0WE@{%p`pNszzd>gw|ISi5K z=(QBLxZryyDzgQUb+A7ffQW(|t=H1%V4l3JI$7!nnA(JAXX6 zg9YzCR1Rp{a_8i%0g;|$`;a>yH)Q57Kz?I>j*quAqg?F-cFsY71Epn09=uk;`Kt3) zTAIC8U&eW3A$DYC0}*rvvH_hbSTJ)r5&)?>UD|$QiV!xtOiThX6%03P3U5_;E6Z5z z?cP;kHdQ$w_n^}YXbIq}eZT+x)HE*9;$qv@)6)|~NvdA)8dSYc`CSau*9X|Cw0!de zxka)zWrHBE3xZ&-wliv#0H4k^c4eYC32(7yX7~-@QZ|b%xxfJiE56)-;*&KF#iNXd z!tpK4zM{%Xi@xx+4aEy-X_<0eZW!<-geVSxJSi?Yqz7}VFAg0IXFyHuQL(W>fjHPv zASOGPg{xP)Y}aYl{`qqhXF&uP$2cc1C*!TABWt4fw%l|~yec3lLn7j}5tzTHLuxoTZnJx={rvnAGjagx0RD{o!Dt(hrsVj6Ownv?t>LBs z++kq)#6OB5QOE`E5)&~tUUYJVtf$%ga@D!&a9DiL3OOHH%bTy)jE`egvV`6Nm%WEdb)AX9tr`{x-&Ig2iz zm%AN^+_SW|e64gq91T_&NIf810M&0D<~lQ;3>qX(j*pK4H|Y?{Kf=WLq^Qs6xWQ{L z`kV^gn^YRR;A>@N_$$9*`}uxgg8+jX;=+0TCcft`HyLO>hGIwcgekuDJEf)K+MNU& z_Gj81J=nW*|Da(htOFC%ciClSh*Mpl>?&eYV4DRJ?g$$#PesE{(M7QDb8)M+=jBUD^cXg|nIE*FW#ROL zJ!nwh*URO6cY80ZprlMy7DyFLB8U|*#_oHtLLxbA>O&AL-?**FY?meu4`5+?fI zy!?Do-?MJef;q9{Uc8D6%JGpXF5mmFieufU-sih6$V~<+0bicoj?N8&ZfqwcEU(kHJ@HB^y9bRm<2<6`&(mG$*Om$#f3pHD?k4X@<$W`Aw9zW z2-yAc?BlIpDod7F=6z@*Nq4tL$6r?v1$ACrUsxmIQmG9GY<}$b9vD{Ea&3*2`8PLj zgD4ka3a;c^EFWY+em)MFKv_wm6p+c?>R96Ao&eWTLZXKfi_iJ&T0QF_a96Y|qZ%Y(%5u7tO!tH z(qWN8-pb`>hK>m7Jpr5yJ~tyENq~McP$~e)pRQi{24>&-&@)*`vUa=O1Kq$brg|Xf z*IDe-Gg05rtdS;aF7QCQ2%iv1N_Mw+5qKgkdeglX?`irWhFQ>xBwM&FDAOd!0>8QfVQV5e>8$MAN>NBxS5M+A zYK&|6fA>xV$9!({kAoeerG3+kI}{SF9XGR6D*G>o;oqpb`zD!z%KcH@L-e=y7T@YM z@c%^J7k>22pA#kx;oSPaG@Y*b9uS24Puq9B{Ufu9qq{0WZeQ{M%2uHa=`&iC_hjI_qGpwCCeZD=#cB?E=$K9{|oIS`r zQFfD|Vi}6)E@N%&BrY2x=>GSK(b3@cTGN|P86xE7!-lZA11*}BJ5~N69Dme9w68kM zKoGoI?;7A!5(B6vX{N-m%@5VH@(&vQn+gi@5MVD+@5*?POaL^~H#m5_ziZ%A9}x;P z4-iblA;-Gd3(qJmmFvMS>yTCkDINxL=DiQXr+|r5 z?O`z6f8R*qs}7j}k&2d9Ze9_E)At739ir{+Vt@oe;qhr;P37`?g$F1h(3?{VJMVo! zv07R(s1wovV-1if6}31J?FCEy#;F8IAV6}Idn#CYd6yY8b&!JB?6uD2IZ#t1NFN1b z(Dwa1Kp(6Sha+J{H3=2^>@cv&bY6YlkOT3nt!&d&2>w$vw9eT+=H2TzxBXvL6Blk# zyCgI+w@A~Up)4TPb7*tm1}x0&$Cb?R7Gayx0g&@JIkna%c;8|8SX%h`!qijcAT*_z zG|HB@atav6fyBuS+qh^y<_a1%g-;szeNM&)=Wu$$H|IdO>f^`qmq7#sskj8G4yWDl z58s?Y=Uz58uHV>ILsK^Pov)$#Ko%dZ&08z|v#LrGd(ucuKm&n++R4?i9g0U9+q^q2 z8f+DOL=Nl2l;li;+4^-_R#=`{7Ba?o8R_W#dqEac+;HU^^o&)@Ch zf24cmf4z4{AoVtw9=|J0vsCG~ajlwrqma)ZAifSVsKopRMc^3=2TlVgc*V6c@(7IE zMBYc~rAm#NKMPvGO$yxk1D9G5ivvO~Hh9|fI@>)hv@i#}`U8sSIsyERt9iOJ+2-OV zTGIk>0qCg<=Amc(%jmRpOUDz$l2)`6bZ!cC8?I?N4)r<~P>t3g_HiFOl| zw19S5yt8WoPlIl7bw7Kcc7naq#>~pX%qlm#^eJ&B$VMTz<$qALn}D-1wL_6GfF#>I zDT+&T-$KAX3_42~w}XR&-E4LD!95!;cG`U@*XE0*Tp@q_P(X12Qkfi`R8v=0kh^?B zNPd1PpL?*7v)GoW-h&4&*h(b)&)rd;mp8jw_80;_q7y^?09vA|u52~_t0NkMh zq##~wI}`^3mI;#n;06?;m4;Kmn%>&B0I9)QtyGX+1uPqx11q45B>!Ptb&uE4c7}@v zp$ytVR)ToK7;OrbXKSs7-k${b&JXmKN5)&M6!C)q8>j;?FT^1Lc003k;A6%mByezY z+srk0Y^^*-@?QEhLpA&w@zmG5_MK%XCO zp9+cv0Jz;y&2@vIcE8+>7c1dtGuN<112R{^KW@*SZsIFjSzV&0VZ)8|D^4St9k;TaX;fucxsZ(UO(-vxjS76p7IaH$bQbeyMJsvAaZ>t zx~=rOjnXiDBQ3c#afR7|pVPcyDjG;H7F>Az)#fbv#TKWYwNZlz`uklcG&IA9VxYZBP9?&MP+yNs;{9G=I{6$oVKh(Kv-~=x z;hk?){cXI)^_rzhUj3Kt%magTicgKVvle=@ZsH*JUB!br!q5o|E@kh6VV%bPMbG<~ ztEXg~ho6T%7nyh?)M!U*<=pB|cQgp_4ou832nSMGO00JhuxRCP^b5vF8eV0N5&I|@ z22W1cyRLi>II^Uo0=d5A?1~KboQZsHD1FF6W|)S2dew7gW})p59C@KE+FaD;k){6V zXM9jZ@ziY&gAV9zx5UyczKdoQ^LXlXAgyNeGD47Qw6`_C&Q&sph|sWLSZ}u0Gb;G~ z;BrjY#LV>C%Z#QbZN(@zDyNloIAxDQRKjLRZ!Dc(>*Y=1#5TA};kFA@K`!~(nd49G z1sd}UY<=`RtFE`PDLh57FZ}a@ZRT5ao5GoNHKt?;Wk_MH)TF%Iu!^H~{AiLI;)qNx zI-P7fDq=RngJt&B&Y)NEGTcrUh9=_=(LS)_fm;h1d2yK4T8&mF1g8maTp_C#&-BqH ze#{D(h@U@`EN5P@TWG7WSsjXpH^#q|SPL`Z}^LHZ8;z!aIwToCj;=#Hko`hRG9@3^S4rd^aVj$>?55D?KuK#59} zY-oZYAX&2HoFz8UI4C(vk}O#yw8RFQU?4}y86@YNW8XrY_j}Lz-tXLd|2X@P`KbeY zuf6tKRZl(jR4s)7ihXBTk5YatiYXNdf+;((eTR3mro&~baATE%i6*XRb(zk6 zTpYP!Sjf(bWM%c&w4P*%+3ypiz|DE}P7#(~!Se?21qug7dMOI(?EZrC^r3#XV+n6p zo1-`m`fE+47Gp|mTa3HHFpis3FO7{Uo9(>wZmK9K>gsJ$KG;}LtBJ@B*C=tKK{iIV z=jMIBcdp(fZo21q9K7&Bq##Y_D9l0V%3{)^eZs}f#)ftf*$tMXE8U_*76%^W=?a9P)#Hoi>OZS&WY5|mRFLf@ZOx@Rr} zFRH@D=-Z?FfGhMgqch2`o~O>$ zwK;F^DCzJa){{|HD&!kt(2zs(c$79Q12*kW;ayD6E;WRWgo!)Z;a|B4g%D_vt90s{w$U}GnBeoC_SX4tW3{D z#`=PUMd71;_G42O4)O;&BhZc{(O)sW<9PWzr%?rNVnR<$Jhq>EWvod$RpBbwi(Z=p z0Y1JRi5zK(*n4@HxF#g4{@}Z20Y}2}Xh6LyywOyEAmO|t#r4_GjVh%h0+LAB)CbNy z0sEG&!}TLGBV#ioa>KJSU_-W2s(<)|W9fE%kTiK_Jr9*iY}&#~kqK?nK#aE6Czd{$ zc$RN0&&fx}JY~A{^$8sX$H$%z>VD_Q7_|@B%m#8^dzPHDcV1dLlU!L_tJy*&*!5B2 z>%9~wCESYcfKgY*tDU*=5VS~QRntf1BGrP7tnz)HG8+%`b;r`yg+T7M2E#-lo$4&N zS+05i-J2YroS6>yvP~S?Y6#Y)N`a5=-FYXCadlV#MXWUEn3Qr0+09<0TYgt&P%z!t zGn6!#@;Fh7eR1_}i21;$?WU#+idlmzm>WM8N-X9hLyfyK_)I6_axuFiWW+bJq|;E` z^3+Ib8|4^UByySsdML$1*D~5F_`2}ZLKVB+X^PmvJAS;jH}0_JVc!-xuW+_=9-YMuZ4$ULr86Io zd+Vl3ZCfsR*2XzzLPBd}c0dWG*QmBvkHt6_6nwyaO_kKhkjsA7bX}?RVnz%%x&_v{ zz}5LmiS&+8MymRJ@d!5k-p`IMB#M*O0sChCCB_C+oQ1fROWEL788wQwn+8t9k9<-t zatiln$|>YAA6l~;5LPoEatQPk3#<$A71$cs-S-f1x8${@oEvXZNA>2JT(epBkWks= zGL&U4jKcDD4~X39aSLIX zrA30+&u5plR4TimsnF)TMo&($cMZJig&P9fYY~_h2fp+(*MGS56QE1rP6QU=?fP5EH($J36m_=6IiVm@ORhy z84!AiGWWxOUA+uD`qhd~Nfc#?EEDX09xPfHhNuWMHa3!TWl+vPs4FdYIbaF6&JQ}w ziHT8RXF6n;d4F2p=hBNzZJej#$bXc(0Hae- zAk&kgiu$1FA$^581dCdJjLfm_y7m1rgFq_FsS_oLAom515Q_P$>bn7D7%F;X-PI3a-W{lifk~tZ{$uo#qq6^22Ds1CcUg8 z=Gi*3YL!IvKI>1L_OCt%N~7p;y_GT_umtVtDjgPai>YgC z25~(C!JfV=(eV}6Pw6+QtCyIRdbX#@C%>xI5*xiZgw|;=NNzC@4u~R~Kd4A!Be{e7 zLjk*E(?A-@>7WxAODQxKu0e>rkCxsWs_8Js4Me>Xw3vFcq6=-|u&UW}QwV4%l|9!P z>LyNzZOO9H{!W>5X1%_dI$i!QwrzUHS#YB&6YahMWlhRTx=X7V?z!r?M5Z6Z=<$gV zjR_yo%DI$t0ka4e4(Nr&1L*|qT4>U+!qmq3Ck3mn_um5 z4$W0Zg#=*V)CGQB!5<8H)@Uxuw#4#%fH!w&`t!`0t3mOCYho2&6C>`Up0qrtgVh6Ba$J(4ILv2?CjCcVUSy5(B%~;nZ(wIUI}8GWF}=&y*cyQdeZqUNlm&; zS{b2WcjC?;ubZcRz-XsSXKI0?7%IOgO-@nR^*QhJkJ)ua?2y8R?hoqc5e^fZzuwWS zZnrxEfF>&GVHw|jbYg7;b$U*=Q6uMg5aASkD7}h8IBT*GDRanTwdQ^#R~oNNYjj{> zfK)+UWQPzcBZKvtdV?Xzs}<2K@q6 z?pz@XLHi0F@GhH+PePw4Dd}DcGEq_sKj2R^OyohX3_t0v6z>w;J*6E9uo0YQ)|Sn5 zYqEE!6~iY+dCj=mEch`AijD|Q-HL=t;|u6G?~UY3L3~BlE;HlG`4)?v$@!j)N@e%& zEt$4!hSG;1g2cnI_^T|}t*gTc$#F5g9K5e8L{Lq!n-WvJkL$JxX>v~|FEk2`N&M{l zyhPw$G#fa0KfEzF$UM_w1kQQpM}b#NjKq*SrBqx|61!e=tWa&fRBZ8w>lI(Ws-M{m zh%yv2iaz)ZqI;njK z=dQ#l=H=&0bFNg69;Zv`FUn!i-vlhBHLyRHb`~Nq2DO~`@m)Q&k5F?ards}rY4UYd ziVoIfj_2d75Qw1rb}cinkni}T(&Ou^CPou@S_B?b2`>9=+&V+_a4#*|I)u&kJdrDl zY&E^6^Njm7ymy}Q{L}REi@g>4NzSx*eAmU)SNvNtroF{n)3eb!_q(#1C_)(5or2U+ z?`>Q{wpT|XtvyiZkj?zX`_)HOkNX=(B3IPth6>OnaDAz`^iR)KTKB`q(%pQb1X>6o@ zhj9^j1@!&|A@1FTLdkR3m_j;}u}_-gL@-sd!NU1Dx;9sX+&rWN?6=q#jKss~mCG`s zJWcwt1%Jx_Om)vUQE2YzS^n71Oz;v~od0ZjE;z!?4zbHZGHR*z9%U}|#op_-! zoY@6V_|*Bz17Y*(j~*?KxTL;4>ztgCjE4A>Sb$W3BLkKFcPM=r zBIx^I>N%faSWXI=3UN!^n9&IWi?K?&aOJV>)v5KJ;~tWHj&qx7#}%;3Wft*H04C2z z*@>W|kTRbi4$9E@OugEP!Cy3D53(#jnN+rWF?JC1xy)?7PGh{0Cho!Ll~9H-X7!A~ z!@v~HUH4b}cwN{X*-!6<6P5C9(H;d78JTRcJkHBNcDVmR9}2NiGF)+l`T=wRiq~Yr zB+HMY^KuX@T`u!=F@t?S^7e)xejoVtY$N0A-&yqwj5|tRM?~z*af2qp90y-eAb0?r z3B;ydMmEcsTL^CS;AW2b+*ymhULBKxPw~lb-zuc5lw0bH8oc*>ACZQ)F*Manaam~} zGA3jj;9n>y6`1!yY3s;z?j(AXQl30imgU|Zd%*E6RTO$(ce}}SgDkffWtnHH73J!* zXx#(I5!rd{ik+oi%_4V*h?Y^{w;n2Qa&8S6G?V2U$^AlaoMyfJT5EYy=UsLhFc4k+ z0=L=3dSt!k17%#+y;A^Yj~yTKK13nTD4R zFJ1(#iyn{654TF)lMz55vT6yT`SN8#eoXpKAWt5 zbJ%#_>sZV3Hea$#NvghRpl1LiUbxP~y}3#Ab#YLH0tkXeK#Sfr05th_eE&SZU)YYV z<}z(J>d9#|-mYtO$Ev*Eb3o~=_6aG*wMU_$gkhs({s3rJfW%~Lw|^B-O)LNT0ESw0JHfQBD|6JW`E*&?>+Y&N4v#G{EKMMGNXDN5#gbrimp4)py=T9sTq-j>esf-38hhr$GTCqBx;L zaAj!F_9-X_u}<3lp3}64*QMbhn2emFUHH!D6f1zec{wwN0FVtDpG!etw1oPW0h$`J z5h6L9pFPDPJvOqGOI{6xrgKqVXYI%)yvAC#;~31i%a&(gF!N)-sXa7SaDiK!{Q z{GEYZG}_vlEmMJuS*Fw0#hIqNBXdlv zUA|+Nvw7@>>vAw$>vMxyV#zr%JnR~|%whEw=LDSo+;v&1;9!`5uYckCk4&IiJp7}b zww9)4%O^J?=D>z$s^!WIKi)>&MzXFzm~_rd{TUb`a{dt&L=R?ZtN1)#RrR{I|Cx(z zcjBv{O$O;fsoqalGp5K67KOZ@@5U+2h8#X9q}PQr^zHSHMSfZ9Lg6 za*H@rDxOWBg^+9F3~2SV^JI2){qDQP_2wI6wZ!ERXMl3Hx~VC}q0LdAA-oU2IJF)H zJq88G>LN0q$79Khx`0dasnIl#D-X}`D_%6mFwXX8J3wSRH2Ew;KDRagJKg@C2Fcy% za%+zXGn&7AY5?gcxLnzaEV+~`t(03tj`X+p--PY>EZlma||z9 zrtGHjKy|KK$e zPd@UkhYL`=6 z)fYIs&oZPoZBg^_In{hn2l_jP(*f14$#PsBy+)>4D0Rs&aCoS8#}7Ypqeydg;Xd_g zPf;MiQ=4AAG#Dz>4N&p=2E#`wWO>E5_;?B@8V)S?(VR^Uf5p%WvB!7{8qqTSN;aht zLv>lXSSR~LOw+O=a977q+k4iqlpomaHXVPm8=`SwfmP&}TDZPCDVfpsIbE1|ziIis zWNh(|B;DqSHeulJduwasVe_<{dgEbyur)h0bnt?NiQ@d3Gp0RRL%`nDhtPMX=ziy9 zq7a_nw_7J^j+;Q4a$8JQ6#LHzQ-kN_?wOhSo*4nF#WyP5C8)IjHYl$)>)p9u z)0e&bv+rkj90~5_a2*8qa|3p3>$6{$EE)k#=ryRz@u)8R>x=;GGS?s2!3R8gBtdqI zkKb*nA3HX9o!il|YEGzQ#@2H;f%~mwY7}A88|FH5C~vn`7UL(pdf+_e7iBle^g=z+ z%mYN^C<>|@S!BGL3izfWXavcA^QWJ1ViDnIHe?bYnl|dm(r}u=Y%=TQO+G_d)yIuOjfc>CZgt3s=f1TgIXTPOWs;*J^ysVIz@X@TlxGT?Qu^{FY zqgwVdM6u?BC*FD(gZcYhU5_68dpy**AcAwX`9)hTe)9&0S&Q~w61RTy?x|BJMNqu<7s!Dv2n_sTFnanzME55CKAn`BJ=qcujO^!daQT6{T3hL;?hpkKVX7ss zoG-hr0KF3!2pDM3(T~igmlOf1 zjYPf`Yd>@DFHT!-QB$Rc{Pb1f@~_0FSda}of^{Zy^p}4&57FUFI}DavZNyys#>U6S zmTb6jIP)PobmT>%hjND`6%h&r-aJQSvjE9zHZu3Vc@j#|$~+-I@hIW+`!`;rE*3U6 zJT^P6-ttk2Ha)${U1{<{s4P{yu5W9Z6ISCid1uE-qMPHtf)oS-sIbsfvw;!^bC@-0 zysBDs*?gZ6YQvuLzL+V|<+@wB&fxKk6|jY-)dvQ+zKi5Pho@d*J7!8YsMr)7Ag?-Y zp90M5C4|Gy-1h4ybSNE2b5tEX`0(;|2`6Xg_UiaTcUIcw0S6!x=%s- zjux0$HMQshvlmlfJR!{k6!q0I=6s8T<|n7tuLOa^-JWBG%;-&~(Fh2!LcX!BkA$6y zOAD`UvhAx9qVXp6?zxH}>mlq~0=Fr;|0$4U=~-!Ea-;r?&2;-nm!Wn;W22UB43BfR z>?YMzn02T<48rN4gl*%m?b&@)}PaY$3y*(_(PxMf1 z`UMSR)RUy_bW!}EM_OxdsN>$Io{*hxkJkP@Or8B=RYTV5I+IW_3L_n?JyyFc>NEzoTy^{vegvRA4ZMt zG;v^{)zYA&^EfEw`eQ(^o^v~V+@upNzq=zdv;WD} z$xMZ0CtOx$ZXu74DDrV>TCn@(bdNMj7~KR`Atv6rbM5{>aUMw!mAjO3sVzE(;y6)tg#(Odhypol?phHoi;0xqmutOjp4TURm1bymox)Ds@$1oh(a!vg z4TZ1KU+i429JA3<4AeNE&B~t$!_H5ekY&9+>>$q5tlv5?gHw)KSc?#M7d&Vtw$``l zpdW`Ug^wnX?)^+DP(t;pJ&*< z*2)h>NnMV`C9OKq4!m^)F8DAzu-8-4!GJhz$)NtC2c(8p4TJEGKAvL9^vgrP@3)pB zHXeZUSXkz{9JhR?QKi*EAb8<%sgCsLhw6wkXU_(#KQ7mIVM(}f)EHRQ!<(du1<4b$ z0NBe)SBx>5kh@qkAhi&?G*~_nFhnc==>=`?)|&~YX}-AoT(*DE)&lp0I;LLgmCtqW zo@kGSRYSBR2W&RDl4$C73b5*@H&&+Z8ScHz-xgymrr%%aiSpbc7$l1iVeH&F@ErEmurB>1g`K^JBYS0+L-S@z?XT3hWK&4-$QRv>!fPtG+)`8}p>6(0X$?)&H|r#{{Zmq58R0rb2o|VV-zu z7pzUwl#xDp<;v^->tkC5CTecqlYlwVp>K-D=V^6x>hS#ph7EY1 z+RAu6Wo}pNH>8TKBBID)Hn#QMzZRY4x5*N#KHGY|h5Kj~&UCuNOd({PpUofX0Et@N zsRvWRq9R*AIWTTN9pI4%p@+~|?>g_ValDFczBEJQ4op?9OR8s{iF$cF+V7*{KE zA9i~q4ZQZ@rQr_gMBs9+1ic=zfrNocdsZ}ej${n`W7J+;`C2bV&hQz`Y||>)jm8bK z@256z2owf*HV~}0o7+gQ_3AgP^yesn5w3o_iizd0TLug{$JWyU2@K3o6LJKy2$Ac3 zehTcr9`=y@-gr3FIA*vB^WjGQI03``hn9YTjuT4$DC`kX2>@AdPI>BtNMZ;S- zyDMjMa&ZwOLU%A(M(6&tZ>!X<`J`(d9Ye`qeQxbK+m9bMvm5)&H=cydiXUzA)=Y5K zHnSWi(?e{mefl$<$u>CV%=2pIZbJ?S>~y`~3JJ{XyA?J9 z^8KQj8wYOHD!4_Bl2>Z>g;m`hM>oATv>ZJ7sne(nE2Y2b*kP^L{K?C+&}FnKG#y96 zsJgu;#F#z;+u$i~+qaHegj>7oOOu92LFB>tZNtl!dB zjzfwS(kaTHU#k1jj==vs%*uVX81MUOcUO-4*E%K&yz!(ImTaanXIEuq%MY1PIxRp( z+nNkzn5O;#>ETg_=(18C2mgb?I(oPG$|IrxGTo3LHVg>2W9|BN+>@xnOdWF-^VfW#(3)XdCG@^-9rxmo_-Cs(q7Eh#m`)rijP z2LRo$6XNwmp1uQew+BjP!@cW$BqSu`bsL3jQ6hLvAzq00jd5QhD7|QXL@ovv31i($3@@5F7e7&e!EwZYmw!1$NREV_a zWpbX&)pr)KD>F}5OU0gz4vXf=a%8={kt@!)sPy!-*tzF@yM*~Qsc21Twt31m<0pHNS2T%BEiI7f{qdB11xVuRu08to8P>SE|`=}_P z`8t!hGzC9zBnU0fXDWm<>KXs$JX z{@ghk&gkoGn2qNk0CS+&Gh4vM<{K+yspVR=XHjr1x^UTl1LN{emF4JtF8Qq4B**&s z<$Jz)`?k7wmv$*LN7K~wYFuJZPYG#~88Dvd7lM-~N*+yR93!wj=5_ zuYA5j4BJMtfRmP_xk&?`l;yv{k;|Kw{j>6lmrJjvb6%w4XtXFD1l5pYW>0};BNZs& zVz|)XBCMe;m`j*R2VF#OWvQ{eijC_;YCg(4rjYzOCxdMb-I`5HCC;4VG$>*F4{m$1mE&sZ@Cx&vu_MZbbaqbZQ&vw0*l)Uiv?D%dw0;t94z;A*wkNHEz zLZ_(iUd~tKNtQ{Yk=D@HwUwji7|Lp8oVWwX>AxUM$Oes#|JEOTnwPh2BzxH{H)v2= z7>e=H3!-PH8QSqq<0(1PWf^@pSQZURb?ZZ(b7raUHhjx}^vK*=r&-Hzxt3tfh7;A$ zfNGY@6(vHF+Tkz7*0A65>A-XywlirBTMOlnS>mR;eA!4_dmtwQ-S8Z%o9lRp0a75q zD-5vi+0xPF86e@WIG^2;QSxU@vHHwzdzF@Y<;U517mT*zFWBRXNCL2o zQZK&{&1!lOVz?^EYc(+^1eAVnsg2hL2K!T1b))pYeZ|<7JC~-zi}T#F#qUvis9(b$ zp%P!}0e)E)%enday*P~CQ`MuXxoHDfMIAy)poX}Itp~f`9{oEJ@{MC0#|I5XEM!1iHg|FQ1SCz4Kn$A5BgE4B?HImX__)uP8VdmjxVqdwV}U z+9yAhRlK;lSeI8Fv%6o3 zIZXyj0WSbOfqjv$gz6W&Vm4IpRHh2^^dCYhaO9I5J@1^ypmOE{&_vl6Kxs48URLBe zCur{kJf}2X*nfMxvR)C{3W`ir0O8v|>WQ1W+&tX`4vcq1gyTfC&?K{}m(8<(XDo_A z?R$g89C3GCL9U3M1ubU{TQlaNZxlfk~=f$VCSk9f*B_b-jL(dl4;jauIJ;cet3bp3=>zli>C=mo=24>|k z#9IX*1qQY$)g3mIA_{`y{kZBJoq32+-8CVb_pAbLrTEXZC5O-}wZo1_kg>0&zG&k* ze)=>TamId~wsY{ymz%oZr^_p?iFppr{zKWhUeN@)XRFx|a1(|_X*Qo=(C=nyk|A^( zY6dz7L5dK1-q<+3!jJIHVmEWTWjc??6os^H_ffArudtlbCOnlNVhpyCv>vysB?3HoS0t;)7F2&+RrA>bd4&36%HyV7| zxn_B0U>546GkKkM(*~8weGk*-5cJYXMug|h+-6-FWtrB~TlUVq%riJ zHo>O;6ab~2bJsFk3n!EHd+Vu zlF40n@pLPHQBT|%yo_PKt?7?S*7LvoFj;J$TPBS=;IeQsC+X9rYPEN8KprCH?jLgW zYyu0dJlam;GHDI(6HnZ$!rdMxdM3M<)-KE)x>YDn6xt$5lk^TKD0j&07x{-lwkYo@ zHEOKdl5JrSeI-uqzY!c>6oj|8+S&NQyDtmM+#Hmn&%Zr0o6+DemMq!M4$~Y|!(#Pr z!ZYsiM{t?9QDjZ;riW?ds=e1EPB5V z{rF8$6v$hO3m=?1fzmiYLOQLk3Sz=gzc>C;hTtTg^BCbLj~`2I zMMEpRRY(B5D%O$QY&HBi`9H>6yJ;t7M}8D)X8MBy?-j$y+}IK*IN|1mjp`imO-ZPp zUlx{#b{L}ZdHgxwe2`ZAug}Pxzu4u}X8rz-kFdArA&CpTBQU~1;a8uVR{l4pq<<^q z@cun*)h;t6FQF;~f_B)z8|dm6rdqJ z*Z$)-Xz{8!B*Pq?a%Q1)VC>A3(0Ne%NyYMD2w#H_Dd{s#QM`%;AljQ~4nH)xM)}1c z2R*&9*Oy=Y10+-LW;@#ce}syrP8Zg@_U?)$*nOMagUJMy_w$>WSjZwz)I}T?q`;ca zvu=*R;=**3yDp&3zab`mV%ehxHEwU$0ootT8Z<#LfLLLR`cIfnf zCuKB>&xU8or}qux1j7c(R&O3<55t|XQqe0aAia+(|5J2lOQ$7II!3i9$EU`(=j^EH z+ByH22fTIG?w%oc=euV@6oVXKsXLGOkzb>ZEP$ZA$RFNI#wH#n52S0 zD3w`RHw>;v*Wi?sN_1<~6Q})0!;f2~94_%w%`RQ3P{{QGfcSGny>+e#aOZ;!^J0Gnh(bbT- z8e>Asi2+gYV;|uq)EJeFL^Tv={@rs{9C=Plx|BNS{C|=BYx5mxR>`avBIXwXBtXA5 z$OLlR>}ahh9;qo^*&ix>9tOJcOz-S6u^^)MT_w%oz2jru+)6!9R1}bSd7e0R>Mn(( zf5fPOWL9(!Y7A(2^&6D5epDF>n3A8_FIxTv<{!#^T0k|!N7v-<>HDmp^~g27tYc(i zLfv*t7RtHK1c3usm_r8OhVde(`|8~D^E)Q}gQZcdeSJ{2gG%q%$2+d}Sckg}m9oe@ zz_0{tfD!}kkcV04S?c1({A(469$yf&R|VMC;=FbfLK~u|s7G=o4py`VEaUXqr!NxQ zIu9L2hAd`51hp6XdK(ce;_m0jP!+AMD+BmIJ<}akyo-wA(CB#StL>^xiUWG}j30rI z_;Dty#dZWs@6MwHqN|)Om=d6*!kEfx0zT8JUgGGAWn!nR!gQb{MSK_S#3`eHu>n8d8mu`2Y*=)Uq|# zS}f!SMVDTlQmmO3fn}1ZUp~A@81?GAy>g)e~A z#7skEy#nwjo|DbX9Xr&d|G3*WK@iYS2oC;UF0Qx8YXPUbe)kB721<{$wTLBqvMpB|H@{J2sGtW*a@MMWyb5ncY$JTab#j* z%+a;GdKk?+&-}@tKtmfM|BIp6qPlwt-bVTIx{ZRKNU{u_QRMr?H=<*t+)u45q;8!F zscBA6YD7#*fBPtBBu&HDF5aq7NvI8Z=(XS3oEGBk%PQg|F7_VYAK_9ceusMRRrsKp zhB!UE=&{xe(6i~*Pw+t50Z8?J`*;vb`4v+poHriKi+wkB^3=)AU9&mx&|~yBons{F zoSGN{I*fZ7`1Q=|_0~}k^-Bm6rqYbqMM|U~SuB(!zxu*o7AJZ2thF@)DtaVajgKtn zL*>M-*~tc#RuCdZ-Ot+eu4*QXf2&NN<(zxx>lK@XV^{~(TjV+~dedMi$6=qTuQWlR z=CgBD6(r`~Z4F$bSmU&xTySHG!e89W!f$4?L6OY0VylT79-G!b5zCl^R%1-bjga5; zyzHyt*8CZp-bt|Ldh6ar*7^b5FPD~Tp)RT|^-CllFgL_O|KEJ|$5H70$M0l8g#b2T zB`%faUY^wUctCM}dT&pU$-q)q9fu0wH^S1bjAv;hAi4aUn~Mk#17!DpPsj0%(e%_*oBX-Kg_>0Ud!u#{gsi`gMzH za;w%_-Z+1@D>WBgI>Vi--+@A@mRn9j+W#y`meT<;O#b&hmuMjP?XORCZuzzi(#;rt zbeMi~>=2%?wbO_f56c8TL9!*B)9PcYOd2`I$LVE>zCDfc3uiBu+wM2rGLN&NuuZ9m zsgf>rp?sj*y9fISV>{N+;{zpDdFa{8^91#;sh}EiJQN8^?em{BI$~fSk|!&q?{3UI za1x~g{N!E*GI?)OhV~M}QYhhUj^5uK67Nh=tqLWNAB6IS{Rbr))9)%lT{1DbsnyqX ze3dlgPe%$yWE*Y3)OgF_y`1M?v4>?G-C5JFk7DE0{^sNW`RTTx)RW&ZXJO=FU9knoeTDBQ_)PKm>irzoT!?4WJ_x*9kVuRiLYPqN2ZTUDjJ zZ4AZPn60KnOE+bv-t|ni#CPwegiyk88kH!v?P^V2b!%%56tbM1kTB~g!-#2MNu~Zn z8fugQDypXt`$A(Q3EfD8HfXn*_G(?C#B zM@PhpC2T_NIN&>$ZS?@(b`r)wyNSFOI3DY2kn?H((6k?U!UGq81Ek-!35H`^yhS_e z#(DCLBNOr~+x~Ob%XblSIZ&4idDFSA#t#Nwu~2D)E|SGjsh=t-$jiI_gAjG)(=FX6 zrHf_zRfn|~v=T9jWkx>0Wk6A1rlrpf&`NO{zTgE(pj7P6CfU6SU@7Xhy0FK~DaRZZ z53~`6&#{i)og`9GILE6DY6L)cWcW)*-X!TvC_@Md6gg#~S84Bb{sAgV7ASQ@eNv#0 zdd!hz@=@`yKm(Tf{N_o9bDOPzDxE>H!K^)Bp{iYAzI8A?~VYygYnHv&M;} zHLXKV6s~)>lyV;U)PRI)vd z9)KJyNo3PjBbqo+&&-lC$KKBCA+s@SU+`f zF0F0)u*RTs5Q=pgA_WQ{QcY96di1PIQrl&9Ovv)4?YN9^SPeiuvG^me2bl;~=A2G(IgO)G{V6G&?IjCVfo z2O9C!!E(K^A7x=-VLUNrwJYaA=Gl`y`;xxv_v|@!9!fNBo5x-k&bXD2ZI8O=kOepl zLhYJ(XB(b@)^Q42|J`_5j|s6wP*A!1?``i@rvKZ>AsJ`MAYBNGbP@kpPKEPn&dIT! z_6O|f7C~c_4iNs6&bH9X!{ef6a7t5p-$w?o-x9pmoJ#RdwUyEXiAeZ-k!t?W2y@89n{B9+?Z+@{_A?rj?;f;C6HngnWS zN+4kgur2BVv| zU#+dl8{-~4Feuy8((9;OOdb)|Y8b_WWh5~_Qm_%VhAd68d?${0#8UZ!E6r|x$22{5=$zZG z-SX->NszR*ex_>a(}5z}fdZvAVOxVP_9TPXVU2=&j-wZ3rFeB-;(lz3D-~uQO@Qky z7~oq4Q?riMsJfooG>LksBq4kW>h_H_>aIxx(xqu;vaRTewQR6s{9-sc>j#x*z6-76 zvqC;6RB|ehZu0P0TEUL#r;nGEd7hlIg9a$;yY@o&?-viCFWMLlW!Q_}64ZeDR4G5c z)NuWYVKm!^?Hebk@DHO3`dE1;^3*QsZf9Ad_rK$;DhqE(s)(?loFV)!ILXX(=o4L1zn2nl2>q`usg ze%rbvLH-@zX9?}q)yB`uo96pCd&;Z{cD$P^Y3DaW+gFz?NP}u>?zkm4f7AF#v9OS} z$S3c9Zh;~EnWe3ja<qpKzJ6_-AGwD}ux!SaSRxxv#p4>RP zUDz;R+2;G#;enziC0UV^W6Oe=;h93O)y#h8qgU#FPiC!v5*FH=@AxV*rlc9%CW1u1;gwC2DfEdCc=jRS>066b;+>ik6BpuxDHqmW1ux6c z^iQw*E6Z5Nk8GqWsY&dZJNleyKj89#@IZ)|KnMR<98Z#0t{E!{RQ+o>As^l5<87#MxM ztG@bvzlxB)!ge7~%Dd_j`^273>XgmQu->31ii%7^nq5!*Z0!`aG&{_}6`Ju~(H0BJ z2;r6o-tVt3ytAS7^86t|`~1r3Z)(cn2wE8Qo3AlxGMcaS%>%GBibhVi|1gwgCd@qzDK0J!xuam; zp6U#G7Xlx;Ma=XwHfgX$I~7*e(vpRF{|DP|N$R7gIE2RLis~Tzyr%1`+xKpEEmIGX%gUzvMR3?9hem3`>rPEgLB*}jY<~_k zX&GAR#_JCacPE53&Ro5Fol%(Y+U`t8RNMthwij|(GkHXdQNEY_(X#){1;zmmTFbVG z|4{O}sDEG}OSK3}#@5F*ObQ+6!@lke4#x81^V3vPjewlXyMG^NPAJvx3aD2!_4W15 z5#86Jm!+?GZ*=j7zyjOLjP*`!c*$7LhS>5POSed{-t{DsksNm8QXZK4=)2nMpW^w^ zc~^sSCz;K=OQ_BEZym>9n`Lq5!&w1r?J^z4!uJ=LvRla+K(}qw`*OS$DGn13n z%-K(PbZY7*(%YSmaOC=*Jx`IV$$R?!s*snjuX3^0K9xRmnR7Z5iOgq_E>88>2nZjS zMk>>b&MH=SZZ0n?#5 z5rf}c=+Ez5A+5^A!_-9|tUj(J&vaZj*nBikf54qOpHz~cD$otEE;;=YRUvgeJ zkyK))DSx&APFK!>o*uV^&gPjM40llw2)D##XH!3e(#qgUW2d>D%IKJ_<7Q7=>M(IC zW5)ALq1c~d+keSt%45GLBx{g0Of|kQ?e8jY@Cw$~_7$CVVb$`+Vj^6Rg=YTHIU1kJ zkF ze3iqTBn+iwJGY8i>E2f{I$SmHdP5+$b=B#MOoVes;mt!w`FjuIinF=MiHyAM;J^AsDcAS$l;yNM;zUYnBN2xe7uB>!WoDsJv#*hYiwitEz1tL$j z`;F2y-OeZnGyo}xyWTQ+qOaWq2}Z)sXN_7vZj3k(x9eUToUUilt2Eo)3D1_Jm|I&` z8C^fvN-X8=l8h+Z0!?7rz;9s!oOrjaOmK=n*nX^0?l1a6Iqk8MogEjV$bP%HnC=e7 z)e|KwOy;DzGPo~dnI0iM^tbzkIWryMX2(L=MalxxA-rarKL8(D{H>$!F#RT6G0ZU7 z-KVBr5zA#Zn7pvI*1(9=l!_(eyUn*(R6IN%T3NC~awU*1)zkL|*KX82`qh0e=I<5@ z?PhQm>9JcJjDtkC(l#Y8QoT*KJ*q7sY7MZ`^9!O&C z5D0!`^@%DsT*J_i>vnZg67yR%jX4~#`&1LS@ z2koHV=-(6ot10)Z{12{(}OzeEBPnxRLx$f z8W~@bM>_J@;&>i8koQzwpp-_cQ$@_=^ei|@LdZdO$04|w)5C5Fb9oy7T6F`CZ&fOM z6LUq3d1tJb1}|Pt>b0F&pav;|=P)jtl6Snlu{S+i3vILBqRupWTubM9C0(4GS@Bt#VF{X^6y0dec4cM8=Uc;5zuc36gu`-J z*mgw9-#f>d?N7ex@W5SVT?1sB7L76(Ody2|19fy z_Q2y~H*yt2!kDG){|dYR2Eyo^YjGOo?@l3DAE+&Csw;GX^mE5XuWPO|LbHTuj21yLICL{d{3=oi~YYj3bWOGG!E?9k&{#q z_FC`Y2D67np#|>;p6#2Rfyr0)2%C+bG7>I3w*$VKwd-pNetkzeP__M_vI|ILes>5Vaw$#5>BUNQKgid{mC;E4#b&`eVrD9;(AwHtN0F zU-{z({M>Qc2B1Lm@TinBUd@;9>|D`i*OY>6QSjLa3nR3NXX&Dz5C0vW84r`DMR;)- z*y9}j_jw)K;jc5oqjJkiO)$WcO(kJ(?i-Jj`__IWTyPVDONm`qPC19S@V@T!eVS}7 zvZaBPTyW1oxYkb7*@y8Ld$~!f9od;gQD2HtloAyk24Fc{s@Q}B9SUWPkC;`T#Wy^^ z1ANGa;6*`GV|4$aQOvVGi#M8=&u?qP`O9`>oqX)EtLyWrn-dw`-Ub=kDG!nKOX3;& z^%7gOu7w9sjERvu3hCri3*GFEr(Osl+2ucoct4)1=`hU4EuanU| z$2shH^c~3~{)=VpUzmo<4N(&XpZoE*^iMO%d5AzP}9(n!6BM2nwso@zD zXeKPS7VcJy~$qUq@-Ce;)d$DmXxH?TzGou7^DPrS~e>e$&)ej)_A`NAkIde5WsQ{u~uB5V|1UX=wybW5xCx%8G(V zAolMCrKuzFf|QKlH2EyQ2ZNEux)7#A)@EAYd?7^Kg@JAsQ;U<#jL`N*e-mawQ0K9F z_WY<^tBr(0>!96Hzg5?PoT@6hFMd1OS&n)`lfkH6jZGMI#9aDza zoo=O*WD^;ln`52$s8H6uK!b&ts_4^6_oA*}OO1PfSCMjUYwMQw{1R^EV5TF)^H~YF zHk_FbZkwNBVni&D#0xkK2o7z}I;MFG9!X7uO`-I;EV%6N54Q=4)Y8`8pW+42&P*Gi z--lufi!CsABdt7v$(3$6)Ah}ID>QyOw-@$CuLmxqASBeNwVp=x)GI89amr(JaK#|GKA$+y4BvdTde#r*~)JC#zFp2BO9^X!?<*M7PAx%#c! ze;k8cXENvieaPxhjq)h>ikHVdv{X}3rP}bLx*3;jUYCO|925ym=E;tqWm1pXl~vYc z;34G+k6pX&>RIPxOe@{#|I|&5Tc;qDA@;uUvaCe38mU60_&8JZt!tyQjAxhcN0O$9 zxa*4Xma9!LoxbyQapAeJ+u}RnT&PTo&qoQ^JWvOpF_Z`KiwLh{dwV-yn#cV2zYY^) zaIH{kn?2gi&HpGv1LT0Lg7&d1r5T_smnJ0%vZrVO5q4u^qoUMFig+qII_rdnqkHH( z&^J*Edhdg;4P=)19T#v2x9A;?l%PA{0(=pZ?Yp(usd@MTDxYkGmf>J{l7Qo5a5^kA zUP`qH!X$vw>;l-+Gsf{}#@AUTh&nB&-)qd-l=*oMJ}zCnkx6}VD@Q;5?m}Pd+S(c| z-=|Ti_?`xV4c5P__NIv|mS@klvM|!qFGCZZ+<0+R?tWbA(N5-UUw-Sx_#EGH=7Lqx zJSGK8Qk=ar)0!3%08N3*TXcI6KdCO5fT1sh%Y0|1ql2oh-$+eGD)C=};HZv6!{QX5 zDL3)SURKO)#Of4zmU&z6(K^Z(AbogSql6q}qRNhNI@-HxE7(9Es@7=14#-2){!Z&( zoRY6X%oEmR-4S^Syq;^t3#IBPuAg80g+I1E)2z~ZXxpa0h-rVfrN`#)UNY{tZY!&+ zs@j%gZG4Wx!>p6bl^ zbJ5kvcF!+7Q5NI-ryz|%eDCKP^3q1x=njP*N9&=Lq$C3`nh)&P_SpQ4>vt>}y`PG~ z=Nns`>`61Z2UbJho4#V=$1nbK1n#joYE7oSb5NHhHy@iKX+8%viL`Nd@5;o5`np-? z6)|SU`g^3AndU#giHOwC-(*Ua`^9NuCxGv?A|MHjjDg8i1SIW`-+57W)%)o~xHbR_ zcR)v&LN9tNU#g{QFKk@%CzhXoZ&D>EFf~y~RE#f3u0O);q+)GtQugH$10A(IrJonF zIK6v5n=#XjoPq*D2}laBHlB0er($e*Iqtdj&m%!ju_;MA@-TU$>#{7K_kDG55Wis= z<_m@AD!E&NIfbaglIC~1S?GHfSJ>M`7CWjB$})WP+*BP*cc=R3E+zQUNl(Gz{oA&O z>g*1dr8QA?`^J34)b3{ob(*VMe2xDuOe#G!yIp4HDW}Sp{^xss>&+aCls1uzte0X2 z$&PiA-1zw8LbFWqcLaZ2MV4XUHRUzJOQe&p?YiVsUUR)x@e-8|a#Q9jUP5lk7TE?T zgWe`d+&u?N4_ohF2R6erz4#wXA%}Pykt~_T^m9?|CmQG|?GcC#9FFu%kObBU+@~=i z&^6BH?8|THY1FW=HMbk?|Jo0&jkZV8_%WFjnQwjY-zRLpGD0UQFO_`0iDzF*3F{Ka zH?e+$W@yiMTb;53f7&SQ!9pQHlFK+g`~9}@j`5j9f!*En%y-wCb%cwD9=m5fyoPoq z{7O0Z&8Z0(?eR$R#Xggs)e%ND@HpM0IGZ!@tRx?;64(Tl9z2t6FVlTYI{&@^T*vtQ zY}&tBAhVC+3c33M36F8Q4p+pS6+AgB?OzR^R=g~jaqTbznKoqpu>|?LM-R+@RvJx< zKmK_zy%B#SQE+{_hp&5amjm8rZepVN*;uNMgVurLPHAf_uO^aquuxVPeEgQzecMFT zP$55`x6FY30Nk4%K6UN>Lg$2&xrTfYg{**wFp}8{;;ML#Ges%CDjJN@c=q#O!nb&xYVb+alUCgRYfXUq#Wd%8KQG_KzRuSBS(4`Gzy7zM zsr77Tb3Hc4gQupavuyS^RE+0Kev|(z9v+JS{MiT-|0Ml)p?BEs`D&mA56*V+QX-4aZh5o@2E3ig7i$PZjc`x@RqshK|@9Ywg8La&f>PzwR^!r_pm1ulnM4DJ$O@r zz8g9M!vX%u>|okz(esz4-2-q7^D12#K{+q=MlY1o;it-`bZrGW>6f##$gI0EoI7j2 zK+_Z;=@@W=EwLG@G8wX|GO!&>8wvq(HP4Wbjd45)z)~{JrdTE``22x>RHUS&{-Iv( zxWQb26FCh^mO;gGazR8$*m)-HnNBR12B%c!E%!?-#uK9JNSsXI>Y;m?U5r#%fwh^ z%<{c5&q+gd5Xo(u=;7)hD5*YMYTRuTr)LiMh5L#B~7##@K{bD|(lN=g<7}nzX!BS&5x6dDl zL&d5nLjJQdARZU)8uvz%g$ERlt=h6QY-P8I?Dq>_qYWzTo|fcP7q}}#bAoqU=OHquo9{N5W3u9L zx+RqUm$z>D`B{;pm%pV)d`ZsFPY1nAcwGT3Hg4fzpQRC?TNhA#0O|Tem$y|P1qm5F zZnpFMM!Z$@C;TpFqM&%eS{>m3vM;I6bcf{sG8xr6lV7=|yFsZUfMsGVO z7~ZZUI?NTrrySzMrksGS#O>*p5=p-@d;?`CU^ZIphHe8j0Sr#`&(;v()nLpAw7Q$C ziF}SE^t8apz8v5bJc#Y(rHiGRe zai=z#k=F!2UPb{EhjxORz9faQ*mDM_cbZ3W#(bZch}8B;P4bB4w@yuFC-FXTnhPX) z7v&$2U?g&Mm83LtvFmfQbMwc|0dpECbDc>{umT*8p6?UL9U{QO-T5)PJs>jiw$oN! zW??|&G+8T{eGbK3!Zv!!W~vy(JYs0bcPX>dMw<@s)=M#u95=V>v(~LPe-1#2Zt1gp zmt8zKXX~z8r&?X4Kmhcr$>)~cYeU0h>Z_c7KKvf~is1%EP@Ro@Wkjx@+ zUWK!Jax=bX7cb(yGMTT#v^P1`cO(=HeLLS%fIFOThtgsA(~_TP0Kl)bRiuQor!4O85hS5*D+Y^Q~fnng(zgckKytXcJNLn(A z3<1E{@<3I>qYt`B%7P7v#X(OPv2YJ2ynvy*=ba?wv~l04Hd=L4ME8 z9r=}Cj3&G^$>v87ZSbmuJbH@C_G**R?}0!DYh7SG&Rl3R3*Q<#Zfo1Ya)#CX7A@Zm z7T^=%?{FiOlB!x`Mmv;pDI)o667Z2bxtb_*i~WIz)7;?1_>QBtmX;NsmW8f@a{qnL zm9hTQ4o2v6LH?ST`P_zcP>7WvxxEr4&K?ic?{MF*9sok*5GXEv;XTXk28xwq2 zo}$OI;D>IjGe(SRdH2`K_C!i-Ss6PL#a6_=7nWg*a6?!TG)z{7RDs9zhIB^oX@u!( zWQWX_*mJv$Pd*Wrn2e_Fp-FeMG7fcNDQpbd+ieL%QIrwr!Nkbjg&#Nl zrXH57mO0#r9Tat4&p{A*>?NWgHFB`GzxdYe;yN7IaBk;x&$;0)Z>&!(AQ*o4Ln8Zz zX^b3&^;Zs(#5`%~Q4%W4?;*_!YyzzL9DVU_Ji|J5UKHA{SW(M{xp2){QuST^MuQn{ zL&#%tr)x?kx9Io2Z+~JHBiWx%_C+{QU*Zq@kcs>7Nv5pj5cg9J@3bAQ4nZ^p5%V-9 zB$AAa2CKE1hA-TpVrKLsCnnlC=L0A%wnq^l7h?HgzLc{v;$LJ_rmZ?&>zhKaoIc^* zvM(dalr%F;87r$qjfm3#?*K&{)Pz8J-S1Zt@xJ{7oyKHEm41ttBmTT$B8U~D*S-o4 z&AiOw#{)mpAsnFI88o8bfz5{7yHRf^snj2aBQ!K7cI01ciA&68#>`f)Q8gzvf|?|V zQX`c(tr|Qqrp?}ctiewvPYnYYe^y_1-H@TaSDsxcMfQ)=!6Hv+ARF4-j4*Jks_uBv zQIjajKi3b%I&~{eI{VjjBU4fGy(A;dX`GZ4q3r8Bo_n2)U*tvgUNF1B$^LAN8MvwU zyV>LIkIYkrx@AGtm#1I4v>HyN8S#nY&b3(_*(;PDw3xwfJ~OPcoCPw!3Lg^C8M`H? z*gWn-vbAvT!Ue4Dx7!Jnjd70{u5ZCPODh?yWR{ti({*WOz8jFAE%a{{iRlDwSJB7F5aakh5!gX9<-wLV2;}y^Zejra7 zj&WXk53>N|r9zW#N31@RpchRx?E>jk{xGDl!DkP530R8s+72oakgoCKQ8s0CJiNmR z!i1I4L(|-~KuBrgS|m`QkeHBMZ2$a1PgS*ZhTDMuwx~arCM87PbZ_Z3e+_nXpoR2x z54&cXK@FQ2c33aSkLnzdbV%*3kW?d?(9f6$TktG{?xh}!WLHSR^Gh@H^3H$ypiA?X z&+WIjGHMhT-w3HUm;|v32@AIxRtk*ZPdChtqSPTpOh33y#I_UG0((*o9334Cl21@9 zjoM9gbx14`@LfrJHwfk2BU$%c(p?K1rdz{t0HyFva|+`6uSb3byRBW^g8y9M1VgsC zR(AIsy*MchNSK8)p*?Yb47nf+@0D*pGP8o#>f+5UrTC~oMI%&MYJgnfvwKz<9L59o z#Eakm(%Gu_J6N8M4$rogfhr+zo zZsbK*>bXQ%9Z+FBvJUn)?l9d+VUyj;nfJx-Q@!nls5;2cA$G>Qvv6gW*-OJeFpyrz z)YkyXt$uxSq1d4%k_*P;`N8gr!*F<@TrD8U1WVFjdJ&EiuLlRmoF;m$kC*0EdeMCl zm%H?i`|~GTHho_4VajT?@bIzaFh1%ZfEK7)1a~(+oOrnb@~FwCnn2=v z@dklNb9K=1()T3p%~!s@Y}DE6*`F%x!z~O#9)Gmk#yi!)hwm_~)F5i9QbFjvGC+vC zl~sjXkOnn}tkgbVBu#UO(f%pWLb{H17@B^Kc`}s7f|JNto|phxf&tVC4_neQyI*;U zyMBSUS_@T}o~4wdJ!A6uSD1ku(IT;zDbXIk)*LPtZ`iSHEp0qp=XzQZlbTpqxDgl0 zH@*zQ9?RY`nXiElUD~Se>{Cbrn_jY5C5gIT zL~0P6wwt?G^Aa9;9t_+GnMV8lN_qkgu%6^OlEX}d&t^+ExA)u%lUU0;p4z~Abx?~@ zbL*NlL?=-!Xu2cy0)Rl9=GHR`!9UR99$svrjtp>_A@!vKg5_jkk_#3 zyF#S_1L^n?(=kvQK^7zt)@D%QQPuIeU}k(caC|OS2kY|wd$+;``U6HNQ$_-i;sM$X zej+tmmOR&nJ$awbCx~qOdUqANNB3e;MWMQzgv2D@vq}4l0}e(8MWDnp5E~3=Di~Es znvlsy6d05RnRQmKamDop5k>*Rq8GE-g3io{J`dF6u2cK#n0N+($h{hZ zTc?Py5aiME!%z2&Fm|P8MCc>A^uE-#W6OSN~g6jGk8lF{=+N7)_+hAuPLe15E;4}w#oPgK*DGx8IohHFwY8pKXYNVNi{7TOWlR96uVJ}y zAnY?Z&z1*0zxC86BqU(W%wV9}ZimFlYNqnCvJ8wtm0R~;I@@QciTYhukh+2q0k+!2 zBE06yD?DO%3sog(^J!2%8TyUD3?R1;$yBjTPm}OC+1`k}BU*49Dym+Oattl*YA*%i z&tJ-`hblPT1<;T}Ol1qu6L3AXvQNO=DMP*RdAueWetTJ)r|5o=faiFwq<>is-Lh%B zPUmVZExZym6Wb6(Mpt&{zP!qZ+%S$mPZvo4*;#Xbhj2U3lXd)7^BFHh4?t5wCum>I zgKG?4>_a1DDTN3#J`b$~41r*89>|pY@E3p|)HkS#j270bk2hKmY`qFc=6Pmcpd^t! zKF3za%YS%;CT5Pc!!r%%Fo$mx$c#t5N^KkS7;Le-Lw${f&tk``DoV4pO6T{c6mD5y z7REnX1tfgfcmLQBLh~R?ijvax;=y=I`>VGZXCEr~q6*GWx4$p!8sbnK`K$*bZ;nUI zF3m4b|MJTL-%L*aq^<(uKHZ;vx%#e{^*QCxP>^;S6ggsHcaBO)L6>|zN5-JilUQ-RnN+0U1lagW6jh|);Kw6e0>$f11f_k@O(o@`l>5E+Nf{!CCP(&l`# z{Z>{Nimf&pm9?gYMwz^)<}}i(XAd$?P{xYycEeI~>zDJG?my!rx9!T;goeV=%7Fe) z)}>!a3lR72$Ca=Pq@=qYj88Rnn0l2ul@~^+!yH+;d6u*Xe|pT=%SKV zWq7TFUK26$WlHPyOO-3rt#(m^5DwgaPu}QV{pWY3ZWvUQxUYPm8)fL8cTc!e#6wwda z*+Kr5UP=rsUxV#rcNARHd{HWXTRE2=$w;|v6Q3=V5*fz5#P|2`WJ55RU}b5k+-XRoOpdWP~?-}44a<&~R zN|oI0x<}$X3dI}xfHB%QCX>kyG_+GetN=A8qU~_CtondNsBR~LplE2TDn)ja?pwM# zpb3e$T}^>Qsy}ylvw<|+2stQHd2sLo^1-nEXK6HkX3g(2H2?Shm2~O4 z+S-JVC(my@!CG>~V}gQ%=SQrhGUzrmzcr}PTvR1n^~(u#g4Elu|qB_e6h{bLV*xqH|k zLMa5T8TNc`S)4Ic zV9)Q#`T5ITb&)S|J^m*1rz-WcWquTjo88R?G*#N_W}K=d$Mi)?)wU1M=t}`2xX0B1 zIR?tXEkgB$Udp-Y)%tnO=wx8i>*h016JJIaDP^Ao*cGDZ$nL9H4t?O0jyu&hHg*T^ z#V_7X6cv)L!(gW16P@Jf$tUFgh;*Lo*OMYA zJl{tW^ZZj|A06IKYAUL~Y_3Q+^*;6i82px%USDVDRolnQ5*-G&7L-yQuKm8OVOu;{ z-_pxvP;z6$%L#Xg2VtyA+gy)3f9~keB?uS&Q-ea@ma2wE5y*NdPm`1W5bIrT)f=vK z+MesS0~7%o2QXrS2Yc&Re*d1dssMc@U!yQuQs<@_X8Nkm7QiO{Olx+ zQ_3B?5dh#HmR^vKg)^|1>#~1S?vQuLCB9cI!69Z#KQLe3Co#$F0BZ5<6yhT}h~gLD zV8SR}lHp*5nI?g9j*dlNF317#)b0I#8(_^l4;~M1#EZH87F?I$CPx>ToPnnC+E_}g zOJlgMcDoED<^W1JzxlH2m}>bK73HfrW@f`^axSS!5UH`9qsa_vg6TriQmXGNT^-ms zo#0y})~ZN>FVK@>(?Ndt{D3;J%NR4ZW`|Aku@2Xd2u?0e8t1=MXWV;ot>HB)H52ja zy|8C{Ok>XD)R_)Lx$!<9|J%ZZj+O4{JUuOHU2gR(^O~>qLDbLfzWFynW6k-f8qwFt zqLum}Z>>6o%CNJ;Gd$4H3=nC3TwA1N5o3y(HLDLQ=8}H#^%Vs4Ht9@MoaETsbrJi1M}bjt@nbH7eZjE&-Y&&;?W@NBeT;f4Qj*#%A>&G<(D-8;# z=Z;k2XQ*S9gjDHJWSC2jZsh}g{)?w@K$AZYUk}ac^CS9QS<=uUaGs8?%53zikwHrj zq~;>SFyU1mn{nyU^lJFTX^sqst5q0F+mWX>3bkr~42RGRtfcgYKvHxnw^wu|feKJ; zszVrK2(hfvj*=UNBYNnQzQikOxY2n!RgxMSj(a!mfrm8_p@{?^H0on=6vcV>nyOdg_uTc^mdS{y^3=arzZ`^1< zZM&QeYPcUgG-s;P9h-V6%V?Lc(9w->YmI;7UaL(2vLsgRD)_RZ2O=V%j1HDnqnPG% znJDnz!MkN1_75F^hV_+GkGoIuXtkItUhnD5AxQ*DVHBr<%g(njZy0VrvbYY3oGL?P z9IsJ;>ryF+H^E7wpxGWHpOPr*8l}zfklnBWi&c{HA}l$c<6hgZZ-MgGd^q13Elx*4 zc&?W)`(P@GZ)o!H_=dt}1?%0vhzMV1xpFas*Q`Cm=KXCafh}Ei(fN;#_^>lF%8aI# zo*9tYEn~eM4{9*U(l7TmEf014E`mYDFq^sR%(I!inF*y1hlag!5`oi5gDUx)GxM0->x|%qZQujA6evKyL8iOh%EPcta{*zU z1k7Z65Rj{v^|&Cbo2M{4@t^T*lo$6xdu9YI2qA CV16G|Ch zRM=i9e$5X#JgkSX(Ji-V$xCTe_7!uD6445!nAgZv<bNM zQ{U5|T?XvBTQHc9=40R6>2zIOVIUCj{04!1wY7N+eLT2_q_nbPx2PX0K^}lVzAE?Gh{$MH&HBtr=_`5 zH9G|6TNp1c{$e>khl}^WOF*&O4+527HF^Da7dG`;?6j>H3}yR3JFF0W9lwOwgD*2P z7n`XOzz81B2z&d`fKD9!Dh;2c_P1AlVSZ3G+b!=vF@h$3vc|-EEfmsSY zbL2pn?oZ*ZGqGy@)Np%G05p~vc8!2{SKF5IZ-V}wy|Y&Yy?f1;mu(Uma8ajAxzv6z2 zg#3**LS$xythG~ORA-unwPWa%wV$9E4I-OIHwL)MzB z%udg7{kq%OTkhz*9pRCyK+z7Zfb(#1*s~vt^0l>pIdIC*!Vu(O zemCw-x6!H}RH=brIa{wlZ@3FAQGze=F*&o`fd1lnwfZBr`CPh~_ZX?X*csky(2j{e zxYyua;Ak1})Tafll?C8@av=f*BJ!G3P;XeIs_LH&3ToLbhbK)Rxh2Gk2+q~UbPgr z4F9^iS>^Y_04K?bN7P_d{6c*+p&3=Z1$v!NOi?r?wym@qZX@+k#gK~&SQ8A8eY)iZ z&R58P*1h&;QfS^IROD_=4l`&Ppw-0?Hx<>s6i-4z za&n5o<#KM7^TZaYATDwn+OA%$0~}{wV78~gv(Qv&9<1{kG4)f>$+YLSZ_>PugJM&8 zxAZXu+=@|1s`#JvrhM_^r}ffiV)woS&BkmhHAn-r6BIKh9D*4gOIg1j=mwBqYwfW^ zY%ddpaU#Xw>Rnrb0d>Jld*sC0L^@0g#!qydQPj-w#?32bRR%fQg1ThX1C_27<_wYV zHWhkiTW+0b>oMWctnwrmeMEC0J%%4)2V_mGZK|DXjKF8z=<&GQ|jtThwtqgr^ k^#6YdYxV!&f=m;Sh3IV$hCOg)KYSSErIn@fBp<*0AD$q;GXMYp diff --git a/docs/website/contents/for-developers/PreflightGuide/plot-single-slot-leaders.png b/docs/website/contents/for-developers/PreflightGuide/plot-single-slot-leaders.png deleted file mode 100644 index 3e82cdbebcd599fec4796a85ddc50759e551716c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92092 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 (# State# RealWorld #)}_d20O - ds_X21f - of -... -case {__pkg_ccall_GC main State# RealWorld -> (# State# RealWorld #)}_d20S - ipv4_X284 - of -... -``` - -And to C-- (`-ddump-cmm`) as: - -``` -... - call "ccall" arg hints: [] result hints: [] foo(); -... - (_u3jD::I64) = call "ccall" arg hints: [PtrHint,] result hints: [PtrHint] suspendThread(BaseReg, 0); - call "ccall" arg hints: [] result hints: [] bar(); - (_u3jE::I64) = call "ccall" arg hints: [PtrHint] result hints: [PtrHint] resumeThread(_u3jD::I64); -... -``` - -This shows how a `safe` call indeed releases the capability. Imagining a super -simplified scenario with initially one OS thread, one Haskell task/thread and -only one capability that performs the `baz` call: - -``` -= has the capability -- does not have the capability - - v call to `foo` v call to `bar` -...===============================-------------------========= ... - ^ return ^ return -``` - -So in the above, the time during the `safe` call, the Haskell capability is -`IDLE` thus not counting for the time spent. What happens if we have more -Haskell tasks waiting to be executed (note this will require multiple OS -threads)? - -``` -= has the capability -- does not have the capability - - v call to `foo` v call to `bar` -...===============================----------------------========= ... - ^ return ^ return -...-----------------------------========================-------- ... -``` - -Note now that the foreign call might finish before the capability is available -again, and in this case it has to wait. - -From Haskell's point of view, no waiting time happened in this last scenario as -the capability was all the time running Haskell code. In case no Haskell tasks -can be run in that time when the C code is being executed, then said time will -not appear in the profiling report as _no Haskell code is being executed_ (a -case similar to the first diagram). - --------------------------------------------------------------------------------- - -Now, the reported time on the Haskell time profiling will be off due to these -`safe` foreign calls not being accounted for. Apart from that, `unsafe` calls -sometimes lose ticks when running with the default tick interval. Therefore it -is advised to run with `-V0.01` when doing time measurements. - -## Time profiling and eventlog - -One of the few approaches that seemed useful for investigating time consumption -was using [hs-speedscope](https://github.com/mpickering/hs-speedscope) to graph -all the execution time registered by Haskell, and then combining it with -[ghc-events-analyze](https://github.com/well-typed/ghc-events-analyze) to see -time elapsed between different events that we care of. - -In order to emit time profiling on the eventlog, the executable has to be linked -with `-eventlog` to pull the right RTS and then run with `-l`. If the eventlog -produced is too big, one can run with `-l-au` so that (`-a`) all events are -omitted, (`u`) except the user events. Also one can set the output name for the -eventlog file with `-ol`. An example from `cardano-node`: - -```bash -> cat cardano-node.cabal -... -executable cardano-node -... - ghc-options: -eventlog - "-with-rtsopts=-T -I0 -A16m -N2 --disable-delayed-os-memory-return" -... -> cat cabal.project.local -... -profiling: true -profiling-detail: all-functions - -package plutus-core - ghc-options: -fexternal-interpreter -... -> cabal run exe:cardano-node -- run +RTS -l-au -p -olname.eventlog -RTS -... -> ls -... -name.eventlog -``` - -It is important to note too that `-fno-prof-count-entries` can make the -concurrent profiled code run significantly faster (see -[this](https://downloads.haskell.org/ghc/latest/docs/users_guide/profiling.html#profiling-parallel-and-concurrent-programs)). - -``` -> cabal run --ghc-options="-fno-prof-count-entries" -- +RTS -l-au -p -olname.eventlog -RTS -``` - -## External interpreter (`ByteCodeLink.lookupCE`) - -Template haskell has some strange interaction with profiling, which was reported -to the GHC team at [this -ticket](https://gitlab.haskell.org/ghc/ghc/-/issues/18320). The solution is -simple: use `-fexternal-interpreter` for the packages that fail with that error. - -However it is important to note that at least in our case, we cannot build the whole project with `-fexternal-interpreter` as there is an error related to `malloc`ing memory: - -``` -> cabal build --ghc-options="-fexternal-interpreter" ... -... -[45 of 63] Compiling Cardano.Node.Tracing.Tracers.ChainDB ( src/Cardano/Node/Tracing/Tracers/ChainDB.hs, .../dist-newstyle/build/x86_64-linux/ghc-8.10.4/cardano-node-1.33.0/build/Cardano/Node/Tracing/Tracers/ChainDB.o, .../dist-newstyle/build/x86_64-linux/ghc-8.10.4/cardano-node-1.33.0/build/Cardano/Node/Tracing/Tracers/ChainDB.dyn_o ) [Data.Aeson.KeyMap changed] -ghc-iserv: mmap 131072 bytes at (nil): Cannot allocate memory -ghc-iserv: Try specifying an address with +RTS -xm -RTS -ghc-iserv: internal error: m32_allocator_init: Failed to map - (GHC version 8.10.4 for x86_64_unknown_linux) - Please report this as a GHC bug: https://www.haskell.org/ghc/reportabug -ghc: ghc-iserv terminated (-6) -cabal: Failed to build cardano-node-1.33.0 (which is required by -exe:cardano-node from cardano-node-1.33.0). -``` - -So the solution is as shown in the example above, use the external interpreter -only on `plutus-core` which is the package that currently fails: - -``` -> cat cabal.project.local -... -profiling: true -profiling-detail: all-functions - -package plutus-core - ghc-options: -fexternal-interpreter -... -``` - -## Entering a profiled Nix shell - -We have cached profiled Nix shells built on CI so you don't have to locally recompile all dependencies with profiling. -To use them, enter the `.#ghc96-profiled` shell, eg via -```shell -nix develop .#ghc96-profiled -``` -and create a `cabal.project.local` like this: -```cabal -profiling: True --- https://well-typed.com/blog/2023/03/prof-late/ -profiling-detail: late -``` -Now, any built executable will have profiling support. - -For example, to find out where time is spent in some test, you could use -```shell -cabal run ouroboros-consensus:test:storage-test -- -p 'ChainDB q-s-m' +RTS -pj -``` -and eg load the resulting `.prof` file into [speedscope](https://speedscope.app). diff --git a/docs/website/contents/for-developers/QueryVersioning.md b/docs/website/contents/for-developers/QueryVersioning.md deleted file mode 100644 index 28e403cd98..0000000000 --- a/docs/website/contents/for-developers/QueryVersioning.md +++ /dev/null @@ -1,121 +0,0 @@ -# Query versioning - -This document explains why and how we version local state queries. - -If you want to add a new query, [jump here](#how-to-version-a-new-query). - -## Context - -Local state queries allow clients (like `cardano-cli`, `ogmios`, etc) to fetch information from a node about its state for a particular point on the chain (like the tip of the node's current selection). Examples are the current block or slot number, the current epoch as well as various information of the ledger state, like the protocol parameters or the stake distribution. As the ledger gets more features and new use cases are explored, teams will add new queries that allow to get the necessary data. To track this, every query has an associated version number which indicates since when it is available. - -In general, we can't assume that every node operator is running on the same/latest version, so a query might be available in one node, but not in another. -Thus, when a client sends a query to a node, it is important that the node is aware of whether it supports a given query. -Morever, beyond mere availability of the query, the exact details of the on-the-wire codec used for each query and its arguments and its response may change over time. The negotiated version is therefore sometimes also necessary to simply select the correct codec to use when communicating with the node. - -At the beginning of every connection from a client to a node, the Network layer will negotiate a [`NodeToClientVersion`][n2c]. Before the client sends a query, it can now check that the negotiated version is not older than the associated version number of the query, and act accordingly (i.e. display an indicative error message, or use a different/fallback mechanism to do its job). - -Custom implementations of the Cardano node client are free to bypass this check before submitting the query. This does not constitute a problem for the node integrity, but is, instead, an inconvenience for the user. When querying an older node, such an inconsiderate client will simply be disconnected from without explanation. If the user has access to the node's logs, she'll find there an obscure CBOR decoding error. - -## Implementation - -### Version types - -Our code does not use the negotiated [`NodeToClientVersion`][n2c] directly, but translates them first to a [`CardanoNodeToClientVersion`][cardano-n2c] and then to [`ShelleyNodeToClientVersion`][shelley-n2c]. - - - The [`querySupportedVersion`][query-supported-version] function assigns a [`ShelleyNodeToClientVersion`][shelley-n2c] to each Shelley-based query. - - Each [`CardanoNodeToClientVersionX`][cardano-n2c] specifies the [`ShelleyNodeToClientVersion`][shelley-n2c] for each era, or indicates that a specific [era][feature-table] is not supported. As an example, consider - ```haskell - pattern CardanoNodeToClientVersion10 :: BlockNodeToClientVersion (CardanoBlock c) - pattern CardanoNodeToClientVersion10 = - HardForkNodeToClientEnabled - HardForkSpecificNodeToClientVersion2 - ( EraNodeToClientEnabled ByronNodeToClientVersion1 -- Byron - :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Shelley - :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Allegra - :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Mary - :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Alonzo - :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Babbage - :* EraNodeToClientDisabled -- Conway - :* Nil - ) - ``` - This tells us that in Shelley, Allegra, Mary, Alonzo and Babbage, we use `ShelleyNodeToClientVersion6`, and Conway is disabled. This means that no queries that were introduced in `ShelleyNodeToClientVersion7` can be used, and no queries in the Conway era are possible at all. - - In order to reduce the number of possible version combinations, we currently follow the convention that all `ShelleyNodeToClientVersion`s in one `CardanoNodeToClientVersionX` are equal. This means that the developers of clients (like `cardano-api`, etc) can rely on the fact that once a `NodeToClient` version has been negotiated, all enabled Shelley-based eras support exactly the same queries.[^conway-queries] We might weaken this guarantee in the future, see [#864](https://github.com/IntersectMBO/ouroboros-consensus/issues/864). - -The mapping from `NodeToClientVersion`s to `CardanoNodeToClientVersion`s is [`supportedNodeToClientVersions`][supportedNodeToClientVersions]. Additionally, all versions larger than a certain `NodeToClientVersion` (see [`latestReleasedNodeVersion`][latestReleasedNodeVersion]) are considered experimental, which means that queries newly enabled by them can be added and changed at will, without compatibility guarantees. They are only offered in the version negotiation when a flag (currently, `ExperimentalProtocolsEnabled`) is set; also see [`limitToLatestReleasedVersion`][limitToLatestReleasedVersion] and its call/usage sites. - -#### Why have a separate version type per block? - -At the moment, all genuine chains using the abstract Ouroboros code (ie the Diffusion and Consensus Layers) are maintained by the same people that maintain the Ouroboros code, and moreover those chains are all instances of `CardanoBlock`. Thus, it has so far been a convenient simplification to merely increment `NodeToClientVersion` whenever `BlockNodeToClientVersion (CardanoBlock c)` needs a new increment (in addition to when the mini protocols' code changes require such an increment). This approach would be untenable if there were multiple genuine chains with different block types and their own queries evolving independently, sharing the common Ouroboros code as a dependency. That is especially true if some of those chains were maintained by someone other than the Cardano team maintaining the Ouroboros code. In that case, the Diffusion Layer would either need to negotiate the two versions separately or else negotiate the block-specific version `CardanoNodeToClientVersionX` and derive the `NodeToClientVersion` from that (via a callback passed by the owner of the block-specific code) instead of the opposite, which is what the current code does. - -That same fundamental hypothetical of genuine chains with different block types motivates defining the `BlockNodeToClientVersion` abstractly, instead of only for `CardanoBlock`. In particular, it's technically possible that some chain could exist that only uses `ByronBlock`, or the `ShelleyBlock`s without Byron, or some other "incomplete" subset of the `ShelleyBlocks`, etc. The block-specific version for such a chain should not necessarily advance in lock-step with the Cardano chain's, since some Cardano changes might not apply to that hypothetical chain [^non-Cardano-block-types]. Via the `BlockNodeToClientVersion` type family, the Consensus Layer is already positioned to properly support multiple block types, once the Diffusion Layer eventually negotiates the versions in a way that allows non-Cardano chains to properly evolve. But for now, the only genuine chain uses all of the `ShelleyBlock` eras, and so we version as a single bundle, pretending that they are inseparable. - -#### Shelly node-to-client version - -Each `ShelleyNodeToClientVersion` has a set of queries it supports. Assume the maximum version is $X$, and that it has queries $Q_0, \dots, Q_{n-1}$ associated to it. If no node was released that supports version $X$, ie `ShelleyNodeToClientVersionX`, we have a reasonable degree of certainty that no client will send any $Q_i$, $x \in [0, n - 1]$ to older nodes (since no such node was yet released). Therefore, if we add a new query $Q_n$ we can associate it to the unreleased version $X$ (`ShelleyNodeToClientVersionX`). - -On the other hand, the node that supports version `X` has been released, then we -need to increase the maximum Shelley node-to-client version, by adding one more constructor to `ShelleyNodeToClientVersion`, which is defined in module [Ouroboros.Consensus.Shelley.Ledger.NetworkProtocolVersion](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs). By adding this new version the node is able to detect if other Cardano clients that respect this versioning mechanism support said query. - -Henceforth, we call an unreleased version "experimental" (ie only used for demo purposes/specific to an unreleased era). - -### Checks - -The supported query versions are only enforced in the [Shelley query encoder][shelley-encodeNodeToClient], ie in code run by clients. The server will currently answer queries even if the negotiated version is not in the supported version range for that query (which might be the case with a custom client implementation, or when one forgot to enable experimental protocols), following the robustness principle (ie "be conservative in what you send, be liberal in what you accept"). - -As an example, consider a query $Q$ that is enabled after version $x$, and consider a connection between a client and a node that negotiated version $y$. If $y < x$, then the client will throw an exception before sending $Q$ as the negotiated version is too old, so the server probably won't understand the query. But if the server does actually understand the query, and the client uses a custom implementation that does not perform the check on $x$ and $y$, then the server will reply as normal despite $y < x$. - -### On newly added golden files - -When adding a new `ShelleyNodeToClientVersion` or a new `CardanoNodeToClientVersions` new golden files will be generated. Because serialization is [version dependent](https://github.com/IntersectMBO/ouroboros-consensus/pull/95), a new `ShelleyNodeToClientVersion` could also introduce a different serialization. See how function [`decodeShelleyResult`][decodeShelleyResult] uses `ShelleyNodeToClientVersion`. Therefore we have to test the serialization for the new versions. - -The golden tests only generate golden files for queries that have examples. So if a newly added query does not have an example, no golden files will be generated for it. - -## How to version a new query - - 1. Determine whether the query is supposed to be experimental. - - 2. Check whether you need a new [`NodeToClientVersion`][n2c]. - - - If the query is experimental, you only need one if there is no [`NodeToClientVersion`][n2c] beyond the [`latestReleasedNodeVersion`][latestReleasedNodeVersion] (usually, it should already exist). - - - If the query is not experimental, you need one if the current [`latestReleasedNodeVersion`][latestReleasedNodeVersion] is already used in a released version of the node. For this, check the version of `ouroboros-consensus-cardano` in the latest node release, and navigate to the corresponding [`latestReleasedNodeVersion`][latestReleasedNodeVersion]. - - If you determine that you need a new [`NodeToClientVersion`][n2c], create a corresponding PR in the [Network repository][network-repo], and wait for a new release to CHaP. - - 3. Depending on the previous step: - - - if necessary, add a new [`CardanoNodeToClientVersion`][cardano-n2c] and adapt [`supportedNodeToClientVersions`][supportedNodeToClientVersions] (as well as Shelley's [`supportedNodeToClientVersions`][shelley-supportedNodeToClientVersions], which is only used in tests). - We use this mapping because `SupportedNetworkProtocolVersion` is not a composable instance. - - - if necessary (ie there is no existing one you can use), add a new [`ShelleyNodeToClientVersion`][shelley-n2c] and adapt [`querySupportedVersion`][query-supported-version] - - 4. In case the network node-to-client versions (eg `NodeToClient_V16`) is not linked to to the `CardanoNodeToClientVersion` mentioned above, we need to do this by adding an extra entry to [`supportedNodeToClientVersions`][supportedNodeToClientVersions]. - - 5. In many cases, these changes will make our golden tests fail (due to missing files); to fix CI, run the tests locally and check in the newly generated files. - - 6. Follow the compiler warnings. - - -## Sample pull requests - -Old pull-requests that added new queries serve as good reference material when adding new queries. For instance see [#191](https://github.com/IntersectMBO/ouroboros-consensus/pull/191). Be aware that these PRs they can get out of date. If you detect this please delete old links and add those corresponding to newer pull requests. - -[n2c]: https://ouroboros-network.cardano.intersectmbo.org/ouroboros-network/Ouroboros-Network-NodeToClient.html#t:NodeToClientVersion -[network-spec]: https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-spec/network-spec.pdf -[shelley-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs#L17 -[cardano-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L341-L527 -[query-supported-version]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L537-L574 -[feature-table]: https://github.com/cardano-foundation/CIPs/blob/master/CIP-0059/feature-table.md -[supportedNodeToClientVersions]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L540 -[latestReleasedNodeVersion]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L551 -[limitToLatestReleasedVersion]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs#L896-L897 -[shelley-encodeNodeToClient]: https://github.com/IntersectMBO/ouroboros-consensus/blob/3d55ae3ca7a9e1c63a19266d35ef5512bbef13ab/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Node/Serialisation.hs#L180-L185 -[network-repo]: https://github.com/IntersectMBO/ouroboros-network -[shelley-supportedNodeToClientVersions]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs#L56-L65 -[decodeShelleyResult]: https://github.com/IntersectMBO/ouroboros-consensus/blob/3d55ae3ca7a9e1c63a19266d35ef5512bbef13ab/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L733 - -[^conway-queries]: There are already queries that morally are Conway-specific, but still work in older eras, returning something along the lines of `mempty` in that case. - -[^non-Cardano-block-types]: The opposite is only true if that chain has some block types that Cardano doesn't. diff --git a/docs/website/contents/for-developers/ReleaseProcess.md b/docs/website/contents/for-developers/ReleaseProcess.md deleted file mode 100644 index 7217b10f7b..0000000000 --- a/docs/website/contents/for-developers/ReleaseProcess.md +++ /dev/null @@ -1,488 +0,0 @@ -# How Consensus Makes Releases - -This document explains how the Consensus team uses Pull Requests (PRs), version numbers, and branches to prepare releases of our packages. - -Let us assume our repository contains two packages FOO and BAR. -Two is enough to explain the complexities. -The resulting rules can be generalized to any number of packages, as explained at the end of the document. - -*Remark*. -If you disagree with the decisions in this document, please consider reviewing our brainstorming notes and discussions, available at [this document's PR](https://github.com/IntersectMBO/ouroboros-network/pull/4207). -Even if you choose not to do so, please share your concern with us. - -## Notation - -In this document, we will assume each version number is a MAJOR.MINOR.PATCH triple. -This is easy to generalize to other conventional notations, such as [the PVP](https://pvp.haskell.org/)'s MAJOR.MAJOR.MINOR.PATCH quadruples. - -We refer throughout this document to _the main branch_ (aka `master`, aka `main`). - -If you search for "RULE:" in this document, you'll find the key statements. - -## Rules for Branches - -The Consensus team will sometimes be maintaining multiple MAJOR.MINOR versions of the same package simultaneously. -EG If we were currently maintaining a 2.3 version and a 2.4 version simultaneously, then we might release FOO-2.4.1 on Monday, release FOO-2.3.7 on Wednesday, and release FOO-2.4.2 on Friday, etc. - -- Whenever we're maintaining only the one greatest-ever MAJOR.MINOR version of a package, then all work on that package will happen on the main branch. -- Whenever we're also maintaining some lesser MAJOR.MINOR versions of a package, then some work for that package will also be happening on the respective _release branches_. - -A _release branch_ is a branch dedicated to the maintenance of some older release of one or multiple packages. - -RULE: A release branch should branch off the main branch just at a released commit. -Usually, our backports are targeted at a particular Cardano Node version; we use the naming pattern `cardano-node-X.Y-backports` in that case. -For example, suppose we released FOO-3.0.0 and BAR-4.0.0 for Node X.Y.0, and we want to release new (potentially major) versions of FOO and BAR for Node X.Y.1, but cannot do that from the main branch as it already contains changes not suited for Node 3.4.x. -Then, we must create the release branch `cardano-node-X.Y-backports` just at the release commit(s) of FOO-3.0.0 and BAR-4.0.0. -On this branch, we can then release new (even major, see the EXCEPTION in the "Rules for releases" below) versions of FOO and BAR. -See the "Release Branch Example" below for a more thorough example. - -There are two kinds of work on release branches. -Most of the time, that work is immitating some work that was done on the main branch. -EG we fixed a bug on the main branch and we're backporting that fix onto a release branch (hopefully it's a trivial cherry-pick). -Rarely, though, there will be fresh work done on a release branch. -EG Consider the following possible timeline. - -- We release FOO-2.4.1 on Monday, and FOO-2.4.1 completely reworked some functionality. -- We then realize on Tuesday that there was a severe bug in the old functionality. -- We fix the bug by merging a PR that targets the release branch containing FOO-2.3.x (since the bug no longer exists on the main branch!) -- We release FOO-2.3.7 on Wednesday. - -*Remark*. -Not every first-parent commit in the history of the release branch was announced as a release of a package. -We will be merging multiple PRs into the release branch in order to prepare the next release from it, so some commits will just be the intermediates between two releases. - -## Rules for PRs - -We classify each PR as either a _fresh_ PR or as a _backport_ PR. - -- A fresh PR is doing work that has never been done before (new feature, new bugfix, etc). - Except in the rare circumstances discussed in the previous section, every fresh PR will target the main branch. -- The primary objective of a backport PR is merely to immitate some fresh PR. - -The rules are then as follows. - -- RULE: A fresh PR MUST target the main branch, if possible. -- RULE: A PR MUST NOT be merged into a branch unless it should be included in the next release from that branch. -- We maintain a changelog for each package (one for FOO and one for BAR). -- RULE: A PR MUST add a pending changelog entry for each package that it alters. -- RULE: Each pending changelog entry MUST at the very least classify the alteration to that package as a _patch_ level change (eg a bugfix), a _minor_ change (eg a non-breaking interface change), or a _major_ change (eg a breaking interface change). - -*Remark*. -Notice that we do not allow merging a PR that should not be included the subsequent release. -This means some PR may be "done" but still should not be merged. -When work has been done "prematurely" in this way, it risks requiring duplication of some future work (eg introduces merge conflicts with other simultaneously active PRs). -Our choice here doesn't create any more duplication, it merely confines that duplication to having to rebase that premature PR. -Our choice also preserves the intuitive monotonic relationship between releases and the main and releases branches. - -We also maintain our changelog in a specific way. - -- RULE: We maintain pending changelog entries in the same way that [`scriv`](https://github.com/nedbat/scriv) does, so that they do not generate conflicts and are not lost when rebasing/cherry-picking/etc PRs. -- RULE: The pending entries MUST NOT assume any specific version number of the previous release or the next release, because the entry may be backported etc. - -*Remark*. -Backporting a PR wouldn't generate any conflicts in the changelog entries (by `scriv`'s design), so the author won't necessarily be prompted to update explicit version numbers. -Hence we forbid them, via the review process. -To explicitly clarify: it's fine to refer to historical explicit version numbers, but not in such a way that assumes anything about how many or which versions are between that explicit version and the changelog entry that mentions it. - -## Rules for Releases - -Infinitely often, the Consensus team will decide that FOO and/or BAR are ready for a next release (either from the main branch or from a release branch). -IE We will eventually decide that the code of that package on the tip commit of a branch should be the code of our next release of that package from that branch. -We prepare that release as follows. - -- For each package we are including in the release, we review its pending changelog entries (eg by issuing `scriv collect --version DUMMY` to automatically collate the pending changelog entries). -- RULE: We update the declared version (ie in its `.cabal` file) of each package we are including in the release based on the content of those pending changelog entries. - - (Note that there's at least one package, since otherwise we wouldn't be mkaing a release.) - - (Note that there must be some alterations to each package we are including in the release, since otherwise we wouldn't be including it in the release---but mind the _bundles_ mentioned below.) - - Let X.Y.Z be the version of the package currently declared on this branch. - - RULE: If any alteration was major-level, then we bump to (X+1).0.0. - - RULE: Else if any alteration was minor-level, then we bump to X.(Y+1).0. - - RULE: Otherwise all alterations were patch-level, so we bump to X.Y.(Z+1). - - EXCEPTION: If we released the package from a release branch with version larger than X.Y.Z, then we should always increase the major version X, potentially by more than one if the other release was a major one. - This way, we avoid multiple versions with the same major component being released from different branches. - This process is inelegant, but it seems acceptable for now as backport branches are relatively rare and only active for a limited amount of time. -- RULE: We merge one final PR, which MUST do exactly the following and nothing more. - - RULE: It updates the versions of the packages being released as described above. - - RULE: It flushes the pending changelog entries of each package being released into the `CHANGELOG.md` file for that package. -- RULE: We tag that resulting merge commit as release-PKG-A.B.C; one tag per package PKG that is being released (ie FOO and/or BAR). -- RULE: Finally, we announce this commit hash as the new release of these packages. - EG We insert these package's new versions into Hackage, [CHaP][chap], etc. - -*Remark*. -To explicitly clarify: after a release of a package, there will be zero pending changelog entries for that package. -When making the release, those entries were first incorporated into the `CHANGELOG.md` file and then the individual files containing those pending entires (see `scriv`'s mechanism) were removed (a la `git rm`). -But there may be pending changelog entries of other packages, those that were not included in this release. - -*Remark*. -This scheme allows for multiple commits to declare their package has the same version number as some released version, even if those commits have made alterations to the package. -This means the mapping from commit hash <-> released version number is unfortunately not one-to-one. -There is obviously some possibility for confusion there. -However, we think the probability is low: if users only retrieve our code from the package repositories that we insert our release into, then the mapping will be one-to-one (as enforced by those repositories). -Despite it being relatively easy to preclude this risk (add an extra .0 dimension to the just-released versions immediately after announcing them, remove it when preparing the next release, but immediately add it back, etc -- thus between-release commits are always versions MAJOR.MINOR.PATCH.0), we're choosing not to. -The mitigation is quite simple, but that extra version dimension is unfamiliar to the broader community and so is likely to cause confusion of its own. -We are, though, ready to try this mitigation if the lack of one-to-one mapping does end up causing enough confusion. - -## Generalizing to more packages - -In actuality, the Consensus team maintains N-many packages instead of just FOO and BAR. -We could apply the above rules exactly as is: one changelog per package, independent version numbers per package, one release branch per MAJOR.MINOR.0 release of each package, etc. -We see some downsides to that. - -- That's a lot of bookkeeping; many PRs would have to create multiple changelog entries. -- There's no easy way to recall which versions of our various packages are compatible with one another. -- There are multiple changelogs that it might not be easy for downstream users to navigate (ie to know which one to check for the information they're wondering about). - -We therefore partition our N-many packages into B-many _bundles_ where B < N. - -- RULE: The packages within a bundle always share a single changelog and always declare the exact same version. -- RULE: So we apply the rules from the above sections to each package bundle instead of to each package independently. - -The only refinement to the wording in the above sections is that we update the `.cabal` file's of each package in a bundle being released based on the bundle's changelog entries, _even if that package had no alterations since the previous release of that bundle from this branch_. -This means some packages will occasionally get vacuous versions bumps. -That's obnoxious to downstream users and would be easy to interpret as evidence the Consensus team has made a mistake in during that release. -However, we either mitigate this by choosing our bundle partitioning to make it unlikely (put coupled packages into the same bundle) or else accept the oddity of the vacuous version bumps as an acceptable cost for the bundling's other advantages. - -## Some Concrete Examples - -Some of the rules above are much easier to internalize via concrete examples. - -### Release Branch Example - -Consider just one package, FOO. -Suppose we have released the following versions: 1.0.0 and 2.0.0. -The commit history might look like the following linear chain, with the tags and branch pointers annotated. - -``` -D - the release of FOO-2.0.0 (tag: release-FOO-2.0.0, branch: main) -C - replace that confusing feature with much nicer one -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -#### Releasing a new patch version on the main branch - -If we subsequently merge a PR that fixes a minor bug present in 2.0.0, it'd then look like this. - -``` -E - fix that off-by-one error (branch: main) -D - the release of FOO-2.0.0 (tag: release-FOO-2.0.0) -C - replace that confusing feature with much nicer one -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -Once we release version 2.0.1, we'd have the following. - -``` -F - the release of FOO-2.0.1 (tag: release-FOO-2.0.1, branch: main) -E - fix that off-by-one error -D - the release of FOO-2.0.0 (tag: release-FOO-2.0.0) -C - replace that confusing feature with much nicer one -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -#### Releasing a fix exclusive to a previous release - -Suppose we then find a bad bug in feature that commit C had replaced. -We might want to fix it because our users aren't yet ready to integrate the new feature from 2.0 version into their code. -Thus, we'd create a release branch, say `release-FOO-1.x.x`, and merge a bugfix PR directly into it. -Note that we should merge bugfixes into the main branch and then backport them onto a release branch when that is possible, but in this case the buggy feature no longer exists on the main branch. - -``` -G - fix confusion in the old logic (branch: release-FOO-1.x.x) -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -Once that patch passes validation, we could then release 1.0.1. - -``` -H - the release of FOO-1.0.1 (tag: release-FOO-1.0.1, branch: release-FOO-1.x.x) -G - fix confusion in the old logic -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -#### Backporting a fix - -Now suppose we belatedly realized we can easily backport E onto 1.x.x as well. -If we're making another release of the 1.0 version, our users would likely appreciate us including as many bugfixes as we can. - -``` -I - cherry-pick of E (branch: release-FOO-1.x.x) -H - the release of FOO-1.0.1 (tag: release-FOO-1.0.1) -G - fix confusion in the old logic -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -And shortly the following. - -``` -J - the release of FOO-1.0.2 (tag: release-FOO-1.0.2, branch: release-FOO-1.x.x) -I - cherry-pick of E -H - the release of FOO-1.0.1 (tag: release-FOO-1.0.1) -G - fix confusion in the old logic -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -#### Backporting an unreleased minor fix - -Return to the original example, and suppose that we didn't yet release 2.0.0: - -``` -C - replace that confusing feature with much nicer one (branch: main) -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -Suppose that we already now notice an off-by-one error, which we promptly fix: - -``` -K - fix that off-by-one error (branch: main) -C - replace that confusing feature with much nicer one -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -We also want to release FOO-1.0.1 with the fix (but without C), which we do by creating a corresponding release branch and cherry-picking K: - -``` -M - the release of FOO-1.0.1 (tag: release-FOO-1.0.1, branch: release-FOO-1.x.x) -L - cherry-pick of K -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -Note that when now releasing from the main branch later, we have to be careful to not *also* release FOO-1.0.1 there (in case C would allow for that). -Rather, following the rules above, we will have to release FOO-2.0.0. - -``` -N - the release of FOO-2.0.0 (tag: release-FOO-2.0.0, branch: main) -K - fix that off-by-one error -C - replace that confusing feature with much nicer one -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -#### Backporting an unreleased major fix - -Consider a variant of the previous case where instead of K, the fix actually requires a major version bump: - -``` -O - fix API soundness issue (branch: main) -C - replace that confusing feature with much nicer one -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -Again, we want to release a new version of FOO with O, but without C. As O requires a major version bump, we have to release FOO-2.0.0: - -``` -Q - the release of FOO-2.0.0 (tag: release-FOO-2.0.0, branch: release-FOO-2.0.0) -P - cherry-pick of O -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -When we now want to release from the main branch later, we now have to release FOO-3.0.0, even though release-FOO-2.0.0 is not an ancestor of `main`: - -``` -R - the release of FOO-3.0.0 (tag: release-FOO-3.0.0, branch: main) -O - fix API soundness issue -C - replace that confusing feature with much nicer one -B - the release of FOO-1.0.0 (tag: release-FOO-1.0.0) -A - ... -``` - -# Installing `scriv` - -To manage the workflow described above, we will use the `scriv` tool slightly -modified to support cabal files. If you use `nix` then you will find `scriv` in -the Nix shell. Otherwise, the way to install it from source is: - -``` -pip install scriv -``` - -If you encounter an error mentioning: -`pkg_resources.extern.packaging.version.InvalidVersion: Invalid version: ...` we -found that downgrading `setuptools` to a version `< 66` seems to solve this -problem. - -If you don't want to use virtual environments for python packages and -installation complains with the error `error: externally-managed-environment`, -pass in the flag `--break-system-packages`: - -``` -pip install --break-system-packages scriv -``` - -# Adding a changelog fragment - -When a given branch contains a change that deserves a changelog entry, you -should add a changelog -[fragment](https://scriv.readthedocs.io/en/stable/concepts.html#fragments). When -we [cut a release](#cutting-a-release) the changelog fragments will be merged -into a changelog update. To add a changelog fragment, use `scriv`. See [this -section](#installing-scriv) for instructions on how to install it. - -To create a changelog fragment you can follow these steps: - -1. Run `scriv create` on the directory of one of the packages in the bundle you - want to create an entry for (the symlinks described above will make sure that - the fragment gets created in the right directory). This will need to be - repeated twice if you want to create changelog entries for both bundles. This will - create a new file inside the `changelog.d` sub-directory of the bundle. -2. Edit the newly created file(s) by uncommenting and filling in the appropriate - section (Breaking, etc). Write the entry in the imperative, as per [these - guidelines][git-contributing-to-a-project]. -3. Add the file(s) to the branch. - -# Cutting a release - -First, make sure `scriv` is [installed](#installing-scriv), along with the -following Python3 packages (unless you use `scriv` in a `nix` shell): - -- `bs4` -- `html5lib` - -If they these packages are not installed, then run: - -```sh -pip install bs4 html5lib -``` - -To cut a release we rely on a script. Simply run: - -```sh -./scripts/release/create-release.hs -``` - -After the script is run, check the diff for coherence and make sure that the -packages build locally. - -As a sanity check, run: - -```sh -./scripts/release/cabal-plan-diff -``` - -Now open a pull request and ask for review. It is -recommended to already open a draft PR to [CHaP][chap] and make sure that CI -passes to avoid later surprises (eg due to missing bounds). Once the Consensus -PR is approved, add it to the merge queue, and once it hits `main`, create the -release tags as follows: - -```sh -git checkout -git pull -./scripts/release/tag-release.sh -``` - -Where `` is the respective merge commit on `master`. - -Finally, create a release in [CHaP][chap], for which one can invoke the -following script: - -```sh -git checkout -git pull -./scripts/release/release-to-chap.sh -``` - -[contributing-to-a-project]: https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Commit-Guidelines -[chap]: https://github.com/IntersectMBO/cardano-haskell-packages - -# The first time we had to break this release process - -On the first half of April 2023, we were asked to get a new Consensus release -from current `master` in order for it to be integrated into the node. However -the version on `master` could not be released because it was dependent on some -changes from network that were not yet released. - -In order to make this clear, I am adding a `+` at the end of the version number -to indicate that it contains unreleased changes on top of the version mentioned -(which would be in CHaP). Note that in the cabal version, the `+` is not present -so for cabal `0.3.1.0+` and `0.3.1.0` are both `0.3.1.0`. - -The release engineer that was integrating the node at that time, had pinned a -specific commit in a `source-repository-packages` clause in his integration -branch but by luck, several circumstances took place: -- the commit was in `0.3.1.0+` -- only `ouroboros-consensus-diffusion` depended on the network changes -- `ouroboros-consensus` with his changes was, as mentioned above, at `0.3.1.0+` -- `ouroboros-consensus-diffusion 0.3.1.0+` would not have been buildable at the - current CHap versions -- but `ouroboros-consensus-diffusion 0.3.1.0` (the one from CHaP) declared a - dependency on `ouroboros-consensus 0.3.1.0` -- and by chance, the changes in `ouroboros-consensus 0.3.1.0+` (which actually - were "Breaking changes") didn't break the compilation of - `ouroboros-consensus-diffusion 0.3.1.0` -- so he could pull `ouroboros-consensus 0.3.1.0+` from the - `source-repository-packages` and `ouroboros-consensus-diffusion 0.3.1.0` from - CHaP - -So in that situation we were breaking the bundle in a way that our previous -rules couldn't handle. - -> Problem 1: We were unable to make a release from `master`, so we had to make -> the release from some previous commit as a side branch. - -> Problem 2: Our bundles were too rigid for the development that happens. - -> Problem 2.1: Sharing a repository with Network means some changes from network -> will transpire to our packages, and network might not want to make a release -> just yet, but we might need a release from consensus. - -> Problem 2.2: The strict inter-dependency of `consensus` and -> `consensus-diffusion` is actually wrong, as `consensus-diffusion` is what puts -> together `consensus` and `network` thus it might not be releasable always. - -> Problem 3: our bundles are rigid but one can import only specific packages -> therefore not following the bundles schema. - -> Problem 4: The version number of a released package and a development version -> is the same in the eyes of Cabal. Therefore the development `consensus` could -> co-exist with the released `consensus-diffusion`. - -This case was just a series of coincidences that happened at the same time but -is a clear example of why our previous choices were not correct/good enough. - -We [solved][solution] the situation by breaking the bundles momentarily and releasing only -the needed packages at the needed commit, therefore messing up the Changelogs, -and publishing a release for `ouroboros-consensus-diffusion` to allow for a -`0.4.0.0` `ouroboros-consensus` package. But we used this opportunity to propose -a new organization, and also migrate to a new repository. - -[solution]: https://github.com/IntersectMBO/cardano-haskell-packages/pull/207 - -# The new organization - -The consensus packages are now split as follows: - -- `ouroboros-consensus`: contains the whole implementation of consensus, with an - abstract `blk` type variable (and `BlockProtocol blk` type family) all over - the place. -- `ouroboros-consensus-diffusion`: glues together `ouroboros-consensus` and - `ouroboros-network` code. -- `ouroboros-consensus-protocol`: defines the `Praos` and `TPraos` - instantiations of the protocols. -- `ouroboros-consensus-cardano`: contains the instantiations of `blk` for the - Cardano case, which also entails all the typeclass instances required to - support `ouroboros-consensus` and the association with the protocols in - `ouroboros-consensus-protocol`. In particular it contains 3 subdirectories - with the `byron`, `shelley` and `cardano` (`HardForkBlock`) instantitations. - - It also contains the code for the `cardano-tools` like `db-analyzer` and - `db-synthesizer`. - -``` mermaid -flowchart TD - D[ouroboros-consensus-diffusion] --> C - A[ouroboros-consensus-cardano] --> B[ouroboros-consensus-protocol] - A --> C - B --> C[ouroboros-consensus] -``` diff --git a/docs/website/contents/for-developers/SanityChecks.md b/docs/website/contents/for-developers/SanityChecks.md deleted file mode 100644 index 54b35b2cd5..0000000000 --- a/docs/website/contents/for-developers/SanityChecks.md +++ /dev/null @@ -1,23 +0,0 @@ -# Sanity checks - -This document is intended for anyone testing or benchmarking the Consensus component outside this repository, for instance `cardano-node` or `cardano-node-tests`. We describe a series of sanity check that can be performed to rule out some known problems. - - -## Enable assertions - -Even if the Consensus code is being benchmarked, it might be a good idea to *temporarily* enable assertions to perform additional checks on consistency. -The following snippet can be added to the `cabal.project` file to enable assertions in our two main components: - -```cabal -package ouroboros-consensus - flags: +asserts - -package ouroboros-consensus-cardano - flags: +asserts -``` - -## Double check configuration sanity - -- The `k` value has to be the same for all eras. -- The `SnapshotInterval` has to be manually set or it will be computed as `2*k` slots, which will have a *huge* negative impact on performance if `k` is small. -- The mempool capacity is set by default to 2 times the maximum transaction capaciy in a block. Check if this default makes sense in the given context. diff --git a/docs/website/contents/for-developers/StyleGuide.md b/docs/website/contents/for-developers/StyleGuide.md deleted file mode 100644 index a0e4b25a86..0000000000 --- a/docs/website/contents/for-developers/StyleGuide.md +++ /dev/null @@ -1,648 +0,0 @@ -# Consensus style guide - -This document describes the style we follow in the consensus team. While style -is subjective, we attempt to motivate our choices with *objective reasons* where -possible. Not everyone agrees with every choice we make, but we compromise. It -is unlikely that this style guide matches the preference of even a single team -member for 100%. In different teams, with different values and priorities, -different choices might make more sense. - -Aesthetics is something that a lot of programmers feel strongly about, and the -goal of this style guide is not to stifle all personal freedom of expression. It -is an attempt to document the style that we have tried to adhere to as much as -we can in the codebase, and of course it is a style that we believe works well. -When modifying the existing code, it would therefore be much appreciated if -the existing style is adhered to, either by looking at the surrounding code or -by reading this style guide. Whenever possible, it would also be good to stick -to this style guide for new code. Should you disagree strongly with some of the -recommendations here, however, feel free to "carve out a little niche" for -yourself by adhering to your own preferences in modules that exclusively you -work on (if this means splitting some modules up, that is fine). However, please -do try to be consistent; inconsistent style is not a preference, that's just -sloppiness. - -## Enforcement - -As part of each PR review, we also check for consistency with the content of -this document. We find that the rules herein become familiar and intuitive after -some use: eventually it'll just be a document you refer to only occasionally. -But we don't expect the first several PRs to perfectly adhere to these rules. So -please make an effort, but don't worry too much: our highest priority is to see -your PR's content! We'll help tidy up any deviations. - -For maintenance work in particular, it suffices to focus only on the PR's diff. -Our goal in that case is just to avoid obvious deviations from the module's -existing style choices. Specifically, it's OK to inspect only the diff itself -along with its context -- eg whatever is available in the GitHub PR interface. -As long that rendering doesn't show that the PR spoils something like -intentional alignment for example, then the PR has no style problems. - -We run `fourmolu` as a requirement for merging. The specific -configuration can be found [here][fourmolu-config]. - -## Guiding principles - -We value the following principles in the consensus team: - -* __Optimise for clarity__: the following things occur with decreasing - frequency: - - 1. One *reads* the code and tries to understand it. - 2. After having understood the code, one *modifies* it. - 3. One *writes* the initial version of the code. This only happens once. - - We believe it is important to optimise for (1), then (2), but *not* for (3). - Making a little effort to make to code easier to understand when writing or - modifying it pays off dividends when reading it the next time, especially when - another team member will be the one reading it. Picking good names, formatting - it in a clear way, separating concerns, highlighting the differences between - similar steps, documenting why it does this and that, ..., are all worth the - extra effort. - -* __Consistency__: inconsistent style, especially within a single module, - looks sloppy, inspires little confidence in the quality of the code, - and distracts. Consistency is also a helpful guiding factor when deciding - on style guidelines in the first place; sometimes a choice between formatting - something this way or that way seems arbitrary in isolation, but becomes - clearer when seen as part of a coherent whole. - -## Formatting - -We now list the formatting rules we have converged on. - -1. __Indentation__: we indent by 2 spaces. - - *Why:* to avoid wasting horizontal screen space. - -2. __Line length__: we limit the number of characters per line to 100. - - *Why:* long lines are less readable (there is a reason why books and - newspapers limit their line length). It's also practical: even with - (ultra-)wide monitors, most people tend to have many windows side by side. - - If you are going beyond 100 characters, wrap the line, introduce local - bindings, etc. - - Comments and docstrings should also be wrapped at 100 characters. - - There are a few exceptions: - - * Sometimes alignment trumps line length. When many lines are aligned and a - few of them are too long because of that, the clarity that comes from - alignment (emphasising differences and similarities) can outweigh the line - length limit. - - * Diagrams, examples, or long URLs in the comments can be wider than 100 - characters. - -3. __Parentheses__: avoid redundant parentheses, except when they help with the - order of operations. Use your judgement, and aim for clarity. Redundant - parentheses sometimes help the reader, but sometimes confuse as they - might suggest that they are there to disambiguate something whereas in fact - there is nothing to disambiguate. - - ```haskell - -- NO - foo (Bar x) = (Bar (succ x)) - -- YES - foo (Bar x) = Bar (succ x) - - -- NO - ((x + y), z) - -- YES - (x + y, z) - - -- OKAY - (fromIntegral x) * y - ``` - -4. __Spaces__: surround binary operators with a space on each side. A comma is - *always* followed by a space. - - *Why:* this is a general convention that is also used in text and math books. - Not doing so makes it harder to read and is sloppy. - - ```haskell - avg x y = (x + y) / 2 - - let ((x, y), z) = foo - in (y, z) - ``` - - The only exception is in tuple sections: - - ```haskell - (,) <$> foo <*> bar - (True,) <$> foo - ``` - -5. __Function composition and the dollar operator__: - - Choose between using parenthesis, `$` and `.` in whichever way you think - results in the most readable code. - -6. __Blank lines__: we use *exactly one blank line* between different - declarations: export lists, import lists, declarations, etc. - - *Why:* a blank line helps with readability. Always using a single one is - consistent and easier to adhere to than one line in these cases and two lines - in those other cases. - - When defining multiple non-trivial bindings in a `where`-block, separate them - with a single blank line. - - ```haskell - fooBar .. = - .. - where - foo :: .. - foo = .. - - bar :: .. - bar = .. - - -- OKAY - foo .. = - where - x = .. - y = succ x - ``` - - Always end a file with a *newline*, which is not the same as a blank line. - ``` - -- NO - .. - - - - -- NO - .. - - -- YES - .. - - ``` - *Why:* see [this StackOverflow answer][posix-line], moreover, GitHub will - highlight a missing newline at the end of the file. - - [posix-line]: https://stackoverflow.com/questions/729692/why-should-text-files-end-with-a-newline#answer-729795 - -7. __Sections__: we group related definitions in sections that start with a - section title. The same grouping can be replicated in the export list. - - ```haskell - module AmazingModule ( - -- Foo - Foo (..) - , mkFoo - -- Bar - , .. - ) where - - {------------------------------------------------------------------------------- - Foo - -------------------------------------------------------------------------------} - - data Foo = .. - - mkFoo :: .. - - .. - - {------------------------------------------------------------------------------- - Bar - - Bar is bla bla - -------------------------------------------------------------------------------} - - type Bar = .. - .. - ``` - - The two lines of the section header are each 80 characters in total. The - title is indented by two spaces. The section header can contain more text, - which is separated from the first line by one blank line. The section header - has a single blank line above and below it. - -8. __Comment style__: in general we tend to use `--` instead of `{- .. -}`. We - sometimes make exceptions for big non-Haddock comments. - -9. __Haddock formatting__: we use [Haddock formatting][haddock-formatting] in - docstrings. We also do this in comments for consistency. - - ```haskell - -- | Short title - -- - -- Longer description .. 'Foo' .. "Data.String" .. @a@ .. /not/ .. - -- __never__ .. called \"foo bars\" .. alternative style " foo bars " - -- .. @'Foo' a@ - -- - -- > foo bar baz - -- - -- .. ends here. - foo :: .. - ``` - - Note the space after the `|`. We do not align the following lines with the - first character of the `|`. - - Haddock treats something between double quotes as a link to a module. So - when you try to quote something, either use backslashes or extra spaces as - in the example above. - - We prefer `-- |` over `-- ^`. We only use the latter when documenting the - arguments to a constructor or a function: - - ```haskell - foo :: - Word -- ^ Max size - -> .. - - data Foo = - -- | Foo - -- - -- .. - Foo - Int -- ^ @x@ - (Maybe Bool) - -- ^ .. long line .. - - -- | Baar - | Baar - ``` - - Note the indentation of `-- |`, the two spaces before the `-- ^`, and the - blank line between the constructors. - - We often document preconditions, invariants, and postcondition using the - following style: - - ```haskell - -- | Foo - -- - -- PRECONDITION: x must be greater than y - -- > x > y - -- - -- POSTCONDITION: the result will be positive - foo :: .. - - data Foo = Foo { - -- | The bar .. - fooBar :: Int - - -- | The baz .. - -- - -- INVARIANT: 'fooBaz' is always greater than 7 - , fooBaz :: Int - } - ``` - - [haddock-formatting]: https://www.haskell.org/haddock/doc/html/ch03s08.html - -13. __case vs function with multiple clauses__: - - The choice between using a `case` and having multiple clauses of the - function can help emphasise the structure of the code, and the differences - and commonalities between the cases. - - ```haskell - foo acc visited = \case - [] -> .. - x:xs -> .. - ``` - -15. __Import lists__: we use `fourmolu` to automatically format import - lists. See the [`fourmolu.yaml` config][fourmolu-config]. - - When importing modules from consensus and in particular modules from the - same package, an import list and a qualifier can be omitted. For example, - importing `Ouroboros.Consensus.Block` is often done without an import list - as it brings many basic definitions that are relied upon in scope. - - When importing from other packages, we prefer to use either an import list - or a qualifier. - -16. __Export lists__: we use `fourmolu` to automatically format export - lists. See the [`fourmolu.yaml` config][fourmolu-config]. We format - export lists in the following way: - - ```haskell - module X - ( - .. - , .. - ) where - ``` - - We sometimes use Haddock headings: - - ```haskell - module X - ( -- * Foo - .. - -- ** Foo Bar - , .. - -- * Bar - , .. - ) where - ``` - - When exporting something with members, e.g., a datatype with - constructors or a class with methods, we format them in the following way - (note the space): - - ```haskell - module X - ( Foo (..) - , Bar (MkBar) - ) where - ``` - - *Why:* this is consistent with how `fourmolu` formats it when - importing it. - - When intentionally hiding the constructor of a datatype or newtype, we add - a `-- opaque` comment after it in the export list to be explicit about this: - - ```haskell - module X - ( Foo -- opaque - ) where - ``` - - *Why:* otherwise, people unfamiliar with this type might be tempted to - export its constructor without realising they're hidden for a reason. This - comment should make them (and the reviewer) think twice. - -17. __Syntactic extensions__: we like to use some syntactic language extensions. - Some argue against having to learn additional syntax, but we believe the - learning curve is minimal and using them can help improve the clarity of the - code. - - We like to use `LambdaCase` to avoid giving intermediate results a redundant - name: - - ```haskell - -- OKAY - mFoo <- getFoo - case mFoo of - Nothing -> .. - Just foo -> .. - - -- OKAY - getFoo >>= \case - Nothing -> .. - Just foo -> .. - ``` - - In the second snippet, there was no need to name the intermediary `mFoo` - result. Especially when its name is long or coming up with a reasonable name - for it is tricky, we recommend using `LambdaCase`. - - The use of `MultiWayIf` is also recommended when it improves the - readability: - - ```haskell - if | Set.member pt prevApplied -> Just True - | Map.member hash invalid -> Just False - | otherwise -> Nothing - ``` - - In our opinion, this is more readable than alternatives like: - - ```haskell - if Set.member pt prevApplied then Just True else - if Map.member hash invalid then Just False else - Nothing - ``` - -18. __Records__: - - We purposefully discourage the use of `RecordWildCards`. - - For records we often use `NamedFieldPuns` to make it convenient to extract - fields from the record. We use the following convention when naming fields - to avoid duplicate record fields (we do not use `DuplicateRecordFields`): - - ```haskell - data SomeRecord = SomeRecord - { someRecordA :: .. - , someRecordB :: .. - } - ``` - - To avoid long lines, it is sometimes useful to use record deconstruction in - local bindings: - - ```haskell - foo someRecord = - .. - where - SomeRecord {someRecordA, someRecordB} = someRecord - ``` - - The convention above can be also contracted into `srA`, `srB`, etc, i.e. - abbreviating the name of the data definition. - - We try to avoid partial fields, but replacing partial fields such as - - ```haskell - data Foo = FooX {foo :: A, bar :: B} | FooY - ``` - - with - - ```haskell - data Foo = FooX A B | FooY - ``` - - is _not_ an improvement: replacing record field names with positional - arguments is a big loss in clarity. Instead, introduce a record to be used - as an argument to the `FooX` constructor. - - ```haskell - data X = X {foo :: A, bar :: B} - data Foo = FooX X | FooY - ``` - -19. __Pointfree__: Use your judgement when to use pointfree style and when not - to use it; aim for clarity. - -20. __Warnings__: we use the following warnings for each Cabal component: - - ```haskell - -Wall - -Wcompat - -Wincomplete-uni-patterns - -Wincomplete-record-updates - -Wpartial-fields - -Widentities - -Wredundant-constraints - -Wmissing-export-lists - -Wunused-packages - -Wno-unticked-promoted-constructors - ``` - - *Why:* the warnings produced by the above list of flags signal code smells - or enforce good practices. There is seldom a reason to disable one of them. - At the time of speaking, we haven't needed any CPP yet to accomplish this. - - We also keep the code entirely warning free; doing this consistently and - without exception means that important warnings don't get lost. We enforce - this by using `-Werror` in CI. - - We sometimes make exceptions for test code, e.g., - `-Wno-incomplete-uni-patterns`. - - For consistency, always use `-Wx` and `-Wno-x` instead of `-fwarn-x` and - `-fno-warn-x`. - -21. __HasCallStack__: when using `error` in code paths should be impossible and - are indicative of bugs, make sure enough `HasCallStack` constraints are in - scope so that the error message will result in a useful callstack. - - Note that `HasCallStack` constraints on record fields will need manual - wrappers to work properly: - - ```haskell - data API m = API { - foo_ :: HasCallStack => Maybe a -> m a - } - foo :: HasCallStack => API m -> Maybe a -> m a - foo = foo_ - ``` - - Without the extra wrapper `foo`, the call stack would only start at `_foo`, - which is rather useless. - -22. __Ambiguous types__: we avoid `AllowAmbiguousTypes`. Instead, we add a - `Proxy` argument for the ambiguous type variable. - - *Why:* this makes it explicit which type variable is ambiguous. - - When passing the `Proxy`, use `Proxy @X` where `X` is the concrete type. - - *Why:* this is less verbose than `Proxy :: Proxy X`. - - Generally try to avoid type applications, as they are rather brittle: if the - type arguments to the function change order, suddenly a function call might - no longer work, often with a hard to understand error message. This gets - even worse when a function doesn't have an explicit `forall`, and so the - order is not even specified. Prefer to use `Proxy`, possibly by introducing - some auxiliary functions. - - When the same `Proxy` can be used multiple times, one can define it locally - like so: - - ```haskell - pb :: Proxy blk - pb = Proxy - ``` - -23. __Redundant pragmas__: remove unused language pragmas when possible. - - *Why:* if a module lists the `CPP`, `AllowAmbiguousTypes`, - `UndecidableInstances`, or any other suspicious extension, it triggers an - unnecessary red flag. Even for harmless extensions, it is good practice to - remove unused ones. - - *Tip:* HLint can warn you about some unused pragmas. - -24. __Reexports__: - When re-exporting several modules from one module, use the following pattern: - - ```haskell - module Foo ( - fooA - , fooB - , fooC - , ... - ) where - - import Foo.A (fooA, ...) - import Foo.B (fooB, ...) - import Foo.C (fooC, ...) - - ``` - - *Why:* this leads to more changes to the export list, but makes it - absolutely clear where each identifier comes from. - -## Guidelines - -There are more general guidelines on how we write and structure code. - -1. __Scope__: We try to be careful about scope, clarifying where a variable is - relevant and where it is not. For example, in - - ```haskell - foo x y z = - .. - where - .. - ``` - - all of `x, y, z` will be in scope in the `where` clause. If they aren't - relevant, limit their scope: - - ```haskell - foo x = \y z -> - .. - where - .. - ``` - - this also can help to avoid awkward variable names. - - Similarly, choosing `where` over `let` can help to clarify which variables - are in scope in those definitions. Writing - - ```haskell - foo x = do - .. - where - y = ... - ``` - - makes it very clear that the definition of `y` does not depend on anything - that has happened within the `do` block (it depends only on the formal - parameters of the function). The flipside of this is that `y` is then scoped - over the entire function body; that typically is less likely to result in - confusion (especially for local function definitions), but if it is useful to - emphasise that `y` is only used in a small part of the function body, or that - this avoids awkward naming, then feel free to use `let` to express that. Use - your judgement: use scope wisely. - -2. __Tuples__: We generally prefer records over tuples with lots of arguments; - positional arguments (in tuples or as arguments to constructors) provide - less clues what the arguments are used for. - -3. __Orphans__: Orphans are generally considered bad practice, but unfortunately - avoiding orphans at all cost often means being unable to split a module into - smaller parts. The reason orphans are considered bad practice is that they - might lead to incoherence; we prefer the ability to split modules into - smaller parts and accept the loss of the help of the compiler to avoid - incoherence as an acceptable compromise. - - Orphans in test suites are also acceptable. - -4. __Assertions__: If it helps to explain what a function does, we try to be - clear about preconditions, postconditions, and invariants. When possible, it - is useful to reinforce such invariants with assertions so that if our - reasoning turns out to be invalid, we will notice. The use of - `Ouroboros.Consensus.Util.Assert.assertWithMsg` is preferred over `assert`, - so that if the assertion fails, we get some kind of informative error message - rather than just a Prolog-like "no". - -5. __Test packages__: In order to make test code from test suite A available - in test suite B, we define test suites as a test suite library which is - then used by a test suite executable; the test suite library can then - be reused by other test suites as well. - - When there are multiple test suites within a single package, it is possible - to share some code between them by making the same source code directory - available to all of them. However, doing so would make it impossible to - use that shared code in a test suite defined in another package. To avoid - this problem, we avoid sharing source directories in `cabal` files. - -[fourmolu-config]: https://github.com/IntersectMBO/ouroboros-consensus/blob/master/fourmolu.yaml diff --git a/docs/website/contents/for-developers/TechnicalReports.md b/docs/website/contents/for-developers/TechnicalReports.md deleted file mode 100644 index 836188d6d4..0000000000 --- a/docs/website/contents/for-developers/TechnicalReports.md +++ /dev/null @@ -1,22 +0,0 @@ -# Technical reports - -The following artifacts influence and/or describe the Consensus implementation. - -## Consensus and networking - - -* [The Cardano Consensus and Storage Layer](/pdfs/report.pdf). -* [Introduction to the design of Data Diffusion and Networking of Cardano Shelley][network-report]. - -## UTxO-HD - - -* [Storing the Cardano ledger state on disk: analysis and design options (An IOHK technical report)](/pdfs/utxo-db.pdf) - -* [Storing the Cardano ledger state on disk: API design concepts (An IOHK technical report)](/pdfs/utxo-db-api.pdf) - -* [Storing the Cardano ledger state on disk: requirements for high performance backend](/pdfs/utxo-db-lsm.pdf) - - - -[network-report]: https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-design/ diff --git a/docs/website/contents/for-developers/Ticking.md b/docs/website/contents/for-developers/Ticking.md deleted file mode 100644 index f30283857a..0000000000 --- a/docs/website/contents/for-developers/Ticking.md +++ /dev/null @@ -1,97 +0,0 @@ -# Ticking - -"Tick" is a common term in discrete systems for time passing. -Within Ouroboros, time is divided into slots, and to _tick_ a state X means to advance X from one slot to a later slot. -In the Cardano system, we tick a ledger state, a protocol state, or both at once (see `ExtLedgerState`). - -The fundamental use case for ticking is to advance the ledger state between one block and the next on that same chain. -In Ouroboros Praos, one block and the next will be separated by zero or more slots; usually several, since Praos relies on time passing between blocks arising to limit short forks. -However, applying blocks is not the only reason the Consensus Layer ticks. -If it were, then ticking wouldn't need to be a distinguished step: it'd merely be the first of however many "hidden" steps are involved in applying a block. -Instead, ticking is used in a few places, some of which don't involve immediately subsequent header/block application. - -- Ticking advances protocol state between headers. -- Ticking advances ledger states between blocks (via `ExtLedgerState`, this also ticks the protocol state). -- The leadership check ticks the protocol state from the selected chain's tip to the wall clock's current slot when checking whether this stake pool should mint a block. -- The mempool ticks the selected chain's ledger state ahead by exactly one slot, since the hypothetical next block to extend the selection has to be strictly younger than the selection. - (Only Byron's Epoch Boundary Blocks can share their predecessor's slot, but EBBs also don't contain transactions.) -- Today's mint also ticks the ledger state up to the current slot, to determine the transaction limits (size, ExUnits, etc) for the new block. - -The ledger rules for ticking involve some crucial concerns: deadlines come and go (despite being enforced in block applications), epochs begin and end, protocol parameters change, and even the ledger rules themselves might change. - -## Forecasting and the Forecast Range - -_Forecasting_ is an alternative to ticking that also represents the passage of time. -There are two key differences between ticking and forecasting. - -- Ticking is only sound if the intervening slots are do not contain a block; it is erroneous to tick _past_ a block on the chain. -- Forecasting does not produce a complete ledger state. - It specifically only yields the parts of the future ledger state that are already fully determined _regardless of blocks you're forecasting past_. - -In Cardano, the only thing we ever need to forecast is the part of the ledger state that is necessary to validate a header (see `LedgerView`). -This can be fully determined regardless of intervening blocks because the ledger rules ensure the relevant parts of the ledger state do not change without a minimum duration of forewarning (eg by retaining occasional snapshots of this data). -That minimum duration of stability is therefore _the forecast range_, beyond which the code cannot necessarily do correct forecasting. - -Thus forecasting from an (unticked) ledger state in slot X to slot Y -- within the forecast range --- must be equivalent to ticking from X to Y and then "forecasting" from Y to Y. -That'd be visualized as a square commuting diagram. -Note that ticking from X to Y is usually only sound if there's no blocks in that slot interval, but the part of the ledger that we forecast is stable, and so cannot be affected by those blocks, and so the ticking is sound in the specific context of characterizing forecasting. - -## `Ticked` data family - -We introduced the `Ticked` data family to ensure that the Consensus Layer ticks exactly once between blocks. -The abstract interface maps an unticked ledger state to a `Ticked` ledger state, and applying a header/block is the _only_ way to map a `Ticked` ledger state to an unticked ledger state. - -By encoding this alternation between ticking and application in the types of the abstract interface, we prevent ourselves from accidentally ticking too few or too many times. - -## Partiality of Ticking - -In our code base, ticking is a total function. -Forecasting, on the other hand, is partial, since it is able to reject requests that violate the forecast range. -(It's important to note that such a request is not doomed: the node might just need to process another block or two before the slot of interest will be within the forecast range of its selected chain's tip.) - -However, the Consensus Layer itself will never need to tick farther than the forecast range. -The ledger rules might actually be able to do so, since it's mostly just a matter of the state _not_ changing. -It could plausibly cause problems within the ledger rules if an entire epoch has no blocks, for example, so there's definitely no guarantee that the resulting ledger state would actually be useful. -But again: the Consensus Layer will never request such a tick. - -The inductive argument is that all the ticking the Consensus Layer does is ultimately guarded by some forecast, unless someone has altered the node's files between executions (or if there's a bad bug somewhere else). - -- The mempool only ticks by a single slot, so any non-degenerate forecast range supports that. -- The leadership check immediately aborts if it cannot forecast the `LedgerView`. - The mint only proceeds if the leadership succeeded. -- The ChainSync client forecasts the `LedgerView` before it applies any header. -- The ChainSel logic only applies blocks whose headers arrived via a ChainSync client or were minted by this node. - The node also processes blocks from its on-disk storage when initializing, but those blocks were either minted by this node, acquired by this node via ChainSync (and BlockFetch), written by another trusted node (eg via Mithril) between executions, or written by some other means that is not explicitly unsupported. - -Thus, it's reasonable for the ticking function to have a total type because none of its calls within the node can fail; it's always guarded by a forecast. - -## Cross-Era Ticking - -The only time we have ever envisioned wanting to tick a ticked ledger state --- despite our current types preventing it --- is in the Hard Fork Combinator. - -In particular, the HFC must tick from one era into the next era when appropriate. -In today's code, the HFC achieves this by translating the ledger state after the final block of an era into the next era, and then ticking that ledger state across the era boundary. -But that involves a ledger state of the next era existing in a slot before that era starts, which is confusing and has lead to some errors in the past. -Conceptually, it'd be much clearer to tick the ledger state up to the era boundary, then translate it, and then tick the rest of the way. -But our current `Ticked` typing disallows that kind of incremental ticking, unless the translation's type does unticking, and that also risks confusion. - -It's worth noting that the HFC already uses a custom interface for forecasting across eras. -We could [introduce a similar interface for ticking across eras](https://github.com/IntersectMBO/ouroboros-consensus/issues/345). -The implementation for some era boundary, which is lower-level than the `Ticked`-based interface, could use the less surprising tick-translate-tick scheme. - -Moreover, that cross-era ticking would still be guarded by cross-era forecasting, and so it would be bounded by the cross-era forecast range (which is not necessarily equivalent to either era's internal forecast range). -In particular, the cross-era forecast range cannot cross multiple era boundaries, which is justified by lower bounds on how much warning there is within an era ahead of the next era transition. -Thus the HFC only requires a cross-era ticking function from each era to the next, rather than to even later eras. - -## Bounding Ticking and Forecasting Computations - -On a single valid chain, the Consensus Layer will never tick across the same slots multiple times. -However, Ouroboros involves short forks and potentially invalid blocks. -On the other hand, even for a single chain, the Consensus Layer would forecast across the same slots multiple times: it does it each time the wall clock enters a new slot as part of the leadership check, and it does so each time any peer sends it a header. - -Ideally all ticks would be inexpensive, but the occasional spike is managable, since short forks are short lived. -An expensive forecast, on the other hand, can be disastrous. -If the leadership check's forecast takes too long, then the node might be late to produce its block. -If that forecast takes longer than a slot, then the node might not even check every slot, which is unacceptable. - -For these reasons, the ledger rules contain certain optimizations that either prevent forecasts from ever paying certain costs or else ensure that forecasting across some particular slot is only expensive the first time it happens and subsequent forecasts will then avoid those costs via memoization. diff --git a/docs/website/contents/for-developers/VersioningSchemeDecision.md b/docs/website/contents/for-developers/VersioningSchemeDecision.md deleted file mode 100644 index c5fb807863..0000000000 --- a/docs/website/contents/for-developers/VersioningSchemeDecision.md +++ /dev/null @@ -1,645 +0,0 @@ -# Choosing a Versioning Schemes - -This document records our discussions around choosing how to version our packages. - -In its current state, the document is primarily focused on one question: for each individual package, how should the version listed in the `.cabal` file on the main integration branch relate to the version in the `.cabal` file in the latest release? -In particular, I think this question is almost entirely independent of usings `git` branches versus `git` tags for releases, SemVer versus PVP, etc. -This document should eventually specify that level of detail as well. - -Given its current focus, without loss of generality, suppose the repository contains only one package while considering the proposals below. - -## Desiderata - -- *Conventional Version Numbers*. - We'd like our release versions to have the standard shape of `A.B.C`, and the standard rules that `A` must increase for breaking changes, `B` must increase for backwards-compatible changes, and `C` must increase for anything else (eg bugfixes/documentation/etc aka "patches"). - - - Some of our proposals below don't care about the distinction between `A` and `B`. - Instead of repeating the semantics of `A` and `B` in each proposal, we refer to `next(A.B)` with the intention that the developer's determine whether to increment `A` or `B`. - - - You are of course free to decide any PR should increment `A` or `B` even if the proposed rules do not require it. - Ultimately, the only risk of such spurious increases is confusing/inconveniencing downstream users. - - - Note, in the context of [the PVP](https://pvp.haskell.org/) eg, our `A` dimension here would itself denote a pair. - -- *Simplicity and Familiarity*. - We'd like the versioning scheme to be simple to explain and ideally already well-established. - -- *Ease of Execution*. - We'd like the process of cutting a release to merely involve following a very simple checklist. - We'd like it to require as few inputs, discussions, decisions, etc as possible. - -- *Distinguished Development Versions*. - We'd like to distinguish between the two possible semantics of a version number. - - - The version of a released thing identifies some immutable thing, which is always somehow more refined than any thing---but especially another _released_ thing---that has a lesser version number. - We denote this kind of version by "release version" below. - - - A development version refers to some mutable thing that is improving during the time between two releases, eg the version on the main integration branch. - Note in particular that there will usually be multiple different commits that all have the same development version number. - We denote this kind of version by "`main` version" below. - -The main integration branch is typically named `main` in fresh GitHub repositories, so that's what we'll use in this document. - -## Proposal RisingEdge - -PRs do not alter the `main` version. - -To cut a release from a commit COMMIT1 on `main` that declares version `A.B.C`, add to `main` a commit COMMIT2 that extends COMMIT1 merely to declare the version `next(A.B).0` or `A.B.(C+1)` depending on what has changed on `main` since the previous release, and announce COMMIT2. - -Cons: - -- `main` versions and release versions are not distinguished. - -- Cutting a release requires assessing all the changes on `main` since the last release. - -## Proposal FallingEdgePatch - -A `C`-level PR doesn't alter the `main` version. -Each `A`-level PR must update the `main` version from `A.B.C` to `(A+1).B.0` unless `A.0.0` is already greater than the previous release. -Each `B`-level PR must update the `main` version from `A.B.C` to `A.(B+1).0` unless `A.B.0` is already greater than the previous release. - -To cut a release from a commit COMMIT on `main` that declares `A.B.C`, announce COMMIT. -Also immediately update the `main` version to `A.B.(C+1)`. - -Cons: - -- `main` versions and release versions are not distinguished. - -- Some `main` commits will declare version `A.B.(C+1)` even if that version is never officially released or is created only later by backporting _different_ (patch) commits to a previous release branch. - -## Proposal Parity - -Each `main` version `A.B.C` has an odd `B`. -Each release version `A.B.C` has an even `B`. -This is similar to the GHC Team's scheme. - -PRs do not alter the `main` version. - -To cut a release from a commit COMMIT on `main` that declares version `A.B` (where `B` is necessarily odd), announce a new non-`main` commit that extends COMMIT merely to declare version `X.Y = next(A.B)` (where `Y` is necessarily even). -Also immediately update the `main` version to `X.(Y+1)`. - -Cons: - -- Commits on `main` that only include patches since the previous release would still spuriously include the `Y+1` increment in the `B` dimension. - -## Proposal NonZero - -Each `main` version is degenerate; eg it is always version `0`. -Each release version is the usual `A.B.C`. - -PRs do not alter the `main` version. - -To cut a release from a commit COMMIT on `main` (that necessarily declares version `0`), announce a new non-`main` commit that extends COMMIT merely to declare the version to be `next(A.B).0`, or `A.B.(C+1)` depending on what has changed on `main` since the previous release. - -Note that the degenerate versions could carry information. -EG they could be just a single number. -The only requirement is that they are inherently distinguished from release versions. - -Cons: - -- `main` versions would always be less than some older released version, which could cause confusion (among people and/or tools). - -- Cutting a release requires assessing all the changes on `main` since the last release. - -## Proposal Dimension - -FYI - -``` -Prelude Data.Version> makeVersion [1,2] < makeVersion [1,2,0] -True -``` - -Each `main` version has only two dimensions: `A.B`. -Each release version has at least three `A.B.C`, where `C` can be `0`. - -PRs do not alter the `main` version. - -To cut a release from a commit COMMIT on `main` that declares version `A.B`, announce a new non-`main` commit that extends COMMIT merely to declare version `A.B.0`. -Also immediately update the `main` version to `next(A.B)`. - -Pros: - -- It enforces all desired invariants. - -- It's a very mechanical state machine, easy to execute and also easy to immediately recognize which state it's in. - -Cons: - -- The multi-sorted state transition system prevents any explanation from being comparatively small. - -- This scheme is certainly not already well-established! - -- It incurs spurious increments of `A.B` when the only differences between two releases were patch PRs. - -## Proposal Dimension124 - -Proposal Dimension above has the downside that it incurs spurious increments of `A.B` when the only differences between two releases were patch PRs. -The following enrichment adds the minimal amount of additional complexity to avoid that without losing any invariants. - -Each `main` version is `A`, `A.B` where `B>0`, or `A.B.C.2718`; it is never three-dimensional. -Each release version is the usual `A.B.C`. -`2718` is just a recognizable magic number; it's so large it's unlikely to come up in actual versioning and it's the first digits of _e_, which is related to _growth_, which is what the `main` branch is for. - -PRs alter the `main` version as indicated in the following diagram. - -``` - A --------[A-level PR]---------> A - A --------[B-level PR]---------> A - A --------[C-level PR]---------> A - - A.B --------[A-level PR]---------> A+1 - A.B --------[B-level PR]---------> A.B - A.B --------[C-level PR]---------> A.B - - A.B.C.2718 --------[A-level PR]---------> A+1 - A.B.C.2718 --------[B-level PR]---------> A.(B+1) - A.B.C.2718 --------[C-level PR]---------> A.B.C.2718 -``` - -To cut a release from a commit COMMIT on `main` that declares version `A`, announce a new non-`main` commit that extends COMMIT merely to declare version `A.0.0`. -Also immediately update the `main` version to `A.0.0.2718`. - -To cut a release from a commit COMMIT on `main` that declares version `A.B`, announce a new non-`main` commit that extends COMMIT merely to declare version `A.B.0`. -Also immediately update the `main` version to `A.B.0.2718`. - -To cut a release from a commit COMMIT on `main` that declares version `A.B.C.2718`, announce a new non-`main` commit that extends COMMIT merely to declare version `A.B.(C+1)`. -Also immediately update the `main` version to `A.B.(C+1).2718`. - -The above is summarized in the following diagram, which relies on this legend depicting the semantics of the one kind of node (state) and the semantics of the two kinds of edges (transitions). - -```mermaid -%%{init: {'themeVariables': { 'edgeLabelBackground': 'black', 'clusterBkg': 'transparent', 'clusterBorder': 'transparent' }}}%% -graph LR - %% colors from https://davidmathlogic.com/colorblind/ - %% theming syntax from https://mermaid-js.github.io/mermaid/#/theming?id=customizing-themes-with-themevariables - - %% invisible nodes - preLEGEND[ ]; style preLEGEND height:0px - preLEGEND1[ ]; style preLEGEND1 height:0px - preLEGEND2[ ]; style preLEGEND2 height:0px - - LEGEND["what the subsequent version on main branch must immediately be"] - - preLEGEND --- preLEGEND1 --> |cut the release X.Y.Z| LEGEND - linkStyle 0 stroke:transparent - linkStyle 1 stroke:#E1BE6A - - preLEGEND --- preLEGEND2 --> |merge a PR| LEGEND - linkStyle 2 stroke:transparent - linkStyle 3 stroke:#40B0A6 -``` - -This diagram is a schema: one instance exists for every concrete value of the release version `A.B.C`. -Crucially: the result state of each `release X.Y.Z` transition also exists in its own instance of the schema. -Thus, this schema inductively defines an exhaustive (infinite) state machine. - -```mermaid -%%{init: {'themeVariables': { 'edgeLabelBackground': 'black', 'clusterBkg': 'transparent', 'clusterBorder': 'transparent' }}}%% -graph LR - %% colors from https://davidmathlogic.com/colorblind/ - %% theming syntax from https://mermaid-js.github.io/mermaid/#/theming?id=customizing-themes-with-themevariables - - START[ ]; style START height:0px - - %% cause the layout algorithm to group up the principal nodes, those states between release A.B.C and whatever the next release is - subgraph " " - cright["A.B.C.2718"] - bplusleft["A.(B+1)"] - aplusleft["A+1"] - end - - %% invisible intermediate nodes that force each release transition to reach outside of the above subgraph - RELEASEA[ ]; style RELEASEA height:0px - RELEASEB[ ]; style RELEASEB height:0px - RELEASEC[ ]; style RELEASEC height:0px - - %% release transitions - START --> |release A.B.C| cright - cright --- RELEASEC --> |"release A.B.(C+1)"| cplus["A.B.(C+1).2718"] - bplusleft --- RELEASEB --> |"release A.(B+1).0"| bplus["A.(B+1).0.2718"] - aplusleft --- RELEASEA --> |"release (A+1).0.0"| aplus["(A+1).0.0.2718"] - linkStyle 0 stroke:#E1BE6A - linkStyle 1 stroke:#E1BE6A - linkStyle 2 stroke:#E1BE6A - linkStyle 3 stroke:#E1BE6A - linkStyle 4 stroke:#E1BE6A - linkStyle 5 stroke:#E1BE6A - linkStyle 6 stroke:#E1BE6A - - %% merge transitions - cright --> |bugfix PR| cright - cright --> |backwards-compat PR| bplusleft - cright --> |backwards-incompat PR| aplusleft - bplusleft --> |bugfix or backwards-compat PR| bplusleft - bplusleft --> |backwards-incompat PR| aplusleft - aplusleft --> |any PR| aplusleft - linkStyle 7 stroke:#40B0A6 - linkStyle 8 stroke:#40B0A6 - linkStyle 9 stroke:#40B0A6 - linkStyle 10 stroke:#40B0A6 - linkStyle 11 stroke:#40B0A6 - linkStyle 12 stroke:#40B0A6 -``` - -The induced state machine ensures that each version is as meaningful as we'd like because `P <= Q` on every PR merge and `R < X.Y.Z < S` on every release. - -```mermaid -%%{init: {'themeVariables': { 'edgeLabelBackground': 'black', 'clusterBkg': 'transparent', 'clusterBorder': 'transparent' }}}%% -graph LR - %% colors from https://davidmathlogic.com/colorblind/ - %% theming syntax from https://mermaid-js.github.io/mermaid/#/theming?id=customizing-themes-with-themevariables - - L1[P] --> |merge a PR| R1[Q] - linkStyle 0 stroke:#40B0A6 - - L2[R] --> |cut the release X.Y.Z| R2[S] - linkStyle 1 stroke:#E1BE6A -``` - -Pros: - -- It enforces all desired invariants. - -- It's a very mechanical state machine, easy to execute and also easy to immediately recognize which state it's in. - -- It allows for the natural minimal progression of release versions. - -Cons: - -- The multi-sorted state transition system prevents any explanation from being comparatively small. - -- This scheme is certainly not already well-established! - -Notes: - -- The above state machine is natural for a monorepo, since you wouldn't make a release if nothing had changed. - However, in a polyrepo, you might regret updating all the revisions to `A.B.C.2718` if you want to do your next release when some of the packages haven't changed. - You can slightly complicate the state machine to avoid that happening. - - - Split the `A.B.C.2718` node into two: `A.B.C.2718` and just `A.B.C`. - - - Transition from `A.B.C` to `A.B.C.2718` only when merging a bugfix/etc PR. - Otherwise `A.B.C` has the some outgoing transitions as `A.B.C.2718`. - - - Change all of the `release X.Y.Z` transitions to target `X.Y.Z`. - Thus, you set the `main` version to the release version immediately after cutting a release, but _any_ PR affecting that package should increase its `main` version to at least `X.Y.Z.2718`. - -## Proposal Redimensional - -What should the version on your main branch as of merging a PR that changes your package? -The code is now more advanced than the previous release---call that `A.B.C`---so it should have a greater version than `A.B.C`. -That's either `A.B.(C+1)` for a bugfix, `A.(B+1).0` for new functionality, or `(A+1).0.0` for a breaking change. -Let's suppose the PR adds a feature and so sets the version to `A.(B+1).0`. -As a result, the resulting merge commit that declares that it defines version `A.(B+1).0` of the package. - -If you were to now announce that commit as version `A.(B+1).0`, then all will be intuitive and risk no surprises. -However, suppose you never announce that commit; perhaps it's too incremental to trouble your users with a dedicated release. -Instead, the next thing you do is merge another feature PR. -There are three options for how that second feature PR should affect the version. -- The second PR bumps the version to `A.(B+2).0`. - This would be unintuitive/surprising because now the timeline of releases will skip version `A.(B+1).0` of our package. -- The second PR bumps the version to `A.(B+1).1`. - This would be very unintuitive/suprising for the same reason as `A.(B+2).0` and also because it violates the usual semantics of version components. -- The second PR leaves the version at `A.(B+1).0`. - This would be unintuitive/surprising because there are now two commits (forever accessible via the main branch) that both claim to define version `A.(B+1).0` of the package. - (Many readers might be unalarmed about that, but I suspect acceptance/the status quo is partly why.) - -The above thought experiment generalizes to the following claim. - -> Without a distinction between development versions and release versions, the maintainer must continually choose from the following unappealing options. -> -> - Have multiple commits (forever accessible via the main branch) that all claim to define the same version of the package. -> - Skip over some version numbers in the release timeline. -> - Release after every PR that changes the package. - -How, then, to distinguish between dev versions and release versions? -The core requirements are as follows. -- Every release version should be familiar, eg the standard `A.B.C`. - (In the context of [the PVP](https://pvp.haskell.org/) eg, this `A` component would itself contain two inner components.) -- Both must be compatible with standard tools. - For example, standard tools must be able to parse both dev versions and release versions. -- The repository as of the merge commit of a PR must not declare release versions for packages that the PR changed. -- A package must have a release version as of a commit announced as a release of that package. -Thus the first PR that alters a package after the previous release must change that package's declared version from the release version to a dev version. - -The remaining question is what should that dev version be for a specific PR? -Suppose the previous release was `2.2.2`. -Also suppose this PR is just a bugfix. -A promising idea is to use `2.2.2.0` as the new dev version. -- It has one more component than the release version, so it's distinct. -- Standard tools typically support a variable number of components. -- Moreover, `2.2.2.0` is greater than `2.2.2`, which seems intuitive: it's more correct than `2.2.2`. -- Similarily, it's less than all the possible next releases: `2.2.3`, `2.3.0`, and `3.0.0`. - -Suppose instead the PR added a feature instead of fixing a bug. -Is it still the case that new version should be `2.2.2.0`? -It does seem surprising that a version `2.2.2.0` would have more _features_ than version `2.2.2`, since they both start with `2.2`. -One could dismiss this, arguing that `2.2.2.0` is obviously a dev version (it has the extra component), and so people who understand the distinction between dev versions and release versions would know not to infer anything more than "2.2.2.0 is at least one PR ahead of version 2.2.2". - -However, standard tools do not understand the distinction! -In particular, `Cabal` will happily pick `2.2.2.0` when the downstream user has written the constraint as `>= 2.2.2 && < 2.3.0`. -In this case, because the commit that defines `2.2.2.0` adds a feature, `Cabal`'s naive inference based on `2.2.2.0 < 2.3.0` is unsound. -One could also dismiss this concern about tooling, though, because only devs (here or downstream) should ever be building dev versions, and they should only do so explicitly (eg building from source by building a git worktree or by listing a specific git commit as the dependency). -As long as no one installs a dev version package into a repository, there's no risk of a tool that picks amongst versions from some repository even considering a dev version. -Dev versions are never _released_, and so should never be in any public package repository such as Hackage or [CHaP](https://github.com/IntersectMBO/cardano-haskell-packages). -The most likely way we can imagine a dev version might end up in a repository would be if a developer/user who doesn't know any better builds from source and installs a dev version into their machine's local package database. -That single risk seems manageable. - -This suggests the following proposal. -- Each release version is `A.B.C`. -- Each dev version is `A.B.C.D`. -- Any PR that alters a package in a way that should affect the next release version should update its version as follows. - - If the version was `A.B.C` before the PR, bump it to `A.B.C.0`. - - If the version was `A.B.C.D` before the PR, bump it to `A.B.C.(D+1)`. - - This rule isn't fundamental, but it ensures that every PR touches the version, which in turn ensures `git` will raise merge conflicts for backports/rebases/cherry-picking/etc. - Those conflicts force the developer to make adjustments to versions. - Those conflicts are necessary and also trivial to resolve but would be easy to overlook without this rule leveraging `git` to remind us. - Additionally, this means that no two code-changing commits in the subset of a single branch will declare the same version---or set of versions if the repo has multiple packages---which seems intuitive. - - Similar conflicts will also require updating open version-altering PRs after each version-altering PR is merged. - Con: that will likely be tedious. - Pro: it will likely lead to more linear integration branch history: you might was well rebase while you're updating the version bumps. - - If you want `D` to exactly count the number of relevant PRs since the previous release, then you'll need to require every merge is a [fast-forward merge](https://git-scm.com/docs/git-merge#_fast_forward_merge); see [`git merge --ff-only`](https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---ff-only). -- Cut a new release as follows. - - Merge a fresh PR that doesn't alter the package but does bump dev version `A.B.C.D` to the next release version, depending on the contents of the relevant PRs since the previous release: - `(A+1).0.0` if there were breaking changes, else `A.(B+1).0` if there were some new features, else `A.B.(C+1)`. - (Note that `.D` is present, so at least one version-influencing change was made. - If the version in the commit was still `A.B.C`, why are you announcing a new release?) - - Announce that commit as a release of the packages that have changed since the previous release. - (In a monorepo, there's just the one. - But in a polyrepo, there may be packages that haven't changed since the previous release.) - -## Proposal EasierRedimensional - -There is a variant of the above that means only release PRs alter the version, which is more scalable. - -- Each release version is `A.B.C`. -- Each dev version is either `A`, `A.B`, or `A.B.C.0`. - - (We have fixed `.D` at `.0`, so that each PR doesn't need to alter it. - This unfortunately does increase the risks of backports/rebases/cherry-picking/etc failing to bump the version.) -- Typical development PRs do not alter versions. -- Cut a new release as follows. - - Merge a fresh PR that doesn't alter the package but does bump dev version `A.B.C.0` to the next release version, depending on the contents of the relevant PRs since the previous release: - `(A+1).0.0` if there were breaking changes, else `A.(B+1).0` if there were some new features, else `A.B.(C+1)`. - (Note that `.0` is present, so at least one version-influencing change was made. - If the version in the commit was still `A.B.C`, why are you announcing a new release?) - - Announce that commit as a release of the packages that have changed since the previous release. - (In a monorepo, there's just the one. - But in a polyrepo, there may be packages that haven't changed since the previous release.) - - Immediately merge another fresh PR that adds the `.0` component to the versions of the just released packages. - So what was `A.B.C.0` before the release became either `(A+1).0.0`, `A.(B+1).0`, or `A.B.(C+1)` after the first PR and now becomes either `(A+1).0.0.0`, `A.(B+1).0.0`, or `A.B.(C+1).0` after the second PR. - -## Proposal Redimensional124 - -Recall that the motivation for Proposal Redimensional dismisses the concern that people and/or tools will be confused by `A.B.C.D` possible having more features or breaking changes compared to `A.B.C`. -Those not ready to dismiss that concern can consider the following proposal, which considers enough additional shapes of dev version to eliminate that risk. -- Each release version is `A.B.C`. -- Each dev version is either `A`, `A.B`, or `A.B.C.0`. - - (We have fixed `.D` at `.0`, for consistency with the other two dev version shapes, which don't have the degree of freedom. - This unfortunately does increase the risks of backports/rebases/cherry-picking/etc failing to bump the version.) - - (It may be helpful to recognize `A.B.C.0` as `A.B.C + ϵ = A.B.(C+1) - ϵ`, `A.B` as `A.B.0 - ϵ`, and `A` as `A.0.0 - ϵ`, where ϵ stands for a 3-vector ["bigger than [`0.0.0`], but smaller than all the [others]"](https://en.wikipedia.org/wiki/Greek_letters_used_in_mathematics,_science,_and_engineering).) -- Any PR that alters a package in a way that should affect the next release version should update its version as follows. - - If the version was `A` before the PR, leave it. - - Else if the version was `A.B` before the PR: - - If the PR makes a breaking change, bump it to `(A+1)`. - - Else leave it. - - Else if the version was `A.B.C.0` before the PR: - - If the PR makes a breaking change, bump it to `(A+1)`. - - Else if the PR adds new functionality, bump it to `A.(B+1)`. - - Else leave it. - - Else the version must have been `A.B.C` before the PR. - - If the PR makes a breaking change, bump it to `(A+1)`. - - Else if the PR adds new functionality, bump it to `A.(B+1)`. - - Else bump it to `A.B.C.0`. -- Cut a new release as follows. - - Merge a fresh PR that doesn't alter the package but does bump dev version to the next release version, as follows. - - Bump `A` to `A.0.0`. - - Bump `A.B` to `A.B.0`. - - Bump `A.B.C.0` to `A.B.(C+1)`. - - Announce that commit as a release of the packages that have changed since the previous release. - (In a monorepo, there's just the one. - But in a polyrepo, there may be packages that haven't changed since the previous release.) - - Announce that commit. - -## Proposal ScrivvyRedimensional - -Maintain a `wip-status` directory for each package. - -When merging a PR, add one of these empty files as appropriate to each package the PR alters. - -- `/wip-status/major/` -- `/wip-status/minor/` -- `/wip-status/patch/` - -(`` is the timestamp, commit handle, and branch name, [like `scriv`](https://github.com/nedbat/scriv/blob/cd79a2a618eb752075bbf45e93ad6b7576a2924a/docs/index.rst#getting-started).) - -In particular, if the PR should add `wip-status/minor/`, then it should do so even if `wip-status/major` is non-empty. -That would ensure that backporting this PR onto a branch with an empty `major` directory would still appropriately alter the `wip-status` directory. - -Immediately before announcing the release of some package, merge a commit that does both of the following. - -- Bump each package version according to the contents of its `wip-status` (leave it unchaged if the directory is empty). -- Remove all files from the three `wip-status/{major,minor,patch}` directories. - -_Remark_. -If you maintain a separate changelog per package, then `scriv`'s [Categories](https://github.com/nedbat/scriv/blob/cd79a2a618eb752075bbf45e93ad6b7576a2924a/docs/concepts.rst#categories) can be leveraged for this, instead of these empty files. - -Pros: - -- A PR's contribution to the subsequent release's version bump is judged when reviewing the PR instead of being assessed (many days) later. - -- It does not have distinct dev version and release versions, but inspecting the contents of a specific commit would let you determine whether its actually the release version it declares or else some evolution of it. - But that requires inspecting the special files, which users, downstream devs, and standard tools won't do. - (However, see the Remark below.) - -Cons: - -- It requires the additional consideration/discussion of which of the three `wip-status/{major,minor,patch}` directories to add the empty file in for each package the PR touches. - This makes it a little harder to merge a PR, but not as much as writing the changelog entry would. - (It avoids merge/rebase conflicts the same way that `scriv` does.) - -_Remark_. -You could also add the extra `.0` version component from Proposal Redimensional in a commit immediately _after_ the release. -That extra `.0` would be naturally removed by the pre-release commit, since you're only releasing a package if its `wip-status` directory is non-empty. -It suffers the same coarseness of dev revisions as Proposal Redimensional, because every commit between release `A.B.C.D` and release `A.B.(C+1).0` would be versioned `A.B.C.*.0` even if some have more features than the other---and similar for major version bumps and breaking changes. -But that should be mostly harmless, since development versions (`A.B.C.D.0`) should be visible downstream only when developers are very explicitly opting-in to them. - -# Second Draft of this whole document - -When should you update the version declarations in your package manifests (eg the top-level `version:` field in your `.cabal` file)? -We would prefer for some unassailable authority to enumerate and explain the archetypal options, but we have not yet discovered such an article in our research or discussions. -This short document therefore assembles what prior art we have found into such a resource. - -Executive summary: the challenge of maintaining versions is qualitatively equivalent to the challenge of maintaining a changelog. - -### Design Space Overview - -It's a surprisingly rich design space, but the following concepts delineate its perimeter and the main trends within it. - -A principal dichotomy among possible version declaration maintenance schemes has become apparent during our research. -- Definition _RisingEdge_. The version declaration is altered by (some of the) development PRs; it's already correct when it comes time to announce a release. -- Definition _FallingEdge_. The version declaration is altered only immediately before announcing a release. - -A few desiderata have also become apparent. -- Definition _TypicalReleases_. We do not want our releases to surprise downstream devs or users; no exotic release version numbers, no gaps or weird orderings in the sequence of released versions, neither too frequent nor too infrequent, etc. -- Definition _EasyPR_. We do not want our scheme to significantly increase the average- and worst-case effort required to prepare, usher, review, and/or merge a PR. -- Definition _EasyRelease_. We do not want our scheme to significantly increase the average- and worst-case effort required to prepare and/or announce a release. - -The most extreme RisingEdge scheme would require that every PR increments the version number. - -| TypicalReleases | EasyPR | EasyRelease | -|:---------------:|:------:|:-----------:| -| ✗ | ✗ | ✓ | - -This rule is so simple that the ✗ for EasyPR is somewhat surpising. -The hidden problem is that this scheme causes spurious merge conflicts among all your PRs. -It would only be possible to merge PRs sequentially and merging one PR requires rebasing every other PR and updating its version number diff (assuming a single target branch). -That usually implies a very poor contributor experience. -(If you're wondering about variations on this, such as "only bump the version if it hasn't already been bumped", see [below](#possible-risingedge-compromises).) - -We assign ✓ for EasyRelease because each release doesn't require any additional work; merely announce the result of the latest PR. -Relatedly, though, we assign ✗ for TypicalReleases because it's unrealistic to release after every PR. -Therefore the eventual timeline of your releases will have confusing gaps between the released version numbers. - -The opposite scheme would be the most extreme FallingEdge scheme, in which normal PRs never change version declarations, only release-preparation PRs do. - -| TypicalReleases | EasyPR | EasyRelease | -|:---------------:|:------:|:-----------:| -| ✓ | ✓ | ✗ | - -We assign ✓ for TypicalRelease because this scheme constrains neither how often you release nor the evolution of version numbers. -We similarly assign ✓ for EasyPR because the scheme requires nothing from normal PRs. - -However, we assign ✗ for EasyRelease because the scheme requires assessing all of the changes on this branch since the previous release from this branch. -This is a problem because PRs should be assessed while they're being developed and reviewed, active in the teams' minds, instead of some days/weeks later when the team has "paged out" the details of the PR. - -It is unlikely that the version control history, the list of pull requests, or any other _automatic_ log can be used to trivialize the obligation of the post hoc assessment. -Even if we assume an ideal commit messages and/or PR descriptions, there will likely be a burdensome number of them. -The slightly more realistic assumptions of commit messages and/or PR descriptions that do have ideal content but don't have perfectly uniform structure means the assessor would still have to thoroughly read each, judging what the content requires of the version bump under consideration. - -However, there is one standard log that can often make this assessment much easier: the changelog. -It's not automatic, but it is often structured around "additions/changes/etc", which are exactly what determines the next version under a policy like SemVer, for example. - -Thus our final scheme to consider is a variant of FallingEdge that also requires/assumes the maintenance of a _bumplog_, which is merely a degenerate changelog that contains nothing more than what's necessary to determine the next version number for each changed packaged (ie one classification of `patch`, `minor`, and `major` for each merged PR). - -| TypicalReleases | EasyPR | EasyRelease | -|:---------------:|:------:|:-----------:| -| ✓ | 90% ✓ | 95% ✓ | - -We assign ✓ for TypicalRelease for the same reason as FallingEdge. -We assign a partial 90% ✓ for EasyPR because the presence of a correct bumplog entry requires non-trivial effort from the submitter and the reviewer. -We also assign a partial 95% ✓ for EasyRelease to account for the following small checklist for each release. -- Scan the bumplog entries that are new since the previous release from this branch. - (We the degenerately minimal structure of the entries ensures this is easy.) -- Thereby determine what the next version should be for each package being released. -- Add a commit that sets those versions accordingly. - -If you're envisioning a single bumplog file, then you might be wondering why this scheme wouldn't also incur spurious merge conflicts among PRs, etc. -Fortunately, this is already a solved problem for changelogs; see tools like https://scriv.readthedocs.io/en/latest et al. - -_Remark_. -We chose 90% and 95% based on the use of a degenerate changelog. -Mature/stable projects likely already have a non-degenerate changelog that would make the pre-release assessment required by FallingEdge very simple, if not totally trivial. -Thus, such projects' teams might assign slighty better and/or worse scores to EasyPR and/or -EasyRelease to this scheme, depending on how they choose to resolve the tension between the bumplog and the structure/thoroughness of their actual changelog. -One notable option, though, is to keep the two separate: maintain the additional bumplog used only for assessing version bumps; we would still score that as above (90% EasyPR and 95% EasyRelease). - -## Possible RisingEdge Compromises - -There are some comprimises you could make to the most extreme RisingEdge scheme. - -You could allowing for batched merges and only require that the single merge commit for a batched increases the version. -That would eliminate some of spurious conflicts, but not all. - -You could also require that PRs don't need to bump the version if a previous PR has already sufficiently bumped it. -That would likely eliminate many of the spurious conflicts, but not amongst the first PRs after a release. -However, it comes with an additional subtle problem. -This scheme means that eg a bugfix PR merged after a new feature PR would not adjust the version declaration. -If that bugfix were then backported/rebased/cherry-picked onto a previous release commit, then now it _should_ being increasing the version. - -The upshot is that schemes that depend on the order of PRs are brittle in the context of rebases/cherry-picks/etc. -We do not consider those operations to be exotic, especially since they are commonly used to backport some improvements to an older release branch, which is a relatively common task among stable/mature projects. - -## Distinguishing dev versions and release versions - -TODO discuss how to maintain the extra `.0` component, including a risk assessment of its motivation - -## Annotated Bibliography - -- https://semver.org is clear about how release versions should relate to one another, but doesn't advise about how to maintain them correctly in your repository. - The same goes for https://pvp.haskell.org. - -- https://opensource.guide/best-practices/#bring-in-the-robots mentions https://github.com/semantic-release/semantic-release. - In our opinion, this tool relies too much on automation. - A typo in your commit message, forgetting to the annotation in your commit message, etc could all lead to surprises. - However, its clean specification supplies good inspiration for a human-friendly checklist. - -- We realized the correspondence (obvious in hindsight) with the maintenance of changelogs when reviewing the process documented at https://github.com/IntersectMBO/plutus/blob/master/RELEASE.adoc, especially the scripts. - - - ------ - -Desiderata: - -- A.B.C is the version declared by an actual release. - - For all time, the next greater released version is one of either A.B.(C+1), or else A.(B+1).0, or else (A+1).0.0. - -- XXX is the version declared by source code during the development between releases. - - A.B.C < XXX and XXX < A.B.(C+1) and XXX < A.(B+1).Z and XXX < (A+1).Y.Z - -Problem: the version declaration of a commit should not be dependent on the -nearest preceding release on that branch. - -EG the XXX declared by a bugfix commit immediately after the commit that -released A.(B+1).0 would might change the version declaration to A.(B+1).0 - epsilon. - -However, it is common practice to cherry-pick that commit onto the commit that -released A.B.Z, in which case the bugfix's version declaration should instead be -A.B.(Z+1) - epsilon. - - - - -The internal version representation is A.x.B.y.C.z, where x y and z are sets of ids that uniquely map to development work. - -The (partial) order is lexicographical. -Each A/B/C component uses the usual order on integers. -Each x/y/z component uses set inclusion (partial) order. -The actual release A.B.C is equal to A.{}.B.{}.C.{}. -(In fact, I think you can assert that number.number abbreviates number.{}.number.) - -Every element of a set is X.Y.Z-timestamp-string. - -- You must merge a PR whose source branch diverges from the target branch - earlier than some release on the target branch--you have to rebase at least as - far as the latest release on the target branch. - -- X.Y.Z must be the version of the youngest release on the PR's source branch - when it was merged. - -- timestamp is most recent UTC time at which the X.Y.Z part of this id was - changed (ie after the final rebase prior to merging the PR). - -- string is arbitrary, but enough to avoid collisions (eg repository name and PR - number is likely a useful start). - -x must only contain ids starting with X.Y.Z where A <= X. -y must only contain ids starting with X.Y.Z where A.B <= X.Y. -z must only contain ids starting with X.Y.Z where A.B.C <= X.Y.Z. - -IE you can backport work freely, but "forwardporting" work requires you to -update the ids appropriately. - -Finally, extend the relevant parsers of ghc, ghc-pkg, cabal, stack, et al with the `version-directory:` field. - -``` -version: A.x.B.y.C.z -version-directory: $path/ -``` - -Tooling must expect that path to be a directory. -It must also contain the ids as the names of files in the `$path/x/`, `$path/y/`, and `$path/z/` directories. -It must fail if any of those id files are non-empty. - -Alternative: publish a git --merge-strategy that does set union to resolve conflicts in `dev-version-x:`, `dev-version-y:`, `dev-version-z:` fields, which must have one element per line. diff --git a/docs/website/contents/for-developers/index.md b/docs/website/contents/for-developers/index.md deleted file mode 100644 index 353d8b2391..0000000000 --- a/docs/website/contents/for-developers/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Introduction - -This section of the Ouroboros Consensus is intended for committers and developers who want to contribute to the codebase. Please also review the [Contributing guidelines](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/CONTRIBUTING.md) from the code repository. diff --git a/docs/website/contents/for-developers/utxo-hd/Overview.md b/docs/website/contents/for-developers/utxo-hd/Overview.md deleted file mode 100644 index 53f60b9dc4..0000000000 --- a/docs/website/contents/for-developers/utxo-hd/Overview.md +++ /dev/null @@ -1,28 +0,0 @@ -# High level overview of UTxO-HD - -UTxO-HD is an internal rework of the Consensus layer that features a hybrid -database for Ledger State data. UTxOs are stored in a separate database that -can be backed by an on-disk database or with an in-memory implementation. - -Each of those backends have specific behaviors and implications, so we will -refer to them individually by `InMemory` and `OnDisk`. - -End-users of the `InMemory` backend (the default one) should not appreciate any -major difference in behavior and performance with respects to a pre-UTxO-HD -node. - -End-users of the `OnDisk` backend will observe a regression in performance. For -now the `OnDisk` backend is implemented via LMDB and not optimal in terms of -performance, but we plan on making use of the LSM trees library that Well-Typed -is developing for a much better performance. In particular operations that need -UTxOs (applying blocks/transactions) will have the overhead of a trip to the -disk storage plus some calculations to bring the disk values up to date to the -tip of the chain. - -In exchange for that performance regression, a Cardano node using the `OnDisk` -backend can run with much more modest memory requirements than a pre-UTxO-HD -node. - -In terms of functionality, both backends are fully functional. - -For a more extensive description of UTxO-HD, see [the full documentation](utxo-hd-in-depth.md). diff --git a/docs/website/contents/for-developers/utxo-hd/future-ledger-hd.md b/docs/website/contents/for-developers/utxo-hd/future-ledger-hd.md deleted file mode 100644 index 4ce8a4e8f1..0000000000 --- a/docs/website/contents/for-developers/utxo-hd/future-ledger-hd.md +++ /dev/null @@ -1,258 +0,0 @@ -# Ledger-HD sketch (UTxO-HD v2) - -This document describes the result of the discussion between Ledger and -Consensus teams on 2022-01-17 about the future steps on UTxO-HD which would not -make sense to be called this way anymore in future versions and therefore we -propose Ledger-HD as a replacement. - -Below, we outline the tables that are expected to be moved to the disk, their -dynamics, the main computations that will leave the Ledger and some open -questions. - -This is meant to be just a sketch, details are not worked out yet. - -## Scope of Ledger-HD - -The plan for Ledger-HD is to move the following tables to the disk (we will show -the "lenses" that reach each data structure from the new epoch state): - -- The unified map of `rewards`, `delegations`, `pointers` and `deposits` - -```haskell -( ne :: NewEpochState era ) - & ( nesEs :: NewEpochState era -> EpochState era ) - & ( esLState :: EpochState era -> LedgerState era ) - & ( lsDPState :: LedgerState era -> DPState (EraCrypto era) ) - & ( dpsDState :: DPState (EraCrypto era) -> DState (EraCrypto era) ) - & ( dsUnified :: DState (EraCrypto era) -> UMap (EraCrypto era) ) - -data UMap c = UMap !(Map (Credential 'Staking c) (Trip c)) !(Map Ptr (Credential 'Staking c)) -``` - -- The current stake distribution per stake credential - -```haskell -( ne :: NewEpochState era ) - & ( nesEs :: NewEpochState era -> EpochState era ) - & ( esLState :: EpochState era -> LedgerState era ) - & ( lsUTxOState :: LedgerState era -> UTxOState era ) - & ( utxosStakeDistr :: UTxOState era -> IncrementalStake (EraCrypto era) ) - -data IncrementalStake c = IStake - { credMap :: !(Map (Credential 'Staking c) Coin) - , ptrMap :: !(Map Ptr Coin) - } -``` - -- The stake snapshots - -```haskell -( ne :: NewEpochState era ) - & ( nesEs :: NewEpochState era -> EpochState era ) - & ( esSnapshots :: EpochState era -> SnapShots (EraCrypto era) ) - -data SnapShots c = SnapShots - { ssStakeMark :: SnapShot c -- Lazy on purpose - , ssStakeMarkPoolDistr :: PoolDistr c -- Lazy on purpose - , ssStakeSet :: !(SnapShot c) - , ssStakeGo :: !(SnapShot c) - , ssFee :: !Coin - } - -data SnapShot c = SnapShot - { ssStake :: !(Stake c) - , ssDelegations :: !(VMap VB VB (Credential 'Staking c) (KeyHash 'StakePool c)) - , ssPoolParams :: !(VMap VB VB (KeyHash 'StakePool c) (PoolParams c)) - } - -newtype Stake c = Stake - { unStake :: VMap VB VP (Credential 'Staking c) (CompactForm Coin) - } - -newtype PoolDistr c = PoolDistr - { unPoolDistr :: - Map (KeyHash 'StakePool c) (IndividualPoolStake c) - } - -data IndividualPoolStake c = IndividualPoolStake - { individualPoolStake :: !Rational - , individualPoolStakeVrf :: !(Hash c (VerKeyVRF c)) - } -``` - -As noted by [@JaredCorduan](https://github.com/JaredCorduan), after CIP-1694 is -complete, there will probably also be a `ssStakeMarkDRepDistr :: Map (KeyHash -'DRep c) Coin` and a `ssDRepDelegations :: VMap VB VB (Credential 'Staking c) -(KeyHash 'DRep c)`. - -- The reward update - -```haskell -( ne :: NewEpochState era ) - & ( nesRu :: NewEpochState era -> StrictMaybe (PulsingRewUpdate (EraCrypto era)) ) - -data RewardUpdate c = RewardUpdate - { deltaT :: !DeltaCoin - , deltaR :: !DeltaCoin - , rs :: !(Map (Credential 'Staking c) (Set (Reward c))) - , deltaF :: !DeltaCoin - , nonMyopic :: !(NonMyopic c) - } -``` - -Where the `PulsingRewUpdate` is just a mechanism in order to pulse through the -stake snapshot and in the end yield a `RewardUpdate`. - -## Dynamics of these maps - -### Unified map - -On each application of a block (i.e. the `BBODY` rule) and each tick (i.e. the -`TICK` rules) we know what entries of the unified map are needed to execute the -rule. Therefore it fits the current design of UTxO-HD, and therefore can follow -the _same_ pattern as we currently have for the UTxO set: - -- Before calling the ledger rule we can query for the needed entries -- We can present the ledger with the values they asked for, but restricted to - the data available in the disk + changelog -- The ledger will either provide diffs for the given values or will return - updated values that we can then diff with the provided ones -- The resulting differences can be included in the current definition of the - `DbChangelog`. - -In particular, we know that the sets required for the deltas on the unified map -are small and therefore fit the overall design. - -> **_PLAN:_** Consensus will have a new table on the `LedgerTables` that will -> represent the unified map. Perhaps even 4 tables or a table of triplets. It -> will have its own place on the `DbChangelog` too. The flow above describes the -> general strategy for calling the `BBODY` rule, i.e. `(re)applyBlockOpts` and -> for calling the `TICK` rule, i.e. `applyTickOpts`. - -### Stake distribution - -The update to this map is performed by `updateStakeDistribution`. It is known -before calling the `BBODY` rule which UTxOs are going to be deleted and the rule -execution logic itself knows the UTxOs that are going to be added. Therefore we -can follow a logic similar to the above: - -- Before calling the ledger rule we can query for the needed entries -- We can present the ledger with the values they asked for, but restricted to - the data available in the disk + changelog -- The ledger will either provide diffs for the given values or will return - updated values that we can then diff with the provided ones -- The resulting differences can be included in the current definition of the - `DbChangelog`. - -> **_PLAN:_** Consensus will have a new table on the `LedgerTables` that will -> represent the incremental stake distribution (maybe two tables, one for creds -> one for ptrs). It will have its own place on the `DbChangelog` too. The flow -> above describes the general strategy for calling the `BBODY` rule, i.e. -> `(re)applyBlockOpts`. - -### Stake snapshots - -The snapshots are rotated by the `snapTransition` rule (called by `TICK`). This -is the most complicated of the three because it involves accessing the unified -map and the `IncrementalStake` in their entirety in order to fold them. We do -these two steps: - -``` -step1 = (dom activeDelegs ◁ credStake) ∪ (dom activeDelegs ◁ ptrStake) -step2 = aggregate (dom activeDelegs ◁ rewards) step1 -``` - -Where -- `activeDelegs` comes from the delegations in the unified map, -- `rewards` come from the unified map, -- `credStake` and `ptrStake` come from the incremental stake - -However, there is an important note here. The `ssStakeMark` is only used to be -put in `ssStakeSet` on the next snapshot rotation, then `ssStakeSet` is only -used to be put in `ssStakeGo`, and `ssStakeGo` is only used to prepare the -`PulsingRewUpdate`. This is done in `PulsingReward.startStep` and it also uses -the `rewards` map of the unified map. Assuming the reward calculation is done -outside of the ledger rules, the snapshot is not really needed by the ledger. In -that case we would avoid providing the whole map to the Ledger because the -calculation would be performed outside of the ledger rules. - -The `ssStakeMarkPoolDistr` field is used to be put in `nesPd` on the -`NewEpochState` (by `NEWEPOCH`) which later will be used to provide ledger views -and calculate leader schedules. Note this is purely a Protocol concern and thus -probably a Consensus concern. - -However it seems that the `ssPoolParams` are in fact modified by the Ledger. -This should not be very problematic as we would know in andvance which pools are -updating their params, and we could replicate the schema above for this map. - -## Reward computation and the ADA pots - -The way the rewards computation happens now (see `PulsingRewards` and -`Shelley.Rules.Rupd` and `Shelley.Rules.Tick`) is that on each ticking we pulse -a chunk of the rewards update so that when we reach the epoch boundary we want -to have pulsed through the whole `ssStakeGo` snapshot that was used when -creating the pulser. - -In the end, the reward computation has to produce a `RewardUpdate`: -```haskell -data RewardUpdate c = RewardUpdate - { deltaT :: !DeltaCoin - , deltaR :: !DeltaCoin - , rs :: !(Map (Credential 'Staking c) (Set (Reward c))) - , deltaF :: !DeltaCoin - , nonMyopic :: !(NonMyopic c) - } -``` - -where we will use the `delta*` fields to update the treasury, reserves and fee -pot on the `NEWEPOCH` rule. We also use the `rs` field when calling -`updateRewards` which happens also on `NEWEPOCH`. - - -If Consensus can compute the `RewardUpdate` (possibly on a separate thread that -traverses the map at its own pace?) then we can provide the `RewardUpdate` to -the `NEWEPOCH` rule so that the pots can be updated. - -> **_PLAN:_** Consensus will compute the rewards outside of the Ledger and will -> provide the parts of the `RewardUpdate` to the ledger. In particular, on the -> epoch boundary, it will provide `deltaT`, `deltaR`, and `deltaF`. Ledger will -> not compute the `RewardUpdate` thus the pulser becomes dead code. - -> Moreover, the ledger will provide a function `f :: Block -> Set -> (StakeCredential c)` so that Consensus can supply Ledger with only the part of -> the `UMap` (the unified map) that it requires. In particular, Consensus will -> have to apply the `rs :: !(Map (Credential 'Staking c) (Set (Reward c)))` field -> of the reward update to the unified map on the epoch boundary, prior to -> computing this view for the ledger (to ensure that reward withdrawals are -> correct within the given block). - -## Snapshots and Leader Schedule - -The `checkIsLeader` functions for Praos and TPraos makes use of the stake -distribution by stake pool in the `LedgerView` (see the definitions in -`ouroboros-consensus-protocol`). If the snapshots (and therefore the -`ssStakeMarkPoolDistr` field) reside in the Consensus side, we can produce the -relevant stake distributions when needed and don't involve the ledger. In any -case this functionality is in between Ledger and Consensus so it makes sense to -move it out of the ledger. - -> **_PLAN:_** Consensus will manage the snapshots to produce stake distribution -> by pool that can be used by Consensus later to resolve queries about the -> LeaderSchedule. Ledger will not know about the Snapshots. In particular, the -> UTxO-HD report includes the concept of Snapshots of tables, which would be -> used to manage and access these snapshots. - -Note that this implies creating a new package or component at the -Consensus-Ledger boundary whose owner would probably be the Consensus team as -its responsibilities would be related with computations required for the -Consensus protocol (leader checks, and similar). - -## Open questions - -- Should the Ledger return the diffs? it actually internally compute diffs, but - they the diffs are applied to the values before returning. If we wanted to - return the diffs instead, there are many intermediate layers through which - they will have to be floated, but it should be doable. - -- Rewards withdrawals are known beforehand. Ledger could produce deltas that - would take effect in a future epoch boundary. diff --git a/docs/website/contents/for-developers/utxo-hd/migrating.mdx b/docs/website/contents/for-developers/utxo-hd/migrating.mdx deleted file mode 100644 index 9c7148596f..0000000000 --- a/docs/website/contents/for-developers/utxo-hd/migrating.mdx +++ /dev/null @@ -1,211 +0,0 @@ -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Migrating to a UTxO-HD node as a user - -This is a checklist of modifications needed to be performed by node users when -migrating to UTxO-HD. It aims to ease the transition for node 10.4. - -## If building the node from source code: install the LMDB library - -:::info - -If you download the binary from the Github release, there is no need to install -`lmdb` as the distributed binary is statically linked. - -::: - -As the Consensus layer now allows for the use of the LMDB backend, the -development library needs to be present on the system for building. If -using Nix, this library will be available in the Nix shell. Otherwise, -it will have to be manually installed: - -

- -## Populate the new configuration options - -The shape of the configuration file was slightly altered to put together all the -options related to the LedgerDB into a JSON object `"LedgerDB"`. The shape of -this object is as follows: - -```json -{ - ..., // other top level configuration options - "LedgerDB": { - "SnapshotInterval": INT, //in seconds - "NumOfDiskSnapshots": INT, - "QueryBatchSize": INT, - "Backend": - } -} -``` - -Notice that `"SnapshotInterval"` and `"NumOfDiskSnapshots"` have moved from the -top-level to the `"LedgerDB"` object. The option `"DoDiskSnapshotChecksum"` has -been deleted as snapshots now include the metadata unconditionally. - -By default, `"SnapshotInterval"` is set to $2 k = 4320$ seconds, and -`"NumOfDiskSnapshots"` is set to 2. - -`"QueryBatchSize"` sets the size of the batches in which the store will be read -when querying the store for a big range of UTxOs (such as with -`QueryUTxOByAddress`). By default we read the store in batches of 100,000 -values. - -The value of `` depends on your choice of backend for UTxO-HD. It can -be one of these: - -
- - - - This is the default value for `"Backend"` so you could leave it - undefined. We suggest setting it anyways to avoid confusion. - - ```json - { - ..., - "LedgerDB": { - ..., - "Backend": "V2InMemory" - } - } - ``` - - - ```json - { - ..., - "LedgerDB": { - ..., - "Backend": "V1LMDB", - "FlushFrequency": INT, - "MapSize": INT, // number of GBs - "LiveTablesPath": PATH - } - } - ``` - -The explanation for the new options applicable only to this backend -follows: - - -- `"FlushFrequency"`: The number of immutable blocks that need to exists before - we flush the sequence of differences to the disk. Smaller implies more - frequent disk writing, bigger implies more retained memory and slower - consulting of values. By default it is set to 100 blocks. -- `"MapSize"`: LMDB needs to be given the desired mapsize with which the - database is open. See the [LMDB - docs](http://www.lmdb.tech/doc/group__mdb.html#gaa2506ec8dab3d969b0e609cd82e619e5). - By default we set this value to 16, which is fine on Linux as the file - progressively grows. On Windows this will write a 16GB file directly on the - disk. This is something that LMDB does, out of our control. -- `"LiveTablesPath"`: LMDB will use a live database on the file system to store - the live UTxO set. Taking snapshots will "copy" this database to the snapshot - path. Therefore this "live" database is not needed for starting a node (as the - one from the snapshot will be used instead), but it will be used by the - running node process. It is recommended that this path is **on SSD - storage**. The default is `mainnet/db/lmdb`. - - - -
- -## Convert the existing Ledger snapshots with `snapshot-converter` - -:::warning - -Backup your ledger state snapshots before converting them to be safe in the -unlikely case that something fails during conversion. - -::: - -The format of the Ledger snapshots in the ChainDB has changed with UTxO-HD. The -simplest way to use the new format is deleting your snapshots and replaying the -chain from Genesis, however this can take some hours. - -We provide the `snapshot-converter` tool which can load a snapshot in the Legacy -format and write it either in the in-memory or on-disk formats for -UTxO-HD. Supposing you have copied a legacy snapshot to -`/snapshots/` you can run the following command: - -
- - -```console -$ cd -$ snapshot-converter Legacy ./snapshots/ Mem ./snapshots/_mem cardano --config -$ rm -rf /ledger/* -$ cp -r ./snapshots/_mem /ledger/ -``` - - -```console -$ cd -$ snapshot-converter Legacy ./snapshots/ LMDB ./snapshots/_lmdb cardano --config -$ rm -rf /ledger/* -$ cp -r ./snapshots/_lmdb /ledger/ -``` - - -
- -:::warning - -You can do this process directly in the snapshots directory in the database -path, but you have to make sure you delete the old format snapshots before -running the node as otherwise you would have two snapshots with the same slot -number and the node would be free to pick the one with the old format -again. Doing the conversion in a separate directory and then copying only the -new format snapshot prevents this situation. - -::: - -:::warning - -In the command above, the target name for the copy of the new snapshot has no -suffix. The snapshot deleting logic omits suffixed snapshots as those are -considered "important" snapshots the user wants to keep around. So if you keep -the suffix in the snapshot name then the node will never delete such snapshot -even if it has two other much more recent snapshots. - -::: - -This will create a snapshot with the proper format for UTxO-HD. See [the UTxO-HD -in depth document](utxo-hd-in-depth.md#storing-snapshots) for more -information on the contents of the different files in the snapshot. - -If the snapshot does not have the expected structure or the backend for which it -was created is different from the backend used by the node, the node will issue -a warning mentioning the `snapshot-converter` and will ignore such snapshot. diff --git a/docs/website/contents/for-developers/utxo-hd/utxo-hd-in-depth.md b/docs/website/contents/for-developers/utxo-hd/utxo-hd-in-depth.md deleted file mode 100644 index f1e079f004..0000000000 --- a/docs/website/contents/for-developers/utxo-hd/utxo-hd-in-depth.md +++ /dev/null @@ -1,333 +0,0 @@ -# UTXO-HD in depth - -This document aims to provide an comprehensive guide on UTXO-HD, why we are -implementing this feature, what brings to Cardano and what it implies. - -## Why does Cardano need UTXO-HD - -Cardano is built following the UTXO model. This means that the Ledger state -contains a map from _transaction inputs_ to _transaction outputs_. A transaction -might consume some of those entries and produce new ones. Each entry is owned by -an address which is the one that can spend it. - -The UTXO set is an always growing data structure. Currently the `cardano-node` -uses a fair amount of RAM but this amount will keep growing as more traffic -takes place on the network (transactions per second, transaction size, block -size, ...). This is bad for decentralization and sustainability of the network -as eventually only powerful machines would be able to participate on it. - -To improve decentralization, a decision was made to move this data to persistent -storage which, albeit slower, is much cheaper than RAM. The Consensus layer is -reworked so that the flow of data now allows for UTXO entries to come from some -backend storage, which might be on disk or in memory trading memory for speed. - -The UTXO-HD feature provides two backends (`V2InMemory` and `V1LMDB`) which can -be chosen in `cardano-node`'s configuration file. - -How these backends work is shown below in this document. - -## UTXO-HD design in Consensus - -:::info - -We are going to focus on Shelley based eras, ignoring Byron for now. - -::: - -### The `NewEpochState` data structure - -The Ledger layer defines the data structure that holds the state of the -blockchain after applying some number of blocks, the `NewEpochState`. Among -other things, this data structure holds a UTXO set which is a `Map` from `TxIn` -to `TxOut era`. - -In order to apply the different Ledger operations, there is no need for this set -to be complete at all times, as only entries consumed by the transactions will -be accessed. When given a block or a transaction, the Ledger code provides -functions for getting the set of keys that would be necessary to exist in the -UTXO set for that block or transaction to apply correctly. Taking advantage of -this, the Consensus layer will modify this container such that it only contains -the entries necessary for the Ledger rules. - -### Shelley instantiation and ledger tables - -The `LedgerState (ShelleyBlock proto era)` data family instances are augmented -with a new field which will hold these entries that will be extracted from and -injected to the `NewEpochState` before calling the Ledger rules. This new field -(which we call _ledger tables_) is a container-like structure parametrized by a -`TxIn` and `TxOut` type families. - -```diff haskell -data instance LedgerState (ShelleyBlock proto era) mk = ShelleyLedgerState { - shelleyLedgerTip :: !(WithOrigin (ShelleyTip proto era)) - , shelleyLedgerState :: !(SL.NewEpochState era) - , shelleyLedgerTransition :: !ShelleyTransition -+ , shelleyLedgerTables :: !(LedgerTables (LedgerState (ShelleyBlock proto era)) mk) - } - -data LedgerTables l mk = LedgerTables { - getLedgerTables :: mk (TxIn l) (TxOut l) -} -``` - -For a Shelley block, these type families are mapped to the same types as above: - -- `TxIn (LedgerState (ShelleyBlock proto era)) = SL.TxIn` -- `TxOut (LedgerState (ShelleyBlock proto era)) = SL.TxOut era` - -To instantiate the `mk` type variable, some _mapkinds_ are defined: - -| `MapKind :: Type -> Type -> Type` | Container | Used for | -|-----------------------------------|-------------------|----------------------------------------------------------------------------------------| -| `ValuesMK k v` | `Map k v` | Ledger states passed to and from the Ledger rules | -| `KeysMK k v` | `Set k` | Querying the disk for the values needed by a block | -| `DiffMK k v` | `Map k (Delta v)` | Carrying the differences created by applying a block | -| `EmptyMK k v` | $\emptyset$ | When not needing info about the UTxO set, or the values are inside the `NewEpochState` | - -The actual invocation of the ledger rules make use of a `NewEpochState` which is -unaware of any of this machinery. We use the `stowLedgerTables` / -`unstowLedgerTables` functions to inject and project the values in the -`NewEpochState` to the ledger tables, making this completely transparent for the -Ledger layer. - -```haskell -stowLedgerTables :: l ValuesMK -> l EmptyMK -unstowLedgerTables :: l EmptyMK -> l ValuesMK -``` - -> ⚠️ It is very important to note that `EmptyMK` just means that _the ledger -> tables are empty_. This says nothing about whether there are values in the -> `NewEpochState`'s UTXO set. In the Consensus layer we take much care to ensure -> that the combination of `EmptyMK` having values in the internal UTXO set only -> happens at the Ledger layer boundary (via `stowLedgerTables`). Any other -> instance of `l EmptyMK` will mean that there are no values in the tables nor -> in the `NewEpochState`. - -### Interacting with the Ledger layer (high level) - -The Consensus layer invokes essentially 4 Ledger operations: forecast, tick and -applyBlock, applyTx. Each one of these rules have different requirements on the -contents of the UTXO set. - -| | Requirements | Input to the Ledger layer | Output from the Ledger layer | -|-------------|----------------------------------------------------------------------------|---------------------------|------------------------------| -| Forecasting | Doesn't use the UTXO set | `EmptyMK` | `EmptyMK` | -| Ticking | Doesn't use the UTXO set but might produce changes on it | `EmptyMK` | `ValuesMK` | -| ApplyBlock | Consumes inputs for the transactions in the block and produces new entries | `ValuesMK` | `ValuesMK` | -| ApplyTx | Consumes inputs for the transactions in the block and produces new entries | `ValuesMK` | `ValuesMK` | - -When ticking and applying a block, the Consensus code computes the difference -between the input and output sets producing `DiffMK` tables. The ticking and -applying steps are executed in sequence, producing a `DiffMK` for the combined -operation. The Consensus layer uses this `DiffMK` to influence the values that -are used when dealing with later blocks. - - -### Managing the differences - -To ensure the properties of the Ouroboros protocols, the Consensus layer needs -to be able to perform rollbacks on the chain of at most `k` blocks (which in -mainnet equals `2160` blocks). Because of this, the differences of the last `k` -blocks cannot be considered immutable and therefore they cannot yet be flushed to -persistent storage. This same principle is the one that dictates that ledger -snapshots (for restarting the node) have to store ledger states before or at the -immutable tip of the chain. - -Following this same reasoning, the way differences are carried around changes -depending on the specific backend used by the LedgerDB, whether it lives on the -disk or in memory: - -#### On-disk backend - -The on-disk backend uses the concept of an _anchor_ which is before or at the -immutable tip. This _anchor_ contains a full UTXO set stored in the disk, in -what we call the `BackingStore`. In order to get values for applying a -particular block, the Consensus layer has to read those values from the anchored -UTXO set and apply all the differences from that point to the tip of the chain. - -This means that to the pre-UTXO-HD LedgerDB that held the last `k` ledger -states, a side sequence is added which holds the differences resulted from -applying each of the last `k` blocks. This sequence is held in a `FingerTree` -which contains the combination of all the differences that can be applied -directly to a set of values. - -The Consensus layer will periodically flush the differences in between the -anchor and the current immutable tip to the on-disk backend, advancing the -chain. - -#### In-memory backend - -The in-memory backend augments each of the `k` values contained in the LedgerDB -to hold a full UTXO set. This emulates exactly how the LedgerDB looked like -before UTXO-HD. After each operation with the Ledger, the resulting differences -are applied to the set of values on the tip, producing the new UTXO set. - -The memory footprint of this solution is almost equivalent to the pre-UTXO-HD -one. There aren't `k` UTXO sets, but just by Haskell's sharing, there is one -UTXO set, the others sharing most of their contents with each one's predecessor. - -### The forker abstraction - -In order to perform operations with the Ledger layer, Consensus defines the -`Forker` abstraction as _an API to evaluate forks_. Forkers give access to -reading values at a specific point in the chain. Its implementation depends on -which backend is at use in the LedgerDB abstracting over both of them. - -It is important to note that when using the on-disk backend, a `Forker` will -mantain a consistent view of the _anchored_ UTXO set, which means that writes to -the anchor are queued while the `Forker` is held. For this reason, `Forker`s -should be an ephemeral resource, released as soon as possible. - -### The mempool - -The mempool behaves pretty much as a virtual block. The design is not -particularly complex as we just ask a `Forker` for the inputs for a transaction -when applying it. - -The only caveat compared to the pre-UTXO-HD implementation when using the on-disk -backend is that some more re-validation of transactions will take place. -Previously, the mempool cached the latest ledger state and therefore we -could run a separate thread that would sync the mempool with the LedgerDB and -revalidate all the transactions asynchronously once the tip of the LedgerDB had changed. - -Now, we might not be able to apply a transaction if the `LedgerState` on top of -which we had applied the others is gone from the LedgerDB as we would have lost -the differences from the anchored UTXO to that particular state. Therefore, -adding a transaction might in some cases trigger a sync with the LedgerDB and -therefore a revalidation of the previous transactions. - -It is important to note that the old behavior (only the thread monitoring the -LedgerDB would trigger a resync) was not crucial, now there is just an innocuous -race between the trigger that monitors the LedgerDB and the process that adds -the transaction, which will result in the same final state regardless of which -of those wins the race. - -### Ledger state queries - -> TODO: revisit, I think these are much much faster now - -Most of the queries don't require the UTXO set, but there are three in -particular that do: `GetUTxOByTxIn`, `GetUTxOWhole` and `GetUTxOByAddress`. We -assume that `GetUTxOWhole` is considered to be a debug query so we don't worry -about its performance. For `GetUTxOByTxIn`, the query is fast because we are -accessing explicit entries in the UTXO set. - -However, it is `GetUTxOByAddress` that poses a real problem, as we need to query -the whole UTxO set, apply all the differences to it and then traverse it -entirely to find out the UTxOs belonging to an address. This query is quite slow -even without UTxO-HD and in fact its usage is already discouraged. It should not -be a responsibility of the node to maintain access to this if it is not needed -by the logic that runs the blockchain, so the plan is to move this into a -separate process/client that runs an index of UTxOs by address that can provide -fast access to it (see -[#4678](https://github.com/IntersectMBO/cardano-node/issues/4678)). - -### The `CardanoBlock` - -The Consensus layer is built around the concept of blocks, and for the specific -case of Cardano, a special block is used: the `HardForkBlock`. A `HardForkBlock` -is an n-ary sum type, which contains a particular block out of the list of -blocks that exist in the Cardano blockchain (Byron, Shelley, Allegra, etc). - -On the outside, a `HardForkBlock` is made in a way such that its usage is almost -transparent for the Consensus layer, just as any other block, however for ledger -tables there are some complications. Revisiting the `LedgerState (HardForkBlock -xs)` instance, we can see that it is an n-ary sum of ledger states for each of -the blocks: - -```haskell -newtype instance LedgerState (HardForkBlock xs) mk = HardForkLedgerState { - hardForkLedgerStatePerEra :: HardForkState (Flip LedgerState mk) xs - } - -newtype HardForkState f xs = HardForkState { - getHardForkState :: Telescope (K Past) (Current f) xs - } -``` - -So, in reality, when holding a `LedgerState (HardForkBlock xs) ValuesMK`, it -actually contains a `LedgerState a ValuesMK` for the particular era in the n-ary -sum. This implies that the contents of the ledger tables are mappings from -`TxIn a` to `TxOut a`, which change on each era. - -However, a value of type `LedgerTables (LedgerState (HardForkBlock xs)) ValuesMK` -will hold mappings from `TxIn (LedgerState (HardForkBlock xs))` to -`TxOut (LedgerState (HardForkBlock xs))`. When defining these type instances we -had two choices: - -- Make `TxOut (LedgerState (HardForkBlock xs))` equal to the `TxOut a` of the - particular era in the ledger state. Aside from the complications implementing - this might impose (in terms of type-level machinery), this would mean that - when transitioning from one era to the next one, the whole UTXO set in the - tables would have to be updated to translate all the entries to the newer - era. If this set was on the disk, this would be prohibitively costly. - -- Make `TxOut (LedgerState (HardForkBlock xs))` a sum type that can hold values - of any eras. This solution makes it very easy to carry `LedgerTables` in the - Consensus layer as values do not need to be translated, in fact values from - older eras might co-exist with those of the current one. The disadvantage of - this solution is that injecting the ledger tables in the ledger state (so - `withLedgerTables :: LedgerTables ... mk -> LedgerState ... anymk -> - LedgerState ... mk`) implies that we are going from hard-fork keys and values - to keys and values of the particular era, making the necessary era - translations on-the-fly. - - This tradeoff was considered acceptable and because of it we put much care - in only injecting small tables, such as the set of values needed to apply a - block (which is bound by the maximum size of the block). Developers integrating - the UTXO solution in other tools should understand this limitation and put - great care in not violating it for example by injecting and projecting the whole - UTXO set on every block which would simply blow up the memory consumption. - -### Storing snapshots - -Before UTXO-HD, ledger state snapshots were CBOR-serialized files containing a -full `ExtLedgerState blk` value. Now there is a separation between the -`ExtLedgerState blk EmptyMK` file and the `LedgerTables (ExtLedgerState blk) -ValuesMK`. This means that snapshots from before UTXO-HD are incompatible with -the UTXO-HD design and replaying the chain will be needed when enabling UTXO-HD -for the first time. Moreover, snapshots created when using one of the UTXO-HD -backends cannot be used with the other backend, and will require a replay. - -:::info - -The mentioned replays can be avoided by using the `snapshot-converter` utility, as described in [the migration guide](migrating.mdx#convert-the-existing-ledger-snapshots-with-snapshot-converter). - -::: - -| | `ExtLedgerState blk EmptyMK` | `LedgerTables (ExtLedgerState blk) ValuesMK` | Live tables | -|-----------|-----------------------------------|---------------------------------------------------|-------------------------------| -| In-memory | `/ledger//state` | `/ledger//state/tables/tvar` | N/A | -| On-disk | `/ledger//state` | `/ledger//state/tables/data.mdb` | `/ledgerdb/data.mdb` | - -In the tables part of the snapshot, the in-memory backend will store a -serialization of the `Map (TxIn (CardanoBlock c)) (TxOut (CardanoBlock c))`, -whereas the on-disk backend will store a copy of the LMDB database. - -There will exist a new JSON file `/ledger//meta` which -describes the backend that was used when creating the snapshot and the CRC -checksum of the on-disk data. - -## Impact on the node - -The **in-memory** backend should have very little impact in the node. - -The cardano-node will perform two operations on startup, and each of them suffer -a varying impact for the **on-disk** backend: - -| | When | Impact | -|---------|--------------------------------------------------|--------------------------------------------------------| -| Syncing | The node has no blocks | Low, cryptographic operations dominate the performance | -| Replay | The node does not have a valid LedgerDB snapshot | High | - -Note neither of these will be frequent scenarios. - -As for the behavior of a cardano-node that is synced to the tip of the chain, -the impact of UTXO-HD should not be problematic because, given the pace at which -blocks are produced (on average every 20s), there is enough time to perform the -UTXO-HD operations. - -The mempool likely won't be able to sustain the same peak throughput as before -UTxO-HD, but it should suffice for the typical load between blocks, and even -between the third block, since the mempool buffers more transactions than fit in -one block. diff --git a/docs/website/contents/howtos/index.md b/docs/website/contents/howtos/index.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/website/contents/reference/index.md b/docs/website/contents/reference/index.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/docs/website/contents/reference/index.md @@ -0,0 +1 @@ + diff --git a/docs/website/contents/tutorials/index.md b/docs/website/contents/tutorials/index.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/website/docusaurus.config.js b/docs/website/docusaurus.config.js index 7d8dbf0e50..fbbab0e98c 100644 --- a/docs/website/docusaurus.config.js +++ b/docs/website/docusaurus.config.js @@ -12,8 +12,8 @@ const editUrl = 'https://github.com/IntersectMBO/ouroboros-consensus/tree/main/d /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'Ouroboros Consensus', - tagline: 'The family of protocols powering Cardano', + title: 'ouroboros-consensus documentation', + tagline: '', favicon: 'img/cardano_icon.ico', // Set the production url of your site here @@ -95,14 +95,24 @@ const config = { // `docs` regardless of what `presets.docs.path` is set to. items: [ { - to: '/docs/about-ouroboros/', + to: '/docs/explanation/', position: 'left', - label: 'About Ouroboros', + label: 'Explanation', }, { - to: '/docs/for-developers', + to: '/docs/tutorials/', position: 'left', - label: 'For Developers', + label: 'Tutorials', + }, + { + to: '/docs/howtos/', + position: 'left', + label: 'HOWTOs', + }, + { + to: '/docs/reference', + position: 'left', + label: 'Reference', }, { href: 'https://github.com/IntersectMBO/ouroboros-consensus', @@ -118,12 +128,20 @@ const config = { title: 'Docs', items: [ { - label: 'About Ouroboros', - to: '/docs/about-ouroboros/', + label: 'Explanation', + to: '/docs/explanation/', }, { - label: 'For Developers', - to: '/docs/for-developers/', + label: 'Tutorials', + to: '/docs/tutorials/', + }, + { + label: 'HOWTOs', + to: '/docs/howtos/', + }, + { + label: 'Reference', + to: '/docs/reference/', } ], }, diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index 0a2ccc9717..3bea79af45 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -18,58 +18,30 @@ const sidebars = { // require prefixing all entries with numbers, which will make inserting a new // entry onerous since we would have to modify the entry numbers of each // subsequent entry. - about_ouroboros: [ + explanation: [ { type: 'category', - label: 'About Ouroboros', - items: [ - 'about-ouroboros/index', - 'about-ouroboros/References' - ] + label: 'Explanation', + items: ['explanation/index'] } ], - - for_developers: [ + tutorials: [ { type: 'category', - label: 'For Developers', - items: [ - 'for-developers/index', - 'for-developers/Glossary', - 'for-developers/ComponentDiagram', - 'for-developers/BlockBlockDiagram', - 'for-developers/CardanoPraosBasics', - 'for-developers/Ticking', - 'for-developers/CivicTime', - 'for-developers/AbstractProtocol', - 'for-developers/AddingAnEra', - 'for-developers/EraTransitionGovernance', - 'for-developers/ChainSync', - 'for-developers/HardWonWisdom', - 'for-developers/StyleGuide', - 'for-developers/ProfilingTipsAndTricks', - 'for-developers/Benchmarks', - 'for-developers/GitProcess', - 'for-developers/ReleaseProcess', - 'for-developers/SanityChecks', - 'for-developers/QueryVersioning', - 'for-developers/BootstrapPeersIER', - 'for-developers/TechnicalReports', - 'for-developers/PreflightGuide', - 'for-developers/NodeTasks', - 'for-developers/HandlingBlocksFromTheFuture', - 'for-developers/Genesis', - ] - }, + label: 'Tutorials', + items: ['tutorials/index'] + } + ], + howtos: [ { type: 'category', - label: 'UTxO HD', - items: [ - 'for-developers/utxo-hd/Overview', - 'for-developers/utxo-hd/migrating', - 'for-developers/utxo-hd/utxo-hd-in-depth', - 'for-developers/utxo-hd/future-ledger-hd', - ] + label: 'HOWTOs', + items: ['howtos/index'] } - ] - + ], + reference: [ + { type: 'category', + label: 'Reference', + items: ['reference/index'] + } + ], }; module.exports = sidebars; diff --git a/docs/website/src/components/HomepageFeatures/index.js b/docs/website/src/components/HomepageFeatures/index.js index e43876cc6c..fb2da59989 100644 --- a/docs/website/src/components/HomepageFeatures/index.js +++ b/docs/website/src/components/HomepageFeatures/index.js @@ -3,20 +3,39 @@ import clsx from 'clsx'; import styles from './styles.module.css'; import ouroboros from "/static/img/ouroboros-image.webp"; - export default function HomepageFeatures() { return (
-
- -
-
-

State-of-the-Art Consensus Protocol

-

Ouroboros is a family of Proof-of-Stake protocols powering the Cardano blockchain, among others. - It is backed by years of research and numerous peer-reviewed publications. This site aims at providing comprehensive and detailed technical - documentation about the implementation of Ouroboros at the heart of the cardano-node.

+
+
+

Welcome to the ouroboros-consensus documentation

+ +

+ This site provides a comprehensive and detailed technical documentation for the + Haskell implementation of the Consensus, + Mempool, and Storage Layers of the cardano-node. +

+ +

+ We follow the Diátaxis framework, which helps you find the information + you need based on your goal: +

+ +
    +
  • Explanations: Understand core concepts, including implementation components, consensus protocols, and network-layer interactions.
  • +
  • Tutorials: Step-by-step guides to get started and achieve a specific goal.
  • +
  • HOWTOs: Practical instructions for tasks like adding an era or working with stored chain data.
  • +
  • References: Technical descriptions of APIs, data structures, serialization, and reports.
  • +
+ +

+ This documentation focuses on the specific Haskell implementation of the Consensus, Mempool, and Storage components used by cardano-node. + + For an implementation-agnostic description of the Ouroboros protocols, network interactions, serialization formats, and others, refer to the Cardano Blueprints. +

+
diff --git a/docs/website/src/pages/index.js b/docs/website/src/pages/index.js index 854ae9068d..dab5991df9 100644 --- a/docs/website/src/pages/index.js +++ b/docs/website/src/pages/index.js @@ -12,15 +12,6 @@ function HomepageHeader() { return (
-

{siteConfig.title}

-

{siteConfig.tagline}

-
- - Ouroboros Overview - 5min ⏱️ - -
); diff --git a/docs/website/src/pages/index.module.css b/docs/website/src/pages/index.module.css index 9f71a5da77..195c3f26d0 100644 --- a/docs/website/src/pages/index.module.css +++ b/docs/website/src/pages/index.module.css @@ -10,6 +10,21 @@ overflow: hidden; } +.heroBanner { + background-image: url('/img/ouroboros-consensus-banner.png'); + width: 100%; + height: 250px; /* Adjust height based on the banner design */ + background-size: cover; /* Ensures the image covers the entire banner */ + background-position: center; /* Centers the image */ + background-repeat: no-repeat; /* Prevents tiling */ + background-color: transparent !important; /* Ensures no background override */ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; +} + @media screen and (max-width: 996px) { .heroBanner { padding: 2rem; diff --git a/docs/website/static/img/ouroboros-consensus-banner.png b/docs/website/static/img/ouroboros-consensus-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..0e30d49ca751f3dc8a27d34eefd121b0bbd59886 GIT binary patch literal 1457079 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

XZ%UZwP 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≺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

Q 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®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%0Ad~AlnP;1eZAX*f4tsJhP4-?227mhj7=Y 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

T?5<+x-Xo|6sY`!Pkt@l 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

Y&CUq}+yT0<$883S3U5Hp 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

YL)&;^cL0b&)pCNb?fKx*NYP};Qq(b7`Q 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

$W-^a}?#k5J#TS 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

qfat?_M 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 r3$Eou6BVYdX zJAV29;)j0Ucj6m=&ewg%PyOoV`jmYA^!57SWrf|KWw#HQd)!gkj!j$Hu?pFr#c8+k zGCwE3lGn(}RuzGp*^ccpc)60SDu~Pk!n3EsuDQ^cMI8)7ZFe}#@<3|PEc@M9?CooT zd(&3p=d8J~>cFgW{7AN7*-IAJW*x_JT|o>3EwHcU_v_Z#rL0@I-Imoi^01hh$1=}j z-ASNk71nmf1A zqgWLBTC}j8%@EEJHe_9GrdRWRFe0x{Lm&uWWj7f49Ne2%wh2lkvTVP`x~dbAuaz#0 z%m~z34Y$XsXE7t@*;prsuSzSgUQs2}VYG0+B6ihlRe!n<0X0t+@Aft$S|+%(8)z$L3mI(k>92&E2iqeOQvE z8N~#-`eKiwY22BBa4&OM1T*Ba_hBD=z!&@A{=qMQ@&|qozW(d~_5b@n{x|)_-;#;I zKI1d~G^ji`X{dByM7gqAX(Td7b-*(o?LpGGWyYv6cJACca$n5MGb7jR$pCW49NEL= zLGX{1Tj^GVf*Fb7)4v}?3I(U_j?*n>v0-Y-K&>ZQ7LsY333-rmzV>KWQvRh;LHke< z&>h7i;Zo=cH62z}0BRlH;G*`w8X7w_#nFP0^1J6gTr|(1%GsV=(Y}B{U=%WM5LZI` z#+OZ>o*S09S1IT5`QA!sRXd7rcUeOf-jrZi6%LO@9!_?Sp#0Pm6=m8?io8_aG5pq6QU3l;aU#%G&ty4%@3MC;TYFsV3Bq&TT;@AQ6K+Ua@@nB3qF@B8XU!pV z1Z_~8sTPvalN%3{eV(>e#YPQa_N6m<7pPNmN7AMphbEd;quzCZa+dI_$4k3ixr-#K z@SreSGMd^>cjY6mB|^Ma_e8*LGi684mFbhhC$<#kCFKJcQ zFxs~anS?0*=|_;M-LlsYmZ3G}NM`!3=Mk+$doc#QZ(rP~9%( zN;aV&?XJ6wt0GB_GwPvUWyb*(Ht|r6V*& z-`AbZCRtUmaCWYN8ApnuW#VD3b0xyUF$(sdrVr4aJ`Z8ba>7l#1hMx2`9J;>fAfFm zpTzfn#s9o-`|#U-+WRkm`tJ39zjwI5EZj8sUX{Bv(k|GJyx85ag9~oH7;cQ}44OTF%$O&(mX7`cNvR~QL4su7S|#{JU7M5GJa;ol zcOpET3&tQA$qUfxq*=hP`}MtF~Ak3MT{975o%DM}*h8djqlSW+zG^ zLWv%;%v_}z(QPBLSAZ`dL`(v(>N%5mW?5uc|A1X!F1|Z*`UanS&w$sD36(AVy4wYyZIn64~r!Kfd-BuPfT;{=KCX6KAoJITqEMiCpK-NNJ z^9!4$#pZ}|KEiGT2~vA{-{SE!*_Q07Y_qm(W(uFNQ52@rNKIqMF- z#}Y}nTBjyb8h9pDXdK4HO4gj)sD%WM#cwz&dscwI-ymniHcfbpQU&o7auAtVVi_|L#rn%| zRk>mZoHr^?Nu%%>aFFU!4;(gX%?&|R75MOUz0RE?vbvt!3<#1=gV!R|;Z1>|#%(p* z7?Zb$D7*Hc*SECb$$e@uS=RAraZRqJmK_`Pi)t!O^>w5o1gy98fV1bC|2TIf)oGG( zP60M<-ymD!2XB{dJPwa2tvuJ0QS|$O}b!$^4z~7tGXqVL`=)mpQnzDYa`F{cGKk@hk$J1K7WSLhx8%Qs{mKaRM(!= zBCy51J66kenApNB>piM{US0a$)>i9MFY^HH>?z9xWoT9+!9HEW!jZXgadM|eLXy@D z{cwtL6*wEvrMb!&STp&#=2@52EIU;QDv>rVh@!Hg6_l+#oq!l&rn`sj)bHf&4cTkp z)JDnIw+T~-psj7ATwZ1rM%Lmq6~(k!FtgqC<&z}Jl$)|a)>2$OOvB)XiG@ywdYX`1`YB_-Ok=WI1Fxn>|sY5XQGdo^6Y`ZxW*{@H)@w<7%IFZg*M{KOCM`@MbQ_Z4yZ zy5lxnj988^*z&#e2u!Y(yCWjZQr4MG*mSHX)!wpq(#>i+ljr+EdSnec;&@d8?hCx( zwl@vc1y8myUGoMO4bFgNF3pTc$_xhXPzR|b9F1T^EH9gVGOt`f-alMIw> zJCG$<2D7YcKWSQ9uC737RV)w65wwjOw9gpYmfKA=Y-6^b@&ogk4l2dfvRO5ER3~v| z(ab!8wJUX0*ciJkLgUrgwpNnKrHheA7W0OkfO$liCDUk#tut)2vKxdO@9=d6cS>V+ zYGRprx;v`1JWMxxCCNp=%+2h+-!Hp(e|q`L`uvCcj!%ByAHkRYe}Bb)`&axs|I)Ae zAZ40a(B_a4;4zKE`{!V#rAm^2)z64Hj z1Sa-7QHVT3ueKHJ>18RCqoH<)XL9izk4s6#|XU}X4fheXHibP$@ylR1QCs^a0ClzATmltSfoj9eYUwBgM%hq zR{^r(ZQ`u^VcoQ_u9>vLZybhbDf?s`*UYQkdJlf3v6Y6vwIyR;C%=bFbvjdihi-lbnQ# zQ^!WMafGsMQ>@3X6+me+wIyec6Lrd|WzD1p9R`~8qzvw}9IQmJt^YJSEO2dOtyrQ} zo;8b26uuH}*~Qb)1k-R50PI}&(w4zGC@tE8d1puR5`Av=gt$E(71f)@M%fiL0VpMh z6vn$LN<4X3E#R?VENk9bTHv&*Jx^}SYxJ-%nkn35-Rrb9&#Wx19mx{vu^q=Qv|iY; zs7FgA3GIZYpQe^VghkHb9Mk176fA&a!*t2mJ#fG{l$7=-edmd;^9tTkp9P@-$B1fL z4v+Akc1zZ+3ft&Y)uh9GN1b1&=RhTOLuF2oSvx;;_Lx=(0aS0sn(v!)+O;84%St1( z3+&j*PQ!lGKhqM};e1=OX5sL`)rL{@ljjH7Z-E4_SC=UVG*Q@SDs3oT?cSKnA>24_ zLX-ri0M&(1=>unG1_NZ&5>+e@g9pQ{3HqEJrv74B|LF)aEtBF}=u2`gc7g&krEp_N zX>EK8fOhQ=g~P_Sd``P}VrJ@@0GSnrV@%RI2`k8X0b+7~N}daAOuyj`n%ihxSO zgg-F1c%rXKZ`Gc*pL$BGR5kz3x#VZo4S##RTQ6#Dhv$0imiC>kvOk^`%9-YYZtCj~ zp79WV^}18cG8|0HyjeBG*gRX@E<}E;l|>9%|B67~Vq>_0t1^Lg`rg`S>BC3k#v((D zMpQ%7riW;c`8O$6BP8T(QhE$31qyw|TNDAPpKNQib%X!2Yk-RH`i3tpoyLE-zyuO+ zL<;SDAuB4bQ!uIQPe;oo#xcr;43emJKPk7IO!-GWjl};lXH{6TkHXzGa0zuk> zWmyLRW+y4yLfiqf1%qR=;C0^838Wz|5jG@XFoS_Ruki}PRw)gG4x<})tZT)6w=I%? zFQ<}}PevSdQxu5UZr8S0aDqFw+3N6)pqbj%q&ULh^~exmoNR ze!1DUZ2`|6W6Ug0&ewhI2&+s$@>b!NxQRj17h)ThU3I5prQs7ZI}jVTQgovFCsga| zOtS8s2eeU*=?v!1*bWej0I-)`Ox6n7DG2*6O5M`u93N4s4l|Oh5^%uRA{pD{VHKmC*c>R zahdA_383VRp-)Sdm9W9K%P=AIdAs zJLCw8^95We^j!CDVENW#9&^^rH!@@P$p8(&RwUTt?@c=Koqk^55}a-@ zpvbFmU=GMdcQiAQFgOp$wj*qy*u_4A9|cqz3pHA>%4n*qiQHTxx1L8TPS>z^j<&DW zre$L|obaBfaO?0a_4*i1rJj3PGDCrH7w(!4AIc*g@#;(i!mt8iTF{!?gxF}Js-bfh zhZjvK*Zx@7e6Pi(y9UvSx_%%Pt2tC5Eb6ptf943riMlgNUCQBEQi*lz;*5DTk@J#T zkS(4m;>E1Tt-sN}L-L=X!Uke(wt=2E`ox(P|URn&adAGMdUAd=?JWEB+GQ zKt?luUM|Cd=9_q~HAfHQNN0=BX$)5AnYnwB<>egnN9}nx1rUJmYN9i1Obha~I5K(1 zjIvh^u%lp)b)|%^MU_}IDM>lH4ihuBQ=AiZR_l2E*7v#o{hmxkQsGhUh@Sxd&GtSvna#yM*4cHh zq`X572IBH;R4g`SV}4wM$s`Ulc%u0{SD%udpFb06RaIzEhevco->XTB=+2w=kRyg|-43Ewx5cP_pLWrH=g9*x+!8DW#v5_ih^`mB~!RcZdsX5+awEY|kY)YTJH zZ2KJb=?qFw!_fzAT1No-y?kyNh9PPY_<-GGcyq=;1x4rQ;=g+Hh*JRHN1iE*F*Jyz zYT5b~E!cghB=COY-P(YC`6K^jf8THX{lD#Z;^ilO_=~hd2FNd*8mQ zF*VG%35VqkTm$M+zqLi9VWkoGAT3C@Ri+@Ut|21{1pOrgrf3UDph}xcT8wV7^A4)i zWdpNRh<0T!o5bwyiw5j%X4}jn?_LYDi#y<0-=VDzQ47dfc z%;FBXnIrpB$KLC@_NF^Flc!q-Mr^Z1CpO)DN92(=H@gwg+4dd#Wxa6k@^fL#MBrs< zQXMNdJ|f%~u~An6*$~-AvWQ4}tqP#>d>Ra7LY1_twOL6n(VRPA$d8gBx499%j5}zT z*|t!0Wm#NaVPX>*Nna>TAhFycdq2TFJNp=6+}oCCL$o|Th&rrCW(jT3%oRwJ2|~I# zj3n@Q0CU7mw`=oez%RaApEvy2AN?Wxkw5gopZl%<-+%Mh{G~tdrxCGZ!RtCA>pkDV z5Ly^rx60bQc}}y;gO5JWp*$hW$OKyZPRwZf(21A3>&AIad3H7+ zd;$r|8cXrzf`#|mXhXMJ_c!w^Gi#Fn*_seXiRi<&j(>@+HwyXpu#cY{OuA`2E~{H& zH!qd%0UT>RaNw}#>^#{(Ic>&GmYNTuWK08RQamnTgtQejaS5B8+Z7I1aga>oob&hr zU%eVrmR|P+<@HJuPTjxy6?R|XTrHZMxn&szHayF}A;<}CA#3Ja$ul=mXQzGOGR-Y)r@gF^CxcLi_gu&NZ7ZHlGde6nW=&O* zH0ZeV&8K>I1W21oXm7R{BR=myNb)nc>2y`lkeIjK3whVKN+*t!I6_}SBD(Ff@{oU2 zd&1{JBeE@8|C&rsqP;HRE5rbGvvb2cG+a~Whip`miI>Iz|?`I z1h-xCXoG59_R>zGxq#I6;q_r>@b!8t`p+5xh>zn?!`e8>aCFH`3*9gcC%Trt!PUoV!#pQE{ACpM;%Uh391W3B~dQN&2gK%ki9wuHm zfDhr9Y`M9HG#YT`sJb9-YZ*=Q3CSm?IuGp_;#{I$vuUa5d{2(NNm7lrD{ckta98fM8y!w6T6{ZQpVRbX&l?6Ljf?JSC8OPv(k{dF-3RR`Y_JA(n0pk! zh1jeN>_Ys&4}biN{*Hg{`~U6#*nZkKef}4J%j-MC$F$h2u2G%~n)QX^n(Gu(Zk`#6 z28w`R%dPqZCF7Ed@0N#|N)YSjZd=P=_g-dji%nRuImtFs4Q`aEOBYgnXNKX`po5zX zTWgb-JA*sIX#u>vtk`+gcq}YnyT9BKSMrS6NSLvMD-Xn)9xgIvoa2t=|o>$13!e!{T=J0jdY?O@(dz}V}0VFYZ)ZGPE)-Rru7QGsIlS!3)X zC9ur(q_58M9B`M!7!V9B_ie14aGw4mK)Bn^`z@3y%wu58&SIIR zqX&`gh78Dd(6!d-ORBKX;EcNGxf}?y@Q7J~l*fkMZ3ma_8x)^Nww<+A2n~!)>Bvv0W}0!(2?VxXIQ8OIWfI!`^nvIpIdz-4o9v z?@j7#N9}&Q&c;sDy&kvIAa)G9M{$5?`>g77%uRIScJfx08ka){PACc)uS2pAw>86@ zHsd%+kw$jq4)XiWUZIz!!TBj`C1`=VDd@CWNSC2b*fHY>$Pvr8pak;t3^|JkZrHg8 zW&pf{L$tgF=4n|%i}S7yKhJb388)2U!{;{iov9ANNO>k0&Plxkapm_bYK}r=QJYAI zMQBf37rGYX4T!~YlxP5)Tutb>rZ%FHS9+p?2f=W78VYv7RZrkic;AUQ{aqijah5XM zXt9sw3;!i)l(Iz`+31osp2z|?9~i4f(6Z@CRX=hpbWX;FQ`7RDmREXAQzYY$b@9;& zQ_(Eo*0@Y2!&~4EimdCK&2C^iIls|$#ILMM5B-xZEyT0;<{Z0TcvKD90hkBeZ zx!`vv{Kbakr(KuG*jU&s#|?Bo@FZhrg<)9H?T)$=wS@sE5rG*u=4yCbH`Y10Qh8n7 zk?P}Y6V!AV;>g!IMrRn-u9D4#xk3P4RYgH~va~M7^He&ZGx`VQrwt-z@OeDMP`26( zV5E3bIz>Mt1Yy({<5}JD}P+RD&4wJ zD?K3$y1lmo>5|B*ne9p#N)pm!bt{k-_I6PfCb8}yJfF$Y+A)uv2r31)uB50xUVZi6 zIQii``U&Do8or#LNhV5%WZ`p(91k=8aBSJU0f|j(J5%!8%jTKNBSok-e*G7N`0nJE zLGWo=Tl)KmBl_OPYMaZd#%}}lNSes%m%q&UWfK$i=$&Tju$DHI7y6afKn|dd#__QR z>MbVS(M%`*3n{{^nrREBPYQHU{)4Ae)o=v;f!g$3^Jp4$m|U|*GN#Gw7Qck&!DI$ zZN4;Y38YDdn>OZAB`CUvrA!jlvFr7JoT6!*;n4+ zRhX=5D`4Oz0QbBks}h8kZJ8IiEeVdQ9?A>E2{YSyzQ^IHE4tn_~yf=ynlwa7UQAxyKG)24i-$Y&xsXEo_U+ZSRUQvtk5wu|kv# zgPL3=aT<+#)7NF#1c}RSt7Amrm*sm` zW+9GBPWS96Rcg>>#f!jwLMHH!+pcSKeX{n8)7hT3{+i04pMk zlqyw971R=RTbohp&uxCWBX+jKquCA}r4s)2x>${S!NQC?1ClVfxz%C6@+QKHG$>jw zKN5s-`4!wjI`W!QxY>>4dv)+Xg4qk~C|p z`pZU(v=w1oVZ3PX884r^{DXHN|Ir`C_k8yY{a62%zxUVwieLH;*yIAktS)2_hRG{{ zz1`Yy#A$X8?=Xz>GI=q5_#8TE_y^E*W_kn#l$Gc{LB~2Cmkg+`+%i!qpFSH%90Mu? zb;jC%)1i9PvGn$v=OObaWiYi-dX$aYaPqkJJ`j``(F8&swJoy7^CW%<1fo$VIN?Zc1)zti5nQYfgnYD3 zp?X~6(M~^ju94w^)@bk1Q^7Msmaj_ByCrxKj;%Fm#!&H#jirbOqHgzxfql-(G{C4m z$gcCSrWAcN`hXzBiu97u^@o!64o-TDb73EdAQ#6>)6R?q09_=+B$TVe4n!*!acvcB z69{!trRq?afJjBxAt0`Fl&wMlY@^3K$egZdfx}m8H{AJH~kO zPx?8|a_8YpQ_04%Go=1jZgNOy6$(FOOJWUJ1vB%FLlP+gc-pe29(gt%cEV2d>h;*v z-x1@OeW7Zh>HJ>u4&DG!w#KwjHbe-j;x0sAsH}i2$Nr*5p<38x4@<#Y*y|T>_JTNV zeq}yR)RlVC@xSTX`%o6WWw_=p16@RuRQbKrC%q&J`!wAze-bbk1AgQIY%|mnGs%&uLd9N`yoztqP15G zmpflZUweE!6AEFn1mGMct5?fF91UserzApLZ2HTfRaPh|GzsKJ-90`Gxz4h&R;3F& z%S78;`Em()fDUK;=f7I~sR*e=X?$w^^@=k6Qo^#Hs!^^%$CZBx067rMcyz1 zbvrJVRE`zB8D%>LmdJtH2uMp`Ph^y0Sx$O(P#Sn(7$zjiB989RABqZ<8LRy6pt1Py zO0D?Arj2u2>1RTwW_oJVApvdBF?iHUpgZ#oR=uV*I5|5&sU@SQ-0MJ7tKj}veZ8^` zRVgF|KMsYc`{1V_9m81Wx`vhpN?JDzU^@;xok&fg)cjP}PFf15Ya3yh%m0cpOIKp>zRv$l!96lpftT4iEfD zFF#m&VlM4tRV}iGuTuh=p2cX$P!2?a@6JY?@uN+5rcP}xHii+B`oQoRG}4NII!%Ic zUFqCAvnHaBPj3&>^43P66`U<@^DFw;(MFul%Q}sKXwt9N7V9jhDIf{)S>>rEKKXU; z!#^_IruL;hLW)JAW@@tJl%G1$f+2`Y>x_Uq_cpHA6))NS;NSm~U;1zUjsNtI{_gL_ z&;G`*{dqrQ(_Zhb7bQXo1Hx=A$4zFxoS^%vw=VEzwa7L@#ByU2G~2K$AsYGB^kLla z70I@!W4&3`Jh7S`=I!iFGiNWoT@*fwLQbBD$--bG+z@mCzUc2`zq~kreZTs;cCgA( z7r}E)UG;@ZP#wpPSV+DabJtK+(Dr&as3CXSI^45}(} z+j4QgC2|oP2EzikEsxk17c9)3V1QS3l_GUi+6cnWX$S*$z-VjjU1!$-8dnsk-)<{t z1s}@Vl7uTwxl7^PPz|b+aEh!6d%?@Q58wZZAKJhF58}fQ|M7q3@A;qp-M{R*7p~Pw zYnU3cqy?p#AAiQar7<^U0o#|etbsBLI37o~MIRZi>(yVGS)^|@1y%KC;$F7hd z$}vO8ECn;G?V`UvbjC7C-a)=DhDT#Wo=Yyo0**2k(Mb~Gp%*ebOKH^}e=}m8PwR!w z5X&)4gZlWYeURe$!E{dk5@%5T;X!UUjwz669U3)|ojU2=iE02YQhneYMtC;Uvhk2J zVU4lbF6l$BQdxSbiZW(HC0dH~LkQ64A~z+MGLz`R#u4S_b1 z)6#(v=QPEhmN7{;N)&Uc&l5Us$%l`oAyChqN&NMSL58LkY>&M@XKRVH6eCObFs$=A z?Qc{*eKz7PDVaYk&F@RAihD)jt=d*a@16D-x*`is?bNg_$AgNg>J`(>+GN&gkfbDL z7Pq|-23>XJZ7z$Pxuu+%f~#KnS=S(xU}vZmTRCwX*D%Pb(Us~stiWJ}ht@YA(fp}d zJ9L#3wIEUQ(`2_KDg|KP9oCMdm!-+^YJQOMQGm?LUaaJ#hcu3VzOl(oj$=rdiCgSe zG#WOQ?j15o>4hQl{Csmb1!E>sJ#tjx$w_zVN2k{wzO+`4=x*qJA~KCs6En?mtH7ik zc5h1WSB`M0TEv40c5W<>x1M0Fc6Oea26V-H`D@|gc_*1ima3`_g^2exF3*3phCaqahM@To#w zOK1lIlx%l)ZhAJ$u9hX0<<+XqA*-!J?=qEWDW@eyvZP~34q3eCQ^;g0hngtERI{IOluj@V+m(xysINJ!(ekf!ttTbJcZjf3#=XjW;CKAK@B176&VS+4@BChT z<2QZb&--TkfFFJO9ydQ1>vkFjIRGa&%@;@_?)nn3I;0}p zBAy2Sbz}#t!;N`xL@|N0W*$bGRi2UBS`Q>0R z6q(5884$F!@>C#`i!oT$$XMR3cJFPLx2@sIi!Y`7dBD(SPCEk3jD22O=BR)_mU}p3 zXAhud+@!-05&p8Uci!$u1ni2~T<)}$^XdM+q_WD ztM*7>EIQpHr`#TJ<1lG$${K(suB!`(hIc-Gr6(BUDAu9u54`GZ5C+&oql*F9%Hd`= zhFpe*OsEXfqg6<%sGo856Y{3^EkM{l(bTwr5GZ44si5CvtT7poJ4NlN1^_X(#c0HYt^{iRI0;dKh!+S{@u{ zSlhZ9a)Y*eX45WU?`KK(2%*t%RW$S%JTr7R0HSKYgPx z2tE!=ql0_s-)a|#6GWAe_rRWfsC6$@!17x0M8rc)rv8p|{twMcf$Z*DZ;UF(x*1xp z&yNZbo4F1Wc2ESliaCpVjukQ?yIAhXy!FU&Ola$&N$T<)sUT<#!ejTTE$frERCyqE z(1vd%{VZLIpAADFDuZ%4;kT;|Kt-w3J`ZE{a7B5sZ{?Onq)U?FQoG{;Qll$Gz%dMR z@&vjX(Fe;(9DzY|3(RYSOYJE?l1a7vdDpPuT*`U=q{@g^ecTwuMpW7bNDhbDU_ zc=UqR8=`xP+hgUWUJYJl#kB98aUBl7BX)bdsHCSkt}^)Nlhb{(ZTQ@ST>Xwl#Lgu3 zxjL~ddz-U(w9L$=E+OevOyjL~@;zgq^+&6W_8&b~9P>EPk>0V z5Je@K8MnddhV5LpZ3~aAB=JCe_`yqD_R*jG3jV+!!B2YmHNWBS`SpLxFMW5BSQ`LN zD(rnVAbE+%|WKp%KaYb z4jzM#BDx3Io_}QGj&0F=MtgztZW|+&eXgV$a6%7EPmRYS=$#s8536i@8SJ*wR$lKs zze9NT;N@Wl|4{23+Q)c~e=Oaj;3hY~)GD_}a-ip6;tmEDTi-Z2idC$0u^70QD4gBG z=BFS_$0A4E-To_I*?IS{Q~i*VHe+6#-=v2>GLr#O-4ohzO@p_SWIg`obfu(vbPvvJ zNKqYl@WFo0^vMH5NI??V*d}|8QuXW8GcPGrlo&PKe0tmiXvRSW1M1*6pS?DR(4Vaz zqf=my2Y{7abm%{R*3ytJEI~vC5_a%JqfgA`;{mVQ2q}ohT(UJduYp~4WI$n3zA@+U zhEpf)OeEu+n2O&t2-;@IN3Y&J zQ7K*zPlNfHKcdth0b=v)NvEa&Re1InaC$Y6{^Y#Ob+j1*HGL7UDtoX=%6N+liW z?lWEjIjf%v*+^QH3_1^%*mf47u9Al)NIclCQhy+ZUy}~Xrm2BZ4yuKR`l6?;&&QPhH^_e3HU)#Vw3oMs&=E9M@d7~O8XHY9S zae_c_C%R(T>|$wEoO%3guR~4e*`couvIbKGaV6*gmGm!Tz|z9RNLDkKB9P348BUAS zDd(sP1WUe4LiO zW6@jlE1alC`)fRllgoZ>#EPuCBjWe`sjvP`zw&?m$Nt0Ljc@p=_8mX_`uY#K$&X&I z?DT4RaDRcc%fK74hIB?0-@|gAzF1wMXhgb_JW^$-hS3@H+6C_3Z7Wio1q9pbUS4;^ zSN&*Sc5lWV?w-kC8kXCBz2WZWo3VV6+hA~uyz|~yaA%RxGK9G?GA)rJZtxwnMW^W| zraqNB+e%rUgbK?W&=|H5+uf7vO1_W?Pg|Meb1*aG5io!8bq8U2_?!mXdb#iSZZ27+ z!9#bl!&dCuvsDmizMRR&#&W-db)i?&B#uw-S5#hRb)Y*FO~stDqyh!4-ExpImCf*CUDZWu8q0L9`;FOc509? zg!EAJJr@wZ_aD^Qj~R$N=CcQxE;h* zI4<7o{@izwF*%8WSWck;TNvtuca4oYQU+LcM;$nmWAJaL(`=(@%$yk`Q9RwjFu!Ix zq}E@gCQJ1a$%plQR3%1-OrS8r5W)hDLAB4Y(PE`Ayp?zl%sksj(z;uk7pj~uAmGWC zL}ne;ZO6KQXuC{_)CscLAlxvKXzP#yh?7(5T^xSh1bL6R;Vgf6RuGpYrzY0Q3t<~< z6BiCG*J{=~M~uTPh3Qntor{|cpMiLrTNCOH%T~i@(zS?>kYk)at7(Pq4y#M{(rO=} zJa8~Ts|UKa96V#LJXJB=0xGFCUEf%0S*qDG)pb>Vgs;j-D=f?aPaD~=ER+I0u}=r2qNGQB8F{5z8zJJTn?!=Uf#I4Jc8`$?m6#uLxF> zrZ+HX#y%gfKSA@8_|^0irAWWVVU0m~ltHMiq|_<^)G>{aP7y`IiP%c1t7S+#QaOy| z^isi7A9KeD8aD7!6vHC`U~>ZE{;hNGzT8!xGYnpyf5f!)b9ymY*};$`FVbwah238rRe#GaW`B z)bLJ>*qJL1%hJS+B;UvEj#wY>$Vy0Sc`=*%V}LV>4`eDH;E9T3jE#9_KiriU;T9GG%SrVCl+khb)abvA&&;6Z0 z^67u;zxx}%>v#MveC})gFZiYpzV2(U`~LLf_wn*>@m1}73_GIu5}LW~&6N>07HseB z%SpPeU;x`}5iAiXB{uS2eg()Z=h?KCIfHP!+#(o>{@py(egxH(h1k_7)EtJDH&%hL z>{ql55k;&K0D|GmQO#&7$cVjRmghW+sz~#(XyJ&kYsI}!09}nVJtFG9s$>z2iym%_ z+xzysv_N$OfET<-6XRw(VC#;3tpx^2TfSfG#8%E3=4zRQO{lrGOCZQRWVf=%3H&ky zHaFbtE;zuP4Z{7}44v8zp_TIE%MySmZCf(T;PS;flqPgpb(Zdo4VpPN>G@+LvD_Ho zG9b!!2G_Ftj%0$;x<>l)bF)J6;_jXlwzKSxWImY1SM=aEuXawcX^Rezh=S_XpLKyL zP`1=FAjBRdzBKJnEG~jK9$DjIB>l;4*8-Byz^*{Jqe%S}uh;;)O z4qQCfk3I?LvQM(!6F;|AN8?G>S>sdnBU4b*Dd!{?H!SdpK5PaY))kA|N$c0;b2!ew zJ4-B$*w9sm!}}Q9=E#H)v~l?$0EKU5Z*71pJF9_Fy?EA2W>$Wt+fNN5cv-meIG~@`0jT zw#(VW^uCO&t@M6=Tbqs(4;};yU8PDPSpRXBu~Gf00P1b+(^3Z|q`045Kjn0!<hd)-YVOS2zS`~ZQ&eF>qq&BLKjsx77 z6yQM2@%QI}u?BvYd|p+ijBQ3KUUAjh>!Xn4y(Dx@aBkQTlGZxCxC$S-$|LW8fv6el zu?`xd-+12IZ+XyL>D6IMoW7Yf6uH5AmbEv#Grj2ezhvnF08`MOOg}m&JnA*JDKW<8 z8k%@&U7l9#Y*g~=B6d>Mxl}Ks5$aw5D7Vl`k6|{Ba;k=lsM53PoO;4<=!RqWAK{Z0 zq9gQ{|8{PJBI+=OHR7^#n!E!y>D`jCC0NurrDHZo&;DnE&1O_7D4dqpsF^#7mUdQwr z%wSP_+4OdbBKpnc+f+f#QkWNkq_)MUsJYytdBKUOS4+5qDBnLL)0`&TveXhsO4A@;JnLP zUCy*1VV7Dp{_E|sqKevoQbyg%(W3e|cmZ(@|xy$MY&RM6^+z4QHLm!-ujW;Tn zP*=j?0k#hCbLpv#>hWXkMh#2T5U}wyoPQp(Y38c(>pulBa#`LOvGb`ilwh~{D7k8t z=qlVuw=g-WQ_xz;5PMUANtCV0L-spo|Zpu-mB{@r(c^XGrkPx$0z$H%W`Yg=4??Fa*re8jj%7CV-Ew&(4wq%&{gW>|oiuT6lF zcP=eBve9aGB8yN>6YF%GFYZtw7jzbkQmMi*LE7>>5mx4eMh^>Q?ZD!F`^(B(&+DE~vpZrfXN3C|5r**P z@fuw20K)>?;gm^BkE4s^i9~CLSGeK3y&D`^rH$%03V%{0oZ98DL z%p$g#p^l+bT^9AJ;?9hK8?njDu$h<5fvXf|Wa4&kEi17j0~>ZN@Rd;=$%VRj835zv zUbI9>VYKk&AG{+zdH=h=58wa&@4n?{{!9PDfB#qh*M7le1nm9BS`e-|Ne|DXfYzPn6DQ$%f3%@%XMfpaSaC66()!yAXP$;K+=BnwL3vrtuzu>UYC8 zfTVwSs@2bX+pcnSai-Okk!-hQ^}u^ z%+VVNGocMZM76)nVHmO1V-7OW)e1`8@$$FbMeZ4O)=%DCUZH7Kf7k&HM_esAF?pG} z?Apomjaug3eC><9!PxDit7eUs?7E5|nor=!JP{S4xBPTqex&S;T*lihzD6kD=QVtc zeYEk>+*Y7wl=<4U)Z~2VhzDBbT42jrMmCv05_uqw#J5*dKQFIVH8S%|f(>U5n+T&^ zyA`d_Fa_32DS6F-*`XxyAW*c;6-#jIHh}ufo2X(2R8r0Kn$b{CJXhl#8&O#tD>fcA z|0#k-*F)Aqv&#XVI}JS2RxLOA#_n)DCks`QH)d+%$aX_hUT{o9FBfORcEG7Y-=eAU zp1I+y%)x@=#ADBmb}k@%${Xp0!siECJ)V@9L4sQR|t8_UX2`6sNoq~4}dQI z^zov2W9di;LuWLYm*1IUuwv!9Wl1kTD}TeIGG!A@KM5_c(+)$Q!r3ucJ@HgaIf|Gt zIh$7JK2NrkYWKZCe)(AvyXBX~*yfW%XD`2#+fDHd@UWfiMxMex8}j+p2Nw zS>75W_EV|KBgi~8x@y&tVp)n)|KDDGy2G6{w_4Q}{(P6&FxE1`Y}+;BTfFhUYCPn_ z4z#}X2IY!msFa0lP%-CepWpru=ZE4%oRgWb{$UIO70*-ifu&j%1C4 zHeI2P`Zn}sYqj!r^3@N{bgIYE;xR#JD^+oD_PqzwTw9igcusYA!!CJl(M98sN6c_K z%aaGN;j^^9_xH|L6ZFeEenq|FiY)LBDRvc^LF` zzrSyv+nkv*n$e7;(agviNtWZ-kqbM%gB_B{q=FN2D-%)`hcYom91~MO1uAihq#UX! zpbP|JFae4bg-wKUVSK|*z=#B+NKtGn3X)?m}Z)d!JKTkLSr(TwO3Lx!7+}NLa0E_IkqFi?y zrmFN!>Bs{ac^DFoIMWV4?2HqzgY0xf_;KWUH}h~+QujvyQJ>rnzUek3JvWAI?laJnxTYM;#ff6L;*-1Is#l*p>BVnuqzB z#fudogs+#b#|iXE+nNqNBT zb)<~<)mP8z#6idvo@)M-wP$jkb-&zsMwoe(i?x3$JNJyJ`|8b)#A#tk@%wq6sFJg= zXGc5+06UJ1(^*+m&>@hPdBCH}n-b~aaYQxba<@oi=Cj*N&z?PgC$MUGG4*2CRUX1e=DP{ysJ z-e!!h<7AcQ`(Gx zPL>XWqU zS4i1p>Q9mJ5^t}d_O4+v@Z`~a%hr$8 zT>zxUIlKPf>1dT6mPUk}LTrHwYujb-1;0!-!E-K4Dbg0BSAVL8OIMO_HOVCrg{2PK z?I86zT5Bbus^-&1x@GpwM1ygQ?4OC#(-{-kTFF|YNVpe><9>dcB+y=Rq5F%z)u-3N z-)=i#P=cru27z3~l#2oz-<{X;*Q}$`YjKx1X}X73N+rY>E}iQDlQ3JUZx2bOcB$s^ z3^)@4)^%Drz3n??Ol$5E?9{|y&@q6kXM-E+?HO5p3EFodwRZ?w1YkNJG`m6!*vTmv z{XZ*?%I}?6Eqhv=bwkNWy^3@?eD3^8niF%OI9B`>&7?S5!=AI*{CmgaY-fZ4F4yoN z%jlrD2q&4MFat-K)K6{uk2Bub}!J! zVQR^icSFu@Hr6pxfLVS%wS=<3CbFsI3Jqc|cnoK>xkB*4gYnwKAj%YFkVcEnrDLvR zMA~^`CP45&$y2KBPZkaf;TGv|Ypj`}YqqIk$r5fwgvBLYXs`0sZD(m<1sO=!YC%EH z*BQSuk#*fpN2Y4W+aj0DJ*w-;oY)1UsDT?2sf%eAs%!s~sA`&QwXYZ&i_QSz|4LNRk{YR4gv!{xi#W_4m?BL&kXY$%sm74zxXph^3VO({&(lsK93K7 z{MGOMj(p?gc>BFL!@|&=ee<-iJR;)gZ7!?C1V(DHxTcIq97fUy3AZ@w)8WSr8P$_H zGAJ+V!vQ;MhL&-5$A5SAcc?>3=9z)6#7XN8!C;m0Vdwok%&SdL2cVnhnJfFOtFG(} z9EW9{_NwO}X7@royuu_=SAn7Yu7_ne^=TVHhxTeh9CEH!oo%XaNz^J1n`n~}I4r}u zA}8(4I1Y=`aU?PjsB7l4C^JKxc|6#8rdh8+Mc3+$k&%A03`3k%Nalvx>no}$&N^zG zbu;_zb|B8E5+(py>_?ypGeh8TyGO#xq0uDJor26Pz(z?3B&wZuH&v>r=N>pMJ;N+B z9lE!}VfVscIl5G~9hnwgC~61J6963W0}<{SCxLdd*FL;%rH`h~WSyyV>GVO80?VK0Xq~)F~pv#Zj z%7<-jc*k7+xSmYXUp_4_-fhDk9#v;W6egsh}GLN2%8V~Iw~ zPGqv3Ud`I+zIunOtbz2+&MtcxfX#s!MM>KI+On+xH;g=EtB!2f6QfcLO}}PMkSk<3 zm_&Os^#oavs^cdGcUaNGdRe3E3 zh=+r-wv$$FQZ-zx0$28wsj<~BdLx1OgyU>++g3_evTaP3GTcQD-lVHbRCJPJDkhZ`Ab`V^ER(DW(stmq<+xvLgp^}Q|z)A1cFKvX^?BaO0 zw#HW1&?(_IxY;!Y-yU0W6Ul=Az-k@=Xo)o44Ystp0%{J*fozkF>8$TwzSvl^e7$T2 z3pI{X$%xAx*kltU`q>4&;I>3_y~Un-Uxs0-mmmG+ALAqBBbowIGRXPP!i>wFcJw<( zq8r5C>u%T6mX-nYRc^4YuH-OP1FKyWxC%v3?$(&{p-O@FDqw$%KvqUR_7b!-gLXf> zNg#zQcBQetb83brXf+a`OXA{&>QVJm`W|O@RVItA`Hj`mz$&nOx{%GQx2AQ$U5B4+ z5~yF3jVf*X69dl3!#9@)Fc#)Tgj8Vus7V!Z**qDf;srU$c4CHZ+6^RW5eX zF>w6qQ#J?9FXZHPWn4*eaj6j&?>YJ~d>Q4eFu#;3dtO983-svm)@M?zF7RTzlctSX z%ho#$^bnHk3_eHTiL857M)|cKn4y+TRq6Ib*9@0i9ze4$*tDBZI|1YXI7ZODWQN|P znh+ESREo1Y&M??Fub55j`PvC+!tzqJqm+FuQw@-sJagx4Ys^>y`bDh7&vOB|?UHmd z+Ck0hMPsAMm50^(6DFp?Gtx+V8UP$TnVX`lOizwJqSS{R$X3&j)on#OV}#)WZ^5$Q>mWtSLGOY$T(ww6>aJDC9u^v`bo=9;Dee@x}6jDqU9h7PE}poV0OksC2IGx{Wj(~ z^UrBb)ep^ak6f&PTOY+e3@5*}3)$yP)xJQDz-54@g;!|jaIsv^aUJ@LqDD6g(su==5SqE69Wo+|18BxoZ8)$S_Y{M}eqiE*d1=Jfj_Ka{~rDGrI}v9e#B2PInk0 zo6`w!bqtR<9**-Khgo`__k1|~ex7#REc*yl1LQPh9*1QsOt(4+Jl2ERNC^PqOmmO( ze%#Fb$TRNCHqGjC^vJA(TiOQE?u>48??= z746sEPX#S@;X`8X3LJMLs%5(%dM8mWP;oY^3!R?IaB+Z);X|M#R%zkhV5W!Pe+1Qx z0cH9XuIcwbSf8SOEaU%IXyIuR_6TILBu#pnMUcTE(iKZ$m-p^O@{*5BWc#nHo?YPT z0#CRly}{4L6*HIV|40p1pOXW)x8e4)H`ES7KAVo98B^Gn;EmGob}J)tOP+P0KJN}sC`skyxo9X;fLU^cv82FP_-YWqUF?>0LwHx zcwDeK(Ped2EK#O0hMAY${-CwDj%Z1w6uc+3E+X~JlZTZZBSeWTm(o|hr~Cj-S_oGy%N(;$>b-GB z+(epmf=*WEWt@qjlQC&y$!2=5W@hd3)PyZOt8Fjg_^DzmKzO)sz#_*GsD63v3sxYEOsF$>h0uG-}L7 z21<9&&7YQjJI7`omDt-_vx&031~SwAm)?|?A&>o0;I+a{0Ac5+?f=5W$PBNS>j&k; zNgR``nqZ*6umMB65f$OoG_&oN^@h~F8jKQ7P>sS&Q;^jM3FR^e?RQBmynmrYTHYy< zL;^}CDZct}>6P+dYx=vkyLx!4*ED$(IyWK0Ia4VoSj^1#^`W`$-KYntoD%?R+xSTZi&cPA|2>qnU+0L4xh*5G0rTkgHIB?fFWSHIQN^Hz zkW_H@%m3LZ-_#~4M! zR7N3;RD-Qr8uf|L=c}4hXB+yUE_J)UUqN3Mq0RpB)NLBsEviqLd)3cao?m$D{!jej zANY6v2_2dP~_?GKv>?aubj^a*v)Z<-)_~v zreMacidG`+s0-0=hQ2xLj5H*Q0EJnad1iHd@XUMKab%_gXPjmSP(6;*&7-a)t9s~! z8O}^M=Sh&XwD3gwndj{|aAugn(i0gc0GL<$F_BV~m+%q`Cl;HXl^BMT;5xZ4?)fS;Mi;r2Z92CLPA zyT$tkzel<~oaTo65f*Xc)mM(g@U?vJum4Sa{qy#zPyfOH)<60`_`SdV*)uOWw`UcA zr#XNvbSmya9BQ3J8$@?a z>=Ob8od#aK6J4EQX3;lJD5TPl+tnL0{?JpAV``MaUA^{B^}(dd+Prtpm*_96G0?tt zU=YQsolKkJd8g?K1yKY#gfy>!^|lZzI?E=u5_4U2NSMm7#mZU&_5G~Oim|Db3j)o&9bT)wq5pXsS=I;jTop~G_Pp8A|`g7a_i(iv6#i~xCnaIFkXI9TLr21*oB(<8e=);EIKz9ua~4&HVcv+$^B0ogfiw=|DRn!Q|(@xbS`{|&tOWVV)as?B0i{EORSk3E9kNbCUf~-0`r&p!`XTGDW{X%31?wgz;$Y_F znK{RKct&|ts%U#NQ}dm6AJmP)B{u$HL^D*U>|Dw2QlNpf)E+6lb$wvKyqyA>JNbIN z$YLz=%UBvx%6;ZE%9^&;%P)vTE<@YC5j;qR%|SqdVra2ece4v#WV%jmDx9h!`JJDl z<*cvU)*PDOa&$DsGC6|^y4$DfvFM29Ey)wIS*3Q%HKTHuH8e34 zb+_>b(7M&$c<5ZlRSyiMe-wqjB?(0G_RaOy8q%B&So~n;`50AH*pp6m;iR@?lqMSL z@Z9hMgB7R@5NhB*e35t6#h2rWDU1Mhv1V>f9asey_j?R%slXe2icIGz{_dM5{T_LZ_) zOJV$Q1dr@-f@I#fZlumzd6dLuhyS=*Q%9&xZJ=Chqa9k|d>GuiTo9ot-LXC%TB)B! z&aGE5t=A6|~f@XsGF9^;!ApSPk>fUCDt!BPI){(c|#6)|N)LevMu6Ic*H20Rk;%fw>O&kH0 zp@gjJC&BB9O2jHq!4cXb@&yvVWAr{kkdh&7Y(jBMD}aMF)bdfm2qLvn7g*|ZvZaLC zK3uSeBc^L`WaIuP7Ao(zkq86{$wrL$!LPX}7$AiV` zu=LtNN{c+*k79-#=8iKAar$8evC$2v4j^#z^Z8@V1#Zm|MR6kOj=10Lc0*)V6681^ z^EkY5d_=m{{Z}yVu9Rn}eQ9K_epd;1vxvKS3Cbu12$-9hN28)XG#+RAVbv4OVE4Em?yac_ zKX4`v_lz@O4iA<9nH^?0fty=IBToN?SN1DJ8bfWGlHEZzLDJWrTsJB2Vi z5Sd3FRnnBKSvt(`5oaDR-|+HF$KBrksW0Pi{UlER_P_Tx{;B`z@BdHzidQ@>EaG%H zueI9FYB>k&G*Cap#1;d_D`Y#)Y@oAyRkAS%co0NbQ4=0mc`^J6ZsVD+FfOg`PUhzP!i~3nH8~ogoHr*7S7P{DOB*IXq)-cL|R#++jKf4_JrADOP9`%BX1_prA zu7P<&$~uYFWESDbcr!3~brjnbJrv}uWBojq2WMP>9+H>Z>V)#P8Evw^tu@n$-8!1f zIGRvJru?$0e4$sn?>M^2TnoWuU_-shY?52_k#)Ug@FF-iKe_-8 zv5fMz^rUQ}RHMj@?5ndT0g%i#2~^*w!`nHYi>@ZPBt9EFnbkmWTiHoRz=k+{9=ewg zjYBzbe}ax+e9-s|G|igL>C|4dS2a1hSAwlFs~m$#w8eH3uKJ5Hn{3jD>G3#lO8~Qc zvV!gRP}xXMzvv#ma7t@FNMZB<0_?fY$`Jt8s-#mK}fXJWH!V@L-QvY|gsR|0e@KxVYdJ`t{JzMa`tQ z9BmS)wfc86GPL}}8!WO?sG?@q@}vUVWk+dHo9caT4k zw^sG?^W)8M_#nVtquxrnsZ(wN%GBCK7f4}AI)cscUj z$NN1_cf-9P(GhvK2Ow{#WE<{GdED}T_HD2*n5AWA_d15VpG9nBo^~9TH?3 zJ6i*itU5ER!(vfgcZ&SAv^?C-GcCIc$F76A6qTiQK)X() zmbpRoV)u|t{TQ2`?2agSZMIRUr|+1wCBSQd2EpxR9dpPpYQl~&oc1;DCpS)x61S0b zqQduR+b}YDZ(?@RGk2~DY`h4NhNPpyrE$^Lw}cj;#M!R6j;P71t(O6J;GjU8XX4@An1fxxP+<`X37TGd>(G+ogm%b-4QsUEYqeh|wP!eM&Ys@*Z(~>J- zB9Y&>4)<>@ysu(kuP61Bh6+U8P;I#hG76Jk(t&9~=;*O-I?KMNsi$M@dP<-4G!rH? z$}m~$q*N+lY{4G_>@O4&gmia_M*!?5XiSs5)4%2=rru$#d;9qW zsvRuGD~)s6hEp8^oSa1!B}Km(3O4B2tf7_|HT(%K3gVR_c6v}r(a#Yf=njJ4rjtM;k_|W0CDN{BNq+jTD^6g=q-ub1iUPLFrL-4eE618ibQ=Y zYx#Zo4eX1w+CNXq=L~maFc?3R>+%9%+{G9&Gc$2;ozgQSjpexH!=qc0_hsZ4=SJrP z27)v#)(RtwP*AW^pti1i?l08Z*QQ%{S5#jTThtQHYq*B!2u15Ae z$wE?wJitX(W;CMpzx%(e;F2U3=_vYXJJFR}sQ_Mv@7FRwIs_e&d0PFUp@wd?2dpl( zSs+_~F14yVu|IlN`4Lk|i{rPf7Mbq#(bsBu>0i7owX&C+FvSzU3 z=B|(9e+WMqoC*L0SumCicRy+NFe#EpCjk?QOyeHa1$}|cS~qrafRI<%cR{kw&>8Nt zXib+RE4vVbJj#<`WPH-V5eptv*lmlmnu+Z&Bv;?d!N?(=S`{}k%x1>g1gwK5zuY4Ha`E4Kg#K%uN~E0ESLBa52N&}L<|+B)Ozb|i3v-{W2gw~xcbX*m35eNR?L zL`zHfVQ04~Zo(6hX&K?it$H?~c{J{0TEz_Y*HV^Gykm)CS|bnhj+qg5`2CE-tDBA0 znJnDglDBG=Sy;Fo%_*MACU%ZKR$=alJIvDUXdbPBLb}<#36*lbSbg}YN=3|?8xUtX z{GJ&4uD?JY-BG%3wLb%9-Ke-*T4r^!&It4BD&5v)?uCwvb~+9NBEkTeALspkc(+nZ z;DAMDy89U@at+A3%*#&TDC4#~>vSCAX66=mKjOsk43Qsv?VY#p_}O2uzxCO?*?0cV z-|$EOg@5e(fBm;Vqr-c=$6LgscsJXH{(`wNuN_cbPw6yXw|x{y5;-%?9ibmK9z4gtx# zI0?8I_o4jS`Y1qaI@TY~*C>`$1fWulo33H7DngV>q)c@75jjru#e0TKJAktWmW`q% z;I3`2f1WVipdtzetI5e#{nQ(x(_H2s2^BcZACE~hHAuVweUpcW1e-@dOis^%p)LCb z|C)b-;9LW2VxIca$#TH@Kc|K&b(}KkW^Gb!mtzCgrE|dKU@JnW{^h-$?49hDT-vq> zyOMtaEO{6280VrtP0pgb3%fMC0Tl(!j`T6p>~CGt3FVO6F4?CBT(jnYcn~oODNKtB z0%b1lJ0Lr^+0_R+cxl{i26m^Cf}7$XpR5j3#GW0QNXGs-E7b17 zo@8Zc6u8Wo9>0_)*3S)9jW*Q0l)movV>UW~40K6$>2?M%VVJCusCg&+GhKQ^BNjK) zyyz(ei=|p?y_RhybjwenVQ^}MkGaOF?F2do?D5Jn87T!zFTYostmq^!Er@Jn87?$g zTi^&SIXfNW%IZxJbHUKAZUucDzczi2N{n=Z4cDe5b0OpMHRNmUL|W~Kd0l0@_IpBp zZExJJt2B42)4!smtYB$NGzlF}inlJps2Jlf=veUYavF;FX7I36H|2rcOx-V2=GZ28k>cM6B=7EB6Vo1gNHBG7d{QCVMdQn?%g9W`vVh2vm`vFg}Kf5pkS ztQBvJ7(?k3stsy(siq3f7d@U-dCGE8u~ku@G#nF8s+}dml}-&=HtE{InClgI?@vFN zg!Ag8SmWqBS`ZgirD89&xxk-idDI$)kUo(XxdUW9(Gt;eDL30&Z( z-1P+svnaj88bT^k$xO`#+h($ovoHh z#>*aw>AJl`fSr@7vDg`K-c(zxMTWuC0~t6CuyEXPnD+EhudKOjt|xe8Wa>7*}^V3%?LtLeH%3fB+Oj*9siT z%gHr14NTrmYDeR05|`)!A#6prX;ra`$`YwHYa~?%+5lG&$JU0e+@+1zLz=On_UgW ztp>!RF%CC&MyS=9(x#x4JiweylND*)QvqjhM3*2j8*%V~(z2Ue|+(OiJbEv*u4UbT9S zMa;Xr>m@H@`ql~Uz7;4}b!$qEv}kigXCL`$LFcZQ?&lBBuwL4zfxhD6v{g1J>ZFBT zG%-7=r8Y3PTa&w1VIv(2T?BfA`BIqz#)EkdWS~twXKmD4IX5iSMa=<`wQ6hf>Ta~! zeSsIhPVQ>44_AM#VXpYa6*nNIH8R{wHyKSyKgW6tv}M9&3Qk|F*#?*6bx9MAQBmf6AuriUC*E6+5h^_|FwVlU;H<}^w)m| zue^fq`1UtG`AyGXzTMw>FT$UtJz4_kXTYp>yiahC^h`V2Bbg(L5o*1!4rx_qXF!zO zh%i68c{Gseb+pNkJ`0=8Cj>4vS`aXWQ|0`dE9PYFx!f^B33yMM;c3NlxuFI}XD=;T9I28FjgsyWP*c-Hz&d9moTSG*~!} zGt&|9BQg+ahdGXjQ#5Yj`naEdWcuw$)CHT78JUM4QK!vtB%(oF)e^CIbM!k1`)vGX z$%Kx?+^W0dkr94my!O&du=A~VAAj=m_b+`7A9?xj{xAHd|NejX_x$>Adkx6Mt?vp@ zP77FF?#|q+~dQM>Vm^49h{(Nqy_azj3DZDY*y z_bV*&WLDK7My`3;GV4;UuhHo9JG1*cdz0(VFPpnZJ7nt>ocs*M(0!+}1L7P(WdhhE z*VR!VLIYt&7m9L4>I;_ZJu99_L4bit;2Q-G6h^n77d)_xsB0$`t&=X3u&v-_8o>rGj)XTU*K<`Q!n$}_|Skfo=QZj?)1SSgAtW(V#*FLT?9V=Z$ znX_xpc0JSk>ERWh3jjyGg#vnP8NK$hK)d$Jrutvj}u zv)zPIss)z-mbGt98<`{q*ade@nRW0wn#zAM(FbipJYG{>Gw7O2R}ZngD?73-I_V8S zg%&Nu*ts0XlTgRs$`Z#9jECsC2fJnI9V+D@VVnTF&GZY2l@&UTO#qD4+Y@k% zjmvMV5|v=P_V7$jYLD5rpOuy6{G?)z&bxx{7{9EzSkI@o~(2{Y^`(6RTh2^PtJ<G#2|WL?aF=>=Q3SPFg%8}aPnh8tTg z_}|>j3$|wQPf1~sdd0L>-Lh`7xcUIdGSPblLnv!|LoUjwVurR|0GUV4Z=jb+ybYAa^bP;>oMU}efM z+iy_Mn`fkp>#F?uVNwVGP0sW6^{d12`j zu!BfXa|LTd+0KQ*eQLWW%9Clkq_wRDv-I?Cj5{^`>1np8)%rj`fVqc!Y_x6SXb30Z zGo~O}t=Dqy*HxX+&rgVs>_X%i{tUhOObn2S^Ss@T?3>f@xp(7#{6GBD|HdExzklN^ zU&G6<`uBX&KKaJOW8~xWc!aC9aD?B?5&=h^C}`(qwXK`(br|S4vI}Qw%dGd1ya||U z!Bb?7p&G>8BLVYDXA)@{@EhU|>*LVbd4~Eo2Fxw;^uy1H0|zqFJ>y=dDZHqh2iQrW z^v$}_NbEqIb^h1cUDATY`89#{BSnytjipiuoCSBNInjIs)loX>s^*-cKA&cSkBF zo9zV9%*^6EU2kr`*nZY*=p^&3qq13Rcq@0%-BOKr`9#9qGfqpZ{?7>WqxVQGERYF2 zy!`O|+40gl_jiBl%lUIZiz7erYkuv&_%Hv1zxVI@+aCZwaX)Ydj_O}t%oD{`lM!X# z8%b%#%Ys1D3+_=&Q|cw+1@D9^0;u0TVT@naDduXn zroGU5je~uWxjU6gx|z9&{Bi!J!)LF3q`6m33(MY^(a1*_A%ot1iSZX}SJqzRF*9TX zxTJn&cee^6MQmn@dNUSFwa6+=wTnvvo5;w3^_TjeX+A2aHY6x@NE*6|{l-P2;r_XJ zJ^A0QyZwlZi<{r5heA76BeKeNzEg(}aSUxO!GeLx2Z+Cj#%wJF_27w;x35|B_NFsu zq}d-%nLQn)fuL%Y92wU2)dRCfflr&f<+3(A9V&pD;sz~?E-O$_kjmiXP>KK!Mx*4) zGXKiD&Y@*dx7XHhMWInHgaQC+n`z0AgOs2eFRo_l0T|Cp$`^`-C&bZ9zVz9QRnMA>w@*MbIw7zi0u!j^` z!5Zx`JlUu)=5|SIHwI8F(va)IG>@;_E%b~wo{LIIwM>4&eP049@x-ZuAadf;fnli@ zqdKaUaC**5_|ON?y_OFv6yML=wM!Caqb#aR8(q$aY<+s`TX_KG8S8f|pdiC=VwrS>h zeG5TvmywwEzy)3UuBl$lrdXO(Y>ib{4N?`1da}e#zU$@@JIjb`Tjfj;D>MD{fU=8`WoEh z`SbJf5pEI9B03CS$Lc*CwS5zJ90xMO>?q5LZUA&zQ{~M!N2FIfuqw)FkKh@n+hG>j zEgKwlZafeOpaQrZZiv2*-GC1NSyV)xnTC2cyqYv0w>a}q9O_}fVX(e0Bp+cnYb%6h zoaVPgx)68u^RYl29l6Zw0uAw(*S3;+V zsXchpEtA(~6sg8W%grkA+4}iNbA|Ns#7bb>1M}ym#CC0s*MAS-L?^#`Aez884!Cn_ zCB?(n1pqUUgJ`lLAx?eP;m(% z;BvN{_?hetMI9*^$f@!l{v_1aifTLu_Y4S}Huc~Yn^KJ(KyCz0OUY|x@4G^Gb%hh%vTGU8o!B+XXZpxe%py>gH29%JYOP>I?MB+04{qN z>;P}ZQbbBlP$5TBD=n(}rd~(+vOv@U_tm#df>NvLjz&qto0M>-%}a+zrH!-peifvE z!n>fymz))bFx zwxi{Sr6E#9Bvh4VjjbSo{C~9 zju7-4JBV8|za3?$JBDPK5K-8mfX<2oOOi^LXecm{t#PRrkOl&!0tUh5-{$ef7Sv42 zVQc&<2&!9(f)8JeHdVck(DvXu%9OejDYkx)1y6kyOvkIK3SKC=aVga5JFo4{NRm<$ z@wc=FT0*d~_22qLTOP3SapYvcDI9FxyMYSGI{AtYTBZpp*|BnW*paHb>T`2uYVEd% z!C}DFF#vK!qVJWf*!9(HbKV{zV4i1o|JtVV)=mkSoq$A@FU&I(AuW-CuWoL78c%9$ zn~9!q={O3RG`vJ%uyDjZ%*}gA@rd}#KlC$y_+R_;Km2F^3V!KreDphB{mi$$^vMsr zcYmJu+j(X_K0hDw#B2k2}^*yam5p)o+H0EJ-Y&|nQOM`%%OwZiUh{FwLI5W)ZfLunpd0k1%Mx_~tS$2m` zWE{s4k#0EKXq#O!0_{Ym9Ue$zdR^=15balXZdNo~#OeO5`Z<{&ah|t(y!T+Y<90lQ z-*55uyYGGe3;6Oc;_<+DeE1Lj{(t1Z^H2TekG}rQ5Ro3h@N^sIzO{ zC1M7pHjvj{=vPeZ-lGMx!mzoc`C`r&*fo%{i%J%}jA$ahu@(bLN2uDoU&x`}OP4sl zc805>+8q)0;Q4hZ86*V4$_@sOB`Wks(m&V|4gpE%EyM%oVjsXPZ0DsMn=pL0y%a3z z@(J~IZd|AP88td#*X6`)*7Tr81S(UV9{xxw{=&S}#GutHjWjW0ZsTr&F)QahL0lEo5hoo{L$xg&d|6DL) zcSBD%JI`+1GvF5MF9Joj!+J6BdB6lL*#MzMQ=e4zy^Lrdf@_Fmurp&2+u9Pz61=yp z>t)WsywH;*wyZ+HP-Pd17d|(iB6KLQ(Evz`Auuxvx)$;Y)QC>nbq0u@NRwmx!;(9j ztz6(1ayn>WI&97HC0msy6$VIKb2(*QF-mEiNey5&y;0eJK|uDsmS=Icy!BZi!zJCK z<7zih&)k@7T-O4JqFRw;9O;9$uh9zj8t!^^EkHenuBbmgNBs+GvVN7;>?%IA4h#(? zsrU7BAuU5^xVGw~f~()$mR5mN?NfO+#bHl!NZ~V0cD(B14Ac_@q?SF{v7hdH$U8Z7 zjQm%Emq6i{1fbSe6Emo^0l1BjAU+X8g|@O8xni{c>fZ;dh({@zijZoYORc&-0_<>x zWp+JJo!rz0OSXuT(yRX!)uIW}aK^bxbow)!2Fg2&;BaPY^%L~gd>3Yoz!+-j4fK|B zlnPg1D&)%$E_^gG0Jtu;Xh$IfO-gl3D>8Etxs?%m9T9(hU^_IBhuv$`PPG7zm4mwQ zdZ{F8QAITrzv``F#BvEdE6_@}tPe@?H-x3eq&)(M_ep*Qun}=8t|qr8Wf!D$iy2Iq zkNMEc^+B5zaOf2-cAB*yX|S_;|F*){Kmv(0ds6wbVv(^?Jpj{2+=^W)N|m926&5=l z%En=IJo`qAY0J7bhXAXfkaKp;n8|0{Ep%OW%?TyMwcytl_P= zT}s*q`r-+tyPiTyxtwSktm^(s#X8?xRz3_$0{dG5^(HP z6Hcp3duX|`#=>c`_R?F5elaJPDiT;Tlxu&4Ng{$L7mUQa$(B}gF@~r(Dp@ud~B_l7loqDEzB!Kc02cwV70w5 zFm#k~#Y(C-J2IfLiipA(_uA4Ha%ie+F|a!LkV}QG43}1M)nn2{gVbCSbsSk|ndgC* zesj2Z3XM=eJc~+b5`^Q4DrMmx^RloKsOiR`W~lpMnz4&cF{^d-(Yx1aoZ)r^ zG9$gOVCb5J^o%pyV0Ki0WJ4D#RZOkvTiN-6xMv+|LuOZ*A6YD<(>BvG7R<3zYwEkqZiRU&$@Q5RY#tA}@FbOoCMX?CERO`E~Z?$x=WorDA7 z26&#)2SGeM-GW^(BP{Jap6B_}!-JoG^P9i?&RcKYf95TG;q$(fgJ5_Bfox{#}V5g1Psuna4zbIli= zRM~#0o@)b3dTAo$OYx(2P4paM?}a8Y7%cl=RsLr!=UJ2DK}uU0jnz{yPe5 ziKc`4PpzHU{k&PIAKojKsA!&&0=`@8KBR4X)PqXY5?*WwgTD+(0f)zY1!*SBgC12DaUyj+h2VJF`0cr6^WqBn5I0FS zn3O}>Vo!wG0+AYkdrNht$!hs95E08vWNUWKEuRKZP$8wC{e1mXJrG(5GPmfx^L|~D z^cl~uGzo}6T?+p20LwdYd(89C{`;T(pZ)Luo&U!V{CoNJH*tF%pZdhZw|(%n554|) zK7aq+=eR!tRvm}U!p+YLmU)^TwcJZhdZ-A5ho5z^Gpue0E2ppiZ6q0s2dNh4b?C_K zi1Vaqt6`XBzrv4hqUc#S#}^ND0{akdS`{jxFO;j;o0hP{qKZgHMz z?q(Tv<5!+tj*{)#qS`*4;kP3*kvPl)QQ31M-Hy8Y3_#rb9H1vo54*!|4cE>y4kO1F z>7;@K(!QRpKP*Xn=MW8y$(8RrlvQ-j<$eZfV}f(hNuYOoM0K6KS_2 z0~V2H=a~oM_WG-5o;N!lzw*}OXTOAB`hq?98=v^j|I+XM?f=pr_|JXxr5jE|THJ6y z@!$zux`c`78L%#6USJAJg0z{UGoafr`N=*TWr|`OkIB!kNM(Ah!tx*-#`M%ST$z=+ zZH#A=uU6QyYk+pnI{V|PS+1p_8G|=2F)dE2uGpQwZpIta5e6O)X!~CAxWz#;?UiYAH&cE=!OABJDBLl~W~0 zsl}JBY%Vn0_}nbl$ZUE=5BDcyfU_cpMqU|OHIUN7es+!KzYEQ)r%s^cb7wKGWWB&24_0<<0= ziv{iPlUoY3bb>rB9%(?KnefSj%b(W>t1RsCh7w94_Nr6A=AK9$hfh zzCNkCDlVsG^~bF*N*Qh7ypq}>C{vt@G6c{r9}t0kokH-X;H@wF%{-e_&%!PuTMdl{~<)x^!1R97A`Ks7!{Sd|(y9@$kK z-U~j!@$y8vgl_)HSSPWG@R&@Gzqh^C=&6nWkEYqH9aRH@(lPq;oHvcrrcVZ-2ECb> zMl{Rcmn-9%`}}YsraoPshia6Jk3qQ8Pe<+9&#p$3Ot}Egc(vBXaE&$$zB>_guTl_N zq}H_e-}+-K9$j(^zE4wQj7L^6uXjA^O4aq@DAIl^^(HFhRU3936F;}RHYEK_VEW6n zY@Gg04k!WjL##DoIDjG!5;{cI^*yr{G^#oJI``@Bru$l#Mwax18~i14MN&I!&O&^g zd{<(0m|hc?boN0olMV2VBAP0oz}OK#~ru@ z5GOL@cH_QYMwq;a>NoTh{$yhzze=hWg+)9F}L=Eu#)0qi=2Z z?Z60?8v$;qb@Kz^UO^1<6tM)Vi*!(2BfFiVP{00FY7L-fi$Gu zV0W*yC;`J+&70gEc1FPQ?9B5_d+>bOZx1g;W;~wHKl>&=|3$p_Rm8Jj@!NjwKl}T> z|DXJazVDk3;0&bSZ^-AcTk&-hIh}nHfKFMv{Sc@7@?TbkhLzbVz`0uTjLhcGCw->EJ6+1x(T6aAE#fd(ZK~sun|==MV8>5DFv4Wgkzs2>O&{FwyU9&EAsYa3<2U6 z(6!E>lS%AlW6Wp{u1$KyEM=O;C2x3H6+5lKmauyY+AV$S!rG2Atc@bzW!F7TI~dOE zbroEN5Bkqpw*d%Qj)j=^k+^IEl|%h1#of4}UTQpKxb;p66l)N(tL9h%*rn9W%Blt3 ziqq8O$w@A-jTc~LqRRqAc6MFe)p`f4DkFmzrozN$`v~@o?mv%x| z*Mn}F&niV6hHHhMX!OL*5ut}8ucrtRg%Lc0)aFosmFf2Gn4O#*;}0zuL*O3GjUWWS~}L$ zu_LA?B_r{hS&eHsm>v(ox@cS(<~EK@-rB<-^rDK_C~2RCH4th$F-MOj{_mW=>LthnDKNjqM@~&2i~$GW1*j z9UYRyO0L!1XeLHz?SYM)ZK8ZAg-4LHiq7Ohcf82btg54=eepa$35LAbp#Cy{81rO0 z;(wi-50Z*ay*gP>w71_Xo#2hvq%*i2HgKx-yjiCt7!n5r?4Azj)=Yy3(C)1jL*QZf zB1-8J*QkNT5-Ds=wJ(F6QM=k6>kP_zSI1KkXN*d1KA_TT+#L+W!j*UQDiex)HT}to-Nn!Dca~ zW^1%0Fdzv5_F5E z$8tLL$;}N(vrX45axMns9k_vBIqvCo{q|!b4G(><{3FhX&%O2dZ~plo{a^hr|KewV z&N_KufOtvSCBa0xj)a-GvIkkdo)9xrb4&2!C{$oUAJf8uzRpd$$HJT zX$`|+mS^CwcG@ak;Owk+Ms#?0D;W(!;Ky^qri7zryBbSJ1nbz zXCXh&2sa}7OtYiNTH{r0Vjf?cmNQaxB_tOpo&a_vb z-5#FhJ?$%Rz5TOa#n*n(-g(S#dhPH0-M`^q`a^%;@A}NQ`O97j}ClXVj%P*Op}^GK+B&jFDs4>KN-}1zjat zZHI)oWg&2>2uD~}v(aTrK8i=WAe*41Y;c13z_#AZB3ffp!D;|jP`%W*Huzz(j#$mb zkJL5rT+9-Xq0d|`q*rqJf`ZmRe&t?|7%Tg({3Fz>A*39`j>>ykU&fqdV%8&qn_{vCNW`~4ST zK7qQOFxCf!=dcXBu$`fbYkJA##C+e$&F60`lAmoCzeoXvBJ5G@&Swi*N|#03dv)t` z74{2Y_R2OJj&Z&{{Q%G?zihbKfEV0riq=nHswGC#cIchRK?4@Goz3hp*8`alUcF&wvKRVrD<0+P*aY}p`Ptg<$_e( zZ!72A-o~i3MtCv%5*(zfJR zStHSgOs$l5DaIdCm~sV%D;rKI{Nn03Z~Gq3BG;UZnT^Wpo-F#(^I0#9CZv`gsBWN7 z{JCBympc!=>LitU0P+Z=7qQc3UsOe3KEmM5V}{8%&The@u9Zu!l6ABVrg zEUrzdRkynoiCqkeINLVZ=4|OF(#Hh0bu%<9fs=QD0yn?fAP>N9-pI!eT_x)6Iv`Ef zTMTIMBX5`JhO`*OSU5x*l6+9^NAq>#TTGg%)9c(hvw}F<9$1V}QqBrPkl$X~vTd-h z*F^6@VvWgxlTmN%v2Nb3Ta}tB7$IvO3HE5yq|j5c{TY}hxWjb=hdRj5ua}jzAzbk2 zh|!cqT%-9U4+$Ymi1t!x)ly3{+%wFy>(SRp-0#2<&#GVsfxO@G@NfT(&;6_a+F$yi zAN=v>KlxLE2Yl=!$9I4HwKrag+rvHMe#Y(HI}VQ?!Qmcpk38xyRNV@H_6D9A>JH%Q zwwyHIax&d6u$n2msC#*FRHdo;83{|Xw6K65ZV>?w%OfJZHaBo4j>1pobvK!1rX9$$ zYI{-}0OyJ0W)WEpddw1;nGR%KE`L&(*-&}7^_qmaW#pN0^Z`(KSN&KBn4e)cbT(Sm zkUTSiy7d7T8GiHX^Fd@tFCDO>C?vBJc_i<5H-LAqIZzp7iLAPcdLD74Tf}LGe1to2 zI6nByBkW6MWh6~5Lu($p4XqXPLKpifjRwqYDTeZ0<~$}6q3RYjVetUtj$1Fm!* zLfT3pxy{y_m1!sI^f$ukfzyzTkU(zFQrp-fa_l8Kd5v7%Et4U&Mo>|$bK3>KLHX3ztPtZQIimwAWzt5-cGuLR z_VW;RFv7%v)htr1#d^Yu0~?{UFu&w%#6Q`J*AF0kl!xt@&!_i@C!0};DC5+iQ^JD_ zsOvyj%UlAqD0idXlxrpfb%DDep)uA(9M-2;>UX|$T&mESrU44Ml&si_C;0%V0R{Us zN0r!1W2>{9Euyi6(7X3Wgo7gQ2l@!vBsb->souX_VZBy_+CExk3_fP&lEYX>8v7%( zZ(%bOvmjbT5#sXsArAe1)8By}lcDw(FiCp=`4rb)XpTe&Gvz zy;N#@`%!o{Ij#nc;o*&9$>XJsefqS7$g^{ssS&IBORD4A6`8KA=u)uRR&BpfFoo6( zmZ;Fsa2U>Zg>>8U(fW{g`DuCrUV7W-;HZ!!l$Isy1T0Cb;BgmJ#z;0vOt~Vi%qIKe ztcxjgi>?=gLLI|rCW8`xwbf>z^!De;WXiBryrO$1Jm;v0+AXR45_Hf|*l1Nxa58cf zG^qs41E;Q65dNt4l*|?||FJP!CB|q)G&Fw2K~w4jnz@*WJv z?40=HPt(MtvP+9fD3lKTb&gfaR^4WK1mJazwkxylI{ zd6m}s%$a%fer+wPe%aZeX=RMjhhz#+$fIO$Smy`ZBUz%oe9L}CfvKx%En2rga@V9k z#t_D_wUfuPxI~8>5~Hl?TgnDBifvn1Ol7QgnBcs0wZ~8x6*WYbT`8&_l2mIgiVP68 z6pG;nteZ$3(-s`)eGwYieo*$KBH1ZsHFCltmvMXfKBIV742X>M>7X9>!7L|8q@h@YlFtInf2<~}v3F09ja z!h?6vEydlD-#>r$t@BG? z#V>pnuh{LA-}3i=|F8Z1zxVI@9e>9sU#=R#Kme!3dy%h%9fz6QslKpO0SJnHfi+dkp$n{fcXB!Fe%)-b zu*|Dt9XHGh30rdNlhF$Npren<4uO+WaWtVz6&#V|T zO-jVbtTO)047VeP5G~%Z{v}SgbLmDnvrn5ZxU_L#OOh=_YJBQr1amsrb-~SYHuXVk zRE5svnFMXbqqnw^G;lDEFo9&n2e|8HD>*NtR=wVu|nql1Yx%uT>8Bkr%85+Qwt zdUx#Ww;4RTx|F$7ieWK3fP06~@|b;mdntS`#Vk7E*Cp%ErD-Lx&3g97A_INmmm|*w zUOUuv4mLX$@}pX#IS`ac>)q7;?7F$Bhj%h#;mS_;oLuN|z%HYL0gx$!}@bz6W^K zH#Ppe>^U%7ZnuV_zxr43?uSKzr5i+G$-(wSmPe5sM8<0Y+e%l$6&=g0RV!xcJf+u-(~*H$E!1DBar*l|Yv zSzZwhoFKhKM{6wQXbOkIoMok>1UKTu>h_VZ1Q3UNv}!l_7yc;B51&2JMY4?=r^8te zV=_;S5E%98yA#OEZkX{#f{sm#lsW0axEa86%q$7v*uZc&^QXJHu&v>jIBBfo6BLoa zMQbLI*{8-Xu|{UP{wm=h=TrP!So#1#Zkh_KbiJ&$P&X_YJ~8M%vg5e1*fl#Ky!)0r%aXV=W?m4!;EszF=&NWt=^Oc%OC3De{yZsr@y>X)B ziVF{ z5<{g5C05pC?43EDf-^GiKD7X2z+Ynp19+v_COAt)5~GfmIN4tlVll~5%ej<@qX^WT z9mt9F6m@etmSz1zj740a)f?h9o}b@G+9o?Rl4l(u_qUx$Oi7p!rD4%XLk6D837`_p` zHC0<4**Q*NIRYBSIBtqcxGfWaPX7tq%>eovHkB78q|z~M+{D6)X_qZ`En+RCqM)*O zp-&-ETczw*O%c>#UIFLN~0_Mz?kwbw)Do*2VH^lWz+65Mv z-n5hT&xcDJWSU5ujNLf9{$e|Vmbo4bnrwSFQa`ORHH5`dt-IKokfBwsXeV>nHJ{sW z6o*~7a{U&qIg~4bNbr=wsLg5vPivaLNQGQqNLbww;M`qd`8&VTXXMf*!^uX4-RY;| zZm`q#IBCoPn(-h4S_a!&smoDQLl@+l5Ynfyd7m?n2$fVXfrm=Wd#||bRffVr&XX5x zk{8J_iUrds$u0+{SM+64T+=oR{izjD=Kx@ObFf5#n<|E5ncHlYujyI4(-x=ALz5LV zjJ%`RUEa|<2PR+Mrqdu;e#FSav@Xwv>N>I5IjLR4edMJk#R!9>Lah#b1$ZK|ecG~9 zVJ6{zkYGBgK06i|rm$v!F1OS&FK1e1Q)4oEn(?l&Hhn6vE@OJq;IPAWSz_L4^ehKh zm6EbqfJ)hWX#KQ6*5~Qpz^-Q-$<^e%cVBapsEv}6^>uk!JJoA|=F{b+)^Bf}Ru*Av?o?mX6J+?(AAX?BstZgid|xRN8A6}6AD7q! zs=(vkiqGzFNxFQrxxeY?vg?%>^m7KA?VzCKd)Zg^f^>j5d(4d`qAT+OmMM+>F1O#S zW3%ZxK#}h*OEbZVmQRA$l}HQcuUf*L3$o3GZYec^3sei76>zn(x&wjfyYv<es?aw~; z@c7Lic`2UX9?$n+xaaXa&$<)~IP6F}%UEuHyW>oxMcUy3_rTrrmPq$HnRXoa$1oIv z?p!wx_wzaY==Oq#;m(xK`y7`QISlX9V8}cCp(BYlS9%7#j9eJS4jdrxLpQVkEq7nS)AbC6+4=t#WCR@$9B_og-wH>)y#zofR)w--IP$K59uSMAxOj0n?zM>5fBwv@(zON z2@?-6tQiP|0P0?G$l1r)3&2_0!E_@~6 zWaO?X3|2O+{Rt3v_Zt~gdYN*m1f$!OzhOO5`hb2RpHJ9C7}NHtHztw+lnOl1x`x!H zok{4^cx8`x!Hb+OkJXd4Uv6#}-is)IV1@bwFIB!wZV$TMd|?anHL{kx#PxB%e5Rg0 z-mBf;+%Hsf*n8~riv5Qg)=-||*<_iLxekj8G#G*J0wVjwCO5-NgA!e!YL=01g3jYe zwjbB>WBjiaQd~fNSge;Wjukkl#{}uTae@NJwMASdXJu?EHY0nx61cWo-3hWJ+5bBo z`?Gr(>7|rdKhH-EW)(o0?_;8>s|3jYmQbTN7mW2;RGJq0PR_?3F!LhfWc)E)Y-7A5 zZJXoQq@>#ibq0ciT-=Tb%p{!vU5W&rR4RAf!^;WwJiXQ_$I_bSlDbL62Cy5ra?u-h zi8jpAZeUJLchR~0j6^aIohR^&TrEA*azcy7L8#h}dSdwzs`Qb)f6jdqDj}sEsGPqW z&$GK|ReFys^2Me+07wtzBF*!vt`-RFN<-9eTQ!M}1iVr^!?Ffae^VT|ypTu-qXz~B zL>_nknIcIsuCL?abVgmC$6$fe2hh}zl1pd~3!LB~NgKCm%*zQ)8Xd?~LD!{?oQkPh zey7uu+ACumE6gEc(r^UKaCX=#3Yy8cL!5g zfhrmd&es_y)uy^I+*D)ruf~fSh!Td=@3pAD-9}z%rFmiI(eK5vYon+>r={1i3x?E* zU((@H=^+29_D%g0p8Ff6&@w>tD$~Y(COW{)UrJBb*A;i!d`jSmW@Cl+)5m+j8)A=Pb!I z$jFG4P^537%r-xg5WJ?HDwrr1B+RbrNAEN)hN>=Sk!h!@la?4kXC|8$lAX|IWCInb zC^1{%k{VLQWpaSalL3ip^wPOhpHHDi8K0wAj28@Te4Y{}TrB#stg4w!SlhwuvJM$h##kPl=pK0+}d`()I-H>sb9qxJJj{D6lJ@ZTt*u#UJK;GdN zSw|ABiSIxjh)kdljJS1yL9{BBrRmT@0>^=POuHS(KB`i^!4As|4~KQ9utb_2ysA44 zcCHi9Mpv7zEH1OEXVUA40qhJr%))TyJrlRvQG5?O2Icv9PoTOB<#FIN9ASAJfzvHB z9uoHlb4$BDSmc8r&(HgLKkuJ^6JPuazWPhJnZ5kV8-Lrk|IXj_egEV?^xJ>yul(3Y z9u6S!=(r_-d*E(%vue!H7_5y*&9=Do`_J}vTlq_Qy8DTO{4%sqP&16{*-i$C=q)kA zA|!^*DZkM{K|cRVVjAYSja=5UZzOny!kS<#Z!ZfnRt7MvH$x3F(a|gj<2{IYDr$$h z^T5mo-z0Y}pB~clfJ{vpK z)dkXW<$bE41eA3cLk7Q}3~tuQT*sUjTwpyfW}myvf+zWzC>uCL>!4J=XzC{g)kp&w<5HTL5B z1>jP9Q-Ud+W1aCX)wd2)yaaR%aA$(D?VNvW!7*1v43KJ*i(F+?Edi0hE*;AKm)*g7|6=qjO00SZwgj|%ryvXCUn z>=em(uD~|Qc70M8hoDP}WNW`XptSWD{%^2e%(yyd=Hbd!=Nn?`mF2gZ6*uhN!!DI* zfuG?J))ANs_GJuMV_U96Nm^Bj!)VjgnUSq#xj5onM7vS2tr9Xs)!^vOdsHQdr<<#3 zX{qF`-Q6`qmOfza4gld|h%HsR2xk3JJAgyaoKZ#a{5q2m&}+4 z$t|^smul^!$};iPScVV97-&YeB8B$i>MLcu-ox&vD8}uSOkYVXv5TBq#1`qnOcr}y zJ65LUd<&=u>|i_<2kl&>Tx-gZX7V!?uM5fTI`*rDhp@n|lerP1Bgv_$5U z&8Jyq?auA7Z4W%qLXlc<1q*xeIJ~w}3h_wQYoK&l+CXa0L8te0n@X<> zOk8MH7ZPYKo&J9<_Na=5kwiP4oI(|7QMy@L!^l~9j8U|BD?WA+uO)W|J3t3;blj5^)MU2WhOyC~(-a!OQ$wa#+x7q7}RlRh}!6v@_4mOcg9zOQ~Dzw=go!GyXhp*pGU+r0>@qt)Dq!!{lBk%Xy@yu^T zKc2{V-;V$HXW#mPKlA_j5B}Ys{*izG$Ij1v5pl=uCA|6}eC#7Hebej5tIuw)oR7yd z+{~Wi-S^+WopB_dTLN|*e&F%En_HUu9XEJdM%h3_!ft8E3{M=Ervtzd*82pZE))$G z+&mJ8S+uqh(YYo_0N0Z~+#-SKyTG~)V{aIxcL{Lv^36gchgCOcGmAJad1YtXaYW#- zK;Uin;FuN0}nU%mu?Q=@%cN?k?%!(;cNK% zSMl|?@p#AK&%W(rzxua)&p-J0|E7QZcYN=sKl0K;9<1230Nzjd88;x^!CJ13b8@Mn zE#kX9k#-BH4^M!x1NS;6hECtAl(+Uh5~@Atdqzd4R>FiQ4L}}=lWjrt+wv7g@84^~ z>bxBtptMxJB3pr--YAF&o|uDlXm0=n$t;C=`Bhm}eO~9>jjD5r6HAggAyNoX2~khH zubo9hdR2%(zK(9HF>Sz{MJRGaGHUI7tcWvFj}U@Rf?RWtr3Gj75A{}!K@7;r&&aFH zj{9^S&D8GflHs^186}Zpy}vHW=?#WHP&|dz-91P0k+3qu>}DehVN?outU!^4`yABw zg`c;Jw#HJekl1H(*Cux}m`l#R+DdH)*hnQNbJ<1*693{}MC(aEinutNKZ=A0)lLOO z(xN47te4P&z$h-@RPT+vE33moi1H1w$)^ieZKnYOY}#h0xe1_C#eHi zNpF4JWo(dX_K}EsfQ_CKdGP$O^3^VIv^uuj!pZS`w8up4F9ltddXY9DV2K)NW2&{0 zMfJI8qP?JYmrv>XnnZAe>qwlfnnjp1@ufhPm#I?b_LxctgX%1rFX>NfA#IziRA>rw zCetrX3u#znqXEUgWwF%+8H^<>RHgxzb{fps9*_P&gRJLin{QTRsdzKu6-q-_jifP+ zT<=s0)1E~w7xL;_O~?)Vp7dl6y!;}Q^I8)v3Rfl*?8m%_k`XawwJH^Rb$cmT8m7oc zF{0Y>%!g$o3V^o}47<|W9RSUZf4b)GMo_r#}Mp1p3 zAbX+p_2$iJNNr^?&Bn#x0LA~%oGGzQ6}1hPL9ufXw(y~|Tdg5;6oou;lGitA!4oix zOgG`b_Q04`>)9>8T}J7~a3LF!4p$;^_FjatY%k+QXWrb7b8cmNeCWvFd~-?V6~H|@9~Hgt$Qgd7004G<^pmH z{i0-WU@YkV%`N0|E7G4;?9EMb3XW#hAEq%Lu{9s2W;*-ykKI6!gb#T>tdqKmOPM!=HZl^FNRG-oxX2 zcz6x3yzU=(?e^gh+PA%W+@9rQh0iiSaeXOpGSI>@34R!d7kaMt@MOOHM~KE z@YDsqhgoEmBU?tWRKyLIc{kVzXIJ9PJ8psVusH0Yngf|1cAD9795`;zk9d4L@rAeU zU;7%~c?Vzpik&a#%eUL7zV-Wl)A#(=-};$<;CFuS-}znN`Wgb~WBN0L{*mg60j8yZJz1-*eZ++Kx=ZZ@pSfP++k~$7N>1p|g&cB9c)xJUj8L}rB zJj{YejOAk8+K}^lTP}g>4K&a*aifsG@p0F)EuOp++ssZ(M}wVLmQL0AWha-Md+OD zlMB%nP&FbxDOgR41?jVVwr9bg7@J7euRN(C6giWvx(0q)Rt>Y5gs{C7%49}EvJ&It zs^!`0+j(X&M~)`jQxue7tFGmKvJ;|Jjd`+Bt*4&cF4mINC#nxm;*oSTWh2>0OWS(K zgl#qQzo>X_LCa$x5DAyM20s%uu4*xH3oTh1mCTfLTxm{AeLp zg@{#XWR8Q?D;G%~nFEN$UK^XkGkc`JBGb_^US?CBPyj+kG6;s$h6&ngvgw0fFDW@0 zMLJ~u1oSMU2BKQ%gJ4^R@aQu&NqbjKBd5#SB*T$Z7zeV7bwy0}61Tf3DOnqlYfOsJ zj1iEjcGdmZLOCp5V5@cI+SX_)|LI2;4Ns8LYEycbG6}tw@rJQ1hq_+=7IR(8Pc|buDSEhP+OTH^% zNjHENVVJ;C2eA7hXAA(X0o3M1oxeD;_Z12|bo<+jd;o!~Wp}bDU2uOXmFJQBLkPxd zx1-%z=|F(`ylxOvrJJ#Til9$@vK)-_Ok5A82NCA3G8y!S0Z}IBCCSg~fOIy~wj7T( zhI8fkTlU(*O@`eukSla1O1XYfaSb9R`-^&&!nD@0tXT$vpChSo+!6 zM0vt~YME*k#%3QCkBN=BiP1yKS7#w-(xTWT?m{1KY zm)n?!Q&WN>(rE?jN~i?v{&=3S+k+p{=m7G4*zvv}Z@%^T@BYNk{@XwFlRxz1pZoE@ z`crRz?n`*W1cJf4qsKLXj@ zO2Rzg?x%%$diQJe%*^n^frs#Wo?+Q{$z-M%2Aq=o z%yJfCo^kqd!x>2A5qTov2Q1wXXWZ<_!_M>ZfZzP32R|Mx&$KfW$Md)E&)Y1#h6@1;$rjvRrWu44mbtPqid}>WAjqjl7OfA5u(` z8xJ({spxjnezB1QW`c6Mo8xR~zD^>OXl5`fca)b#f^9N1rR<&qL`n;fwfo(KeG};f zE$dw`c-Jz$G;n~|+zL}8-2MWL2yRo&kaP_38q9TNCu5K z0kiBbF0)U-48>s)>|0lEjkQ{)#)x!qBKOzx`|qwZ5PKaL{V~{za72&UKu7>1XIrtC zNt%|b2F*DRNy$R=%7~<57z;;?XoOEC49>wn;GU$B=S-OHsBwLT@8H&OLy*pY8D5S1 zf9s1}+9Z5kCAwNl#k=ecQO29a64nr#*w6QL&Q{(mc~G`RgLW$dbXY&J zZ7>Tjwl^^`d@b4OVspZdUN2wo67@47dAV1~R#$#3lWy%OQ%Pq}G)Zc&(LzJEv}Drj z4Ny2pVO%+#RxG|E6cRdebnk|-G#)YpU12c0E8B|84jW6WaQVtCF;A;)Jhvfxe{Z_; z0NID~=0q!Bl-oll)?VnWWAjs7L~g708Ayk2cm=X|`$uJzY57`ILKeyQVi!IEgfFyBy}&&vLG2+ z^9^QD3`&?Ic&l`MHIf73fGJ9P8_L1Pg8L((2932ov}8}l(* z9D}0Km)1`dH4TWVJSpm{2$v;rE-~cT*>}07G?)?>hDrNf$= z%mjXAymWUI`5ZuTrhKIvYSsV+FBN+-7%kz>^6#Pyy2x2%ax@8&6wB+foLCxxyIZ3URa8>>_fP^$t34LQ=B6{7@(^z4sL^;kPBi>1T5 z3`=0TAuc1A-X*1i4Gk>Ps@IhISNDI9=Lf@+^oRa@sYN0iJLM^^G3@P&Wv-`l%+4{>^Dw zi3?fA#9&VJvsz)e$;5>l9HSbD)m=;q+GOHxI5Lej4ngJCS{U$to_-#Dc4P!@hutf&eYCUW>1mAvGT~-y z4hXo_wVEUd3!Wa;4JZ&9kjcuLl_TK{+z!VP$nf)_3hj^MK*Zta%^nVSdv-iOAM?!T zCo=L8?|j}nL>}%K=)uECc(? ztxi4tt>*I36=HgCH{Pb_*Ym-N_s=9}33CGr{dIG25~rR(9S}ejNXzw{jiseamZPYn zX0*F$?X1>gdLufB*lGb$L}aODGaf{ZwTrf(9%W zaBMc%QkP?`{~k?L^oTjJhA&5U;k=68TJTqqEV%38sqLL?1!G+$4-{B6 zAzmF5pprn^bxpat0?-`P0-5k)BsoFz(s&?`9Sqp?K6NPC+^xRrR2?2`D#rN7o>kUwR z1-TN@_*ftkHzLb4Hp|ITEr78Q9rZVzoP;2xZ`-O(tmj0cGRzJ&@;rN$YehA|h|Y_0 z*Zy!F+=R!(^a#{pc?JGO9)1Cf26p^nh43fyZ83EVf!_Q&bW9tFYOcIo|HwkRBy0-7 zlLjKOUR3e3{#rGLWslX1x&dWtI32Ah(W_fS+i6t|D{CEQQp!Kymv+*~leZ;;JP6h# z0BAQvE_@(_hLprcE{UnT9KlRmgVi0ntCu8(Z9!uu;}Y{jHIl_(_75uHUPi7*jmx%P zpdbU$2|ehL*#NjEE>BAw!sO+dI{xjWW1V zS!3yrlDRtHgI33N5frq=ii#)n#+ALK6)Qz#p6hHyIfXh`q@Azf8S3pVRT}%_G8AOK%S>{F*#R-yi4D`MAg(+ zIj26uNYvM>ff);Bm`Ap0BQsDntrporKOASm;-1Hi$R+CtFA|ZNZl3ub;u)HgINc7G z5h3ny04L(%UH5l@uYUEtfA7bB`ak&b&;PZ*_2r-Z(Vzas&wcUv&wT-p=8u^#J3dxn>v+3PRirDxAR@C?T-Z{~g+$AL`qF!MMJNV}hr8TT^}HvlJ&x;!37 z)Me@(b&bkd)m4aFpA7c89wZKQv!BdJJKWREVW*uqkw_Sh`;qZ@o_2q{#u(Lt78)L07Y?+-<=CO?>91gX0{V z%CvI{O4gx>oK>m7`<_7a6xJP&ZFBqugmX~uNKRHxzsToygY%%84^ZiGCd&9j04iJGk|?BY zD~7}*(Aq245!2Nhu3|2iX(tf?iN0N+pX1aQSZ6lRnk_70&QDuR@P&~ zSfjK5uzmmvVNKU~Ky_Vwp7^3o4Yt>quRxzUO;hvR$Q z>+>o;?5FWtwoZo2OKwB!mto}2s=ra9BbL!k zG0*I8<$8cNS49XfeTJ>duSV??MahK`#GOb#d0GHOTiBn0sF^W8o;S3zMzPL%25f&{+ zpBk#`DIUf4f7cTI3)jXU6G3gQq4Qs5kD9%ae@{_b9Gg`!OA;uT|1Sj|a&3ZaTUQHo zPRN>a@_F~u`&p8&E^?(sI~~)|I4G5?T-_SA4I+PQJ6XSGU>GGqFF6Fa5)(f54#7aX zDacZ;lA72ex5jHg&m($S>rKgYzZ==|W&^rFat;U~qE9_Majb^bt*ilZqE1Ywu5eBR zl6BKYV$qo78+j`%2`tzzrsS8ilBMP4t8EAgXONEw&%6VMTjcq29C>SO$a9kk1aLe80N#A({vUn$?VtU*pZbZP`1!x}<@bK# z$G-6MKlin_-}=gXZ@qi}#(TG4dh0O1BTmobL>`W3FU7+FJi~*-9&k9^?6rqN1Tb%aDR@x7w?7lo&)ap3=2Oa-5w5{ zA9x+Ff8gQS!^b}P@$dMqk9_3Y-uN}&{msASJHPFFzV};RdFkcXU&b@!gFPTl_|edi zvyIGvJp|$i3pPwu}>#}!Pk~!!Adj1>ynNBi77MVVQESrTnzbyrrvx+W?f2E<1zJwuISXmfT0<3 zv_H=opV?@#_Clr*a-UEEE0OmcpZ0=e2yWHodRK?nmc`PXt>I>~K)D`j4W%S_%LJNb zM_#W~s?j=)FV-d1P z9udaCp8!}Hn3TcLjo03sphAF^=V^M2V0??stgo+@n~*b=NNS&U6?Zr1QUfVgAn2r& zD2%Mo{#S)OzVt51CZ3=p5U5+VkR@%7q1PkU=S>JTrqL|7Nz-7b9+D7J?1W2g_dA_K{*~Qbsnz^(by-l7Y2q)k+hZ z9Nmz5H)PI}#N1&le{7-po+ghpCz@?xoUXH=LmcQHH^sH(4A7}O{gZ;du^S=QNv2;e zNUtm;7*=YWz1P&@s!p+~QXnJ}>CzFS}ER37n3I9ESahW&{n6Y z+ft8nj>OY0>On@%UF*orrS5#To&6kUS%O_Tat}4=c4-0?!N8tPn82T?{4{ZZKwPVX zr5qGoZFiuH^Cl|q>naE)Qi8#H>1A={kd1jV^{+%{B>pd$D0)MNj^UCvm~`gaidszGq#>qb^(^{loOtg9<))cdZ=E4Rs9F$r98(q4o#CKaLLPXrdRRK0L%Nk z(s8OA!=SX(q$>6LDWBZ3*#3t9q$<tl`Sy9bX_AfMB8QZub!=@c;MQFB zG9!SspFFPBg&r8cQNbmQ_m$+hxP$!>4Rb@qULDfDYph_gI`yPIgKU$u`abYD;!6PC zNy_<_;6z)``JMgUUW>@EcFpPIH!g9l(L(Bj6ZSbNVP!Dg;-4_MwA7S+QL3SkwmGt- z`_2{SEBx;GqSH#?R-Fz1)z4M=`G&>x4=1_?jw^vKEkj4x!f6IuGtx(m+aQxQi8|SR z#F-zn9icf%5^1r5X+OC&Gmje86ql_d)h5P(^$TdPB7EDyPN`-&H2HkA z8VFoP&t;!Q1zY=F%q$HD|B}n$H+E1{JZyKpGJct@@;Ad7aEB)z%h=BzYu;-?-nu{FQHf`5W(j>CN|k>CLZx`77`J{F`6@{1@MP>&%LNW?>uYt#c^?D7`I|Cu5k_Iyu(tbiOs!C~)p>=t-3H{&KAJ0EY*)d93qA)|-y3$VaX?|F(Ms!T@6ItD%4&bie=4o0ac0svESzR%wncZQy-3hl_M@>TmFC5~T1&-~ zpQebSs$$zo%UWL2#5k#pZe`N77%U2y)Ab_1WmmHvbd9}i z@&{{00VMr#p{UfhZnl5PUR2nkX^mN5jiAR67h$uQ8E{8EEB!1 z(X18aQkuutL2&}?@nu4mq@gEeo*itRy5qSa!U84Rw!5GQ%)5s`a>p-Ljr}D>zw{Mi zflR6WnK)Jf9t}oSQMvTFX05~an?xu0QPl~}iEbCP@OiAI7hk=CVtvXp!#UiUa_W!^ zRz%Srf@*V;sb=wR`>;s|Fly(-RLk1#5^ziqO)htt;_Sw9`ajVe9K@Mu(({#UACcC0 zWOh+$Ye{IRFgeQ%bZsped#xcQ+3d%|OH6NHI zw{{&VhVdHgq5NcB)d{}c7Bg~*)k~idJPBeCeC4$#w>U-w`wNpfW;X+$P??-CVNp(HgrQo;>olHy{s73!NDSyyHm zSe9s#1P9;G?F^85s<_bHP&V^2IVvmM8;3zCr({&RQB+{9yYfZfs&t`%chk+$M>;g0 z^`DcHc43{#aKnweZm-a$5H$%M5et9w-JaR%;$~k`1kI7&kUbr>RSq zCq5EeYpCYrzii2-f3i{wU`v=EC&$M(#R9doZGOxy!vMzrxXe~dBag%>gevb|2>n<~ zV|0M%n3Awd-Q2{NifDxvtOKT!^DbBmz~Mn$d=HYwQouSg$P?POfKbd z2?$yy#v&;Xt80&TaHNvZ7xCSlfO{E z0PZ*qW{Jp0_|4&lJmCi`)mc1vc6EDi0v>fy?)|`xvP>fR(#-RWd*D`w;Jj{PJ{`9f znG=|y*|)xK*ywZX3!zQrQW!dkF{{g%Xv^(36>!)+vpJybz6?4ripgJ+egBYZ)+3*$t^$~l zmeg?L;5sxY0Yq~o8t|4OuCX8!$0~Rp(<}JTLs5)*?Kgw~CfqM+D*9Zi<}uJ6D!6U2 znUX1mm5x(oI1+O0a06EKR_Xgna%I%E*N(!}SZr*$kD4;~TsVr~Dlr;QiuBkJ+JZ-u zDy2j{23vb7HDBXyWu07c>Ua8uyEpU(&sH|Y_gs-xEUWGbz;pu%M6IY*xrT z_S-v3k-0NE>j^NpzGZzfc$ckpy-X_-al6?;PD0+tQ+wfzyteJR8;{!*Wz|D zR6UKut70n#z2z^BKlJNjt-vXpHBK``%5b?4yIwh$+r}mr1&;)?7ZP_t8KUTRgva+^o%5S zbE{1p)=WC}Kj1c`Jk)P2S`f3{OKReiqj zhe_Sq_@}X8N**rQdO}Z9RmT43jmgJjAH~OWMNeW5Ez&vQ(xH;Cwpm9Jo+ZWW zX=3ChFwEEtrYi+0_@2~wK7O$#9^_>9C=BE1qGIL_g%xrP(Eewvd{PQ#?fQHz?kM3J zycT>4OP6ERI*7NLwb$IEtvQOKSJ7;)Pignsf+_YGco`6Rex zB0O)zv&qqFnqX;q>rWCdKG9@wkgT<-aA^u#U0#5lohr^6FZk>HEn$Ws7wC(+tcPl2 zkp5&am#Kie7@;xcE`VJoBflr-oTGv*xkl>fy=6Ji)`}i>$EZs+bi2)ga8u8Pakk~Z zsvgJ$z0jF({W{nO6Rd6G(Ssp|l1otECAwZAR42=7Tt-wf4y#ww7sUXqKD%`;IGW#K zQH_a1Z++Bk9C5Si%xHykhz4@>xXm_40{GQqSnpWp132$)BUE0LLT1`c?&)Vi6$ z&A9&tL-#**>IQlhOpfn~7s|EV7p3M0FyJTX_q5O|*7H=(d+OkRB*X_59~yCd2s zOhPVfN5p~LznyszFj$}1ka`T_<{sqq>DSxJd*o%U+o-3D!iS~m7Q0z@sa#O#|mT+WxwZiFSXJuy+ps&E%mPpnhSO*Qkwk79Ln4NU+H--$$wFRR^ zrW>SD59!q-nYxgksn6H(1W|LYI^pIhP8_nd!Ilh9^RKo(@&oGl!9n+-eyl-CLk!YQ zeWhh}rVM3;@x-~V%sUng-Ah7CV8toq<9k~L81o9lx&@wkUlvXatXkhEz(RSH)^Qei z*SrxQ&#rzOo1kKAk95~7Ht_Vm{6wPfc;h_m42`pbufPLpB-EwUqS|9B391Rwjn^Q=wR`wkr_9_ z$W9z^>0DH*tHVvg%{7-5B2eKqEuFJ9*;k9bJs7=)el(mGS+gR4Ol76XYMord@5lwK z%fh?Lnko$-qa#D^AVLFLMWP)xu>7Ym45)!Rc3#pcl-{OI7H;2NDxye!S6<|c4$1TNQ6A{m%)$!GXw#+oN>4m#u| zxRaQe&{@l(z?YS@H%Le~J9PnyapIhJF%-`FomiXIjl+w;y<9M%+u zKwRO>M8ViFlKRuB89JDj$PL{Us-qh?B&{;v6{|!vng3LM)hLf5MV(b!Wws^+QhKmr zN-MQ?;1X~gyzz~$g2Lgf>cVpvINGgOyNE`FsCqQzWtM9JMF~$FKYuYD_f}=5f%rIvs;-)2XeEt(*kaXS)K`-E)mFHxOoMZ$|(xe znj5Pc&dO-e#){w$I-%756VQh7>KKkzbD;H-g(>jU*S22OdpQuJ z?=`@TeZ+|IYWWP;QwVZ`QuxJ*7(r=WXQm>@=AfmbmBGQn@<^oI#}0P%{EX3y8ld^e z5;r?Tphn`R7RwUd-*Buwm;NAeB<_|jQOKh#ga(oe%RGB(gC}i~q|5c$iS*Ix04ji} zu&aGI5wQuh(|c2m%A#>FJF6Bl$pOdOG3qg35g*GtOpA&b<(S4_;dRXC8$ZMO4tYfB4X{2pJxcwaptOuzl~~J>?oo`Dwt{81+W`;`?~-jE>PeeIPat^$ zR*?^QQX$+T9rv;06Blk^h{QCT5tI5#P0he^nep=DUfB(yQ38)ewZ|aWFv&$7n3J?Y z55@P6N?a3N$@}EGgsg*+h6{Qj>vNTul?=-e>I=psurw`+o1MseA{RSyiyE6#ofFjC zWV*>!-E5^OtNak1*pD)BdPD{`em0Qn${}f>q7>F*L3adH9Uoyz^K4fn#2D0zx18{@ z3nbFK`ce-IzL?zg_tcHdI?D~{PKtV6pMueepk?r>-8_uLm6qoE%WAOF&*3b{M-t%rQ2uv-sI?AIn z(xMbYYo`RBWo5Fwj%AA;YQb{i0a-X4c@|%^fPpFjYe<=7t--wtUiorC6Kk1lZ6Wa8 z3(wWzJ8lA-8)QKg9+Z+d{7nj0>0i;$p;BbfevI?xpQriO4SdC*evD zlBNN!nr2kxnf+1>KoZ{2S1#U#ey@T>|F7w@C}7TKHQJ<~WX6)M)pf{GXE|H7t{}K` z70^uj?R7;x=flhh9bwm9F4iTJM(&2QGFd21skcM+N#hZr!U6wOQl=nQ%k01ztNj^) zXh%0z+<<)|y5K?|7CGd9TtWbSs=*tjL3zG=Lzg zt8{(2X`SlISvl&hPAHFQx!9UXd_YGrIJGP3s*}TFb!R26{`|WApxf=0U>_shZ9y0e zyv!CHp3O%m@M(2|V`*-{6sG}Om;K3jLuCPh! zAM%I$52Y>ByW-M1qm$^$#PMUmx-WPEtsXh^b*uofUusk#*s}2jX%gwd>(5?LCpp7; zg*4%X`H69ovf6sWY>n`rdS2661qVv^dg%*4CxEcQ`I_hGdHrfyVanMnW{x~X?ubAm zvdNv>3>Sv>!gU5b88rn$(q`Io`Ps5$Nzb($H8~#Yw?za8x|LS$o+g@!~dt*Fmin=ODTVvBMg2>`c*U4@+Qx^({>|QRFEifJWO^KQrdW)HAcpOd@Ci=yq!fSQr8s!Xr)I22wFTm448* zY2%_i3)>SB+8T_l8Nl_vB$?K8aamEOmUQ_aI%Nfqi^uMPO%C6>QA-kpSL|?^TvN@3 zKBz1$80I^v>U6g+fCE%nQ%j$raa?^|VyPK*x2CZEG?MLG=S}N7&Azis$}4rQJ0NU1 zqjq@dtxE;E(88bN9VbmYkYn8DWEY0P%WUC3RaxDPGkNd1xVWx_EvsC&9 zh0x~LWzDsAscqCjUD_k<4iwk+u@106&oD`BRwfz-1PoAffqGOjW1Ob_e4TbGMeks%Y_R0W66zRA}=jsd|y^aPG zb0Ct3RyoyA6Ki=K0dUf^!7yhv?S$3;)gNMldNfz0Wn9htLXN1$Cc{?wC9FVBc~s`W z8BK6y#VQY+HUb2T)yp}gm!HehP&bVn{Q_r|HQJpirkB1IR++6@O8{Q1Y8cRNcCs~) zA7sr_uRWo=A`TU_Wi#L}wJdOCKxnNva@Y(aLa{EDQMgxwfu$|wW$`-~!#w<89H*}dH zDqgsOU9G#;Lq_L4&c?oWD4 zWeYIdRK)pazatss+$6qAnCuFscGhiXAB@CVCIHfIDslku0=5k`D`*r&0u%B9 zs^mdARf#-%t?E!P9b-ca7 zj0Zn!0KE;I<0wGr$8RPTVdSibHoES=wJmh)XYQ?tfc-IKAVnQ!z|~s_&RZ`8=1v>X)E8b-C^qEtaNn7w2?ms3Mrw69!7 z$9A%2MiW!S)Qf6SbO~v<>CFCi5OE1)mok8Q(n?;#OeP%)f<+%lvI&3<=A5H4#>%eO zfv1I!d}g!_9D2uINPr$QCsn3=cul)0rfVkvXke{yhHUHBN|woqj%d5=WUxp!8jEy} zu%QGdsBAE=@)|zB!(HuOur|FlxdN17>LIX>aaDx%ewutN&{ZJhQ%1sr45V!3)G3Qz zV~3^Pmi-_cgx;iu2%1s)g9mATe zuTxNs^6R`kX3q1WFs@CHj)X>-UGHPAjuwe` z1DIY+de>Hxq>jpuwR3jT6eVPaDD&2z0I!uo>$FT-Q7Md>k5IM2*uXi5wP&twDE8BP z=Y(6P0a*K_SvGp-JgW$B;GjuE+16o%n;CQH4p!TkhcnDZV-QnRwdXrJZj zKBMi%3-V?VSF|m(caR4wJ@iC5@-*&$%*Fs2RgJMx&+?bsvJ6R%S=hiT0+$jy*&IXo zOuacURNhcdn2x=i4(qkfoFJsUNaWYO8_s7m-9-H+R0s+gfLYd|0F5D~jGo2iLNrzmveg?Mlza-7c&m41aUBQ}qTy>+#x+_4gS=*lo^S#S z{c0qRd!jE`pu}pKM}b_#-sFPnCynY~9SI7VW9W*xhWmWDhq4sIwYZzRBblmSXq;uO zp$X(AwPu7(<7Tb0EC){lJ7tpPOvXKBj|8$IXP~g!dA9z0VJk(+ay5M-cp>u4#j&S&D zg@&yBb3mcgy;hCYzD8KpToUAthZh7Y4_c{p8;BWc}e-BpKF0kb}k(bas9YhTy&!d zChJ$U069V9rz1z-3aSZKm=%##y3vc0d`hpOjH~|ceFTiUOF*Lpqup&eYMXV_=jAok ztwI$Ff)^~khn{TE@x4*aVVr<_cCCF74+=%^u8q*QVAOmCVo zv~U>po-%zT6EBstT7i^nP^o`s4fB?HVDf7mTJV5(iFx%~olz++$~l%7;L5;~Faq<# z(xte(5lpRFzDs$|IJtOJI9SYy4)&MY+T=)?ND1LSx57v!hCg>Rn?tMi4!l#kZ+erk{1&Vuh;&e zjiCLYNg3NE?tIvRv-lfHMz5+2pNHzTM%W7tcFW#Yafw%5n`-D=cooROIVLqqMmryn zNvhdUaI}3J0LZ?bRbUp=|uO@th3En2PJGb z{G%5r^r61l+mYoa&8mDHHU8(mkmw$3_?K(dWl{0rcqFx zDC2TQmdLBqmwy1ad9OaFYvK*ixst3R-nJLE-h0tMFUydmHODeQX}(n>8E9C^|m-CNy%RQbnw;(DV%^}N1w715JTI&QX)i;VIu65oPbR+UA960|<+ZXy2 zF;~++R}Ul5!vMvV*u8uypSd}mO9;n`I;HhY-`ahS3N?&0_EIcy*H+NZ8FL@e1)pUr z#Ed1a;qa{uvZ>rg)!lYy>lCLJC4nBHsNx<&0xve5r6srJnNE}>ndrUdNsr!lHZ#?= zK77IRl_=5HP02mNR6}KH$Er6JVNv#5`oJqOYd-Cvvc_!D zo>*R^v@6oxFo$9WMN_T-JAz%Bpb;{eU64No+Ar=^p#m%S+o-1TK0|XoJeg1!HI!^u zb^(sr8RMnT()L-A#`aog-P*>qpgD+25fxUhUMW|=9!E5a-8i3@@)WbCjd?mTV;5BQ z+v<43j8{58fRiFkioMS<%ZY6lEt>*NcMfPJ#D+|Ib%8Dt$aXbDB66xh_YNZKLUEV& zL-gh?-i40J7=q6%UQ(FTw(CRlcTXak29xY?lzMV5b@jExlEc-{*VuMaU4}Eb0?DAkZNRm_!C8Xn8aha5^T+m#~x|@LDUM7DvZn-Zx$=>MNk+jvrTg_|db0jT@1TT6@_THRV)*q+us#i4Wc5UB5Sn{u${hDYiinvG* zhVB?|;{444oL%wZFs9b^-m17UE0&8YPd8Cd`Tx^(WeJYtx-me_{ZBjs{1FSFn&-AX z?yizDNi2btV6&_-WjAQwHRMqQ;K$byz&&+ptbIwA*D66w0p< z510oW<>NrpIFhfjJaKIwFKF61PE}yw7$;+?=X5_zJG@#@ak!Zd)|b z&#SufQWHVeu1PmzyI?D$Me2oOaAJw){i<9_gu6Fp+U5peSO1A=qMO?TJBh$) z>tfo_@Wdj0yMSqC=j6H0HW{#?&w{{Z_39&ZltroP3Ni*(3mANTWM+(G$fr&xc6t8i zRI#GXjZugM!b~R}FZ_heQLM3Q=;`E%j&itjctgJk@NrXMz8SaE5Q!+lcv$ZU1!#-6 zP?1^Do4Iq38{hx&XN*E+w4aD8`1!sjNvj+6w!{&%!xF>FV6#2)#h!ZAp8R}IaFGtg zYNc+*8i5r2A^d3%mWFbj@Q1Ye(Fq%`S$o{Xa*Y~m74_wW+F=UY@pum8dGzLt&VW$4 zsgJZ)G46gnWfae`10&(@ByTc-^Nm&9L&t?A8)c(yX)DhScetPyqn9JQ%Ry2|oYttPaCy8RK(O%ymQC#&{eoSZYF?#zzqBJ`C3_Jocl zhBsO>2COslJ3p7SJSsL*)pnv71r-y5&;hsdbxURomso6MXa%=vVO#%3Z>{3ILULiM zYQAEX9Y50_z=s26$Nh3B>?sN5lRny?jW0F?@^>uR_IzQDC_{~C*!H(D8gV-Elql8M z-_wAooz#6CdytanZJ%k~fGaAeO@1(qj}fiC^8VGyvQ@o^SH{UnWI;aG%;052jkCRE zUm0etCq};Ww8||U=bb!+^@8wH?4ZDmm7;W@47vgqNKHn5m+aaExAm6hBW(-HcKn2U zXcJ#Z?Z2pxgN|sl)D~`|;8GPEVVHGCb5qv4HH7VRKN$m&d@xJ@y};I!Y0oo4OH z{=}@zbDL*nu%D!Q*wflvN1>ecv+?C;DISGQW@(RuY9G{UosOTVTv~#u{kHUx2Nogo z#RB8S)wpgYgkoo(>FHH~&RkWi&PpHcD4@36!mBT%g9-+vId$Ewd0-#c45n#TXboj; zo(_ZytK#9rVG>8a3WUp*crj^!6j|wS3{X0ziW86$*?eGE;?1_T#K`hPjMBtpRVN6l~a%`y`1?b)>Vqzh=Vf|P0+e!dc#f;#1 zGiLFFsGmHkGj=zJD`7bPs~D4Z9yoC`zoWFu&P&$z<~-SHjW_7wvFh3qR#kDR{?JE4 zhRA-NyQ94(yLASt(i^v~a+uma3MhGZm0&A_mN+&k+zXZD`1-cly0t9T^igT2w6@d< z=d5N%XSsS>VmdF@!SLtJEF)IrD6I5LZB?oO__hmg;P;ldSwd;VyOCPo7@KS_m45a+ zBt_l-@(e{;WtRxHmfmv9q4zlLJxh;MOBd$Ggp-7Fd=l?3(}CpFEvHm_U##2L_IrJI z%cOQpCq0<<*$rRU;s~uU2^2iWvSvpJj_D>%T|}O7o^&;E*MD@9xM>yid99Vh6$i2U?2*1N~?KbebV+#mv&@A7X!!zsFWB`XE(KZ*P>N z6i&)JDr*4@@OHlwOxlxcUEut~w!laOpPHH4Yc=)j-RzHU;#vouDAYEKYx|-~<-DF; z{V>+HF*1)mGRZmrPAl*hEUakaiy%m;G;e5~tAWAl6gKyvE8ZQKnl|_q**%wG{=nFT zzm)Hyg>~dG=D_ecWfqF4s9#F*yGou$o9G0bTOllshyI3?F>$0_&W{lLX5jO)KpAz3 zjxM%mIXL@mr$=2VVclR)|;mr4+Cg?eJt1g`se7zLfwkNW*GggcVMLAx7#zA6?wZf zr)}Y=tM{1U@JC6nWXB)lgK|$_K7ixV{fKdFQwGUrXR(vHn;E|n<{u#8?p^p=0_b>1 z;p+fF*N+}Q|7Bn1;EOM$2O7N&t@)J){7e$?ChQc9+?SHQt~3snM7Itj2lECz-}7-6 z&7b*w0oAW%bS#dm(Kw{mkG61H2x}^+-Ve{6hTBhpKN{{2L|f|U-59?KW{Dhq5=Hr=q<;K(`|x)>+fZe~)b z@gtEP#pd7k`EHX|0orEzp!`QacKUc#n?H}A;KdG5qnJyTTH`YSMb`^fkUMY3s;+4Z z9IfFdyp?tbXS&`W5nB$&ow+|;4Cmb`4x&~=AB&}3ct7}KAIVQo70O@*-|JG?*t3$v zVXpI;RTXU%!}gX~=n3V7%@ke_Yb;ks_}8&?({8Uh7w##AE@(NiHXA6Ssq^)SjAA(}t>s0$D1GfU>s9ty35${*FcJtP`|?Esb;b zM{wPSTWxP#46hoX)mp1+fRAB7S*B^f0aFSiWj~nRw9(M0u<`$1qB|Y<9nK#cJkEHt zKV1}#?kc&dQA(;FCTLF5yF$i$206qBpK8D!1*6SqHs)?cMux1NnYx`9npA&$* zA!Vrun^PXol93M>cS;II9R$SaEGU)9^Y-jfHM(&RGOfng7Y0lo(8 zTco0J`VJj}q39=jyLT|#FEsRPMi1QKV%J)ZLmH#vqFX28T`4*9tZe?^;cUhgUE^Kq z%0Vf^D_;0BY{Hq-F5?O|AxvtrwGHSKYSXixKl=tKTV6P&NVcY3*4;z7CRW8%Dqfsf zniqq4W7r~B6mv*CFca!MVVPF-6khE+#rLW{#`NvGp^;3&IkV)+NX$sZihR!PH| zPII(;S_TS`psCG)1`P+#_1H~=DVr$=&2vzOqB}L1Z=rl;=U8Ep2zEDZ#kVbWlKNPp z_hd{;h$jy4`BSE6W)0gk6dnglFMch3Mz%#SlKkX%Nxbqogv5whOtVEo@xTe1S8bi$ zC||cH+RkHhV*FyEgx%4Xdj{3Z}}w4tRekzNKz%=D(|| zUd1w$yR>piUyMk0+x=3&bd!jKq+{GPtEVN$M)-5;lqjjC!p9|?{DPeS!C;=rJ*YFeW+@352Tg~s z-X>2wzDha>imBg-rJTP)ofDnxRJ3l`$TB4(%I1F$XQ>@*ynY8wHaz1isHq8-=`sFJ{tN5@rm^=f zsT<=L`h@6l<7^ykdPf1Lb-??2%UWj$BV$Ixn^Nnhh|=xhLNsSQU_&5BSuiH*{^2 z11f;tw#V=?Yt*HW*+ZQ_+W=1}?{ z1zOBfuBkLD%jylDBIJ)pV&FKK-JW==%@nFX<=(Wa(vVYqeo&uxju_BtX0(q*G-U4w zXT%blO0P@q@1R=O1%zsAZ!0X5jNI8F&|`&%+O@gBiLk??lsd2&zVUyP3W1Iw|0Er$ zr|#N9Hy8+WBwZPYoqwtF99_jKi6ct{S8j1I&>2SfUXn`fnnIQNwF5`|+M0!^c;(%u z8^-Igb?|wH``*`-Nq?jsV6?qy*U@USCU}j$0VKGpnVnL1NMv#@1?xq^x-~U#?PF;DzK4H}L2XA44L-3(f7-4V3QC zv?vLWl)@P%ALLJP!LL4_kCr-(AccKv=JgSe8fI5@#+GPMCm1+kA@zv5`3x}=w%-#& zr!#_YBt4%FMLR!;1d{^70JECUMHlCS@1;xjY~teD2p>>ur);3Ey0RN)q0ADQwsmM# z8>`kwa6sdZ%Z`!1DtPgI4lC{Y1(n4peDYfp0*=rI%b)Pz zY%gD1rmqQAfDY1@A%dKxkwidEb8&V~3whU1z`+nt8vZ{IQ512CscBxDt#vSkRx`i)V7fU`Ep!M=-& zIW34y)=HsIUkn%UGq!0QA=u8^IIQBQWFn@I-){P^ei@+0Q|AnjHghI1pGY%Uyq*F; zxl_0>pK>kbz|JI;sxs8C$@3X1yPU`#qIxwzu}#Jm@@6qrXxjWotV19|g#-JD_J6w6 z7N(Ab>Ybq&&mVdwv2pcFI>VFBy3X?1_$pR?xw2k@q`@tYQ%Ej-H5 z{*6$t?#M8gmgSzs_!4@xLh!07UEwmvF@S48(kAz)R0n7*@L;%%9%T&Qq1=sSr{_y=jrRB1Hb=7C)k1GMQ$*l&Zp=Cqx$#Yd#87LkP&LKN zS>wHrM7YPeOjzKh0KUR00|Y8!1aSVS+z&-&+~W)PpLqe#|7MJN9V*&}I`Ww}jl0x! z8ffxA5Qn{fnw80Q!A&P&W)rG zzYMi7!xSRYfdWQVS1+6&c=m!rU?^y0mSH|2{A5Q2w6bYuYG1LU6O&(Qhlc7?SvrAe z#a#Ne{6#TRkozfF(COVy_JU?00J!du%H~W<=pf2uG_Uqp?SN zZXo7=h?1NyWs6xT42NhU3N~P9sXSv<4!|41Ffc?uym7k5PqgK(hD@4bXA8ejrtC0V z#5D)6uraK`0s&clAdFL)0r98BRtn37diuLu>vM{*-m9_KRk^lVO0Kh-Bp`!jS%v4E zhby1jpPoF*OzDzfVW_f`_F7)vb7C0fb?m{E%Ca_s{N#J}%FUKEzyqgW?X+`^ex9*x z0yeeWY~AK)fpp=W<1*c3tsNFHRUaFacwNBR0(%o|!htHwp`9p!i#Wu?h6xCPl1|yJ zG*s*UB2g9x)N*_say{rOOn+&OJNaxkkN z-czsCS?6o79iJ%^?BJ^A-CCjl|Lg%Gn5g?9XC08WxaxI8D?Cb?z)M}tAMG8$CvAR0 zU_FOwH5RryxHQ(~nRznys_Fxro+$VhTyPtT0B9hhDXzAUg}-bt`KKdXO08~?T?bE& z`vEua=qtvGn4DYuFhov;Xh_e3wb3wH>U&m8ETx~V@auTkTpBEuN9Oz30eE|Akk2Uj zhw{C=0cC55tb^V~I4(zhD}=Ho#O|1t%`xqTVa0 zt+AHo0@8lNh;_vIS6eqmz$z(Mw`?anuQ!#wY;!s{x+)(x$)K4KHtGjxHaWhjgcw;< zfd0lNMa!lHiac9i*IDuKsBzG8w)=}uc%G91P8NHs9k2G2N@LOfnx4s`u5;m}2t6Dm zkpW{137FEKnf^TK@nz7oI6Ij6Ht>d%A6bJ^=AZ5v^}33~%;J)bWwc3m2|NFi#E7_) zAW%OImL^LY=$AVyQF&s3Gt|m)9Z`YoTw^5z_>ktTK z0H|HF0Kr2cB?2QN4CalDfAo~63!E8~v3VcvOJL79-^a$OjuKs-UEi*jksj68Xjqte z?or*TScRX;gx0rMCA(1Ni!3xCY_lf?rwHphAxd?v78t33z0$rs<<=I`M}Dk@NXiee zP1e{fY13d5f2pMq|7;<5UE(+?9!ZG}Ff6prH!|HIG}CGLRJ=$)iDf-yV=F6khp$b0 zVM>F6ldC(9;%qG7MLHQ6YgZnN^kXe@YWphOJ0-+! zzTK-7SMx%jGZ2^NrY>476ajaL#JIN-44BKFjYSIJtfYK zVzz_OatT+yd$&FHL&Y^GDPf*XxTxx!%E?3;4J~UYmA2k^mNt7g0HK- zAPg?c`T`ue+`{EH$6~3<8!Ye`+LTW&XU(u}z|Qw+P8cq|V1psa)tAa+;T$86rw483 z9)JO6t%Yr*Xd=EZTcX~%OKwg+(X5?0Ln&mqA(VCEzCqN zUo=LwB`(S8w_=8M9qL}?wJdOw0oZa)f@!g!2LBd5zTXO-NVT^)DEGeq-`cVc#B+^S zuUmdeX=Zr0bogo;VYd2<1~KSVzgTI10=o;$oI^T6r=S_aUy-hj18?1zi#!AN9$LuX zU}h3ONPD64Td*0Ly@|tHNQB^wb9Rk3VM;@Q?qU|7J?5obxzq2Qtnuowe!vby7#kCL z8u4kW>%+M!SUEw|cEG&n*eg=AZpjcBz=Sr^@lq~xj6ZE*#+>Nd=4=6k^m?8$WBL@9 zTmvnMgRlb#483$~&)PVPpJjXx-m8FR75VQM{dXh32-j=iEU0>cK5p^{WcQIyQlmI} zDF)l9c(i~YtrvhDe|XKjPx$-(tjIQI-^eSIp4plQu;DCIEwY5lI*;WwluE{I$9Da8 zM4%dZr`#B}F2)?G_6tmZVbm!wTB%ww2stAw-=v5eEAnsC~jB(xJ3jXLehCqFMYK$LruwCSrfh-x40W zlc>{$eFWZ~Ky0@XWY1~Mo$x#ucmU!^_jlBw?Z_U@ku#pK(6a3beRN}9kU7r3wTV_$ zAG4@G%-567u59U-&RWM1GMg$ z=6$sitn0=+pVeAplmsN)V6uQB0zBhe(!~13b^f6FTxP%y4*MoDo>l0ZC5V|@ocXf~ zeLi_Ct+}md>Ai+BD3u~^6snwTZtRxz#-OtaEGZ3RY>K{ZkE8L} zlWE>3m;9LnVQ#h)%JC$%5S!OesHJ&$wfSh-TrvN39guk9O2u|U zy=c&QLB+yk{bZ5M$@^jBs5rUAPCO*UZ&Y<3+YT3~Qx@t}&k1CAmxzFv*3&$NNm z;6CC9>v-{G3IC}neiR99AR%RYJNlnPgtT#uGk};WH^@S8!TrZwDQH}e9y@Jk#n}x& zWx$dd6@eMJP(s=Vb6^(eHGZuz-SFXPXq8O#< z!cwZo|D6zm?n^~LEcr24=5-CMB4(O*p)4DM@hsddZ;LM~V1lU=z$SzUb;pMwxOqdZ zvXgHuT4Hy%Y&aH|Hzwlo`H4>RDWdMg_+2}a7~LR{B1^Jtf_1OouSS_8WBD*;klhn4By^9lhoU5GjMuP#<53MqJyD=K2eCYnmCcMn{j@yf0&4nsVzaS0+TX!9J`}0M{`7+aU=nyXZTzRqVUG~ zyt&MfFsup7HZs9S$I#I=$GXzl4fHugf4rzhH0Ni7wlg~=1V9=Hshbld9bnuWXeVRB z44wUHdUCAit64sloLG?9p2u-Lixm!ScfT{JSvxmc_DNDY1Um6-J-i2{$?Y4JUF}HD z38Sh1>pB$&0ou8vON`pC``#yO670J~|tnpIIg zCz+=lRSbc3)HrD^0$;DDklo051%#kCJ* zWb$G4ZH>iA=D${DZqKJ`1!H`?`ZBe6U8vHL93S;BNKYIcX)p@+EWccNt^%C24ylcp zTu0BKs`V1Ci8I3_pYfX|d3Hg@6cB+%pYZ{Rfik(}H2)%j-r~(DptgbJSm;b!fJg8$ zpKHd$sALy~>(_ZVA%-r;Wx(l-VfpxO=`xin=LccOn$&(d95qOi8o2|cPQJjsKaeby zYa5n>(ya6qAUh35n+Y=V$SKcs2y~mH13IOxt$bx>&5>$HY6W_z)VjynVA+>B)0#AI zRBVhRUJkE_I+tx$4+jdm)qPMe6HoNkI61M|1D>)O=wwHyr@F?8z|~w4u_&d{C79bT z1X&H=1}%ERwlE6qpTu_w!s4?w_xh2*2_!bQl4zBY1T#-zYONIre#bLhfq?uBWHNX12vv^3Bn-}n zLLxB~&Q3fQgDtvQvv#!#T-_@v0UKweh+Xz3thwGmWmJ5DAxXovaqp3{)gJ6vRF&@z z8-I8|U$&8@c=34$faWy(a#fhyiA$Oi zzh0}FL(*cAhQRzBUc`9X4O1D$Vl{rjIN)qgYo6i^UGedm*2!2|{3@DOwqTQyrgrkm zuPVg z*A1S&A+4!^_X_qsq$$=H-@jhl3qxOTG*ho2A1PSNGJ)+NZKhhJ0hNr<4!^#si-HeO5|MXWNz^MJNpLkA0VpEK7!Xz;+qQ zb8k6|KCboZozjlF^+*we2|Z@9{k*mSlrzW>7P{a!0<^C+t8BK)a$C7zL^UT}WOVH> zccfJ8Yj+bFfTg!%OI-)r{Rnt!8lP9bjf++jA#u6JrHtp{q_#RrsmOl8CJH4VN!Frf zzRp>Qb0bfXba^w5A?L9bjcR7~O43mT>$985g)&{`JL6{>fQM_7EBT%i@ET2RGh zGS$*vAw`>d_#H)vV^U{D1u%=B4zNMuCnw;HZrAIiqACx9`O-#ATPF)MLxWmbqvBGPb;F{ieqaM1MABB%=-Pw2K=E*n0IPfHE8%m? zIn%Q2tp{s&>hx-A==6+6k@@Fiiz4s8gt$oY4?oCm39`($Uky3d+Hw?xhY&tSH%XN9 zM9SHtk_>`z!dVgp8O{=5iZ@W(m|sk{^z!^sySMw<=IPw^c?%EXerq1Dj;=L|Q2GWH zYU%j~e95R6?}b!!!I`xq%FC(tBy6#?{d^*gKfLcg*a$3wVJ9f%ZVS||T=1=88?~_A?$$WVC>qbSee^I+#sDjRYvHQCez^@gcQ#|0tQwV4D8>Fo;k*~6 znZznSz}d8hF>MhF06Y|b$IE%a3U|#Nj9k*vBCCY+KAoKGV6MKlpraxLidvy20a0lz z;#b-&a=TVIYcQH$TEn^Y>%~PlEIk#Slx91kNf*oF+HueP4T_eI!00L{@LkfGB&6JF zNxSAViSz^cUkH%t_k4Bjh?FZ(KwDd3+s~P=X)8EJ6P?@+Gl-K$KyZN316H?_D?wcS zxLMX>Z`;Tq>_EN?4XGzvXYQC1VgH2~@lr$V9$un>UCnl|YR;zZDxSv0!QGA1KINv~Elcpor zG`Sc*z(T?gc64HTwkz{%@g76uSaNP+5spC~&^4b29eJ@}w9{6$ucP}PEP;j9k<2qC zcycfncSYT*Dox4oM4Pc`KJqbkV)(BzmMAgs8l^ck^Cn}}__G zR44%GsWv<$2u?aKfkgSg6NHJj9;SygaN0`WDoeY~E1dV_=&@AhLYA`i=bsNv6Sbg2 zMEy3sLOEA%oz=3g4_Pr=%%?x6Zyr8691jdWGZ=iFm|I|XXWChVI`kd+mIPp@fB-zO zzm|m%HuBg#$cGVbHOljCwa6Gi(WKze%nj!BXGTW9@i6cVFIP#H1WI2qzuYsyBs153 zqc+PoJWYfgFlPk0nik#i@=d_?gl1^n#Z3tKae787$Xs#LxLA zOJY3ApBa4WS{FB}>}SSfWK@&cXw7((G`y3y18~NBK<8kroovhW-F29%H?;D>Xgt5|GX@;c7!Bt*; zv{>-H<31M6*Mw9u1pH5YN(b%`vIqEQSi;_C;)e(O{j4_H$6rSR?P+M+qXT-?n8)7HM&c`QPKB}C zalKTS{3uT)d*ESU2i2z%!aqIuNLA^1=?Np}1vpbqvJ2^mIYM{|P)3ApQFgnyxOa>+ zrg!|2eTX@_X%cP1E7~*ICB52(!Fc;eoc<{9Yqfw?4%quAAKy5zZFW%8D zCHpsd3*^<6XR?ZFqI8LnoSNXCxD4Y!4twJK#EXP^;S3Xl%gPy8iR2+2*fw(XzJfFkv9}ZXcRlzq;DH0u`IVNvJ4*MI&g3l1* z4>#~MIo5bNJW`%{U$_*T))-ox@P{@o-6|Jhv7->u(l@W_OQyN1iKfPd;x$Y-db*m@+XG3QeYG#@-hYl4)+-}1$j)+KCFK(w zC(v`{C4}R{4uHd|Ys>s}QT7aMIWJzqz63_WgqBhVA!~5u-$enXU*k>)ilrTT+h)6s z{DAEcj5bak{?J*7I)&wWEXqzt;I!7C5?#g@lQ-Jcjfr|9p;t7lk6^ zeBYBS7ZQ-yq89X!NFW#6@btQ$13z7#JAE_b!0HSkC(qxVRIS$KA`)NzYI{*KVU6%3lK0-Ic z`18@^PpU8R5?8<#MC83uy_nI3Up`!h!wdFDVt;X$3iG|hzL?0ca(s=&&2=9SbJ?U% zSvUyiC&DE7<{V2W}dFSfedH}uL zU#0?^o^;pH!p)*v*^KjlWoQN|pTg}G>}>MZ89-E}jsdxP4Y2)YEERnGdsRfk_7GKe zij)!};&`1MJiT4_+`~dpVp^~jwN{W7)#))I*CI?*W@qmC*M9!o$;WJCZUM{`)MKL# z7cKPRxUH$c8~B*hlt???H+~IRBxh=712>5c;6P20$(~KfM~T(j!Kjjs`wz)X*gr_K zjK%$>4l-M-A)UvrA+%L7|3$RfV=}yPUg}Ae@+-*4f$?W!AplULub4DIdc`cvNvoU7 z7@&M4kFrqyJFxqZ1!~ZPG77O|lho)?+P+peNw6bbNllUzEJ?H-C{Ft1L^mv<%t4gTemb+|ti8A>zrmpfVbf6KcNRgo0{i6ym`8BOwqxA82dU#`6^8D{ zia~`g_fgsr0jG+0iBK80VpV=3ld3%nWw2%L6}Hi{ zmvnkeOt0b!hq%Uzo+SvvCNPg#7`qo{E|29~u&c1w|G|FYJI;jjS)145^PY8Td-zAQ ziY9pL(#0E~_mGI!yeh@Fe*-M!%fqlDFDj8i9ws78I9VG^qy>vY=I{B3;87iHbAfqF5{}~ z!yIWD8($e>!&8CBP2b9pjYPw{FZ2^Kbes({U1_YCZ_?C0+k`Z>Zm_FhrI|M#Z4pPs_Y(OSOMxeR zGat~{YavjNm@wWaDA&D^tO=SDhFN#KFjs4#dWOyY#7^%g?|<(D2g%>*Iu|;-aYspZ zWir%-t~t_^KDE49CpQQZ689Dk09S z*`qbg{!JoR<^Us%Y2$|IIFVKsC_z(ZkET1*gGvZ6*s)@zUy+^_Gc;=}+%Yi~`L|T} zB*URVAPvi2qEvDw?Syh2D4+6M@VlXsNGr$+&WsWS&dRssdj$n>6Ka)_gM!yJk4N}x z=I73Ico3c_JidBJ{y@cT$i~M&Bfs7D-AC>uWmiJtT-8RRFx>kx*1$d-Meo-yz>=oO zqKk+3jU+#>oym0aS|L*wDs1Ay+W1!aa7FNz!igG$A2O8^gJd?da#(Vp1790*L1_Z> z{k#;jS68o`lo47-b16;hu0tXKyCV{zPu3s{hDi8;z8oDEs=jwH%EXc2GiL}iYDQDr z#(QT>;>eKOK>;I-m?wI1pa*0#>p1sCdr($uy(mendBT`4_( z_CTi2`#FszcVUfWNe{;{v8AdC_PlI)r+g#q@gRn58AZv7>e*r2$e3qGXuy)oDMrc3 z2hIvcDY0W}xI9m(aum2!l3Di%E1LT+5`oap>-jxvKxpjSX5raG$RIr+7DbDHSXN>? zSIieaurLfW1c)keu-BjOpRf$cyrOdM!s=8u8G)yc)%PsS*udu*@)RK)Ecpk8(sX{;MnR3F zICdYK%4vM-r-A&~xgkWkp{K^D7hvc80Kajg|iT}&K zlLngl*48CFoFWLgv0eM!3Z?x0!Io%QSYCNwY^;bJEGF11$ci1R6ryt4vgtf^{6p%xR%FkM!Z@37%FY+qtxl&S&vH9=B znPaQE;1*mO)N~h*ed5(xzUZj~w&Wt@`BIi%DdR=I@fd z`!Hw~Q}!t4MQRh!Tc+;QAA|w(=O>S2n^o2+g`#{*DI+mJO{a@NUV$JPNH$c%#q6W} zoM-=vL5s>`j{?IPg#yn}u5CxF*rU`R4&6lCC)q=?e&F)JE>vMK-x1@&tVAJF8%OxD zpCnTsM~jB><`)b2_CTqKS&bm0MoxJ`WvN8V%k?uh!Drh&G4zM+67u+F>sp-Wl$B_W zgMjg3ZhklVPdP1SUqo~LEkIFKczIDZ6uRoou`#8X_TY}qVS`_ zmGl>z9JG*=bGgxlzC;_T3T|=r^SP?ZOb|OOOtLf+8qPRqUVikz|Bs}bBM4GAy+Xwu zdvov!OXm-AiXY~smQjWx)MsEPO<8plkfD1~yN#h`lk1zvMcDP1EZSp()6Qy9g}*jl zGGsokb>(ev@(2Jt^~}~>oC+j18X3`zgD)0QZOsp)pZj&}GnS_Ii_%)c-Tl!8=r+lt zVs^jx(2j4g4P)!9A^#1<0?YhN`(z1P2aEWsOwJ|;KiX-zg~jI>X39(%Ac<~DoU77) zDe$q&K}AkklXT!^9#Q`o%7=;f2$#p~|I-}JYi8TmxU^H%m-5)hNKGbpVY>`4S1Af_ zQknd#BeQOmpJ3E{6Jb5>laW~<-X=H99mI;E$p;|f~0IKDFQp0`tYQiXPEZaQ6rydSUCm0n19Yx z3mdX6*u;~i((n8Whe=&~S?|pdea@L0KUrUNzu)FB=J-I;%=)=7&uB5&`)c$mhAFJE ze=!`f{k$zaq4{+6QyX48t-F%rF2`>&rgAH+KV{v?H8e5v zqclO>ruhl5ho$87Sv;Q^3@OK@@;!A`>fBkz`GG9mQqpYd^w>e5);0en^dQh6bJn{n&zi_A5$(f_GzJ(H!$-xX3=t4x|i^}S=YE4*=mP= zuxwk>B;E}j=&roa()v?zfDhcwk^cklFs)*V7sw*0hp@E>6MKi^VY*C1S7L7RpLYoS z!)j>$`dBvf*nG?Cc@0nL3d1xp2 z><2haXy^(%e|jc;#wn!!zGLsGr#Y||W3+b1;17pq)UovpD2j)Map07wT@GsFpV2)S zV^gF@{r=^U(YvQ-GU^QpTjxsS9P{UW!T7erAIGX{PMph^ohNE8CTSL4 z%Uo|oG&#wv6{KU94lw-%{m#zE^-6yB-<-}qe1B)1t#g8ywg6nMfKBSLM=(`q&)nEv z9ExWZ(G>b8`Q*x*ErAhfY(tJ#e6h^LH4F-H8PZ>5lwg}jyEd6TXy9x-z-zM=7|98g?2 zT+4O#7XS>j8Z!)ONm`id{`&BW%NY0Fqb1`3-x(ljk3;9Wz^KhXxvxL^+G`Xf=9=;F#>iafUKB>Vjr#V~31~ag6g8H0Ig!CZNnjlUM&>U>Ss@c9 z=Ji_TX~WYe=cf)LC#JSHj~x1Or(`naI+E!=?X|T*_}HZ6pcUDu*5NR0S@^587^KEv z8)<~J@O`bf%Sn4DaS~o##91*nQS>=Q>kc>NS^bK2jsoh(W%VoMIIhi@&~H2-W>;ut zWUK(y_J<4`?BQ3j=K)`LmGf!zU1rUmo}{O@c$q0S$}>0|&bmIX287pA$-v`+Tig+? zU$>)!Lnz8v1Y2H91dpSz?!0PC10UNvx@0rulJ-8~$DO%*pC9dO@W5?d@|ynq%En_@ zc_Ns^s_KnF;e*tse?9jt>dH}s8Zl$_mA;lRzY-;SWv zZlnQ*l4Mtu5Ko_`}Fsn6?h5CtAi zpU#4^+0Fwa3AJc&^wC>(Zhbv|;p8pXaWa}e@USj%vf&4{oz+E#G8T?%!%#LcyQ^EW zO&{KEXPzqYSX!#S8YCPOFbn=peKy?l0JZ65%*Dl3-mj+!_w&&%KXP2b?!T4N*qfzr zUq9^!Xpd5uCY@A^Wr>7D?nG0!Y}WgsGd{9 zKN*CRKrfeFSIi86hn6^Eu@H*jSQIUSWC}Q1Q89bJGP?lFEC(?j22R0xyxHo5!<`{e zv)P1e1^Bs>CG-cH4QoPVg}8@|%k}XZjm!2WIJnc08)${8VRF}hx%0=O&3vam89wMF zQgRo#;Bd1l5g<*R0XPgka%dHpv;7Cvu>aWZ#hkOmP$NIPE64fpyI;&kCq9j3?~ou6 zREPMnJLSOt(XC*l=2gW^NF~kUEK(KUpWKudVc8R21zqF$Sc88Yo)k65ViPp@4E|+A z7Hq_>AJMi0Vrrt?PdYdqQ~3BH28=b4I0Io*LYVNKlyDQwSSHKs80&UjgLU?vEf;*$ zL|gl@+u?pCr^(k$_B@s64U#Jv^-|srJG0ss zlUXT->-m=b^-z!I`LS<;QaE$7KRzUd(seZ^0>>0l2`hcRk-Tts0Qd-iDK@~g&tLdx zsA`e#)ZaEdoK#o*|0+RJKVE^>$mwx}DQr>@L)8e_KCWND24#M_f`5*6sX@8aK{RBC z?Er(XqM)%Qo(ddLiDo`y-$L8oWVDJ&z?4qLah>&ZINAVOG)EX~skMV%RHYFMQygYQ z4gW55?g?k;%8$`a0oH~#dp7Awi$|r{u-w<@5ZP?wYOF^`EXzn#gW1GO=~vuvFO(8l z*^jm2Ju>06JtIY&F=8%>{bFII+Zu-eWHSuoX@`A8gH1R&GE5i48*tXIb({j0;S16x zgG4jOV0oDMb4y$4!>h_^9ZS!Oh}5`djj^@{tJA=G&23JS?o+%$!{Ia=+XqUfPfa}K z45Q828DnkUMSBxdcY{weNQuiawW}!evp<<{xieX!@2%IRkyKLNhK=Yz6a8mUJY6$Z zmSo4iPRWT{b2t+}1tkBzPsD4r`~Hf0)CVj-2~O*IG!tyU|7yxNw4<6(^W zC`p$kEL(C;x>REV>5yZm58gTf+*~ARwI|>h53jRAeSXo+ta+?OfpOCROb>&djOYJ_ z9T)M7HqcPh1AH(+894pyj&DU8Bd3W3Y6;(Reo;WlqssE`A2Kajm$I^sosr1EbA&Jv zerM99PopSEj+}>7gc2o-t%}rk9p*0~%NQG1sdP}ZS1QfrMQqEzOsJIToSVoK{VoBj zZK#H+cs-4Kp9~MY5nk}B;;0=)lU>k-wIcY?HB74x>{=Sxc_%b@%&rt@y@j>2y^rvj zEYo#Ah4*xLKRcqsR9=BLU5J6zvj_0FKz~e1M0)GR&tIp;mzMY9Ks;C~WeZ5s7fsR2 zLla|Ki=AVXHq@d*Ar183sbB-rIg3jpl3kLROpCedNKJ$dVk*;t92dj)Ceo zIx_g2aJNff9o%ynf_+{ByG$+VWfo&cg&Y5dfaViVO8lFT0;s*fomYoi*Kr5p1c2o+}`oNO#&hqg3{JY=mhUJtZZKoX`R_Y6b z);Q>RyEZ#U0Q^{`fIs&>=e?+LbLmY=-@wPJ{wKc`eSzBk+ z%ERUcGM-1R!M*;8B=96bTWliHBkdna+6yqs%J5dcIpxnR!k11Yo5F$|b~P(VD>)MoGvirHa0<@qP%0rbG&Qr$K%^xZ&f$*J&A_|4nHZ@; z{p%o&FS%{T`m|e@zEE@c{jK6C%O7Shk=b@*MG?w6jy;m_n3alTuS3A#1@>+HB)xmO z3C=qjvbmYhzPr{Dw({rSaVFS{FIN!Mw3!CT1{)tqBWVVOC~tird{i(ts5xzdrxg9 zbJl4>jc;(gxdvP7LZd&*Z^<2KIv#EdxN=^n4B`xhq6mFP7FYiM7!U*k>2QR;>8wcE zx6o~I!3by7XHeCmGwj|KF;%^XQ{l5&W6fXRqV9Pm6J@MEx6RNp5hcvZ?fU#kAudPD z*@2ghT1dqU>$~KfZqN>RxZma9dBE6t;EA83WeO#^HcPdu@qo>5PnhKU)s77mHPi*lrL^J4-?@9m@=yD`t_AVjF+lXzVRI_luCAD$lS z_h^@Wc;9l{GtYu*Iapl_5Y=H=4DPrmI!U+N$Qfxo7fUg#P_g4i>KXWi#)@0M^2bT| z^%WB^x&|8nDWmIB$xp*5ddZEli`$`j@I06nXTYLUN5vveey0${s`x+7Qr7XiCg0>;%sBrm27?579!0m#+x!?YJ z9p=_qJZ}QX5O%Qgaxxk?c}66e<;a#l)ySWt3s=kEq4Tm}-Iw2m`CFm?8SJc17E?cqr`zkFK;0QziO+MIF`#6vOI~36GV|r%T@;oA6cNo~`dor*~0k>0_MVR^P$tN1@SIW@fg z;0WOr-LU}t>dQ(s&SOg|-}cCZSB~i9nmWGd*=7=yKQ?Z8Isr(_ktw`KH*d$-mkG7s1!WBX{f4p&RH^d^PK2?rduS0E(Wg{ zc-EvUym1e89K^pzf@gT&hpVZNGN!_mMxT}~ZWb&L^sC6YeLqgZ>UGCT-Pljog#H}9 zoVvx9Y16Hoa@slH<1^gGuZ{uZg6;X!j|lL^eo$1j_>wE84-DXm$%}e$wXP?%*-?Mf z*%!A??DkdeFmONJSvIf@p24>UzISsZT26CXyuW4)6)!m^`xB2Fdo}gY53I7d9n{h$ zn39_p#(fKq#R~6NS=&Q=y8aW|>BDgl7#@n)9aCTw0@$XcZ;U;si2QhlrL#0^hqM;? z2oiWnYYfisA9Gd89#65(lV^^;l$~V{qoTL)z^fi7c`y)>Cbm#fE2QT}wemZl;L|_e zm}P3-PVW$>$TtDS05u=caLVu{VNM(EB&3$%oyp5n1)8-70ct8oPKOSV6fiqly|%|l zy5LF7we*zPWS_v85Vjf*;H`^h%JTKG`Yg5mj6W2Q*%H+@P@xiA@~9&(!_mJ$@htP2 zfSvRlGJp3Duvze|=h_7Rnn>7lBK_MI++}}a zu-ZQ>W;*5ZO=udmuh6Z_b$5@w0rM7_O^*Q`A1mF{O=p}gKe`XQ{Me~h$4en`55}j} z;9HYG)h@N4!s}NSgCWhx3I~O#o_B?x!b82P^5ED#EY0orM8*qhQ04D3c(lBvcS_T+ z9e*Jm#OXsH7}tTvZ-~WSDRh4bVRkTf6zWQ0Qh56H$e`JBm6d{CZ)Keh3++wuoPGiG zavv)V!PIk5C2C}wbic=m_5?*0%0y_A2(oQ$yuxeWyg5+xtF+V%CuW-JNAd=?ASdZL zi_C8BmD{#v7np!p+Wk&cZ8k~v(u$vvuM$ZZT$h*Gdvpi&V@%o(+mC|1bP3I+u;*&m z64Ehnd-yTzcqDNzxqWsgp4lBFbGJU64t*xg8Ezqlr&N-DoS8B#yP)_@(h}Y>yKtJ`~=S{2U zXuM$9=<}gn8wNYw@Cg$vH)BZonsl%Qd46eGIQ+i@8>R>h7up4IOuhdL0?eF@({}CIx1|&XRDTV1g6LyY zBVb>~f9~n1qXIoMJ?%JD1XMg}p_3goF1K ze--c@#D9u}Jf|bmvqU&0>e`Ozzpcm&nBj#aj$qWPvYnfLMe3T?ObeK_mp7jZ%0|wV zI^g2`;7FQ&?wE$pQF3!ok6p#|D4oAEbIJ1Y1}O!0eyV_K$Ag3VZW>C&nq80o>4dTw z?N3@jA9g-P2F>hdEP|UOOgdIRePe2e#riABVAaVn&v2rye*W`$zlsWf?=ql>gIWGL zb%RYVI=(i0)5;{1ri$e}hdq`5`yC`k(ZAD?!|yQ&{kLGBFOIb_v#ez5!n1(Bf0a4b z+D1rUq2zfVT=O|^4x{^A`eU8JVEVM<b#=Zf4Rq85-3 zlm?*ASFR@tEYQghgVAthFWyXAEu=-moIy(QsCg*Pnst0B^3z?vluRzBPIB5>vcxa@ zufJrEMA8(W`L#ioQ#^s$9pX3?UtW8U;z30o#vj>rP29DFl-w`%LKPUBlXqS!?A`~R zNgt{8@zWVqi>1JdrB~}{^O!>Hhi7)#p@Exadg?{&e~1GBf2TrNLia<;0B%+-#PRn7eMH_Z+-|`e*>R0 zCM;4dTFqWz9^8P@09R%r#t9?6EVEQT9Fvmei$8@A+O-08&W8VKZMzh{d-g_S1!BDX z-37(f_ro>m?=}ERM23TS{mE3XYPLyjR*t<*A1VF05}|&z!m3m;8s5_Jz4l|cDkIfa zC+W-MrwGXZK~w-5h4@#!;mbXV>nql=;|q{QT2v7Z}@i zU@hUc2U-OeogxpVNVTMo9*t&a z2dM44EFGUec6PUC%W^u4SG)ssMLAVA{Lfs-YTZ2u1G2ywD-V9#n$19jSb5rDW3w_D zGj_}32(3|ZdbwPJ^90{fJF@mg)t=h^xldHaE49Fw=r zN_)WVn%#Af=6B6gVYfcPEq5#|q!)Bt(~Q~fgN9=(a;^CEd+7zm2fvaQMQh*QA|1BV z@Wogj!n?b#>^-<=_1G?52iv|3@pN-YD?CpS?s$g@0{%b+~Wjm z5%!;S#_X}@6dTvH-I3Yv6{F)t!0Wm)5kpf_5mh_J`r}mc#sz%uwNT;|e07FDSHHfE z%S?E||Ap?c8?ul5Y1Lu3i@m$H1+G6!`o-#T783GKXPm0|Z(Mm{ysKY7RCt8D*MMer zx)k-9nEB)QT@NSfIpY1gS0)+d_T@@qME#AIMt$+KQBRGqV=y^-vWtvP*;yXYtQ~Am zQ?N#l#Hy+DT)ig?l;!2fD8da01?U!xW8N+0ArJkG{YfqQ)X>3`Upij6V6&Cm&W-ZC zj9|>3^2aG^QE5pu&Hw(yL8yi4-1zIVEr0SP%^`@B!NygFd4@;~s(0kZ7;&#_$#11z}WtvRV#n_^pJfAmhj$*I%P=$h$6)Z_*u6?6AS~@mZZ3A5=RH zI~`X+BE4%=`a}Om!P0~&>u*_}FZ_`j3!*jX?Pm80A+VH@kClJeS;jc21dF(zx3XaR zoS;}==)kR0z$dR@t|xFlDD-qJ8({P!uFX0^V9Sx1wcTC z@pbS@y%=+IBp96W@b0m)&;VoQ!ZL+?`~XL6d=}O{5qd(hUA)P{LKu9GIAaV0K?A7; zg?Z6&MVhO($MIw;w7YT}|5b~&)Pq5=CZ~*;6?CE=n-Aj7U5%eRM)hb+DZpPG9}56V z{i^Y{;gga8@aCB*s*3YpoZ@eZK+=D9wvN^Jy zY=4Yh5mCXxf;?0*P%;1bL&`^mNH}*-G3hMoyjDaas zAu(w|N0$+{AxV-NpAn!kyePYbiW5x67TGPOh$A*sz>k6CCElXg#ZGAK7pGi0hOn&K zFRJ1JpegV&%@ba3^(g$RBAZ4?Ld7EiszyzAZ5dl9$kd*}PXuh3;s+!HCybd$)e43! zJFS`ABxA6@IZ7W7UBPcyLA&P6{>xz;!{N}SfO1P^$KIeWm)K&qX+JLWoeLHfD+z`c zVV>wk`u{4k*tbUbx)$L+%zY#dw@=HrH1Coh8;IQ3=ctXn|8FL}wCXP~SQi}%fRU@@ zHmyLr;IVKFcwo5#fYQp(qOg%-Vb5C{be|s$`c+|aq~1b``ds6(pD%KwB}ipNbz~Bm zM7gx-m1NSIjl`vg1Z&B~5l6B>Al6FhrJEXepd6 zd!iDB;*!;Z+K0phJ+h=t)I1+;gEB6TTElJ)Ex0%VuA~5?Ji-vERn`UoPD%w#N zo&o*^=HUyaW~rccd|&>@5G(kDqHB_JDYovZrDYse1uF|c%gjp9OS0#1T2M^sdWH91 zVzad<985Fwe3C6n-X`)cXB<0~43Bm=5^6>eiMb5BIvrJs{oDp}J;L38CXn6daQnw< zZiNT)v3Cp1cy1ozYv$ZsJay64auowPaQF4ZS2j*bQx?=nfKD#?00M95O9jcw4&e2$ z;6fRqbl2f8y;Pdywxj)3#>Byl@zKm3*b}9P_qB);f<8dvPC!BFz)c5Hl}*Wsc2q0$ zRoHV6Hp?FBNAQbRGr!oO7rDGbtuV;RXEA;nD`Z^aDX}|@EMu-L1XoLsH&NswA2y= zqym&c-lCjjE}YQ>XXEWfFnm7wWnYSDNEcapWYZ7KRC~GyP+#-6SM{(5c6dF`0@S>j z;@L4R$u7v``D69xhE-Ico5(YXR>HxEwk5p)XCd3^5WE{LW4kG+3}E8;5*8l~LT4~E zdCFnm`qU%@_bkQ~?qH8c>GKtR9qKG2GQ~OQu3z!$-_l~?=5wk=U(mM9>hKO#-Sg~@ z%K7XqUu0?z;F*gIlrv}BXk)}n91WnC-PRL<;_6qqT6aWQ1VP|NDTB0I_h z#qbf%EL7-m4)K))9)sI0J3a_h{$D=WN1Wc%#Iy|Bhoj}2pd2`?Wx&NK2*vBPCY4lZ z&NvMWV|WeJC@oAxUiU#ycSbj2Q;0pq)>N$T%0Ww_l-@859;fJ2wa6c{d%%im<#JwI zmgh$wmvWNf@Zk6>RkjPBWPgoLgXaM&VwR0m#MpgEVLn6k)mPa11gN}s)1qmLC5KGO{w2FCnK7Ngkbs0^B+E(&OI z<%;=FM;1~FB^P>;XeRHY${Z9sI9XwkMaaY!Pa!Mj8NTpi9SQ2(U%6t`Yn{hM>#>dF zb1rg*y&K!cOEvuwszw6!w;{orNvQojrqESZ?c|pUbaw1Zi+tjKK4mS2Z0D$BROpo& z!`cPoMm<$$WycBi1^F(SVmAk11bpn}+qY{I2mNAh1PA*+w5%+Xy@C_UbREi4_Gr15WR^_<=O)a#an` z3HXf0>K8CiT`kWCFT1VZNu(I75$KB@Y=dz0DhY-2$>AQGqx%CMH{dBPXeayT>qh9G z(Q)^Vc7dFXL?JiyEaF4Ru2+nITV7l2{;mz#zJyeRJ_3{^?nr#s;)K(rl88m(0JISNo zXpX%&m^Ip`b_sS=y1duB9*4llAbVq!tUPK>8g!5{xMQM+62JSk25zxBI!V>`^>&v; zrL~S=!6i>V6;5YV;`j)RU zXTkHk)mZ$%Z{2s<$&N-Q8_hM(IewzehPi*GVv5nApG8bxs}>b7q26gs^8kxoiDhj0 zUeT`{615 z299H!R5FEFG;%Gn!;z4dG&*huzj<=O5N65TjOepgw$iRR)=V zQhjRlvvH}P^(VH(oKw4A?2^J%^?ceaqpnVlgI+}Iua#`Pr&21`U`ds<3)C1K%DPX4 z>Bi@2pi}HZaLjBx8@$poUW-+iD8x*quB`>dBV3Z)N@D%@Jp95)2zA*s=h#k?>C4Ji zquDqSWXT-Z4{QJZ&nsdw$16|fv7J<{|Ex$mGT|DzdtNC1IbQh734s_K9b~}DJ6br-~66c}%9=}|H%YQI-NUOq2;Yl3JULGg6fl#MRE>S+Y z;@YzVN8H@5Q_F>cAfszumqj!e8SILO2X&2#o41XHvZ&lq&~~h`QhXX5DBG=A<3EHw z{2I6BWvc7UkG}ycg`cai-%JWY|^rPK5^izj)W!XgR>lpB%EPK_@7cn{td7TlIfU%(K82I|&Ul=42!fzyt zeZ_d{%MF6yzh5-y`_$j&vN*Jeto+2p$msBudH&_ZKBU{{;a_Nq^L1c^QIa`O(340f z!4s|q3a$WC`f?jjLah`0WJYXxoz7hm!(oe%l3*JkQ1Xg5|B9c1ezT6D`G?>6BiCRb2 zsK&QG%?vAaS${K2sEUN~LnnblPdoG;#C?^#&L_p+I$SidkK*n_L>7yvOG57dIXLV@ zN#33lSiwMjvJFr9u8F3dj2GZlCH1zuICzvbjQhnDEwn>)Y?TQuC1YZe-%R!gP+EN# z6$rL{*5^|q7^@GTq4bmFR&huc>LQx{%a3X*icsQNHWrAN@Lb8OXq$9@0KBI<&D)9! z;~xij{$WjuA1G?*xxzUYZ3_p+9+Q+q%nWPdt*&`4iG3h@3SV{k`6i%Z7ApV{+iBJt z>B=03ff08*5A_U{7h61|xizjh*{hvB#4i-s8z4`7tvFQ5kY9e1q@mLk$i?^`wGtziJR8mMb0UQVc zsgGtk;8DjDx|JSRGAF;w-;IEEa-j`#3f^M|lvq8ny|q^u34vI5Gm zKz?`Wx9U@v6kTvgopSg1z)%=BW^~jrZ(jt{d*m+r?fTWurzoI!i7K3z6kXZn6zkw! zjv&{tNiT@p-aN`;yVgnVC!9|dc5k$0p3ixwH|~g#$I&!x82&0La``X30A4$ zWighy8OWr2w1KySaSstn{!^62W*6{TLTPQ%wMwy7SzszvdKY6aQ(E%I;n)+SM{;bT zG9x^#BQ}f%dXn*&NEo1KI|*h5MKUCv{kI95DrQK~Me)>@>zpJk|K-D_3bJ%Z!N(_w zgO=mxOZMbS!@1#_`x!T7i78}@K|64P^8N0?WGNO$bQe`uP-dCud!nSziV3^f!MciN z=M@7`QL4xpH_L06vXM%u$fyLy>p*CQ#DexMW3UN~;v=IdIRX6y)1yw@?tPIm4$OV^ z0fW1~W#Q0ISN3Y}^$k9L&UHv7P1aK~PE zU0Ycg-z-p4p}EQNNapx1LdGNx&Jf!qJeh^rjKSs`(|pnXX=c@vwovj{8CUtbwelEi zLMX#5+Av<5VfZ1yCwjkB`^Jx(y*n(Du$$;#34sbD1gP;`-uR{Tv3hpFOY?Hc$v=6& za?T$%ZlJt>9obv_-=JpOZ;tuVCjxSlfqd5AI%k?lFeUOa!T9Rh$`QhL&$TsNDZ0u z1KS4O?nUR=Q*S(ntkxqLY=H%EZaa*1T9V0HedeLt7h}H-bZg6Z1GxG8a4P9-D)2+7 z;aP^`e>}pwJ&9z$t}^`lQt_}a z<;p8UYg1X|F;&M;poP#aeWx%kxvjr%Sygc9(D*NDFUfkbvL2%XSIbv7?Vy<5{i(Oj zpB9E+o3T_1ahTgLKAIU1o)h#$H2IwQw(+ox++4oB45U?$#ev3i`UyC%RHKt5ijqIvY#qm{ML z5n;n&6BqgAwLx+9YM)QJY1DQr3SWX@08V_LVN2s@5 zTIF=c{H$>-%j-e?T-p$kJF|+*uEGlQvC;*!9r<)LUz~Y|YbL6oGKJ4wz(p8q#5?HS z2fePU!B&1H$|+-he!JQZq$UT)9eq66&=nN=E`>%FzB`(pah7b^*qgI2s+MExn%bpF z@|~^WIHEkP+Af4#3aLPEHaWgi@C3G;p(=fmTU-b5&fW(Jtn6Y zOtDAs_8k37e;k!B(WX#8%fN9L<0_NJ0byAvQ)%v!ERbs#7T$ghVoaEv-UNy(!mK2ra2uP%t?tA)aMqjxPnLg zjHdZ&mCCVAp>my@ODW+X>0=BoGxY+fgpY$DoFM3AVN=SRg-*QiXfMVt@FoH)CV92M z%km*pwC>?6y}4}6Ub0VR6rtr+#5-_8ggJ$0*{U-OIH~;<8D8!c@=u~v6koL=s4suP zMTY93nJ_xKA8SVjVMW}6tD{fMqyj) zRpvZL(z2>H!-srwe^NmK58a6ZYUh)JXq7COFLobb@cMdC`EJhSmg$yaD`ah{$jjZ57o<@xJj1T9HT4)cDF z=eZTW6Jn~ceRoenGDZoK(wu5VDN9In_EJfDl<~?;JM$pM|FKZ>`NxydaoOWb) zXG-kz>!Q~}{^d#bvj6JSBq}qIp4#5MU~ivhyakjUh`{rxuHo}zRIfi$_}+LsvPK+cdF#YEY?Xj1$PHu zF#tX>Mzzvdvb#8A?(hcxmh!x?2F(D?N~6T=q3WsC!dSO0OeB0QjF}tp7%E2q6^9E* zX@Sy~v!!ex{z2`^0n|rRKi(DcwBfi*h+lkffazz)3AID4!dbD&nwIMx(uZ^ZjHGK0 z@w=T5Q%t-VIk^VG$-L+mmA0EnVfFKG~vvjX%U23!L$h0ZJ?9?8v?#=?Az_?7j; z1sms$Q{wX&`PJo}x7Y0F^$=@E&^3{9Bzg922HM%ZqhR~*{q_Dm$}(pc;*a&sO6UJi zF#sxEPJS0}JRZmyP>TNvC@My<>WxNHm;CZV*tacEy=WglYRj+=x|QTqu@7{g)DpKq%Zq)4tyU>m@UeV^JJHp+!| zQ9c4Z`n(TtEkwj;OKwrpk_a4HZAQ$D{ircia#M+W2uIjRp(2ntMpoJrEG*#Jj5_JC zE<|X1-ZH``{&p?FUnR91iWNkfI!`WrU#6|ki>w_a$#7P3p+;R}As`AfP93|}zUv&{ z{B@}R>Y!Eug>SMg2gDcac5~na+KsqtiIQ*ccN}HkA5T=?0jaDHb=>-53_JuGk+FZx z&Av~`6b*ZU0ctqv^m0%i7IWvwUd6Eb;oow%;buG?Yn>$2YdnckD~_{`!?@qyj;yA5|Cr4c>|rP-Zl)WIceyvT)*yv{qGa1~Z%t}|QXi|p5{~wZ zde()yZLz6{x*0oX?~r7W7bBe4SH1xuIrC$c}R0Tah7M<(EjwsaSKu4QYpz z)(5aXCl|~Z&?Q|l)f4EqM+>bd8qP(-Crx4~G-Z%Igl*BU;c>7r8Dl(j)xgxpn4MO# zbqP3>44X6+od?xkkHMP!*Ks@tiGhuH+wG$!9AqePsVdBy;gD5Zb6gn+_y+Q4f9v&% zK0CWn_=3YTXEsKz~iqQ0w!JK*xY0oZ$)KTWUj$xJpI(^uYJ=3lQD5I`jOM-8W zsD3iVg^%;P-1$OE!eww)91 zb;ku-BNE>^#Y1(uEoQMUHw6aZ%jDuXNT?2TzW!P}9*Jd?NW=)*goz`>ZPv$Vv?4tD zmWksIW*2?DFuBTfV-C1^om{|)D`1VV(DDi%Zh%@f>nI&_nU@CE$~fakQDo@vr@=~I zT#l@GZ5q1g^aaf1pmWZy2lbH{d@*%y9pQgoWrQ#QJ2vAVpJR+D=CY8Tq$mR5@ss3Jx(aAVjHMrVA{%XA?B^xi7?AE zEFO+%wA7ccdtNvff4HU(Yiv{E+fl_RDT8NMwqa)}B6NgM)3`xvC~X*bR}`FAb(llF zd#BpK=XKdyk#Uj|w){;1kXqK|7W=dpLI?pwhi_i^`EQuuROE z5*>SlulBP56t4!15tIyJfcm#bh-O0`yUXpUlmDPdepM?LrfBa8_!cMZ9v(o)l@BP_ zL3i1iX&EBy(ALrCbaH1#1hyL-11mxQU9f-qhJ6+@c4wo#C3jFg(rI|1#H4}Ik1G-v z@N|sQzRGmxte@18%FTFVpKKcKW1I=P681Za*8B4I+TP=Mc|yQ2v7tGdlDBC`G^+-o z*bcord6qe8AUKiKnSWWx=kgiJ4}W%t(-sEvMxEFJp3}ZKNmWtSdlZ|g6z>Sva;C47 z*YLrgq+B+SV^0+Mrw!ioaillP-)~Hym#4(d8B3Rmk`pehK{?j(hJRRN8EG_1=}RA1 zImXLQHaf7#|0Ywj%pAb&vb|IXJbCg8`SLwq&osx57*E;JsH7Be)^^4Z>y2l$`O*zS zk8nYZ2C~7kM!QYObIkp$kHwG6>9u}uidq$_wkuo4?7@E+ZPJcBcC`| zfsS(%IbCcnkD~^x9`O9^T*mz@Qd>}0LZ$oHX`7?VURC0uA7o>ynE&tHbzyj;0_R>W z_Re&bPfRFOM&ThRC~-k7a*GAM^ZFmbzZ6_a%Um`(LUjOhJODDmt#kEYEAV7^ z=O034FI*B2O9Jooc>f5qdD@QL8bHr`6-x?>uB3Ca^eoBu20$yH!^^R1zu&h{EMovM zMUMKB_^j5)uZ)04HcGEfuA{Ixc}&m@Kmb^Aw7mJ>CxejFj&eTEPU~c^>TEeudbMnf zcQLd6B7;Be_+4{${1nRLu~3c;YMJOw%zO34eAc&EB!sCmj08%P*y;$|tjwD7RH(QA z!;9CKZZ0UF&gHb;k%eDP4Jm_bVs8 zXXLTJ6YrT^KeU6N<#+GAa3RU`)IBJ-+95Jp271XDC0eY@q653pcmMVlZv^S}v;II6 z^h?BHc=6E8ZQpVb^;#n$BD`OP!jHhLdCgwZDjN#PvdC~awYuuI7S@P;!mJ~h7d59X zVkffr9~8g?{yjSiH&<|1U^Yw(#tQllPUN0y#?<+@*@gr8cgukZ^|1T>h6|t7W~c| zS5RYXjx{NpCULyy`zlQ>s1W>kK6Nk$@GTviKGT(zG#trIX@edxi3OVT~_!`1wigKQ$2aDNU9*rEJz>X%s>` zItcM>TnAI{+4K9u=NJGxQ0*>m_cDl7q;UC=MO~A0L0?P!b798MpSd2S#EQYv3e0cd z@GGa6X!eAz-i|L;@S;>}iuu0~qX$x&{;YW{6(@DV@zqM84T`fP&LQw9&yIHb_3Zzs zjDn=#N%F@>CMQu!er`neM51eb0H7Q1{k@3;=Q*pMc2zfJbRje9b1}tCr`)=_y~#&Z zR^;!7Wj64F-3qGLkA*YuKI=5vI30XbPJic_f!-}ClVekVB)HWRRc#Iq30P{ z^@ns?yEdbxH$2`?Y8Y3E3k*}Ji*fqb$6b?lk{MCac3xlU!3)dA?Sf!G!n6dxJBc0e zq=1_TK%jE$K+JN-u7I5pe;}nT#PeRIn}?k~>!ZpX#9ILRi}yJzOtSBocCp}cWUp?K zR}|albkYF417Ue}08kIsZ~>vGwZ>6e^3mnoY$Tl@Xs2d&9JcAe*WKFI2?zx7{U@6QLQ_`QpO079A1o9IKQg*V;y7P)n|SLyMYg^%0JQ@=Kj$3Hv+j* zL#Jhn9RFE^KeeeVKK7e7oc}dnEIHgwQXU7jXUnnUE2Ji`ZQZK51g~{L6RTEOa}u)q zrBSW!x=aO24`%eBj)eY3t;XI9shggm{87%=C3eB;cId~#dyeVC@30SxJP&CiV_byRPzJhUzhTm`lMW{fe-VrOpVFLdMj zu_q&=6xc6$&9x($ILT80DAq^AnoT7fwCT(wI?}LU()hd+3h@)pYwQniC~A5Je75Dp zl>8n6itQXZ&)Qvt@u$Jr_GJ!<_*S2hw+RT30uIMF9!~(sPSaNyTe+FX(`3DWY=eRd zA#9LGAFJGc`-k=`xeI;fY?yIvXspIkBOq`DA;fVHnijX|w*AWh=On>GYtlnN0yhYA z@JHPcck~ed0!5x|IVpz*$us&xX4%bL>?2O5-iN<5?u}`GXus(AKXJ!PK-}DUQsBe+ZvM(ot zS{;tFc2UQC>ErR7>dN2u^DA)Uywj7HMrjY@2N=vZMv;5>#G4HIrT`K0r~_}1qm+Fc z)vz2v$9$e_Xs^9#M)F4*3hd%71Xg$|tE5PF4kO3 zD5*Z%g66lAu)Wi!DKGlUSh<Y@O#wPnDcwBc z$wJi+zP82FIY3JMSHl@h}7n(HdTEvD7{( zX)ypX@g!pTrWFij#`oArFADue3iI`$En1*vD7v`rTWq3+Yl=k`rNGACXoy%CKR-@p3+m4-~z~mY^|XHg@}4`0lYgwNGQN5 z-_n(eJtHZ#Ra-HeWxyBnCCwLFeAJr1_*NFGGh4SUbNpE6?0}`WG0Ykm4ISLR;nX3& zV)8u{zO|u(j%g492Evo^KQm#`Vfd8F>8mSe*L-(T_-VfsG+Il65;DO2@p6p%;3(+9g1>mVHNhPFwLP^4uzB*0^%#_nKN zkAy-PoCKL4ge;5rz}TaNHa=oJn}!oCooEv?IwUR%&+H13p;H8lf(&!S$J$zePSWDE zdJT#`VcF@*dSD;poizGt6R=3^<<#MVdXv;3hhert9Q7HuQl;16=dir3yt1(v$nBWQ z%fQ1GQ{!QF8D&B#ol!VKv3cUSt4q2Z6O32Peal!hRG{%*S<>kB=~ux4W`FdK`JNWn z5QGg%lTg{K6$r(>F|Ag^8UU|(72%RqEXx?X1#`p(TAq%ziHYJhA3Vi=WaEj{Q~i^x zS;#$=``zWvL!A66cJYgqwWo|@J&ifWBQ-<^88pYk2Q?&H?ENp>s$IjRcWLYZj7Oac zb;>Ydimw0YcZ~r7!Z5+zVlQ33+@oz(9iI1*UPxodpb^fORc3h_$_P3{560b>hYu3e zSzC!O282IJVOg_;b#VMKW|oB?g_)P1l;R7UEhLsJ45n?8EDg>kwRObX>f~QqaN5`9 zJF=Y0YlU}^lw{{0Vo;jDrY2KvNZCA2JMjS7Job19`8atTH}Iur^#5AjTGkKobAbAbL$1))iV=Ih&KJY(GSl1V?;)+Y@^0^h|E47>P2q z;wc%U11c``&B{;>d=ALbX8kince2x*80$eK{z)#)p-MCYQ=2dQ@as<$OnRjX-}U}A zPzjY@RXiLwj*cc+xH!+w$8=Hi;H3#O8@=TBD0Uo|%4XFVw z4$XaGrkcT(Lw7<|`+7SsP>?+#SqyL~r$j_`x1Eyhil%?$(8FU+BrvT7D4F1P7XlQl z@_b@+e>AF~e%R;Ww#MRBvL%rypM{zk4@gqj;6x>9_)zl8EhI!2+2=FKXmknG%v-3$ z;>qJU9@%7h2{zyJwJ`?n&+Y2@uw?8#F|CZFv3zTIkeourlvApO($bJJS?Xh%j|fdH zbJRb-8PPfJg(4_M50u+6H-&_{?rMC8F<0;kRh704y>!ZOScuV;of^($k*Tu3z4~q9P+k;+bNX}w$WJmj$WTWdDRxFDio~okBRK=s*_6GDKxWvspRM`viN+0(JCW)e z;zuZ)LupxN`%L~bZE3T$dL|xCwq0r>_=L-ONT1yZFPt|t7LgV1o-*gn-vVy5BFz4LW{!o2WURJ@EXq}&&UhiXX1X1I*lAufw(T2 z6QOZ|uV7V`b`KgkS(@e$(M&~@0C{O;t=|@iO{qmqjWjf78&CLKJzmMrP4R;&6J6y zw^vjHF|qqf^A5?9u|xqxI%4QFCR>Pc8;YBlY@Jq+Eiw;l-+A`*uSN>_6g>? zUOUN&i~|puL zO5OtFr?Qj=k5@8jvMFdR{8Nu4tSDXZw z`JS)N&YxA@ilj^!aH5m5s+e;+?8SIisjRdb1M#9WwqCeu4n0&_T`dHbg@eEtTkg@X z<|b}(%ZihPF;ca2_h|Lz_B6#*m6`ht93t`z2LEO#y&*#CZ{H|$b>+m__=Nk^y9w+9f!)H1j`hks4>kWg8kcOI{27buGZJi3RnJu{|~~`@qT& zF|OgjcBT9_)7HtI4>ZkWet)=sv}Rq!+vVl~GwBcY#9!&24*9bqD|NzWv^}Xdzg2!5 z8CPlC4q%OM3KYwG7;4|7Q*NZg?1hjBTP4c^l}H5-??ZX$LE*IPTAJv($-3G*C_}(uG_uH@%gDQ~reQ;#3s2 zOs6%#705cn#Ym;JFCvg;X+)ewAZ!C?ZCW9x4&4Xuscl&uyR{Su{2{sn6o-S9B9ReDRq#- zw2&$A$(PI4m!|Zxi*N8OlkpJtho@1T3RsL0@&MYV5&a!!7}=b!^*X=gq5FAkkfA&@ zwItq#aC0P*zFNP34(y9j@2J=>P%l5r(t8i)*hxKN2PLo^whLDg*9WU3Axki=v4hg| z#0HN{$9^F?j$d=m&rec!Ti#h6$ATx<^P^PUm$R8U`vWYULrF4O^P8?c>V?EP$1~#t zG=%q8KCV(%WC=@?a^n7J6w#0R@7530FS}=N&JN1`(GIJuV&XezutJAl(H$#Boedu1 z2oN}Vhg0gVG}?aQLoeLt+QyZ0fl-N!`eG}(-~=bq-{Ns$F9IQ9kedIANzO%hlJHn4 z$buN9quHBz&jz>bbPVFUejE$J(Jd7mJI&*$+~~&-e0CKsWc+|CMVfDL(Gl`O z^a^Pijf)Sit}6MxA%K)3lM2GPWS~U1omWt1bPZ344?MX$lk7})Yc%n5Z+9fSCu~oO z_c+z7S>bzXNI2Mw6B=BXUeaE;xw>(`@I~oyNYkh4MNdPce+E+v<7GseL&=cWw#dXh zRwnu4>^%Inq4cij%mu^QDb8H2mD&ZQP7=ZUQ$66JX1=JmPo!BCUp%r$ix>}7@=he! zm2ADAlM}dYOrC@0hs@HpHObi*HqHt(y>l8`8 zObJXmd34Vu+=PmSU|A3b!2(&vt{9H7)bU%#=e6|0QS!KKDUGrUn3PNoN(!#49H__H z{+!)e{pP&-rG!wngAy-q*O?xnO5^h|vk(N#xK4^_)`3u=%E_gg77K1Ml(>fPlKqb_ z8a%Nn)T-NOz8d(@zGP891hHh`?8B=QTL;MHj>xQrxYI{*(#tqwMP6588 z_sklnxoknwcCj!~z;rp~3__kh5+%{9l8Y$Kow5LAsC$;-(Av9ub{EPc=KQwNvFh@y z{v(H2U%&Fxs$r78eU)QAY)uf)dTil6?>6h`AC8Ci=sem=|Qc>1btb5zEn`gl(2JW_W?F4|fX74&PM%UuBz z#n2OePOw{lLYe8LgiY|Fv0eBrTPzl)zCcfovroCVmYUX+tQitz$=HO;H@Gc<;eBPXrY{+%!^O0Q*~A#;qWHklJKm0*3T?G0Iv!@ z+f@d1D@r)X-|~{+uuDGfEKH5*T(I!yX))Pe2Oe0Q%au_O?1})-BU+C6B+lq$WV!Hu zRDLYWYyc*G>CMzER-5~3@K&3Dq zb|T5|g}+k}Q}WMvD{OuEPY~>eTT^c5U3J?4#wV;GQ8KtAAFp zF<4eoihPP?_&EkE;oFiO1zirrClrd;x>;QPkf$0((3B+DoQiB#{PmI?ia>)sGh2E9 z@6WT(Ld9}+Nz&^Z&A;jpAI*`4Y!eC&C}hXg%xIP|PEcq`MRv$K3zJf-XXy%%YV}8u z4wHsGwl9+Lb%Tq&l=xv~3y#6d%t6bLT1Damc3@oFluIZ2+Z}DE+U%l#PB5|+f5_4y zw{{Fkx(UsQaWn{43K(_S@WB&(cy8UO!H?gV`+LC6qnhT!ZAX-~*Vg>VLh#h4F zFxVe4GfFUNfgI}ORdC(AojwgEl=HE&3r-c)R29bUzvGBW?{WfZT*dKVg#ADFn@Xme z=eb5Q>U)IM3lme$3o+scu6;4>oEj8sl*(8x%c1D<31S=@ks_QW(|O>{J9NuuKJ9nM zydHC42$P@89ucyV7cdcP%0_lh@)yqHA=y;{l-A=DKolVcb5Is8_+#ouZin%08--e5 z7zBen____?n6L^UC5;!Gf0XIq~8^$6CLt zY}a<5R3-T+sXZ9`dt;$8wCe+xt7DXw0!FJFvGc~*l|wP~kchAQ*geVpTT{-_K-vd4 z;fjJ~B(Pjf$>cqNsicTPDyDNtQMR@{475u=lg}ik6lx+AeDpZ+sXBnN2uZe$f!#KL zee8+_D@}{?&uPZ6R{}}HHfeW0W;{7qunXB%i@*d9+kUus5}&j9BUB%F_#*D&$GAw# z?IxD;oTM`oclmwp6M>hJLPWYhc7@9EZOu~@*yN0#)*b`0cO(cI=6_Ke*ZeHd*{baW zw*8L(Z|q&#{rbtFMqVpFXNka{d8ecwdXoNqD1g%owzpM;7^?bsj&o=k90)M*G!}Jw4)pQ1`n~h7gDskJMMRf&b zwR9GvEifc(&uUg)jXS0>j5xyoWYF7A%T6~>!pp&P3_1)*p}%b0)+XoV7X8w#M|pQY zL)_1x#7#v>S@U1}KWkPlws7SuS4>{;`UY2r z(D-StE-STx<;N%ZT|XS|2B2WxUDE=;9r?Nr&FP<4r$Xc`+j(0;$LemFx?Q6OHuI{2 z%4;8}3Oy$OC6_ET{SxD1Fz4TM(}5()>x8iXVlK*^Unzz!pm8p&9fCiA5R(M_*dR%l zgT0kZoY(Ha)Jy55aK4rAz;gBA=}vWF0EmRA>aqeh)%BoWgZO`}!n|DTU{m-k8@Hyd z#oW2nhVZA6+v5Ybn`=0$2YkO?maRpq8uVkW;5C$$F^mp$z_|L0I6MOt1ix)Q#>fy8KZL~}6^rD!NzmeErT(?ixY-{s^SPs^ zj;zwzKrP-bO}ve2&!xlBrP{UqS?M^Zgrr`Av9>QCO|4>|D_-Fn+j?OC($<&Ztm6Cu zN~7;WqGkK2f2U+5gY^sr%gsacRpFQ|zt&AZl90s1{09&T-EkEKMsAf#4$aY^{4+9 z(Rxm$gxFC40RR9=L_t)C-PwitOaAV>(7r38GPO*(z%qGOtBQ~>Mi=tUs>y`Gipw=X z=Hee2Bf&|l&#^w^+r;E?okJ_{uE(zxn48h>VCl+g8d$Im2sm9r828|WfJt^(s=419 z{9CAVJDWEpJXxJGqAp_p8X)e@JNi-8c(Y{_b~nCXhp?yt@My(a!McJc{)WyA7Bgng zgsSk`j>)^){o2_L{QXnF*Tb!2X9}1v!e$BN|3dOk>FWmumpE*4)Qt9H?=<@TD3{(< zi6+7Lx{EmT<7rjA&(qGoV&L2#lj-fnCrH1RD3b)QlqRLy#{pY(vJCX#^Bd|$2g5r# zo%~|vxCaR_uc{!67A7uATRwJ`cm3PN?`t>m{dGz3w++>VTDsZUE8x2q8<@o-OqyFO5On^@4Q8hMobLjdV{YruJSsQ+ z4D)}^T8~%Z%<}+B6O_$SY0lwty?bzg0EQ=4CuA+?%{h}CapKS8hzy&zXPzs9u^ysG zI|}k8!H}a6z}||=<2W#G{NWVTMQ;-4xdByGqMIN)XKS+yM9Gt@}=-PR{xY? z24x;CN=}usT9x^2E&=_BwR37pUbhC9f-x15Zy59z2bhxS%~#v%%qtasCkNEIoq^Af z|D>)5ys(CEwNixL=2~t^{E*DFf+zO@eV^WgQ|6+TdOAM9Cmfa1m1ax$?G@{C{ww`+ zLU#Xt9Lnc|Vq{_+YRATSp&ZF8(6M+avnPd}@-PN^#%}}YH zG4~Vaf&Q!Lj}>DV;WUlbas@!+VDv05V8oq)3yFGo0UkT$cdKC#aS*4#u{av5@er@y z^2~QX|D`OzB@C~$P5@MVo94E@tGJSg8`HqQO|$!IIHs?7nio zRg&UfAtJeiabxBxd28#aB;(`KXjGPLx-eKSNd^$Y!EZFXY@{5IKHyEI*;b}!Diz}( zMzB5JtxU7Kb!?1{NOQ>OWsQvvf8W!U3nvQCfr0Ef8`6ZDw)1`F#Q?m=WrD3`O~1|q zq(S;i0aZOiF)kz9lgYye_{#nWUOElhY12TeVKD@b;j9i+x-6D`h5Q)%{v5axdUd)b zsSWm9b(%8l-7%JHU*$ouB~4y?f2`t4drXZ8mC2F=b3)OW)E`&bX=PxpPZaO#t%MN& z<+(BMa))O5z?XGO8vT?^4$p~O7{dtv=)$ICttiaK-Gvd8wcT)$8ESM6F_Uhx*!w{a zhPgk2?NM!ih8ocTn~C`LXZe@#RK4|=)C5Pf0(owV@Mq29#Bnlro+ta#^8Vm3@I2ft z@`(UY0i`4G*L$SrpjHO9347T#s|2Nb4oA&s%gXEupAj&L!-v!89fP%istYz}JY{R^ zzBNoYHnLz!smuR(BU>=}rN_I{bQ-2+enw#)m`-Hmep~&wYzOUDIE2LbMz-MCbDhWELn!W3Rg=iv)Lb$b$IlqL|BPW-sM5D6xEE^^*9f`An`Xt zCwnZ%>o%>5euw-4N}De%61<>vA;t)ZB2492O?NaEn7#Uws5*Ue9JGM^=5Zy&n zO#3Eu;yZKaslA90duHY>yjpMkUO{Mmst8}4AfiwCrUyK z)5Z^lm2C{*ZI8tmrT_%v7#v#0lbIDJSZEfgBj?PUlpz$3iAdf|k9i5ZN|Gt>!U{D# z{eC7Ev01*4w_Ih5Idje~Sb)cDq9*yDA|y9 zU`-4s9e_MG9>CqKaY0#?)9(=fC0{WCZ9`F+wvZd|5Y|>`X={5b75?E2@G?W;*M>#a z=hhhv;<|)5I~`FUPP4ZofuE$R>cgHZVW)hPvV5q^fsKl3KB9 zRLjeh$VPc(bnzdS+E)7^>0o#FVEkiyQU9mT>Ng3vHNh{2QEC=LqY0GDC$a1wyZfOqj+ z(VP1Iwh~0}h!R)e3qSYSw-=ljwPh)Q5G(r^D2#y@a)0Q*k{yUTFonr&NBofQ`aLM~ zgV)ia`w(sF8_>=nG2`>*qjQYc!oyEoMvJEDMY&jH$gS}0;I{b{gWyNe?&6${ch|$u z{_=TfvSV`eG__0}M=V1paM}xC#-4)sEtbecs#W9`*|Lrb*jkW`(&iNJ902;Qc$O>n zaUcY1GbpVm{SNI#)w1Zwn8CA5&lO0Zlqz_5``sAIzkk@wa3(dvycR!0H@~lu+UZa2 zE-WUHaS0`vm4k4N?~EoiuO`Aa@w8u6>?>B|aKP&FWzj5*_2^_+VfzqS3ApErk)W}` zc?f2vF`xPoR-^7VPF|-l=Cu`(ehrM3(J+y;B#ZSJ0BX^jNJzG&0M)k+&b zXS0ruArJ5wW&@APubZoD%HsQF&11ze`Ie@XE@h4$;38A}!ye2LkNEleEtV`?zkQ6U z;OZ}VCN;cww-NfN($0~N&%&nJo#OS>&x3zJ+iu3{Iy_xyeOg9d8Ng%iw1ak|jXpy= z`0-&YW$lmM=Nu@$@;NJ-3RA>5T%O1?zf{YkaUN~_;Y4(NL^d)9$&DB9w(e=Kem(iT z>-6hpVH*P;JjwE^e%3q@QOVPSr!xpg>3=PFe$sgYFeA~8$nOK(kX5!e#^-$2YmR%rQGPs@!OWB$%k(4P4RY6c-8MeC z=_X~lmF@#5#nvrYo4A%0JE=ci?i(>Z_vk%G2R9BC#nzN-AO9s|2p5kc$wy%y>L{S5D5d^(?{Va)Q* zi%yb>!oX?o40hkR9$pyVl{=DDR6$3zDFjbA7|I}n@s-H~Vs}jx{xsPI%6I#o_zF8A zt>9|kASq$!-1;mXe!j?mHb$rTxX4X#j-n~z`M7Y=fHHRjj#X+Gg81xinW+lpjm?E( zA>aaO@?B}ru!yT(Bmv5;$*{A+8%6BVzDWFv^$hSDs>)bD#{njlrojSfw%WJs`p29BKxv{zxz7CkjYm0o! zCXME5ZMT&AMOLoL&W&_xD!a$80c*p;3WuSMd;bz>KlP89NL0$x;vlF&$v1Aox>LOA zV*uph)x;eD@Dcu`hVG(6$wh5D`sUYfg^D6{9HY>gPet+tmzaZ@YL`IMo?PYE4}f{P zEXs{+5fbJT9dxbz_5#`o4_Jy0-SrH<>OsRNRy;?HcRgySXdu9wP>Qar(99;t#mQ00 zB?Q&WOA;oPpOgK;`Qm0sz5ba6;qe*r45pFrl{Mfr%!zY;_<9nx*}xcA%cOE(Le7~7 zd^toz23bJgv8PldKMc> znoz=wyZ}n^3sj0a=Pjfn3+ZhEEAO|4GY#ic@&w4)ay{wmSXaIK5v{Z$Is1a#moQ5% z=5UdG6T57LF`JtW@~I~Ord@p+)VUImefgh zA^g$bg(8LB%2+x%NHb{s!;1Q=oxz*nT2;Nd%pgF-J!0{F77+BgoOcFvx}sY$j^kKK`Z( zwWS*gQp3zTR&|Vi(cGZ%oYa6GZai&=m%b9g%hj*7Wv+J2jJ@eMZ7W1`TX&>lI3w9 zR>Swwmo|0_|IzyazJAg8qIcO^eLK~gpqeHCG0u99k1RJ*WY{@e0Zw{u7c-{2ok_3u zh@2%~UG2r3ew+uuASrh2Eu!LkEfMm;6?&JH`dFMXJ186Pum_-1C@vm9Pfwhgp9^sk zA+J5KY))2VFZ==Wa4}ZnX&WP8*d0-+tveZX=3nk9y`P+x&DA8X_F_0p`m@o5Adtk-J0Q1oNm4ew%O}zi&0DF^h zCgFvi(ob!BG4r|uJ89n0E)wUI)yBR`_{Lyqqyb*w3meOqP#6-3J6xLvm`7U09*1Nl zU*uyBzHwqp&NMSroRQ(`h=FHsTYCVnDvPN$m|DcgY~tkW0I=QYw&ZNQfMQSDssm zU_NNPHb@56*O+uyas*Au{CB*EUOQLo4;2Q_Ct)~KHbzlXu?K@4%3CK%8c0c0mhKX5 z8Gm-Nr7Wff8B}Y4srX#%L>vrTgP5+-*@Us0e3K(GAK|g|>fU0?Gns(L z1`UCo!ylc9qyr9ngwdp!=Yq~ql=)H?z3#;my1#f1ODxFF-0?FEme#XuIfB!Gw2Z*e zCD3}%VS{Bv$<&YOX(1lFlA17W^Z09@ z%3@DIu1yL%`>GI5=7}4K1e6uc3c~Dq>~ONiLXzg0uT4{iS>teA3YR{f$tiKKS~7q7 z*wu~C&6FX?8N@O{#$_~$T=acv>j_!(i6m{SShw2yeYGh`V@)KAEz{NZK0>P!T$QKQ z!in13_c6}4>jNh-7^lkCMZ5euvoK!sdd9*q`H_RAdB~|d-f_GyH`p4@? z*jaQ#fs!dGj8216P6N(W{^!121R2eG*AZGKJ7&uYLT_wvMdHkQGX8v!dEb#3wIoQ0 zn8v!F_yn#%jN)0ev#o4Hdyt*&Sd&6C%mXm!S|in#uBtsTQO!cwHtmbuNk%)OeJ22( zwAECOj9c2q`ezJRmzi1Yd@eqHI+yKX=|STz|6@`+(hR2;4Hq_My2+tjl7X*}0Pt8r z%nWrd^{w>6K)1$aH2!H0@;|R|eVE^i;YZFVv2^-D!(F9`A}!%=efX-;6m-#N2TnO_ z-4nTWI$%r8sHeJ2`x<8NYkdqj+pesB4SQs$VnpmuNyUuGwj9n|%~y6=fv&Es)e+QS zIGxhAWQgXlC;*>?zWN{SYf*w^qKq@qoRXOTSWYEkn~5q_t0gn%jJg3)+FCoFA62 zlWvmi5ry&8JH$URaLL!T#B;%QQdhAI&y%4;&rwiQy6h>Wxiq&vHk|c7gd#~l@~dM7 zG{!VAG1faGfOj$|XK5*UlSoB{5p5~sr|4ATEfG>V(|ElgOYnR zvH=tw^|Y;(TIVwMh&g7|!*kKQgl^`pi&U0|9Y|0nep#JF&x%V_$x>U|CV<=G1tS

Y078RBaWEIx}TGBnz>l4K#<6NxUqN4d6$oE$0!d6AdL^6 zqZW?BtL_a0weWGR8T)80r8r!N-krd7B2aaT^~%?W;^uKH-E)0A$BThe?pbPF&aRI3 z_YyRiqSNsMuUuP(hHss=Hb&C!R7>r32l~s$c3Q1RH|PNe0@V zI;=2g*q0t++5K&A70A9+$q{-!Im|zfi$%Ab3LF7xIKdcF2NbMyN17xw4R+bD@bdRf zB{41wLRm|PQ!5Fu>+Tm?U1vozTKW@+lXWV5hwhKSX97sAWro9-ukfkZ?ULBR4~(7{ zRcG3JZ)h@Q2sHTX#T4VT^kg7Pr8+wW78!~X3)GP9s6eL?@hgv?)mAeSJh`luNa9Mpcw|Y zBniq@Z$u|wdJyVI2*a)*Vos{Ny-V4!S)tt>gG-aO#`C_y^I5n-^D&CgG^y0Ln{hch zUk0!A*^!Ex`sP;U#q<{^a*})8p}olMarlrMdtMK_L1gHv$&_9kKp%?*1mDT@vV#jl#N%LblyHev+J z8=_;~W*4F>biPphq?OOu4wUMN1|oSB=Q+EEC_7PUBleDoDUHT+;J=b!|Fua~xE-=1 zkX%I2{y*)_KRc0tbxE#pY7DqlwC_fuhOQW*Q1URB?MsMrdbFdEUMa1KDGu8-Ptvqu)Y_PTyg9I$O zSF7LpW3z%6fGF|n3H-TgZ;oJ(SljRskeg9(p~0N8d8ri{gEgt7OwjtHwD+8WwmeC} zF}Ca&@9Wo5j-N^%rU1mxz{3Afvo~;a3zE}z&5;T zB}V~GI@fiL37~YAiD*B;x1#{y$G2zK^ztj>;k{$3HIT%6P6ntz#vv}lns94cTwC9! z-Eo~{gqmU*1D{NaYx5}csMz6DvO~aDJzxixZ=p;YTv;#}&qbFe9OwUS-xi0QCHG&}TzMVZ6CfF>R4rg(Ob!*`IOS&06-Br|O)A%)oq}6K&sP z@RLp~kKAi}ti{Gp_tG0Prvl+OrE+)9vPwHLjE7IwA$dY``lb2tsG;Z^26xkcWQsR8XP0*|KyXc@msN#5%4qK&;DwYMdL0ZhFhkv7>Ux2l5FHRn97W75&?Pm-DP;B{cR_m76!e zsV71l33n!j(r^K!2A~2gcLA*M8ihG{PuU*t`ogzUb$zN>^|6wQyz{!Z0#N6?09(5O zamIuW%9;(~HQ|p|nvI?-oX!i?;W72gvWXf_msNXcSZ+l`Eei`Git`=bNo}p0V{C}& zof-KXQRunvxw1HWtIk#VrC}`K!XHp=Q>UE!hBub9g14#yUjk6L2Xl#x@nU&Oj#Ov7 zR2zqxuU%>HdcE@g-aBI7BeigP#hsF67_vKCo3=2-%Xq@)2=Xr;;2UK0LgJ>2Zn@>1 zeWdsSty5XSPR z@!?__C*PRk?&VN?-0R>$7ALQrvz$09V;Fj$6Q4(tij~IRk|&=i`9vBmiX-b56|0rE zPv@dmWW%bD6IF2F=^01BCB1uILq19C{0J>eRlu_^DX$t&z5g~C27r@QNU-TVqh?r+ z^LbPca6l!*5VH%X|6<5;a7+TQTOc8FtYZCqQDXK7S@&mG$i9bBeoVS|Hcd`069At& zR+g{}_%xfYgDYQmn)QbbGGv7?@bF5;SmUzxnJIPP%K5Ya$wGLl>H!aYA2RS;w0Dr3iF z^MD*9I-H}ZH|^}M-XGX^n#oD)D)@eS)2WOh&vtDV7$uwJ`eeWE{fU}VHlVULF<)0u zNelpdR15!cSm5O*^EkmtkC+v^m6YeCe;!=*6GSrU%bEz{rM}hW=Q;g0u<{7D@SoZ4 zi*7@kOtSUfSaQ&6x52p*74o#4Hi1bAJ3M@{Y`TsXz_dSQ$@r&P%+RoX=`GhltEe;o zuZUF1WE8d%`Mo941Z$7=REASQm|WWN%*q9pqfH80*AU3?sy(=?-KX3#p2LL1D=-fq zXXiL;DZ&4A3UUgYK&jF4VRyMtnFVHqB0iy$0L-c-4{aQ_$5Wx<$i<}gBJi}n#N$Km z)iUc*m0L$fcnQ#cL-~k(MSn{`tZgZ5vTVKRGrV1evYPK5K*n#htFWJ0TJ|Mp{Os!| z;;68AlQLA$Y!S*dl;{x=@@`$b!BWGf)D&wpc**{#O(lUUK-A|fWLs>jW}&U}h!L&KP= zDTcb%c|7_D;CpsE<~U+)JrNAx&J)#s8$R$%uXylfj#sAi7SQ()u+u3H;S*D*3%4Ej{CE!t2@zgEU-aMKB{toL2WN@3tZzT>2o$Ge9;}B!@==LelCo(=P!FN2SU2pRz+O|`hww`DZ+@wm|6r%+9E?BegmA?sR&!y$~0>F2RA+J zL?%71?I=T|XWTq(3!%K^_5I$_(dwX?5(($=7d9{v{ zlvhKH9&8WtXVIh^BRX9sq3zEWGEj&i@pk&tP@|-@5`vpm zsUSc(d1T-4Knm=R zm4S2~8oRHPZsp`*{m}oolM>q1ERIoBX1?1VfJO11y>g~?W@{T!>hLv><!h06^D`nUuy1X&IL`k= z5C}uoQ=-vE=xq(EP|F78q$HYEf>lz!R&jvy%@3!qg_Nr<1D-Iv)S0yKQ^#sQ7`=kzqUeb~A z{G{En1ShxahRE}oc0{lVR{JUyzd}Y|jvK0MvnDi-!!UerpJG{Wfk>o1YoC@hBlrhu zYMe$#)?KqqxwoT>v>6S=54macVU(O1O<8eBse)qb9^TXeO&&&sI6~VJ@+mdmB2(Ga zrSjOpUe5!SV`XmpxLYZiYTV`;Phf69aV+8t4ikeI1IfXVkx6&;Hg*N#qMAUIaGcp~cb}@g7G&H{IbeyxF%GM3!sDm|mp&V*p77L4-O2e5t*tLcx+uy98 zDY*_Oq&`FXH_O)JR1v-smU`{0QJ`YhtD3(AYV(k zPVN_-YtqU4@eDSp?fGYJGIK9)vni*uRQlGdq4z{!ju4ns9Q#2D%UPEC+zggZhD%yW z0KxN4Omuy!2`~rWN)|@8$ksY>(9n(+ROXWC=%C$r6u#PJ(H!LR6v+2t0UPx-3xmID zxD8(`Bk?Gsvq66D&M14UHq-luPPp!wp%L`LGz#JSdF)FR_^KM)NqZ!9l>mWvzhf%< zCVvj?vzPK-7&Ep<3N0TDsyk*I6Yba}l^4J;mBO{fuo!?6casLDQ?_z`yq3afxgA*> zljm!ybl`%!&%h(f&HqrJMbGh3 z1sdNuLzZ0ymmE%)axD$>Hj{yjU%1i|IrMFG2=UJoGlwbPUvoHg(+Rfq?YejC+s2X~ zlshR4FelX$H&-0?0%ext5YWCup>==*`^dI9QRg$w$S9y1S#DQP9r5etdtp|P>#06B z-WWRvb!szA&T;I0HHkkiH$|4^$dY)W-?*t&QjPazb>0d_+3JF~K(ADIWzcYbdH@6c z1>C61&sm;5hg$moCX7s=ash}BtVuMyG_96VL;k!4XQh}R?@2vVKvla6CN_|a*fW04 zAQVX##0hg&QsXGNuFdi+Ytd-8Wto&qSoV{tDPr#2J$8DMv*Z5eWyH@~Ds)Js$MFKW zYKA*6(BPHG@CR3u3C$exn!oT!!-dkG`E`6sL6Ch2@%F8l|ci@iI=C z`@zOoup|`DtC7ht|F&vxZ$BXq;gefh0a#c2BSt8X(E5E>NJXNl39xaeo zT&XCl|5R?z+%{9aoODu6aa64(^0xxK9ne^9)5Z4w_nJjHi+4WQwXEl`om17pBZAp2 zr#4*18OP>t4)X}KpOLMUHKY*OfxzmC1WvWopGb7 z^zG@rYUGVuLZHSLKH|UPTuo3bg%?HbSsjgJ<@Rh%;4?=%?f-Q1r4}Nrx6X~A&kmW$ zYrYQMHAU?U$mGb0m)*hrb8~{LwiBNDMDxkX4`LxB%R4(VuMCvuksl+Rb$%MVsqO;j z!^_Y*cFL#-A3Bq2Kd#YX)7VLGK@vKBIMy?Xj?$FcRy5;` z>6$hGW!7_Uk@E!$wmm9>WID)PzSxs{k~K0-)w;{@$(zulM46C-1E;u$5XNfjO0N@APvqG&dUybc}GV=~PoF<+} z?mt(qqD;yv+ZwLFy09Nih#i^vM*;DVwh9wGU}X5p? z2&{&Bih4pqnlE{+*gBmzY9ok>7#MHsAaFJc6cE{cSrbDAeYjLTinK((qEDcvBtw@M z1E_AB;FrlU>K=f)5(!G(J2Km$ugAT)pC-p(fQz2Hy=v*vRp_;vCxvqk|$O{&g&oz|Lb z806c*3Eg9dW)7K5WYj=FCxrM>(?&Yz?qB*s}FtTF>KJYC!2(E{Y-h$(;_Z8b=id!Nw>&~d?)aQV%0+PigI z#k}Qzy);7N=uPC7Hla|mBcscz*S5$!I6c{8dVZebDYGZaw_d9#&P4Hjq9sW&T0gK{L-%V zP(Ugfv7f_KLWk~GnCf-!fe-p3BvBgcUtQ)fpLU?s=Bx<4YrPpfZ2$#FW;s|m&R zl4#8NntE%Vym-A>eit>+h(SW~#1&QeHnOFeKeeLs6Y9^e=st;+434!9VeWBNagaGO zob_#bdAG{7-pWOm{>mf9IhLjeizSYB94vB?$y&XW=hO55aY}a(3F(pl0S9Gr|A#kQ z0(N@oJ7E1mqZ9M=O3)_$C}=HRV=O?3X3YcHsin}K1&rE0zjO`Nk&QnGh{~SiZf^_< zRcOAaPe&u3dvhcm$)tccz4!kC`7<5azUy-y04W1#^}3OFALkfE30NeGmYm)0EoViq z8cxruifni;7SYY@L&o(vUd!5=sF(DLfFb9Dvf^Rrh?FgYUK$TSm{0Nbw8?jNrjBGS zf4x^h$E#)SFl5*S!`Uc~#Q+ zdWgjO;rL7-mV;hF`x({9;CdZH6+i zyUs`gO@S+xW*(gNplwsQeQZ7&E@-j^nHO~N|Ga(GX2G+^+u@xF_Y)MrZql`A9+_TX zVyGcS-Rcf|*Fm}=yNuf$T&-G{Ai!$M9Avc2iHjS-Jxl5B`m`jX_n(|@Ua!h}z--qJ z!@Rlsh;Q*ZWV;#_vZuF+g0V;*gQuSPoF`AW~QIk`*`PDy7XZCoxD%!`nYhjT+<=Bio=H2!sM+U5Q1Jv6<+|%Ape2f*1RmU39Ww;b!jx$Lqyu7LQY#eb)`n!G=VS~; zmh~r&=*)ziSgYiom_+ylW=2@z$H3o+uFNN-A*HQd%5!Ka%#>mp%K=Y8{kIUWuml_f z?y1ZGR#fbVQi&Es>~VzU#|#7V;oji_)(ZcaTigD)OdCc|U{-4tSm(u)%P6N51y80Y z(q;Gnalr+9M;I<-2hlEQ1{dbZnO&VRg*NadZ{~hkQ(U_MCPhNCd1qpd)fqW|Ldjph zO0hB8zUu=0)MSn6{i6bQ`!ML3Vg@UXhq>p)5nkf7`MrS&W1UiV7b zcwNr=Td;mjMgW8RGl`9)lhH7sCz@J`4d=_*vHW23p_J(hJQ{3fRGQ$gLQfS(3Oqr# z(7y6uzrX&h9w3UK6GPY)X+RmrBtyB|N62IKTU~{X$>TA}fNg6v#?G3n=chAP+GJA4-uhu~9S|~pD3AARe zeX^GC*fk`Xa+Wbn(YY@>2RpYF`c1Jt9N+N@s|Q^TFiL$1stJO-Pw-}LRwU@7d}lWv zm~tEEEFmX2aokV3Dz56I{F565ChuzaJWM>v7j0R!A$c%T5u29y4g&v4gYw8#9J<9+ zPWB{OsMtL}q^V2@v#ryKsYdgHP}taNb2KU9%_Qv$GL;pF2s|oiTYKz5X7me4BcSB~ zqc0#==o7!}I@sf;7QDlkQH!b3&6oMSk%hyqI$4T3TT_~uY2t%0sNbxC5jbp`i$_G~ z$CCrXzQXnWgiDs1{J2U5PApEzo<+~a|9R@TD?zYZN|Vr$5v|M^wpJ!?xIZTEB?vt^ z5qk~C5WpUL0UMj~xd$0+SvG;im4|^>@wkCW`WPzX>dSfXw1d*eAu-Mz$Ffvk%cp?n zr&_!`Cc~hAZLSl?E6gjIe?6`;FfQf$)Ce88(?9(Kk-ZrS`~!+P`2x{0GIajf3A!Ki z2P6E_S$I2G)=_^p~Wjkg>aj(6ss1T!!UwT-%4*`ed|VBx|N$3oGk0TT8D zKLrqr9o{Y~{CX?}IKF+$Ujp@e!sEx^sI1E=Hh3xj&fU2`4TY#=Z#AEH^o8o9X}7*R zbT=!k7B;Nw6CSr=KH`nwFqA=TCGNTcw4Q%>8vSYq!qHcm?y8enSorOgPdT>{Az<;O z>^$V>2x%6Ja{x=K=f^C8BV33sVlo?EFXRch>5V9^t~$zsAhjFgyAC;8jGx!fMr@A* z!1YYZ7iN=EyK^J`B2=s$t(BFFYrXLz<)0%yg|9>xa0UvTmWRfrk{41d^vsU&&=yK~ zt88Y9RpA}}5Pi}cZ?tT~cL%(5=Awae=b?Ft?n~Yabo)5*EiNXjiP5^r-~0$fEV&qE z`R ze*-^h;EZTDDC*^{wz;XU+%Smqt3D_l@EJ{pyiQa*L2l}{BV)Ji5Kjjz+)QiOt?_Hq z>%;O&N|8A&oQ;clK4C+bB4Munj}Sy4O%Wn!`=Xf6P{$$uSnOssIk~F-vxNusa+ZPesuE3=v%@G&?v>lU(OB#hLxN}j?||vxL@7Eb zG`TIDml+LUS`Ursg4Nz8O2Ep|?eN<`>l13y+&X8BWwS>SSg_}+j(V6*cLQh%?|v$e z!fF7`0_&AdV~ip!1I2Ku~33I^l@%{ z1!9JI*^s1-T7LT^*dwqhbN#|T2Y}L+Z@C%Iid+_(Fd)Waetn%cp3z{~ z|1o}7*Pt}lN9cE}2lQPD+#2St2P z@JSVJbR~t7_U6d0wZ5<;XzJ6@q1>1Wjs-hC*DA+Ov&5mrMXJuMsfWy7iDEUzw3)6> z)-z4qDxJ;dO=H5^Efs7#0b_6G`<{TeRIyr2pvvF~-qZk1w;Cij3ztupMhSlxaJ}R( z(IF6?n>CohXKHvyDd;h!*-*~uU}%6%g8bZ^Vk+a(-L`7(Y4v0>L3sjIz$Y0Q?vAS% zb7z6_b{5<0u&iYVpvGCELGb_&-&a z<3j3Lzhwfy$^NLLAEr-#vC?!*TKVJ=tKY5CAC6%m$Prr$sJUT&e6$v+v$j<@e14YG70LJs5hQK*r?YZ2sp|_ghj0V;HeT>An~3=~#;e+6GZ^c9S7I z8AAiwTo&feeIDdJ#TaGT38vUf+fO!|Fn*M^25m9m2v6CtMeqzVV+c}kYWLbc&Y}`N z8(iW;yW%B3pnx|$o-LeZu3w|H_?=wQ|2j%o@&}aDfzA3$uM<$tv}M3&G8~I4qSuNa z&U@X8aX{cbr2^)~CBc?8d2(s!eM#X`jh%ZAAL#vn-7ySOIhz3&@R(un^cP5Fj0$S9 zWykFK(Gk(<$VC`uVPu!)E}f5!PJK)apN$-n5o&8)6kwc_hNFS;%Bp9mE}5jVza%jV z;266{Led(QB?nK6tW%tL?ulndc(^Zwkk$LIxd)7)%uRCEmP~W2)*hpx)%o1jH-7j5 zm`0)%7h3kYof)7u8K8FpIpX0^oVW@6pqVt**j19$d2b8Jej<%XYIa*nl6a5*9BSk( zn^eQ981=4;0#yFAc!sJdS}1$;bR5U$+mStq3wa5Cr*A?C;pijXCywer(6vaYl(CwY zppuCE7^bs#aQ`*7upA-ZtaP9szd3sX*wbcbPG{x7G9gx?y%Y3Du5zx0wgmU&r=D1Y zksN1gK_fMXb*S(Lu7EkBg2j>1se9J+_joECgSp}EZ5PE%toC%znjau}7|9EBbi-h8 z$J!!iF_POh61CT!6kHZ~Ca?i{rKrrS|4vJD{juMQw`W4F^@o5`CB2d8$^j+O^`3?| z3$peyfAz`~j8NNx&)Eub)n~rS8UY`PO5pmSE+giu$y}53h>Ln;+frB-MGMj%8LdEY zq)Q9YK4krZ#tJ-5I|2_W3`R(*-%w7zF0b)&vhv)dY0dh09%U0%SC&Fg0O?ZXcyeL4 zR%bJtNn*c|r`b<)E@?>h4Q{()UCa%x&EOX>4RdK~6J4f-v0TegvA&{sCBc+UDh5EZ zEpxW!=DpJaU|ZPClu~UHV`o_`TI0F8W40c=72TrN#}Fg{?Kl~$AxSYOnyuAt3oS#N zS)Dcl*9EbxYIIBZJI><%xi;o#GVP&|CzE#&U8Jb`_}JGS&tjDtM}Gi|LtrOmO4ye~ z#Wb(%vIfbu3xajDN#so5)ZxwPzqiX-nQvgbU7De0<>$K3PIAcOUGo7%Id}?0=NC3A zb*wwRdmnr9QeiH%>B58CeMC1y+4!uP9bDmv)HfNG=;_p)H`JcHnypZP$Acy!yL^=x zvSbFgxbzsK6lXb!grjbw47|>wr&qJZJuEvFTtEtEY-%;nGb1ZNoyC)wL)03^3Y$VmXSOw$LVYC<0Y*tr!v&ADQ8Vb( zk*>Ixi6?9Ht4AAj5y&Qt#wqI>Yx~?zxU64r-Doi2nS3Jv?;vK19~!s()E!}&c!;e zETy}Y4M)Cv=w#2tUoeP~O$$!>4{KPE#YelJp%qMN$d5o1zxd}s&73tFPv7?E%i3en zWwO_!1IWgE6(3S&uEA*zTQ1W^>UlR@R~Ox~b=U*Gm3PkMH+?Zb4CWZw6Hb=9f2LS+ zXrV90r5xJnq|Dmt(NCsNNXR&o_Jp1Ov}6|NF8X?N%8Y9_AV*XdFPzgevU#G~Orb%j z>dF2=$T}GBYN+|*B*!AmTYC5NH`?{mgBk8uU27X3Nuxp_`(J!HIzv34+pm@OBqLTuHDEURhB!`th~?$V{F%+$ ztPpvO!}DxgzweXr9DWriK~tq(IDYFKZj4#H-DjLtIg&KhPNj%2CZtUT72Pn(>|n-} zQYVL#n@FONfoYOdX@V+-z#G7uhR{bfN#8PQRwhd-*MrC3I6vQV3lF+CDelz4uV^n124Wocx7kF)o0|hM0BUCR_8Q;Q-cUOPd zo{>}J;F(Z^j6gm5uHUJVQK|x}zL^Da=)ToE=2SUXqe7rqv? z_LM9k7zeT9XBR5B7OsT)Ve_&BFG+k*$C^+VA_qR}B|hP-fHk*1O=6t&30y65O4{W; zKy;pz-t2911#B^u9NE9t`eXq!@-UHvZ9kLXt6e(7eE^fX4eftbIN7TL;mw?ll)Oim zIYWEH7FN02GYy;DflWQ9=@6jXx=AAD6+I=Y;oS(qPW~`$*E^4;&swecFNL2hhjRdN zp^*4%1YPn#nWEXLGf2~9658qVB3b^*ftO>uuouR67jxRNpen73WNPPM0rFY3(+@Fh zC=ZLvYqQBqmMH2K4ZxeCv+qV>Fh(DLngqCP58p64s3nUlK-|8^>7 zEA1W;_3DFi{FzX5U>gOXQLJy!P%8F->CoY|3kGH3r0BLUPm^GpyvSF^C z>XLj<&{%b#e7m}munI5I3xBBHaaI{Fy^3E4;)y{|_H(^c>&RTNy18UILA8c?DEu+i zDE2E`wD~y59tmJFF?(<{qva=noGVSA{PVUj+tglB0*s0+K@~(AdUUbv6I7;lK=sTo zM334Ef1ZVFF{g`2p2RhkBD1-tU!M|YJuh{j-($OH`7GOrDazHG3T5QM6RF$!9whXP zJhFIco{lypoi*JW{KhJfK?`AZZ8lN?WX1^)u?L{Gm`IAzCYVj0ru4iWTgvIq%cAt- zE55>8%TPddbL1gAYBr;ep5|>YqS0%=tSlw(x}Ma=8ySU<#bzd8FH~{qI~$6_3&vhk z9(&n@lr_vv^yCJ-2i7KVZN$f!K_uv43nTLh-&7Fgw}}tVD906zxlc31N%ljXP_8Fgjin{$#gp=$45MweE!txAUuUsA&_*$b%8>YdY zwy0yQtBqnJ9ZBZb_Pi`WV~)Gv7Qzgxb4)h|{3Jug=8-%nZPys*y^Goa8t>7kBIYZs zu2u!&JmTpAlk3n+k`ryWjVN1BFD6N45@(uuxlH}@XuR{((m|r9i*qh-D534oA!>c) z9JV|w-8oEI6o2-*NqlrbjBqPYIEm>~nZ+TOE_XE$Kq*X}dR;g=N#`@4;Y+&PUeQgk z=QaJ5VsVcz>VAqcUL$znaZD2Jg*5PVwxw{l?sMXI6Z6n9nW|~0TBN)hOBv$iczHI8 zfdG*b$=5mzxV^nZJ|{eBbN;MLb@Zy70(aO_1)q97M&bxV&Y$nE(umId6izj=I=Kti zIK>}w3OE^b%~rc2C!Uw<#je`Bo+9Bxw|mjvz>(^^y%|-`LrqUvXTdUkw+8g`^kLcA z&9dFN3M+(3Z^+))@e4|AVc1o0r+^CMrz=^QJ~!hWU8qcnTE(Tm95QLKhX{X<9IklB z?i%4$oniDCj9Q(doDNcIqRC-vsJdfs}I=E0mG~O8%|FfAklp zbQA}ymZA1(_L0+AOYFQG#`CHq?~Q3D}>F}m$A{_ zhZ7kqyTnRdgZj(-u39`AelIEIe4ot@)Gb zm-CR`OrihQ?D$2T({QCameU=guJX?JRfU=+BT*=veyGN@AjZO)dyRJhKN1+X5oEKfvy7%Q38? z&&X|^Wrj7^@Ws+eA5ZqYYfp!SLsj^XRE8zzk6?tlM#1uzng3y8r3k`eUtz%!bmGTA zFSBlFwknA)@d0v~9Zs|&;*X%}Y@!ix=IOJ?RragQh(7|e&Pn)U)~x9~s6Hz5$Ywd% z!z!Iu9hA6crM5ZC@jU24QPEd=8&bc<7l}-1ugGH@r}qaO5uA6W*zY=D?36j^s~2%V zLQ5*2*euj#->=wMi?QTIK0l^gEBJ9p4yGNwFw=kh$ye(!-UsS@OTW9MaF^l$g z;Diyu)Fup=EnDaOVDe&KQO+@B_~>TcHH47*{P zHT`ExqBNzWJ)y~ioPX*Sww?4&BcwJY9#g6_Z`ch!0A2X9c28+Y_Yg4gv6;z>K_z*$ zZ;?Kwf7o;>ny)8)L$J{9Pk;i;{m-B27fR)CpwifKDCRa)4RCIs9Wq%g;dEeOx9MOA z7L;V(4HV-HImPSc=ANUOuxTXQlNKSII$mSrL=LtS>eNH9)m?(W_yRafYN?n{b@H5b z0(sRz^z_(!)x?(s5|u{f)!JzE(YXd?72eTnuB0KRV#JTx8EODFgGN?z(NqEL)5RNpm|a&Rsh49dCKv`bOh|M zP@_FX^|HY>xv{Nzn*oVipdZAvb&sl6u$6ZstppM%r*ajvOn<(X-m^pDU(ZvGd{9j` zFfk7~2f}@T$p8aP|Hzf_l-FqFYlQ~x{iL#9LAhgMt|!_l+rm=T`VCyi~*^ z=P7?WlUazYvVn~+L&=N^vLxi;kaXVBm6vc`00O9VyZ8dKT7@FNL(-moY|o}xlL~20 z6?sAny}uxnkmi>w=Hgk3$}e__`;Kl(Slb| zsRAZ6;#A@k8{g;iPt-VKsg<-WQe%OpH1cGqRXO-#R{R%3b*@8Ol@h^Av2YtS+yUp4 z9m_(8#SIDgK0=u7m;-d3Dtj{B1new%fhYc!Y8)@2YmMeSGuk>W+uqpEED11ps`O!W zS)7X{b5UfhMpS@c$_+sxa+)K-lD|HQ7P5QtERW>uf3QTL377gXL$;v?~WO1qd}A%$)JjI(PYB zRFnKVq3J*IYB04b_qW$NtI8+~#E@r+7q8@m>LBdquDjanWb7Hpe%TM`x@+H-R0Pk~?BQJ9*ed_&&AP z&Ns~)oe<+E7FQww&iiKB4$-nZm6nl)GDxIjj2sclwR;js%d|1d06ez9P^oTT@GH_`O?o8@gCV4^y8iBoH-n<|6`2_vwCaJregqSfC<(A1zX-UW!UQ`mAhb+^LNPr`M zo;`6Bwj4Gx_I)bmDqtdL`LymABRO4=A_R-`iN37@$SoVz4 z2f&E~`h37lRTf{eyno6fYeOd)mbtV^u-ii(n!Q5l$|ktQ6Kox=boP&2Cv2iT$d`s1 zRCj@#gEf5Lvi(KJpZ0n1%?7HTaxJDH?#WTnLs{vd1+7yIFXby+UCP@AKmFrVln~qJ zEtAT=^)R9S<0;5DG^~QB9zVnE?;GJk$YUEUyl$9jQjjW*Nh0A05Ze3WP&meup z)V~==Ztq$51PD&~aNC7duD6Ul_Xum*x;rDA!-pq^(wNCygkqs-EG*7qe~M6`vo^AS zn%3DhI{SD-nXopS0QFD)@-4OLZs>(%{-R7LKMHTc45~d>bKDgbvrwXZU5^<$`?1gb zA&9PzkJUiO9!EEpdbML)5~Q^O#6bt27QlWeEot|+j2g#~%!6lRUw^TtjEmU%QrdBW zneV$uNk1{9^JUswWrIs>iPSm+z@fQ<6rU4z9*}pc9&lWQe(K(CgRJ10mVsvpOL!Jf zCF`QOiFL{Y5=8*b=h_Xf1rlqV-Ip-^1G_W8+(z%?UiP|ZeP8~)o$Zg3`VtdJO_()s zyMuX*VH3+HDf|Yu73lc%qgVv0ieJ{p33cIV9q_`Wy#y~&?oUsez+z<53<9n&oGZ^) zFs^`6j%KLA17h>k?ntywZZ}Ms)j;W{&Stifs*Hh5>@hgf6gr*;JExf{PE7DCKoRp3TA0p_kyiX-uvyU$I~Mz;D(qa0?^UI8x^QQ zhIu%;@{xkL*oOVZ`=pp9PQu~*ACQlgTx&{WQuq;O7&ez*^YOVDC>y+YUizvl4otRa z<@pZC@w|m9((22ZZ>uX(r74UTR`xTp&oK+^0>IbxeTzcLMZQCduzn;YJf8nght4uV z;bfe@=Z!_9K`S(UC~qM+qO$3ij>KCCsAfLPK^<2;Udol+>>}ht*E=Bh2Tx>oItDKJ z>HKDiXmwsd;{(nsq8e#9cBeEE2$JqO`n@jGL7^DIh2Jy1vYAj!j?=*_rt0@CuEuh~ zHKqCbT9$8h3#>G|<~Fsm2E=%M_i}@I%qb#WjE0jxAs4%kEjM`X8W{4@fv>egE zcP@ zKfo8we)aHD2`rBDi-jDl@BL%D3DjvUHK+pM0pCYJJ->L;N3%!yg9u`wEaB>5By5z! zFxt*lZg672L`bc{ub(w;Hh)B44=jE%A_!&h1(FAB$CCbdBQO(a72DyWLEQAfZ*?mE zKCYb3y>-_*wko-YOc${I!SVA^y3*^Q=q!OTDrqqp&n-%$QK!m`Imc>)&+i$*aj8^to#X`Xcy(85r);~b;O)dW)>NB(V0 zO>!tsoE4wCcraD)$1w4nUvo}!_T!u$a(Sr~Cw-lfihve}&4y0Ww)c#DHkTQ&+q!%%orDGP)(E-IY#c0;gHL3MG+j5kV`QG~q=i^V! zwFAU>wmscdl07Z?J=H5lfD*}`gLj6ZJ_z_8XA5_C#&&t*Pvk`pK&R}5HJ)B=mqgI_ z?@Y?g+cw2bS8u*KX}h3d;i+bLT}_VWI_=3nO&pH>Nx~&YORtphZruT05G2f@GJHOm ziqC|#Cf|H(vgWhNklwTbjq+MLHP6RMrJa+a?!Jk^q52pz+n579>5xEdu0;5~Zng_K^CdY;ES7rt=fqbZQYwND-&XU?>0|_nk7l z7bp9KM)Ua#;>@0;+~|}qjMDyCf4D;FkE?L;;J~#6I~)Ll?zUG#d099!$+`k6Om zns3v$L$vlyO`KjvKjdAJC&S6Bcl$0Na zzq1Mp^U$HvK(PSgJIe@0owUNc$eT~Gtv%!d*<80H0huTzZZ&p3FaA7JiZBMl;$Yl8 zjR+*^LqI|^aV>VfB-2umAu<54o3J4GVplIP57&J28^X=>E^&_A~B|wPE(mSDIO8w^4&g{QTbWc{H#- zm4dgU-O_)AqtG}xobG`EN6+(-d{n>>0{Falivo-__V<7}P@q9d)UKCG5c4jE&P$NT zG!8&~Da&Mfc51>pLQ_IMdqHk6BSTi>2b_HfxjzpsuNTbD!mGE?arOxNgxB=~jskg<`j$I4B(#w@KjXAWum`)c1(Oe5;))l@28_xT<`ZhzeEUb7Mi` zOIA*htfas7!RDnUHAVS~)>!(7npA_Lk#vv|_1bMZ;i8)apR!JYiQklD$@E*`y(R^= zT7fONdpt)ru$~tH%!$8tP-%0me=x?5a}(Mapf~`+1Zfk2=eXDI$TdL5AGpr!SVSqxw@(zx?QgYUO4A`9gH)B*audGkh%y&xdt8@gYQOdT`NN*K!TX?gjMt)W$hc0$#+qVHG zFCbkIrf_v~cm-3y5|r-RHtmv@!t-f^PA2H|1CS9;wTh$_Iy&Y3Hcn_+?VhOlj|Eik zS#_~8?8Gp{IhiR|nOI}%lJwwv(*p^;Zpg#=aLe*$pv$W~RD#{uZt%xVPAp>=XA z{<}6AYQ(lNmLM=GK-jm*uyO9@7ukv-QG4#!{I=nl?UDU^Ur+JR&hT!?hhyA5E@??l;N)FZfn}3y)UY??uW5g8q%Q}dJ@^Xa$!b^lGB5Ii zQ=ejf$WW9=5L&u^hqt8&kctThM0)iT>W8OCy24kXl8C1h)ba9w(Z1L0SNnMgEqSgN z-^>O$Glz|IWd9u_1%Qo@Z*PhWq}XIQ+n#fI7rVW(79eH>4%qJ}?;#Gm&m< zYPxyKBbn!=b>=?`P(RJBenfm3!SVA}Ys1iVArW>G4(fMX^5SIHdoJly=FnLL>An_x z0cw8EO}#IM%ci>V`KZ~}4_J*}M_WrCD}5}k4^)<0QIK~FQI-N`*~UJNx!-A4d#vQ3 zhdRmKat{67^4)nUNf7wFEkWIVR}b;ih~bLR=1sC83E zmh|kMYP6JQjPMzL39fJ$;oO!e`}P8m!{uWrEVcdu;Vph`6F3eOOuPl+zzf}16LH5;kr znMAfSS~H~@qgZuCVjUZa?WrJf5GCW=A^Qc019wSab<-2!IfiK2HY~uHocWxQdu%)9 zh^)$a5w6O}uXLw{< zgC20!Z|&$Bh4J@~l`3<)u##yoKCStxZKGqw#$EZU;7ROgr!5X}OW?1;DtF{%W|Y|^ zRr@DGDNh7Hb~fMxOCUl_`wX2K?adFFOx^><9e?HzFZ>8|R4X3if4cDd$0DaB{02$^ zlYM(I+;BBTfKrF5?!B{>4QFW1{N#KdJAqSoc-{Vx+3WHUeo}VQn7lVV5w0)hp(o6U z`^Oov;Ncd7MCQzGbL!f@A2%6j9bbr)Uf}hLi8Z8WCSf{$@KZYa4_}r$mh-Fe@%E!% z+-_nLxWim6imsQ5A`BUu%M8>Z2sIMZ-r5aAWTB3^Y!`HY;2Zgy7d;Z*T(N(Boj!jler_>w9UUS0s}~4 zPUG}4K8`W(>{^#LUZkH%w{3l$4|h3{`N=;z=!l`=J-lK^@RjVlAcd!`6?Pe-;!Rb6 zaM4pJ$g?gzSZ?+A6{wsPmvyyV_d!UfJ66|H+EIpr6MCBHB#Q?e{Z@^P_~k|zM`W^^ z<2lmDs-0>)X1hT9{n|N>5JZ<&4xD$HZ5IjP4=zCZLqNyc!$^4d$dU#devyI3{Rs=z zx(HGUQ-QF*tHuY2Q!KL2e@`^BY`IK&IHEc|0`xm7L2Q+dtI6Y+0MM5%>2JM$_GH51 z^}Q^46+rT8>W(6%4G-%T_gfS_JdsShi4V5IYCqvyR9_-DCDy{Cf-|w$IdD49EuRkLG^P=S-S9O)P_7Z5^ri9za>~cP+)U^M zqSdGx9Yu~O&thh4bmtuid7*Y)*I^)HBOFB{$@qw*Vt%%(M-;W9$k#VZ8=?IWo z)pgqX5EfSIXZ@|yC1=)KSW6Op@4U8jfr0?m=w%l8%A6!dgB9MXR&CU(;O+@q;dM%v zzLseA#-0}vL7c<_pZk~`DH9|@4FaBIS&?&j3x<Pb&vbjzT1FYbBbG$s-e?q)sr zYb?NRE*5qIH42l4x4!3PuV^Ug9orkies6Ztf+8zcOARga5zyUk>f0ogrPMKQL1LT2 zf*2r)deIA5l5I&9N0+Yl!W7=G9klsVE%!(}iQTJ@mApy~YoXf_j@$^yWDJ}o#5$%^ zAuejXs;{irX>D(QG27kkw_DQ#`@vE2Zf()*&Fr>(Mq)=asOjOX)G$T(8<{+ zCQ{9B!P;--bF(DlPrQ_I3v6HH5eU6&y{TcJTQu8iA5#K%)iH)d29}~+Uw`zg+cI-l z7LmL$-mH&=JlOdDsQy z?^(=$E7OLNU8^KKS?O}KhG&o*uTWP99yBWtuB{^qX$eeMH=dWCw;P89c=No@YXd(2 zG0#Wr4>jT)z4VqceP`wM6C@AA{U6k&rwmlNl%S;p^_&HW@QA7mn>d^*XH3PEqwf#+ z503kAO0DfUm2CLL6KbeL%P@>>v`9wSTV6_eaW?Vv*h(#hLC zBTko(Cs#Z`55k=_s+dmp6(=N=nQ~3~GiN5*V`H>zy|!#yXRV?CJ~cejNKSNVV$z*p znstZg`?{V;*&hZ6>Owu>ielxtR<%|`E#96L4Sg%aXIgI!()E=;)H% zoc1RUEP*krMp`bIu8GBId-?N+L~nh*CDxTahSzy;YV5y)WkZ`@Tk&YP%he?3=@#Ko zz8p8&s4&BInZX_Etet=_QvQJ1&Z&d@Rd#1HZU5cvxJ9Y}ShQfs(Atxn@+C%H`+&co z(e&kqmrFnGR=$e*8x2vMLk|WFO{07T#VoxNe^wgW&}ZV(5yxby+-VrYBmB?dxbZeh zOOBHvC#EI0hhR!p&cEq$T>Zw8uK@8}b%korIsy;fYqeXSt3<;(d zKTZ{`LBU;E-n*~fN`40L`3Jb&@_V5xX6L;_x&%M;wDZ&2mJ?9h z@>CAg(1OT-RRqkdfH80s#a<4}Cyt(%tW`rfm;OD`^)!WXH_cjt^Mq zbl8ipJHM(z`b5>fmp&0dYJ2>N98BvuEBmn6F0J4NnahnO26Y*)%a-B@3~diFj`s&3 z`7O5~AoxXhM14htDG0UX*^2|qbrANQz5sn}j}8lm9nbv5ogPt>og7;;;(s#fd4{?% zdESQ41Lo$kR^fn|IdaAy%%9sY=J=bDjbez&SWal#wXQWLBJzuOj!1=6UdZmLnP=;=*q@`{o;(#RD(+Qla)ADfOvT7w(5H- zts_pNt@g*bn5r-`4-ZopuC*P>+`>bL3>s|-$yjIXK}f&Kvr|2@6jAgsxB0-nlTrA)dLD!C`C zJK|(aUijkz6MGi~bhZ>uq!5ZD3SbRiN^tygE)V!~YF@Kc(m*g3@2tWLNs#Qg&xEH; zL~tp$saEOyj!posnMjLA!ZeL%O><&lR>cz(=!K^V!?0n5cD4$#ci7sY_x7q}fKk}| zk>ptQVzM0VU*4>PKRw7FF=3E)9fTyBbGI4g1(3uOLNQw?tJ943cy za(K_a=5ZOZKM=ki{s9es&h1fxo7qVYEiBfp=2Z-`Kc{|;W+shiHVRPZPQ;K+gs_*K zFJVs+tu>X*O*LbN7miTLKDi<86wwJ!a1OZE~*E$=V)hM;DEyp*w9MO#}`ut zlR|*9-dD_<&qrKp>}$B)Pm-W1PFKX46w2Mhq}6ZrY3p>tok&2K;W_{1t{quhRXlg% z%o2jVRUr9(e8p=|{b8E0g0~KEX}A~`tEbObvm|k~uTSnvq}Mg}GIg=+{f=^kH2!Gr zr<|0{m-xTZ(RXXvA^Z^bbWyP&tf<@bSxt z(Od2CwC|yw5WzM`R5gov0_k8#X5h!{&itl7cnB1*A^>h*M$$F{nrH492F@`HB72)_ z5(>}#VwJ81C}3YU;qYj{?BloM%;!QVB6pU)S8Ic$0zMEo-l0D~P#2eBm7SLm@ zSmW}#5Vu@FE^jS31LWJLz|Xg0-InIeVl89EtI9v(aenT|{NV5rxslI!K3vLdy#2og z)hhFd|4MhdhwPev+vFTx%(trm=j`I#(udS!Sc{MK;{ZoeJyyK%%GsZD1~#^MzTM5| z`3%Z^5&?RF>1NNP7H5JL%0%7vEy@C@oU-ieT1M>G5%^tc4&Daq1~Q)C9^ZZztLCXB ze4_}?VgFUpIW& z5B;s9Jr~krhsAmzN2z09?3We}sb}zM$v-TjySX0~<#F?Fw3xX?0Lm{qhXhHezhZnU zJ4!zRokB(99=y9>=g5DjP4dyB>A`p1jEdslp`x~p_Du+@9c5zu8v26ZbhlB>jCb5c z&(Pi=e5iWIvdEdXb;e&D`?W;*XB(~$YEc=%;!pp|U%>QH>L0-O+r8c+Hk04@V$B4O z**#*DOUmXd5v|XNJ-g8xQA$EQD;Pi!@3~A_{}7MY^R^$}!ZAiqPbQ&4Q`6{HmYD+! zZDpJn^3VbDQ+$CGJPw`g-Qj3N5UlM-HSzKByKn|ZijXvh<_cDTan6*?K}|j4Y)10e zGmYmG{X(Z1Eu0|Z1K(3Z`(Vue-O_y&@ETvDpnWhgi3S&wNnotcdC!Ju!06n4R}s}b zXLPrP)KKscrIc1S702Ke>K9cdgJOZ2Tvyg>rsb+-dP%`GO7zJi`@r!A#nN$J2 zNYxeDSyzo{6)Q83mcR{{#gM6uP+YJ+&Q56vwGHiZXwCvzZhdm29U4Nc)wO9IBiim@ za8b-|93_`PRuRC;+WC9S3An)^tt{mt%At%S(%(O$@E+>p-fmJ5w?~{2S<0G~)4lqy zq8ysyVnONb39H_C81Qn;(sE_T4dFH;?ny>&OJ1orRRj70CgX5~k5X2=szUj^)L0FF zcPa<<3+BX;=pfPcU55H?pJgUXIQ+`7o-(1HO(cRsV<1coCk^%HchW0`P0}9$u?U$@ z%Yj*!t%5%4lNGfM(hgw}#K-BK8Ryyl1Y@VaI4xl#uH*S^8m~+%N9H$uP<%WNHL1p= z%v&TOLiPck_f&350~4W)MFrx5fwg=KZWVrsdB__bf*bxqr~Br2t7j$U(oc^ynBwe; zk{K{K3>{cHN46K`R?-g{R+1e?CbyL-TG6V2ZW-|P8!QBEv^hIPs)Qdhc!$;$tC3{6 z#c>U5`=d(%89ES97xlH0FIi(hAsz9lSUkm(*?gVZSD{MR@j4D!-RE!i$D&)dsKqDmqa8jOO8s#09CkNgZ3Uhoi0w=%j80^CbIXn7KS z8hO!tA=w`kat0+4% zpox`#EOad#&UfQquTMOj^|sJ{el*vrts^RN3!eqPEz&PG>6cEy^T)%d(t$)P$aJII zi76{ON_P^Da59CV=c!Rxg3MMTkNk+sbhw|$!n?JVxsR#RN=IMXYb@Yn#YmWO{*WQ^ z;6}r4m+SVu6_*v%tFHQj@fF6%?i>obh3fJ4!k8zIN~2JD!dk_h zPXR6AC-EVgiKrMyC8w^Qiau;NX@15Kv{e#EM-~R%I?&iS#?DRTD%)T&1k_SXv99fM zRWKLLy!gwOC>5N?PVb>tgMdrB9Q&2Ue*E8n#(aq<$D_otwUuw<;-~aPV&ef z)@mn>6b9Uk+quf7>`PQTYQm{@iFnt-c;!P-d!TaJ`*!tj9rJ^LHT0DWvDiD}Z?Q(|gNWT!!DFz(beG ztyA8zFMFm0@v9D!mkC(%11(N6pj#VzzJ3B0vb@)o1idLahQc+-D-7`*UPsYNh~F^i zjtW!4F#q$cdHh*`ba##em^rqTFDK7!{^58P0BhqJN>-ECGkODKptI=10UAn@fFEo0 zCvt{e2n6FG6683&0JgMiFsZ0D3@!ysANBk_^=0(tIh=t_>EMv0eN0Y7hT#}XZ{ zw8q+DY9pj;5t>`wyUrs8ZE_{^`@wG?9H1rsD*ia z&guJ2aY1XmTTem&^fj&cBY~cHhiQv z!VF*YwTi3iK>b-4gvb_~nO~>R(Mm=)h&0(7$$rXcJnB^Jo}aN5ovGgdqfCG27N7df zAG^k-!e)z*Tycxh8% zZ^Yhg8Iwy_>BXLxU7EQ1v@^U)==3njFIZ`H9+tBpU!BQ2E9DFo__cLmHg~;75%_tv zN(hz|su-*TRw#+AQfsW7V#rPkR2ntE;EYgvR_#dN+ai^m&1-vN< zbNZveId1G|Gcq&5V7qqU!MO>O+^B24zOw7?D96*q0S0_jxh&gSoze-1ScZJ6k3 z?re4a6eATQN|aY4btC!Y%alH;THeJq5zS*C(eSz9E6yjXC3FW!q;EozvF!cxts4gF z(-3Z2vT6$ukN8yKb~PH|YE?=kOp8R!{%Q6|l9g}>hy#!cY^7!ZiT`l^II+&?eEfvO zuq7=0t%_YU&u4o*HqB5nu3gJ-A5R!ic#H2e<{KuOvY76xHyKKya2?6n;-_pa?DJ@6 znzJU}!p!tX1Awi6%to3#(#c&_A?j&UK!4p)OtP6X$1w?N?h`L!v6ni3Hy_GPbqpKB zS0~L$UoxW?dP5{TG;qcbM18$<3G*IUE}(ii{hFE03%Hwf1?wfBk^St7WZnA>Xw;BIxK4aLOQs$k&V=;6}tfCf}bM*<-q;4;5vr zQ+Fq#&&Z3#62U^xv7kx&`^=~Ek@$IaP;G6=?3`utd#M>`hli3B?bT%0KQ(O9Kps|B zgOA&xS;v+V#xo9j=xhX@=Em9{oCy^_(*fZ;JDK;8`K2-q7!XjLR$f&^-qIFGS?9-; zDRnBWI$tUCM1U3Ki(uBtxtg(nNIInMQt^K%2Pf|m^20Zqqjv{egIW+p=l6)!*9w{{l672k!iU}C24bsu%PA?IwIf*k=eNxpyTNPg#nzYTE3 zHB%I^Pw{{`*L?7#6{HzKD$%b73;a4*S)K}pXK|8&uUGL(^?)I}tles8R79Q;iKi5{ z?gkm%>C!C^C=mRxzQJCL5FwXR)zn8a&#Pnx{$E>Hw&2K(BLkHG|BG9UeTV~8&Gvdd z?kXvh#1S|NYG*yAa$f<9!kDsf`a5s8&v(bg%$YrpCiWC>D=@?|g~$=4yVaAMEvV~T z?XOQL)GL4zpR8PZ*?BC%Tt1lXkMB_S$L$e5iKNNDhYvBsS;R=sBRREGO^+b}9_xR_!j)W!4Qrd|FwcnVm9Cx*o!%NFHZgY%9Sq4B4!#pVneT!4+nFih>sXoiBS6E!B2l} z4m_H-);S^_>-L-VkTTwfzy3&0G$=FpFN=KSShibN8f@^kaQ5gvm~Qqr0ylD4Jk%XL z^(dIp?5dQcxJCFFW5ukV!hxzOhCOxxmmc;D2g+}#)*VfB>ebWwCv+CI2P^Zr-xEob zV@hkSmbM07~ERF3n4~6Jr-- z(`=~hJx@Q6WBJFS@!zyoW%=;=@7Z>X*nR@5JgkG`J2{ zeR>y!4z#{G32i^O{?&_M(b%sDUHC)md{%+_^q%D!KHq%|Fyjb-UI<9!^dixZIa%{2 zSPQECA3lEOfM3j~cNs#BR2Fl+=VmTsVc^p$h?bF=0C;e|hRl3RZ^47+ATVF>(`+3d zKet*?TIJwvt#Cef)cBqsw19toXcJPVU~A7xhG_tU9YWvS`dC>>4!6`g*|oa zm7Q)Oi_BUjx@Vn8%;bm81|6{e`Cx!EryXkx$ttK2xWR2Y9hDu3Hk@ZRl2GUfjbAM} zlNRD9sXXA)61?o}>(a_yA-)&@vQBQqFv8;eH5mkwMty#O0frxSrK&#Hw99gcW0RGi zHak3fsaf~c(*aJ+_^5^Kxxpe}lkAUvemq8ZQm(PZa4TITAL$4neDBW78Gxo?3>Ob)I-ZEpkIOPpugjJ=(inLaqPVpAh63nZmD zq2Qzs7JlqtQVwbd2a*^DWYOe^oSc^_P$y8B41g5jIk(qAV1UU+P7;XArm>V7T4#-x zEaZuRjjcPsLlLuta>^{eF5a&oLKXLgktR1V1MCK|C2nEC0Gh&(V)fU^%LhBu<*^uHJ*0G#4RCXvTZMI?d@gWRAag=>ziyTQ~^ zlQGcStaeYdDTq6bh4kBrkpn+KVBZX}=Pka1Y?MnOQ<>E;?l1RjwdZ@jnog$rCjLL6uZZu6!^4%GUJ zP7AhDu|Z2(TzXz zdOrT6f`_R*Enc&Ykj(QqixsISvG(_-D>jKmpScb~vO?IE8{Di>&IEkJ_wm&_5%n3L z76IUXdf1nkRfOn8Y>q4&flQ$e?W(qRjtNlQPS$QXhq1HcCo=(34cz)mB!n9mi7;o> ze;by`Tnnz7)unkQ9{Ri|1fRMJAni^P4Dqc+AJ`p^M(x; ziFN7eIFW&y2(l60Vt)s#qv;13OhUF=dDMZifxsPnnNA$nkJ7x1JEi4RGAx_rhXY9n3=r3P;E zpA^-|Yk8B9Yi>7jID6&J!6A?Q>T7R*60(_(7|Pkx)d6DJKNdaW)#cC2zhrh9M_(D% zxCKr2z%E878(ExO)v)DAIJC({22_|$GR7~;`1E7{q_vXJ3YtuweA5yj2kZ2S;fOZS z0m}R_36IHpg07pvay#AY0>_#5D6uH!{G79`bw2z^;#DDMuW6=l1nfn8*>O%@~M*O5k5oK7bBZ@m?j z&b*+cp3V9r;pP6hKkW||RQind`R!Kts-q-~OR^aV>0Sl#WG@-e*|(CnIYKF8p81%E z3R%fPEbb-(xfePKcAr`~)5qrG4n9vWlGamX zc-yJwnJ|hv9FOvu2sBDZ^TX`O8Eta?5dn$AE)&f&!B2W#&OD_f;+wLeml(pGd5eCW znTA^@qWP-H#dc1O(%%A?N3`QN12$4w{+OZ{OM%t9d;pkzLEfF+n_OoyVM>494CSAg z2(zs{cFrf7J?l{=%jK2WTuqGHBaPM-X3h~?B*cE~kL{4S7nLkXTBq=~T3aVXzIWsW zc#t`o{A=vkj-le@Jigujd4S6cWMwOhtX<NgxhO051~sJu3NW}fO!B|wV* zYp5ft6Fqo8!(@ve=s@$Hu?Ul1FmdWe4S$BI*LV7DpIOf=mHfY85!v3CHCysbEcVmP z(4wTR>Ng%;+qI^!|6@bD#$gI1%!)7ESiNg75YNgz(N6xchnMps1d#TGcn)c+TOQ@9 z4|e@Zh@Da= zS)?uX^ApU|eT;YzwF7TnrN8=ND0wjNu`+Ynr_}t@9L(@d% z^iS*O{>F8FX$Rk8VV*`bo7fV~_V2hK+bMRt0cH=GAHRSeYn_HtO;Tj3pxmt*;pGF(Her`9KldgmqSJ55>s&Gzh07t8 znGX9Dvj)6;>;a_$)2Hcv+Pi21pe91;n-jy_qrTD&7DR z$wJEd0lp_lw;`mLVhV5&Lx{ns)l0JJW5^eEcXDZ?uu56N!LTaKSRdxiY7;jh&q-ANmM^bfN^^%4v*;1|^c5kx%IYntNev8M(`1WFvzV{|HO(g>*+tp`-Kd_x@hwg(m1oUfD4egDKa;Y|t9tG+q;b!E zIeyXH{bYKt3_RLVjH%-;>}gh?64D9|(1|L;1|Kq2s5zemKZqfS6!F5BZl9QfU|g)_ z(;#MiurHptg)Kb$nM~2~>aQ|whKa{X=sG8dT%wY8nKnwQdG!7C$-D1CCkrQyn9o!QrRa}eWv{r4sn+JZ| z%_IW0r(i?n9YNHNrC?fdFR)yBxSIho0&=WGV@XKMUHE9K4kow2D+;|4TK9MSSbYdN zk@c@-7Yi~?M`c+Tr4nOmzJve!>=3{VA{b%J3%qgK9u~wliKZu*S%4+*X?Bl34|9x{ zmYf?xY@2jpBdcy zW`8DphrezhW2db>Ygke@A5mLB?g5;UAI8k*E^$C?P+Eb}x)YqvX*{E1ON`156i7mP zW^md%haEQ-q@wEc%sPuOh?mmr1LBI^nHvFdj_C@Iqb#!tA`_u?4w1=yJl+;-3N3+C z9r4mc%tmE-OKCJhkq8#eJ`?XVArtl#hWe&nw zKV5C`@;3(Gas20O)WKxvyVWGyIS;hRx>4YH(m$NoM5h}nUjTBi;S!eN!W7zj+0Jb` zXKYHEXOaCVq4GbuAig%v3NlD@(jLN5z!a8^HTqNbCHR_f zaR{~i^xeA#3xhO5I2Shz$j^~XtOn#EojImZ+h7+fB9thsHCt#I_(QA7@M0~7Bo2q) z$6u!7-b|L7%afc%KZA!cO-M`ZJ$>HxMmRN&Rs2mIC8*Fx(M=-%q-^NR;H&CrkIF+0p{qPkHa`(4q%YE3A*C`IQe2 zk2lkJJ8#bwL-=323mBr(@NacK+wOH=m@A9q-*A6Gn}vxW!G>N>=7}CB#VM zluej)ojvku3WU^*&%tg<67WU8C;WFXcuiP+xAt!`v(+-$_LDsm5FvkMDdIW>Td&0R zgByh>?H|YGtqt}B7vDyA6ZV+Iyw=BCI=FIc)2AP;I0(O^T;8}_J=4JAw?DEOFDK{O zz?#GXp#D4`z}YzUJ|zg)86u+fJ!B-Sf8~%@o&n^PoaYb+#gIYHFKG5X75nnt+8r!L zWT_uc$_@LN{H>Az(-P%(5==~HibkQ?ud`{sBw`3TNVqI91B~3%vu=Wz@)7SrAGk0> zt5{#=hzlEKa-}Oty;#t;J!WextuS~Gvds$5w#8j!*wz7Y?j(<&9PLd8$`3rtta@+F zp&Q$uyRjMi-vUDB`Te8`kVge(J${ddGv9(VCkT}UQwZ1FYIGaOG<8U?hjBY5oj5ni z2p!cIXKrTkPWow+RaoCmUrP=hYAIk)uIU3jw@)gV2XK3@86t<3)noy*ofFKtlVFA* zJUF)gfz5wi9$CM~j`ZG*^1}9!U0btKejv}K~8>Lgd??#^6;78ZDda{7gD(>-aZ4t7P`?01)NK5RSJneM$t6P+rWn!klu z!>EBRu2{5e^=`zN$**uWU0b&*gs7#cWoFJGIPWv2n|v@R=k@w;iPOsNNpI;VDED*Z zP-G7c_K zJpw7T`LS(8p!IOPw#X7Tz2=WqCK;XKG%fWEVVV@BinU4R9_093HuFm(IN@H-Fb^o309GMt|jC=HwQX5N8bOEJ+PDbvKfupt4&TAuJVJ z3sw&#w~Ll|bMU>64=+8I;=CAzZ%S>hS)ly@(9I|0w$} zcHQ!t$uI9S1UGr9DH_feb9xlvSRYq%=8+1M3Rm92*;7dNLr1-JKFK9jbJAy?oNV8b zaZY!fRIgo5x(-8~I>Pb!9Y+3Z%1lY^<{MJ1P_ephZbk0(Pl?*cjpJ$#Q;#pFW4?)< z^rxUfJIP~WT&9LJENCHz&n=s{S_2d`SZ7-r(SmzT1uuOik1@dUZq)B z3nLe;V@8QiypW^|TO9l6n;=4&%gTfi|ZEHe&;e@rg4L z$>S=NgpKtNk|}lzfkz9FkPyMz3bi-w0 z+ ze}y9{*i7_1u{4G%X5dzNSyN&B3G~7$%+LS9ndwOCAkX zkV|j1p~U-TL_Z1&*cCXwO?oj@aa!eg*(`DYREL=fQc!$bP&QO#4*snXSc~@9#T$AO z{NjuHE7rnxQK8R=vr4;hNlLv=A!+&uwejYj%lISjGGM0-s-MWiVJcC9$SmLTR@Y?u zF64I?;PtqQnVGbl$g?*EA9?Enyr~#rhq3i|!&AW!A>VPcjgNU4pv_TRV~MH=7Hv)* z7-6=iL#<8KDsAWd=+BTzfvpnH<#|H79$5A~L9dqX-*ThdmR3MXmVQ;cjF%c}Lx^lW@z(n<$ID%|T5W87-J| z(>4hy8IAM_j(Pla4@Oa`4WV{oYqK-T-U!nJTznmsNl{@?E)p@B6H0QcF$|E~5+gJ* zwDs0rUuo*EwLKPbdd47;WI)~Nvph2}USEb#dx2)J%2o;RV|~5MxUS-8I>!Ae#wWE~ zWu9^Yxe5sDUNMJjSRbLtD1B&HbA>h(HffM(4e&9>X(~!XLIpcGsXA^H0pRTy$d#xz zC4T#Ua-y+^adYi=TN+Pj829-3ZjhE-AGg0aF^gA~$v5~Rf>&k7=1i<3n@c5-NGsB4 z`V5d9$Wl+X>;T6tOM34yA-xza;p~a+sEJfE$s?pUS!)=#P=WB>*j8&{lK?R15mn2% z9?QX>p0jA*G*cNI@e)nt_5CH+XUy`oZUa0A_Q$B#xpkrX#6AHHPkVWyFiMSsEb+$@ z&iPR;t=CPv(TF&VDH|Y^5^=8ivVty6gM6(RLxhfh!U?YS%>(-~rp@9px%1lGK8P|t zx!YnTIZ?s{Wo&F8Cr7CoE4#zmI9^c`9{_K+yy*Q*fw2TK&x;UBN#*_(pe*$_nN7#w zQ1{L^o~04^nJsk!>Vf%;qR3y>2P%r#PG!iR-RuCJgwD5hs5v@ks+lE|vGjO5M39`|FxHxjQS+|1SG)2Nf%V~>4Ikrb%xs9gFBisYr z;}gom2T>=z($UaHBa)|1T&>`Fm16ga0Zpn?`jLm!WimH`c24ErgO9rJlXqV&>eO?; zB8L}D#MOH4`3x!ha} z=HA5K17^fqZr*tM&)+d&SeS}CZo|zJg|LV{1Sv$uw3V3_ZvPBgt&>O!upBgR zY&6f-T#gR>+Pyvz4m(taxb)L>U-4w7gq<3wcl3okmbe9xuuj7MIG{@ae}nQUqOAexFKM;M?d`<9wD& z5hWT2g<})Vp2$Gn)#tv~3B#&hlW;+P_hb3_p0#`)1O=iMJH}_gX&ObD=E)tlh;%ey z%lf|T_ENEphsuPwr}~!kM`tpOjF&Klvw381)GA8CPD#E~`d)ut%+s&h)9x7?dKwF= z7Fr@>q0J;BjtGE5jmOi(KEHAELGjflY28Y8-4A7}ZOhg$Csb~1N$ECwjygW1FIkqj zG%pZSqEQ{BJ34}WVB8C)6VI(yG&-l)cL35PE1yp9rsH8u6g3*;4S!Y>#dZ8BcV8At>6 zo2L^3pGheGmKo&(1i>e*C6jg63PzP6?;NoWz_t8Ts@5HUG`b;WLa;?_g5Sb&yvP$nP(ylt-K?o zWi)!#JP&77VBTfO+|r8Ras;BnC60dnrvvUW=5;7DU~^AnomeR5)5R-3`B|;ZXCG*& zeDL8ROP=(&SQ=oDl31~&YmZIStbX~`x6hv}q6!B9Jn`DMdG|59`rL&2CA-a00n?7Z z1jgOZjUfqN}0Uk6LaDePo&Q4>AvE2%_JqAP#nNjn0wZ{x;^j`$zM~xKj(pG zfp0P;bBPjRhY^JRhZM}NT-pmQ=u`S%$4j}*pc$Cf07B6~fvkj6ehr=rGpYL&;$x#+y!ENNh=MlJ*x-4$KQ?NG&y z44jlf?tOD)%1P}A*LdS~f1ZS37Mi5dW5eR?YVc_+=VbXv=ty_z%$zy=@Uc@>)zC>} zr`v{X+a6&^vU%^>dDZ=0=QJVWC0V&U#wFcbriXh2m4wxuGWE3kjPTLnfQil&=N3F2 z{}boIDCbi3Rsv6(Qu8<*5OQ6TfTEU?vR^kO6=FbK^poN+nSyHQw} zU|?-MvK=IFJFg{;T|j==89mR`u$;_QE$FJtM*Vg;vD(Ot{Hdws|GY-C#Rxb%%kJug zELv%fpg5XyZ_$(S2_`J#w&JVp+^{v!L@2d61&!Cc@u%|-SD&plYQg?7^Z<6&ip_m1 z0Y|&w$_&<4Is~BecsN@C{rS9Yc?4R%;w6;^649(gPO(Ysc=jzyATJQ9$wijJiJrQn z0YIG5jb?G!)Oq9YJ)~gO43Hg?A)*LOlitN%bk56hmMZOX`7VjpIJ#e9!-L__=5zTi*TvBU|+u!^`>E-%H z;eL|&5HO{=YY;4ih33+kAjFxJFa3=$#pF*dY};v0Y{reMP{PizoMfee0@eN{k&ezRcy66ujK6JK5DyhsdzLtT1>yVUHLEl856V6M}RZ@HdYzn zp~*}$1JZi`-&lD#?VBrJO^zgvdl?GrElmKA#0J)(baM%afyNA-xO#)(FyR?Pf0M$o zC|APBL*=6^3^#fZGp{N^9P($Jfxyc>iHFD6!X|dYhJ0q9+p+VC>{=?EMoUIV{2M#{ zwMmiV>&Iy^4ni=_O)$eC1Fd1Mj@o&U(5T8G`pB8k3ORddbb6IT{!HuvZ^N6CGZNeU z^21GWT>Nz>)U&%$NWX8XeX-|MFqoa@t8WgUV2*>6p(K2&1&V*TdztfW>T!9Zy9P)w z_ePP@63+NOpwk3uz!u4Cleh<&FuQM3Cx;8XR>+vYip%UufOWnnsnx<@?e8G7yqTkI zvP)KZ+cZQn`^pIf@d>(fhY`(v{FKh6%LC)DlO`sXb6(@j7kodXOxYy{m#$B^h+Pv} z4h$h6WV7U(NiQi6amn`lbAn~FUSt3CTbiq)W|ZV)(M1elF{EV%xp-lGm4fl%0Jzcg z_@E_1@DPyvj5T7cFHNhs+i1dq3~Et4G;FrP=MlWu3*rQhn&rG+63?b&R1cd%Sgo@O zZE`KOX2H;+LG;BFltp~1xU*J=Xr_9JECYS`EF*|IUnyYp$VF_DF%uC^KA)dFqUPwG z1gxd% zR?UVS*^gP)n3^qqBtv5w9t(P2?sR|nNwiiVG359X5|=|&4O`( z8@Kic>UCDK6^wO5w|HiuuZo=|dSjgalf6vw|4$>&==SkTw`pXkYKovtGBrdQp!ig? zsF5408w_wf834tHJfNX!0sod?`Qhej06LHiL!D_$2f6-5a4J8FHK*U4(5^? z&#wEgz5~rLuV37~-0?Au>(S4yaCn6P(;*`RT*qkVEeDc+sPxdL((vvS4`1%n=_kMc zqnmChs6D5&(gA4d5i4=H=aXW!7~TQvwK`+X=Ua`rDunA-i)(w~otn^q&2@^yqv$AN_Qx7?oJ#v3jS?s6TJ7+?vksJ#h{9QUi4Qh*OcwMPEc#2n zLha&%Y~}Sx(>{UJNSFXunh?R)TcKZ5~p+SyurkNq;JHKwXmqp0XWY{K zfe){&9o)ZFCDw^KW4pGH<@b`_b7b;SZN3jgwizX2Afr*D*YKdXsd{sNS)_R)V<%`| zLqBmr$e%-1)w7_T^Qk{CYM32Q0P_kMqebo=Sz5s^xGnx%wkakeS6x8F-g{x^557@d z-i~K9-q?2VF=)N~g=))B$z{#-b8F{309%qXt(RW{XK!`R$Pfjb;54>6cqk$Ccf zAM+*wHg28L7C)=PqsYBVCI+@NcluX<{rC{2L9z=5)~tk{L=Tfa_#>~+GR&Wx>5l+o z$jImFxA?o`9M64F_L$v56LQV=icP1tZAi>HnapTWFwe(6U>(mkdaO)JwyE>vB1IHG z|A9`L6B%cZ3YOg6=GuaVzP+KKUU%||JTpFZIsg{~&#!$+;>mYY#1B~r-I!&CLo`Tq zgT3BI=`Cg1c3&YKl8c)#tZiR5%IATd@bS5g&G8G%p(in6eV<|mz;%Nw*>6B`U#WhA zXaJZyHwB$8-~vz??13qZ=z1D_)?epuk|-C_j$^*A)oL|^@Au9*;?(yBABJ=1oK?nG zNa|on=6m*bap1W;k(K1&>5p8oc#Hmhqd8skdNr2hK}Jk!`Sb@}vF?#kKvk**67_eU6dO z=Xy3V5dn^InBm~F{78Bub2{_+Y#}|MW{)?q4uqueii2akKR)pdFq!ge<{#Q(I5m)C z-sVDHK9SlEQr)hrSFFc{#XS*L9)?hX}DmrfL5GzUNI+H57ya5{`)q}PE8dxncMG+r*%gV$e#n12pEdGq153?mV2;HtsOEt%%Rz8DS!LS529_Di<#YATzn`4JeP$I?8Xs=i;xg(0zvpT(?|Wl<4dk-A1P9kyz3DzV;HF)WAg-DbBSXb8?4{niOhu)ml8{Csw1c(NMi!E>YLn1i2{4 zTmX0edx~scw)j|0B=4O8cyi!QT08_BMX)F1;#!SWW6{f+V52h;z?h6CJMdBiJxA=b z@JNJ)*#SB-)wQq42U?m=nbgOe@376hMyl*dPG^!7wuzI=`x>~;dv_ST82zXY)i53P z?5}huTlW~-7w9MjcC)XcirjiI^z>)O&y)GJ;Sv%^#31TE7_&&X->pHMCU@WttDH0n zh{@yRMi+NPV_P*3olL`&Jb;niNTAz3_{pu$H#k;k1$_!k6u2aE$;VdvjoB3cCXAko z`;13&nbaZ(9^MP^iFoi6*smoG!jxTKVXFNEEBE=8iW`v_&NqHU*60(XFu%%d^fQ)5 zhq$~hL|TH@t&GMVm0xLG_!79nEez(~eS63mDf{}Ig;jo@&8lIhFM23x+cCMMqTW>2 z)AU*IZ?(U1k=T!9PL3A`m>1sg*$egZ=e1u1E^a!8n$71^7M>;T)mz4n1E$|Q)-*rB(OkBPjsOzNt^T}pIWCniYmHg4PP z-kbVPFrb}dPvW0&S9CoOtfW!S$D-dpcTG+VG{@C$Q)8$pGqxsIJvjMe#vUA82-N+Uw zakkPM!DBtwTFAQM#82c-kI!d1=I&A*1i!JHn8g`J9VckR4EdGvG8$T=HXg6Hc5dPx zV1p4Sz?0iCv&)oX6FnZ@Bx7&UdKOoy`b6KZIX)gd5=1&iR7s}OnKwy*+i?ApgL^Pi zeIqbl^IcmKRn1=~|9a5<0AI4750b3IpcU+}JOcL;b2}Bnd?F*gk`PV}&m)Uc#epa6 zJ9gKPFAnCospmd|r0yAI zB_35BQ=og2UH(b}ei|vcRARWY<%poT|F+4@THL2oU#L3H8Wjm*BBA!PT#khO;^6z6q~_dO6#=69mZD8!&8Q{(SewUrruiOE3+f1nXLi}lX`mGtQrh%YOum>@+W6( zB7Jc>Agh)D>vM08vlzXmP3>Epmo(G&qa~^RJ@*58<{5kWyf{au(`=HkX2<}tiRYcz zCYPmcI6m0d6(d3#+Zf|bPuacv#d2!p5x-Bq`(#OgrUNSj`-T18X|=b?RdsDr940s| zFwFF0ubJ0%v|Nr8nNKEbk`&Xvu4jSCia!DwnP;fRcZ%x5MmEK6t%->`F>w=`?~we@ zsBdeV)Yg)fm2s*bnr>I5?c@sWLgKTSFhc2$U1y2YKDFd(kmuT)(&z5rQ-q8nPcF?l z!1u|j8%ApN!`Bz33no@=0H(@Xp!JMj0jPFiuR}umM9Q^-eotj0yu&OjC1dOH39Mr_K*dpYekiC)Xk=;1~({uJjKRZ!NACoIae(L$v~`514Wk-Vd`FNVz!vz&Wu zlvm3p`yPt}^>pE`i7UP#fwK@^7A;&R95vl5kA#xx`#!*0LJntDe56qnBzhG;ODvT{39T$KS3#_Umhg{r8_X0Wcm5_Vtk&dtnv+M{Z&1hS#&CZf|E`WzyaJs^Rf~~iXUJ!DsT{`Ac7=<35*?d8{$eP|18YTj={_=YiLEi z(v}RqZCM2P)|X&U&n_&OK+N4K%AV|?zd;cxNLzAAkG}QAxW;G_=QsaViACn^tUsHn zXMOZI7gYhHp}%8wo4^f>zsl?sUc3Cl#F7*buEsKk^K^E6QZ4ZFZ6UK9I=OjL#W&fx zz;cLxIaz6OeLnX8(B}^x!aA=ndi-VS{^;YQAwLFVA{Y#Dwfb>o$P_Lm^Th}Getn*I zn0E~;L%R1k{Mx2;n%{U`a(Y-}+iipb_t)`|Y8$jVOZnR120}0ARQHQSZ)Y*;r94d# z+3xRuJTk*aujl!eTwJ!*>mh&0Mp&hJF#j$-XHDOEn+Fpa#+aA_KZ|@GK3u<4F3^wP z9$!R%O@rr($^pKK(C5b*FA==3N=!J?m7If%n;Y%?Q(``<7{&SE=<3fX;3I6>%PC); z4I*~7UCQw=g|=xT{sF7_9+xw7Gb@LQ;-A-NkI6rLxIl_bcYT&5d^T&UtxYLR7*Qqq zkp#C+TeW>*(-uJul&!k-$<`=xn9Eikz-(|GBrqLD8#33ub6y|;*iq#G3PBt zZf^9kzE1?6ro6$qzjwvw=~|&xdh(PB=jZ(e8#gDR`V3x0OZ0=wy<@c-!_I4mQnbw_ z4H74{y@(J?FMaPFBXN^#W$a4W`gs3VxkOhvUGl3!0UBn@6oUr9C@>IoodX!t`c2ms z4^kKbK*OK?T<7cZzZX6bo|4Wyy&gpS%9GQi^&}u^=|4+zG27I$2eSF3NR9bYQWf!l+$j2)SG%u2afH85ia;K13RCq5CO zRfWBxgAKg=kNEE#lq6VIBzGqk`ZVkK2KMf`b4}WGV~j!kdQI~=l9_ACF^a7P_LAmVViIKRC!7!+ zXx962NNWu!jFO2zcO?8l=RF;T9 z*}};b$cM`yE8=PW|xf5vrNXcmDE0- zBl@>`6fSWRf-<6efs^U@CR8FifL{Q*U%+INQ!@9VET0s%1oY&$%v-hpvo192AnyIt zUh^94iUFJZ{s@yb365Z&v-o5i8ERj6npjjc>a`sz9AR}lk6CO-1j;mVr7&xrC^uqX z?477Ub7VNDpRZQGNW%00O9XT2tjpA7?(F0;p07tdCD;YPQ`de?o9Cl7nGG|m(@6Y0 z;&^Vlg|lE9W}3Xp$F6y+TN)c$mv7XX&N;~(7#Jnz3P&$Kn09&bzl;KE|p*>WBNn&_XMjjNli&1nH>iQPQ+;X4_0W&SgUrlS>2I5 z!VKNsd!l<6I7i8i=0hi9!s)FoZ{0?-bw!oe_MycWMa-*mjDo;!N<+&y458qnky_iT}VHGw`R&!ss)DjI3M zvN&Uln=EiJ*>gXz8{f1kfb%rG7zl7~_WlHK6APtJ--gh$H=~YMszxE7Jzo6?og)6;v*hmMR6X76JwZqUF(Tl z5$IGdCrEPvTrr^rMYg%36|C|`I^R&V2nITQe*#G-a4M_8n6NbQqvCv#)eVO74ObEl z;z|J^ofN2QIDn5PK28$>_rX?k8SwJM)XHDw)aGW#x8kW367&rFjT$D2!rf+XdBfn0 zM;)}K@jt&f(C;*cX=obVr{>7+CCIVUy12V@6s)^5hEPlAV1=e$NCmq596 z#OLOV;O&ia3IA4Sn$n8yd~SSKeVy;^R3vQ%EYMy+1#N-@&s3O@h66c~Uq`&2^TcN* z&Fl^Mjcqbar6VR<5I&v^;nHIX+&uKjFWp?9q6=7*@#*yCZ$Thx!^(NmEgTKqO#CgQ zuj}5&z)<7NKwN3W7u?{WK-q>o#A18+&I)U!@}r59|5Ct`HbA>!103zmSH@HvvZmWI zMZy&)iZ-v3Jd-`@+FMqv^yeA`1O^$M>2Nj&{4Dd07*Br$T(zhLC}o(9 ztB;SH844VDPT`&I=m)>JIXv$`eV=B4lNx$joW*|EAK$=w8c|I4-rRN}Uj4LxdPEIW z-m*H9K-@EUCX-9-e5h^lyu64N9H*;h>4JY+%-HJ7U`bMiytXAAs~a2m;u_Qj1~TG<;^6qI0UT|KGj#qFvh zqA?fVt&?{NU9IOgy!IP)@yX+gG9Cr}P4zgZrO>_vvHzp|41?kX?zPp_Hoqa`#)i*m zx;ySo4S?(};;;#4H`YC8IuXE`BN{_3`p=7~OqR-Q1A81}dvpD7^ZA5FOmZ4YL-8)~ zX}LEgM}~up8ZOQdJqpa3iwNti?~$wTl@i5iFrC@1dfbrTCkmIplV?fL9_$)Gqvflc>oeIx z|G&)0G zb>DF(_1Gcp2~)*17Lhy5{oeK=FK0ac*QV}cPNn0lgYZLH(a>paLiZ`4Ve|TLuvTk7>2ozr1qkD9Z}^;o>p@sr(W|x93JG5xOjxY$CH&NX2o}v zh-F911+Gb2(@&>XoyNM4)7&7B$|yMim>^ssj-^AdI~sz=f#Zz_7n4K+pIoA}f84TU z(`QJzbXHW>p=<~6q&xBW-zV~T&FBX1lKFcPQ~TrwnEFAa4{OXMd3t5Sp|UUC-jB%! zm^4LWry=I+1Y4|XNUa|Zuur0k5LGvN<$TWPZm~f%USh5XqH}n1YdGqK8V4IH*qLRD z&pOp`mBFQBafR7;e7XURAs^+q!JJ!igc8KGjoJd1*MHzdhQ-g8&5|jmH=3%ty#MHb z&S0+Yk4f(15sZl*8IgY}Z{^NR+#7*8k8ZL$l=Tr*-f)vgNq6ex(a%WWxb$x&HN&tq zqFsKke5Lg^5#Q&)1(z_v=;mm`9dd6+? za0%OOz>^I)(KODoq%Fn9ZIm&8O&bC9zUcJRhpM&-3Iuei@vYDHh-*|p)%{zTZ^Sl8 z@<>F5ZZVeO-~g9*Nu(Io26LB_f0VP+<=bl_?Q!vIzdlLdkd9H49&GMHb=@SmmdnJ6 zuc;5-YoWc4`RYt^#m~1qx}j*T$N+TiZ2u5+(nNy3Y2c!+p7ROxCu%YzIaPiNwYroMNcuA&+zMKZtefq_m)LlvwyR$G-cL*@FxS+I0oSa;k zlYH&O`knx8Ua^}kZ}u^@Ec@V<1gj(|m;|ZUK^0+bFW8x|m3gnv9;ydYNoj zA#0M)>TP#6I(|EI(FVg=7iX?>hn6(&1?|m71EsIzp|KNnX3Dzn$rKicJzlgTI?-WC z?-b7+V@O5AZPO6ZQ*+rw9BXC7^_^E`dmv2r0M7X!#g-jr;ld!33shR6_Cgmet5e_; zbUt`Y)Hn^#Mw1CsIU0drJE83DU?DF+`@Lfp)8Wi=+57sQ?Uz?XBnM63MWo8`&Bjq;Jl z8`<+0s&NCKaEi{(_rYqJoE~n?LL++i#tsruYUW{#a`D!X^<=1PldJ)eqjs?XsojawT@W6uH30cUDnkt?X4GP}weCd-?4O++lJ&Tc2UIkUfp zXmUFhjlq}%M8Y{qRnnT{5NOUx`~7Q+9Z_>kqWKSItLHGd4Q04zp+QtldhC-^4ASNo+>U;PXyP=IVK? zeY7QYE{oT7RI31&f3grotweCDk#z8vWeoi*t9=;{F|*FV<8d`B325F2E20VVGgzY2VR7$V!Oww;kXZ1lF4aAu789w183V^X_TwNq(6MH2hRrrG>} zYlu|}XF`)+NjgBe_zl{7bq>O;K0=Yr62n=%GjlvNWwr7e+n_MqJGHekJ`x3WDBCc{ z(=6qUML4~Z_XZCZ+$>~Kd5VqBgaRPvgE^^tIy8O@1Kjf^ty0%eGP(W+J^F1Mlo)4B zT=e5-8jPesJtZWIV-_1gkZaMEjrY9r?hHhN}ETZSH1ZcMV6 zsR}1FaZ)l7@9`P^gr8MJu7Z|iTPVQ+K4oEKxMIabf2U#l!8u%5gqX6Lz9mvDo8Akh z^r3lDRB+TCrVJ7^7*RSumjx~o$32qnlk&8w$qSS*Ng`R6%p#~|#qahCM43#13CjDJ zmB};6_eR{pbLocRm_WevLx)Wo_Pp-T0aHgzYR$x`q}t9FAh0An(adGT#8x$edU7Jg z>&mEfybTc%*InTlSUpj-Hm82Fp`R1OJEii++OMUK&S*qdM`c3GOMIpv@Uu?Ijf3Z2 z2@cT5;FCkEsQ>&qV)q~^eV>zGTNTZT?l+^mDNMwIv;LRG0$0b(7{i}3nj=$*(=k(e_*i|(JB(;{+i+ejhDf{uV zIl4?d5y%G%WJspW6K#VJF}?QbT^}IQ>=J4Rj_V6bCU5e6ADtk!SojpWpWFeiMmggU zo>P$TKPXFtDhJ4LW$R-SIspO6r>wKZ_-4AE!^D7tGr5r<&LGKU>8V}q#|*Yl7-4jU z)lX$R2amxgXH$;KE*kljw54Hv@c|5u+2Eagu!c$clpN5xgJVXYByWg1RJ&Mvr*Yix z88Hs_mXlP9U1CLI`*Qkx(>w}lgy`afe};>fQ2OGX&cp~i%54PA^QS4kYErVL3mP?T zxDJ^mh3S#n<|VaYS_$oDQ(gC5CL{#u$~Yv`u*KD~fxy%;Aw zK~GZC%`vY=#D4Mm+@7KGgx}AJw&>H03I%wo5rePBII2XEnJM8cYmy@)gxz&VE#j$^ zeSY3(10JvnLK2rLdjO*vp=I+YX7?O7C7s=63M$)?2&A88taGuY$}Vv_${So2hZw+3 zkh9e-FWuKh(=6|{4aZ5A8LICN{yYyxiFiC)9V}lYmYo9vCS!6l)Kuex<`;Mj!krw7{}pp(I{9*O9%PH`~T$H8uvhU;>s6(%@+)5Luv41CPWMLKwW zzf#EAg%)+AKc@^GuLz;xt4uMY>mYSsjJ#5!qs3h1eCMg?qgX@6vkK@x} z{>89-)Mu0^BtijUbp43QMh>q0(}D(~m;!J{Y#vmZ%OnX4PkF*Tb{xr`=tuH2q{|nJ z4>nm2)DspMFSDZB!ayP@B|5+d(Sz8=mSoIfBw;b>hFk!9?0x?nBwdBQ1^Y=oZAhj@0*BStW{$a~Gzuj`+usurJOt3M z^M{dIroO29)(wu<7dlbQQv);|o9JZmOugF?n9)l=P)U!c;4VOu3L`{L-hoYFON#lcAgD_EK03{6V1f%~sJ1y& zISp_X{xeCdco{)aJd%cbr@flXewHfADBl8?&a8KWkZqeEKbA<2Ao*G7_|-8V=uAz9 zlhhG;Q|8+0zYE__HCCG(-ihv0(ZbjgPd6HrPhc<>CcBXDJugUdy=6n=@&&iw%q(or zB%4QUGbD6qJ!bfsFW?)Ktny(5$IH-Az4!`y`BQt8M|?Wu?Xv zcs?l;U>DQzjjdO_1ja0Qn}-9R)i<3bOHKjMR~nzGV(=Q`@6(m~bn&?ch!`y7VqoT(OZd9n6VTieNMsxBW<8><{>BmS}fJm)?5%puCnE}4z z`yXa-nR_|utyz`k9#aZk3MFUPPDaJ7=ZEL#v;KFpjRWvFy?-}-Gg2rZ3UPU=c7a;v zi8oN)OfBICMv;7Az3A*Ja&FV@R`{TV6CFB8m6L6zKu;6nNS|BOQKoo~vf=v5x5$uX zd2uhVI>90+aJph8kXIu;;BL^oZ-%20`D2X?T$ zDe}GJvcfnuoP4lR5>3E4wLu+*ODa?Y(b-9nZ$I4LstIOC!PBVsaNLgeA6?OHwPx5- zKC)TI2FA1QsnzYO+VNAjw{&Sax6>KoYz1$#ZriWX9b{6Cvq!FO)K}lVd#XIY4Pl#U zDrhkhrtDQP;1S|_2ek*WfTA$8htWnRx#_51b& z=zW}rWQwPir?6n^ON@P|0nWAO7r;T6e1rl|^-js?F)S-P(XlB&n>wD{4 z7+l`E=A2#p-rOR9Yz9B6(DPUuHvArJxd5|7mOqP5U2|$&W^0JzQSbG;Z`N6IQdJdU zhTk9wj)$#IB+Y^m$hqKf2r2roQY*h!ZVu9vBn*!lp@PTg>+A|HihRnme{1j zd0l;LtDzZ#^OHrY@$HDE(1eRT+gu=E6kqAu-gKqzi_de;Ed)Z9+9p|KUZ2dYWL$ysoebXpfhrjnP`12c!_kvgn+Fl0nRUfnbVp`49_T?bF3M- zsOqhwY1XdI^iEO^GIimec9UCSmCdogZ5rACqNoqP_PsjI$_X&KA4-hVD>H3htyt3z z%~*4_M0^6)u@|$6MdP-S!hq9YD5_ukZd}X<8d*nL^#vOW{|Ub6U|szOiPSuuC0{&3 zVt8K3P6D2LMFRlf+s2vbOC&4SS!fp1zxg}m)CN0%*n11<_k%v+Zd)l0RbKl^HMILz zz248)XTuXyT$#<}SELLg@NoH7izQ=xxO!Uzp_9j$!9U)U?&cHmo1f}kg{6i{ z`s+BKkZ{sLQzNH8?VzE0g;FJxE-es8D}njQHzouEdr;1`te=%EI&=3p<+(0L=x3AF zR&UEEl-eYFh*q)Ts3h2uL$pArHi!<@YAW|+LAcU21V30`7y)lDg*qgnhuxF{dBm40Lk`FXoeS zhZBX96b3?yS9EFPl8bK`Pa!NWIqTTv$u{tffv;POp&ICq&^$PuHCJx%2G!1wtpGzn zyuUEijfmj|^O=%M`LnyjR^_4(C1HGCj8G)DZz>IT`FXJCZYoR5dgkh;u5I@RT;Jzq zd`r~vQs8D=4Zq4?eRzqHb~R2AFGyMiv@YEwjLM)aYihqM14J6_9rzVL`LdD~UZIvrCQX2_5eG1FOjIWB)v@zq-Fua!bR? zAV7Ve7Ry`iKXSrHsf$Y@+fCKfBR1l!&#TC=E{~qaWMyR^Bika%WY|sewozE@GR{NK zcjGl7uOy@tEF(N8dwe~Lbs%DHt_7HzjEP+Btpbm&)ZZ$f2bNLeZLDy+Cz%I$<$fQD zX%ajkpJj}31^Y&E2egZSx$m9|NyKR$&(|KGYn(WPZxV8L(vm5Q8U!l(j3HJ&;&oB{BBPjn)NyOaFW}!FO+75E*e*(9t>Cb!9 zpiy`K2WPOw*GOyGd7r0nDvC|7M?My3=JCJeKSW6hwFVr!#HAb`I7&Q~=Y>fOu<(Hn z54OCb`3Fmz9m6j3xh3iiSfcfPGFtPCoP6T> zNUvvjQyzAPFOqCHlB{g`*_Tg!u-@eRtAZyP zC_KI{HL1rxs9O_=4n4p39^E?iTEzFmcMZ4K+0J4BRhdw)Cb;(9fg5~V!ip_pBz~Oy z1{wtBT=FxoAlW|V=EvIB1AOTV$o#+zDSm};A{k|s-n(bts@f*#74?__n{=@QpXKQ*3yZi+8MRTQV42;9hsG&m#dCk3`Ka zB5k-zx+_q7MlLKltkMqMzb8RNTQjp-l~ud;PX@zIhH{J7{82UsC;w3&g_&AsC zS-}>!;cZ!flyUGO>idem=8l=2u!>>TA+61dnN$nNP3SiI3Qv z*Xrf}M5?t?VBl*>5ojwg?Id~0t2L@{+2iXJ%@>h^LWIXumA|wB<0CCv*2Ftt<|z*! zo4}QnYM>JIPC3ISlTH3ArzH13iQXPV0oD+$tX|+gBf!2|O@)jJCRXqU&BwT&e{KXMtGU;?Q@|X zKPN}Nqdu6l!1#+ay`uj7XoF|z?^e$pGE$LQ=>;?;BFZ9FxxBnM83_Si0Q;B>4F|b_y{q^;&p60}C$Qcy82% zEo)*Sb~WDD^Gt*4?8f8fd!T77SsFHH>+pWyV=x+loz{29GPD* zl5S3*wPtq{wMBw~1{l37u_Qlk_kDkxEvl8w`-&AD%X`+Gn3Yi*6EoVX#NxTT$M-!` zAjnTXVT@lSXv(hpF$=sA%*Ld+bjn-W+`$IP7i6 zM&Qa!r~_yS=#88|J@`VOtP0#44t{BAE0Mp^Y3Q2K2Wz2BM0KA5OqafDYqHLQqMVER zA^O!fNL!pitS)KOeSg+zO6uR2KEvAO-*CiJd=sxqu>A%momBO&OdOCtnP`SM)L<60 z*lcs==C_C!a@OWr*O<=MS);j6@dOX5mNqlG2Msf$E2sv(*JgtMem#61ZPA8N)tZdz z%Ako@;t7Iug!N!@GA^E!5#DTJL%o%R(ojNsc?P^U9!vOQR_a^F=Ln4cKY(mmA($ic zVjIrIrL$wmA`jBqkDPLd+Tt2xjZ};!?b2Usl-+!ZsBcze1HQpsrgjGNpC>S#6dT0| zMgJrnq!)4vbp|#&5?>A$Cws6?&x(yp2q_%6>t0qe(O8%Obp)1c7xZ7|n0GXO3GpLT zV;=w((b^wTQ3u=QjVTwcq)8dN3BEJMVe>VjW~6Fg!jCxULSFJ|Qq#lgk*(X_mdYU?LGm{&iy!^uR*I z?MWNx#fDE{+Hi-4Q;K3Ai+qW59nbPNqr`Zj!X^C&$g2a^`KaN`$V?5t3i<4R%uTZE!jW3IO>l2+4*S`@}Dc!9W;u5LHh&40ZQGbU=uRXiSz7hykb5fbM@lwoay&q+@D zhi+UJAld7EXe#05NSGC*Hy*Vk1Mlkk-%L$N+U_h&xVCy#n)fcNXP-Y${`EP6|AHDG zPMVJ}lN`acBIH3s*V#l*oqR2+bx}t5S!aqde+~H!3z$7HE7LKyCMNod19DvPe7{ne zZ0@GdtOUg${*A}p1xde-J1iJ3m(CTf(npWscKc>Kf)aY0=ZW0vuvYs7zB}Jq&ulT_ z#&I@8&?h7wKBl>8CG%l%zN>(Cn-`uu{R0$R+z>rm`}pH-^sq?Hx1z{6W~@{xpUJq{mw$ z#m~Fwb|m1*lzH)w3{Gozze*YbdKM7e=qvv4&dY1M^7+7DH2B5L{u~df5!fjm`uX?C zD`rk`d(c)%H>pHD8}Zk#)F)pahlRf3HOA7058=^+ag+?cvW?Uqlc2Xg^2rrt*G!_L zG+272y)FS*spgmhR^({$3o7r%XJyCVkq7n(-`O%R-OT^?6qNHCwcjak_tMGA^(qW; z+RnE2Jc9<9>pyNvmq#59GVd$;CB-5^Rl|f`ph#^t+gaI8gP2ej&V;xkVN5Yy6( z72tZ6p|0IdJl5Y^4;?CcRQe&JawG7sk|N4md0v}{-A;EDGCvO3I!=Dt-`2%>aCO<_ zPyQfS_PETNB-ZNrH^cGR+%o#6sXRZ7FOxRpE~d1+I&=5*vgv&)p>v*x>@vHP-OzDf z>jj*kNd)dho#*k2Z?^f99qy}>n<(tubY>Ma%$Dt@wD*a_jFJT*NZiqU`Vrj+Q(vevkK)Y&`z@{S zGaXs6Je)_O_D@3#*x56!%Kbj!dED!wR56$S7Gw_=1MQz6bqnU7#2Q!rDD#AQq+)8P zez!U47ryI`hPd?;*7mKe+_t;dvqN-EKK~6-NMlSo{(ME9nYZyLVue9N0WFK zIL~Wk-Q1Cj-Z!nD$Pm$bESMG+*e{)+SOo@xGjVyEmfGpbkK|8k0{Y#dFE+;3SnQe^ z`}R&~5V*9of8`XAh9=Gvo)Y)CBi#^cvzV~A`-5_o*hSmI{=G?Cq!L(Ddx{BRP_u$IMup57N7l4A^_JJ!HV4=fy~K8Yc`N#7bRy;7MWLhV@!D z!ZJ7SsEfy|a0yyCgZ$_*6Z*x(L{5y_Ix!Iy&m0XwYQu}nP*bh!CTwKCAj|b~?#e@#ph%*3Q~d-0+0?^*L_t=-mi-tn*a-)_`??&#|c_^2z`; z^U5-bxi#M+ub$pi-EOZu!v64_sTTa>!u9hJfUK*i^>!W{0>TH}2{kn$iDxYI8S~}L z@&LPDnSNXL!HoI{9@7~?$)@a6>?4YeZwNhsRy#tB2@dJL&a}mFQzvsgE=PO%FqcBc z=UEV+gl@E6_-TCBts6r%5pP1kkXI5i8HrMB(oKwm#?)~$1d)${Gand=?8$HwHU~Br zfaGPxOY|d7a;55Kx=|TDI2X+C;+aSJy=43mLr@gN&?x%(me<*)0}naM7R)BmGbNw6 zE!E|CVPP!cFJyaF4VdFpWVCCK!zCivxKhO}F64uY4%1g+Tw#|@!0T|_#ouFG7ZO8BsjnI+;O9CdWYkgYgl3&~IF!)cqluH)92pG@2uiM=O+8Fxs;G~33V zh8PORZrs0W8N$@5(M0^)@M@K)i8Cc%_>2O&Pmak})i$9Wa7gaJ3WNdfN%o2nrGy~$ zflw1Q23JjuN{6eZio`u>UQIj+lDVGzkQq%>?tqxN&`HtZD`WL0B7O-?oOy{vuftJ$ zVy1cSmc&sor?z(X$&&lg@?-$=Zuj!oIt(}$5hXn4PdPXlTsKYYa9p5r+x7i_0#=Vl zSuNYd4Kpw}+hHg`b#MBoGuV#1sbgId`*XLjk~>7$Gl|W@z>UYsi7^eC&(Y^b6tf1C zd&0}UqBk)+_-Z1%U?YSOF`<+%=R1MMXC@g$^(ZQVrU*Wx8^?D_5d$2xvI3r??rR;f z&#YY68f9auB$zIH&S<{CjgZ`IeVyt_GMXC8nugNxJ|JIDP;7fJ{BxU?w&0vVZk~-; zC#esP=9svQ$siyeJ;k6w7*({H6|5c&piV;=6cXq*cLw+-7bH$of9cc?#j`*M`fe3^ z;v#Xu+PO*_t>pH{2l{5yK+jE~n$YI#QcnIF84G2(kb;PM65q|_;lt(tcW*h6 zp_LOvWY${ zQAIfsY1~NPjDSNAJ=qaw}bEz8_S4pj}QZnVjoA~GMqa~yeqf52#dc1#$Y z(C`3S!+er~HE_62?2m71^n!1~2K?BIA$jK+;ZdUf_=GJ0h{9acHczPU)7)8i4q;1< zguQmGX!_i>fQWsNNha#~odE5HCPw;WQ4SVKECZ&jeXJV~PR~ywP#S*6XzhcdOrfF=E0C{)(sPgw_vzO>i;6d1lDG4uWpx&vjNf4m&dP2$g{=4Ozod>K7 z@hWUM8_=fRjMI2bhhLiD*1zU40R!C1iG{RbA)A)G-tFTmn?}_O-w_aTqPgY`lFz}F z4j@M|Ut_+@Z1B#}t$!;1-7qx^a*?b$KaOB^5JQMOx*SKR+v4@#r!QmUeny7x##ZM^ z3b5p$M!u8Dy~cC^Ii7ci9f(OphQm`&F6%>2IwHeRE)>?_EIexak9&?<+ZvaCv;HRs z&}G~4ltmNV{mkScH@r}@%wE7cNP5AVCHc%`3-s5`$WPfCwM8@tNux}jwtEbq6&nN8 zv)h6Ej;Ly~B((oo5)OTs&pL2{YZ5a|8AA#zMar;fe02xwaD3{st924eHU71B|^!JF58!zT2lDJ9P(1sVY1{!taXo&5y0_e`CGNs z<*G4Gu^90;8Ue0Ib76S`)HgCY%eH!4aswGf_}Ztd30{#`NyaU=Odt>oN9n_V+hAmacyIHk0u8@%*%bN)ood9LBeiN+`LeGQZ9m5Ar&=EoRlCaJfQ+zXr& zeOqgtPqc|dfO>#4)Flk^94>xRLR0w%C#G#{pV7GaW*r*J6u5G*he9e-@adAXdbTtF zJ=4?xAfHn%;7-md1mr6o2!vlOdb8@n&0^`5x7l$YAP7T>4$)&z`XQMjrzu)?m13y7W zSqIRlelCQrS~K*>`frHeg6;m?#kE;%G55`tz)ku6lEO$UvFSO`A0b4)*Mp$|lDC?r z|J!GJx$LuSKXArSH4Fs-Tpr)CD&_FP?AwC0;Qr7G@nv7RwZ6y3Z5+s5@Chj#(%iNp zgkUdyY#x*4Ujg;!zpWTo)?-k*&Q+LICEmg*V=}_ojXqxTzb1}*#mEnAkvNGwU=hjJ)RZwW0sdo(6%Id-2%@%$GY48Gl7V|M^-3t$#i3`JuoM zZa;YRW96BBJ!@7{&v^T)?W?fQsXC2sKiA`5b@fB4W)Y-!8BZ|#%GiTrA!%rb*lUSj zd)(j|YEMM2<8`@u0P#^*=AbFbfBl?DrYdQ4f&}%A7EVNjjV!J53amC}EbR3l{5;&0 zGJgk{OkEFz4gP$z(ITD0di{!v8Q;lZha82?ji49biZBEoe7K29e!{nRwZLQ;_M>q4 zXw6?TT9X(3$>!kq&jVi1!W==#T$O9k*z-WSaA%%X>?a?!<^#&8dCmnyKQ-s&@_M?3 z%O2-^t(ShL<5=smKRZnrV+R_4yx7%y|Hs4%)-G~)712!fZFgVu_N=XYLCxobRz0CD z^u=*yYghHA!N!_)ME{&R(*qA3!rq@zCRTg7FVTn9o4Uw9;-C+^gAGu~l3XR@tjDEj z+M>ze7#LuNto}2G>P^HT`%0~^m*yb2u-kw1=QWCkjL?c38Ri4&R2;7;(d;@*^|7m< z4~pkcUCie7>J`;mpI;+{JS@(0N=DBt0D;A8v<`5u&joZX{AH97$LNz?m$yl=$Be;D zNrK^LN9$b)M^dBHzI=}QX7KF;7p3#4LGbLr9R#PSpFbYJ^yZq!jbPoEC!liLLi~*> zA#ghCp|RX%e-azWMPQl-b#cIN2B8`a;MN^{JcWp-F@E9?tsp*J89toS(0Zi~|42e7 zvi)+lIgUKblB*xzFV1Jv7URUarFLg^4i+#NnVDck;jzk;Ch{xLu=jsbvTk}Zm8wNE94!O34) zWVZR^5)h-i5#rm`xqpQ`{POS*|LP`VYL3CTfJ|X6;?#G&P{Ra)uwu?ppB12B)`2hv zo1G8~OycwN5I*X>XcSBO&mzqV>f%+t+kHvj3fIU~wMB*}&pO%T{Mk`f(!`UMnv1K` z`IAkZ(tf%m%wj^Ff#mpU~zlgaonj_ zeyP(&=h5h1DaJ{fDxzSW zVXQ-h1~S&DWa1YtV86AfaFda1Tut|+Fk%9fr%zbH zfB>*J%}o{>S}mUI(ywCvZIS-^x-o~rE0E+2dduxA^TF^MpnAVeLX{Eqd#wSnwl}qo z_GMJU@yKnh!ld%LJc>v>7b#dE-^v`GY*&&|Qf-%irV=Y0YfOWXy26ju0>3PgHlHPl z0*kII0KQe(&&hA+0g4ZP8zcOINAuSG&Ub}NoOAXA6&~IH``d5`$bffCqgxVg(+572q?LRDdmiNIl`E@1qyXphr*F z?BY?G>{q$tI_-h7x+{3If8lo}_)&64YdKgE*d+*D3|Za_oo8fZi?u;G0EnAat*6Pv z6}saATyS^DxGkAgvq@W(GaB?!iy_9-PKd$G9EKm0?a_<3kip<&jUtjsGPk;htk`g$ zHpOxj@nQ7l>JqC#AGk`9b73!vQcMGRi??=84QHvX;y=4!^aL&T8i^CRXyVFmq=>^1R0# z4|K3MuJJx%xP^>WMEXDwnnTt8D6}=eT z47#67<`NCD{Qyj>lzS&EPWSPoZ`Pl8BUD@%LWa@zV(CdUcGmG=7PH?=fK$gkUQv-= zrS=&%>bBtr_xez0G3Ft%ys>2&(ao%1`7L#%@$!=?FI8?sV{oL;it#b&CS&n$W>covz* zbsJ8{cufpkhA3I@5X@Ztz)(X3G$dpbqXl!e*yB((3^!Ycv_=)U&@nEExeSj#8aHqk zxP_=9&jd^=Cyb=tOl}_H_&o1J|7R4U;45;%bLY*+S-6h{fSI){Hf0i<QvqS-V$CCWUOdjdU@>0vii4NSLbK<4i5SQ7xF@r!MP1tbCd5;aQNY0jtc zy`$tHUS}y8y_j{p6Ni_AkE4kE)>-BNn!j?F80F>!3Hu*1d?#8#%!k;711|-z?LIPU z%ujBbLsvw53XjQcfPM@@Ef2kkQ0mEYG%CZ*pG1}%i_-G)3@;ETb&<`L_6OYt_82}3&QGI{mF+wHOrXr0e4Nwi5*$fK%Dc);q0$xe3MjQ!|)|T z(3Lw>5on*)m+buc%K}G-gB~M`g(4`f$!J~BCT<&31r))J zC*!SEM=cU#t=!pXrL$-ByGTGh6p$Y2+kMqrP?*^n!;m+3xu`7Q$01 zkgFcin|0j!I^US6r#<~f0w)Dt_hkC=34D7qbL;l{f5+sAwR`PT&=Zff$~PaaL5#6} zYQ56D&pg?u@Myoxx1|}s3~KgZf*^GsUSVOVx%8Lnq~>@657w-h@R~^m>6$Q}rTp~& zN2JdV?~M})?u5zabTB*)3MbZLylQi@nbD8*VN*4Up28{HuCgc0t=hv^XK1v|@=M>E zG+#I|WbLvEMCQnx1UW`S5$)g;a^0P>M&++=+c@(g)-LLk!-Pg_5)DR!d&^*N>Z=4} zke!2r(+iJnr}gBzN@EmjhN&ow%5WI~!1bGDZZs_7J@CLTA1@lkEjVeQ=ACw(WHwG>JhRYV@3NslE7BoAAFznRpX*P7rH5v6$v!1SYL>% z@$f#-1T{-nYwRE7iW8bRJ5A#hF8S=dt$Z_=97}AMl+g@hYA__?CXehFvN?5WO`41+ z>#4>z!PM|?;yOeE>^5zSjVZK?0d^QlxCdH1*eu@4Qy--SWrk**$An`n1wH4iTQ(gF z!UwP?HY}l39Ujvy!x2M{0Gh$T^94_nTXBY*p_!4Zdh4tt3vAknwFfp&XEBix389C_r2&|^ z2lpCLCotP?u(|=PnJp0mcN)%e;ZbG4r1NOzIUPS0l0?7&aONcG%eY?Jct`(O7=mLf z=Y-lW(0O|YcV@=z3=P@`_|6J+mp>2qj1x_OqFK6v7*C_?Fe&ui%IejuOa%9wwjUm9 zZIPVGEx$yqe+=s;4+E{<-js*JI@_Hd>GC?GxiL3pm8+dG&CZZy^Ct-y2iNnM@K=LM z%;~mwRjS$Iv)s8(Pt0{VH>Ja*W`{M<s@@}eyA&|O+ea4lX(lgh~5e$A96`Acf8r4_*TO?lh%*yR-H%h^;?p$ z;?d)lua#rl@CT&QZDovexr%wtPe)`uovCQuTF&rVaU&Z78Av=v^(Y0>vEl@RVRX1C5k1jTiz^#1&@K^p5*!H~%Z;S^ z#QC@EAv$Wwo0CD77~a7%9L*~fIW9AqcvL)CFH)bpVGu(-G+Fm(&OB@=^58eaGHI@O zyLbIPX3lQL?e{1WGxXCWdi$kIx5p4T6}x$;Nu$T1H42cq}~@`vH`?e!FQd z4vq%X&P$ic0%DBK17XQF+3Fay$(`_iZj|lD0nJl!bNxib&?0Pg9cOAI(PPRe&9)g~kCL+^9Cf>&~P57+(mSr>(@8OyZSaBhMgsFO#@}Y@Gbs53V z^o4mh5p$-CF9y{~w4|qiT&42fFSgUvi2=Syh?R_q?B5};n(T6>A@yX>#hj;;KdVpt z-{H9N`k>(LS;oYXMN#`k{}OQSs9uTOST}Gc$>lSfd7nIlQ^o*}Z=DfvPr=QDM0pRnbS$*NJ#w=} zo{wZFHIqJhF0BNprS7WV&tL`PgbTALtPDzndQVC5pC?XO^nO^|JVgv*j_P5$768;l zUwkam6UE$x^}mYo{qfpOu9Gc(o&>Q{o$tdsQg?*}^p3aB@DzIjzw?Np%Ap#KFIhj8 zv3;I95SAS-HwEcFF}<4)*{eIrO~3T1(|rQY=aFqa(0L`dDS^Jc5}0;g>^Bb1*o8&q zK;fUf4s~Id=O1x9)IM<^yRu!DOqRMh|N0kGirHwjeA3sd~{;N+7c(32WQTw z@HJOGZ&tuTt{vd)fh;{>9y>+y*s&SL-ugX3mEP+&p-dbbf;~w+^IW%z;c-k5R7^~m za?0cMIU8*)~DKZ=3|So&i@O8o*2=A8YG;e!w>3abk#p?{yF9 z0)!HmX-GUsk|-azH~B;fhO}?{r*MG(X2oERF9N&~)U6r?0|hK=cWej8MmyokoWxoF zdg@Z!y#WB9WJxaFpsF=S6uDK6SXHA>Qh@d_#;K@C_;XKC4tqMv9hbr!Nas!~dOawV ztT7U&;;94AIU`~`n__Y1Onn9`Xo+nQus)?C2-=wqiekmJhr-(pLvX+dU zjp;l)7uXNlo;W1W7TE}$A2YOuV}7?&zcYpgMqQtH7+1ZtpVGXKZBMi$>V_5a9UQc- zxQ@CMH+K(oimgQ5qC?j#$@KdSZ1f(##Wx|$R$>s$)JN_FxNkzp!4f%k+@Jn^Nc?*k z)fMht&noGmqKVE*%rZR0=z5-=mU+RguqJme*7}EY^L%LwNE7>ji~G|i<4>00|0U4X zK0e_^kKIiCbG5t0edLS7)3D3EV4d_K4ffN}k>m z+rzkhM!eQZ21RiFE+7Z8-X5S>NUs~->wpj`Q>%M;o)vE+3_#%H3xLxmGCWx1!jypy zlgzS+S@e7{(#Gi&B>c-0#l}=flBEy7bl-NZd+mWSmS9R=ufV`RVKY#Hd$Zxf4py|? zMhBCe=7Z)=I7IFT$v4Y4o*OP_vj|?)90_wzN#gZeCK6+4Ar%H|r80oC<>VGz_(-IL z$_LYwlR~5TDwY{|YR{ekezV#)KcCRt0J3j1RuDrqaG6}8kL{f>@QcM6UxA1Bc8@hu zl7|6C=`q#I;;%5Um_!(uqtub^2|b_z>DxDS&9lbp7u8V4+n{0~%W?_GZC>2?;8P>q9iU&YgXX zgEcQ@0J!#Go;CQF5@>OlX9l|!wuhb#A z9n&Yn3{fivdnd@`yzeX(# z7$w$aL-hRbsHZgUVcvSJea?@>^5UEO;HQ=`D&U_wKkm?|Qx#m0%peiH%BM5u;oZz^ zyRenG^*xFAy@c*(8Q;(Zxy6lr#tLf%QM?37eQMyaI^t+SzWb+QyxC=-?#G%5=Md(J zGaod5Wf=(om9{lhR~G_t5kbsNKbeJ7NxFl(j!%?#VzOil;j!i|BjtE8pLY*7*%m0$tmDz zji|I>OhY7V!IvKvI2g8rq4^&QitpI1eA3dpk zD2!X!bs9yh%mWPfzR?*80%Mjox`7RG5Aw9w)DJKX5sU~m1eH){i7jc8|#%FBS+0eQ<)cjt>)bGBC zj7^!G3fw<&F{qx5$P<$%a;+VK^Q4)CfxYvAyLB*|n&iQ_cXU^fymHsko&#A^RYe+( z0JZ|qZ{}&Dg{grJ`e4P)@;avEv3VFDn7y-xC47 zRmoN%2rz^5OySp#OOWnLdt(+Qi;MHA7VJjOAQvN8ZkhV!FnwO+BeIq#lDthNuIZ0> z4biD6Onm#8x|)H{M4-iPa)5JFxTB;hE#J9!PahWm&2h@+7d)flb`xzkHxHNM!_2QL zc7Uh>tLH72Ys@yQJLd_`KjGnzpg=2hQ-Hqw-Ix)}PrHe-4slFRNnyd{UVSRx)cyf{ z^>choM`sgy@B1EUaO`+8iH7lPbO?}@Ckc(uKGp(z4MLgQ1QUVgzrJPKCSV9MwzY^XpHXD)WCEyS}qf-6HR~P`7>5AMcU3#M_JlvpzpLVc^MQ- zXnK@J=Ihfp)S&dqEa-&P$<*YTeMLgicbQ82V)zpsPd*`?iiB`_h74rL8U3!|@Bqf)`c3_v zDK|0g-o;pF*~svr9;4&V0X<_sGiG#UZ_{M`iNSUn5ETKmlIfi?2lEthvB#L6vw#z2 zh_Ep1zSQLxmg>c{UW$Pv?@;3H%!Gk^DuT)ySVGv}BE%janq&g04LD^B( zF_qB>$Il5=;!O(d+Q#d&0|C&J7j3nb+^iWz;7VDPu^FWu3Sa(Wk8e+ldwy94T6N)S zK;BlP;dmCUqtIxBurK|EE>xRdK3>zEKiS=3QY{2}(OA-^e&>(iu3i`#sdI}tcD`kg zgUx!vIyOK?tveMJ=q6ogwmp*ZRdz|AR6LO?p!#_s%X`vkrf(7_1-U^3Ds}G+7a|i@ zjVHC!NjX#C4PCT;)>Vt--br>fNrcc?5`>FsTEuq8=6RSAfb+V|G*yjJ1o`XWRh>%~ z#Ol>Mja<09jmB6$1|91OWOz+nsYpK;K>k>w{?`O_`sL(Pn4&W11MGdpz;|M3*NKCp zDVeg=gb$0fP+~i4pnH_i9c7&tVMn&_&NxQ!N49u<4@RU@9u$&sVfG^OPtsRvEvg(KF6bC7_hg( z!hSDH{^#L-YJ_$%nI>b%r9j3h4+cR#w4_P@JB_;q2QKE-+HJFp42+ht4FSqN&kh8h zna^EUO5${+7BSYY%Q$Q{KlcxxWGfyI4>iA_47CjfkVn2tXBNq9#2p()*nEDnOEl}z zh?{v`czwU7-l+gzz&@>W#)WPx#J|ls$Vl)`tK%;Es^{hPxnCCDMopC?@50B*&2X@5sdlKVBY!u`$mZ)R)HKuDZqoNV#Kt z)u<&+UO3}kYw;i8a=!SLDffO8x%kfc7nH&7k-3f5I0ST6=STXrPUB+&qfkigg;5r# zIJ39=#F|s@jYh@79hbDPm+oUJ1`$Iw^n6OG_EVl#PiaND#Ji+qw%%sM&UAW`(3 zd`!?HL6^LWAmW1`5-lI;PZGb~&J)?Nn0)+|0luellNK*wuCO{gv;fa~8hi!;0$hEB zxv=~aJOXVjsBk8*wk$d0KM&mpAdc%sd>Lc&QsiQc&Y;-=J0&M#d^Q))tkv$~f+?D7 zfBmIsZIo^!!?`O0KAVihWGWCiB(pj@ioba7rtGTpKR06|He(XPp;1|!{U-s*K0;0a z4Y^D@#?J{sj5o?<1gr-(lgc_=r)Q$>2Sc8rkpE7`;UtSy7TvhNFUunFwo(JnxDjO7 zR&MmQXr}*36R)jJ9eno9Y1_1+1cvy8i^P1wt0z}pN6P;mXCbR-PTS)4Zkq*Qy*8kD6ox%-w z!LkCg-(MAW>9w+$7XopHjr2Soah<_KbbO+vej|~Z0jJBN=(z{tq7!gERV2#b;B#a3 zT*BF|?XG0g(|A^^{-;Lbu{4`QoG9Qpwc*-Wf6lyVTprhhZ*Q}57?-qfoQ(!o0Yvr2 zHnHb78oq*o=H&&`nLg=()os?^pr=(#4XZCAxKDp0mXFf_bxD>74TJU^;AZ+sSr0sE zzPKFsu)X=42)KD8A@tjP5Mujl{+OlbxYs#b8LF8B3?}xGCRcDwyxI)${W^?F2AA4G zNAjA;dARv%5Ug)jWy|aR?X#@6{BbwCj(W%q&QAQzCu216NqBCd@{^!;af zbw@k+a0dU7vPNDijgmG@<7Aj?<*9z!9vn;UGX^AzuoC(M@68syYbz0hy8f`*cGAtD z?_Mm46i?rLSKlipvvez;LbQ`t8ymg-Pz+Q8x^70Y3qTAMw}*{;|tp-IfE}oR|sY@!sH+RZ|M>fQL{*dkBH%SVN>(a z4sbZz)l5gZcOD)XD+|$e$Lj&K_a3^q_v0v`!@M7GJiV z8;|Y&Bxg9YDPpnKUhH`96ZQAclUbCkN}I+x2wwD#$-&79fERzVj8=+npmGD<5@uo6 z+(hzs9oIL>)9KG$QY6=!@9X)K?mx!8OS$F2&!~aE^}(A--*c<56Nc$YlNf{Il84=o z@9FSr%Z6qVh^M8GO*wEXD>b-ZqW|+Q{5$!nhugeD$NqPa4u4yv{w$Sd>iJyJ=+L?bmqa`=;6n z&)VqMCmloHvX^wauOQ=ot1UZykgGXW|P)$fk#PhT9xv0z4+is3d@unT&!S7qLA{0(D8 zaz6R1AEg4r$DxIJ?B;P2qlHa6_^N}fKNB%CFq~K@QQ-J^lyv{e)lMd}5c58Rz#QgZyNuw3u~TqR4|z!?Pq18!snhSKm-8mnge~Hl0%=#n)t+ zprgf{-;#HCRw?{l zj`M~*?s#+jbGAum6WtSiw#3dE;CdpSCG(@Of)kD2>{X*uXMqeCHSR0s$>AQy0`>T@ zH_zIxz8Mui-l9ztY0$0opVwR=0{56&`_iwdEzfHWX#DGj-y&B3hX-q0bJjrSJmL^(kF4`Eu z=gl~o64GlmSVOBdAKP*r5kH7keyVg6otk(ZA7JiI{<03nG?#LPcbPOMBWCbP{RZBv!!v~Jm(X65P|#4kMPtF#dd5s~wiA)%+Xk5BH3yQTnPRo1dj^~GXJ_%cnTgxoHfp8FMX9*|Bdt#of&d>c;07#xhT>G3y+Os+U9U2T| z{Zk7Ec&%4iQw_n$OsrS#BkGX8ZzJXtMf9=8L>D=cdBI>MA18|OZTD4l;Wd`C)QR{m zK!hwe20@l8g58zl!YA&2mxm@D;zN{>dc%3nRjqnP$S?4beeYE^2lB-|#9fZ( zG3RGm@ascN1^!Y0D;uE?h=Yq0zI41_xerxK&lekwW80}D4fsp)7kK#~(hp}Bh?rJ^ zSHmg{)rj4!H(ocw7w*KrFc?Ku5l?l`fA;+$@d-yiQ5fe z-bEO)D8bO!)Mju#Ii_Fk_CNne&k##gIv^9ZL1U|Q8;dV*$(&q;xEkN9E_H`R3to#OA zC%C|v%hGdJCKu$%1!q1OSlvu1>tW*~Qr!ZR+KBZtlkO|A%NTO6Pu^GSnHRoEaPi^6 z9y|-P0yQ{W8izEIq8AdM$5=QX6#9*9U%AX?Et1!FNsyf5a#wEu@s!*;RPWadeX3JG zhs1yM;>_;!#nr}FuLQ=Hk!mQbo;`Sue5(FuP7wSt@egaRhmhKHxE`W6DaTj5UocT0 znqX4~aXrWR0k;~w^aZ5LY1U0$)QS$*s4XMW)vN*NS9*5)ykC6C`y-gI_371dm5o@O z{UNN3myknR=O+dw;UL+}6Ja$0@lYp^!ei{`XYb*V-^*uh-PS)oCZoTq!u}Y+rNLw# zT87rGU0Z$eK0Mb3PcovFujdG__=qHrZabe{Bz0=#Nj$JNCxm2vqSFB4yQf01^# z_NaEZ4E%EbCFcLbTr;X9+&7k(`5k*1h))0TXTJ!o80HRfk6nd2Cwar;a(7ja<3}`$ z(Se3a-Vc8vcYOHuS6ltOU*906C%h<9VV-Til5@5@Es~jZWH~O_sW$xt+T)*mfdUr_ zM;APqp7Idqy!0$O!HN*1CGWgmTocOgUQXPqYRW3b6K|Fkck#;x-;)DxZczzMj;B&aipL*+lpD+hNyHvVc5g(4;~qH`T&~h- zV?R-fFjR)^-*J*_(gS4tf|JUwiRf6%wyXve{NLfI<-@7h4x@hzr%#A656t) za^#nz^!_XNvT8TVCgJ-pD|xg5Htm{vvyGg|r&4V4dUuYn8a*QGz#=)4t0EQ5`)r-I zbKQvB#GDz;JY;~IS*n$^etqH+`DWoG?7pWY7kw_q<=H@%5~c5eu~L9>cx_OLr9x!B zr5y5tU#gsxgQD@LM|F}gXktRL#{qcL=VHlW69nhxRNN#ZE2>^t+JR+#g$s2oCI#aC zoeQ(`{7~HaGT}^x55VOC&++wg_W+*t1U5tw>1y>UKgyy=0LOO|s6^z{b#9)z$_mwZ z>nS%Zc&rbv5W2wni+Vw>&^31RDH-is2Jat zS=A(4{c^G1(9G$yna&LiX)<23?CHf?_!--j=@}fmcg7(L4TY@w z-v=9wYh{Gw_!h#(nFJ9Ycjz1j#;Hv9iGDF@S47CvAzcrhw zEq(XJ1uNsNN=@T*(Kp$j$OEZn?V6YDH9(5FlWte$izc|O!z3aYOvYC=@~LqLaIcyj zX0XzQsvi6tMp9cYnxMvWn{9-7fDewXvhN&dVxnzX*&H(fi@s#X)Xqk*DP6C8WB&Xk zy9LuE$$Uih#=CRop5WK=MVp6V+t!_b(s`bfkEEO1SDqn=IX@_4L)U5MV+ zh_!YA2KO#<4$^*;4Zq5=C&%*{OqpAwWnpQA6r%?At74eeQl@I%_&CRgV{ebdBKqVApnVx%1pzYuj;NXcH9 zrCIy3Y!*WRUbmrH(yThesHB@Y375mKjee9-1gi~*x)u8|ARo=EN z;;wwdQJ4LB#??JqC(#s1=`4;Ga z!0gGsUgu-jDCO4Y>qGj#B^2WNWL^CR{bXy@1dyT%O!j{HoZ>nXW5lym*!oV}MhGPEj=(q@HK>y^MTXCFt!i6FZg%|M-td-L*tO(Ij{usv zKQ$chqP+u^#(mUOR`W#W6BCa2yOk~m2fWYh>qN7dl*cGbbt)26an~QC`{uL;i@>Af zvu`9YlL>AYt2OiPE8VISzRU}izleRZ)FQtvG~M)qg(h#dV_#d`2m-BSwXXp&nN0Y{ zn1fb3Czx+iM<3@kw^f%aSKfLf#uKwxkerC6R?qYy{rOXFGC20?{-5SJJ}{Cr&Tm6m zQ0qi?83~{D0Jd|mFdLSoxgoZ4?%Jm2YS#ojB8OU~r>0l|xG8dSPxZzmz9#sQ?ako8 z+Gk~a1aESESC{rIDfM1L1CeXI5^nssR*UV?d9nVcP)2Az-noPG1wTIvwp=MA{6ARd zHOI*HH#K}ec9nsPd2~c;zJRZd{*@(0mLA~hhi`?vU>v1pAR;>_bYNf_zO9V|Vn{c`lK8sn+f!mKqO0ugf$qXw`F#z9;wB z_aZnCfkR+)9=-_o==2>f+L6jxMKw0A`3n*j!~#$eiRjLx2dazXZ|hbZj}@y*@YbJuFE>Kiff{cB&e3cJjm zyTwR5kl9i3Qx0|)7}IIqyzq#--tr6JyQ4b#e=Jm40ctiGMnImz(tc~5^FN-;69eq-W&SO(x8L5mN8{Tzn5s68r~{1W)4>NJYPAK6rFt9`SP;;o;XL);lSU zOd_DS83Mn)XhQ=iKNxKO6LnU`9Ad;w)PpKTCQi=lG+yBJhEcO?`dtZAibso_cUCJW z&=;XJ=rQ|61YpvL?Q{y=(Y)ChQvppy%u7k^va4MC*NguHWk=_|UX Date: Fri, 30 May 2025 17:52:17 +0200 Subject: [PATCH 02/52] Add an introduction to the Explanation section --- docs/website/contents/explanation/index.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/website/contents/explanation/index.md b/docs/website/contents/explanation/index.md index e69de29bb2..4003aa4d58 100644 --- a/docs/website/contents/explanation/index.md +++ b/docs/website/contents/explanation/index.md @@ -0,0 +1,14 @@ +# Introduction + +Welcome to the documentation for the [`ouroboros-consensus`](https://github.com/IntersectMBO/ouroboros-consensus) repository. +This repository houses the Haskell implementation of three crucial components utilized by the [`cardano-node`](https://github.com/input-output-hk/cardano-node): Consensus, Storage, and Mempool. +- The [Consensus component](https://cardano-scaling.github.io/cardano-blueprint/consensus/index.html) implements the [Ouroboros](https://iohk.io/en/research/library/papers/ouroboros-a-provably-secure-proof-of-stake-blockchain-protocol/) family of Proof-of-Stake protocols. +- The [Storage component](https://cardano-scaling.github.io/cardano-blueprint/storage/index.html) is responsible for providing efficient access to the blockchain data, as well as maintaining the current and recent past ledger states, and storing ledger state snapshots. +- The [Mempool component](https://cardano-scaling.github.io/cardano-blueprint/mempool/index.html) serves as a buffer for valid transactions that are waiting to be included in a block. It is used by Consensus component when forging a block and by the Network layer's transaction submission mini-protocol when adding or getting transactions. + +A core design principle in the implementation of these components is the abstraction from specific ledger and protocol implementations. +The aim is to decouple the consensus protocol from the ledger and to support multiple consensus algorithms and ledgers for improved adaptability and maintainability. +This design allows different ledgers (like the Byron or Shelley ledgers) and different Ouroboros protocol instances (like Praos or TPraos) to be integrated into the abstract consensus framework. +To reflect this design, the repository is structured into different sub-repositories. +- The polymorphic implementations and abstract classes, which define the core consensus logic independently of specific ledger or protocol details, can be found in the [`ouroboros-consensus`](https://github.com/IntersectMBO/ouroboros-consensus/tree/main/ouroboros-consensus) sub-directory. +- The Cardano specific instantiations, which provide the concrete implementations, reside in the [ouroboros-consensus-cardano](https://github.com/IntersectMBO/ouroboros-consensus/tree/main/ouroboros-consensus-cardano) sub-directory. From 55900a34f396eb2e7f4b38855fb7fb7efe280d72 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 30 May 2025 18:50:03 +0200 Subject: [PATCH 03/52] Add a "Design Goals" section --- .../contents/explanation/design-goals.md | 61 +++++++++++++++++++ docs/website/sidebars.js | 4 +- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 docs/website/contents/explanation/design-goals.md diff --git a/docs/website/contents/explanation/design-goals.md b/docs/website/contents/explanation/design-goals.md new file mode 100644 index 0000000000..66ffdf66f7 --- /dev/null +++ b/docs/website/contents/explanation/design-goals.md @@ -0,0 +1,61 @@ +# Design Goals + +The components that make up `ouroboros-consensus` were designed with the following goals in mind. + +## Multiple Consensus Protocols + +The design must support different consensus algorithms, requiring abstraction over the specific choice of consensus protocol. +From the project's inception, it was evident that multiple protocols would be required. +The Byron era of Cardano utilizes the PBFT protocol, while the Shelley era transitioned to TPraos, and Praos has been used since the Babbage era. +The consensus component must support not only the current era but also past eras, requiring the ability to compose protocols. +Additionally, we must ensure support for integrating new consensus protocols. + +## Support for Multiple Ledgers + +Similar to the need for multiple consensus protocols, our implementation must support multiple ledger implementations. +This is crucial for accommodating ledger changes as improvements are made. +Abstracting over the ledger implementation enables the consensus layer to work with various ledgers. + +## Decoupling Consensus Protocol from Ledger + +The consensus protocol is designed to be independent of any specific ledger implementation. +Since multiple ledgers (such as Shelley and its Shelley-based successors) can utilize the same consensus protocol (TPraos or Praos), the consensus protocol is defined based on what it expects or requires from the ledger rather than being tightly coupled to a specific one. +This approach makes the consensus protocol abstract and reusable across different ledgers. + +## Testability + +Ensuring the thorough testability of the consensus layer is a critical design goal. +As a core component of the Cardano Node, which manages the cryptocurrency, the consensus layer must adhere to strict correctness standards. +Currently, we extensively employ property-based testing. +Whenever possible, we should abstract over IO, enabling simulations of various failures (such as disk or network errors) to verify system recovery capabilities. +Additionally, to leverage the property-based methodology, tests must be relatively inexpensive. +The design should also support testing rare but expected scenarios (such as multiple slot leaders in Praos) by allowing overrides in protocol or ledger behavior at specific points. +Furthermore, the system should facilitate the isolation testing of individual components. + +## Adaptability and Maintainability + +The consensus layer was developed as a replacement for a [previous implementation](https://github.com/input-output-hk/cardano-sl), with the immediate goal of transitioning from Byron/BFT to Shelley/Praos while supporting future ledger and protocol changes. +This called for a flexible and adaptable design. +Abstracting both the consensus algorithm and the ledger plays a crucial role in achieving this. +Working with abstract interfaces prevents developers from making assumptions that may hold for one ledger but not others, avoiding costly fixes later. +This abstraction also allows the consensus layer to be reused in other blockchain projects. +Most importantly, an abstract design enables extensive testing with simpler mock ledgers, which are easier to set up and reason about compared to the complex real ledger. +Abstraction is considered good engineering practice, enhancing clarity, reducing dependencies, and making the system easier to understand and maintain. + +## Composability + +Given the complexity and scale of the consensus layer codebase, it is essential to divide it into smaller, manageable components that can be understood and modified independently. +Composability is a key technique employed to achieve this. +A prime example is the Hard Fork Combinator (HFC), which enables the combination of different consensus protocols (such as BFT and Praos) and ledgers (such as Byron and Shelley) into a unified composite protocol or ledger for the hybrid chain. + +## Predictable Performance + +This goal ensures that node operators can configure nodes for "normal circumstances" without the network failing during infrequent but expected events. +It aims to make node performance predictable, ensuring that the best-case scenario aligns with the worst-case scenario in terms of resource requirements—not only for security but also to maintain network stability with honest nodes. + +## Protection Against DoS Attacks + +The consensus layer must help safeguard the network against disruptions, making denial-of-service (DoS) attacks prohibitively expensive for adversaries. +This involves design decisions that prevent attackers from easily causing a node to perform extensive, wasteful computations. +For example, validating headers before downloading block bodies prevents attackers from forcing nodes to process potentially invalid blocks. +The design often seeks a balance between the cost for an attacker to induce work and the cost for a node to defend against it. diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index 3bea79af45..67ee661348 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -21,7 +21,9 @@ const sidebars = { explanation: [ { type: 'category', label: 'Explanation', - items: ['explanation/index'] + items: ['explanation/index', + 'explanation/design-goals' + ] } ], tutorials: [ From b73350d76e7175d7963e825bf3c3eb6e7ca5d8ff Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 2 Jun 2025 18:38:22 +0200 Subject: [PATCH 04/52] Add a "Interaction with the Ledger Layer" section --- .../explanation/ledger-interaction.md | 29 +++++++++++++++++++ docs/website/sidebars.js | 3 +- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 docs/website/contents/explanation/ledger-interaction.md diff --git a/docs/website/contents/explanation/ledger-interaction.md b/docs/website/contents/explanation/ledger-interaction.md new file mode 100644 index 0000000000..364e8cbb92 --- /dev/null +++ b/docs/website/contents/explanation/ledger-interaction.md @@ -0,0 +1,29 @@ +# Interaction with the Ledger Layer + +The [`ChainDB`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/API.hs#L113) component, which combines storage and some consensus logic, uses the [`LedgerDB`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/LedgerDB/API.hs#L23) and [interfaces](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Abstract.hs#L10) provided by the Ledger layer, such as [`ApplyBlock`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Abstract.hs#L93), to validate blocks as part of chain selection and initialization. + +The [`Mempool`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Mempool/API.hs#L50) uses the Ledger layer to validate individual transactions against the current mempool's ledger state. + +The Ledger layer itself defines how the ledger state transitions upon transaction or block application, or via time-based updates (ticking). +It also provides interfaces, like [`ledgerViewForecastAt`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsProtocol.hs#L71) within the `LedgerSupportsProtocol` class, to offer limited lookahead (*forecastin*g) of parts of the future ledger state ([`LedgerView`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L94)), which is needed for validating block headers without the full block bodies. + +Below, we list the key classes and types governing the interaction between Consensus and Ledger. + +The [`IsLedger`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L161) class defines a fundamental abstract interface that a ledger must provide to the Consensus layer, independent of a specific block type or consensus protocol. Its primary responsibility is to specify how the ledger state changes purely due to the passage of time (see [Ticking](#ticking)). + +The [`ApplyBlock`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Abstract.hs#L93) class is a core abstract interface in the Consensus layer that defines how the ledger state is updated by applying a block. It specifies the functions needed for this state transition, operating on a ledger state type (`l`) and a block type (`blk`). This class is fundamental to how the Consensus layer validates blocks and incorporates them into the chain. + +The [`LedgerSupportsMempool`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsMempool.hs#L116) typeclass defines the essential interface that the Ledger layer provides to the Mempool. Its primary function is to enable the Mempool to validate individual transactions. + +The [`LedgerCfg`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L127) type family defines the static environment or configuration required by a specific ledger implementation. It holds the fixed parameters and rules that govern a ledger's behavior. This configuration is passed to various ledger-related functions used throughout `ouroboros-consensus`. Different ledger eras require different static configurations. For instance, the duration of slots and the size (in slots) of epochs[^1], initial delegations or assignment of funds to addresses. + +The [`GetTip`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L62) class requires that any ledger can report its tip as a `Point`. A `Point l` is either genesis or a pair of a hash and slot number, and it is parametric over the ledger type `l` to accommodate different hash types. This class is also required for the [ticked](#ticking) ledger state. + +The [`LedgerState`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L244) data family defines the state of the ledger at a particular point in the chain and is associated with a specific block type (`blk`). The `LedgerState` encapsulates the accumulated effect of all applied blocks and time-based updates, essentially representing the summary needed to validate subsequent blocks and transactions. + +The `LedgerState` also provides a necessary projection of the state that the consensus protocol uses for tasks like leadership checks and header validation: the [`LedgerView`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L94). + +## Ticking + + +[^1]: Byron era had a 20-second slot duration, distinct from the 1-second duration in subsequent eras. diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index 67ee661348..a55190a702 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -22,7 +22,8 @@ const sidebars = { { type: 'category', label: 'Explanation', items: ['explanation/index', - 'explanation/design-goals' + 'explanation/design-goals', + 'explanation/ledger-interaction' ] } ], From 762d4339a1a7e5295a4e1b31994af1eae126b7c3 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 3 Jun 2025 12:22:26 +0200 Subject: [PATCH 05/52] Add sections about ticking and forecasting --- .../explanation/ledger-interaction.md | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/docs/website/contents/explanation/ledger-interaction.md b/docs/website/contents/explanation/ledger-interaction.md index 364e8cbb92..700d686439 100644 --- a/docs/website/contents/explanation/ledger-interaction.md +++ b/docs/website/contents/explanation/ledger-interaction.md @@ -25,5 +25,85 @@ The `LedgerState` also provides a necessary projection of the state that the con ## Ticking +"Tick" is a common term in discrete systems for time passing. +Within Ouroboros, time is divided into slots, and to _tick_ a state `X` means to advance `X` from one slot to a later slot. +In the Cardano system, we tick a ledger state, a protocol state, or both at once (see `ExtLedgerState`). + +The fundamental use case for ticking is to advance the ledger state between one block and the next on that same chain. +In Ouroboros Praos, one block and the next will be separated by zero or more slots; usually several, since Praos relies on time passing between blocks arising to limit short forks. +However, applying blocks is not the only reason the Consensus Layer ticks. +If it were, then ticking wouldn't need to be a distinguished step: it'd merely be the first of however many "hidden" steps are involved in applying a block. +Instead, ticking is used in a few places, some of which don't involve immediately subsequent header/block application. + +- Ticking advances protocol state between headers. +The [`ConsensusProtocol`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L66) class defines [`tickChainDepState`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L155), which is used to tick the protocol-specific state. It takes the `LedgerView` as an argument +- Ticking advances ledger states between blocks (via `ExtLedgerState`, this also ticks the protocol state). The `IsLedger` class defines the [`applyChainTick`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L214) function (via `applyChainTickLedgerResult`). This function is used to advance the ledger state purely due to the passage of time (slots). It handles state transitions that occur solely because time has passed, such as scheduled updates or epoch boundary logic. +- The leadership check ticks the protocol state from the selected chain's tip to the wall clock's current slot when checking whether this stake pool should mint a block. +- The mempool ticks the selected chain's ledger state ahead by exactly one slot, since the hypothetical next block to extend the selection has to be strictly younger than the selection. (Only Byron's Epoch Boundary Blocks can share their predecessor's slot, but EBBs also don't contain transactions.) +- Today's mint also ticks the ledger state up to the current slot, to determine the transaction limits (`size`, `ExUnits`, etc) for the new block. + +The ledger rules for ticking involve some crucial concerns: deadlines come and go (despite being enforced in block applications), epochs begin and end, protocol parameters change, and even the ledger rules themselves might change. + +## Forecasting and the Forecast Range + +_Forecasting_ is an alternative to ticking that also represents the passage of time. +There are two key differences between ticking and forecasting. + +- Ticking is only sound if the intervening slots do not contain a block; it is erroneous to tick _past_ a block on the chain. +- Forecasting does not produce a complete ledger state. + It specifically only yields the parts of the future ledger state that are already fully determined _regardless of blocks you're forecasting past_. + +In Cardano, the only thing we ever need to forecast is the part of the ledger state that is necessary to validate a header (see `LedgerView`). +This can be fully determined regardless of intervening blocks because the ledger rules ensure the relevant parts of the ledger state do not change without a minimum duration of forewarning (eg by retaining occasional snapshots of this data). +That minimum duration of stability is therefore _the forecast range_, beyond which the code cannot necessarily do correct forecasting. + +Thus forecasting from an (unticked) ledger state in slot `X` to slot `Y` (within the forecast range) must be equivalent to ticking from `X` to `Y` and then "forecasting" from `Y` to `Y`. + +Note that ticking from `X` to `Y` is usually only sound if there are no blocks in that slot interval. However, since the part of the ledger that we forecast is stable, it cannot be affected by those blocks, and so the ticking is sound in the specific context of characterizing forecasting. + +The primary part of the ledger state needed for forecasting is the `LedgerView`, defined within the `ConsensusProtocol p` class. +The primary function used for forecasting (a `LedgerView`) within the Ouroboros consensus layer is [`ledgerViewForecastAt`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsProtocol.hs#L71). + +## `Ticked` data family + +We introduced the [`Ticked`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ticked.hs#L45) data family to ensure that the Consensus Layer ticks exactly once between blocks. +The abstract interface maps an unticked ledger state to a `Ticked` ledger state, and applying a header/block is the _only_ way to map a `Ticked` ledger state to an unticked ledger state. + +By encoding this alternation between ticking and application in the types of the abstract interface, we prevent ourselves from accidentally ticking too few or too many times. + +## Partiality of Ticking + +In our code base, ticking is a **total** function. +Forecasting, on the other hand, is partial, since it is able to reject requests that violate the forecast range. +(It's important to note that such a request is not doomed: the node might just need to process another block or two before the slot of interest will be within the forecast range of its selected chain's tip.) + +However, the Consensus Layer itself will never need to tick farther than the forecast range. +The ledger rules might actually be able to do so, since it's mostly just a matter of the state _not_ changing. +It could plausibly cause problems within the ledger rules if an entire epoch has no blocks, for example, so there's definitely no guarantee that the resulting ledger state would actually be useful. +But again: the Consensus Layer will never request such a tick. + +The inductive argument is that all the ticking the Consensus Layer does is ultimately guarded by some forecast, unless someone has altered the node's files between executions (or if there's a bad bug somewhere else). + +- The mempool only ticks by a single slot, so any non-degenerate forecast range supports that. +- The leadership check immediately aborts if it cannot forecast the `LedgerView`. + The mint only proceeds if the leadership succeeded. +- The `ChainSync` client forecasts the `LedgerView` before it applies any header. +- The `ChainSel` logic only applies blocks whose headers arrived via a `ChainSync` client or were minted by this node. + The node also processes blocks from its on-disk storage when initializing, but those blocks were either minted by this node, acquired by this node via `ChainSync` (and `BlockFetch`), written by another trusted node (eg via Mithril) between executions, or written by some other means that is not explicitly unsupported. + +Thus, it's reasonable for the ticking function to have a total type because none of its calls within the node can fail; it's always guarded by a forecast. + +## Bounding Ticking and Forecasting Computations + +On a single valid chain, the Consensus Layer will never tick across the same slots multiple times. +However, Ouroboros involves short forks and potentially invalid blocks. +On the other hand, even for a single chain, the Consensus Layer would forecast across the same slots multiple times: it does it each time the wall clock enters a new slot as part of the leadership check, and it does so each time any peer sends it a header. + +Ideally all ticks would be inexpensive, but the occasional spike is managable, since short forks are short lived. +An expensive forecast, on the other hand, can be disastrous. +If the leadership check's forecast takes too long, then the node might be late to produce its block. +If that forecast takes longer than a slot, then the node might not even check every slot, which is unacceptable. + +For these reasons, the ledger rules contain certain optimizations that either prevent forecasts from ever paying certain costs or else ensure that forecasting across some particular slot is only expensive the first time it happens and subsequent forecasts will then avoid those costs via memoization. [^1]: Byron era had a 20-second slot duration, distinct from the 1-second duration in subsequent eras. From 7a66676a0cb6fa596f96fda4f6aab6e041268bad Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 3 Jun 2025 14:06:47 +0200 Subject: [PATCH 06/52] Add a section on Cardano Instances for ledger-related types and classes --- .../contents/explanation/ledger-interaction.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/website/contents/explanation/ledger-interaction.md b/docs/website/contents/explanation/ledger-interaction.md index 700d686439..40198c7cf1 100644 --- a/docs/website/contents/explanation/ledger-interaction.md +++ b/docs/website/contents/explanation/ledger-interaction.md @@ -15,7 +15,7 @@ The [`ApplyBlock`](https://github.com/intersectmbo/ouroboros-consensus/blob/main The [`LedgerSupportsMempool`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsMempool.hs#L116) typeclass defines the essential interface that the Ledger layer provides to the Mempool. Its primary function is to enable the Mempool to validate individual transactions. -The [`LedgerCfg`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L127) type family defines the static environment or configuration required by a specific ledger implementation. It holds the fixed parameters and rules that govern a ledger's behavior. This configuration is passed to various ledger-related functions used throughout `ouroboros-consensus`. Different ledger eras require different static configurations. For instance, the duration of slots and the size (in slots) of epochs[^1], initial delegations or assignment of funds to addresses. +The [`LedgerCfg`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L127) type family defines the static environment or configuration required by a specific ledger implementation. It holds the fixed parameters and rules that govern a ledger's behavior. This configuration is passed to various ledger-related functions used throughout `ouroboros-consensus`. Different [ledger eras](TODO: link to some table that explains and summarizes them) require different static configurations. For instance, the duration of slots and the size (in slots) of epochs[^1], initial delegations or assignment of funds to addresses. The [`GetTip`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L62) class requires that any ledger can report its tip as a `Point`. A `Point l` is either genesis or a pair of a hash and slot number, and it is parametric over the ledger type `l` to accommodate different hash types. This class is also required for the [ticked](#ticking) ledger state. @@ -23,6 +23,22 @@ The [`LedgerState`](https://github.com/intersectmbo/ouroboros-consensus/blob/mai The `LedgerState` also provides a necessary projection of the state that the consensus protocol uses for tasks like leadership checks and header validation: the [`LedgerView`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L94). +## Cardano Instances + +To instantiate the classes and types that define the interaction between `ouroboros-consensus` and the Cardano ledger, we rely on the [`cardano-ledger`](https://github.com/input-output-hk/cardano-ledger) packages. The sub-folder [`ouroboros-consensus-cardano`](https://github.com/IntersectMBO/ouroboros-consensus/tree/main/ouroboros-consensus-cardano) contains all the Cardano specific instantiations of the aforementioned classes and types. + +The Cardano chain contains block segments from [different eras](https://cardano-scaling.github.io/cardano-blueprint/consensus/index.html#the-consensus-protocol-in-cardano). +The `cardano-ledger` packages offer an implementation of the ledger functionality for each of these eras. +Each era implements the full Ouroboros Consensus ledger interface. +The [Hard Fork Combinator](TODO: link to HFC/chain updates) (HFC) allows us to dispatch the era-specific implementations, depending on the era we need to use. + +Currently, we support two kinds of blocks in Cardano: Byron and Shelley-based. + +Shelley-based blocks, which include eras like Mary, Allegra, Alonzo, and Babbage, share part of their implementation. This shared aspect is facilitated by common APIs and classes defined within `cardano-ledger`, such as the `ShelleyBasedEra` class. + +In addition, each of these Shelley-based eras also implements details specific to their era. For instance, transactions (`GenTx`) and the logic for applying them (`applyTx`) or measuring their size (`TxMeasure`) can differ between eras. +[Forecasting](#forecasting-and-the-forecast-range) ledger views might also have era-specific logic or parameters. + ## Ticking "Tick" is a common term in discrete systems for time passing. From 08949d44698f771a1e7159b61a98cf74402983f5 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 4 Jun 2025 17:54:03 +0200 Subject: [PATCH 07/52] Add a section explaining the queries mechanism in Consensus Most of the information was taken from https://ouroboros-consensus.cardano.intersectmbo.org/docs/for-developers/QueryVersioning/ --- docs/website/contents/explanation/queries.md | 124 +++++++++++++++++++ docs/website/sidebars.js | 3 +- 2 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 docs/website/contents/explanation/queries.md diff --git a/docs/website/contents/explanation/queries.md b/docs/website/contents/explanation/queries.md new file mode 100644 index 0000000000..7abcb67e52 --- /dev/null +++ b/docs/website/contents/explanation/queries.md @@ -0,0 +1,124 @@ +# Queries + +In the Cardano consensus layer, queries provide a mechanism for clients, such as `cardano-cli`, Ogmios, Lace, and Cardano `db-sync`, to fetch information about the state of the node and its ledger. This includes retrieving details like the current block or slot number, the current epoch, protocol parameters, stake distribution, and UTxO size. + +The query mechanism is abstracted within the code using a primary [`Query`](https://github.com/intersectmbo/ouroboros-consensus/blob/master/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Query.hs#L225) data type, which is parameterized by the block type and the expected result type. This allows the consensus layer to define a generic interface for querying, independent of the specific block type or era. + +In the following sections we explain the different types of queries, how they are versioned, and serialized. + +## Query types + +The `Query blk result` top-level `Query` type is parameterized by the block type (`blk`) and the expected result. This Query type has different constructors or categories that access different kinds of information: + +### BlockQuery Queries + +These are queries defined using the `BlockQuery` constructor. This is a data family instantiated for specific block types, such as `ShelleyBlock` or `HardForkBlock`. These queries are typically the ones that directly access or compute information from the ledger state or the ledger configuration specific to a particular era. + +The `BlockQuery` for the [HardForkBlock](#TODO-reference-the-HFC-section) itself includes specialized forms for handling multi-era chains: +- `QueryIfCurrent` answers a query about a specific era only if the queried point is in that era. +- `QueryAnytime` answers a query about an era from any supported era. For instance, `GetEraStart`. +- `QueryHardFork` answers queries specific to the hard-fork combinator itself, like the current era index. + + +Examples of this sort of queries include: + +- `GetStakeDistribution` (Shelley-based): Get the total stake distribution. +- `GetUTxOByAddress` (Shelley-based): Get UTxO filtered by address. +- `GetProposals` (Available since Conway): Get governance proposals by ID. + + +### General Queries + +These are other constructors defined directly within the top-level `Query` type, not nested under `BlockQuery`. These queries typically fetch more general node-level or chain-level information that isn't tied to the specific rules or state of a single ledger era. They are answered by accessing configuration data or the `HeaderState` component of the extended ledger state, rather than the main ledger state itself. + +Examples of this sort of queries include: + +- `GetSystemStart`: Get the fixed SystemStart time. +- `GetChainBlockNo`: Get the block number of the chain at the queried point. +- `GetChainPoint` Get the Point (slot and hash) of the chain at the queried point. + +## Query versioning + +Queries are versioned to ensure compatibility between nodes and clients running different software versions. +As the ledger gets more features and new use cases are explored, teams will add new queries that allow to get the necessary data. +To track this, each query has an associated version number indicating when it became available. + +In general, we can't assume that every node operator is running on the same/latest version, so a query might be available in one node, but not in another. +Thus, when a client sends a query to a node, it is important that the node is aware of whether it supports a given query. +Morever, beyond mere availability of the query, the exact details of the on-the-wire codec used for each query and its arguments and its response may change over time. The negotiated version is therefore sometimes also necessary to simply select the correct codec to use when communicating with the node. + +At the beginning of every connection from a client to a node, the Network layer will negotiate a [`NodeToClientVersion`][n2c]. Before the client sends a query, it can now check that the negotiated version is not older than the associated version number of the query, and act accordingly (i.e. display an indicative error message, or use a different/fallback mechanism to do its job). + +Custom implementations of the Cardano node client are free to bypass this check before submitting the query. This does not constitute a problem for the node integrity, but is, instead, an inconvenience for the user. When querying an older node, such an inconsiderate client will simply be disconnected from without explanation. If the user has access to the node's logs, they'll find there an obscure CBOR decoding error. + +### Version types + +Our code does not use the negotiated [`NodeToClientVersion`][n2c] directly, but translates them first to a [`CardanoNodeToClientVersion`][cardano-n2c] and then to [`ShelleyNodeToClientVersion`][shelley-n2c]. + +- The [`querySupportedVersion`][query-supported-version] function assigns a [`ShelleyNodeToClientVersion`][shelley-n2c] to each Shelley-based query. +- Each [`CardanoNodeToClientVersionX`][cardano-n2c] specifies the [`ShelleyNodeToClientVersion`][shelley-n2c] for each era, or indicates that a specific [era][feature-table] is not supported. As an example, consider + ```haskell + pattern CardanoNodeToClientVersion10 :: BlockNodeToClientVersion (CardanoBlock c) + pattern CardanoNodeToClientVersion10 = + HardForkNodeToClientEnabled + HardForkSpecificNodeToClientVersion2 + ( EraNodeToClientEnabled ByronNodeToClientVersion1 -- Byron + :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Shelley + :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Allegra + :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Mary + :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Alonzo + :* EraNodeToClientEnabled ShelleyNodeToClientVersion6 -- Babbage + :* EraNodeToClientDisabled -- Conway + :* Nil + ) + ``` + This tells us that in Shelley, Allegra, Mary, Alonzo and Babbage, we use `ShelleyNodeToClientVersion6`, and Conway is disabled. This means that no queries that were introduced in `ShelleyNodeToClientVersion7` can be used, and no queries in the Conway era are possible at all. + + In order to reduce the number of possible version combinations, we currently follow the convention that all `ShelleyNodeToClientVersion`s in one `CardanoNodeToClientVersionX` are equal. This means that the developers of clients (like `cardano-api`, etc) can rely on the fact that once a `NodeToClient` version has been negotiated, all enabled Shelley-based eras support exactly the same queries.[^conway-queries] We might weaken this guarantee in the future, see [#864](https://github.com/IntersectMBO/ouroboros-consensus/issues/864). + +The mapping from `NodeToClientVersion`s to `CardanoNodeToClientVersion`s is [`supportedNodeToClientVersions`][supportedNodeToClientVersions]. Additionally, all versions larger than a certain `NodeToClientVersion` (see [`latestReleasedNodeVersion`][latestReleasedNodeVersion]) are considered experimental, which means that queries newly enabled by them can be added and changed at will, without compatibility guarantees. They are only offered in the version negotiation when a flag (currently, `ExperimentalProtocolsEnabled`) is set; also see [`limitToLatestReleasedVersion`][limitToLatestReleasedVersion] and its call/usage sites. + +### Why have a separate version type per block? + +At the moment, all genuine chains using the abstract Ouroboros code (ie the Diffusion and Consensus Layers) are maintained by the same people that maintain the Ouroboros code, and moreover those chains are all instances of `CardanoBlock`. Thus, it has so far been a convenient simplification to merely increment `NodeToClientVersion` whenever `BlockNodeToClientVersion (CardanoBlock c)` needs a new increment (in addition to when the mini protocols' code changes require such an increment). This approach would be untenable if there were multiple genuine chains with different block types and their own queries evolving independently, sharing the common Ouroboros code as a dependency. That is especially true if some of those chains were maintained by someone other than the Cardano team maintaining the Ouroboros code. In that case, the Diffusion Layer would either need to negotiate the two versions separately or else negotiate the block-specific version `CardanoNodeToClientVersionX` and derive the `NodeToClientVersion` from that (via a callback passed by the owner of the block-specific code) instead of the opposite, which is what the current code does. + +That same fundamental hypothetical of genuine chains with different block types motivates defining the `BlockNodeToClientVersion` abstractly, instead of only for `CardanoBlock`. In particular, it's technically possible that some chain could exist that only uses `ByronBlock`, or the `ShelleyBlock`s without Byron, or some other "incomplete" subset of the `ShelleyBlocks`, etc. The block-specific version for such a chain should not necessarily advance in lock-step with the Cardano chain's, since some Cardano changes might not apply to that hypothetical chain [^non-Cardano-block-types]. Via the `BlockNodeToClientVersion` type family, the Consensus Layer is already positioned to properly support multiple block types, once the Diffusion Layer eventually negotiates the versions in a way that allows non-Cardano chains to properly evolve. But for now, the only genuine chain uses all of the `ShelleyBlock` eras, and so we version as a single bundle, pretending that they are inseparable. + +### Shelly node-to-client version + +Each `ShelleyNodeToClientVersion` has a set of queries it supports. Assume the maximum version is $X$, and that it has queries $Q_0, \dots, Q_{n-1}$ associated to it. If no node was released that supports version $X$, ie `ShelleyNodeToClientVersionX`, we have a reasonable degree of certainty that no client will send any $Q_i$, $x \in [0, n - 1]$ to older nodes (since no such node was yet released). Therefore, if we add a new query $Q_n$ we can associate it to the unreleased version $X$ (`ShelleyNodeToClientVersionX`). + +On the other hand, the node that supports version `X` has been released, then we +need to increase the maximum Shelley node-to-client version, by adding one more constructor to `ShelleyNodeToClientVersion`, which is defined in module [Ouroboros.Consensus.Shelley.Ledger.NetworkProtocolVersion](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs). By adding this new version the node is able to detect if other Cardano clients that respect this versioning mechanism support said query. + +Henceforth, we call an unreleased version "experimental" (ie only used for demo purposes/specific to an unreleased era). + +### Checks + +The supported query versions are only enforced in the [Shelley query encoder][shelley-encodeNodeToClient], ie in code run by clients. The server will currently answer queries even if the negotiated version is not in the supported version range for that query (which might be the case with a custom client implementation, or when one forgot to enable experimental protocols), following the robustness principle (ie "be conservative in what you send, be liberal in what you accept"). + +As an example, consider a query $Q$ that is enabled after version $x$, and consider a connection between a client and a node that negotiated version $y$. If $y < x$, then the client will throw an exception before sending $Q$ as the negotiated version is too old, so the server probably won't understand the query. But if the server does actually understand the query, and the client uses a custom implementation that does not perform the check on $x$ and $y$, then the server will reply as normal despite $y < x$. + +### On newly added golden files + +When adding a new `ShelleyNodeToClientVersion` or a new `CardanoNodeToClientVersions` new golden files will be generated. Because serialization is [version dependent](https://github.com/IntersectMBO/ouroboros-consensus/pull/95), a new `ShelleyNodeToClientVersion` could also introduce a different serialization. See how function [`decodeShelleyResult`][decodeShelleyResult] uses `ShelleyNodeToClientVersion`. Therefore we have to test the serialization for the new versions. + +The golden tests only generate golden files for queries that have examples. So if a newly added query does not have an example, no golden files will be generated for it. + +[n2c]: https://ouroboros-network.cardano.intersectmbo.org/ouroboros-network/Ouroboros-Network-NodeToClient.html#t:NodeToClientVersion +[network-spec]: https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-spec/network-spec.pdf +[shelley-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs#L17 +[cardano-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L341-L527 +[query-supported-version]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L537-L574 +[feature-table]: https://github.com/cardano-foundation/CIPs/blob/master/CIP-0059/feature-table.md +[supportedNodeToClientVersions]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L540 +[latestReleasedNodeVersion]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L551 +[limitToLatestReleasedVersion]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs#L896-L897 +[shelley-encodeNodeToClient]: https://github.com/IntersectMBO/ouroboros-consensus/blob/3d55ae3ca7a9e1c63a19266d35ef5512bbef13ab/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Node/Serialisation.hs#L180-L185 +[network-repo]: https://github.com/IntersectMBO/ouroboros-network +[shelley-supportedNodeToClientVersions]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs#L56-L65 +[decodeShelleyResult]: https://github.com/IntersectMBO/ouroboros-consensus/blob/3d55ae3ca7a9e1c63a19266d35ef5512bbef13ab/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L733 + +[^conway-queries]: There are already queries that morally are Conway-specific, but still work in older eras, returning something along the lines of `mempty` in that case. + +[^non-Cardano-block-types]: The opposite is only true if that chain has some block types that Cardano doesn't. diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index a55190a702..94ab145ff7 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -23,7 +23,8 @@ const sidebars = { label: 'Explanation', items: ['explanation/index', 'explanation/design-goals', - 'explanation/ledger-interaction' + 'explanation/ledger-interaction', + 'explanation/queries' ] } ], From dc24f1b07b05d0c05f1160cdf026899037fedef4 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 4 Jun 2025 18:26:12 +0200 Subject: [PATCH 08/52] Minor edits to the Queries section --- docs/website/contents/explanation/queries.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/website/contents/explanation/queries.md b/docs/website/contents/explanation/queries.md index 7abcb67e52..34d42823ad 100644 --- a/docs/website/contents/explanation/queries.md +++ b/docs/website/contents/explanation/queries.md @@ -55,7 +55,7 @@ Custom implementations of the Cardano node client are free to bypass this check Our code does not use the negotiated [`NodeToClientVersion`][n2c] directly, but translates them first to a [`CardanoNodeToClientVersion`][cardano-n2c] and then to [`ShelleyNodeToClientVersion`][shelley-n2c]. -- The [`querySupportedVersion`][query-supported-version] function assigns a [`ShelleyNodeToClientVersion`][shelley-n2c] to each Shelley-based query. +- The [`querySupportedVersion`][query-supported-version] function assigns a [`ShelleyNodeToClientVersion`][shelley-n2c] to each Shelley-based query, indicating the minimum *Shelley* version that supports the query. - Each [`CardanoNodeToClientVersionX`][cardano-n2c] specifies the [`ShelleyNodeToClientVersion`][shelley-n2c] for each era, or indicates that a specific [era][feature-table] is not supported. As an example, consider ```haskell pattern CardanoNodeToClientVersion10 :: BlockNodeToClientVersion (CardanoBlock c) @@ -74,7 +74,7 @@ Our code does not use the negotiated [`NodeToClientVersion`][n2c] directly, but ``` This tells us that in Shelley, Allegra, Mary, Alonzo and Babbage, we use `ShelleyNodeToClientVersion6`, and Conway is disabled. This means that no queries that were introduced in `ShelleyNodeToClientVersion7` can be used, and no queries in the Conway era are possible at all. - In order to reduce the number of possible version combinations, we currently follow the convention that all `ShelleyNodeToClientVersion`s in one `CardanoNodeToClientVersionX` are equal. This means that the developers of clients (like `cardano-api`, etc) can rely on the fact that once a `NodeToClient` version has been negotiated, all enabled Shelley-based eras support exactly the same queries.[^conway-queries] We might weaken this guarantee in the future, see [#864](https://github.com/IntersectMBO/ouroboros-consensus/issues/864). +To reduce the number of possible version combinations, we currently follow the convention that all `ShelleyNodeToClientVersion`s in one `CardanoNodeToClientVersionX` are equal. This means that the developers of clients (like `cardano-api`, etc) can rely on the fact that once a `NodeToClient` version has been negotiated, all enabled Shelley-based eras support exactly the same queries.[^conway-queries] We might weaken this guarantee in the future, see [#864](https://github.com/IntersectMBO/ouroboros-consensus/issues/864). The mapping from `NodeToClientVersion`s to `CardanoNodeToClientVersion`s is [`supportedNodeToClientVersions`][supportedNodeToClientVersions]. Additionally, all versions larger than a certain `NodeToClientVersion` (see [`latestReleasedNodeVersion`][latestReleasedNodeVersion]) are considered experimental, which means that queries newly enabled by them can be added and changed at will, without compatibility guarantees. They are only offered in the version negotiation when a flag (currently, `ExperimentalProtocolsEnabled`) is set; also see [`limitToLatestReleasedVersion`][limitToLatestReleasedVersion] and its call/usage sites. @@ -88,8 +88,8 @@ That same fundamental hypothetical of genuine chains with different block types Each `ShelleyNodeToClientVersion` has a set of queries it supports. Assume the maximum version is $X$, and that it has queries $Q_0, \dots, Q_{n-1}$ associated to it. If no node was released that supports version $X$, ie `ShelleyNodeToClientVersionX`, we have a reasonable degree of certainty that no client will send any $Q_i$, $x \in [0, n - 1]$ to older nodes (since no such node was yet released). Therefore, if we add a new query $Q_n$ we can associate it to the unreleased version $X$ (`ShelleyNodeToClientVersionX`). -On the other hand, the node that supports version `X` has been released, then we -need to increase the maximum Shelley node-to-client version, by adding one more constructor to `ShelleyNodeToClientVersion`, which is defined in module [Ouroboros.Consensus.Shelley.Ledger.NetworkProtocolVersion](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs). By adding this new version the node is able to detect if other Cardano clients that respect this versioning mechanism support said query. +On the other hand, once the node that supports version `X` has been released, we need to increase the maximum Shelley node-to-client version, by adding one more constructor to `ShelleyNodeToClientVersion`, say `ShelleyNodeToClientVersionY`, which is defined in module [Ouroboros.Consensus.Shelley.Ledger.NetworkProtocolVersion](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs). +By adding this new version the node is able to detect if other Cardano clients that respect this versioning mechanism support said query. Henceforth, we call an unreleased version "experimental" (ie only used for demo purposes/specific to an unreleased era). From a6883883b42ebc90de5b012c3bfe4d6010599625 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Thu, 5 Jun 2025 09:53:45 +0200 Subject: [PATCH 09/52] Replace explanation of the removed `querySupportedVersion` with an explanation of `querySupportedVersions`. --- docs/website/contents/explanation/queries.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/website/contents/explanation/queries.md b/docs/website/contents/explanation/queries.md index 34d42823ad..4ee443e911 100644 --- a/docs/website/contents/explanation/queries.md +++ b/docs/website/contents/explanation/queries.md @@ -55,7 +55,7 @@ Custom implementations of the Cardano node client are free to bypass this check Our code does not use the negotiated [`NodeToClientVersion`][n2c] directly, but translates them first to a [`CardanoNodeToClientVersion`][cardano-n2c] and then to [`ShelleyNodeToClientVersion`][shelley-n2c]. -- The [`querySupportedVersion`][query-supported-version] function assigns a [`ShelleyNodeToClientVersion`][shelley-n2c] to each Shelley-based query, indicating the minimum *Shelley* version that supports the query. +- The [`querySupportedVersions`][query-supported-versions] returns the [NodeToClientVersion][n2c]s that support the given query. - Each [`CardanoNodeToClientVersionX`][cardano-n2c] specifies the [`ShelleyNodeToClientVersion`][shelley-n2c] for each era, or indicates that a specific [era][feature-table] is not supported. As an example, consider ```haskell pattern CardanoNodeToClientVersion10 :: BlockNodeToClientVersion (CardanoBlock c) @@ -109,7 +109,8 @@ The golden tests only generate golden files for queries that have examples. So i [network-spec]: https://ouroboros-network.cardano.intersectmbo.org/pdfs/network-spec/network-spec.pdf [shelley-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs#L17 [cardano-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L341-L527 -[query-supported-version]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L537-L574 +[query-supported-versions]: +https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Query.hs#L343 [feature-table]: https://github.com/cardano-foundation/CIPs/blob/master/CIP-0059/feature-table.md [supportedNodeToClientVersions]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L540 [latestReleasedNodeVersion]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L551 From 5800fec677edd3639eb5d76b6c3755e6cb592256 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Thu, 5 Jun 2025 12:19:31 +0200 Subject: [PATCH 10/52] Add a section on query serialization --- docs/website/contents/explanation/queries.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/website/contents/explanation/queries.md b/docs/website/contents/explanation/queries.md index 4ee443e911..8bb54078d2 100644 --- a/docs/website/contents/explanation/queries.md +++ b/docs/website/contents/explanation/queries.md @@ -99,9 +99,25 @@ The supported query versions are only enforced in the [Shelley query encoder][sh As an example, consider a query $Q$ that is enabled after version $x$, and consider a connection between a client and a node that negotiated version $y$. If $y < x$, then the client will throw an exception before sending $Q$ as the negotiated version is too old, so the server probably won't understand the query. But if the server does actually understand the query, and the client uses a custom implementation that does not perform the check on $x$ and $y$, then the server will reply as normal despite $y < x$. +### Serialization + +Queries and their results need to be sent between the client and the node over the network. +Therefore, they must be converted into a binary format for transmission (serialized and deserialized). + +The chosen format for serialization is CBOR (Concise Binary Object Representation). Within the codebase, this is handled by specific type classes and functions. Since local state queries are part of the node-to-client protocol, the relevant serialization abstraction is [`SerialiseNodeToClient`](https://github.com/intersectmbo/ouroboros-consensus/blob/a6883883b42ebc90de5b012c3bfe4d6010599625/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Node/Serialisation.hs#L81): + +- **Encoding queries**: The [`queryEncodeNodeToClient`](https://github.com/intersectmbo/ouroboros-consensus/blob/a6883883b42ebc90de5b012c3bfe4d6010599625/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Query.hs#L409) function is used to serialize a query before sending it. +- **Decoding queries**: The [`queryDecodeNodeToClient`](https://github.com/intersectmbo/ouroboros-consensus/blob/a6883883b42ebc90de5b012c3bfe4d6010599625/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Query.hs#L468) function is used to deserialize incoming query data. +- **Encoding results**: The [`encodeResult`](https://github.com/intersectmbo/ouroboros-consensus/blob/a6883883b42ebc90de5b012c3bfe4d6010599625/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Node/Serialisation.hs#L108) function serializes the response to a query. +- **Decoding results**: The [`decodeResult`](https://github.com/intersectmbo/ouroboros-consensus/blob/a6883883b42ebc90de5b012c3bfe4d6010599625/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Node/Serialisation.hs#L115) function deserializes the query response. + +Block-specific queries (`BlockQuery blk footprint result`) are serialized within this framework using their corresponding encoding/decoding instances (e.g., [`encodeShelleyQuery`](https://github.com/intersectmbo/ouroboros-consensus/blob/a6883883b42ebc90de5b012c3bfe4d6010599625/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L813), [`decodeShelleyQuery`](https://github.com/intersectmbo/ouroboros-consensus/blob/a6883883b42ebc90de5b012c3bfe4d6010599625/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L895) for `ShelleyBlock`). + +Serialization is [version dependent](https://github.com/IntersectMBO/ouroboros-consensus/pull/95). Encoding and decoding functions take a `BlockNodeToClientVersion blk` parameter, which allow us to dispatch version specific codecs. For instance, see how function [`decodeShelleyResult`][decodeShelleyResult] uses `ShelleyNodeToClientVersion` + ### On newly added golden files -When adding a new `ShelleyNodeToClientVersion` or a new `CardanoNodeToClientVersions` new golden files will be generated. Because serialization is [version dependent](https://github.com/IntersectMBO/ouroboros-consensus/pull/95), a new `ShelleyNodeToClientVersion` could also introduce a different serialization. See how function [`decodeShelleyResult`][decodeShelleyResult] uses `ShelleyNodeToClientVersion`. Therefore we have to test the serialization for the new versions. +When adding a new `ShelleyNodeToClientVersion` or a new `CardanoNodeToClientVersions` new golden files will be generated. Because serialization is version dependent, a new `ShelleyNodeToClientVersion` could also introduce a different serialization. Therefore we have to test the serialization for the new versions. The golden tests only generate golden files for queries that have examples. So if a newly added query does not have an example, no golden files will be generated for it. From d014aae802159286bdc09bc4730966094d2d95dd Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 6 Jun 2025 17:18:38 +0200 Subject: [PATCH 11/52] Add a HOWTO on adding new queries --- .../howtos/how-to-version-a-new-query.md | 37 +++++++++++++++++++ docs/website/contents/howtos/index.md | 1 + docs/website/sidebars.js | 4 +- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 docs/website/contents/howtos/how-to-version-a-new-query.md diff --git a/docs/website/contents/howtos/how-to-version-a-new-query.md b/docs/website/contents/howtos/how-to-version-a-new-query.md new file mode 100644 index 0000000000..558a30feea --- /dev/null +++ b/docs/website/contents/howtos/how-to-version-a-new-query.md @@ -0,0 +1,37 @@ +# How to version a new query + + 1. Determine whether the query is supposed to be experimental. + + 2. Check whether you need a new [`NodeToClientVersion`][n2c]. + + - If the query is experimental, you only need one if there is no [`NodeToClientVersion`][n2c] beyond the [`latestReleasedNodeVersion`][latestReleasedNodeVersion] (usually, it should already exist). + + - If the query is not experimental, you need one if the current [`latestReleasedNodeVersion`][latestReleasedNodeVersion] is already used in a released version of the node. For this, check the version of `ouroboros-consensus-cardano` in the latest node release, and navigate to the corresponding [`latestReleasedNodeVersion`][latestReleasedNodeVersion]. + + If you determine that you need a new [`NodeToClientVersion`][n2c], create a corresponding PR in the [Network repository][network-repo], and wait for a new release to CHaP. + + 3. Depending on the previous step: + + - if necessary, add a new [`CardanoNodeToClientVersion`][cardano-n2c] and adapt [`supportedNodeToClientVersions`][supportedNodeToClientVersions] (as well as Shelley's [`supportedNodeToClientVersions`][shelley-supportedNodeToClientVersions], which is only used in tests). + We use this mapping because `SupportedNetworkProtocolVersion` is not a composable instance. + + - if necessary (ie there is no existing one you can use), add a new [`ShelleyNodeToClientVersion`][shelley-n2c] and adapt [`querySupportedVersion`][query-supported-version] + + 4. In case the network node-to-client versions (eg `NodeToClient_V16`) is not linked to to the `CardanoNodeToClientVersion` mentioned above, we need to do this by adding an extra entry to [`supportedNodeToClientVersions`][supportedNodeToClientVersions]. + + 5. In many cases, these changes will make our golden tests fail (due to missing files); to fix CI, run the tests locally and check in the newly generated files. + + 6. Follow the compiler warnings. + + +## Sample pull requests + +Old pull-requests that added new queries serve as good reference material when adding new queries. For instance see [#191](https://github.com/IntersectMBO/ouroboros-consensus/pull/191). Be aware that these PRs they can get out of date. If you detect this please delete old links and add those corresponding to newer pull requests. + +[n2c]: https://ouroboros-network.cardano.intersectmbo.org/ouroboros-network/Ouroboros-Network-NodeToClient.html#t:NodeToClientVersion +[latestReleasedNodeVersion]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L551 +[network-repo]: https://github.com/IntersectMBO/ouroboros-network +[cardano-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L341-L527 +[supportedNodeToClientVersions]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs#L540 +[shelley-n2c]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/NetworkProtocolVersion.hs#L17 +[query-supported-version]: https://github.com/IntersectMBO/ouroboros-consensus/blob/35e444f1440cef34e0989519f025231241397674/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Query.hs#L537-L574 diff --git a/docs/website/contents/howtos/index.md b/docs/website/contents/howtos/index.md index e69de29bb2..999fea1ec3 100644 --- a/docs/website/contents/howtos/index.md +++ b/docs/website/contents/howtos/index.md @@ -0,0 +1 @@ +# HOWTOs diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index 94ab145ff7..234ff609fd 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -37,7 +37,9 @@ const sidebars = { howtos: [ { type: 'category', label: 'HOWTOs', - items: ['howtos/index'] + items: ['howtos/index', + 'howtos/how-to-version-a-new-query' + ] } ], reference: [ From a70eb17ef28831cd2e140b33ded49ce791028d88 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Thu, 26 Jun 2025 14:26:29 +0200 Subject: [PATCH 12/52] Add a Consensus Protocol Section ... and a subsection that explains the `ConsensusProtocol` class. --- .../explanation/consensus-protocol.md | 63 +++++++++++++++++++ docs/website/sidebars.js | 3 +- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 docs/website/contents/explanation/consensus-protocol.md diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md new file mode 100644 index 0000000000..86e63ef967 --- /dev/null +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -0,0 +1,63 @@ +# Consensus Protocol + +The [Consensus protocol](https://cardano-scaling.github.io/cardano-blueprint/consensus/index.html) is a foundational element for Cardano and other blockchains. It provides the mechanism through which a single, linear, and eventually consistent chain of blocks is established among all network participants. The consensus layer acts as an orchestrator, mediating between the network and ledger layers. + +Two core responsibilities of a consensus protocol are: + +* **Chain Selection**: The process of choosing between multiple competing chains. The Chain Database (ChainDB) component within a node is responsible for performing the final stages of chain selection, by either extending the current chain or adopting a new one. + +* **Block Production**: The consensus protocol determines when a node is allowed to mint a block, via leader schedule. When the Ouroboros protocol designates a particular node (operating a stake pool) as the slot leader, that node is expected to extend the best chain it has seen by minting a new block. +The consensus layer decides when to contribute to the chain by producing blocks. + +The Consensus layer of `ouroboros-consensus` implements all past and current protocols in the Cardano chain. When the consensus layer was re-implemented, it initially supported Permissive BFT (Byzantine Fault Tolerance) during the Byron era, and then transitioned to Ouroboros TPraos for Shelley. Starting with the Babbage era, the Consensus layer supports the Praos protocol. The [`ouroboros-consensus-protocol`](https://github.com/IntersectMBO/ouroboros-consensus/tree/main/ouroboros-consensus-protocol) package defines the Praos and TPraos (Transitional Praos) instantiations. The [`ouroboros-consensus-cardano`](https://github.com/IntersectMBO/ouroboros-consensus/tree/main/ouroboros-consensus-cardano) package integrates these protocols into Cardano. + +## Classes + +The general implementation of a consensus protocol is abstracted into the following classes. + +### `ConsensusProtocol` + +The [**`ConsensusProtocol`**](https://github.com/intersectmbo/ouroboros-consensus/blob/d014aae802159286bdc09bc4730966094d2d95dd/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L66) class is a central abstraction within the Ouroboros consensus layer, generalizing across specific consensus algorithms. + +Among its responsibilities, the `ConsensusProtocol` class defines the protocol state required to run the protocol. This "protocol state" is represented by the `ChainDepState` type family. This state is updated when new block headers arrive, and is subject to rollback. In particular, in the Praos consensus protocol, the `ChainDepState` includes "nonces", which are random numbers derived from the chain itself, used as seeds for pseudo-random number generators in leader selection. This state is also ["ticked"](./ledger-interaction#ticking) to apply time-related changes, such as nonce rotation at certain slot numbers, even before a new block is processed. + +`CanBeLeader` and `IsLeader` are type families that define the requirements and proofs, respectively, related to a node's ability to produce a block: + +- `CanBeLeader` represents the configuration data and keys a node needs to potentially be elected as leader. For instance, [in Praos](https://github.com/intersectmbo/ouroboros-consensus/blob/d014aae802159286bdc09bc4730966094d2d95dd/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L247), `PraosCanBeLeader` includes the operational certificate (OpCert), the cold verification key, and the VRF signing key. + +- `IsLeader` represents cryptographic evidence or proof that a node is the leader for a specific slot. [For Praos](https://github.com/intersectmbo/ouroboros-consensus/blob/d014aae802159286bdc09bc4730966094d2d95dd/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos.hs#L242), this type would typically its VRF output, which constitutes the cryptographic proof demonstrating the node's right to lead in that slot. + +Function `checkIsLeader` takes among its arguments a `CanBeLeader` value and the current slot (`SlotNo`). If the node is the leader for that slot, this function returns a `Just (IsLeader p)`. Otherwise it returns `Nothing`. + +The `SelectView` type represents a summary of the header at the tip of a chain. Values of this type allow the consensus protocol to choose between multiple competing chains by comparing these views. +In Praos, the `SelectView` is instantiated as `PraosChainSelectView`, containing the necessary information for the chain selection process, namely: +- The length of the chain. +- The slot number of the block. +- The verification key of the block's issuer +- A counter for blocks issued by a specific issuer within a KES period. +- A Verifiable Random Function (VRF) output, used for tie-breaking. + +The `LedgerView` type is a projection or summary of the ledger state, +which the Consensus protocol requires for tasks such as leadership +checks or transaction size limits for blocks. This information, like +the stake distribution, must be computable for slots in the near +future. The `LedgerView` is used when [ticking](./ledger-interaction#ticking) the `ChainDepState` (`tickChainDepState`) to apply time-related changes. It can also be [forecast](./ledger-interaction.md#forecasting-and-the-forecast-range) for future slots, meaning we can predict that the `LedgerView` will be, irrespective of which blocks are applied in the given forecast range. + +[In Praos](https://github.com/intersectmbo/ouroboros-consensus/blob/d014aae802159286bdc09bc4730966094d2d95dd/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Views.hs#L41), the `LedgerView` contains: +- The stake pool distribution, which is used by `checkIsLeader`. +- Maximum allowed size for a block header and body. +- The current ledger protocol version. + +The `ValidateView` type represents a projection of a block header that is used for validating said header. +This view is used when `updateChainDepState` and `reupdateChainDepState` functions are called to advance the protocol's state based on a new header. + +[In Praos](https://github.com/intersectmbo/ouroboros-consensus/blob/d014aae802159286bdc09bc4730966094d2d95dd/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Views.hs#L22), the `ValidateView` of a header contains: +- The verification key of the block's issuer (stake pool cold key). +- The VRF verification key, which is checked against the registered VRF key for the stake pool. +- The VRF output, which serves as a cryptographic proof that the issues is eligible to produce a block for that slot, and contributes to the evolving nonce. +- The operational certificate, which delegates rights from the stake pool's cold key, to the online KES key. +- The block's slot number. +- The hash of the previous block. +- The KES signature data, which is used to verify the issuer's identity. + +Function `protocolSecurityParam` extracts the [security parameter](TODO!) `k` from the consensus protocol's static's configuration. diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index 234ff609fd..ed7a8ef1dc 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -24,7 +24,8 @@ const sidebars = { items: ['explanation/index', 'explanation/design-goals', 'explanation/ledger-interaction', - 'explanation/queries' + 'explanation/queries', + 'explanation/consensus-protocol', ] } ], From 77fcc2087b2d58235bc2d366e96f3dce8c7d649a Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 1 Jul 2025 15:36:30 +0200 Subject: [PATCH 13/52] Add haddocks for `selectView` --- .../Ouroboros/Consensus/Block/SupportsProtocol.hs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs index 500befe99b..62d258368a 100644 --- a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs +++ b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs @@ -25,6 +25,15 @@ class ) => BlockSupportsProtocol blk where + -- | Extracts a 'ValidateView' from a block's 'Header' for use by + -- the consensus protocol during block validation. + -- + -- This function should return only the information necessary from + -- the header to perform protocol-specific validation checks, for + -- instance issuer id or proof of the right to produce a block in a + -- given slot. + -- + -- This function enables the "header/body split" optimization. validateView :: BlockConfig blk -> Header blk -> From f50a9bb3311d054a7869250008220c7029d2a4fb Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 1 Jul 2025 15:37:07 +0200 Subject: [PATCH 14/52] Add `LedgerSupportsProtocol` section --- docs/website/contents/explanation/consensus-protocol.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 86e63ef967..5883f965a6 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -61,3 +61,11 @@ This view is used when `updateChainDepState` and `reupdateChainDepState` functio - The KES signature data, which is used to verify the issuer's identity. Function `protocolSecurityParam` extracts the [security parameter](TODO!) `k` from the consensus protocol's static's configuration. + +### `LedgerSupportsProtocol` + +The [`LedgerSupportsProtocol`](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsProtocol.hs#L25) type class links the consensus protocol to the ledger. It defines what information the consensus layer requires from the ledger state to perform its operations, particularly for leader selection and forecasting future ledger states. + +- [Byron instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/Ledger.hs#L282) +- [Shelley instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/SupportsProtocol.hs#L51). +- [`HardForkBlock` instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/Combinator/Ledger.hs#L399). From 51272ace0767d67a3d08ed189b715dc0fc4b3e52 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 1 Jul 2025 15:37:28 +0200 Subject: [PATCH 15/52] Add `BlockSupportsProtocol` section --- docs/website/contents/explanation/consensus-protocol.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 5883f965a6..3c94fbf3db 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -69,3 +69,11 @@ The [`LedgerSupportsProtocol`](https://github.com/intersectmbo/ouroboros-consens - [Byron instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/Ledger.hs#L282) - [Shelley instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/SupportsProtocol.hs#L51). - [`HardForkBlock` instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/Combinator/Ledger.hs#L399). + +### `BlockSupportsProtocol` + +The [`BlockSupportsProtocol`](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs#L26) type class links the specific block type to its corresponding consensus protocol. It defines the capabilities a block must provide for the consensus protocol to operate correctly. + +- [Byron instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/PBFT.hs#L42). +- [Shelley instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Protocol.hs#L32). +- [`HardForkBlock` instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/Combinator/Protocol.hs#L141). From 535afc39ecb5ccde35dabaa076829459b53df802 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 1 Jul 2025 15:47:51 +0200 Subject: [PATCH 16/52] Add haddocks for `selectView` --- .../Ouroboros/Consensus/Block/SupportsProtocol.hs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs index 62d258368a..9c209fbf7d 100644 --- a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs +++ b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsProtocol.hs @@ -39,6 +39,19 @@ class Header blk -> ValidateView (BlockProtocol blk) + -- | Projects a view of a block's 'Header' required by the consensus + -- protocol's chain selection logic. + -- + -- A key design decision is that chain selection compares chains + -- based **only on their tips** (via their 'SelectView's). This is a + -- pragmatic refinement of theoretical models where chain selection + -- might involve scanning entire chains, which is impractical for + -- frequent operations on a growing blockchain. This function + -- enables this optimization by providing just the necessary + -- information for comparison by looking at the header of the chain + -- tip. + -- + -- The default implementation of this function returns the block number. selectView :: BlockConfig blk -> Header blk -> From 4091b92226a7d5b0fd6531876722df32ea6b7f16 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 1 Jul 2025 16:05:57 +0200 Subject: [PATCH 17/52] Add haddocks to `ChainOrderConfig` --- .../Ouroboros/Consensus/Protocol/Abstract.hs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs index 9e2f55b70c..76fe1bdf1a 100644 --- a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs +++ b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs @@ -217,6 +217,13 @@ instance TranslateProto singleProto singleProto where -- include also recording\/storing arrival information and using that instead -- of\/in addition to the 'Ord' instance. class Ord sv => ChainOrder sv where + + -- | The 'ChainOrder' type class's 'preferCandidate' function + -- consumes both the 'SelectView's of competing chain tips and the + -- 'ChainOrderConfig' to make the final decision on which chain is + -- strictly preferred. This design allows for flexible and + -- protocol-specific tie-breaking rules that go beyond simple chain + -- length comparisons. type ChainOrderConfig sv :: Type -- | Compare a candidate chain to our own. From c573f0639584623bd143f39e722340e412859aa1 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 2 Jul 2025 12:36:51 +0200 Subject: [PATCH 18/52] Add a section on envelope validation (`ValidateEnvelope`) --- .../explanation/consensus-protocol.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 3c94fbf3db..66cf71073b 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -77,3 +77,32 @@ The [`BlockSupportsProtocol`](https://github.com/intersectmbo/ouroboros-consensu - [Byron instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/PBFT.hs#L42). - [Shelley instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Protocol.hs#L32). - [`HardForkBlock` instance](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/Combinator/Protocol.hs#L141). + +### `ValidateEnvelope` + +Envelope validation is a specific, initial phase of [header validation](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L509) handled by the [`validateEnvelope`](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L356) function. +It focuses on ledger-independent, basic structural checks and protocol compatibility of the block header. +The `validateHeader` function first executes the `validateEnvelope` checks. +If these pass, it then proceeds to update the chain-dependent state (`updateChainDepState`), where the more complex consensus-specific checks like VRF and KES validation occur. +This sequential approach allows for early rejection of malformed or fundamentally incompatible headers before more computationally intensive cryptographic validations are performed. + +The `validateEnvelope` function performs the following checks: +• **Block Number Consistency**: Ensures that the actual block number of the new header matches the expected next block number based on the previous chain tip. +• **Slot Number Consistency**: Verifies that the actual slot number of the new header is greater than or equal to the minimum expected next slot number. +• **Previous Hash Matching**: Checks that the `headerPrevHash` of the new header correctly references the hash of the previous block in the chain. +• **Checkpoint Mismatches**: Validates against any configured [checkpoint](TODO: link to genesis) hashes for specific block numbers. +• **Additional Envelope Checks**: This is an extensible part that allows for block-type or protocol-specific. + +For [Byron](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/HeaderValidation.hs#L55), the additional envelope checks verify that [EBB](TODO: ref to EBBs)s occur only in allowed slots. + +For [Praos](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Protocol/Praos.hs#L111), additional envelope checks specifically verify: +- **Protocol Version Compatibility**: Ensuring that the major protocol version of the block does not exceed the maximum version supported by the node's configuration. If it does, it throws an `ObsoleteNode` error, preventing the node from processing blocks from a future, unsupported protocol version. +- **Header Size Limits**: Verifying that the block header's size is within a configured maximum limit. +- **Block Body Size Declaration**: Checking that the declared size of the block body (as indicated in the header) does not exceed the maximum allowed block body size. + +The `HardForkBlock` also has an [instance](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/Combinator/Ledger.hs#L343) for `ValidateEnvelope`. Its `OtherHeaderEnvelopeError` is `HardForkEnvelopeErr`, which can encapsulate either a `HardForkEnvelopeErrFromEra` (an error from one of the constituent eras) or `HardForkEnvelopeErrWrongEra` (indicating a block from an unexpected era). +The `additionalEnvelopeChecks` for the `HardForkBlock` ensures that the block's era matches the expected era at the current tip, and then it delegates the check to the `additionalEnvelopeChecks` of the specific era's block type. + +Envelope validation is largely ledger-independent, though the additional checks for Praos reference configured maximum sizes and protocol versions derived from the ledger configuration. + +Envelope validation relies on [ValidateEnvelope](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L340) instances. This class extends [`BasicEnvelopeValidation`](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L297). From 2780f372520fb2d9b5425e71e919f96a86ba3ceb Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 4 Jul 2025 15:40:57 +0200 Subject: [PATCH 19/52] Add an explanation about `BlockProtocol` --- docs/website/contents/explanation/consensus-protocol.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 66cf71073b..bedb04b510 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -21,6 +21,8 @@ The [**`ConsensusProtocol`**](https://github.com/intersectmbo/ouroboros-consensu Among its responsibilities, the `ConsensusProtocol` class defines the protocol state required to run the protocol. This "protocol state" is represented by the `ChainDepState` type family. This state is updated when new block headers arrive, and is subject to rollback. In particular, in the Praos consensus protocol, the `ChainDepState` includes "nonces", which are random numbers derived from the chain itself, used as seeds for pseudo-random number generators in leader selection. This state is also ["ticked"](./ledger-interaction#ticking) to apply time-related changes, such as nonce rotation at certain slot numbers, even before a new block is processed. +The `ConsensusProtocol` type class is indexed over the protocol type. The type family [`BlockProtocol`](https://github.com/intersectmbo/ouroboros-consensus/blob/c573f0639584623bd143f39e722340e412859aa1/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs#L121) allows us to get the protocol associated to a given block. Note that, according to this definition, two blocks can be associated with the same protocol. + `CanBeLeader` and `IsLeader` are type families that define the requirements and proofs, respectively, related to a node's ability to produce a block: - `CanBeLeader` represents the configuration data and keys a node needs to potentially be elected as leader. For instance, [in Praos](https://github.com/intersectmbo/ouroboros-consensus/blob/d014aae802159286bdc09bc4730966094d2d95dd/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L247), `PraosCanBeLeader` includes the operational certificate (OpCert), the cold verification key, and the VRF signing key. From 5218d4a9a3e9f4f8cc737065deb857121b71045d Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 4 Jul 2025 15:41:19 +0200 Subject: [PATCH 20/52] Add a section on the extended ledger state (`ExtLedgerState`) --- .../explanation/consensus-protocol.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index bedb04b510..174248611c 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -108,3 +108,32 @@ The `additionalEnvelopeChecks` for the `HardForkBlock` ensures that the block's Envelope validation is largely ledger-independent, though the additional checks for Praos reference configured maximum sizes and protocol versions derived from the ledger configuration. Envelope validation relies on [ValidateEnvelope](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L340) instances. This class extends [`BasicEnvelopeValidation`](https://github.com/intersectmbo/ouroboros-consensus/blob/4091b92226a7d5b0fd6531876722df32ea6b7f16/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L297). + +## The Extended Ledger State + +The **extended ledger state** ([`ExtLedgerState`](https://github.com/intersectmbo/ouroboros-consensus/blob/c573f0639584623bd143f39e722340e412859aa1/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Extended.hs#L71) is a combination of two primary components: + +- **Ledger State** +- **Header State**, which includes the [protocol state](#consensusprotocol) + +Bundling these two states is not merely a matter of convenience—though it does help maintain consistency between them. This combination is essential because, to determine whether a block can extend the chain, we must validate both: + +- The block itself, using the ledger rules +- The block header, using the protocol rules + +Therefore, both the ledger state and the protocol state are required. The [block application function](https://github.com/intersectmbo/ouroboros-consensus/blob/c573f0639584623bd143f39e722340e412859aa1/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Extended.hs#L191) takes a (ticked) extended ledger state as an argument. + +The `LedgerDB` is responsible for maintaining the `ExtLedgerState` at the chain tip and for the past `k` blocks. This is necessary to validate new blocks and handle potential forks. If the ledger and header states were stored separately, ensuring their consistency—especially during rollbacks or chain replays—would be significantly more complex. + +The extended ledger state is also used in queries, meaning that the validity, interpretation, and results of those queries may depend on the consensus-specific header state. + +The [`HeaderState`](https://github.com/intersectmbo/ouroboros-consensus/blob/c573f0639584623bd143f39e722340e412859aa1/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L185) is defined as a data structure containing: + +- The **chain tip**, which includes: + - Slot number + - Block number + - Additional `TipInfo` specific to the block type (e.g., whether it's an Epoch Boundary Block in Byron) +- The **chain-dependent state** of the consensus protocol ([`ChainDepState`](#consensusprotocol)), which: + - Is protocol-specific + - Is updated with new block headers + - Supports rollback From 5785878d4db2500e137276569a63e5d57f80df50 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 4 Jul 2025 15:42:00 +0200 Subject: [PATCH 21/52] Add an explanation about `ProtocolHeaderSupportsLedger` --- docs/website/contents/explanation/ledger-interaction.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/website/contents/explanation/ledger-interaction.md b/docs/website/contents/explanation/ledger-interaction.md index 40198c7cf1..0a4aaad198 100644 --- a/docs/website/contents/explanation/ledger-interaction.md +++ b/docs/website/contents/explanation/ledger-interaction.md @@ -13,6 +13,8 @@ The [`IsLedger`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/o The [`ApplyBlock`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Abstract.hs#L93) class is a core abstract interface in the Consensus layer that defines how the ledger state is updated by applying a block. It specifies the functions needed for this state transition, operating on a ledger state type (`l`) and a block type (`blk`). This class is fundamental to how the Consensus layer validates blocks and incorporates them into the chain. +In particular, for Shelley, block application requires a projection on the block header that Consensus defines ([`BHeaderView`](https://cardano-ledger.cardano.intersectmbo.org/cardano-ledger-core/Cardano-Ledger-BHeaderView.html#t:BHeaderView)). Thus, we rely on a [`ProtocolHeaderSupportsLedger`](https://github.com/intersectmbo/ouroboros-consensus/blob/c573f0639584623bd143f39e722340e412859aa1/ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Protocol/Abstract.hs#L188) class to implement said projection. + The [`LedgerSupportsMempool`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsMempool.hs#L116) typeclass defines the essential interface that the Ledger layer provides to the Mempool. Its primary function is to enable the Mempool to validate individual transactions. The [`LedgerCfg`](https://github.com/intersectmbo/ouroboros-consensus/blob/main/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/Basics.hs#L127) type family defines the static environment or configuration required by a specific ledger implementation. It holds the fixed parameters and rules that govern a ledger's behavior. This configuration is passed to various ledger-related functions used throughout `ouroboros-consensus`. Different [ledger eras](TODO: link to some table that explains and summarizes them) require different static configurations. For instance, the duration of slots and the size (in slots) of epochs[^1], initial delegations or assignment of funds to addresses. From 559f88e597a878b91680962cf13407032555e089 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 4 Jul 2025 19:04:34 +0200 Subject: [PATCH 22/52] Add a section on Chain Validity ... explaining the checks that are performed. --- .../explanation/consensus-protocol.md | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 174248611c..a558280e6d 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -116,7 +116,7 @@ The **extended ledger state** ([`ExtLedgerState`](https://github.com/intersectmb - **Ledger State** - **Header State**, which includes the [protocol state](#consensusprotocol) -Bundling these two states is not merely a matter of convenience—though it does help maintain consistency between them. This combination is essential because, to determine whether a block can extend the chain, we must validate both: +Bundling these two states is not merely a matter of convenience—though it does help maintain consistency between them. This combination is essential because, to determine whether a block can extend the chain, we must [validate](#block-validity) both: - The block itself, using the ledger rules - The block header, using the protocol rules @@ -137,3 +137,43 @@ The [`HeaderState`](https://github.com/intersectmbo/ouroboros-consensus/blob/c57 - Is protocol-specific - Is updated with new block headers - Supports rollback + +## Chain Validity + +Checking for chain validity in Cardano encompasses several stages, including time-based validity, header validity, and full block validity. + +### Time-based Validity + +The system must reject blocks from the **far future**, ie those whose slot [onset](#TODO-ref) is ahead of the local wall clock by more than the admissible clock skew. Such blocks are assumed not to have been minted by honest nodes. + +However, blocks from the **near future**, ie blocks whose slot onset is ahead of the wall clock but within the admissible skew, are not immediately rejected. These blocks are assumed to potentially have been minted by honest nodes. +An artificial delay is introduced until their slot time is reached, preventing a node from processing a block before its actual slot onset. + +This time-based check is primarily performed when headers are [received by the chain client](https://github.com/intersectmbo/ouroboros-consensus/blob/5785878d4db2500e137276569a63e5d57f80df50/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client.hs#L1509), as shown in [this section of the code](https://github.com/intersectmbo/ouroboros-consensus/blob/5785878d4db2500e137276569a63e5d57f80df50/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client.hs#L1728). + +### Header Validity + +Header validity is primarily implemented in the abstract consensus layer. +It is [performed by the `ChainSync` client](https://github.com/intersectmbo/ouroboros-consensus/blob/5785878d4db2500e137276569a63e5d57f80df50/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client.hs#L1937) when downloading headers from upstream peers. +The goal of this early validation is to prevent Denial-of-Service (DoS) attacks by quickly discarding invalid headers. + +This process involves two main components: + +- **Header envelope validation**: defined by the [`ValidateEnvelope`](#validateenvelope) class. +- **Consensus protocol validation**: implemented indirectly via the `updateChainDepState` function of the [`ConsensusProtocol`](#consensusprotocol) class. +The validity of a header is determined by examining its `ValidateView`. + +### Block Validity + +Full block validity involves both: + +- Applying the block to the ledger state. +- Applying the header to the protocol state. + +This validation is a critical part of the [chain selection](#chain-selection) process. + +Although headers are already validated by the `ChainSync` client, they are re-validated during block application. +This re-validation is necessary to update the `ChainDepState` within the extended ledger state. +This step is expected to succeed, given that the header was previously validated by the `ChainSync` client. + +## Chain Selection From 010b374c54f4d2f485ab114f702db6ec3b7a8f95 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 7 Jul 2025 11:37:39 +0200 Subject: [PATCH 23/52] Minor --- docs/website/contents/explanation/consensus-protocol.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index a558280e6d..9974f42bc3 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -136,11 +136,11 @@ The [`HeaderState`](https://github.com/intersectmbo/ouroboros-consensus/blob/c57 - The **chain-dependent state** of the consensus protocol ([`ChainDepState`](#consensusprotocol)), which: - Is protocol-specific - Is updated with new block headers - - Supports rollback + - It can be rolled back ## Chain Validity -Checking for chain validity in Cardano encompasses several stages, including time-based validity, header validity, and full block validity. +Checking for [chain validity](https://cardano-scaling.github.io/cardano-blueprint/consensus/chainvalid.html) in Cardano encompasses several stages, including time-based validity, header validity, and full block validity. ### Time-based Validity From d4e72cd91ef7a3b73b980facdd59083b184cabf4 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 8 Jul 2025 13:17:04 +0200 Subject: [PATCH 24/52] Add an explanation about chain ordering --- .../explanation/consensus-protocol.md | 92 ++++++++++++++++++- 1 file changed, 90 insertions(+), 2 deletions(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 9974f42bc3..76585be489 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -31,8 +31,8 @@ The `ConsensusProtocol` type class is indexed over the protocol type. The type f Function `checkIsLeader` takes among its arguments a `CanBeLeader` value and the current slot (`SlotNo`). If the node is the leader for that slot, this function returns a `Just (IsLeader p)`. Otherwise it returns `Nothing`. -The `SelectView` type represents a summary of the header at the tip of a chain. Values of this type allow the consensus protocol to choose between multiple competing chains by comparing these views. -In Praos, the `SelectView` is instantiated as `PraosChainSelectView`, containing the necessary information for the chain selection process, namely: +The `SelectView` type represents a summary of the header at the tip of a chain. It contains the necessary information for chain comparison. Values of this type allow the consensus protocol to choose between multiple competing chains by comparing these views. +In Praos, the `SelectView` is instantiated as [`PraosChainSelectView`](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L65), containing the necessary information for the chain selection process, namely: - The length of the chain. - The slot number of the block. - The verification key of the block's issuer @@ -64,6 +64,21 @@ This view is used when `updateChainDepState` and `reupdateChainDepState` functio Function `protocolSecurityParam` extracts the [security parameter](TODO!) `k` from the consensus protocol's static's configuration. +### `ChainOrdering` + +To agree on a single, linear, and eventually consistent chain of blocks we need to have a mechanism for ordering chains. + +The abstract Consensus layer mainly relies on a `SelectView` taken from the tip of each header fragment. +[`ChainOrder`](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L219) is a type class that defines how to compare these `SelectView`s. + +Its main function is [`preferCandidate`](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L262), which checks if a candidate chain is strictly better than the node’s current chain. This function is used during [initial chain selection](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L180) and in [chain selection](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L692). + +`ChainOrder` also requires a total order on the `SelectView` type. This allows candidate chains to be [sorted](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Util/AnchoredFragment.hs#L126) for prioritization. + +The `ConsensusProtocol` class provides a [`SimpleChainOrder`](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L272) deriving helper, which implements `preferCandidate` using the standard `Ord` instance of `SelectView`. However, some protocols like Praos use more complex tiebreaking rules. [`ChainOrderConfig`](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L227) allows different tiebreaking strategies to be used within the same protocol. + +For a detailed discussion on chain ordering in Ouroboros, see [this section](#Chain-Ordering-in-Ouroboros). + ### `LedgerSupportsProtocol` The [`LedgerSupportsProtocol`](https://github.com/intersectmbo/ouroboros-consensus/blob/a70eb17ef28831cd2e140b33ded49ce791028d88/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Ledger/SupportsProtocol.hs#L25) type class links the consensus protocol to the ledger. It defines what information the consensus layer requires from the ledger state to perform its operations, particularly for leader selection and forecasting future ledger states. @@ -176,4 +191,77 @@ Although headers are already validated by the `ChainSync` client, they are re-va This re-validation is necessary to update the `ChainDepState` within the extended ledger state. This step is expected to succeed, given that the header was previously validated by the `ChainSync` client. +## Chain Ordering in Ouroboros + +The core rule in Ouroboros protocols (including Praos) is to prefer longer chains over shorter ones. This assumes that the honest majority of stake will produce denser chains. + +- A chain that extends the current one is always preferred. +- If two chains are equally preferable, the node sticks with its current chain. + +In Praos and Shelley-based eras, if chains have the same length, tiebreaking [rules](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L108) are applied in this order: + +- 1. **Operational Certificate Issue Number**: +If both chain tips are from the same issuer and slot, the one with the higher `opcert` issue number is preferred. +This allows a stake pool operator to replace a compromised hot key with a new one and still have their blocks take precedence. + +- 2. **VRF Tiebreaker**: +If the `opcert` check is inconclusive (which is common when two pools are elected in the same slot), the chain with the lower VRF value at its tip is preferred. +This avoids always picking the first block to arrive, which could encourage centralization to reduce latency (see ["The Frankfurt Problem"](https://github.com/IntersectMBO/ouroboros-consensus/blob/40d77fdd74a9b2b2a1d112a0b836b5cb8026c88c/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L227)). The VRF value used for tiebreaking (non-range extended) is uncorrelated to the leader VRF value and typically results in a uniformly random decision. Depending on the `ChainOrderConfig` for Praos, there are two [flavors](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L75) that determine when this tie-breaker comparison takes place. + - `UnrestrictedVRFTiebreaker`: With this flavor, VRF tiebreakers are always compared. This has been the standard behavior for all eras before Conway. + - `RestrictedVRFTiebreaker`: This flavor restricts the VRF tiebreaker comparison to situations where the slot numbers of the chain tips differ by at most a specified maximum distance (`maxDist`). +The primary motivation for this restriction is to favor blocks that were diffused earlier (in earlier slots) over those diffused later, even if the later block has a "better" VRF tiebreaker value. This aims to mitigate [issues](https://github.com/IntersectMBO/ouroboros-network/issues/2913) caused by poorly configured or resource-constrained pools that might diffuse blocks later. + +### On the Transitivity of Praos Chain Ordering + +Praos chain ordering is **not transitive**, regardless of the VRF tiebreaker flavor. + +Consider the following select views where chains `A`, `B`, and `C` have the same length: + +| | A | B | C | +|-----------------|---|---|---| +| Issuer | x | y | x | +| Slot | 0 | i | 0 | +| `opcert` number | 2 | j | 1 | +| VRF | 3 | 2 | 1 | + +Lower-case letters stand for arbitrary values (two letters designate the same value if and only if they are same letter). + +In this example we have: + +- `B` is preferred over `A`, since `B` has lower VRF than `A`. +- `C` is preferred over `B`, since `C` has lower VRF than `B`. +- However `C` is **not** preferred over `A`, since they have the same issuer and slot, and therefore we prefer the chain with the highest `opcert` number (2), therefore `A` is preferred over `C`. + +Also, the `RestrictedVRFTiebreaker` flavour breaks the transitivity of chain ordering. To see this consider the following example where chains `D`, `E`, and `F` have the same length and different issuers, and assume `maxDist = 5` slots: + +| | D | E | F | +| ------------ | - | - | - | +| Slot | 0 | 3 | 6 | +| VRF | 3 | 2 | 1 | + + +We have that: +- `E` is preferred over `D`, since `E` has lower VRF than `D` and `|0 - 3| < 5`. +- `F` is preferred over `E`, since `F` has lower VRF than `E` and `|3 - 6| < 5` +- However, `D` is **not** preferred over `F`, but instead `D` and `F` are equally preferred since `|0 - 6| > 5` which implies that the VRF values of `D` and `F` are not used. + +Despite the non-transitivity, the fundamental Consensus properties, such as [Common Prefix](TODO-ref!), are not affected. This is because the primary factor for chain selection for a [caught-up](TODO-ref!) node remains the chain length, with longer chains always being preferred. However, a non-transitive chain ordering brings the following complications: + +- **Implementation**: The use of `sortBy` from base in `chain` selection, which is typically expected to work with transitive relations, could become a concern. While preliminary property tests suggest it works for the current non-transitive order, there's a theoretical risk that future GHC implementations might interact non-trivially. +- **Reasoning**: The non-transitive order can be very confusing for reasoning about anything related to chain order, as transitivity is an implicitly assumed property of orders. +This, in turn, leads to "obvious" properties failing to hold. For instance, the expectation that observing a node's selection over time yields a strictly improving sequence may not hold, as different observers could disagree on whether each selection is "strictly better" than the previous one. This non-objectivity can have practical effects, particularly for diffusion pipelining, which relies on a clear, consistent chain order. +- **Potential for Cycles**: The non-transitivity can conceptually give rise to "cycles" in preference, such as `A < B < C = A`. However, in practice, the node's implementation guarantees that it will never end up changing its selection in such a cycle because blocks already in the VolatileDB are not added again + +See [this issue comment](https://github.com/IntersectMBO/ouroboros-consensus/issues/1075#issuecomment-3035911537) for potential approaches to restoring chain transitivity. + +### On The History Of Chain Ordering In Cardano + +The relevant changes to the chain order occurred in these PRs in chronological order: + + - [ouroboros-network#2108](https://github.com/IntersectMBO/ouroboros-network/pull/2108) added the opcert number comparison step as the first tiebreaker (before that, only chain length was used). + - [ouroboros-network#2195](https://github.com/IntersectMBO/ouroboros-network/pull/2195) added the VRF tiebreaker, but lexicographically *before* the opcert number tiebreaker, in contrast to the status quo. + This means that the order still was total at this point, also see below. + - [ouroboros-network#2348](https://github.com/IntersectMBO/ouroboros-network/pull/2348) mostly did a change unrelated to the purpose of this document, but crucially, it swapped the order in which the VRF and opcert number comparison are done, introducing the current non-transitivity. Currently we do not prioritize the adoption of the node's own blocks. See [this comment](https://github.com/IntersectMBO/ouroboros-network/issues/1286#issuecomment-777614715), which mentions that this is not crucial for correctness, however the implications for incentives are still unclear. + + ## Chain Selection From c03302e880cf16d4b4097f5cc69d14c631c0dec5 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 8 Jul 2025 13:17:34 +0200 Subject: [PATCH 25/52] Correct typo --- .../Ouroboros/Consensus/Protocol/Abstract.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs index 76fe1bdf1a..eb2de96bfc 100644 --- a/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs +++ b/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs @@ -243,7 +243,7 @@ class Ord sv => ChainOrder sv where -- -- However, this is not necessarily a sufficient condition; a concrete -- implementation may decide to not have @ours ⊏ cand@ despite @ours < - -- cand@ for some pairs @ours, can@. However, it is recommended to think + -- cand@ for some pairs @ours, cand@. However, it is recommended to think -- about this carefully and rather use 'SimpleChainOrder' if possible, -- which defines @ours ⊏ cand@ as @ours < cand@, as it simplifies -- reasoning about the chain ordering. From 35c863a39b49729b9885c8fefdd89613eb543767 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 9 Jul 2025 13:52:58 +0200 Subject: [PATCH 26/52] Address Nick's comments on the `ChainOrder` section --- .../explanation/consensus-protocol.md | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 76585be489..37db84b031 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -64,7 +64,7 @@ This view is used when `updateChainDepState` and `reupdateChainDepState` functio Function `protocolSecurityParam` extracts the [security parameter](TODO!) `k` from the consensus protocol's static's configuration. -### `ChainOrdering` +### `ChainOrder` To agree on a single, linear, and eventually consistent chain of blocks we need to have a mechanism for ordering chains. @@ -195,7 +195,7 @@ This step is expected to succeed, given that the header was previously validated The core rule in Ouroboros protocols (including Praos) is to prefer longer chains over shorter ones. This assumes that the honest majority of stake will produce denser chains. -- A chain that extends the current one is always preferred. +- A chain that extends the current one is always preferable to it. - If two chains are equally preferable, the node sticks with its current chain. In Praos and Shelley-based eras, if chains have the same length, tiebreaking [rules](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L108) are applied in this order: @@ -206,12 +206,12 @@ This allows a stake pool operator to replace a compromised hot key with a new on - 2. **VRF Tiebreaker**: If the `opcert` check is inconclusive (which is common when two pools are elected in the same slot), the chain with the lower VRF value at its tip is preferred. -This avoids always picking the first block to arrive, which could encourage centralization to reduce latency (see ["The Frankfurt Problem"](https://github.com/IntersectMBO/ouroboros-consensus/blob/40d77fdd74a9b2b2a1d112a0b836b5cb8026c88c/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L227)). The VRF value used for tiebreaking (non-range extended) is uncorrelated to the leader VRF value and typically results in a uniformly random decision. Depending on the `ChainOrderConfig` for Praos, there are two [flavors](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L75) that determine when this tie-breaker comparison takes place. +This avoids always picking the first block to arrive, which could encourage geographic centralization to reduce latency (see ["The Frankfurt Problem"](https://github.com/IntersectMBO/ouroboros-consensus/blob/40d77fdd74a9b2b2a1d112a0b836b5cb8026c88c/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L227)). The VRF value used for tiebreaking (non-range extended) is uncorrelated to the leader VRF value and typically results in a uniformly random decision. Depending on the `ChainOrderConfig` for Praos, there are two [flavors](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L75) that determine when this tie-breaker comparison takes place. - `UnrestrictedVRFTiebreaker`: With this flavor, VRF tiebreakers are always compared. This has been the standard behavior for all eras before Conway. - `RestrictedVRFTiebreaker`: This flavor restricts the VRF tiebreaker comparison to situations where the slot numbers of the chain tips differ by at most a specified maximum distance (`maxDist`). -The primary motivation for this restriction is to favor blocks that were diffused earlier (in earlier slots) over those diffused later, even if the later block has a "better" VRF tiebreaker value. This aims to mitigate [issues](https://github.com/IntersectMBO/ouroboros-network/issues/2913) caused by poorly configured or resource-constrained pools that might diffuse blocks later. +The primary motivation for this restriction is to favor blocks that were diffused earlier over those diffused later, even if the later block has a "better" VRF tiebreaker value. This aims to mitigate [issues](https://github.com/IntersectMBO/ouroboros-network/issues/2913) caused by poorly configured or resource-constrained pools that might diffuse blocks later. -### On the Transitivity of Praos Chain Ordering +### On the Transitivity of Praos Chain Order Praos chain ordering is **not transitive**, regardless of the VRF tiebreaker flavor. @@ -220,11 +220,11 @@ Consider the following select views where chains `A`, `B`, and `C` have the same | | A | B | C | |-----------------|---|---|---| | Issuer | x | y | x | -| Slot | 0 | i | 0 | +| Slot | 0 | i | 1 | | `opcert` number | 2 | j | 1 | | VRF | 3 | 2 | 1 | -Lower-case letters stand for arbitrary values (two letters designate the same value if and only if they are same letter). +Lower-case letters stand for arbitrary values. In this example we have: @@ -241,16 +241,18 @@ Also, the `RestrictedVRFTiebreaker` flavour breaks the transitivity of chain ord We have that: -- `E` is preferred over `D`, since `E` has lower VRF than `D` and `|0 - 3| < 5`. -- `F` is preferred over `E`, since `F` has lower VRF than `E` and `|3 - 6| < 5` +- `E` is preferred over `D`, since `E` has lower VRF than `D` and `|0 - 3| <= 5`. +- `F` is preferred over `E`, since `F` has lower VRF than `E` and `|3 - 6| <= 5` - However, `D` is **not** preferred over `F`, but instead `D` and `F` are equally preferred since `|0 - 6| > 5` which implies that the VRF values of `D` and `F` are not used. -Despite the non-transitivity, the fundamental Consensus properties, such as [Common Prefix](TODO-ref!), are not affected. This is because the primary factor for chain selection for a [caught-up](TODO-ref!) node remains the chain length, with longer chains always being preferred. However, a non-transitive chain ordering brings the following complications: +Despite the non-transitivity, the fundamental Consensus properties, such as [Common Prefix](TODO-ref!), are not affected. This is because the primary factor for chain selection for a [caught-up](TODO-ref!) node remains the chain length, with longer chains always being preferred. +The Ouroboros Praos authors make no assumptions about how nodes resolve ties. +However, a non-transitive chain ordering brings the following complications: -- **Implementation**: The use of `sortBy` from base in `chain` selection, which is typically expected to work with transitive relations, could become a concern. While preliminary property tests suggest it works for the current non-transitive order, there's a theoretical risk that future GHC implementations might interact non-trivially. -- **Reasoning**: The non-transitive order can be very confusing for reasoning about anything related to chain order, as transitivity is an implicitly assumed property of orders. +- **Implementation**: The use of `sortBy` from [`base`](https://hackage.haskell.org/package/base) in chain selection, which is typically expected to work with transitive relations, could become a concern. While preliminary property tests suggest it works for the current non-transitive order, there's a potential risk that future GHC implementations might behave in unexpected ways. +- **Reasoning**: The non-transitive order can be very confusing for reasoning about anything related to chain order, as transitivity is an implicitly assumed property when working with order relations. This, in turn, leads to "obvious" properties failing to hold. For instance, the expectation that observing a node's selection over time yields a strictly improving sequence may not hold, as different observers could disagree on whether each selection is "strictly better" than the previous one. This non-objectivity can have practical effects, particularly for diffusion pipelining, which relies on a clear, consistent chain order. -- **Potential for Cycles**: The non-transitivity can conceptually give rise to "cycles" in preference, such as `A < B < C = A`. However, in practice, the node's implementation guarantees that it will never end up changing its selection in such a cycle because blocks already in the VolatileDB are not added again +- **Potential for Cycles**: The non-transitivity can conceptually give rise to "cycles" in preference, such as `A < B < C = A`. However, in practice, the node's implementation guarantees that it will never end up changing its selection in such a cycle because blocks already in the `VolatileDB` are not added again. See [this issue comment](https://github.com/IntersectMBO/ouroboros-consensus/issues/1075#issuecomment-3035911537) for potential approaches to restoring chain transitivity. From 881e6d4fc82cd5b9a4202b48354cd05f121c949a Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 9 Jul 2025 18:35:00 +0200 Subject: [PATCH 27/52] Address Alex's feedback on chain ordering explanation --- .../explanation/consensus-protocol.md | 46 +++++++------------ 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 37db84b031..9f81f26cc5 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -32,6 +32,7 @@ The `ConsensusProtocol` type class is indexed over the protocol type. The type f Function `checkIsLeader` takes among its arguments a `CanBeLeader` value and the current slot (`SlotNo`). If the node is the leader for that slot, this function returns a `Just (IsLeader p)`. Otherwise it returns `Nothing`. The `SelectView` type represents a summary of the header at the tip of a chain. It contains the necessary information for chain comparison. Values of this type allow the consensus protocol to choose between multiple competing chains by comparing these views. + In Praos, the `SelectView` is instantiated as [`PraosChainSelectView`](https://github.com/intersectmbo/ouroboros-consensus/blob/010b374c54f4d2f485ab114f702db6ec3b7a8f95/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos/Common.hs#L65), containing the necessary information for the chain selection process, namely: - The length of the chain. - The slot number of the block. @@ -39,6 +40,8 @@ In Praos, the `SelectView` is instantiated as [`PraosChainSelectView`](https://g - A counter for blocks issued by a specific issuer within a KES period. - A Verifiable Random Function (VRF) output, used for tie-breaking. +The `Ord` instance of `PraosChainSelectView` must be a total order (and in particular transitive). Currently there is [an edge case](https://github.com/IntersectMBO/ouroboros-consensus/issues/1075) that prevents this from being the case. + The `LedgerView` type is a projection or summary of the ledger state, which the Consensus protocol requires for tasks such as leadership checks or transaction size limits for blocks. This information, like @@ -213,48 +216,31 @@ The primary motivation for this restriction is to favor blocks that were diffuse ### On the Transitivity of Praos Chain Order -Praos chain ordering is **not transitive**, regardless of the VRF tiebreaker flavor. - -Consider the following select views where chains `A`, `B`, and `C` have the same length: - -| | A | B | C | -|-----------------|---|---|---| -| Issuer | x | y | x | -| Slot | 0 | i | 1 | -| `opcert` number | 2 | j | 1 | -| VRF | 3 | 2 | 1 | - -Lower-case letters stand for arbitrary values. +Function `preferCandidate` is not defined in terms of the `Ord` instance of Praos' `SelectView` . This function is not transitive when using `RestrictedVRFTiebreaker`. However this does not constitute a problem. -In this example we have: +To see why `RestrictedVRFTiebreaker` flavour breaks the transitivity of chain ordering, consider the following example where chains `D`, `E`, and `F` have the same length and different issuers, and assume `maxDist = 5` slots: -- `B` is preferred over `A`, since `B` has lower VRF than `A`. -- `C` is preferred over `B`, since `C` has lower VRF than `B`. -- However `C` is **not** preferred over `A`, since they have the same issuer and slot, and therefore we prefer the chain with the highest `opcert` number (2), therefore `A` is preferred over `C`. - -Also, the `RestrictedVRFTiebreaker` flavour breaks the transitivity of chain ordering. To see this consider the following example where chains `D`, `E`, and `F` have the same length and different issuers, and assume `maxDist = 5` slots: - -| | D | E | F | -| ------------ | - | - | - | -| Slot | 0 | 3 | 6 | -| VRF | 3 | 2 | 1 | +| | A | B | C | +|------|---|---|---| +| Slot | 0 | 3 | 6 | +| VRF | 3 | 2 | 1 | We have that: -- `E` is preferred over `D`, since `E` has lower VRF than `D` and `|0 - 3| <= 5`. -- `F` is preferred over `E`, since `F` has lower VRF than `E` and `|3 - 6| <= 5` -- However, `D` is **not** preferred over `F`, but instead `D` and `F` are equally preferred since `|0 - 6| > 5` which implies that the VRF values of `D` and `F` are not used. +- `B` is preferred over `A`, since `B` has lower VRF than `A` and `|0 - 3| <= 5`. +- `C` is preferred over `B`, since `C` has lower VRF than `B` and `|3 - 6| <= 5` +- However, `C` is **not** preferred over `A`, but instead `A` and `C` are equally preferred since `|0 - 6| > 5` which implies that the VRF values of `A` and `C` are not used. + +It is worth noting that `RestrictedVRFTiebreaker` is used only for `preferCandidate`, but not for the `Ord` instance of `PraosChainSelectView`. Despite the non-transitivity, the fundamental Consensus properties, such as [Common Prefix](TODO-ref!), are not affected. This is because the primary factor for chain selection for a [caught-up](TODO-ref!) node remains the chain length, with longer chains always being preferred. The Ouroboros Praos authors make no assumptions about how nodes resolve ties. However, a non-transitive chain ordering brings the following complications: -- **Implementation**: The use of `sortBy` from [`base`](https://hackage.haskell.org/package/base) in chain selection, which is typically expected to work with transitive relations, could become a concern. While preliminary property tests suggest it works for the current non-transitive order, there's a potential risk that future GHC implementations might behave in unexpected ways. - **Reasoning**: The non-transitive order can be very confusing for reasoning about anything related to chain order, as transitivity is an implicitly assumed property when working with order relations. -This, in turn, leads to "obvious" properties failing to hold. For instance, the expectation that observing a node's selection over time yields a strictly improving sequence may not hold, as different observers could disagree on whether each selection is "strictly better" than the previous one. This non-objectivity can have practical effects, particularly for diffusion pipelining, which relies on a clear, consistent chain order. +This, in turn, leads to "obvious" properties failing to hold. For instance, the expectation that observing a node's selection over time yields a strictly improving sequence may not hold, as different observers could disagree on whether each selection is "strictly better" than the previous one. - **Potential for Cycles**: The non-transitivity can conceptually give rise to "cycles" in preference, such as `A < B < C = A`. However, in practice, the node's implementation guarantees that it will never end up changing its selection in such a cycle because blocks already in the `VolatileDB` are not added again. - -See [this issue comment](https://github.com/IntersectMBO/ouroboros-consensus/issues/1075#issuecomment-3035911537) for potential approaches to restoring chain transitivity. +In particular, the consistency of `ChainOrder` with `Ord` guarantees that we can never have `preferCandidate A B`, `preferCandidate B C`, but also `preferCandidate C A`. ### On The History Of Chain Ordering In Cardano From fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 9 Jul 2025 18:44:27 +0200 Subject: [PATCH 28/52] Minor --- docs/website/contents/explanation/consensus-protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 9f81f26cc5..2d289db62f 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -218,7 +218,7 @@ The primary motivation for this restriction is to favor blocks that were diffuse Function `preferCandidate` is not defined in terms of the `Ord` instance of Praos' `SelectView` . This function is not transitive when using `RestrictedVRFTiebreaker`. However this does not constitute a problem. -To see why `RestrictedVRFTiebreaker` flavour breaks the transitivity of chain ordering, consider the following example where chains `D`, `E`, and `F` have the same length and different issuers, and assume `maxDist = 5` slots: +To see why `RestrictedVRFTiebreaker` flavour breaks the transitivity of chain ordering, consider the following example where chains `A`, `B`, and `C` have the same length and different issuers, and assume `maxDist = 5` slots: | | A | B | C | |------|---|---|---| From 6c1f0e293b50b898e69116df0355595004432077 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 11 Jul 2025 18:46:41 +0200 Subject: [PATCH 29/52] Add a section on Chain Selection --- .../explanation/consensus-protocol.md | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 2d289db62f..72ceaa7fa9 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -251,5 +251,55 @@ The relevant changes to the chain order occurred in these PRs in chronological o This means that the order still was total at this point, also see below. - [ouroboros-network#2348](https://github.com/IntersectMBO/ouroboros-network/pull/2348) mostly did a change unrelated to the purpose of this document, but crucially, it swapped the order in which the VRF and opcert number comparison are done, introducing the current non-transitivity. Currently we do not prioritize the adoption of the node's own blocks. See [this comment](https://github.com/IntersectMBO/ouroboros-network/issues/1286#issuecomment-777614715), which mentions that this is not crucial for correctness, however the implications for incentives are still unclear. - ## Chain Selection + +[Chain selection](https://cardano-scaling.github.io/cardano-blueprint/consensus/chainsel.html) is the process by which a node determines the best valid chain it has observed and adopted so far, among a set of competing chains. The node's internal storage layer maintains this chain, which is divided into two main parts: + +- The immutable part of the chain consists of blocks that are no longer subject to rollback, as they have been confirmed by at least `k` blocks. These blocks are stored in the [ImmutableDB](TODO-ref!) +- The volatile part of the chain contains up to the newest `k` blocks of the current selection. These blocks are stored in the [`VolatileDB`](TODO-ref!), which can also contain multiple competing forks of the chain, including those the node has switched away from or might switch to in the future, as well as disconnected blocks received out of order. These volatile blocks are still subject to potential rollback if the chain selection process leads to the adoption of a more preferable fork. Conversely, blocks in the volatile part that are not part of the current chain, might become part of it as more block are added to the `VolatileDB`. + +The in-memory representation of the current chain fragment (the node's "current selection") is considered the best possible path through the VolatileDB, and it is anchored at the immutable tip of the chain (the most recent "immutable" block, which is the tip of the `ImmutableDB`). + +The chain selection process may result in the node's current chain either being extended by new blocks or the node performing a switch to a new fork. Furthermore, as the current selection grows, blocks that were previously part of the volatile portion of the chain (stored in the `VolatileDB`) may transition to the immutable part as they become confirmed by at least `k` blocks. See [this section](TODO-ref-to-garbage-collection) for more information on how blocks transition from the `VolatileDB` to the `ImmutableDB`. + +Chain selection is the responsibility of the chain database. This is because the `ChainDB` has knowledge of when new blocks arrive and which candidates exist in the database. + +The core logic for chain selection is implemented in the [`chainSelectionForBlock`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L521) function. It uses the types and classes discussed in this section which abstract away the specifics of the consensus protocol being used. + +The gist of chain selection within a Cardano node involves identifying the best valid chain from a collection of potential chain fragments. +These fragments are formed by paths through the `VolatileDB` that originate from the immutable tip. +Candidates are sorted based on the `SelectView`, and the adoption of a new chain is ultimately decided by the [`ChainOrder`](#chainorder) defined by the specific protocol. + +A significant part of the decision-making process for adopting alternative chains is managed by the [`switchToAFork`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L776) function. It explores potential forks originating from the newly added block to determine whether a chain switch is required. + +During chain selection, the candidates are validated according to the [chain validity](#chain-validity) rules. + + +### Triggering Chain Selection + +Chain selection is triggered: + +- During initial chain selection via [`initialChainSelection`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L112). + +- After initialization, by a background process called [`addBlockRunner`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/Background.hs#L514). + This process calls [`chainSelSync`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L339), which ensures that the `ChainDB` continuously recomputes the optimal path (according to the chain validity and chain order rules) through the `VolatileDB` with each block addition. + +When a new block is added to the `ChainDB`, it is first written to disk and then chain selection is triggered. The process involves adding the block to a queue ([`cdbChainSelQueue`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/Types.hs#L341)), from which the `addBlockRunner` thread dequeues blocks. + +Blocks are added to `cdbChainSelQueue` whenever a new block is downloaded via the `BlockFetch` component or minted locally. + +The `ChainDB` assumes that no blocks from the future are added to the `cdbChainSelQueue`. The `ChainSync` process enforces this constraint. +However, this precondition is currently not checked [during initialization](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L136). + +### Chain selection and LoE + +During the node's startup and initial chain selection phase, the `ChainDB` [explicitly prevents](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L231) selecting more than `k` blocks in maximal candidates if [LoE](TODO-ref!) (Limit on Eagerness) is enabled. +This precaution helps avoid accidentally adopting an adversarial chain from the `VolatileDB`, a chain that LoE would have rejected during live syncing. + +When a new block (or part of a fork) would extend the current chain beyond the LoE limit, it is added to the `ChainDB`'s database, but it does not immediately trigger a chain selection switch or extension. +This control mechanism is crucial for preventing the premature adoption of potentially undesirable chains. + +Blocks that were previously added to the database but not selected due to the LoE must be reprocessed by chain selection once the LoE fragment advances. +A background thread ([`watcher`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L122)) handles this by polling candidate fragments and explicitly sending `ChainSelReprocessLoEBlocks` messages to the `cdbChainSelQueue`, ensuring that these blocks are reconsidered. + +When chain selection evaluates candidate fragments (potential forks to switch to), these fragments are [trimmed](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L745) to respect the LoE. From 087ccd460aee183e40a730aa26e040f2544bd467 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 14 Jul 2025 12:09:28 +0200 Subject: [PATCH 30/52] Add a section on block forging --- .../contents/explanation/consensus-protocol.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 72ceaa7fa9..748b4351ec 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -303,3 +303,17 @@ Blocks that were previously added to the database but not selected due to the Lo A background thread ([`watcher`](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L122)) handles this by polling candidate fragments and explicitly sending `ChainSelReprocessLoEBlocks` messages to the `cdbChainSelQueue`, ensuring that these blocks are reconsidered. When chain selection evaluates candidate fragments (potential forks to switch to), these fragments are [trimmed](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L745) to respect the LoE. + +## Block Forging + +Block forging is a single-threaded process initiated at the beginning of each slot. Its primary purpose is to determine whether the node is elected to mint a block and, if so, to create and submit that block to the chain. The process is defined in [`forkBlockForging`](https://github.com/intersectmbo/ouroboros-consensus/blob/6c1f0e293b50b898e69116df0355595004432077/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/NodeKernel.hs#L491). + +Block forging logic relies on the `ConsensusProtocol` instance of the protocol in use to determine if the node is a leader for the current slot ([`checkIsLeader`](https://github.com/intersectmbo/ouroboros-consensus/blob/6c1f0e293b50b898e69116df0355595004432077/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Protocol/Abstract.hs#L142)). + +The [`blockForgingController`](https://github.com/intersectmbo/ouroboros-consensus/blob/6c1f0e293b50b898e69116df0355595004432077/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/NodeKernel.hs#L375) function uses [`BlockChainTime`](https://github.com/intersectmbo/ouroboros-consensus/blob/6c1f0e293b50b898e69116df0355595004432077/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/BlockchainTime/API.hs#L23) to monitor the current slot. + +Block forging invokes `forecastFor` on the `LedgerView`. If this operation takes too long, it can delay block production. Note that if it’s not possible to forecast to the current slot, then forging a block is not possible. + +If `checkLeader` confirms the node is a leader, a block is forged, extending the current [selected chain](#chain-selection). Transactions are selected from a [mempool snapshot](TODO-ref!), which is a sequence of valid transactions consistent with the ledger state upon which the block will be built. For the purposes of block forging and the consensus protocol, these transactions are irrelevant as long as they are _valid_. + +The forged block is added to the `ChainDB`, which triggers chain selection. The block is treated like any external block to ensure robustness, allowing both the forging and chain selection logic to independently validate and agree on the block’s correctness. From 9006ea50e069b40f27ac0af054116be94e8fc2a8 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 14 Jul 2025 14:01:18 +0200 Subject: [PATCH 31/52] Add a section on the k security parameter --- .../explanation/consensus-protocol.md | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 748b4351ec..e9d2be960a 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -317,3 +317,37 @@ Block forging invokes `forecastFor` on the `LedgerView`. If this operation takes If `checkLeader` confirms the node is a leader, a block is forged, extending the current [selected chain](#chain-selection). Transactions are selected from a [mempool snapshot](TODO-ref!), which is a sequence of valid transactions consistent with the ledger state upon which the block will be built. For the purposes of block forging and the consensus protocol, these transactions are irrelevant as long as they are _valid_. The forged block is added to the `ChainDB`, which triggers chain selection. The block is treated like any external block to ensure robustness, allowing both the forging and chain selection logic to independently validate and agree on the block’s correctness. + +## Security Parameter `k` + +The `k` parameter, often referred to as the security parameter, is a fundamental constant in the Ouroboros consensus protocols. On Cardano mainnet, `k` is set to 2160 blocks. This parameter underpins various aspects of a Cardano node's operation, from chain selection and storage to security guarantees and performance. + +For Ouroboros Praos, used in Shelley-based eras, theoretical proofs guarantee that within `3k/f` slots, the chain will grow by at least `k` blocks. + +### Chain Immutability and Volatility + +The blockchain in a Cardano node is conceptually divided into an immutable part and a volatile part. A block becomes part of the immutable portion once it has been confirmed by at least `k` subsequent blocks. This property, known as _Common Prefix_, is a security guarantee of Ouroboros Praos. Immutable blocks are stored in the [ImmutableDB](TODO-ref). + +The volatile part consists of the newest `k` blocks, which remain subject to rollback if a more preferable chain is discovered. These blocks, along with other potential fork candidates, are stored in the `VolatileDB`. + +### Chain Selection and Rollbacks + +The `ouroboros-consensus` implementation enforces a strict rule: a node will never switch to a chain that forks more than `k` blocks deep from its current tip. + +When a node is [caught up](TODO-ref), any candidate chains requiring a rollback exceeding `k` blocks are excluded from consideration. This constraint limits the number of ledger states that need to be retained to evaluate forks. Additionally, it prevents arbitrary-length rollbacks thus protecting against potential [attacks](#network-security-and-performance) that rely on this. + +When a node is [syncing](TODO-ref) with the chain, an adversary may present it with an alternative chain that forks more than `k` blocks from the current tip. However, the [Genesis](TODO-ref) syncing protocol ensures that a node joining the network does not switch to an adversarial chain. + +Genesis relies on the property that an honest chain is always denser than any adversarial chain within a window of `s` slots, which in practice is defined as `3k/f`, where `f` is the [active slot coefficient](TODO-ref). + +### Ledger and Protocol State Management + +The LedgerDB (Ledger Database) is designed to retain the last `k` ledger states (specifically, `k + 1` states including the anchor). This facilitates fast rollbacks and the evaluation of potential forks. + +To validate headers, the system must [forecast](./ledger-interaction.md#forecasting-and-the-forecast-range) a `LedgerView` for future slots. This process requires the ledger to look ahead `k+1` blocks from a given reference point, providing sufficient information to enable a node to see if a candidate chain is better. + +### Network Security and Performance + +The `k` parameter is fundamental for bounding the work a node performs and its memory and storage requirements. This is crucial for preventing denial-of-service (DoS) attacks. Without the rollback constraint, an adversary could force a node to store unbounded amounts of data or perform unbounded validation work. + +For Cardano’s Praos implementation, `k` was specifically set to 2160 to help mitigate the risk of [grinding attacks](TODO-ref). From 9ac679c689e2b0e3c22a544af5e536cbe747ad36 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 14 Jul 2025 18:09:02 +0200 Subject: [PATCH 32/52] Add a section on PBFT --- .../explanation/consensus-protocol.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index e9d2be960a..b17296acb8 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -351,3 +351,24 @@ To validate headers, the system must [forecast](./ledger-interaction.md#forecast The `k` parameter is fundamental for bounding the work a node performs and its memory and storage requirements. This is crucial for preventing denial-of-service (DoS) attacks. Without the rollback constraint, an adversary could force a node to store unbounded amounts of data or perform unbounded validation work. For Cardano’s Praos implementation, `k` was specifically set to 2160 to help mitigate the risk of [grinding attacks](TODO-ref). + +## Consensus Protocols Used in Cardano + +### PBFT + +In Cardano's early days, the system utilized Ouroboros Permissive BFT (PBFT) as its consensus algorithm, serving as a transitional protocol from the original Ouroboros Classic to the more advanced Ouroboros Praos. +This choice ensured backward compatibility with the Byron era of the blockchain following the [original implementation](https://github.com/input-output-hk/cardano-sl/) rewrite, allowing the development effort to focus on the new implementation (including the new TPraos protocol). + +The use of PBFT in Byron reflected a more centralized phase for Cardano, with initial block production relying on a small set of core nodes. +The eventual transition to a more decentralized system, where stake pools became responsible for block creation, was a gradual process managed by a [`d` parameter](https://github.com/intersectmbo/cardano-ledger/releases/latest/download/shelley-delegation.pdf) that controlled the proportion of slots assigned to bootstrap keys versus stake pools. + +Unlike the strict round-robin leader schedule of pure BFT, Permissive BFT relaxed this requirement, allowing blocks to be signed by any of the known core nodes. +However, it imposed a limit on the number of signatures a given node could provide within a specific window of blocks; exceeding this threshold would result in the block being rejected as invalid. +This threshold was set at 0.22, a value chosen to balance compatibility with Ouroboros Classic chains while still restricting malicious behavior. + +Although the Ouroboros BFT protocol did not impose a rollback limit of `k` blocks, the Consensus implementation of PBFT adheres to this bound for the reasons outlined in [this section](#security-parameter-k). Importantly, this constraint does not fundamentally change the protocol's behavior. + +In situations where multiple blocks could exist in the same slot, PBFT allowed for arbitrary tie-breaking. The chain selection order prioritized chain length, followed by the `opcert` number, and then the VRF value. + +The Consensus instances for the Byron era can be found in [this directory](https://github.com/IntersectMBO/ouroboros-consensus/tree/main/ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron). +The specification for this protocol can be found [here](https://github.com/intersectmbo/cardano-ledger/releases/latest/download/byron-blockchain.pdf), and the research paper describing the BFT protocol can be found [here](https://iohk.io/en/research/library/papers/ouroboros-bft-a-simple-byzantine-fault-tolerant-consensus-protocol/). From 50ea594c1e0c467f3d96a1d2848de5a15f792fdf Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 14 Jul 2025 18:29:38 +0200 Subject: [PATCH 33/52] Add a section on TPraos --- .../contents/explanation/consensus-protocol.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index b17296acb8..0f32b3382a 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -372,3 +372,16 @@ In situations where multiple blocks could exist in the same slot, PBFT allowed f The Consensus instances for the Byron era can be found in [this directory](https://github.com/IntersectMBO/ouroboros-consensus/tree/main/ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron). The specification for this protocol can be found [here](https://github.com/intersectmbo/cardano-ledger/releases/latest/download/byron-blockchain.pdf), and the research paper describing the BFT protocol can be found [here](https://iohk.io/en/research/library/papers/ouroboros-bft-a-simple-byzantine-fault-tolerant-consensus-protocol/). + +### TPraos + +Ouroboros Transitional Praos (TPraos) served as an intermediate consensus protocol in Cardano, bridging the gap between the initial, more centralized Byron era (which used Ouroboros Permissive BFT) and the fully decentralized Ouroboros Praos. +Introduced for the Shelley-based eras, TPraos was designed to facilitate a smooth transition to decentralization. + +A key feature of TPraos was the `d` parameter, which controlled the proportion of slots assigned to core bootstrap keys versus those elected by stake pools. +Starting at `d=1` (fully centralized bootstrap keys) and gradually decreasing to `d=0` (full decentralization), this parameter enabled a controlled handover of block production to the broader network of stake pools. +For any given `d` value, the system would perform leader election according to Ouroboros Praos rules for all slots, but then override a `d`-fraction of these slots, assigning them to the old core nodes. + +Like its successor, Praos, TPraos relies on a Verifiable Random Function (VRF) to determine slot leadership in a publicly verifiable yet unpredictable manner. + +The TPraos related instances for Consensus can be found [here](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/TPraos.hs). From 24b51f92a523cfea34b5044eb9b8b99964103339 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Tue, 15 Jul 2025 12:19:44 +0200 Subject: [PATCH 34/52] Add a section about Praos --- .../explanation/consensus-protocol.md | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index 0f32b3382a..d568a1519b 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -375,7 +375,7 @@ The specification for this protocol can be found [here](https://github.com/inter ### TPraos -Ouroboros Transitional Praos (TPraos) served as an intermediate consensus protocol in Cardano, bridging the gap between the initial, more centralized Byron era (which used Ouroboros Permissive BFT) and the fully decentralized Ouroboros Praos. +Starting with the Shelley era, Ouroboros Transitional Praos (TPraos) served as an intermediate consensus protocol in Cardano, bridging the gap between the initial, more centralized Byron era (which used Ouroboros Permissive BFT) and the fully decentralized Ouroboros Praos. Introduced for the Shelley-based eras, TPraos was designed to facilitate a smooth transition to decentralization. A key feature of TPraos was the `d` parameter, which controlled the proportion of slots assigned to core bootstrap keys versus those elected by stake pools. @@ -384,4 +384,22 @@ For any given `d` value, the system would perform leader election according to O Like its successor, Praos, TPraos relies on a Verifiable Random Function (VRF) to determine slot leadership in a publicly verifiable yet unpredictable manner. -The TPraos related instances for Consensus can be found [here](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/TPraos.hs). +The TPraos related instances for Consensus can be found [here](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/TPraos.hs). For its formal definition, refer to Section 12 of the [Shelley formal specification](https://github.com/intersectmbo/cardano-ledger/releases/latest/download/shelley-ledger.pdf). + +### Praos + +Starting with the Babbage era, the Consensus layer implements the [Ouroboros Praos](https://eprint.iacr.org/2017/573.pdf) protocol. This is a fully decentralized protocol, which operates without the `d` parameter used in TPraos. + +TPraos used the leader VRF value itself as the tie-breaker when multiple stake pools were elected to produce a block in the same slot. +Praos (since the Babbage era) [revised](https://github.com/IntersectMBO/ouroboros-network/pull/3595) this tie-breaking mechanism to use the The non-range extended VRF value[^1], which is uncorrelated to the leader VRF, ensuring that in multi-leader scenarios, the probability of one pool winning over another is consistently 1/2, irrespective of their stake size. +The reason for this change was performance: we now only require a single VRF computation, from which multiple outputs can be derived, reducing the number of computations from two in TPraos to one in Praos. + +Praos provides strong security guarantees, formally proven to ensure a vanishingly small failure probability for key properties: + +- Common Prefix: This property ensures that any two honest chains will share a [common prefix](TODO-ref-definition) of at least `k` blocks, meaning that a block deep in the chain (more than `k` blocks from the tip) is considered immutable and will remain on all honest nodes' chains. +- Chain Growth: This property guarantees that the honest chain will grow by a certain number of blocks within a given period of slots. +- This ensures that every span of a certain number of slots on an honest chain contains at least one block minted by an honest node. + +The Praos instances for Consensus can be found [in this module](https://github.com/intersectmbo/ouroboros-consensus/blob/50ea594c1e0c467f3d96a1d2848de5a15f792fdf/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos.hs#L17). + +[^1]: See this paper for background on range extension. Briefly, it means that one can derive multiple independent VRF outputs from a single VRF output via hashing and domain separation. From ca3a2b162f27bd0e2361fda68847af18095f476e Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 16 Jul 2025 12:38:52 +0200 Subject: [PATCH 35/52] Move Genesis.md to genesis-design.md --- .../contents/explanation/genesis-design.md | 777 ++++++++++++++++++ 1 file changed, 777 insertions(+) create mode 100644 docs/website/contents/explanation/genesis-design.md diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md new file mode 100644 index 0000000000..aab5c652a2 --- /dev/null +++ b/docs/website/contents/explanation/genesis-design.md @@ -0,0 +1,777 @@ + + +# Cardano Genesis + +This document contains the High-Level Design for adding Ouroboros Genesis to the existing Cardano implementation of Ouroboros Praos. + +## Prerequisites + +The following is taken for granted. + +- The reader is familir with the core architecture of the existing Praos implementation ([ChainSync](Glossary#chainsync) mini protocol, [BlockFetch](Glossary#blockfetch) mini protocol and decision logic, etc). +- The reader is aware of the motivation for Ouroboros Genesis ([paper](https://iohk.io/en/research/library/papers/ouroboros-genesis-composable-proof-of-stake-blockchains-with-dynamic-availability/) & [blog post](https://iohk.io/en/blog/posts/2023/02/09/ouroboros-genesis-enhanced-security-in-a-dynamic-environment/)) over Ouroboros Praos ([paper](https://iohk.io/en/research/library/papers/ouroboros-praos-an-adaptively-secure-semi-synchronous-proof-of-stake-protocol/)), ie safe decentralized syncing. + +## Notation + +- {X Y Z} indicates the definition of X Y Z, helpful for use with search functionality, such as CTRL-F. + +- Occurences of the word _peer_ in this document almost always means upstream peer, one providing blocks to the syncing node. + +- {Valency} is the number of upstream peers. + +- {Kcp} is the `k` [security parameter](Glossary#security-parameter) parameter of the Common Prefix property of Ouroboros Praos: how many blocks a well-connected honest node might possibly need to roll back in order to adopt the honest network's latest best chain. + +- {Δ} is the parameter from Ouroboros Praos's security argument: the maximum delay before a block reaches every well-connected honest node. + +- {∩} is the intersection operator: X∩Y is the longest chain that is a prefix of both X and Y. + +- {Scg} is the `s` parameter of the [Chain Growth](Glossary#chain-growth-property) property of Ouroboros Praos: the greatest possible number of slots it might take for the honest chain to grow by Kcp. + +- {Sgen} is the s parameter of the [Ouroboros Genesis chain selection rule](Glossary#genesis-chain-selection-rule): how many slots after an intersection are considered when comparing two competing chains' densities. + This document assumes Sgen equals Scg, though other possibilites will be discussed in [Parameter Tuning](#parameter-tuning) below. + +## Requirements + +Any implementation of Genesis in Cardano must satisfy the following requirements. + +- {No Praos Disruption}: The new behaviors do not alter the behavior of a node that is already done syncing with the network, ie the Ouroboros Praos behaviors. + +- {Sync Safety}: If the syncing node always has at least one peer that is honest, not itself syncing, and connected with reasonable latency and bandwidth to the syncing node as well as the honest network, then the syncing node will never select more than Kcp blocks of a chain that is not extended by a recent selection of some honest nodes in the network (ie approximately within Δ). + The antecedent of that implication is the {Honest Availability Assumption} ({HAA}). + It is beyond the scope of this design to ensure the HAA, but it seems viable even if non-trivial (see the Diffusion Layer's _Ledger Peers_ design). + It is important to note that the Sync Safety requirement directly prevents the [_long-range attack_](Glossary#long-range-attack), which was the original motivation for Ouroboros Genesis. + +- {Sync Liveness}: The upper bound of unnecessary delay incurred during some interval of the sync is proportional to how many of the syncing node's upstream peers in that same interval are adversarial. + It is beyond the scope of this design to ensure that count of adversarial peers remains below some reasonable bound (eg 50). + +- {Limited Sync Load}: The syncing node does not incur unnecessary load on the honest network. + For example, a syncing node should only request the same block from more than one peer as a last resort. + +- {Disaster Tolerance}: Given sufficient configuration (that is hopefully temporary), the new behaviors should work even despite a disaster on the Cardano network. + +## Components + +This design consists of the following components. + +- The {Lightweight Checkpointing} logic allows for configuration data (comparable in potency to the genesis block) to force the node to reject some chains as invalid by fiat. + +- The {Genesis State Machine} ({GSM}) determines whether the node has finished syncing. + Moreover, while the node is not syncing, the GSM disables all components of this design except Lightweight Checkpointing and the GSM itself. + +- The {Limit on Eagerness} ({LoE}) prevents the syncing node from selecting more than Kcp blocks beyond the intersection of its peers' latest selections. + That interesction is called the {LoE anchor}. + (The implementation maintains an LoE fragment. + In an unfortunate collision of names, the LoE anchor is the tip of the LoE fragment, _not_ its [`anchor`](https://github.com/IntersectMBO/ouroboros-network/blob/88bf7766ddb70579b730f777e53473dcdc23b6d0/ouroboros-network-api/src/Ouroboros/Network/AnchoredSeq.hs#L94), see here[^loe-anchor-example] for an example.) + +- The {Genesis Density Disconnection} logic ({GDD}) disconnects from any advertised peer whose chain has too few blocks to be the honest chain and could prevent the syncing node from finishing. + There are some absolute limits, such as having no blocks at all within some interval of Scg slots. + The primary rule, though, involves comparisons between peers: disconnect from any peer whose advertised selection X doesn't have more blocks in the Sgen slots after its intersection X∩Y with any other peer's advertised selection Y than does Y, if Y has more than Kcp blocks after X∩Y. + +- The {Limit on Patience} ({LoP}) disconnects from any peer that is claiming to have subsequent headers on its selection but not sending them promptly. + +- The {ChainSync Jumping} optimization ({CSJ}) avoids fetching the honest header chain from more than one peer. + +- The {Devoted BlockFetch} decision logic ({DBF}) of a syncing node prefers to request blocks from only one peer at a time, the first peer it finds that serves the best available header chain and serves the blocks faster than the syncing node can validate them. + The Honest Availability Assumption ensures that one such peer exists. + +- The {Node Versus Environment} tests scrutinize the behavior of the partially-mocked node when subjected to adversarial inputs. + These are notably the first Cardano Consensus Layer tests to explicitly simulate non-trivial adversarial behaviors. + +All components are also depicted in the following diagram, with the exception of the GSM, which simply disables all other Genesis components (except Lightweight Checkpointing). + +```mermaid +graph LR + LightweightCheckpointing[Lightweight Checkpointing] + + subgraph ChainSel + LoE[Limit on Eagerness] + end + + subgraph ChainSync + LoP[Limit on Patience] + CSJ[ChainSync Jumping] + end + + GDD[Genesis Density Disconnection logic] + + DBF[Devoted BlockFetch] + DBF -- "new blocks" --> ChainSel + + LoEAnchor{LoE anchor} + + ChainSync -- "(enriched) candidate fragments" --> GDD + GDD -- "kills peers with low-density chains" --> ChainSync + GDD -- "maintains" --> LoEAnchor + + LoEAnchor -- "influences" --> LoE + + LightweightCheckpointing -- "reject certain blocks" --> ChainSync + LightweightCheckpointing -- "reject certain blocks" --> ChainSel + + ChainSync -- "candidate fragments" --> DBF + + LoE -- "stalls until we disconnect peers offering low-density chains" --> GDD +``` + +## How Components satisfy Requirements + +At a high-level, those requirements are satisfied by those components for the following reasons. + +- The Lightweight Checkpointing logic directly ensures Disaster Tolerance; during and/or after the disaster, some decision process (likely off-chain) would certify some additional checkpoints. + With sufficient checkpoint configuration data, a syncing node will be able to succesfully sync past a disasterously sparse section of the network's historical chain. + + Specifically, this allows for the GDD to favor some alternative chains over the network's densest chain, since a configured checkpoint could prevent the GDD from ever seeing those alternatives. + As a side benefit, this means the initial Genesis deployment can include checkpoints that cover the Byron era, which has different density characteristics, and some portions of the historical chain that are unusually sparse. + Without checkpoints, it's theoretically possible that the "missing" blocks all ended up on some unknown adversarial chain that the GDD would actually prefer to today's Cardano network's chain. + +- The GSM directly ensures No Praos Disruption (unless the node becomes [eclipsed](Glossary#eclipse-attack) or the honest chain actually stops growing for too long). + +- The LoE directly ensures Sync Safety, because the Honest Availability Assumption ensures that the LoE anchor is a prefix of the latest honest chain. + +- The GDD and LoP together ensure the LoE anchor will advance --- and with only moderate delay --- which is necessary but not sufficient for Sync Liveness. + In particular, one honest peer suffices for the GDD to disconnect from every peer that is advertising an alternative chain, based on the core assumption of Ouroboros Genesis that the honest network's historical chain is denser than any alternative. + +- The advancing LoE anchor and DBF together ensure Sync Liveness. + +- The CSJ and DBF together ensure Limited Sync Load. + +- The Node Versus Environment tests provide assurance that each component is correct. + +The descriptions of each component in the remainder of this document will include lower-level reasoning in support of these claims. +A single completely detailed proof would be ideal, but is beyond the project's resources. + +## Component-level Designs + +Each subsection specifies the high-level design of one component. + +### The Lightweight Checkpointing Component + +[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L318) + +The Lightweight Checkpointing is one of the simplest components. +The node configuration data will include a list of pairs of block number[^checkpoint-block-vs-slot-no] (ie chain length) and hash. + +[^checkpoint-block-vs-slot-no]: We decided to use pairs of block numbers and hashes as the resulting semantics are very simple, in particular because that any sufficiently long chain will contain a block with a given block number, in contrast to slot numbers (as slots can be empty). Depending on the exact context, one scheme or the other might be more convenient. + +Each pair N and H incurs an additional predicate to that node's header validation: if a header's block number is equal to N, then the header is valid if its hash is H. + +If some interval of the desired historical chain is sufficiently sparse that the GDD might not prefer it, then checkpoints can be used to prevent the GDD from being aware of any competing alternative chains. +There are two main options. + +- Add a checkpoint in at least each interval in which the desired chain doesn't necessarily have greater GDD density than some potential alternative chain. + This ensures the node will never see an alternative chain that would cause the GDD to disconnect from peers serving the (by fiat) desired chain. +- Add merely one checkpoint that is after the weak interval. + This is enough to ensure that a node that was tricked onto an alternative chain will not be able to finish its sync. + But it's not enough to ensure the node will end up on the same chain as the honest network. + +It cannot be emphasized enough that the list of checkpoints in the configuration data must be obtained from/signed by a trusted source. + +The Lightweight Checkpointing component is always active, regardless of whether the node is syncing. +This could be changed, but this configuration data already needs such care that it shouldn't matter. +In particular --- except perhaps _during_ a disaster scenario --- no configured checkpoint should ever be recent enough to affect a node that had already synced the desire chain, as required by No Praos Disruption. + +This component makes the Sync Safety requirement more flexible/expressive/accomodating, since it introduces the possibility of the community deciding to explicity overrule the GDD comparison for some (eg sparse) interval of the historical chain. +In particular, this flexibility may be required by Disaster Tolerance: both during a disaster and even possibly after it, if the community decides to remain on that chain despite its weak interval. +Ultimately, though, disasters may require more severe remediation, such as temporarily falling back to the Bootstrap Peers mechanism instead of Genesis. + +### The Genesis State Machine Component + +[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node/GSM.hs) + +The Genesis State Machine has three states. + +- The {PreSyncing} state artificially sets the LoE anchor to the node's ImmutableDB tip --- the node cannot make any commitments. +- The {Syncing} state enables all of the functionality introduced by this design. +- The {CaughtUp} state disables all of functionality introduced by this design except for Lightweight Checkpointing. + A node in the CaughtUp state is "just running Praos", and so it no longer needs to _constantly_ ensure the HAA. + +The transitions are triggered as follows. + +- The nominal path consists of a cycle among the three states. + - The GSM transitions from PreSyncing to Syncing when the Diffusion Layer indicates the HAA is satisfied. + - The GSM transitions from Syncing to CaughtUp when every peer simultaneously indicates that is has no subsequent headers to send and the syncing node has selected a chain no worse than any received header. + This trigger is notably not time based, because an adversary is free to create an alternative chain with a very young tip in order to cause the node to lower its defenses by selecting it. + This is especially true in the context of an adversarial CSJ Dynamo (see below), which has a temporarily disproportionate influence over the syncing nodes selection. + - The GSM transitions from CaughtUp to PreSyncing only when the node's selection is older than MaxCaughtUpAge (eg the node was offline for a few hours). + The MaxCaughtUpAge duration is a parameter of this design; see [Parameter Tuning](#parameter-tuning) below for constraints on it. + Moreover, this transition is delayed by some small random duration (eg <5 minutes) in order to avoid an undesired simultaneity amongst honest nodes within a struggling honest network. +- But that path is not necessarily guaranteed. + - The GSM transitions from Syncing to PreSyncing if the Diffusion Layer indicates the HAA is no longer satisfied. + +This diagram visualizes that state machine. + +```mermaid +graph + PreSyncing[PreSyncing] + Syncing[Syncing] + CaughtUp[CaughtUp] + + PreSyncing -- "HAA is satisfied" --> Syncing + Syncing -- "HAA is no longer satisfied" --> PreSyncing + Syncing -- "all peers have most recently sent MsgAwaitReply\nand the selection is ≥ the best header" --> CaughtUp + CaughtUp -- "selection became older than MaxCaughtUpAge" --> PreSyncing + + StartUp[[Node start-up]] + StartUp -- "node was most recently in CaughtUp\nand selection is younger than MaxCaughtUpAge" --> CaughtUp + StartUp -- "otherwise" --> PreSyncing +``` + +The node initializes its GSM in PreSyncing unless it was in the CaughtUp state when the node previously shutdown and the tip of the node's initialized selection is still younger than MaxCaughtUpAge (ie it wouldn't immediately transition to PreSyncing). +The GSM therefore maintains a marker file on disk as a persistent record of whether it is in the CaughtUp state. + +The GSM state does not influence whether or not the node attempts to mint blocks. +Superficially, one would expect that a Syncing node needn't bother minting blocks --- and perhaps even shouldn't --- since those misused elections might give the adversary an advantage. +On the other hand, the transition from Syncing to CaughtUp may be preceded by a duration in which the syncing node has the full chain but some peers are preventing it from concluding it has finished syncing. +Wasting an election on a stale chain seems preferable to missing a minting opportunity. + +This component directly ensures No Praos Disruption, since the CaughtUp state disables all of the extra features and the Syncing state does not inhibit minting. +The only difference is that the node will defensively transition to PreSyncing if it sees no new blocks for too long, eg if it's eclipsed for a duration of MaxCaughtUpAge and/or if the honest network actually doesn't mint blocks for a duration of MaxCaughtUpAge. + +When reasoning about this overall design, a virtual fourth state is often important to consider. +The node is "almost CaughtUp"/"almost done syncing"/etc when it's technically in Syncing but its immutable tip is relatively close to the wall clock. +This is the most difficult state to reason about because the new components are enabled while peers could be justifiably sending MsgAwaitReply and/or MsgRollBack. +These messages are trivial to handle when syncing obviously historical parts of the chain, since they immediately indicate that the peer does not satisfy the HAA. +But when it's almost CaughtUp, the new components must accommodate the potentially non-monotonic/stuttering/non-committal/reneging/etc semantics of these messages --- especially since even honest peers might be sending them. + +### The Limit on Eagerness Component + +Link to code: [Trimming candidates](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L691) [Trigger without block](https://github.com/input-output-hk/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L320) + +The LoE is another of the simplest components. +The LoE prevents the syncing node from selecting a block that is more than Kcp ahead of the LoE anchor, the intersection of all _current_ peers' header chains. +(Recall the exception that PreSyncing instead fixes the LoE anchor to the tip of the ImmutableDB.) + +It is possible for the LoE anchor to move backwards, for example if a peer sends a roll back or if the syncing node connects to a new peer on a chain no one else was serving. +This is the only way that the node's selection could be more than Kcp blocks ahead of the LoE. +Because of the HAA, the GDD cannot favor this new chain, and so the GDD/LoP will disconnect from the peer unless it switches to the best chain. +Thus such violations will be ephemeral in the design's assumed environment. + +The LoE anchor will always be an extension (possibly non-proper) of the ImmutableDB tip. +Note that the ChainSync client already prohibits peers from rolling back past the ImmutableDB tip. + +One subtle consequence of the LoE is a necessary change in the existing Praos implementation. +The chain selection logic ({ChainSel}) is currently only triggered by a block arriving. +However, when the LoE is enabled, ChainSel must also be triggered whenever the LoE advances, even if a block did not arrive. +This may seem unnecessary, based on the idea that a subsequent block arrival should happen within some reasonable time bound. +But that is not necessarily true. +There are edge-case scenarios in which no additional blocks will arrive because none have been requested, which cannot happen until new headers are validated, which cannot happen until the forecast range advances, which cannot until the selection advances, which cannot until the LoE anchor advances. + +Moreover, due to the now-spoiled invariant, ChainSel is implemented in the context of "the block that just arrived". +There isn't necessarily such a block when the LoE advances, so the new trigger of ChainSel must emulate that. +Thus, whenever the LoE changes, ChainSel is invoked once per block in the VolatileDB that is an immediate successor of the tip of the ImmutableDB. +(That is equipotent to reprocessing the ImmutableDB tip itself, but only involves mutable blocks.) + +This component directly ensures Sync Safety, since the HAA ensures that the LoE anchor is on the honest chain. +It is worth emphasizing that every subsequent component below is designed for the sake of Sync Liveness and Limited Sync Load --- the LoE alone suffices for Sync Safety. + +### The Genesis Density Disconnection Component without CSJ + +[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L10) + +The GDD must disconnect from any peers serving chains that are preventing the LoE from advancing and also can be inferred to not be the best chain. + +The logic compares every ordered pair of peers. +An optimization could avoid symmetric comparisons, but that factor of two doesn't appear to be necessary for the relatively small expected upstream peer counts. + +Let {the GDD window} be the Sgen slots after the LoE anchor. +Also, observe that when a peer's latest message was MsgAwaitReply, the syncing node must assume that peer does not have subsequent headers to send. +That might be an incorrect assumption, but only for the short duration until the peer's next ChainSync message arrives. + +The GDD will disconnect from a peer P due to comparison to a peer Q if all of the following conjuncts hold simultaneously. + +- P and Q disagree on which header directly succeeds the LoE anchor. + To clarify, this conjunct is satisfied if (but not only if) P's latest message was MsgAwaitReply but Q already sent a header. + Additionally, this disagreement can be determined even if P's first header after the LoE is not in the syncing node's forecast range: its validity is not yet relevant. + +- Q has sent more than Kcp (valid) headers after the LoE anchor. + This prevents typical Praos short forks from triggering the GDD when the node is almost done syncing. + +- Either P's latest message was not MsgAwaitReply or else P does not already have more headers in the GDD window than Q does. + +- Either P's latest message was MsgAwaitReply or else no extension of P's chain could have more headers in the GDD window than Q already does. + The non-existence of any such an extension is conservatively established by there being too few slots in the portion of the GDD window that is after P's header chain. + +This component contributes to Sync Liveness. +The LoP component (in the next section) ensures that peers sending an alternative history must soon enough reveal their chain's sparseness so that the GDD will disconnect from them when compared to one of the HAA-satisfying peers. + +In the "with CSJ" section below, the GDD is enriched beyond its primary responsibility for the sake of the CSJ design. + +To prevent this component from spoiling Sync Liveness, this relatively-expensive calculation is rate-limited with a parameter {GddRateLimit}; see the [Parameter Tuning](#parameter-tuning) section. + +### The Limit on Patience Component + +Link to code: [Token bucket](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Util/LeakyBucket.hs#L30), [ChainSync integration](https://github.com/input-output-hk/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client.hs#L1905) + +If a peer claims to have subsequent headers, they must send them promptly. +Otherwise, a disagreement amongst two peers might suffice to prevent the LoE anchor from advancing but not suffice for the GDD to make a decision. + +This is in tension with the fact that any honest peer will inevitably exhibit some bursts of latency --- even just garbage collection could cause it, eg, whether that collection be on the local node or on the remote peer. + +To accomodate this tension, the LoP is implemented as a token bucket. +The bucket drips unless the peer has most recently sent MsgAwaitReply or their latest header is beyond the syncing node's forecast range. +If the bucket is ever empty, the LoP disconnects from the peer. +A token is added to the bucket whenever the peer sends a valid header that is longer (a la the block number) than any header they had previously sent, but it's discarded if the bucket is already full. + +The rate TDRIP at which the bucket drips and its maximum capacity TCAP are design parameters that must be tuned, see [Parameter Tuning](#parameter-tuning) below. + +This component contibutes to Sync Liveness because it forces a peer to enable a GDD decision within a duration of at most TDRIP × (TCAP + L), where L is the number of headers that can be in their alternative chain's GDD window before the GDD disconnects them. +Parameter Tuning will ensure this is less than one minute per adversarial peer, for example. + +### The ChainSync Jumping Component + +[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client/Jumping.hs#L14) + +The ChainSync Jumping optimization is a backwards compatible optimization of the ChainSync mini protocol. +Instead of simply running the normal ChainSync mini protocol with every peer, CSJ runs it with at most two while syncing the historical chain. +This saves significant bandwidth and CPU for both the syncing node and all but one of its honest upstream peers. +By the time the node transitions to the CaughtUp state, all peers will be running full ChainSync --- CSJ inherently ensures that, in addition to the GSM. + +The {CSJ governor} is centralized logic that divides peers into the following roles. + +- The {Dynamo} is a peer chosen to run full ChainSync. + It has never sent MsgAwaitReply or MsgRollBack. + +- A {Jumper} is a peer that idles until the CSJ governor occasionally sends it a MsgFindIntersect that offers to jump its header chain to the Dynamo's current header chain. + +- A Jumper that rejects its offered jump becomes a {PreObjector}. + It sends subsequent bisecting MsgFindIntersect messages until its intersection with the Dynamo is exactly identified and then idles. + (A PreObjector is referred to as a "dissenting jumper" in the code.) + +- The {Objector} is one of the PreObjectors with the oldest intersection with the Dynamo. + It also runs full ChainSync, in order to compete with the Dynamo via the GDD. + +- A {Disengaged} peer no longer participates in the CSJ optimization; it runs full ChainSync. + These are peers that have sent MsgAwaitReply or MsgRollBack. + +Under some circumstances, the CSJ governor must choose a new Dynamo. +The only constraint on this choosing mechanism is that it should eventually find an HAA-satisfying peer. +For example, a simple round-robin queue or random choice would suffice, excluding Disengaged peers. +This specification suggests using a round-robin queue such that the head of the queue is the Dynamo. +Peers are removed from the queue when they become Disengaged. +Peers are added to the end of the queue when they are first connected to. +(The Devoted BlockFetch component specified below will also introduce an event that causes a peer to be moved to the end of this queue.) +This is named the {Dynamo candidate queue}. + +The Dynamo offers a jump whenever its header chain has advanced by {MinJumpSlots} slots since it last offered a jump; the value of the MinJumpSlots design parameter is discussed in the [Parameter Tuning](#parameter-tuning) section. +To offer a jump, the Dynamo makes a copy of its current candidate chain C and (via the CSJ governor) sends a corresponding MsgFindIntersect to every Jumper. +If a Jumper accepts the entire jump, it's header chain is updated to C. +If a Jumper refuses, additional bisecting MsgFindIntersect messages are sent to that peer in order to determine the exact intersection of its selection with C, and the peer becomes a PreObjector. +While there are some PreObjectors, one with the oldest intersection is promoted to be the Objector, which might require demoting the current Objector back to PreObjector. +It is crucial that no PreObjector has an older intersection than the Objector, since otherwise the forecast range might not be able to sufficiently advance for the GDD to resolve the competition between the Dynamo or the Objector. +It is also important that there is only one Objector at a time, since all honest Jumpers would disagree with an alternative chain served by an adversarial Dynamo; multiple honest Objectors would violate the Limited Sync Load requirement. + +Whenever a new peer becomes the Dynamo (eg because the GDD killed the previous Dynamo), all others peers (even the Objector) forget their most recent jump offer and are reset to Jumper. +The new Dynamo immediately offers a jump to all Jumpers. + +If an Objector or a Dynamo sends MsgAwaitReply or MsgRollBack, then it immediately becomes Disengaged. +In order to prevent adversarial peers from using MsgAwaitReply or MsgRollBack in order to waste the syncing nodes bandwidth and CPU by running full ChainSync for the historical chain, CSJ also enforces a {Limit on the Age of MsgAwaitReply/MsgRollBack}. +This cannot be a perfect mitigation, since it's possible that an honest peer would need to rollback a header that is at most Scg slots old, even though that's very unlikely. +But it's sufficient to simply limit that extra CPU cost to the final Scg window of the sync, instead of potentially paying that cost for the entire age of the chain. +The maximum allowed age of a rolled back header is HistoricityCutoff, which cannot be less than Scg; see the [Parameter Tuning](#parameter-tuning) section below for more details. +Any MsgRollBack that rolls back a header older than HistoricityCutoff (according to the wall clock) and any MsgAwaitReply that is sent when the candidate fragment tip is older than HistoricityCutoff immediately incurs a disconnection from that peer. + +The Dynamo, Objector, and every Disengaged peer are continually subject to the standard LoP. +A CSJ Jumper's token bucket does not leak, though it does gain tokens when the Jumper accepts (some of) a jump, since the peer has effectly sent those headers. +When a Jumper refuses a jump, it is only subject to the existing relatively-generous MsgFindIntersect timeout. +This may let an adversarial peer prevent the LoE anchor from advancing for a some minutes, but either the exact intersection is found, this PreObjector is reset to Jumper, or the peer is disengaged for sending a roll back. + +This component contributes to Sync Liveness and Limited Sync Load by eliminating redundant ChainSync exchanges. +Under normal circumstances, all honest peers will be serving the singular historical chain. +CSJ eliminates the wasteful remote retrieval and local validation of each honest header by only syncing it once instead of once per peer. + +### The Genesis Density Disconnection Component with CSJ + +[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L268) + +There are two possible deadlocks introduced by CSJ. +Both can be resolved by implementing additional disconnections according to Genesis density comparisons. + +- Without CSJ, the GDD is always comparing each peer to the best header chain a HAA-satisfying peer can provide. + With CSJ, the HAA-satisfying peers might instead be dormant as PreObjectors, with the Dynamo and Objector both adversarial. + + There's no guarantee in that scenario that the competing header chains of the Dynamo and Objector will (eventually) include more than Kcp headers. + Since that is one of the plain GDD's required conjuncts, the syncing node would be stuck. + This state might last a very long time, violating Sync Liveness, since the Dynamo and Objector could each send a header beyond the forecast range in order to also avoid the LoP. + + To prevent this attack, the GDD trigger is relaxed for the sake of CSJ. + Specifically, Q does not need to have sent more than Kcp (valid) headers after the LoE anchor if P has already sent a header beyond the GDD window. + + It's safe to make the GDD disconnect in more scenarios, as long as it will still never disconnect from an HAA-satisfying peer outside of a disaster scenario. + In this case, if there has been no disaster and P satisfies the HAA, then Praos Chain Growth ensures P's chain will have more than Kcp headers in the GDD window. + If this relaxed GDD were to disconnect from P, then Q must have at least as many headers as P, and so the plain GDD's conjunct would also have been satisfied. + +- Similarly, if the HAA-satisfying peers are all dormant, then it's possible that the node's selection is simultaneously longer than every peer's header chain and also branches off from some proper prefix of the LoE anchor. + This is an unusual scenario, but may arise, for example, if the previous Dynamo recently disconnected (which implies it did not satisfy the HAA). + In this case, the DBF logic would idle, since no peer's header chain is better than the selection --- the node would not select the peers' blocks even if they did somehow arrive, since they're worse than the current selection. + Moreover, deadlock is possible, since the Dynamo and Objector forecast ranges' do not necessarily include the entire GDD window. + Thus the GDD is not necessarily able to make a decision between them, just as in the previous deadlock. + + A relatively simple fix is suggested by the observation the GDD only compares peers to peers and not to the node's selection. + Filling this blindspot suffices to prevent the deadlock. + The new logic fits nicely in the ChainSync client, instead of in the GDD itself, since it only involves a single peer at a time. + + If a MsgRollForward arrives that is beyond the forecast range (ie Scg slots beyond the intersection with the node's selection) but the predecessor of the new header (ie the tip of its validated header chain) is not preferable to the selection, then disconnect from the peer. + This is effectively a Genesis density comparison between the peer and the syncing node itself (but not necessarily in the GDD window, which is always anchored in the LoE anchor). + Even if Sgen were less than Scg, this comparison would still be sufficient and sound, since Sgen = Scg is the most conservative assignment of that Genesis parameter. + + In some sense, this rule is an optimization of the existing ChainSync client logic. + It fires as soon as it becomes inevitable that the existing logic will subsequently terminate with ForkTooDeep. + +The latter addition also prevents another deadlock. +If a peer P sends a header beyond the GDD window without having sent any headers within the GDD window, then it must be disconnected from. +Because Sgen = Scg, such a chain includes a gap at least as large as the forecast range. +No ChainSync client can progress past such a gap. +This has always been true, and it has long been identified as a disaster scenario, since it is a severe violation of Chain Growth (PR https://github.com/IntersectMBO/ouroboros-network/pull/2844 is related future work, but remains Closed). +With CSJ, though, it's now possible that the Dynamo and Objector are stuck on such a gap while some PreObjector would be able to progess if it weren't dormant, just as in the deadlocks discussed above. +Because this trigger does not require a comparison against another peer, not even Lightweight Checkpointing can prevent it. + +The following concrete example of the second deadlock arose in our property tests, inspiring the fix specified above. +(It could be minimized further, but this one was actually generated.) + +``` + Kcp = 5, Scg = 8, Sgen = 8 + + slots: 0 1 2 3 4 5 6 7 8 9 10 + trunk: G──1─────2──3──4─────5──6──7──8─── Honest 1 + ╰──3───────────4──5──6──7 Adversary 2 + ╰──3──4────────5─────6──7 Adversary 3 + ╰─────1──2─────3──4────────5─────6 Adversary 1 +``` + +Suppose Adversary 1 is the Dynamo first, serves its chain up to the block 5-8, and then the peer disconnects. +If Adversary 2 becomes the Dynamo and Adversary 3 becomes the Objector (or the other way around), then the (HAA-satisfying) honest peer is dormant as a PreObjector. +In this case, the LoE anchor is the block 2-2, but _not_ the 2-2 that's on the selection. +This is an example of how the selection can be longer than the LoE anchor but not extend it, which is how the second deadlock above arises. +Note again that the forecast range (anchored in G) for the Dynamo and Objector ends in slot 7, which means neither chain can become longer than the selection. +(The block used in this test does not have any tiebreakers, so DBF will not fetch the 5-7 block. +Even supposing tiebreakers, there's no guarantee that it would.) + +This component contributes to Sync Liveness by mitigating the discussed deadlocks, ultimately compensating for the fact that the HAA-satisfying peers might be dormant in the PreObjector state. + +### The Devoted BlockFetch Component + +> Note that in the code, this component is still called *BulkSync BlockFetch* at the moment. + +[Link to code](https://github.com/IntersectMBO/ouroboros-network/blob/28b731cde005a1de0b4be0ea0bd16852e827c1bc/ouroboros-network/src/Ouroboros/Network/BlockFetch/Decision/Genesis.hs#L9) + +The rationale for Devoted BlockFetch continues the theme from the HAA and CSJ: one peer suffices for actually fetching the chain, once identified the amongst the peers. +For this component, the key insight is that --- so far, at least --- most Cardano blocks can be trasmitted much faster than they can be validated. +Thus, once the syncing node starts requesting blocks from a peer that satisfies the HAA, blocks will tend to arrive faster than the syncing node can process them. +That's a sufficient steady-state because the syncing node doesn't need to receive blocks any faster than that; doing so would just be wasting bandwidth, its own and its peers'. +As a result, under nominal conditions, the syncing node will be able to fetch blocks from just one peer at a time. + +While in the Syncing state, the node will only send BlockFetch requests to one peer at a time. +If that peer serves the blocks faster than the node can validate them, then it will continue to request blocks from that peer. +There are two additional concerns. + +- The first time the syncing node sends a request to some peer, that peer will of course not be able to instantly respond. + A naive implementation of the above rule would therefore irrationally penalize that peer for "starving" the node. + This motivates the {BlockFetchGracePeriod} in the logic below; see [Parameter Tuning](#parameter-tuning) for constraints on its value. + +- The syncing BlockFetch logic should, like the normal Praos BlockFetch logic, still only request blocks from a peer that are on that peer's header chain. + The syncing node's peers may have sent different header chains; they might disagree or merely be prefixes of one another. + +In summary: prioritize both fetching blocks from the longest header chain and also fetching blocks from the same peer as long as they're arriving faster than they can be validated. + +The following specification of the DBF logic maintains two variables, the set E of blocks that are considered in-flight, and the latest time T at which E was empty. +When the node is initialized, E should be the empty set and T should be the current wall clock. +(The implementation is free to maintain these variables in some other equivalent way.) + +Each iteration of the DBF logic executes the following steps. + +- If E is non-empty, then all those blocks were requested from a single peer --- that's the DBF invariant motivated above. + If now > T + BlockFetchGracePeriod and the ChainSel logic has been blocked on an empty work queue at any point since the previous DBF logic iteration, then set E to the empty set. + (The BlockFetch state must still ultimately track those blocks as in-flight, in order to enforce timeouts, per peer in-flight limits, etc. + But the DBF logic is no longer influenced by those in-flight requests.) + Also, if that peer is the Dynamo, signal the CSJ governor to rotate some other peer in as the Dynamo, if another peer is eligible. + +- Let the {desired headers} be the headers that are on the most preferable header chain but their blocks haven't already arrived. + Note that some desired headers might be in E. + +- If E is non-empty and that peer's header chain includes the first desired header, choose that same peer again. + +- Otherwise, set E to empty and set T to now. + Also, choose one of the peers whose header chain includes the first desired header. + The only constraint on this choosing mechanism is that it should eventually find an HAA-satisfying peer. + For example, a simple round-robin queue (which would first be filtered according to the presence of the first desired header) or random choice would suffice. + It is suggested to reuse the Dynamo candidate queue, since both mechanisms are intended to find an HAA-satisfying peer. + +- Prepare the next request for the chosen peer, using the same logic as in the existing Praos BlockFetch decision logic, except first truncate the chosen peer's header chain by intersecting it with the desired headers. + Note that this may result in no request being made in this DBF iteration. + For example, the chosen peer might be in the PeerFetchStatusBusy state. + +Some alternatives are worth mentioning. + +- BlockFetch does already have a low-level timeout of 60 seconds on its requests. + That is an insufficient per-request defense against an adversary, though; BlockFetchGracePeriod will be significantly shorter. + Moreover, BlockFetchGracePeriod does not disconnect from a peer, it merely deprioritizes it for CSJ Dynamo and DBF choices. + In particular, it's very likely that an honest node will occasionally fail to serve blocks for BlockFetchGracePeriod, so disconnecting would be too aggressive. + Block costs are more variable than header costs, so a token bucket like in the LoP is less obviously applicable here. + +- A possible alternative to the BlockFetchGracePeriod duration would disable the check just for the first in-flight block, but practical networking concerns such as the TCP congestion window make a time-based condition more effective and easier to reason about. + +- It would be possible to let a peer finish sending their in-flight blocks even if they aren't serving any of the desired headers. + This would avoid the risk of subsequently requesting those blocks from someone else. + However, that risk is unlikely and relatively low severity, so it seems more important to not delay fetching the better chain. + +- The logic could require that the chosen peer is serving more than just the first desired header. + There is a tension here. + The existing logic maximizes the number of peers considered, for example, which in turn maximizes the chance the same node could be chosen (in particular, even when they're not also the Dynamo), thereby avoiding another opportunity for the adversary to delay for a duration of BlockFetchGracePeriod. + But it also risks wasting a round-trip to fetch just one block instead of prematurely switching peers in order to fetch potentially many blocks from a newly chosen peer. + +- It would be acceptable to not demote the Dynamo if it fails to send blocks fast enough. + However, as a side effect of CSJ, the Dynamo's header chain will almost always be the longest header chain. + So it seems beneficial to act upon any indication that the Dynamo does not satisfy HAA. + +- The logic cannot be simplified to merely always choose the Dynamo. + One key reason is because there is not necessarily any Dynamo at all when the node is almost done syncing. + Similarly, the Dynamo isn't necessarily serving the longest header chain. + Another is because an adversarial Dynamo could satisfy the GDD and LoP but be extremely slow to serve blocks (although demoting the Dynamo if it's too slow to send blocks might suffice to redress this). + +This component contibutes to Sync Liveness for two reasons. + +- The node cannot be stuck indefinitely. + If the unfetched blocks of the longest chain are offered only by adversarial peers, then the node will only request blocks from them. + The adversary can simply withhold those blocks, and the node will wait for a duration of BlockFetchGracePeriod before it considers requesting from a different peer. + But it might be in the same state once it does. + + The node can escape this state in a few ways, but the most important is that the longest header chain will soon enough be held by an honest peer. + When the node is syncing the historical chain: GDD and LoP ensure that the longest header chain of any peer will soon be the (honest) historical chain, and so offered by all honest peers --- CSJ doesn't spoil this because it will eventually offer a jump. + When the node is almost done syncing: a healthy Praos network will frequently have its longest chain held by honest peers, so HAA ensures some honest peer's header chain will become the new longest chain. + +- If all peers have the longest chain, the syncing node might unfortunately choose to request it from an adversarial peer. + That adversarial peer can withhold blocks for BlockFetchGracePeriod, after which time the node will re-request those blocks from another peer. + + The probability of each chosen peer being adversarial is proportional to the ratio of honest to adversarial peers. + The HAA merely requires this to be greater than 0; it could be 1 out of 30, for example. + The lower this ratio, the longer it will take the DBF to find a peer that satisfies the HAA, assuming each adversarial peer is delaying the node for a duration of BlockFetchGracePeriod. + But once such a peer is found, the node will fetch as many blocks from it as possible. + (Unfortunately that might not be all blocks, since the Dynamo might eventually be the only one with the longest chain.) + +This component also contributes to Limited Sync Load, since it avoids unnecessarily fetching a block from multiple honest peers. + +To prevent this component from spoiling Sync Liveness, this relatively-expensive calculation is rate-limited with a parameter {DbfRateLimit}; see the [Parameter Tuning](#parameter-tuning) section. + +### The Node Versus Environment Tests Component + +We introduce several test modules, which test one or several Genesis components. Refer to the documentation of each function to get a detailed description of each test. + +#### [`Test.Consensus.Genesis.LongRangeAttack`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/LongRangeAttack.hs) + +Checks that the Praos protocol without Genesis is indeed vulnerable to Long Range Attacks. + +#### [`Test.Consensus.Genesis.LoE`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/LoE.hs) + +Tests the LoE module in isolation. + +#### [`Test.Consensus.Genesis.LoP`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/LoP.hs) + +Tests the LoP module in isolation, and its efficiency in stopping a delaying attack. + +#### [`Test.Consensus.Genesis.DensityDisconnect`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/DensityDisconnect.hs) + +Tests the GDD rule in isolation, as well as in conjunction with the LoE. + +#### [`Test.Consensus.Genesis.CSJ`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/CSJ.hs) + +Tests ChainSync Jumping, in conjunction with LoE, LoP, and GDD. + +#### [`Test.Consensus.Genesis.Uniform`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/Uniform.hs) + +Randomly generates various "real life"-ish situations, and checks that the Genesis algorithm yields the correct result, *i.e.* that the tip of the immutable DB ends up within Kcp blocks of the tip of the honest branch. + +## Parameter Tuning + +The design description introduced the following design parameters. +Some of the requirements, especially Sync Liveness and Limited Sync, ultimately depend on these having well-chosen values. +This section therefore motivates the recommended value of each. + +A new piece of jargon improves some of these explanations: +An adversary that is preventing the LoE anchor from advancing is {leashing} the victimized syncing node. + +- Sgen = Scg. + Sgen cannot be greater than Scg, since forecasting wouldn't necessarily allow the headers to be validated before being counted. + Despite the authors of Ouroboros Genesis expected a smaller value would suffice, the engineers have never considered a value less than Scg. + If the requirements (eg no unneccesary delays) can be met while minimizing the adversary's chances, then that seems ideal. + +- TDRIP = 2 milliseconds and TCAP = 5000 tokens. + A peer withholding promised headers would therefore be disconnected within at most 10 seconds. + If the adversary were leashing with a relatively-dense chain, they might be able to extend that to (TCAP + ~4×Kcp)×TDRIP = ~27.28 seconds by earning and spending tokens during the leash. + This could happen at most once per adversary, which the HAA bounds at Valency - 1. + In total, that's at most ~15 minutes of total delay tolerated by the LoP while the node is being leashed. + + While the node isn't being leashed, it's making progress. + Especially with modern Cardano blocks, 2ms is much faster than the typical time to fetch and validate a block. + Thus an adversary cannot protract the sync at all while satisfying the LoP on average. + + If the LoP is spuriously disconnecting from honest nodes unacceptably often, then TCAP could be increased. + The duration for which an adversary could potentially leash the syncing node increases somewhat proportionally, but that's a less severe risk than the syncing node eclipsing itself. + +- GddRateLimit ~ 1 Hz. + When the GDD is eventually triggered, the peer is disconnected from, so an extra delay on the order of seconds seems harmless. + The HistoricityCutoff parameter establishes a reasonable window in which an adversary could attempt to abuse this inattentiveness of the GDD by serving a leashing chain for 999 milliseconds and then serving of non-leashing chain for 1 millisecond, for example, and getting miraculously lucky with the thread scheduling etc. + However, the LoP ultimately bounds how long that game could persist. + +- MaxCaughtUpAge = 20 minutes. + There is a tension in this value. + + Too low and outages that are inevitable in global public interconnects could cause the entire Cardano network to return to PreSyncing embarassingly often. + Prediction Network Solutions has advised that tolerating outages up to 20 minutes without cycling suffices for due diligence. + + Too high, on the other hand, and a node might fall out of sync with the honest network without re-enabling the defenses of Ouroboros Genesis. + It is assumed that a node that missed out on just 20 minutes of honest chain growth is not a significantly higher risk of selecting more than Kcp blocks of an adversarial chain than is a properly caught-up node. + Because the Cardano chain grows by Kcp blocks in about 12 hours, that's only false if the adversary was already very close to creating a private chain that's longer than the honest chain, ie violating Praos Common Prefix. + + It is worth remarking that this MaxCaughtUpAge mechanism is not intended to detect and/or escape from eclipses. + The primary anticipated trigger is a user re-opening their laptop lid, for example. + +- HistoricityCutoff = 36+1 hours. + This value must be greater than Scg of the Cardano chain's current era, which is 36 hours, and will remain so for the foreseeable future. + It seems very unlikely that the community will increase the upper bound on settlement time, but if they did, then HistoricityCutoff would need to increase accordingly. + The extra hour is to eliminate corner cases/risks/etc --- eg 10 minutes would probably suffice just as well. + + The primary cost of increasing HistoricityCutoff is that an adversarial peer could remove themselves from the CSJ optimization, thereby forcing the victim to sync every header younger that HistoricityCutoff from them as well as from the Dynamo. + Thus, the potential cost of HistoricityCutoff is proportional to the number of adversarial peers, which is allowed in the definition of Sync Liveness. + +- MinJumpSlots = 2×Kcp. + Similar to Sgen, this parameter must not be greater than the smallest Scg of any era the node will be syncing. + However, unlike Sgen, Lightweight Checkpointing cannot be used to remove eras from consideration. + Thus, the recommended value of 2×Kcp arises from the Byron era's Scg, since it's the smallest of any era. + + If it's actually Scg, then just before each jump, DBF will have no choice except the Dynamo, since it'll be the only one serving headers. + Note that the Dynamo can't validate the header that's Scg after its previous jump until the syncing node actually _selects_ that previous jump point. + Hence the next jump point won't be in the forecast range until the node has selected (and therefore fetched) the entire header chain of each Jumper. + +- BlockFetchGracePeriod = 10 seconds. + If the node chooses to fetch blocks from an adversarial peer, it could simply refuse to send them. + In that case, the syncing node would give up on them after BlockFetchGracePeriod, and try a different peer. + Once DBF finds an HAA-satisfying peer, however, the node will not be delayed again until it's almost caught-up, since that's when the node could learn of a longer chain that the HAA-satisfying peer might not yet have (ie a short fork or new growth). + Thus the practical worst-case delay via the vector is likely at most several instances of BlockFetchGracePeriod × (Valency - 1), which is almost certainly less than an hour. + + There is a noteworthy corner case. + The entire DBF design is predicated on the assumption that the syncing node can fetch blocks from an HAA-satisfying peer faster than it can validate them. + This is a generally reasonable assumption but could be violated by a node that has a terrible network connection and/or extremely strong compute hardware. + In that case, the node would sync as many blocks from the HAA-satisfying peer as it can in 10 seconds, before being forced to give its adversarial peers an opportunity to abuse BlockFetchGracePeriod. + It would be possibly starved in 10 second increments until it finds another HAA-satisfying peer, which would then last for another 10 seconds. + Thus its duty cycle would still be proportional to the ratio of adverarial peers. + (CSJ would also become unusually inefficient here, since the Dynamo is being rotated so often, many headers will be downloaded multiple times.) + In practice, this corner case is most likely to manifest as a node with a terrible network connection syncing even more slowly than it already would, which seems like a fair exception to the Sync Liveness requirement. + +- DbfRateLimit = 25 Hz. + The DBF logic is relatively expensive to execute, since its intersecting/comparing/etc full chains from each peer (which typically contain ~4×Kcp = 8640 blocks). + However, the average block tends to take tens of milliseconds to validate. + Because BlockFetch requestes are both pipelined and batched, it is unnecessary to analyze them every time a block arrives. + Thus several iterations per second seems sufficient, and benchmarks have shown it leads to neglible overhead. + + The existing BlockFetch logic already has a rate-limit (100 Hz, set in `Ouroboros.Network.Diffusion.Configuration.defaultBlockFetchConfiguration`), but DBF will set the frequency even lower. + It's more important for Caught-Up node to request blocks promptly than a syncing node, since its pipeline tends to be empty. + +## Compatibility with the HardFork Combinator + +The constraint that Sgen <= Scg indicates that the Sgen cannot exceed the smallest Scg of any era on a {HardFork Combinator} ({HFC}) chain. +The only exception to that is if the Lightweight Checkpointing will be used to preclude any alternative chains from some era from even reaching the GDD. + +In particular, the first Cardano era, Byron, has much different growth characteristics; it's Scg is 2Kcp as opposed to the Shelley eras' 60Kcp (ie 3Kcp divided by the active slot coefficient of 0.05). +So Lightweight Checkpointing can very usefully prevent Byron from bounding Sgen, since all Cardano eras since Byron have the same Scg. + +However, the eras before Babbage also have atypical growth characterstics, due to the use of Transitional Praos. +The 60Kcp is still likely a fair asssessment of Scg for these eras, but it's not as directly interpretable as it is as of Babbage. +So Lightweight Checkpointing would also be helpful to dismiss that complication. + +Currently, there are no known plans to alter the Scg or generally Chain Growth in future eras. + +Thus this design ignores the past via Lightweight Checkpointing and ignores the future because it's not known to disrupt the design. +If the future does end up changing Scg, for example, that bridge will need to be crossed then. +For example, perhaps the GDD will need to be aware of the HFC's era transitions and some how accomodate GDD windows that involve more than one era. + +Other parameters such as MaxCaughtUpAge and HistoricityCutoff have this same caveat as Sgen. + +One caveat: MaxCaughtUpAge and HistoricityCutoff are indeed constants in the implementation, but Sgen is actually implemented to vary as the chain transitions eras. +This is technically more complicated than necessary, superseding this specification, due to the planned use of Lightweight Checkpointing to prevent alternate Byron and Transitional Praos histories. +The extra flexibility may prove useful on testnets, eg. + +## Deployment Recommendation + +No reasonable amount of offline testing could achieve the stress testing that a feature will endure when first released (as _experimental_). +The basic recommendation for deployment is therefore a staged approach, where the default remains the Bootstrap Peers but configuration can opt-in to using Genesis instead. +Staged releases are common practice for new Cardano features, and Genesis is no exception. +There are a bevy of new flags in the node's `config.yaml` file, most notably the `EnableGenesis` Boolean and the `LowLevelGenesisOptions` tree. + +Full node wallets such as Daedalus will also need a means to update their Genesis snapshot config files and to opt-in to Genesis as an experimental feature. + +The Ledger Peers approach to ensuring the HAA requires a so-called "Genesis snapshot" in order to find HAA-satisfying upstream peers with sufficiently high probability. +Such a snapshot will need to be somehow regularly produced, certified, and distributed. +A stale snapshot is not necessarily useful; the threshold is beyond the scope of the Genesis implementation. + +Additionally, the SDET team should be able to catch fundamental regressions via a scenario in which a very slow upstream peer serves a denser chain while a very fast peer serves a less dense alternative chain. +The denser chain needs to have at least k blocks after the intersection, and the syncing node must select the denser chain in order for the test to pass. +The [`immdb-server`](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/app/immdb-server.hs) tool will be useful. + +The Genesis feature is intended to supercede the Bootstrap Peers method. +However, the fundamentally stronger assumption of Bootstrap Peers may be more useful than Genesis during disaster scenarios and/or attacks, so it seems beneficial to preserve the capability to spin-up Bootstrap Peers on relatively short notice. +Either the logic for using Bootstrap Peers could be retained despite the introduction of the Genesis implementation, guarded behind configuration, or else bespoke Genesis snapshot config file could indirectly force the syncing node to only use Bootstrap Peers without actually being aware of their special status. + +## Follow-Up Work + +The following additional work on Genesis is suggested, as priorities and resources permit. + +- The HAA explicitly excludes disaster scenarios, but it is likely useful to anticipate/explore how the implementation handles disaster scenarios before they happen on mainnet, especially violations of Chain Growth. +- As mentioned above, the engineers have always assumed Sgen = Scg. + Any such coincidence invites accidental conflations, so it will likely be useful to consider/excercise smaller Sgens, such as Sgen = 0.5×Scg. + This could result in some specifications and/or implementations being refined to invoke Scg directly instead of indirectly via Sgen, for example. +- The Parameter Tuning section above characterizes the upper bound of unnecessary delay by assuming that disconnected peers are not replaced. + For example, if a leashing peer were immediately replaced, it could start with a significant number of LoP tokens and pick up where its predecessor left off. + A reasonable compromise would be for the Diffusion Layer to only replace peers disconnected with prejudice after a moderate delay, eg 15 minutes. + If the HAA is indeed satisfied, then an extra delay when replacing peers would not introduced any extra delay to the sync. +- Refine some names, such as PreObjectors being called dissenting jumpers in the code, the Devoted BlockFetch implementation not including that name, Disengaged peers incorrectly suggesting they're inactive, etc. +- Tighten the PreObjector MsgFindIntersect timeouts. + The Network team advises that this is not a high priority vector, but it'd still be preferable to simply eliminate it. +- The LoP and DBF are tuned based on an assumption that modern empty blocks are not particularly concentrated. + For example, ~4% of the ~650000 most recent blocks were empty as of writing. + Unless a bulk of those are contiguous, the LoP and DBF buffers will likely absorb one out of, say, 15 blocks being empty. + It may be worth checking for a string of empty blocks. + It also may be necessary to consider that the disaster recovery plan could create such a string. +- Potential test improvements: + - Integrate GSM into the peer simulator and test for consecutive periods of Syncing and CaughtUp states. + This would require some rethinking on expressivity of the point schedules. + - Adjust genesis tests to allow for a non-zero GDD rate limit. + - Implement mutation testing for Genesis implementation (see test plan). + - Standalone unit/state machine tests for CSJ; test for more CSJ invariants (like [here](https://github.com/IntersectMBO/ouroboros-consensus/blob/b14da83d982224edc1700b0bed31ebd96c9ceaf8/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/PeerSimulator/CSJInvariants.hs). +- Define finer grained coverage for Genesis and Praos, make plans to measure it, and then measure it. +- Small optimizations that didn't turn out to be necessary so far: + - Only compute the LoE anchor amongst the Ledger Peers. + - Do not trigger chain selection when the LoE anchor moved backwards on a chain. + - When computing the density upper bound in the GDD, we could use probabilistic argument with a sufficiently low failure probability to bound the number of the remaining slots that could be active to a value lower than the pessimistic current estimate that every slot might be active. However, the LoP guarantees that this is not necessary for liveness. +- Make MinJumpSlots dynamic such that it can vary per era (and in particular be larger in Shelley-based eras). +- Ideally a peer whose candidate fragment branches off before the ImmDB must not satisfy the HAA. + Therefore, the LoE anchor intersection could exclude that candidate fragment. + However, we've seen a repro where the honest peer does do that --- we're currently debugging it. + In the meantime, simply treating such a peer as having the ImmDB tip as their candidate fragment tip is sound; they were ignorable because they're doomed, so we can instead just wait for them to be disconnected. +- Possible improvements to the LoE implementation: + - Small-ish optimizations: + - We have a special case to avoid fetching the selection's first header from disk, as it was slightly faster (see [here](https://github.com/IntersectMBO/ouroboros-consensus/pull/1118#discussion_r1613855402)). Determine whether that is still the case, and whether we want to keep it, also from a average-case=worst-case perspective. + - Perhaps we could maintain a flag that is True only if the LoE has prevented a selection since the last time the LoE advanced; we don't need trigger ChainSel when that flag is False. This would force the adversary to violate Limit on the Age of MsgAwaitReply/MsgRollBack etc in order to let LoE-advancements trigger ChainSel. +Related idea: maybe that flag could just track whether the LoE anchor was an extension of the most recent ChainSel result? + - Long-term optimization: Use a "chain selection datastructure", ie a data structure maintain a rooted tree that allows efficient inserts, advancing the root and queries of the longest chain (subject to the LoE). Also see section 24.10 in the Consensus report. +- Possible improvements to CSJ: + - Skip MsgFindIntersect during jumps if the candidate fragment contains the jump point, or if the chain in the immutable db contains the jump point. + It is unclear how much this would optimize exactly though. + Most of the time, jumpers jump to points that extend their candidate fragments. + When a dynamo is elected, they might be asked to jump to a point behind the tip of their candidate fragment. + This could happen if the dynamo was a jumper that was about to jump but hadn't yet, or the dynamo was an objector. + - Avoid re-downloading headers when rotating the dynamo. + In particular, this might be useful to mitigate the impact of long ranges of (almost) empty blocks which might cause the DBF to induce many CSJ rotations. + This could for example be accomplished by letting the jumpers jump to the tip of the dynamo just before rotation. +- Possible improvements to the GDD: + - Rerun GDD to disconnect peers earlier if the last run disconnected any peers. + +[^loe-anchor-example]: + For example, consider the following candidate chains, all with anchor `A` and ending in `E`, `F` and `G`, respectively. + ``` + A---B---C---D---E + \ \ + \ \-F + \-G + ``` + The most recent common point on these fragments is `C`, which we call the LoE anchor. + However, the LoE fragment (the longest shared common prefix of the candidate chains) is instead anchored in `A` (a recent immutable tip) and has tip `C`. From 52d8937241443265fd9033ebc6ce3ae3d67bec2a Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 16 Jul 2025 12:40:18 +0200 Subject: [PATCH 36/52] Edit Notation, Requirements, Components sections of genesis-design.md --- .../contents/explanation/genesis-design.md | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index aab5c652a2..f6254c03fa 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -2,14 +2,7 @@ # Cardano Genesis -This document contains the High-Level Design for adding Ouroboros Genesis to the existing Cardano implementation of Ouroboros Praos. - -## Prerequisites - -The following is taken for granted. - -- The reader is familir with the core architecture of the existing Praos implementation ([ChainSync](Glossary#chainsync) mini protocol, [BlockFetch](Glossary#blockfetch) mini protocol and decision logic, etc). -- The reader is aware of the motivation for Ouroboros Genesis ([paper](https://iohk.io/en/research/library/papers/ouroboros-genesis-composable-proof-of-stake-blockchains-with-dynamic-availability/) & [blog post](https://iohk.io/en/blog/posts/2023/02/09/ouroboros-genesis-enhanced-security-in-a-dynamic-environment/)) over Ouroboros Praos ([paper](https://iohk.io/en/research/library/papers/ouroboros-praos-an-adaptively-secure-semi-synchronous-proof-of-stake-protocol/)), ie safe decentralized syncing. +This document contains the high-level design for adding Ouroboros Genesis to the existing Cardano implementation of Ouroboros Praos. ## Notation @@ -34,44 +27,46 @@ The following is taken for granted. Any implementation of Genesis in Cardano must satisfy the following requirements. -- {No Praos Disruption}: The new behaviors do not alter the behavior of a node that is already done syncing with the network, ie the Ouroboros Praos behaviors. +- {No Praos Disruption}: The new behaviors must not alter the functioning of a node that has already completed synchronization with the network—that is, nodes operating under standard Ouroboros Praos behavior. + +- {Sync Safety}: If the syncing node always has at least one peer that is honest, not itself syncing, and connected with reasonable latency and bandwidth, both to the syncing node as well as the honest network, then the syncing node will never select more than `Kcp` blocks of a chain that is not extended by a recent selection of some honest nodes in the network (ie approximately within Δ). -- {Sync Safety}: If the syncing node always has at least one peer that is honest, not itself syncing, and connected with reasonable latency and bandwidth to the syncing node as well as the honest network, then the syncing node will never select more than Kcp blocks of a chain that is not extended by a recent selection of some honest nodes in the network (ie approximately within Δ). The antecedent of that implication is the {Honest Availability Assumption} ({HAA}). - It is beyond the scope of this design to ensure the HAA, but it seems viable even if non-trivial (see the Diffusion Layer's _Ledger Peers_ design). + It is beyond the scope of this design to guarantee the HAA. + Instead, we rely on the Network layer, which ensures—with high probability—that the node is connected to at least one honest peer. The Network layer, in turn, leverages the peers stake to probabilistically fulfill this requirement. + It is important to note that the Sync Safety requirement directly prevents the [_long-range attack_](Glossary#long-range-attack), which was the original motivation for Ouroboros Genesis. - {Sync Liveness}: The upper bound of unnecessary delay incurred during some interval of the sync is proportional to how many of the syncing node's upstream peers in that same interval are adversarial. It is beyond the scope of this design to ensure that count of adversarial peers remains below some reasonable bound (eg 50). -- {Limited Sync Load}: The syncing node does not incur unnecessary load on the honest network. - For example, a syncing node should only request the same block from more than one peer as a last resort. +- {Limited Sync Load}: : A syncing node should avoid imposing excessive load on the honest network. For example, it should request the same block from multiple peers only as a last resort. -- {Disaster Tolerance}: Given sufficient configuration (that is hopefully temporary), the new behaviors should work even despite a disaster on the Cardano network. +- {Disaster Tolerance}: With adequate configuration, ideally temporary, the new behaviors should remain functional even in the event of a network-wide disruption. ## Components This design consists of the following components. -- The {Lightweight Checkpointing} logic allows for configuration data (comparable in potency to the genesis block) to force the node to reject some chains as invalid by fiat. +- The {Lightweight Checkpointing} logic allows configuration data (comparable in authority to the genesis block) to mandate that the node reject some chains as invalid by fiat. -- The {Genesis State Machine} ({GSM}) determines whether the node has finished syncing. - Moreover, while the node is not syncing, the GSM disables all components of this design except Lightweight Checkpointing and the GSM itself. +- The {Genesis State Machine} ({GSM}) determines the node synchronization status. For this, it transitions between different states: pre-syncing, syncing, and caught-up. + When the node is caught-up, the GSM disables all components of this design except Lightweight Checkpointing and the GSM itself. -- The {Limit on Eagerness} ({LoE}) prevents the syncing node from selecting more than Kcp blocks beyond the intersection of its peers' latest selections. +- The {Limit on Eagerness} ({LoE}) prevents the syncing node from selecting more than `Kcp` blocks beyond the intersection of its peers' latest selections. That interesction is called the {LoE anchor}. (The implementation maintains an LoE fragment. In an unfortunate collision of names, the LoE anchor is the tip of the LoE fragment, _not_ its [`anchor`](https://github.com/IntersectMBO/ouroboros-network/blob/88bf7766ddb70579b730f777e53473dcdc23b6d0/ouroboros-network-api/src/Ouroboros/Network/AnchoredSeq.hs#L94), see here[^loe-anchor-example] for an example.) - The {Genesis Density Disconnection} logic ({GDD}) disconnects from any advertised peer whose chain has too few blocks to be the honest chain and could prevent the syncing node from finishing. - There are some absolute limits, such as having no blocks at all within some interval of Scg slots. - The primary rule, though, involves comparisons between peers: disconnect from any peer whose advertised selection X doesn't have more blocks in the Sgen slots after its intersection X∩Y with any other peer's advertised selection Y than does Y, if Y has more than Kcp blocks after X∩Y. + There are some absolute limits, such as having no blocks at all within some interval of `Scg` slots. + The primary rule, though, involves comparisons between peers: Consider peer `A` offering chain `X`. We disconnect from `A` if there is a peer offering a chain `Y` such that: 1) there are no blocks in `Sgen` slots after `X ∩ Y`; 2) `Y` has more than `Kcp` blocks after `X∩Y`. - The {Limit on Patience} ({LoP}) disconnects from any peer that is claiming to have subsequent headers on its selection but not sending them promptly. - The {ChainSync Jumping} optimization ({CSJ}) avoids fetching the honest header chain from more than one peer. -- The {Devoted BlockFetch} decision logic ({DBF}) of a syncing node prefers to request blocks from only one peer at a time, the first peer it finds that serves the best available header chain and serves the blocks faster than the syncing node can validate them. + - The {Devoted BlockFetch} decision logic ({DBF}) of a syncing node prefers to request blocks from only one peer at a time, the first peer it finds that serves the best available header chain and serves the blocks faster than the syncing node can validate them. The Honest Availability Assumption ensures that one such peer exists. - The {Node Versus Environment} tests scrutinize the behavior of the partially-mocked node when subjected to adversarial inputs. @@ -79,6 +74,8 @@ This design consists of the following components. All components are also depicted in the following diagram, with the exception of the GSM, which simply disables all other Genesis components (except Lightweight Checkpointing). +TODO: edit this diagram, it's barely legible when rendered by Docusaurus. Maybe change it to top-down. + ```mermaid graph LR LightweightCheckpointing[Lightweight Checkpointing] From 02b0114506d5172b8c17eef39b642cdd608f9cdb Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 16 Jul 2025 14:14:28 +0200 Subject: [PATCH 37/52] Edit "How the Components Satisfy the Requirements" --- .../contents/explanation/genesis-design.md | 92 ++++++++++++++----- 1 file changed, 67 insertions(+), 25 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index f6254c03fa..bdf620b66e 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -1,5 +1,3 @@ - - # Cardano Genesis This document contains the high-level design for adding Ouroboros Genesis to the existing Cardano implementation of Ouroboros Praos. @@ -27,9 +25,13 @@ This document contains the high-level design for adding Ouroboros Genesis to the Any implementation of Genesis in Cardano must satisfy the following requirements. -- {No Praos Disruption}: The new behaviors must not alter the functioning of a node that has already completed synchronization with the network—that is, nodes operating under standard Ouroboros Praos behavior. +### No Praos Disruption + +The new behaviors must not alter the functioning of a node that has already completed synchronization with the network—that is, nodes operating under standard Ouroboros Praos behavior. -- {Sync Safety}: If the syncing node always has at least one peer that is honest, not itself syncing, and connected with reasonable latency and bandwidth, both to the syncing node as well as the honest network, then the syncing node will never select more than `Kcp` blocks of a chain that is not extended by a recent selection of some honest nodes in the network (ie approximately within Δ). +### Sync Safety + +If the syncing node always has at least one peer that is honest, not itself syncing, and connected with reasonable latency and bandwidth, both to the syncing node as well as the honest network, then the syncing node will never select more than `Kcp` blocks of a chain that is not extended by a recent selection of some honest nodes in the network (ie approximately within Δ). The antecedent of that implication is the {Honest Availability Assumption} ({HAA}). It is beyond the scope of this design to guarantee the HAA. @@ -37,41 +39,68 @@ Any implementation of Genesis in Cardano must satisfy the following requirements It is important to note that the Sync Safety requirement directly prevents the [_long-range attack_](Glossary#long-range-attack), which was the original motivation for Ouroboros Genesis. -- {Sync Liveness}: The upper bound of unnecessary delay incurred during some interval of the sync is proportional to how many of the syncing node's upstream peers in that same interval are adversarial. +### Sync Liveness + +The upper bound of unnecessary delay incurred during some interval of the sync is proportional to how many of the syncing node's upstream peers in that same interval are adversarial. It is beyond the scope of this design to ensure that count of adversarial peers remains below some reasonable bound (eg 50). -- {Limited Sync Load}: : A syncing node should avoid imposing excessive load on the honest network. For example, it should request the same block from multiple peers only as a last resort. -- {Disaster Tolerance}: With adequate configuration, ideally temporary, the new behaviors should remain functional even in the event of a network-wide disruption. +### Limited Sync Load + +A syncing node should avoid imposing excessive load on the honest network. For example, it should request the same block from multiple peers only as a last resort. + +### Disaster Tolerance + +With adequate configuration, ideally temporary, the new behaviors should remain functional even in the event of a network-wide disruption. ## Components This design consists of the following components. -- The {Lightweight Checkpointing} logic allows configuration data (comparable in authority to the genesis block) to mandate that the node reject some chains as invalid by fiat. +### Lightweight Checkpointing -- The {Genesis State Machine} ({GSM}) determines the node synchronization status. For this, it transitions between different states: pre-syncing, syncing, and caught-up. +The {Lightweight Checkpointing} logic allows configuration data (comparable in authority to the genesis block) to mandate that the node reject some chains as invalid by fiat. + + +### Genesis State Machine + +The {Genesis State Machine} ({GSM}) determines the node synchronization status. For this, it transitions between different states: pre-syncing, syncing, and caught-up. When the node is caught-up, the GSM disables all components of this design except Lightweight Checkpointing and the GSM itself. -- The {Limit on Eagerness} ({LoE}) prevents the syncing node from selecting more than `Kcp` blocks beyond the intersection of its peers' latest selections. + +### Limit on Eagerness + +The {Limit on Eagerness} ({LoE}) prevents the syncing node from selecting more than `Kcp` blocks beyond the intersection of its peers' latest selections. That interesction is called the {LoE anchor}. (The implementation maintains an LoE fragment. In an unfortunate collision of names, the LoE anchor is the tip of the LoE fragment, _not_ its [`anchor`](https://github.com/IntersectMBO/ouroboros-network/blob/88bf7766ddb70579b730f777e53473dcdc23b6d0/ouroboros-network-api/src/Ouroboros/Network/AnchoredSeq.hs#L94), see here[^loe-anchor-example] for an example.) -- The {Genesis Density Disconnection} logic ({GDD}) disconnects from any advertised peer whose chain has too few blocks to be the honest chain and could prevent the syncing node from finishing. +### Genesis Density Disconnection + +The {Genesis Density Disconnection} logic ({GDD}) disconnects from any advertised peer whose chain has too few blocks to be the honest chain and could prevent the syncing node from finishing. There are some absolute limits, such as having no blocks at all within some interval of `Scg` slots. The primary rule, though, involves comparisons between peers: Consider peer `A` offering chain `X`. We disconnect from `A` if there is a peer offering a chain `Y` such that: 1) there are no blocks in `Sgen` slots after `X ∩ Y`; 2) `Y` has more than `Kcp` blocks after `X∩Y`. -- The {Limit on Patience} ({LoP}) disconnects from any peer that is claiming to have subsequent headers on its selection but not sending them promptly. +### Limit on Patience -- The {ChainSync Jumping} optimization ({CSJ}) avoids fetching the honest header chain from more than one peer. +The {Limit on Patience} ({LoP}) disconnects from any peer that is claiming to have subsequent headers on its selection but not sending them promptly. - - The {Devoted BlockFetch} decision logic ({DBF}) of a syncing node prefers to request blocks from only one peer at a time, the first peer it finds that serves the best available header chain and serves the blocks faster than the syncing node can validate them. +### ChainSync Jumping + +The {ChainSync Jumping} optimization ({CSJ}) avoids fetching the honest header chain from more than one peer. + +### Devoted BlockFetch + +The {Devoted BlockFetch} decision logic ({DBF}) of a syncing node prefers to request blocks from only one peer at a time, the first peer it finds that serves the best available header chain and serves the blocks faster than the syncing node can validate them. The Honest Availability Assumption ensures that one such peer exists. +### Node Versus Environment Tests + - The {Node Versus Environment} tests scrutinize the behavior of the partially-mocked node when subjected to adversarial inputs. These are notably the first Cardano Consensus Layer tests to explicitly simulate non-trivial adversarial behaviors. +### Components Diagram + All components are also depicted in the following diagram, with the exception of the GSM, which simply disables all other Genesis components (except Lightweight Checkpointing). TODO: edit this diagram, it's barely legible when rendered by Docusaurus. Maybe change it to top-down. @@ -110,29 +139,42 @@ graph LR LoE -- "stalls until we disconnect peers offering low-density chains" --> GDD ``` -## How Components satisfy Requirements +## How the Components Satisfy the Requirements + +At a high-level, the [requirements](#requirements) outlined above are satisfied by the [components](#components) just discussed for the following reasons. -At a high-level, those requirements are satisfied by those components for the following reasons. +### Satisfying Disaster Tolerance -- The Lightweight Checkpointing logic directly ensures Disaster Tolerance; during and/or after the disaster, some decision process (likely off-chain) would certify some additional checkpoints. - With sufficient checkpoint configuration data, a syncing node will be able to succesfully sync past a disasterously sparse section of the network's historical chain. +The [Lightweight Checkpointing](#lightweight-checkpointing) logic directly ensures [Disaster Tolerance](#disaster-tolerance); during and/or after the disaster, some decision process (likely off-chain) would certify some additional checkpoints. + With sufficient checkpoint configuration data, a syncing node will be able to succesfully sync past a disastrously sparse section of the network's historical chain. - Specifically, this allows for the GDD to favor some alternative chains over the network's densest chain, since a configured checkpoint could prevent the GDD from ever seeing those alternatives. +Specifically, this allows for the [GDD](genesis-density-disconnection) to favor some alternative chains over the network's densest chain, since a configured checkpoint could prevent the GDD from ever seeing those alternatives. As a side benefit, this means the initial Genesis deployment can include checkpoints that cover the Byron era, which has different density characteristics, and some portions of the historical chain that are unusually sparse. Without checkpoints, it's theoretically possible that the "missing" blocks all ended up on some unknown adversarial chain that the GDD would actually prefer to today's Cardano network's chain. -- The GSM directly ensures No Praos Disruption (unless the node becomes [eclipsed](Glossary#eclipse-attack) or the honest chain actually stops growing for too long). +### Satisfying No Praos Disruption -- The LoE directly ensures Sync Safety, because the Honest Availability Assumption ensures that the LoE anchor is a prefix of the latest honest chain. +The [GSM](#genesis-state-machine) directly ensures [No Praos Disruption](#no-praos-disruption) (unless the node becomes [eclipsed](Glossary#eclipse-attack) or the honest chain actually stops growing for too long). + +### Satisfying Sync Safety + +The [LoE](#limit-on-eagerness) directly ensures Sync Safety, because the Honest Availability Assumption ensures that the LoE anchor is a prefix of the latest honest chain. + +### Satisfying Sync Liveness + +The [GDD](#genesis-density-disconnection) and [LoP](#limit-on-patience) together ensure the LoE anchor will advance --- and with only moderate delay --- which is necessary but not sufficient for Sync Liveness. -- The GDD and LoP together ensure the LoE anchor will advance --- and with only moderate delay --- which is necessary but not sufficient for Sync Liveness. In particular, one honest peer suffices for the GDD to disconnect from every peer that is advertising an alternative chain, based on the core assumption of Ouroboros Genesis that the honest network's historical chain is denser than any alternative. -- The advancing LoE anchor and DBF together ensure Sync Liveness. +The advancing LoE anchor and DBF together ensure Sync Liveness. + +### Satisfying Limited Sync Load + +The CSJ and DBF together ensure Limited Sync Load. -- The CSJ and DBF together ensure Limited Sync Load. +### Satisfying Component Correctness -- The Node Versus Environment tests provide assurance that each component is correct. +The [Node Versus Environment Tests](#node-versus-environment-tests) provide a high degree of assurance that each component is correct. The descriptions of each component in the remainder of this document will include lower-level reasoning in support of these claims. A single completely detailed proof would be ideal, but is beyond the project's resources. From 6403c828cb2ce5817df0dff8b2c920cd78a49ea7 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 21 Jul 2025 12:12:58 +0200 Subject: [PATCH 38/52] Add Genesis Design to the sidebar --- docs/website/sidebars.js | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index ed7a8ef1dc..e16a7af774 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -26,6 +26,7 @@ const sidebars = { 'explanation/ledger-interaction', 'explanation/queries', 'explanation/consensus-protocol', + 'explanation/genesis-design', ] } ], From e76e6a9aa83c9ce228645f0a1aa5b9fed0b1bd3b Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 21 Jul 2025 12:13:57 +0200 Subject: [PATCH 39/52] Edit first batch of component level design sections - The Lightweight Checkpointing Component - The Genesis State Machine Component - The Limit on Eagerness Component --- .../contents/explanation/genesis-design.md | 132 +++++++++--------- 1 file changed, 65 insertions(+), 67 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index bdf620b66e..c5ebeb463c 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -44,7 +44,6 @@ If the syncing node always has at least one peer that is honest, not itself sync The upper bound of unnecessary delay incurred during some interval of the sync is proportional to how many of the syncing node's upstream peers in that same interval are adversarial. It is beyond the scope of this design to ensure that count of adversarial peers remains below some reasonable bound (eg 50). - ### Limited Sync Load A syncing node should avoid imposing excessive load on the honest network. For example, it should request the same block from multiple peers only as a last resort. @@ -61,19 +60,29 @@ This design consists of the following components. The {Lightweight Checkpointing} logic allows configuration data (comparable in authority to the genesis block) to mandate that the node reject some chains as invalid by fiat. - ### Genesis State Machine The {Genesis State Machine} ({GSM}) determines the node synchronization status. For this, it transitions between different states: pre-syncing, syncing, and caught-up. When the node is caught-up, the GSM disables all components of this design except Lightweight Checkpointing and the GSM itself. - ### Limit on Eagerness The {Limit on Eagerness} ({LoE}) prevents the syncing node from selecting more than `Kcp` blocks beyond the intersection of its peers' latest selections. That interesction is called the {LoE anchor}. (The implementation maintains an LoE fragment. - In an unfortunate collision of names, the LoE anchor is the tip of the LoE fragment, _not_ its [`anchor`](https://github.com/IntersectMBO/ouroboros-network/blob/88bf7766ddb70579b730f777e53473dcdc23b6d0/ouroboros-network-api/src/Ouroboros/Network/AnchoredSeq.hs#L94), see here[^loe-anchor-example] for an example.) + In an unfortunate collision of names, the LoE anchor is the tip of the LoE fragment, _not_ its [`anchor`](https://github.com/IntersectMBO/ouroboros-network/blob/88bf7766ddb70579b730f777e53473dcdc23b6d0/ouroboros-network-api/src/Ouroboros/Network/AnchoredSeq.hs#L94). + +For example, consider the following candidate chains, all with anchor `A` and ending in `E`, `F` and `G`, respectively. + +``` + A---B---C---D---E + \ \ + \ \-F + \-G +``` + +The most recent common point on these fragments is `C`, which we call the **LoE anchor**. +However, the LoE fragment (the longest shared common prefix of the candidate chains) is instead anchored in `A` (a recent immutable tip) and has tip `C`. ### Genesis Density Disconnection @@ -156,7 +165,7 @@ Specifically, this allows for the [GDD](genesis-density-disconnection) to favor The [GSM](#genesis-state-machine) directly ensures [No Praos Disruption](#no-praos-disruption) (unless the node becomes [eclipsed](Glossary#eclipse-attack) or the honest chain actually stops growing for too long). -### Satisfying Sync Safety +### Satisfying Sync Safety The [LoE](#limit-on-eagerness) directly ensures Sync Safety, because the Honest Availability Assumption ensures that the LoE anchor is a prefix of the latest honest chain. @@ -181,59 +190,56 @@ A single completely detailed proof would be ideal, but is beyond the project's r ## Component-level Designs -Each subsection specifies the high-level design of one component. +In the following sections, we describe the high-level design of the different Genesis components. ### The Lightweight Checkpointing Component -[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L318) +[Lightweight Checkpointing](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HeaderValidation.hs#L318) is one of the simplest components. +The node configuration data [includes](https://github.com/IntersectMBO/cardano-node/blob/b11617eca88d6a09500bf7ae967d09e9194528f3/configuration/cardano/mainnet-checkpoints.json) a list of pairs of block number[^checkpoint-block-vs-slot-no] (ie chain length) and hash. -The Lightweight Checkpointing is one of the simplest components. -The node configuration data will include a list of pairs of block number[^checkpoint-block-vs-slot-no] (ie chain length) and hash. +[^checkpoint-block-vs-slot-no]: We decided to use pairs of block numbers and hashes as the resulting semantics are very simple, in particular because any sufficiently long chain will contain a block with a given block number, in contrast to slot numbers (as slots can be empty). Depending on the exact context, one scheme or the other might be more convenient. -[^checkpoint-block-vs-slot-no]: We decided to use pairs of block numbers and hashes as the resulting semantics are very simple, in particular because that any sufficiently long chain will contain a block with a given block number, in contrast to slot numbers (as slots can be empty). Depending on the exact context, one scheme or the other might be more convenient. +During the [header validation](consensus-protocol#header-validity) process, the checkpoint mechanism introduces an additional dictionary (`Data.Map`) lookup for each header we want to validate. This is required to check whether the header has a corresponding checkpoint hash. If it does, the hash is compared against the header's own hash. -Each pair N and H incurs an additional predicate to that node's header validation: if a header's block number is equal to N, then the header is valid if its hash is H. +If an interval within the desired historical chain is sufficiently sparse such that the [GDD](#genesis-density-disconnection) might not prefer it, checkpoints can be used to prevent the GDD from detecting any competing alternative chains. -If some interval of the desired historical chain is sufficiently sparse that the GDD might not prefer it, then checkpoints can be used to prevent the GDD from being aware of any competing alternative chains. -There are two main options. +When elaborating the list of checkpoints, there are two main options: -- Add a checkpoint in at least each interval in which the desired chain doesn't necessarily have greater GDD density than some potential alternative chain. - This ensures the node will never see an alternative chain that would cause the GDD to disconnect from peers serving the (by fiat) desired chain. -- Add merely one checkpoint that is after the weak interval. - This is enough to ensure that a node that was tricked onto an alternative chain will not be able to finish its sync. - But it's not enough to ensure the node will end up on the same chain as the honest network. +- Add a checkpoint in at least every interval where the desired chain does not necessarily have greater GDD density than a potential alternative chain. +This ensures the node will never encounter an alternative chain that would cause the GDD to disconnect from peers serving the desired chain (by fiat). +- Add a single checkpoint placed after the weak interval. +This is sufficient to prevent a node that was diverted onto an alternative chain from completing its sync. +However, it does not guarantee the node will rejoin the same chain as the honest network. It cannot be emphasized enough that the list of checkpoints in the configuration data must be obtained from/signed by a trusted source. The Lightweight Checkpointing component is always active, regardless of whether the node is syncing. -This could be changed, but this configuration data already needs such care that it shouldn't matter. -In particular --- except perhaps _during_ a disaster scenario --- no configured checkpoint should ever be recent enough to affect a node that had already synced the desire chain, as required by No Praos Disruption. +This could be changed, but this configuration data already needs to be elaborated with such care that it shouldn't matter. +In particular --- except perhaps _during_ a disaster scenario --- no configured checkpoint should ever be recent enough to affect a node that had already synced the desire chain, as required by [No Praos Disruption](#no-praos-disruption). -This component makes the Sync Safety requirement more flexible/expressive/accomodating, since it introduces the possibility of the community deciding to explicity overrule the GDD comparison for some (eg sparse) interval of the historical chain. -In particular, this flexibility may be required by Disaster Tolerance: both during a disaster and even possibly after it, if the community decides to remain on that chain despite its weak interval. +This component makes the [Sync Safety](#sync-safety) requirement more flexible and expressive, since it introduces the possibility of the community deciding to explicitly overrule the GDD comparison for some (eg sparse) interval of the historical chain. +In particular, this flexibility is needed to satisfy [Disaster Tolerance](#disaster-tolerance): both during a disaster and even possibly after it, if the community decides to remain on that chain despite its weak interval. Ultimately, though, disasters may require more severe remediation, such as temporarily falling back to the Bootstrap Peers mechanism instead of Genesis. ### The Genesis State Machine Component -[Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node/GSM.hs) - -The Genesis State Machine has three states. +The [Genesis State Machine](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node/GSM.hs) has three states. -- The {PreSyncing} state artificially sets the LoE anchor to the node's ImmutableDB tip --- the node cannot make any commitments. +- The {PreSyncing} state artificially sets the [LoE anchor](TODO-ref) to the node's ImmutableDB tip --- the node cannot commit to any chain. - The {Syncing} state enables all of the functionality introduced by this design. -- The {CaughtUp} state disables all of functionality introduced by this design except for Lightweight Checkpointing. - A node in the CaughtUp state is "just running Praos", and so it no longer needs to _constantly_ ensure the HAA. +- The {CaughtUp} state disables all of functionality introduced by this design except for [Lightweight Checkpointing](#lightweight-checkpointing). + A node in the CaughtUp state is "just running Praos", and so it no longer needs to requires the [honest availability assumption](#sync-safety). The transitions are triggered as follows. - The nominal path consists of a cycle among the three states. - The GSM transitions from PreSyncing to Syncing when the Diffusion Layer indicates the HAA is satisfied. - The GSM transitions from Syncing to CaughtUp when every peer simultaneously indicates that is has no subsequent headers to send and the syncing node has selected a chain no worse than any received header. - This trigger is notably not time based, because an adversary is free to create an alternative chain with a very young tip in order to cause the node to lower its defenses by selecting it. - This is especially true in the context of an adversarial CSJ Dynamo (see below), which has a temporarily disproportionate influence over the syncing nodes selection. - - The GSM transitions from CaughtUp to PreSyncing only when the node's selection is older than MaxCaughtUpAge (eg the node was offline for a few hours). - The MaxCaughtUpAge duration is a parameter of this design; see [Parameter Tuning](#parameter-tuning) below for constraints on it. - Moreover, this transition is delayed by some small random duration (eg <5 minutes) in order to avoid an undesired simultaneity amongst honest nodes within a struggling honest network. + This trigger is notably not time based, because an adversary is free to create an alternative chain with a very young tip to cause the node to lower its defenses by selecting it. + This is especially true in the context of an adversarial CSJ Dynamo (see below), which has a temporarily disproportionate influence over the syncing nodes' selection. + - The GSM transitions from CaughtUp to PreSyncing only when the node's selection is older than `MaxCaughtUpAge` (eg the node was offline for a few hours). + The `MaxCaughtUpAge` duration is a parameter of this design; see [Parameter Tuning](#parameter-tuning) below for constraints on it. + Moreover, this transition is delayed by some small random duration (eg <5 minutes) to avoid an undesired simultaneity amongst honest nodes within a struggling honest network. - But that path is not necessarily guaranteed. - The GSM transitions from Syncing to PreSyncing if the Diffusion Layer indicates the HAA is no longer satisfied. @@ -247,11 +253,12 @@ graph PreSyncing -- "HAA is satisfied" --> Syncing Syncing -- "HAA is no longer satisfied" --> PreSyncing - Syncing -- "all peers have most recently sent MsgAwaitReply\nand the selection is ≥ the best header" --> CaughtUp + Syncing -- "all peers have most recently sent MsgAwaitReply + and the selection is ≥ the best header" --> CaughtUp CaughtUp -- "selection became older than MaxCaughtUpAge" --> PreSyncing StartUp[[Node start-up]] - StartUp -- "node was most recently in CaughtUp\nand selection is younger than MaxCaughtUpAge" --> CaughtUp + StartUp -- "node was most recently in CaughtUp and selection is younger than MaxCaughtUpAge" --> CaughtUp StartUp -- "otherwise" --> PreSyncing ``` @@ -263,45 +270,47 @@ Superficially, one would expect that a Syncing node needn't bother minting block On the other hand, the transition from Syncing to CaughtUp may be preceded by a duration in which the syncing node has the full chain but some peers are preventing it from concluding it has finished syncing. Wasting an election on a stale chain seems preferable to missing a minting opportunity. -This component directly ensures No Praos Disruption, since the CaughtUp state disables all of the extra features and the Syncing state does not inhibit minting. -The only difference is that the node will defensively transition to PreSyncing if it sees no new blocks for too long, eg if it's eclipsed for a duration of MaxCaughtUpAge and/or if the honest network actually doesn't mint blocks for a duration of MaxCaughtUpAge. +This component directly ensures [No Praos Disruption](#no-praos-disruption), since the CaughtUp state disables all of the extra features and the Syncing state does not inhibit minting. +The only difference is that the node will defensively transition to PreSyncing if it sees no new blocks for too long, eg if it's eclipsed for a duration of `MaxCaughtUpAge` and/or if the honest network actually doesn't mint blocks for a duration of `MaxCaughtUpAge`. When reasoning about this overall design, a virtual fourth state is often important to consider. -The node is "almost CaughtUp"/"almost done syncing"/etc when it's technically in Syncing but its immutable tip is relatively close to the wall clock. -This is the most difficult state to reason about because the new components are enabled while peers could be justifiably sending MsgAwaitReply and/or MsgRollBack. -These messages are trivial to handle when syncing obviously historical parts of the chain, since they immediately indicate that the peer does not satisfy the HAA. +The node is "almost CaughtUp"/"almost done syncing"/etc when it's technically in the Syncing state but its immutable tip is relatively close to the wall clock. +This is the most difficult state to reason about because the new components are enabled while peers could be justifiably sending `MsgAwaitReply` and/or `MsgRollBack`. +These messages are trivial to handle when syncing obviously historical parts of the chain, since they immediately indicate that the peer does not satisfy the honest availability assumption. But when it's almost CaughtUp, the new components must accommodate the potentially non-monotonic/stuttering/non-committal/reneging/etc semantics of these messages --- especially since even honest peers might be sending them. ### The Limit on Eagerness Component Link to code: [Trimming candidates](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L691) [Trigger without block](https://github.com/input-output-hk/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L320) -The LoE is another of the simplest components. -The LoE prevents the syncing node from selecting a block that is more than Kcp ahead of the LoE anchor, the intersection of all _current_ peers' header chains. -(Recall the exception that PreSyncing instead fixes the LoE anchor to the tip of the ImmutableDB.) +The LoE is another one of the simplest components. +It prevents the syncing node from selecting a block that is more than `Kcp` ahead of the [LoE anchor](#limit-on-eagerness), the intersection of all _current_ peers' header chains. +(Recall the exception that [PreSyncing](#the-genesis-state-machine-component)) instead fixes the LoE anchor to the tip of the ImmutableDB.) -It is possible for the LoE anchor to move backwards, for example if a peer sends a roll back or if the syncing node connects to a new peer on a chain no one else was serving. -This is the only way that the node's selection could be more than Kcp blocks ahead of the LoE. +It is possible for the LoE anchor to move backwards, for example if a peer sends a rollback or if the syncing node connects to a new peer on a chain no one else was serving. +This is the only way that the node's selection could be more than `Kcp` blocks ahead of the LoE. Because of the HAA, the GDD cannot favor this new chain, and so the GDD/LoP will disconnect from the peer unless it switches to the best chain. Thus such violations will be ephemeral in the design's assumed environment. The LoE anchor will always be an extension (possibly non-proper) of the ImmutableDB tip. Note that the ChainSync client already prohibits peers from rolling back past the ImmutableDB tip. -One subtle consequence of the LoE is a necessary change in the existing Praos implementation. -The chain selection logic ({ChainSel}) is currently only triggered by a block arriving. +One subtle consequence of the LoE was a necessary change in the existing Praos implementation. +The chain selection logic ({ChainSel}) was only triggered by a block arriving. However, when the LoE is enabled, ChainSel must also be triggered whenever the LoE advances, even if a block did not arrive. -This may seem unnecessary, based on the idea that a subsequent block arrival should happen within some reasonable time bound. -But that is not necessarily true. -There are edge-case scenarios in which no additional blocks will arrive because none have been requested, which cannot happen until new headers are validated, which cannot happen until the forecast range advances, which cannot until the selection advances, which cannot until the LoE anchor advances. -Moreover, due to the now-spoiled invariant, ChainSel is implemented in the context of "the block that just arrived". -There isn't necessarily such a block when the LoE advances, so the new trigger of ChainSel must emulate that. -Thus, whenever the LoE changes, ChainSel is invoked once per block in the VolatileDB that is an immediate successor of the tip of the ImmutableDB. -(That is equipotent to reprocessing the ImmutableDB tip itself, but only involves mutable blocks.) +This may seem unnecessary, assuming that a subsequent block will arrive within a reasonable time frame. +However, that assumption doesn’t always hold. +There are edge-case scenarios where no additional blocks arrive, not because they aren’t available, but because none have been requested yet. +Blocks cannot be requested until new headers are validated, which cannot happen until the forecast range advances, which cannot happen until the selection advances, which in turn cannot happen until the LoE anchor progresses. -This component directly ensures Sync Safety, since the HAA ensures that the LoE anchor is on the honest chain. -It is worth emphasizing that every subsequent component below is designed for the sake of Sync Liveness and Limited Sync Load --- the LoE alone suffices for Sync Safety. +Moreover, due to the now-invalidated invariant, ChainSel is implemented in the context of "the block that just arrived." +When the LoE advances, such a block might not exist, so the new trigger for ChainSel must emulate its arrival. +Therefore, whenever the LoE changes, ChainSel is invoked once for each block in the VolatileDB that is an immediate successor to the tip of the ImmutableDB. +(This approach is identical to reprocessing the ImmutableDB tip itself, but operates only on mutable blocks.) + +This component directly ensures [Sync Safety](#sync-safety), since the HAA ensures that the LoE anchor is on the honest chain. +It is worth emphasizing that every subsequent component described below is designed for the sake of Sync Liveness and Limited Sync Load — the LoE alone suffices for Sync Safety. ### The Genesis Density Disconnection Component without CSJ @@ -803,14 +812,3 @@ Related idea: maybe that flag could just track whether the LoE anchor was an ext This could for example be accomplished by letting the jumpers jump to the tip of the dynamo just before rotation. - Possible improvements to the GDD: - Rerun GDD to disconnect peers earlier if the last run disconnected any peers. - -[^loe-anchor-example]: - For example, consider the following candidate chains, all with anchor `A` and ending in `E`, `F` and `G`, respectively. - ``` - A---B---C---D---E - \ \ - \ \-F - \-G - ``` - The most recent common point on these fragments is `C`, which we call the LoE anchor. - However, the LoE fragment (the longest shared common prefix of the candidate chains) is instead anchored in `A` (a recent immutable tip) and has tip `C`. From a761e7206e0e333c1ce66babc91ad65b5e1276de Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 21 Jul 2025 12:15:44 +0200 Subject: [PATCH 40/52] Replace `---` with `&mdash` --- .../contents/explanation/genesis-design.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index c5ebeb463c..4c7014331c 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -353,7 +353,7 @@ Link to code: [Token bucket](https://github.com/IntersectMBO/ouroboros-consensus If a peer claims to have subsequent headers, they must send them promptly. Otherwise, a disagreement amongst two peers might suffice to prevent the LoE anchor from advancing but not suffice for the GDD to make a decision. -This is in tension with the fact that any honest peer will inevitably exhibit some bursts of latency --- even just garbage collection could cause it, eg, whether that collection be on the local node or on the remote peer. +This is in tension with the fact that any honest peer will inevitably exhibit some bursts of latency — even just garbage collection could cause it, eg, whether that collection be on the local node or on the remote peer. To accomodate this tension, the LoP is implemented as a token bucket. The bucket drips unless the peer has most recently sent MsgAwaitReply or their latest header is beyond the syncing node's forecast range. @@ -372,7 +372,7 @@ Parameter Tuning will ensure this is less than one minute per adversarial peer, The ChainSync Jumping optimization is a backwards compatible optimization of the ChainSync mini protocol. Instead of simply running the normal ChainSync mini protocol with every peer, CSJ runs it with at most two while syncing the historical chain. This saves significant bandwidth and CPU for both the syncing node and all but one of its honest upstream peers. -By the time the node transitions to the CaughtUp state, all peers will be running full ChainSync --- CSJ inherently ensures that, in addition to the GSM. +By the time the node transitions to the CaughtUp state, all peers will be running full ChainSync — CSJ inherently ensures that, in addition to the GSM. The {CSJ governor} is centralized logic that divides peers into the following roles. @@ -450,7 +450,7 @@ Both can be resolved by implementing additional disconnections according to Gene - Similarly, if the HAA-satisfying peers are all dormant, then it's possible that the node's selection is simultaneously longer than every peer's header chain and also branches off from some proper prefix of the LoE anchor. This is an unusual scenario, but may arise, for example, if the previous Dynamo recently disconnected (which implies it did not satisfy the HAA). - In this case, the DBF logic would idle, since no peer's header chain is better than the selection --- the node would not select the peers' blocks even if they did somehow arrive, since they're worse than the current selection. + In this case, the DBF logic would idle, since no peer's header chain is better than the selection — the node would not select the peers' blocks even if they did somehow arrive, since they're worse than the current selection. Moreover, deadlock is possible, since the Dynamo and Objector forecast ranges' do not necessarily include the entire GDD window. Thus the GDD is not necessarily able to make a decision between them, just as in the previous deadlock. @@ -503,7 +503,7 @@ This component contributes to Sync Liveness by mitigating the discussed deadlock [Link to code](https://github.com/IntersectMBO/ouroboros-network/blob/28b731cde005a1de0b4be0ea0bd16852e827c1bc/ouroboros-network/src/Ouroboros/Network/BlockFetch/Decision/Genesis.hs#L9) The rationale for Devoted BlockFetch continues the theme from the HAA and CSJ: one peer suffices for actually fetching the chain, once identified the amongst the peers. -For this component, the key insight is that --- so far, at least --- most Cardano blocks can be trasmitted much faster than they can be validated. +For this component, the key insight is that — so far, at least — most Cardano blocks can be trasmitted much faster than they can be validated. Thus, once the syncing node starts requesting blocks from a peer that satisfies the HAA, blocks will tend to arrive faster than the syncing node can process them. That's a sufficient steady-state because the syncing node doesn't need to receive blocks any faster than that; doing so would just be wasting bandwidth, its own and its peers'. As a result, under nominal conditions, the syncing node will be able to fetch blocks from just one peer at a time. @@ -527,7 +527,7 @@ When the node is initialized, E should be the empty set and T should be the curr Each iteration of the DBF logic executes the following steps. -- If E is non-empty, then all those blocks were requested from a single peer --- that's the DBF invariant motivated above. +- If E is non-empty, then all those blocks were requested from a single peer — that's the DBF invariant motivated above. If now > T + BlockFetchGracePeriod and the ChainSel logic has been blocked on an empty work queue at any point since the previous DBF logic iteration, then set E to the empty set. (The BlockFetch state must still ultimately track those blocks as in-flight, in order to enforce timeouts, per peer in-flight limits, etc. But the DBF logic is no longer influenced by those in-flight requests.) @@ -584,7 +584,7 @@ This component contibutes to Sync Liveness for two reasons. But it might be in the same state once it does. The node can escape this state in a few ways, but the most important is that the longest header chain will soon enough be held by an honest peer. - When the node is syncing the historical chain: GDD and LoP ensure that the longest header chain of any peer will soon be the (honest) historical chain, and so offered by all honest peers --- CSJ doesn't spoil this because it will eventually offer a jump. + When the node is syncing the historical chain: GDD and LoP ensure that the longest header chain of any peer will soon be the (honest) historical chain, and so offered by all honest peers — CSJ doesn't spoil this because it will eventually offer a jump. When the node is almost done syncing: a healthy Praos network will frequently have its longest chain held by honest peers, so HAA ensures some honest peer's header chain will become the new longest chain. - If all peers have the longest chain, the syncing node might unfortunately choose to request it from an adversarial peer. @@ -676,7 +676,7 @@ An adversary that is preventing the LoE anchor from advancing is {leashing} the - HistoricityCutoff = 36+1 hours. This value must be greater than Scg of the Cardano chain's current era, which is 36 hours, and will remain so for the foreseeable future. It seems very unlikely that the community will increase the upper bound on settlement time, but if they did, then HistoricityCutoff would need to increase accordingly. - The extra hour is to eliminate corner cases/risks/etc --- eg 10 minutes would probably suffice just as well. + The extra hour is to eliminate corner cases/risks/etc — eg 10 minutes would probably suffice just as well. The primary cost of increasing HistoricityCutoff is that an adversarial peer could remove themselves from the CSJ optimization, thereby forcing the victim to sync every header younger that HistoricityCutoff from them as well as from the Dynamo. Thus, the potential cost of HistoricityCutoff is proportional to the number of adversarial peers, which is allowed in the definition of Sync Liveness. @@ -793,7 +793,7 @@ The following additional work on Genesis is suggested, as priorities and resourc - Make MinJumpSlots dynamic such that it can vary per era (and in particular be larger in Shelley-based eras). - Ideally a peer whose candidate fragment branches off before the ImmDB must not satisfy the HAA. Therefore, the LoE anchor intersection could exclude that candidate fragment. - However, we've seen a repro where the honest peer does do that --- we're currently debugging it. + However, we've seen a repro where the honest peer does do that — we're currently debugging it. In the meantime, simply treating such a peer as having the ImmDB tip as their candidate fragment tip is sound; they were ignorable because they're doomed, so we can instead just wait for them to be disconnected. - Possible improvements to the LoE implementation: - Small-ish optimizations: From 44031791521b458569e64971053ba8a747ea7514 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 21 Jul 2025 13:11:25 +0200 Subject: [PATCH 41/52] Edit "The Genesis Density Disconnection Component without CSJ" --- .../contents/explanation/genesis-design.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index 4c7014331c..595df40cff 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -321,30 +321,30 @@ The GDD must disconnect from any peers serving chains that are preventing the Lo The logic compares every ordered pair of peers. An optimization could avoid symmetric comparisons, but that factor of two doesn't appear to be necessary for the relatively small expected upstream peer counts. -Let {the GDD window} be the Sgen slots after the LoE anchor. -Also, observe that when a peer's latest message was MsgAwaitReply, the syncing node must assume that peer does not have subsequent headers to send. -That might be an incorrect assumption, but only for the short duration until the peer's next ChainSync message arrives. +Let {the GDD window} be the `Sgen` slots after the LoE anchor. +Also, observe that when a peer's latest message was `MsgAwaitReply`, the syncing node must assume that peer does not have subsequent headers to send. +That might be an incorrect assumption, but only for the short duration until the peer's next `ChainSync` message arrives. -The GDD will disconnect from a peer P due to comparison to a peer Q if all of the following conjuncts hold simultaneously. +The GDD will disconnect from a peer `P` due to comparison with a peer `Q` if all of the following conditions hold: -- P and Q disagree on which header directly succeeds the LoE anchor. - To clarify, this conjunct is satisfied if (but not only if) P's latest message was MsgAwaitReply but Q already sent a header. - Additionally, this disagreement can be determined even if P's first header after the LoE is not in the syncing node's forecast range: its validity is not yet relevant. +- `P` and `Q` disagree on which header directly succeeds the LoE anchor. +Note that this condition is satisfied if (but not only if) `P`'s latest message was `MsgAwaitReply` but `Q` already sent a header. +Additionally, this disagreement can be determined even if `P`'s first header after the LoE is not in the syncing node's forecast range: its validity is not yet relevant. -- Q has sent more than Kcp (valid) headers after the LoE anchor. - This prevents typical Praos short forks from triggering the GDD when the node is almost done syncing. +- `Q` has sent more than `Kcp` (valid) headers after the LoE anchor. +This prevents typical Praos short forks from triggering the GDD when the node is almost done syncing. -- Either P's latest message was not MsgAwaitReply or else P does not already have more headers in the GDD window than Q does. +- Either `P`'s latest message was not `MsgAwaitReply` or else `P` does not already have more headers in the GDD window than `Q` does. -- Either P's latest message was MsgAwaitReply or else no extension of P's chain could have more headers in the GDD window than Q already does. - The non-existence of any such an extension is conservatively established by there being too few slots in the portion of the GDD window that is after P's header chain. +- Either `P`'s latest message was `MsgAwaitReply` or else no extension of `P`'s chain could have more headers in the GDD window than `Q` already does. +The absence of such an extension is conservatively determined by the insufficient number of slots in the portion of the GDD window that follows `P`’s header chain. -This component contributes to Sync Liveness. -The LoP component (in the next section) ensures that peers sending an alternative history must soon enough reveal their chain's sparseness so that the GDD will disconnect from them when compared to one of the HAA-satisfying peers. +This component contributes to [Sync Liveness](#sync-liveness). +The [LoP component](#the-limit-on-patience-component) ensures that peers sending an alternative history must soon enough reveal their chain's sparseness so that the GDD will disconnect from them when compared to one of the HAA-satisfying peers. In the "with CSJ" section below, the GDD is enriched beyond its primary responsibility for the sake of the CSJ design. -To prevent this component from spoiling Sync Liveness, this relatively-expensive calculation is rate-limited with a parameter {GddRateLimit}; see the [Parameter Tuning](#parameter-tuning) section. +To prevent this component from violating Sync Liveness, this relatively-expensive calculation is rate-limited with a parameter {GddRateLimit}; see the [Parameter Tuning](#parameter-tuning) section. ### The Limit on Patience Component From c9d9fda661e7c1637bf4e617d5a4ce3976566604 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 21 Jul 2025 13:21:10 +0200 Subject: [PATCH 42/52] Edit "The Limit on Patience Component" section --- .../website/contents/explanation/genesis-design.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index 595df40cff..a1753c36dd 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -356,14 +356,20 @@ Otherwise, a disagreement amongst two peers might suffice to prevent the LoE anc This is in tension with the fact that any honest peer will inevitably exhibit some bursts of latency — even just garbage collection could cause it, eg, whether that collection be on the local node or on the remote peer. To accomodate this tension, the LoP is implemented as a token bucket. -The bucket drips unless the peer has most recently sent MsgAwaitReply or their latest header is beyond the syncing node's forecast range. +The bucket drips unless the peer has most recently sent `MsgAwaitReply` or their latest header is beyond the syncing node's forecast range. If the bucket is ever empty, the LoP disconnects from the peer. A token is added to the bucket whenever the peer sends a valid header that is longer (a la the block number) than any header they had previously sent, but it's discarded if the bucket is already full. -The rate TDRIP at which the bucket drips and its maximum capacity TCAP are design parameters that must be tuned, see [Parameter Tuning](#parameter-tuning) below. +The rate `TDRIP` at which the bucket drips and its maximum capacity `TCAP` are design parameters that must be tuned, see [Parameter Tuning](#parameter-tuning) below. -This component contibutes to Sync Liveness because it forces a peer to enable a GDD decision within a duration of at most TDRIP × (TCAP + L), where L is the number of headers that can be in their alternative chain's GDD window before the GDD disconnects them. -Parameter Tuning will ensure this is less than one minute per adversarial peer, for example. +This component contibutes to [Sync Liveness](#sync-liveness) because it forces a peer to enable a GDD decision within a duration of at most: + +``` +TDRIP × (TCAP + L) +``` + +where `L` is the number of headers that can be in their alternative chain's GDD window before the GDD disconnects them. +Parameter Tuning could ensure this is less than one minute per adversarial peer, for example. ### The ChainSync Jumping Component From 54cf44e27963c24d6f7753b55f60a9b427c44f54 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Mon, 21 Jul 2025 13:42:55 +0200 Subject: [PATCH 43/52] Edit "The Limit on Patience Component" --- .../contents/explanation/genesis-design.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index a1753c36dd..8c1a887fab 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -376,26 +376,26 @@ Parameter Tuning could ensure this is less than one minute per adversarial peer, [Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ChainSync/Client/Jumping.hs#L14) The ChainSync Jumping optimization is a backwards compatible optimization of the ChainSync mini protocol. -Instead of simply running the normal ChainSync mini protocol with every peer, CSJ runs it with at most two while syncing the historical chain. +Instead of simply running the normal `ChainSync` mini protocol with every peer, CSJ runs it with at most two while syncing the historical chain. This saves significant bandwidth and CPU for both the syncing node and all but one of its honest upstream peers. -By the time the node transitions to the CaughtUp state, all peers will be running full ChainSync — CSJ inherently ensures that, in addition to the GSM. +By the time the node transitions to the `CaughtUp` state, all peers will be running full ChainSync — CSJ inherently ensures that, in addition to the GSM. The {CSJ governor} is centralized logic that divides peers into the following roles. - The {Dynamo} is a peer chosen to run full ChainSync. - It has never sent MsgAwaitReply or MsgRollBack. + It has never sent `MsgAwaitReply` or `MsgRollBack`. -- A {Jumper} is a peer that idles until the CSJ governor occasionally sends it a MsgFindIntersect that offers to jump its header chain to the Dynamo's current header chain. +- A {Jumper} is a peer that idles until the CSJ governor occasionally sends it a `MsgFindIntersect` that offers to jump its header chain to the Dynamo's current header chain. - A Jumper that rejects its offered jump becomes a {PreObjector}. - It sends subsequent bisecting MsgFindIntersect messages until its intersection with the Dynamo is exactly identified and then idles. + It sends subsequent bisecting `MsgFindIntersect` messages until its intersection with the Dynamo is exactly identified and then idles. (A PreObjector is referred to as a "dissenting jumper" in the code.) - The {Objector} is one of the PreObjectors with the oldest intersection with the Dynamo. - It also runs full ChainSync, in order to compete with the Dynamo via the GDD. + It also runs full `ChainSync`, in order to compete with the Dynamo via the GDD. -- A {Disengaged} peer no longer participates in the CSJ optimization; it runs full ChainSync. - These are peers that have sent MsgAwaitReply or MsgRollBack. +- A {Disengaged} peer no longer participates in the CSJ optimization; it runs full `ChainSync`. + These are peers that have sent `MsgAwaitReply` or `MsgRollBack`. Under some circumstances, the CSJ governor must choose a new Dynamo. The only constraint on this choosing mechanism is that it should eventually find an HAA-satisfying peer. @@ -406,10 +406,10 @@ Peers are added to the end of the queue when they are first connected to. (The Devoted BlockFetch component specified below will also introduce an event that causes a peer to be moved to the end of this queue.) This is named the {Dynamo candidate queue}. -The Dynamo offers a jump whenever its header chain has advanced by {MinJumpSlots} slots since it last offered a jump; the value of the MinJumpSlots design parameter is discussed in the [Parameter Tuning](#parameter-tuning) section. -To offer a jump, the Dynamo makes a copy of its current candidate chain C and (via the CSJ governor) sends a corresponding MsgFindIntersect to every Jumper. -If a Jumper accepts the entire jump, it's header chain is updated to C. -If a Jumper refuses, additional bisecting MsgFindIntersect messages are sent to that peer in order to determine the exact intersection of its selection with C, and the peer becomes a PreObjector. +The Dynamo offers a jump whenever its header chain has advanced by {MinJumpSlots} slots since it last offered a jump; the value of the `MinJumpSlots` design parameter is discussed in the [Parameter Tuning](#parameter-tuning) section. +To offer a jump, the Dynamo makes a copy of its current candidate chain C and (via the CSJ governor) sends a corresponding `MsgFindIntersect` to every Jumper. +If a Jumper accepts the entire jump, it's header chain is updated to `C`. +If a Jumper refuses, additional bisecting `MsgFindIntersect` messages are sent to that peer in order to determine the exact intersection of its selection with `C`, and the peer becomes a PreObjector. While there are some PreObjectors, one with the oldest intersection is promoted to be the Objector, which might require demoting the current Objector back to PreObjector. It is crucial that no PreObjector has an older intersection than the Objector, since otherwise the forecast range might not be able to sufficiently advance for the GDD to resolve the competition between the Dynamo or the Objector. It is also important that there is only one Objector at a time, since all honest Jumpers would disagree with an alternative chain served by an adversarial Dynamo; multiple honest Objectors would violate the Limited Sync Load requirement. @@ -417,16 +417,16 @@ It is also important that there is only one Objector at a time, since all honest Whenever a new peer becomes the Dynamo (eg because the GDD killed the previous Dynamo), all others peers (even the Objector) forget their most recent jump offer and are reset to Jumper. The new Dynamo immediately offers a jump to all Jumpers. -If an Objector or a Dynamo sends MsgAwaitReply or MsgRollBack, then it immediately becomes Disengaged. -In order to prevent adversarial peers from using MsgAwaitReply or MsgRollBack in order to waste the syncing nodes bandwidth and CPU by running full ChainSync for the historical chain, CSJ also enforces a {Limit on the Age of MsgAwaitReply/MsgRollBack}. -This cannot be a perfect mitigation, since it's possible that an honest peer would need to rollback a header that is at most Scg slots old, even though that's very unlikely. -But it's sufficient to simply limit that extra CPU cost to the final Scg window of the sync, instead of potentially paying that cost for the entire age of the chain. -The maximum allowed age of a rolled back header is HistoricityCutoff, which cannot be less than Scg; see the [Parameter Tuning](#parameter-tuning) section below for more details. -Any MsgRollBack that rolls back a header older than HistoricityCutoff (according to the wall clock) and any MsgAwaitReply that is sent when the candidate fragment tip is older than HistoricityCutoff immediately incurs a disconnection from that peer. +If an Objector or a Dynamo sends `MsgAwaitReply` or `MsgRollBack`, then it immediately becomes Disengaged. +In order to prevent adversarial peers from using `MsgAwaitReply` or `MsgRollBack` in order to waste the syncing nodes bandwidth and CPU by running full ChainSync for the historical chain, CSJ also enforces a {Limit on the Age of `MsgAwaitReply`/`MsgRollBack`}. +This cannot be a perfect mitigation, since it's possible that an honest peer would need to rollback a header that is at most `Scg` slots old, even though that's very unlikely. +But it's sufficient to simply limit that extra CPU cost to the final `Scg` window of the sync, instead of potentially paying that cost for the entire age of the chain. +The maximum allowed age of a rolled back header is `HistoricityCutoff`, which cannot be less than `Scg`; see the [Parameter Tuning](#parameter-tuning) section below for more details. +Any `MsgRollBack` that rolls back a header older than `HistoricityCutoff` (according to the wall clock) and any `MsgAwaitReply` that is sent when the candidate fragment tip is older than `HistoricityCutoff` immediately incurs a disconnection from that peer. The Dynamo, Objector, and every Disengaged peer are continually subject to the standard LoP. A CSJ Jumper's token bucket does not leak, though it does gain tokens when the Jumper accepts (some of) a jump, since the peer has effectly sent those headers. -When a Jumper refuses a jump, it is only subject to the existing relatively-generous MsgFindIntersect timeout. +When a Jumper refuses a jump, it is only subject to the existing relatively-generous `MsgFindIntersect` timeout. This may let an adversarial peer prevent the LoE anchor from advancing for a some minutes, but either the exact intersection is found, this PreObjector is reset to Jumper, or the peer is disengaged for sending a roll back. This component contributes to Sync Liveness and Limited Sync Load by eliminating redundant ChainSync exchanges. From 3968a6cf6aa125917012bab477aa913649d00615 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 23 Jul 2025 11:37:42 +0200 Subject: [PATCH 44/52] Incorporate minor edits to the Genesis Design section --- .../contents/explanation/genesis-design.md | 150 +++++++++--------- 1 file changed, 77 insertions(+), 73 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index 8c1a887fab..02b3094ff4 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -443,16 +443,16 @@ Both can be resolved by implementing additional disconnections according to Gene - Without CSJ, the GDD is always comparing each peer to the best header chain a HAA-satisfying peer can provide. With CSJ, the HAA-satisfying peers might instead be dormant as PreObjectors, with the Dynamo and Objector both adversarial. - There's no guarantee in that scenario that the competing header chains of the Dynamo and Objector will (eventually) include more than Kcp headers. + There's no guarantee in that scenario that the competing header chains of the Dynamo and Objector will (eventually) include more than `Kcp` headers. Since that is one of the plain GDD's required conjuncts, the syncing node would be stuck. - This state might last a very long time, violating Sync Liveness, since the Dynamo and Objector could each send a header beyond the forecast range in order to also avoid the LoP. + This state might last a very long time, violating [Sync Liveness](#sync-liveness), since the Dynamo and Objector could each send a header beyond the forecast range in order to also avoid the LoP. To prevent this attack, the GDD trigger is relaxed for the sake of CSJ. - Specifically, Q does not need to have sent more than Kcp (valid) headers after the LoE anchor if P has already sent a header beyond the GDD window. + Specifically, `Q` does not need to have sent more than `Kcp` (valid) headers after the LoE anchor if `P` has already sent a header beyond the GDD window. It's safe to make the GDD disconnect in more scenarios, as long as it will still never disconnect from an HAA-satisfying peer outside of a disaster scenario. - In this case, if there has been no disaster and P satisfies the HAA, then Praos Chain Growth ensures P's chain will have more than Kcp headers in the GDD window. - If this relaxed GDD were to disconnect from P, then Q must have at least as many headers as P, and so the plain GDD's conjunct would also have been satisfied. + In this case, if there has been no disaster and `P` satisfies the HAA, then Praos Chain Growth ensures `P`'s chain will have more than `Kcp` headers in the GDD window. + If this relaxed GDD were to disconnect from `P`, then `Q` must have at least as many headers as `P`, and so the plain GDD's conjunct would also have been satisfied. - Similarly, if the HAA-satisfying peers are all dormant, then it's possible that the node's selection is simultaneously longer than every peer's header chain and also branches off from some proper prefix of the LoE anchor. This is an unusual scenario, but may arise, for example, if the previous Dynamo recently disconnected (which implies it did not satisfy the HAA). @@ -464,20 +464,20 @@ Both can be resolved by implementing additional disconnections according to Gene Filling this blindspot suffices to prevent the deadlock. The new logic fits nicely in the ChainSync client, instead of in the GDD itself, since it only involves a single peer at a time. - If a MsgRollForward arrives that is beyond the forecast range (ie Scg slots beyond the intersection with the node's selection) but the predecessor of the new header (ie the tip of its validated header chain) is not preferable to the selection, then disconnect from the peer. + If a `MsgRollForward` arrives that is beyond the forecast range (ie `Scg` slots beyond the intersection with the node's selection) but the predecessor of the new header (ie the tip of its validated header chain) is not preferable to the selection, then disconnect from the peer. This is effectively a Genesis density comparison between the peer and the syncing node itself (but not necessarily in the GDD window, which is always anchored in the LoE anchor). - Even if Sgen were less than Scg, this comparison would still be sufficient and sound, since Sgen = Scg is the most conservative assignment of that Genesis parameter. + Even if `Sgen` were less than `Scg`, this comparison would still be sufficient and sound, since `Sgen = Scg` is the most conservative assignment of that Genesis parameter. In some sense, this rule is an optimization of the existing ChainSync client logic. It fires as soon as it becomes inevitable that the existing logic will subsequently terminate with ForkTooDeep. The latter addition also prevents another deadlock. -If a peer P sends a header beyond the GDD window without having sent any headers within the GDD window, then it must be disconnected from. -Because Sgen = Scg, such a chain includes a gap at least as large as the forecast range. +If a peer `P` sends a header beyond the GDD window without having sent any headers within the GDD window, then it must be disconnected from. +Because `Sgen = Scg`, such a chain includes a gap at least as large as the forecast range. No ChainSync client can progress past such a gap. -This has always been true, and it has long been identified as a disaster scenario, since it is a severe violation of Chain Growth (PR https://github.com/IntersectMBO/ouroboros-network/pull/2844 is related future work, but remains Closed). +This has always been true, and it has long been identified as a disaster scenario, since it is a severe violation of Chain Growth (PR [#2844](https://github.com/IntersectMBO/ouroboros-network/pull/2844) is related future work, but remains Closed). With CSJ, though, it's now possible that the Dynamo and Objector are stuck on such a gap while some PreObjector would be able to progess if it weren't dormant, just as in the deadlocks discussed above. -Because this trigger does not require a comparison against another peer, not even Lightweight Checkpointing can prevent it. +Because this trigger does not require a comparison against another peer, not even [Lightweight Checkpointing](#lightweight-checkpointing) can prevent it. The following concrete example of the second deadlock arose in our property tests, inspiring the fix specified above. (It could be minimized further, but this one was actually generated.) @@ -492,19 +492,20 @@ The following concrete example of the second deadlock arose in our property test ╰─────1──2─────3──4────────5─────6 Adversary 1 ``` -Suppose Adversary 1 is the Dynamo first, serves its chain up to the block 5-8, and then the peer disconnects. -If Adversary 2 becomes the Dynamo and Adversary 3 becomes the Objector (or the other way around), then the (HAA-satisfying) honest peer is dormant as a PreObjector. -In this case, the LoE anchor is the block 2-2, but _not_ the 2-2 that's on the selection. +Henceforth, we refer `i-j` refers to the block number `i` at slot `j`. +Suppose `Adversary 1` is the Dynamo first, serves its chain up to the block `5-8`, and then the peer disconnects. +If `Adversary 2` becomes the Dynamo and `Adversary 3` becomes the Objector (or the other way around), then the (HAA-satisfying) honest peer is dormant as a PreObjector. +In this case, the LoE anchor is the block `2-2`, but _not_ the `2-2` that's on the selection. This is an example of how the selection can be longer than the LoE anchor but not extend it, which is how the second deadlock above arises. -Note again that the forecast range (anchored in G) for the Dynamo and Objector ends in slot 7, which means neither chain can become longer than the selection. -(The block used in this test does not have any tiebreakers, so DBF will not fetch the 5-7 block. +Note again that the forecast range (anchored in `G`) for the Dynamo and Objector ends in slot `7`, which means neither chain can become longer than the selection. +(The block used in this test does not have any tiebreakers, so DBF will not fetch the `5-7` block. Even supposing tiebreakers, there's no guarantee that it would.) This component contributes to Sync Liveness by mitigating the discussed deadlocks, ultimately compensating for the fact that the HAA-satisfying peers might be dormant in the PreObjector state. ### The Devoted BlockFetch Component -> Note that in the code, this component is still called *BulkSync BlockFetch* at the moment. +In the implementation, this component is called *BulkSync BlockFetch*. [Link to code](https://github.com/IntersectMBO/ouroboros-network/blob/28b731cde005a1de0b4be0ea0bd16852e827c1bc/ouroboros-network/src/Ouroboros/Network/BlockFetch/Decision/Genesis.hs#L9) @@ -525,26 +526,26 @@ There are two additional concerns. - The syncing BlockFetch logic should, like the normal Praos BlockFetch logic, still only request blocks from a peer that are on that peer's header chain. The syncing node's peers may have sent different header chains; they might disagree or merely be prefixes of one another. -In summary: prioritize both fetching blocks from the longest header chain and also fetching blocks from the same peer as long as they're arriving faster than they can be validated. +In summary: we prioritize both fetching blocks from the longest header chain and also fetching blocks from the same peer as long as they're arriving faster than they can be validated. -The following specification of the DBF logic maintains two variables, the set E of blocks that are considered in-flight, and the latest time T at which E was empty. -When the node is initialized, E should be the empty set and T should be the current wall clock. +The following specification of the DBF logic maintains two variables, the set `E` of blocks that are considered in-flight, and the latest time `T` at which `E` was empty. +When the node is initialized, `E` should be the empty set and `T` should be the current wall clock. (The implementation is free to maintain these variables in some other equivalent way.) Each iteration of the DBF logic executes the following steps. -- If E is non-empty, then all those blocks were requested from a single peer — that's the DBF invariant motivated above. - If now > T + BlockFetchGracePeriod and the ChainSel logic has been blocked on an empty work queue at any point since the previous DBF logic iteration, then set E to the empty set. +- If `E` is non-empty, then all those blocks were requested from a single peer — that's the DBF invariant motivated above. + If `now > T + BlockFetchGracePeriod` and the ChainSel logic has been blocked on an empty work queue at any point since the previous DBF logic iteration, then set `E` to the empty set. (The BlockFetch state must still ultimately track those blocks as in-flight, in order to enforce timeouts, per peer in-flight limits, etc. But the DBF logic is no longer influenced by those in-flight requests.) Also, if that peer is the Dynamo, signal the CSJ governor to rotate some other peer in as the Dynamo, if another peer is eligible. - Let the {desired headers} be the headers that are on the most preferable header chain but their blocks haven't already arrived. - Note that some desired headers might be in E. + Note that some desired headers might be in `E`. -- If E is non-empty and that peer's header chain includes the first desired header, choose that same peer again. +- If `E` is non-empty and that peer's header chain includes the first desired header, choose that same peer again. -- Otherwise, set E to empty and set T to now. +- Otherwise, set `E` to empty and set `T` to `now`. Also, choose one of the peers whose header chain includes the first desired header. The only constraint on this choosing mechanism is that it should eventually find an HAA-satisfying peer. For example, a simple round-robin queue (which would first be filtered according to the presence of the first desired header) or random choice would suffice. @@ -557,12 +558,12 @@ Each iteration of the DBF logic executes the following steps. Some alternatives are worth mentioning. - BlockFetch does already have a low-level timeout of 60 seconds on its requests. - That is an insufficient per-request defense against an adversary, though; BlockFetchGracePeriod will be significantly shorter. - Moreover, BlockFetchGracePeriod does not disconnect from a peer, it merely deprioritizes it for CSJ Dynamo and DBF choices. + That is an insufficient per-request defense against an adversary, though; `BlockFetchGracePeriod` will be significantly shorter. + Moreover, `BlockFetchGracePeriod` does not disconnect from a peer, it merely deprioritizes it for CSJ Dynamo and DBF choices. In particular, it's very likely that an honest node will occasionally fail to serve blocks for BlockFetchGracePeriod, so disconnecting would be too aggressive. Block costs are more variable than header costs, so a token bucket like in the LoP is less obviously applicable here. -- A possible alternative to the BlockFetchGracePeriod duration would disable the check just for the first in-flight block, but practical networking concerns such as the TCP congestion window make a time-based condition more effective and easier to reason about. +- A possible alternative to the `BlockFetchGracePeriod` duration would disable the check just for the first in-flight block, but practical networking concerns such as the TCP congestion window make a time-based condition more effective and easier to reason about. - It would be possible to let a peer finish sending their in-flight blocks even if they aren't serving any of the desired headers. This would avoid the risk of subsequently requesting those blocks from someone else. @@ -570,7 +571,7 @@ Some alternatives are worth mentioning. - The logic could require that the chosen peer is serving more than just the first desired header. There is a tension here. - The existing logic maximizes the number of peers considered, for example, which in turn maximizes the chance the same node could be chosen (in particular, even when they're not also the Dynamo), thereby avoiding another opportunity for the adversary to delay for a duration of BlockFetchGracePeriod. + The existing logic maximizes the number of peers considered, for example, which in turn maximizes the chance the same node could be chosen (in particular, even when they're not also the Dynamo), thereby avoiding another opportunity for the adversary to delay for a duration of `BlockFetchGracePeriod`. But it also risks wasting a round-trip to fetch just one block instead of prematurely switching peers in order to fetch potentially many blocks from a newly chosen peer. - It would be acceptable to not demote the Dynamo if it fails to send blocks fast enough. @@ -582,11 +583,11 @@ Some alternatives are worth mentioning. Similarly, the Dynamo isn't necessarily serving the longest header chain. Another is because an adversarial Dynamo could satisfy the GDD and LoP but be extremely slow to serve blocks (although demoting the Dynamo if it's too slow to send blocks might suffice to redress this). -This component contibutes to Sync Liveness for two reasons. +This component contibutes to [Sync Liveness](#sync-liveness) for two reasons. - The node cannot be stuck indefinitely. If the unfetched blocks of the longest chain are offered only by adversarial peers, then the node will only request blocks from them. - The adversary can simply withhold those blocks, and the node will wait for a duration of BlockFetchGracePeriod before it considers requesting from a different peer. + The adversary can simply withhold those blocks, and the node will wait for a duration of `BlockFetchGracePeriod` before it considers requesting from a different peer. But it might be in the same state once it does. The node can escape this state in a few ways, but the most important is that the longest header chain will soon enough be held by an honest peer. @@ -594,15 +595,15 @@ This component contibutes to Sync Liveness for two reasons. When the node is almost done syncing: a healthy Praos network will frequently have its longest chain held by honest peers, so HAA ensures some honest peer's header chain will become the new longest chain. - If all peers have the longest chain, the syncing node might unfortunately choose to request it from an adversarial peer. - That adversarial peer can withhold blocks for BlockFetchGracePeriod, after which time the node will re-request those blocks from another peer. + That adversarial peer can withhold blocks for `BlockFetchGracePeriod`, after which time the node will re-request those blocks from another peer. The probability of each chosen peer being adversarial is proportional to the ratio of honest to adversarial peers. The HAA merely requires this to be greater than 0; it could be 1 out of 30, for example. - The lower this ratio, the longer it will take the DBF to find a peer that satisfies the HAA, assuming each adversarial peer is delaying the node for a duration of BlockFetchGracePeriod. + The lower this ratio, the longer it will take the DBF to find a peer that satisfies the HAA, assuming each adversarial peer is delaying the node for a duration of `BlockFetchGracePeriod`. But once such a peer is found, the node will fetch as many blocks from it as possible. (Unfortunately that might not be all blocks, since the Dynamo might eventually be the only one with the longest chain.) -This component also contributes to Limited Sync Load, since it avoids unnecessarily fetching a block from multiple honest peers. +This component also contributes to [Limited Sync Load](#limited-sync-load), since it avoids unnecessarily fetching a block from multiple honest peers. To prevent this component from spoiling Sync Liveness, this relatively-expensive calculation is rate-limited with a parameter {DbfRateLimit}; see the [Parameter Tuning](#parameter-tuning) section. @@ -632,7 +633,7 @@ Tests ChainSync Jumping, in conjunction with LoE, LoP, and GDD. #### [`Test.Consensus.Genesis.Uniform`](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/Genesis/Tests/Uniform.hs) -Randomly generates various "real life"-ish situations, and checks that the Genesis algorithm yields the correct result, *i.e.* that the tip of the immutable DB ends up within Kcp blocks of the tip of the honest branch. +Randomly generates various "real-life" scenarios and verifies that the Genesis algorithm produces the correct result—i.e., that the tip of the immutable database ends up within `Kcp` blocks of the tip of the honest branch. ## Parameter Tuning @@ -643,76 +644,79 @@ This section therefore motivates the recommended value of each. A new piece of jargon improves some of these explanations: An adversary that is preventing the LoE anchor from advancing is {leashing} the victimized syncing node. -- Sgen = Scg. - Sgen cannot be greater than Scg, since forecasting wouldn't necessarily allow the headers to be validated before being counted. - Despite the authors of Ouroboros Genesis expected a smaller value would suffice, the engineers have never considered a value less than Scg. +- `Sgen = Scg`. + Sgen cannot be greater than `Scg`, since forecasting wouldn't necessarily allow the headers to be validated before being counted. + Despite the authors of Ouroboros Genesis expected a smaller value would suffice, the engineers have never considered a value less than `Scg`. If the requirements (eg no unneccesary delays) can be met while minimizing the adversary's chances, then that seems ideal. -- TDRIP = 2 milliseconds and TCAP = 5000 tokens. +- `TDRIP = 2 milliseconds` and `TCAP = 5000 tokens`. A peer withholding promised headers would therefore be disconnected within at most 10 seconds. - If the adversary were leashing with a relatively-dense chain, they might be able to extend that to (TCAP + ~4×Kcp)×TDRIP = ~27.28 seconds by earning and spending tokens during the leash. - This could happen at most once per adversary, which the HAA bounds at Valency - 1. - In total, that's at most ~15 minutes of total delay tolerated by the LoP while the node is being leashed. + If the adversary were leashing with a relatively-dense chain, they might be able to extend that to +``` + (TCAP + ~4×Kcp)×TDRIP = ~27.28 seconds +``` +by earning and spending tokens during the leash. + This could happen at most once per adversary, which the HAA bounds at `Valency - 1`. In total, that's at most ~15 minutes of total delay tolerated by the LoP while the node is being leashed. While the node isn't being leashed, it's making progress. - Especially with modern Cardano blocks, 2ms is much faster than the typical time to fetch and validate a block. + Especially with modern Cardano blocks, `2ms` is much faster than the typical time to fetch and validate a block. Thus an adversary cannot protract the sync at all while satisfying the LoP on average. - If the LoP is spuriously disconnecting from honest nodes unacceptably often, then TCAP could be increased. + If the LoP is spuriously disconnecting from honest nodes unacceptably often, then `TCAP` could be increased. The duration for which an adversary could potentially leash the syncing node increases somewhat proportionally, but that's a less severe risk than the syncing node eclipsing itself. -- GddRateLimit ~ 1 Hz. +- `GddRateLimit ~ 1 Hz`. When the GDD is eventually triggered, the peer is disconnected from, so an extra delay on the order of seconds seems harmless. - The HistoricityCutoff parameter establishes a reasonable window in which an adversary could attempt to abuse this inattentiveness of the GDD by serving a leashing chain for 999 milliseconds and then serving of non-leashing chain for 1 millisecond, for example, and getting miraculously lucky with the thread scheduling etc. + The `HistoricityCutoff` parameter establishes a reasonable window in which an adversary could attempt to abuse this inattentiveness of the GDD by serving a leashing chain for 999 milliseconds and then serving of non-leashing chain for 1 millisecond, for example, and getting miraculously lucky with the thread scheduling etc. However, the LoP ultimately bounds how long that game could persist. -- MaxCaughtUpAge = 20 minutes. +- `MaxCaughtUpAge = 20 minutes`. There is a tension in this value. - Too low and outages that are inevitable in global public interconnects could cause the entire Cardano network to return to PreSyncing embarassingly often. - Prediction Network Solutions has advised that tolerating outages up to 20 minutes without cycling suffices for due diligence. +If this value is too low, outages that are inevitable in global public interconnects could cause the entire Cardano network to return to PreSyncing embarassingly often. +[Predictable Network Solutions](https://www.pnsol.com/) has advised that tolerating outages of up to 20 minutes without cycling suffices for due diligence. - Too high, on the other hand, and a node might fall out of sync with the honest network without re-enabling the defenses of Ouroboros Genesis. - It is assumed that a node that missed out on just 20 minutes of honest chain growth is not a significantly higher risk of selecting more than Kcp blocks of an adversarial chain than is a properly caught-up node. - Because the Cardano chain grows by Kcp blocks in about 12 hours, that's only false if the adversary was already very close to creating a private chain that's longer than the honest chain, ie violating Praos Common Prefix. +If this value is too high, on the other hand, and a node might fall out of sync with the honest network without re-enabling the defenses of Ouroboros Genesis. + It is assumed that a node that missed out on just 20 minutes of honest chain growth is not a significantly higher risk of selecting more than `Kcp` blocks of an adversarial chain than is a properly caught-up node. + Because the Cardano chain grows by `Kcp` blocks in about 12 hours, that's only false if the adversary was already very close to creating a private chain that's longer than the honest chain, ie violating [Praos Common Prefix](TODO-ref). - It is worth remarking that this MaxCaughtUpAge mechanism is not intended to detect and/or escape from eclipses. + It is worth remarking that this `MaxCaughtUpAge` mechanism is not intended to detect and/or escape from eclipses. The primary anticipated trigger is a user re-opening their laptop lid, for example. -- HistoricityCutoff = 36+1 hours. - This value must be greater than Scg of the Cardano chain's current era, which is 36 hours, and will remain so for the foreseeable future. - It seems very unlikely that the community will increase the upper bound on settlement time, but if they did, then HistoricityCutoff would need to increase accordingly. +- `HistoricityCutoff = 36+1 hours`. + This value must be greater than `Scg` of the Cardano chain's current era, which is 36 hours, and will remain so for the foreseeable future. + It seems very unlikely that the community will increase the upper bound on settlement time, but if they did, then `HistoricityCutoff` would need to increase accordingly. The extra hour is to eliminate corner cases/risks/etc — eg 10 minutes would probably suffice just as well. - The primary cost of increasing HistoricityCutoff is that an adversarial peer could remove themselves from the CSJ optimization, thereby forcing the victim to sync every header younger that HistoricityCutoff from them as well as from the Dynamo. - Thus, the potential cost of HistoricityCutoff is proportional to the number of adversarial peers, which is allowed in the definition of Sync Liveness. + The primary cost of increasing `HistoricityCutoff` is that an adversarial peer could remove themselves from the CSJ optimization, thereby forcing the victim to sync every header younger that `HistoricityCutoff` from them as well as from the Dynamo. + Thus, the potential cost of `HistoricityCutoff` is proportional to the number of adversarial peers, which is allowed in the definition of Sync Liveness. -- MinJumpSlots = 2×Kcp. - Similar to Sgen, this parameter must not be greater than the smallest Scg of any era the node will be syncing. - However, unlike Sgen, Lightweight Checkpointing cannot be used to remove eras from consideration. - Thus, the recommended value of 2×Kcp arises from the Byron era's Scg, since it's the smallest of any era. +- `MinJumpSlots = 2×Kcp`. + Similar to `Sgen`, this parameter must not be greater than the smallest `Scg` of any era the node will be syncing. + However, unlike `Sgen`, Lightweight Checkpointing cannot be used to remove eras from consideration. + Thus, the recommended value of `2×Kcp` arises from the Byron era's `Scg`, since it's the smallest of any era. - If it's actually Scg, then just before each jump, DBF will have no choice except the Dynamo, since it'll be the only one serving headers. - Note that the Dynamo can't validate the header that's Scg after its previous jump until the syncing node actually _selects_ that previous jump point. + If it's actually `Scg`, then just before each jump, DBF will have no choice except the Dynamo, since it'll be the only one serving headers. + Note that the Dynamo can't validate the header that's `Scg` after its previous jump until the syncing node actually _selects_ that previous jump point. Hence the next jump point won't be in the forecast range until the node has selected (and therefore fetched) the entire header chain of each Jumper. -- BlockFetchGracePeriod = 10 seconds. +- `BlockFetchGracePeriod = 10 seconds`. If the node chooses to fetch blocks from an adversarial peer, it could simply refuse to send them. In that case, the syncing node would give up on them after BlockFetchGracePeriod, and try a different peer. Once DBF finds an HAA-satisfying peer, however, the node will not be delayed again until it's almost caught-up, since that's when the node could learn of a longer chain that the HAA-satisfying peer might not yet have (ie a short fork or new growth). - Thus the practical worst-case delay via the vector is likely at most several instances of BlockFetchGracePeriod × (Valency - 1), which is almost certainly less than an hour. + Thus the practical worst-case delay via the vector is likely at most several instances of `BlockFetchGracePeriod × (Valency - 1)`, which is almost certainly less than an hour. There is a noteworthy corner case. The entire DBF design is predicated on the assumption that the syncing node can fetch blocks from an HAA-satisfying peer faster than it can validate them. - This is a generally reasonable assumption but could be violated by a node that has a terrible network connection and/or extremely strong compute hardware. - In that case, the node would sync as many blocks from the HAA-satisfying peer as it can in 10 seconds, before being forced to give its adversarial peers an opportunity to abuse BlockFetchGracePeriod. + This is a generally reasonable assumption but could be violated by a node that has a exceptionally bad network connection and/or extremely strong compute hardware. + In that case, the node would sync as many blocks from the HAA-satisfying peer as it can in 10 seconds, before being forced to give its adversarial peers an opportunity to abuse `BlockFetchGracePeriod`. It would be possibly starved in 10 second increments until it finds another HAA-satisfying peer, which would then last for another 10 seconds. Thus its duty cycle would still be proportional to the ratio of adverarial peers. (CSJ would also become unusually inefficient here, since the Dynamo is being rotated so often, many headers will be downloaded multiple times.) - In practice, this corner case is most likely to manifest as a node with a terrible network connection syncing even more slowly than it already would, which seems like a fair exception to the Sync Liveness requirement. + In practice, this corner case is most likely to manifest as a node with a exceptionally bad network connection syncing even more slowly than it already would, which seems like a fair exception to the Sync Liveness requirement. -- DbfRateLimit = 25 Hz. - The DBF logic is relatively expensive to execute, since its intersecting/comparing/etc full chains from each peer (which typically contain ~4×Kcp = 8640 blocks). +- `DbfRateLimit = 25 Hz`. + The DBF logic is relatively expensive to execute, since its intersecting/comparing/etc full chains from each peer (which typically contain around `4×Kcp = 8640 blocks`). However, the average block tends to take tens of milliseconds to validate. Because BlockFetch requestes are both pipelined and batched, it is unnecessary to analyze them every time a block arrives. Thus several iterations per second seems sufficient, and benchmarks have shown it leads to neglible overhead. @@ -738,9 +742,9 @@ Thus this design ignores the past via Lightweight Checkpointing and ignores the If the future does end up changing Scg, for example, that bridge will need to be crossed then. For example, perhaps the GDD will need to be aware of the HFC's era transitions and some how accomodate GDD windows that involve more than one era. -Other parameters such as MaxCaughtUpAge and HistoricityCutoff have this same caveat as Sgen. +Other parameters such as MaxCaughtUpAge and `HistoricityCutoff` have this same caveat as Sgen. -One caveat: MaxCaughtUpAge and HistoricityCutoff are indeed constants in the implementation, but Sgen is actually implemented to vary as the chain transitions eras. +One caveat: MaxCaughtUpAge and `HistoricityCutoff` are indeed constants in the implementation, but Sgen is actually implemented to vary as the chain transitions eras. This is technically more complicated than necessary, superseding this specification, due to the planned use of Lightweight Checkpointing to prevent alternate Byron and Transitional Praos histories. The extra flexibility may prove useful on testnets, eg. From c1fa8f386036d67b6d44fc9e6efc78cb97f33ed9 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 23 Jul 2025 12:19:33 +0200 Subject: [PATCH 45/52] Incorporate second round of minor edits to the Genesis Design section --- .../contents/explanation/genesis-design.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index 02b3094ff4..d86b8408f4 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -753,7 +753,7 @@ The extra flexibility may prove useful on testnets, eg. No reasonable amount of offline testing could achieve the stress testing that a feature will endure when first released (as _experimental_). The basic recommendation for deployment is therefore a staged approach, where the default remains the Bootstrap Peers but configuration can opt-in to using Genesis instead. Staged releases are common practice for new Cardano features, and Genesis is no exception. -There are a bevy of new flags in the node's `config.yaml` file, most notably the `EnableGenesis` Boolean and the `LowLevelGenesisOptions` tree. +There are plenty of new flags in the node's `config.yaml` file, most notably the `EnableGenesis` Boolean and the `LowLevelGenesisOptions` tree. Full node wallets such as Daedalus will also need a means to update their Genesis snapshot config files and to opt-in to Genesis as an experimental feature. @@ -762,7 +762,7 @@ Such a snapshot will need to be somehow regularly produced, certified, and distr A stale snapshot is not necessarily useful; the threshold is beyond the scope of the Genesis implementation. Additionally, the SDET team should be able to catch fundamental regressions via a scenario in which a very slow upstream peer serves a denser chain while a very fast peer serves a less dense alternative chain. -The denser chain needs to have at least k blocks after the intersection, and the syncing node must select the denser chain in order for the test to pass. +The denser chain needs to have at least `k` blocks after the intersection, and the syncing node must select the denser chain in order for the test to pass. The [`immdb-server`](https://github.com/IntersectMBO/ouroboros-consensus/blob/main/ouroboros-consensus-cardano/app/immdb-server.hs) tool will be useful. The Genesis feature is intended to supercede the Bootstrap Peers method. @@ -774,15 +774,15 @@ Either the logic for using Bootstrap Peers could be retained despite the introdu The following additional work on Genesis is suggested, as priorities and resources permit. - The HAA explicitly excludes disaster scenarios, but it is likely useful to anticipate/explore how the implementation handles disaster scenarios before they happen on mainnet, especially violations of Chain Growth. -- As mentioned above, the engineers have always assumed Sgen = Scg. - Any such coincidence invites accidental conflations, so it will likely be useful to consider/excercise smaller Sgens, such as Sgen = 0.5×Scg. - This could result in some specifications and/or implementations being refined to invoke Scg directly instead of indirectly via Sgen, for example. +- As mentioned above, the engineers have always assumed `Sgen = Scg`. + Any such coincidence invites accidental conflations, so it will likely be useful to consider/exercise smaller `Sgens`, such as `Sgen = 0.5×Scg`. + This could result in some specifications and/or implementations being refined to invoke `Scg` directly instead of indirectly via `Sgen`, for example. - The Parameter Tuning section above characterizes the upper bound of unnecessary delay by assuming that disconnected peers are not replaced. For example, if a leashing peer were immediately replaced, it could start with a significant number of LoP tokens and pick up where its predecessor left off. A reasonable compromise would be for the Diffusion Layer to only replace peers disconnected with prejudice after a moderate delay, eg 15 minutes. If the HAA is indeed satisfied, then an extra delay when replacing peers would not introduced any extra delay to the sync. - Refine some names, such as PreObjectors being called dissenting jumpers in the code, the Devoted BlockFetch implementation not including that name, Disengaged peers incorrectly suggesting they're inactive, etc. -- Tighten the PreObjector MsgFindIntersect timeouts. +- Tighten the PreObjector `MsgFindIntersect` timeouts. The Network team advises that this is not a high priority vector, but it'd still be preferable to simply eliminate it. - The LoP and DBF are tuned based on an assumption that modern empty blocks are not particularly concentrated. For example, ~4% of the ~650000 most recent blocks were empty as of writing. @@ -800,19 +800,19 @@ The following additional work on Genesis is suggested, as priorities and resourc - Only compute the LoE anchor amongst the Ledger Peers. - Do not trigger chain selection when the LoE anchor moved backwards on a chain. - When computing the density upper bound in the GDD, we could use probabilistic argument with a sufficiently low failure probability to bound the number of the remaining slots that could be active to a value lower than the pessimistic current estimate that every slot might be active. However, the LoP guarantees that this is not necessary for liveness. -- Make MinJumpSlots dynamic such that it can vary per era (and in particular be larger in Shelley-based eras). -- Ideally a peer whose candidate fragment branches off before the ImmDB must not satisfy the HAA. +- Make `MinJumpSlots` dynamic such that it can vary per era (and in particular be larger in Shelley-based eras). +- Ideally a peer whose candidate fragment branches off before the ImmutableDB must not satisfy the HAA. Therefore, the LoE anchor intersection could exclude that candidate fragment. However, we've seen a repro where the honest peer does do that — we're currently debugging it. - In the meantime, simply treating such a peer as having the ImmDB tip as their candidate fragment tip is sound; they were ignorable because they're doomed, so we can instead just wait for them to be disconnected. + In the meantime, simply treating such a peer as having the ImmutableDB tip as their candidate fragment tip is sound; they can be ignored because they're doomed, so we can instead just wait for them to be disconnected. - Possible improvements to the LoE implementation: - - Small-ish optimizations: - - We have a special case to avoid fetching the selection's first header from disk, as it was slightly faster (see [here](https://github.com/IntersectMBO/ouroboros-consensus/pull/1118#discussion_r1613855402)). Determine whether that is still the case, and whether we want to keep it, also from a average-case=worst-case perspective. - - Perhaps we could maintain a flag that is True only if the LoE has prevented a selection since the last time the LoE advanced; we don't need trigger ChainSel when that flag is False. This would force the adversary to violate Limit on the Age of MsgAwaitReply/MsgRollBack etc in order to let LoE-advancements trigger ChainSel. + - Small optimizations: + - We have a special case to avoid fetching the selection's first header from disk, as it was slightly faster (see [here](https://github.com/IntersectMBO/ouroboros-consensus/pull/1118#discussion_r1613855402)). Determine whether that is still the case, and whether we want to keep it, also from an [average-case=worst-case](design-goals#predictable-performance) perspective. + - Perhaps we could maintain a flag that is `True` only if the LoE has prevented a selection since the last time the LoE advanced; we don't need trigger ChainSel when that flag is `False`. This would force the adversary to violate Limit on the Age of `MsgAwaitReply`/`MsgRollBack` etc to let LoE-advancements trigger ChainSel. Related idea: maybe that flag could just track whether the LoE anchor was an extension of the most recent ChainSel result? - Long-term optimization: Use a "chain selection datastructure", ie a data structure maintain a rooted tree that allows efficient inserts, advancing the root and queries of the longest chain (subject to the LoE). Also see section 24.10 in the Consensus report. - Possible improvements to CSJ: - - Skip MsgFindIntersect during jumps if the candidate fragment contains the jump point, or if the chain in the immutable db contains the jump point. + - Skip `MsgFindIntersect` during jumps if the candidate fragment contains the jump point, or if the chain in the immutable db contains the jump point. It is unclear how much this would optimize exactly though. Most of the time, jumpers jump to points that extend their candidate fragments. When a dynamo is elected, they might be asked to jump to a point behind the tip of their candidate fragment. From a4e517923855f73ed29a5730f2f073f0673d98e1 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 23 Jul 2025 12:42:17 +0200 Subject: [PATCH 46/52] Update stale note about honest peers with candidate fragments ... ... that fork before the immutable tip. --- docs/website/contents/explanation/genesis-design.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index d86b8408f4..d6e1f079c6 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -417,6 +417,8 @@ It is also important that there is only one Objector at a time, since all honest Whenever a new peer becomes the Dynamo (eg because the GDD killed the previous Dynamo), all others peers (even the Objector) forget their most recent jump offer and are reset to Jumper. The new Dynamo immediately offers a jump to all Jumpers. +Note that, CSJ can [cause](https://github.com/intersectmbo/ouroboros-consensus/blob/c1fa8f386036d67b6d44fc9e6efc78cb97f33ed9/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L318) candidate fragments to recede without a rollback. This could happen if an Objector becomes a Jumper again, we request a jump to a point `p`, and by the time they accept it, the immutable tip moves past `p`. + If an Objector or a Dynamo sends `MsgAwaitReply` or `MsgRollBack`, then it immediately becomes Disengaged. In order to prevent adversarial peers from using `MsgAwaitReply` or `MsgRollBack` in order to waste the syncing nodes bandwidth and CPU by running full ChainSync for the historical chain, CSJ also enforces a {Limit on the Age of `MsgAwaitReply`/`MsgRollBack`}. This cannot be a perfect mitigation, since it's possible that an honest peer would need to rollback a header that is at most `Scg` slots old, even though that's very unlikely. @@ -801,10 +803,6 @@ The following additional work on Genesis is suggested, as priorities and resourc - Do not trigger chain selection when the LoE anchor moved backwards on a chain. - When computing the density upper bound in the GDD, we could use probabilistic argument with a sufficiently low failure probability to bound the number of the remaining slots that could be active to a value lower than the pessimistic current estimate that every slot might be active. However, the LoP guarantees that this is not necessary for liveness. - Make `MinJumpSlots` dynamic such that it can vary per era (and in particular be larger in Shelley-based eras). -- Ideally a peer whose candidate fragment branches off before the ImmutableDB must not satisfy the HAA. - Therefore, the LoE anchor intersection could exclude that candidate fragment. - However, we've seen a repro where the honest peer does do that — we're currently debugging it. - In the meantime, simply treating such a peer as having the ImmutableDB tip as their candidate fragment tip is sound; they can be ignored because they're doomed, so we can instead just wait for them to be disconnected. - Possible improvements to the LoE implementation: - Small optimizations: - We have a special case to avoid fetching the selection's first header from disk, as it was slightly faster (see [here](https://github.com/IntersectMBO/ouroboros-consensus/pull/1118#discussion_r1613855402)). Determine whether that is still the case, and whether we want to keep it, also from an [average-case=worst-case](design-goals#predictable-performance) perspective. From e7d2b2ff5906f253de895c4057ae6f61e6257c4e Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 23 Jul 2025 12:43:13 +0200 Subject: [PATCH 47/52] Change best=worst to average=worst --- docs/website/contents/explanation/design-goals.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/website/contents/explanation/design-goals.md b/docs/website/contents/explanation/design-goals.md index 66ffdf66f7..8b9f89690e 100644 --- a/docs/website/contents/explanation/design-goals.md +++ b/docs/website/contents/explanation/design-goals.md @@ -51,7 +51,7 @@ A prime example is the Hard Fork Combinator (HFC), which enables the combination ## Predictable Performance This goal ensures that node operators can configure nodes for "normal circumstances" without the network failing during infrequent but expected events. -It aims to make node performance predictable, ensuring that the best-case scenario aligns with the worst-case scenario in terms of resource requirements—not only for security but also to maintain network stability with honest nodes. +It aims to make node performance predictable, ensuring that the average-case scenario aligns with the worst-case scenario in terms of resource requirements—not only for security but also to maintain network stability with honest nodes. ## Protection Against DoS Attacks From 67a10f34346ded15cd739b87c2cc6687e2567a2d Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Wed, 23 Jul 2025 16:19:06 +0200 Subject: [PATCH 48/52] Update "The Genesis Density Disconnection Component with CSJ" section --- .../contents/explanation/genesis-design.md | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index d6e1f079c6..f2239de5b8 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -439,14 +439,15 @@ CSJ eliminates the wasteful remote retrieval and local validation of each honest [Link to code](https://github.com/IntersectMBO/ouroboros-consensus/blob/43c1fef4631d7a00879974e785c2291175a5f0dc/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L268) -There are two possible deadlocks introduced by CSJ. -Both can be resolved by implementing additional disconnections according to Genesis density comparisons. +CSJ introduces several subtleties, which we describe in the following sections. -- Without CSJ, the GDD is always comparing each peer to the best header chain a HAA-satisfying peer can provide. +#### Adversarial Dynamo and Objector + +Without CSJ, the GDD is always comparing each peer to the best header chain a HAA-satisfying peer can provide. With CSJ, the HAA-satisfying peers might instead be dormant as PreObjectors, with the Dynamo and Objector both adversarial. There's no guarantee in that scenario that the competing header chains of the Dynamo and Objector will (eventually) include more than `Kcp` headers. - Since that is one of the plain GDD's required conjuncts, the syncing node would be stuck. + Since that is one of the GDD's requirements, the syncing node would be stuck. This state might last a very long time, violating [Sync Liveness](#sync-liveness), since the Dynamo and Objector could each send a header beyond the forecast range in order to also avoid the LoP. To prevent this attack, the GDD trigger is relaxed for the sake of CSJ. @@ -454,9 +455,11 @@ Both can be resolved by implementing additional disconnections according to Gene It's safe to make the GDD disconnect in more scenarios, as long as it will still never disconnect from an HAA-satisfying peer outside of a disaster scenario. In this case, if there has been no disaster and `P` satisfies the HAA, then Praos Chain Growth ensures `P`'s chain will have more than `Kcp` headers in the GDD window. - If this relaxed GDD were to disconnect from `P`, then `Q` must have at least as many headers as `P`, and so the plain GDD's conjunct would also have been satisfied. + If this relaxed GDD were to disconnect from `P`, then `Q` must have at least as many headers as `P`, and so the GDD condition would also have been satisfied. + +#### Only Peers' Header Chains Are Compared -- Similarly, if the HAA-satisfying peers are all dormant, then it's possible that the node's selection is simultaneously longer than every peer's header chain and also branches off from some proper prefix of the LoE anchor. +As in the previous situation, if the HAA-satisfying peers are all dormant, then it's possible that the node's selection is simultaneously longer than every peer's header chain and also branches off from some proper prefix of the LoE anchor. This is an unusual scenario, but may arise, for example, if the previous Dynamo recently disconnected (which implies it did not satisfy the HAA). In this case, the DBF logic would idle, since no peer's header chain is better than the selection — the node would not select the peers' blocks even if they did somehow arrive, since they're worse than the current selection. Moreover, deadlock is possible, since the Dynamo and Objector forecast ranges' do not necessarily include the entire GDD window. @@ -505,6 +508,13 @@ Even supposing tiebreakers, there's no guarantee that it would.) This component contributes to Sync Liveness by mitigating the discussed deadlocks, ultimately compensating for the fact that the HAA-satisfying peers might be dormant in the PreObjector state. +#### Truncation of Candidate Fragments + +With the introduction of CSJ, [candidate fragments can now be truncated](https://github.com/intersectmbo/ouroboros-consensus/blob/e7d2b2ff5906f253de895c4057ae6f61e6257c4e/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs#L318) without rollbacks, and in particular, this could lead to a situation in which a fragment is anchored before the immutable tip. +Before Genesis, only dishonest behavior could cause a rollback. +However, CSJ allows honest fragments to recede past the node's immutable tip, which could lead to GDD to dismiss valid selections. +To contemplate this scenario, GDD now defaults to treating non-intersecting fragments as empty and anchored at the immutable tip, leaving it to the ChainSync client to update the fragment. + ### The Devoted BlockFetch Component In the implementation, this component is called *BulkSync BlockFetch*. From 67636c2d1c9d0d60047ae1ce1b68d611ddf763ac Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Thu, 24 Jul 2025 13:22:48 +0200 Subject: [PATCH 49/52] Update Genesis Design to account for #1598 https://github.com/IntersectMBO/ouroboros-consensus/pull/1598 --- docs/website/contents/explanation/genesis-design.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/website/contents/explanation/genesis-design.md b/docs/website/contents/explanation/genesis-design.md index f2239de5b8..09f71901a9 100644 --- a/docs/website/contents/explanation/genesis-design.md +++ b/docs/website/contents/explanation/genesis-design.md @@ -306,8 +306,16 @@ Blocks cannot be requested until new headers are validated, which cannot happen Moreover, due to the now-invalidated invariant, ChainSel is implemented in the context of "the block that just arrived." When the LoE advances, such a block might not exist, so the new trigger for ChainSel must emulate its arrival. -Therefore, whenever the LoE changes, ChainSel is invoked once for each block in the VolatileDB that is an immediate successor to the tip of the ImmutableDB. -(This approach is identical to reprocessing the ImmutableDB tip itself, but operates only on mutable blocks.) +Therefore, whenever the LoE anchor changes, we perform chain selection for all blocks that are successors of a point on our current selection, including the anchor, while ignoring blocks that are already in our selection. +This avoids redundant evaluations and ensures that candidate chain suffixes properly intersect with their anchor. (See [#1598](https://github.com/IntersectMBO/ouroboros-consensus/pull/1598) for more details). +For example, if our current chain is `A ] B :> C :> D`, we'll perform chain selection on `E`, `G`, and `F`. + +``` +A---B---C---D + \ \ \ + \-E \ \-F + \-G---H +``` This component directly ensures [Sync Safety](#sync-safety), since the HAA ensures that the LoE anchor is on the honest chain. It is worth emphasizing that every subsequent component described below is designed for the sake of Sync Liveness and Limited Sync Load — the LoE alone suffices for Sync Safety. From 8c2809b7e4a1add54408e6797680ca543e5c7b4b Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 25 Jul 2025 12:12:47 +0200 Subject: [PATCH 50/52] Add a section briefly explaining features of the Genesis protocol This section refers to the more extensive Genesis design. --- .../explanation/consensus-protocol.md | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index d568a1519b..a03fe22f48 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -403,3 +403,41 @@ Praos provides strong security guarantees, formally proven to ensure a vanishing The Praos instances for Consensus can be found [in this module](https://github.com/intersectmbo/ouroboros-consensus/blob/50ea594c1e0c467f3d96a1d2848de5a15f792fdf/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/Praos.hs#L17). [^1]: See this paper for background on range extension. Briefly, it means that one can derive multiple independent VRF outputs from a single VRF output via hashing and domain separation. +### Genesis + +The protocols discussed so far require newcomers to rely on trusted peers to safely determine the correct blockchain state. +Without access to these trusted peers, nodes joining the network are susceptible to _long-range attacks_, where an adversary can create a private chain that forks off from the honest chain and continually extends it. +Given enough time, this private adversarial chain can eventually fork the honest chain by more than `k` blocks, even if the adversary holds less than half of the total active stake, making it impossible for the new node to roll back to the honest chain without manual intervention. + +[Genesis](https://iohk.io/en/blog/posts/2023/02/09/ouroboros-genesis-enhanced-security-in-a-dynamic-environment/) is a protocol specifically designed to prevent long-range attacks, allowing a node to bootstrap from a trusted copy of the genesis block. +This protocol directly addresses the challenge of dynamic availability, where block-producing nodes can go online and offline unpredictably, by ensuring the system remains secure and operational as long as an honest majority of active stake is maintained. + +To achieve this, Ouroboros Genesis introduces the _Density Rule_, which is applied only when syncing. +This rule dictates that a candidate blockchain is preferred over a node's currently held chain if it is "denser" (contains more blocks) in a specific window of `s` slots, anchored at the intersection point between the two competing chains. +For Cardano, `s` is typically set to `3k/f`. +This mechanism allows a syncing node to identify and switch to the honest chain, even if the block being considered is more than `k` blocks away from the chain tip, because the honest chain will consistently be denser at the point of divergence due to the honest majority. + +To prevent a syncing node from eagerly adopting a potentially adversarial chain that diverges too far from the true honest chain, we implement a Limit on Eagerness (LoE) mechanism. +This mechanism restricts the syncing node from selecting a block that is more than `k` blocks ahead of its _LoE anchor_. This anchor is set as +he intersection point of all of the node's current peers' latest header chains. + +The LoE anchor primarily advances when the common intersection point of all of a syncing node's current peers' header chains progresses forward. + +The LoE relies on the Honest Availability Assumption (HAA), which postulates that at least one honest peer is always connected and accessible, ensuring the LoE anchor remains on a valid path. + +The Genesis Density Disconnection (GDD) mechanism supports the LoE by proactively disconnecting from peers that offer "sparser" (less dense) chains, thereby helping the LoE anchor to reliably advance along the honest path. + +To prevent syncing nodes from being stalled by unresponsive or malicious peers, the Consensus layer incorporates a Limit on Patience (LoP) mechanism. +Its core purpose is to disconnect from any peer that claims to have subsequent headers on its chain but fails to send them promptly, thereby preventing a syncing node from being indefinitely stalled by a peer that is withholding data, whether intentionally (maliciously) or unintentionally (due to poor performance). + +For the LoE anchor to advance, the node needs to find sufficient common ground with its peers. The LoP, along with GDD, ensures this by disconnecting peers that are stalling progress or offering problematic (sparse) chains. + +During the node's initial synchronization, Consensus implements the ChainSync Jumping (CSJ) optimization. +In a large network, if every syncing node were to download every block header from all its connected peers, it would lead to significant redundancy and excessive load. +Honest peers would often be transmitting the same historical chain, resulting in wasteful remote retrieval and local validation of identical headers multiple times. +This creates an unnecessarily high sync load and can be a vector for resource exhaustion attacks on syncing nodes and their upstream peers. +Instead of every peer continuously sending all historical headers, CSJ orchestrates peer interactions to ensure that only necessary header data is exchanged. + +Once a node has successfully synced and is "caught up," it reverts to the behavior of a standard Ouroboros Praos node, with Genesis-specific functionalities like the Limit on Eagerness (LoE) and Genesis Density Disconnection (GDD) being disabled. + +The [Genesis paper](https://iohk.io/en/research/library/papers/ouroboros-genesis-composable-proof-of-stake-blockchains-with-dynamic-availability/) provides the formal definition of the protocol. For more details on the implementation, please refer to [this section](genesis-design). From c8a5b9c4832907667784683e8f5844b5dad2680d Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 25 Jul 2025 19:02:01 +0200 Subject: [PATCH 51/52] Add a section on managing updates --- .../contents/explanation/managing-updates.md | 66 +++++++++++++++++++ docs/website/sidebars.js | 1 + 2 files changed, 67 insertions(+) create mode 100644 docs/website/contents/explanation/managing-updates.md diff --git a/docs/website/contents/explanation/managing-updates.md b/docs/website/contents/explanation/managing-updates.md new file mode 100644 index 0000000000..c18f5be867 --- /dev/null +++ b/docs/website/contents/explanation/managing-updates.md @@ -0,0 +1,66 @@ +# Managing Updates + +The Cardano blockchain was designed to evolve, allowing for the incorporation of new functionality, research advancements, and enhancements to security and performance over time. + +Updating a blockchain system presents significantly greater challenges than a centralized one: +- Upgrades cannot be centrally enforced. All participants in a blockchain must eventually agree on the same set of rules and state, requiring meticulous coordination to prevent network partitions or 'forks'. +- Updates must take place without downtime or disruption. +- The update protocol must be engineered against adversarial behavior. +- Upgrades cannot invalidate past data (block and transactions). + +Some updates focus solely on improving the internal working of the node without changing its external behavior. These changes +do not change to external interfaces, data encoding or consensus rules. They focus on performance, efficiency, or bug fixes. These updates do not require coordination among the nodes of the network, and can be applied independently by operators upgrading their node. + +Other updates involve changes to specific configurable parameters of +the protocol that are agreed upon and enacted through on-chain +governance mechanisms. These are automatically activated in a coordinated manner, without requiring software updates. Examples include changes to the maximum block size or minimum transaction fees. + +A third type of updates, described in [this page](#queries), involve backward-incompatible changes to the communication protocols or the encoding of data types exchanged between nodes, or between a node and a client. +Updates requiring a new node-to-node (N2N) or node-to-client (N2C) version do not necessarily require that all other nodes update their software or coordinate simultaneous upgrades for basic communication. +Instead, nodes running older versions can still communicate with those running newer versions through a process version negotiation. + +The fourth kind of updates are those that introduce fundamental changes to the blockchain's core rules, leading to a hard fork. +These are often associated with the transition to a new ledger era (e.g., from Shelley to Alonzo or Babbage). +These updates modify the very consensus protocol or ledger rules that define the blockchain's state and block validity. +Unlike mere parameter changes, they can alter how blocks are produced, validated, or how the chain progresses. +Each of these major updates marks a hard fork and the transition to a new Cardano era. + +The Hard Fork Combinator[^1] (HFC) is a core component within Cardano's consensus layer that enables the seamless composition and management of these different eras into a single, logical blockchain. + +## The Hard Fork Combinator + +The Hard Fork Combinator allows different blockchain eras to be combined into a single, unified blockchain type, facilitating smooth transitions between these eras. +This design choice is fundamental to Cardano, which has evolved through several distinct eras, each with potentially different rules and parameters. + +The HFC essentially enables the sequential composition of various consensus protocols and ledgers, such as Byron (using Permissive BFT) and Conway (using Praos), into a cohesive "hybrid" chain. + +To ensure seamless era transitions, the HFC must orchestrate the complex process of moving from one blockchain era to the next, ensuring the network can continue operating despite significant changes in rules and parameters. To this end, the HFC must address several key problems. + +- Era Transitions: +The HFC is must determine when a blockchain should transition from one era to the next. + +- Ledger State Evolution: +As a system like Cardano transitions into a new era, the ledger state must be translated to comply with the ledger state format and rules of the subsequent era. +This translation is needed because each era can introduce significant alterations to the blockchain's rules and the underlying structure of its ledger state. +For instance, when transitioning from Babbage to the Conway era, several parts of the ledger state changed to enable the new on-chain governance features. + +- Translation of Data Among Eras: +Beyond the ledger state itself, the HFC must facilitate the translation and compatibility of various data types across eras. The UTxO set of the ledger state may contain transaction outputs (txouts) from later eras, which to avoid a prohibitively costly full UTxO set translations on era boundaries, must be translated on-demand. +Queries and serialization also vary era by era. + +- Perform time translations: +Translating between UTC time, slot numbers, and epoch numbers is not trivial because different eras can have different slot duration. +For example, the Byron era had 20-second slots, while all subsequent eras use one-second slots. +Consequently, time/slot conversions are dependent on the ledger state and cannot be predicted arbitrarily far into the future if the era transition is not yet known. + +The following sections describe how the HFC addresses these challenges. + +### Era Transitions + +### Ledger State Evolution + +### Data Translation + +### Time Translations + +[^1]: The recordings of Edsko de Vries' presentations at the Weekly IOG Seminar([1](https://drive.google.com/file/d/1m_jKQM_gxBm0ctLqIq9NGj5_nXPI66Su/view),[2](https://drive.google.com/file/d/1QIJ-VBlj-txB6K6E7DIEnY5TzaD89qQm/view)) provide a good introduction to the topic. diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index e16a7af774..df9a6c6e67 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -27,6 +27,7 @@ const sidebars = { 'explanation/queries', 'explanation/consensus-protocol', 'explanation/genesis-design', + 'explanation/managing-updates', ] } ], From b3f9112bd159e73f4098bfcbc8dcf4dc8ea5d510 Mon Sep 17 00:00:00 2001 From: Damian Nadales Date: Fri, 25 Jul 2025 19:02:58 +0200 Subject: [PATCH 52/52] Add a reference to LoE --- docs/website/contents/explanation/consensus-protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/website/contents/explanation/consensus-protocol.md b/docs/website/contents/explanation/consensus-protocol.md index a03fe22f48..1a00534fe4 100644 --- a/docs/website/contents/explanation/consensus-protocol.md +++ b/docs/website/contents/explanation/consensus-protocol.md @@ -293,7 +293,7 @@ However, this precondition is currently not checked [during initialization](http ### Chain selection and LoE -During the node's startup and initial chain selection phase, the `ChainDB` [explicitly prevents](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L231) selecting more than `k` blocks in maximal candidates if [LoE](TODO-ref!) (Limit on Eagerness) is enabled. +During the node's startup and initial chain selection phase, the `ChainDB` [explicitly prevents](https://github.com/intersectmbo/ouroboros-consensus/blob/fcb4615f1d40f3baa24f9f1ac69d1feaaaf7bd9f/ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/ChainDB/Impl/ChainSel.hs#L231) selecting more than `k` blocks in maximal candidates if [LoE](genesis-design#limit-on-eagerness) (Limit on Eagerness) is enabled. This precaution helps avoid accidentally adopting an adversarial chain from the `VolatileDB`, a chain that LoE would have rejected during live syncing. When a new block (or part of a fork) would extend the current chain beyond the LoE limit, it is added to the `ChainDB`'s database, but it does not immediately trigger a chain selection switch or extension.

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

hlUq7v37k^7BxOqxMm}!6>QoV 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%0D)*JSdZO7RL^@zb9_P_- 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