From 4f8de37ce3e1149748e88a12a05a4cb39facea3c Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Tue, 20 Aug 2024 22:36:08 +0200 Subject: [PATCH 01/35] Add reference for RFC2697 in bib Signed-off-by: Dscano Signed-off-by: Davide Scano --- docs/v1/references.bib | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/v1/references.bib b/docs/v1/references.bib index 4d259343..ae47c0d6 100644 --- a/docs/v1/references.bib +++ b/docs/v1/references.bib @@ -151,6 +151,11 @@ @ONLINE { RFC2698 url = "https://tools.ietf.org/html/rfc2698" } +@ONLINE { RFC2697, + title = "A Single Rate Three Color Marker", + url = "https://tools.ietf.org/html/rfc2697" +} + @ONLINE { P4MatchTypes, title = "Match types in P4", url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-match-kind-type" From 780d780bc9414dfd13730e30f26825ec588a2590 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sat, 16 Nov 2024 12:28:00 +0100 Subject: [PATCH 02/35] Switching from Madoko to AsciiDoc for P4Runtime specification Signed-off-by: Davide Scano --- .github/workflows/any-branch-uploads.yml | 2 +- .github/workflows/main-branch-uploads.yml | 2 +- .github/workflows/spec.yml | 6 +- .github/workflows/tag-uploads.yml | 2 +- docs/tools/Dockerfile.asciidoc | 20 + docs/tools/Dockerfile.madoko | 24 - docs/tools/README.md | 8 +- docs/v1/Makefile | 30 +- ...P4Runtime-Spec.mdk => P4Runtime-spec.adoc} | 2478 ++++++++--------- docs/v1/install-asciidoctor-linux.sh | 210 ++ docs/v1/resources/figs/.gitignore | 1 + ...embedded-plus-single-remote-controller.odg | Bin .../embedded-plus-two-remote-controllers.odg | Bin ...mbedded-plus-two-remote-ha-controllers.odg | Bin .../figs}/error-report.odg | Bin .../figs}/psa-metadata-translation.odg | Bin .../figs}/reference-architecture.odg | Bin .../figs}/single-embedded-controller.odg | Bin .../figs}/single-remote-controller.odg | Bin docs/v1/resources/fonts/LuxiMono/LICENSE.txt | 41 + docs/v1/resources/fonts/LuxiMono/luximb.ttf | Bin 0 -> 74076 bytes docs/v1/resources/fonts/LuxiMono/luximbi.ttf | Bin 0 -> 69872 bytes docs/v1/resources/fonts/LuxiMono/luximr.ttf | Bin 0 -> 71784 bytes docs/v1/resources/fonts/LuxiMono/luximri.ttf | Bin 0 -> 69496 bytes .../fonts/OpenSans/OpenSans-Bold.ttf | Bin 0 -> 130860 bytes .../fonts/OpenSans/OpenSans-BoldItalic.ttf | Bin 0 -> 136360 bytes .../fonts/OpenSans/OpenSans-Italic.ttf | Bin 0 -> 136604 bytes .../fonts/OpenSans/OpenSans-Regular.ttf | Bin 0 -> 130832 bytes .../resources/fonts/Utopia/LICENSE-utopia.txt | 84 + .../v1/resources/fonts/Utopia/utopia-bold.ttf | Bin 0 -> 30648 bytes .../fonts/Utopia/utopia-bolditalic.ttf | Bin 0 -> 32596 bytes .../resources/fonts/Utopia/utopia-italic.ttf | Bin 0 -> 32596 bytes .../resources/fonts/Utopia/utopia-regular.ttf | Bin 0 -> 31144 bytes docs/v1/resources/fonts/verify-font | 5 + docs/v1/resources/theme/p4-stylesheet.css | 643 +++++ docs/v1/resources/theme/p4-theme.yml | 284 ++ docs/v1/{ => resources/theme}/references.bib | 24 +- docs/v1/setup-for-ubuntu-linux.sh | 128 + 38 files changed, 2650 insertions(+), 1342 deletions(-) create mode 100644 docs/tools/Dockerfile.asciidoc delete mode 100644 docs/tools/Dockerfile.madoko rename docs/v1/{P4Runtime-Spec.mdk => P4Runtime-spec.adoc} (83%) create mode 100755 docs/v1/install-asciidoctor-linux.sh create mode 100644 docs/v1/resources/figs/.gitignore rename docs/v1/{assets => resources/figs}/embedded-plus-single-remote-controller.odg (100%) rename docs/v1/{assets => resources/figs}/embedded-plus-two-remote-controllers.odg (100%) rename docs/v1/{assets => resources/figs}/embedded-plus-two-remote-ha-controllers.odg (100%) rename docs/v1/{assets => resources/figs}/error-report.odg (100%) rename docs/v1/{assets => resources/figs}/psa-metadata-translation.odg (100%) rename docs/v1/{assets => resources/figs}/reference-architecture.odg (100%) rename docs/v1/{assets => resources/figs}/single-embedded-controller.odg (100%) rename docs/v1/{assets => resources/figs}/single-remote-controller.odg (100%) create mode 100644 docs/v1/resources/fonts/LuxiMono/LICENSE.txt create mode 100644 docs/v1/resources/fonts/LuxiMono/luximb.ttf create mode 100644 docs/v1/resources/fonts/LuxiMono/luximbi.ttf create mode 100644 docs/v1/resources/fonts/LuxiMono/luximr.ttf create mode 100644 docs/v1/resources/fonts/LuxiMono/luximri.ttf create mode 100644 docs/v1/resources/fonts/OpenSans/OpenSans-Bold.ttf create mode 100644 docs/v1/resources/fonts/OpenSans/OpenSans-BoldItalic.ttf create mode 100644 docs/v1/resources/fonts/OpenSans/OpenSans-Italic.ttf create mode 100644 docs/v1/resources/fonts/OpenSans/OpenSans-Regular.ttf create mode 100644 docs/v1/resources/fonts/Utopia/LICENSE-utopia.txt create mode 100644 docs/v1/resources/fonts/Utopia/utopia-bold.ttf create mode 100644 docs/v1/resources/fonts/Utopia/utopia-bolditalic.ttf create mode 100644 docs/v1/resources/fonts/Utopia/utopia-italic.ttf create mode 100644 docs/v1/resources/fonts/Utopia/utopia-regular.ttf create mode 100644 docs/v1/resources/fonts/verify-font create mode 100644 docs/v1/resources/theme/p4-stylesheet.css create mode 100644 docs/v1/resources/theme/p4-theme.yml rename docs/v1/{ => resources/theme}/references.bib (84%) create mode 100755 docs/v1/setup-for-ubuntu-linux.sh diff --git a/.github/workflows/any-branch-uploads.yml b/.github/workflows/any-branch-uploads.yml index 9b1483cf..a41cfc71 100644 --- a/.github/workflows/any-branch-uploads.yml +++ b/.github/workflows/any-branch-uploads.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v3 - name: Build spec run: | - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-madoko:latest make + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make ls docs/v1/build - name: Upload spec to S3 if needed if: ${{ github.actor != 'dependabot[bot]' }} diff --git a/.github/workflows/main-branch-uploads.yml b/.github/workflows/main-branch-uploads.yml index 89748253..7001733e 100644 --- a/.github/workflows/main-branch-uploads.yml +++ b/.github/workflows/main-branch-uploads.yml @@ -16,7 +16,7 @@ jobs: fetch-depth: 0 - name: Build spec run: | - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-madoko:latest make + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make ls docs/v1/build - name: Upload spec to S3 uses: jakejarvis/s3-sync-action@v0.5.1 diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index cc1983ae..7306011e 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -11,13 +11,13 @@ on: - '*-dev' jobs: - madoko-lint: + asciidoc -lint: runs-on: [ubuntu-latest] steps: - uses: actions/checkout@v3 - name: Run linter run: | - ./tools/madokolint.py docs/v1/P4Runtime-Spec.mdk + ./tools/asciidoc lint.py docs/v1/P4Runtime-Spec.adoc build-spec: runs-on: [ubuntu-latest] @@ -25,5 +25,5 @@ jobs: - uses: actions/checkout@v3 - name: Build spec run: | - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-madoko:latest make + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make ls docs/v1/build diff --git a/.github/workflows/tag-uploads.yml b/.github/workflows/tag-uploads.yml index 4495cda0..4efde883 100644 --- a/.github/workflows/tag-uploads.yml +++ b/.github/workflows/tag-uploads.yml @@ -18,7 +18,7 @@ jobs: fetch-depth: 0 - name: Build spec run: | - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-madoko:latest make + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make ls docs/v1/build - name: Upload spec to S3 uses: jakejarvis/s3-sync-action@v0.5.1 diff --git a/docs/tools/Dockerfile.asciidoc b/docs/tools/Dockerfile.asciidoc new file mode 100644 index 00000000..139fbf5e --- /dev/null +++ b/docs/tools/Dockerfile.asciidoc @@ -0,0 +1,20 @@ +FROM ruby:3.3.5 +LABEL maintainer="P4 API Working Group " +LABEL description="Dockerfile used for building the asciidoc specification" + +RUN apt-get update && \ + apt-get install -y cmake flex bison libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgdk-pixbuf-2.0-dev + +RUN gem install asciidoctor \ + gem install asciidoctor-pdf \ + gem install asciidoctor-mathematical \ + gem install asciidoctor-bibtex\ + gem install asciidoctor-lists\ + git clone https://github.com/rouge-ruby/rouge &&\ + cd rouge \ + git log -n 1 | cat \ + gem build rouge.gemspec \ + gem install rouge-4.4.0.gem + +VOLUME ["/usr/src/p4-spec"] +WORKDIR /usr/src/p4-spec diff --git a/docs/tools/Dockerfile.madoko b/docs/tools/Dockerfile.madoko deleted file mode 100644 index be73c9e3..00000000 --- a/docs/tools/Dockerfile.madoko +++ /dev/null @@ -1,24 +0,0 @@ -FROM ubuntu:16.04 -LABEL maintainer="P4 API Working Group " -LABEL description="Dockerfile used for building the Madoko specification" - -ENV PKG_DEPS software-properties-common build-essential libreoffice \ - nodejs npm texlive-full fonts-liberation - -RUN apt-get update && \ - apt-get install -y --no-install-recommends $PKG_DEPS && \ - apt-get autoremove --purge -y && \ - rm -rf /var/cache/apt/* /var/lib/apt/lists/* - -RUN npm install madoko -g && \ - ln -s /usr/bin/nodejs /usr/local/bin/node - -VOLUME ["/usr/src/p4-spec"] -WORKDIR /usr/src/p4-spec - -# add extra fonts for P4_14 look-alike -RUN mkdir -p /usr/share/fonts/truetype/UtopiaStd /usr/share/fonts/truetype/LuxiMono -COPY fonts/UtopiaStd-Regular.otf /usr/share/fonts/truetype/UtopiaStd/ -COPY fonts/luximr.ttf /usr/share/fonts/truetype/LuxiMono/ -COPY fonts/fix_helvetica.conf /etc/fonts/local.conf -RUN fc-cache -fv diff --git a/docs/tools/README.md b/docs/tools/README.md index fef843bf..c50c48e5 100644 --- a/docs/tools/README.md +++ b/docs/tools/README.md @@ -1,4 +1,4 @@ -Dockerfile.madoko is used to build a Docker image which we use to render the +Dockerfile.asciidoc is used to build a Docker image which we use to render the P4Runtime specification (HTML & PDF) in CI. The image can also be used locally to build the specification without having to worry about installing all the dependencies yourself. @@ -9,9 +9,9 @@ simply pull the image from dockerhub and don't have to worry about building the image themselves. If you are a maintainer and you need to upload a new version of the Docker image to to dockerhub, you will need the following commands: ```bash -docker build -t p4rt-madoko -f Dockerfile.madoko . -docker tag p4rt-madoko p4lang/p4rt-madoko:latest -docker push p4lang/p4rt-madoko:latest +docker build -t p4rt-asciidoc -f Dockerfile.asciidoc . +docker tag p4rt-asciidoc p4lang/p4rt-asciidoc :latest +docker push p4lang/p4rt-asciidoc :latest ``` Note that you need to have write permissions to the p4lang dockerhub repository diff --git a/docs/v1/Makefile b/docs/v1/Makefile index 1fe6c52c..2e3d99d8 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -1,21 +1,33 @@ SPEC=P4Runtime-Spec -all: html pdf build +ROUGE_STYLE=github +ROUGE_CSS=style + +all: ${SPEC}.pdf ${SPEC}.html build: mkdir -p build # Note: Brute-force image rendering; could use more precise file-by-file make rules -images: build assets/*.odg - soffice --convert-to svg --outdir build assets/*.odg > /dev/null 2>&1 - soffice --convert-to png --outdir build assets/*.odg > /dev/null 2>&1 +images: build resources/figs/*.odg + soffice --convert-to svg --outdir build resources/figs/*.odg > /dev/null 2>&1 + soffice --convert-to png --outdir build resources/figs/*.odg > /dev/null 2>&1 -html: ${SPEC}.mdk p4.json assets/* images - madoko -vv --png --odir=build ${SPEC}.mdk +${SPEC}.pdf: ${SPEC}.adoc + time asciidoctor-pdf -v \ + -a pdf-fontsdir=resources/fonts \ + -r asciidoctor-mathematical \ + -r asciidoctor-bibtex \ + -r asciidoctor-lists \ + -a rouge-style=$(ROUGE_STYLE) $< -pdf: ${SPEC}.mdk p4.json assets/* images - madoko --pdf -vv --png --odir=build $< +${SPEC}.html: ${SPEC}.adoc + time asciidoctor -v \ + -r asciidoctor-mathematical \ + -r asciidoctor-bibtex \ + -r asciidoctor-lists \ + -a rouge-css=$(ROUGE_CSS) $< clean: - ${RM} -rf build + /bin/rm -f ${SPEC}.pdf ${SPEC}.html resources/figs/stem-*.png diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-spec.adoc similarity index 83% rename from docs/v1/P4Runtime-Spec.mdk rename to docs/v1/P4Runtime-spec.adoc index c1124ed7..feb8df74 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-spec.adoc @@ -1,262 +1,89 @@ -Title : P4Runtime Specification -Title Note: version 1.5.0-dev -Title Footer: &date; -Author: The P4.org API Working Group -Heading depth: 5 -Pdf Latex: xelatex -Document Class: [11pt]article -Package: [top=1in, bottom=1.25in, left=1in, right=1in]geometry -Package: fancyhdr - -Tex Header: - \setlength{\headheight}{30pt} - \setlength{\emergencystretch}{2em} - -Bib: references.bib -Bib Search Url: - -Script: https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js -Script: bibref_no_title.js - -@if html { -body.madoko { - font-family: utopia-std, serif; -} -title,titlenote,titlefooter,authors,h1,h2,h3,h4,h5 { - font-family: helvetica, sans-serif; - font-weight: bold; -} -pre, code { - font-family: monospace; - font-size: 10pt; -} -} - -@if tex { -body.madoko { - font-family: UtopiaStd-Regular; -} -title,titlenote,titlefooter,authors { - font-family: sans-serif; - font-weight: bold; -} -pre, code { - font-family: LuxiMono; - font-size: 75%; -} -} - -Colorizer: p4 -Colorizer: proto -Colorizer: prototext -Colorizer: cpp - -.token.keyword { - font-weight: bold; -} - -@if html { -p4example { - replace: "~ Begin P4ExampleBlock&nl;\ - ````p4&nl;&source;&nl;````&nl;\ - ~ End P4ExampleBlock"; - padding:6pt; - margin-top: 6pt; - margin-bottom: 6pt; - border: solid; - background-color: #ffffdd; - border-width: 0.5pt; -} -} - -@if tex { -p4example { - replace: "~ Begin P4ExampleBlock&nl;\ - ````p4&nl;&source;&nl;````&nl;\ - ~ End P4ExampleBlock"; - breakable: true; - padding: 6pt; - margin-top: 6pt; - margin-bottom: 6pt; - border: solid; - background-color: #ffffdd; - border-width: 0.5pt; -} -} - -@if html { -pseudo { - replace: "~ Begin PseudoBlock&nl;\ - ````&nl;&source;&nl;````&nl;\ - ~ End PseudoBlock"; - padding: 6pt; - margin-top: 6pt; - margin-bottom: 6pt; - border: solid; - background-color: #e9fce9; - border-width: 0.5pt; -} -} - -@if tex { -pseudo { - replace: "~ Begin PseudoBlock&nl;\ - ````&nl;&source;&nl;````&nl;\ - ~ End PseudoBlock"; - breakable : true; - padding: 6pt; - margin-top: 6pt; - margin-bottom: 6pt; - background-color: #e9fce9; - border: solid; - border-width: 0.5pt; -} -} - -@if html { -cpp { - replace: "~ Begin CPPblock&nl;\ - ````cpp&nl;&source;&nl;````&nl;\ - ~ End CPPblock"; - border: solid; - margin-top: 6pt; - margin-bottom: 6pt; - padding: 6pt; - background-color: #e9fce9; - border-width: 0.5pt; -} -} - -@if tex { -cpp { - replace: "~ Begin CPPblock&nl;\ - ````cpp&nl;&source;&nl;````&nl;\ - ~ End CPPblock"; - breakable: true; - margin-top: 6pt; - margin-bottom: 6pt; - padding: 6pt; - background-color: #e9fce9; - border: solid; - border-width: 0.5pt; -} -} - -@if html { -proto { - replace: "~ Begin Protoblock&nl;\ - ````proto&nl;&source;&nl;````&nl;\ - ~ End Protoblock"; - border: solid; - margin-top: 6pt; - margin-bottom: 6pt; - padding: 6pt; - background-color: #e6ffff; - border-width: 0.5pt; -} -} - -@if tex { -proto { - replace: "~ Begin Protoblock&nl;\ - ````proto&nl;&source;&nl;````&nl;\ - ~ End Protoblock"; - breakable: true; - margin-top: 6pt; - margin-bottom: 6pt; - padding: 6pt; - background-color: #e6ffff; - border: solid; - border-width: 0.5pt; -} -} - -@if html { -prototext { - replace: "~ Begin Prototextblock&nl;\ - ````prototext&nl;&source;&nl;````&nl;\ - ~ End Prototextblock"; - border: solid; - margin-top: 6pt; - margin-bottom: 6pt; - padding: 6pt; - background-color: #e6ffff; - border-width: 0.5pt; -} -} - -@if tex { -prototext { - replace: "~ Begin Prototextblock&nl;\ - ````prototext&nl;&source;&nl;````&nl;\ - ~ End Prototextblock"; - breakable: true; - margin-top: 6pt; - margin-bottom: 6pt; - padding: 6pt; - background-color: #e6ffff; - border: solid; - border-width: 0.5pt; -} -} - -[TITLE] - -~ Begin Abstract += P4Runtime Specification : The P4.org API Working Group +:doctype: book +:revnumber: version 1.5.0-dev +:imagesdir: resources/figs +:font-size: 10 +:sectnums: 5 +:sectnumlevels: 5 +:toc: macro +:toc-title: Contents +:toclevels: 5 +:toc: left +:!chapter-signifier: +:xrefstyle: short +:stem: latexmath +:pdf-themesdir: resources/theme/ +:pdf-theme: p4-theme.yml +:stylesdir: resources/theme/ +:stylesheet: p4-stylesheet.css +:source-highlighter: rouge +:bibtex-file: resources/theme/references.bib +:bibtex-order: appearance +:bibtex-style: ieee +:listing-caption: Listing + + +[abstract] +.Abstract P4 is a language for programming the data plane of network devices. The P4Runtime API is a control plane specification for controlling the data plane elements of a device defined or described by a P4 program. This document provides a precise definition of the P4Runtime API. The target audience for this document includes developers who want to write controller applications for P4 devices or switches. -~ End Abstract -[TOC] -[TOC=figures] -[TOC=tables] +toc::[] +:sectnums!: +== List of figures +list-of::image[] + +== List of tables +list-of::table[] +:sectnums: -# Introduction and Scope +[#sec-scope] +== Introduction and Scope This document is published by the *P4.org API Working Group*, which was -chartered [@P4APIWGCharter] to design and standardize vendor-independent, +chartered cite:[P4APIWGCharter] to design and standardize vendor-independent, protocol-independent runtime APIs for P4-defined or P4-described data planes. This document specifies one such API, called *P4Runtime*. It is meant to disambiguate and augment the programmatic API definition expressed in Protobuf format and available at [https://github.com/p4lang/p4runtime/tree/main/proto](https://github.com/p4lang/p4runtime/tree/main/proto). -## P4 Language Version Applicability +=== P4 Language Version Applicability P4Runtime is designed to be implemented in conjunction with the P4~16~ language version or later. P4~14~ programs should be translated into P4~16~ to be made compatible with P4Runtime. This version of P4Runtime utilizes features which are -not in P4~16~ 1.0, but were introduced in P4~16~ 1.2.4 [@P4Revisions124]. For -this version of P4Runtime, we recommend using P4~16~ 1.2.4 [@P4Revisions124]. +not in P4~16~ 1.0, but were introduced in P4~16~ 1.2.4 cite:[P4Revisions124]. For +this version of P4Runtime, we recommend using P4~16~ 1.2.4 cite:[P4Revisions124]. This version of the P4Runtime specification does not yet explicitly address compatibility with the following P4~16~ language features introduced in versions 1.2.2 or 1.2.4 of the language specification: -* Added support for generic structures [@P4Revisions122]. -* Added support for additional enumeration types [@P4Revisions122]. -* Added support for 0-width bitstrings and varbits [@P4Revisions122]. +* Added support for generic structures cite:[P4Revisions122]. +* Added support for additional enumeration types cite:[P4Revisions122]. +* Added support for 0-width bitstrings and varbits cite:[P4Revisions122]. * Clarified restrictions for parameters with default values - [@P4Revisions124]. + cite:[P4Revisions124]. * Allow ranges to be specified by serializable enums - [@P4Revisions124]. -* Added `list` type [@P4Revisions124]. + cite:[P4Revisions124]. +* Added `list` type cite:[P4Revisions124]. * Clarified behavior of table with no `key` property, or if its list - of keys is empty [@P4Revisions124]. + of keys is empty cite:[P4Revisions124]. -## In Scope +=== In Scope This specification document defines the *semantics* of *P4Runtime* messages, whose syntax is defined in Protobuf format. The following are in scope of P4Runtime: * Runtime control of P4 built-in objects (tables and Value Sets) and Portable - Switch Architecture (PSA) [@PSA] externs (⪚ Counters, Meters, Action + Switch Architecture (PSA) cite:[PSA] externs (e.g. Counters, Meters, Action Profiles, ...). We recommend that this version of P4Runtime be used with targets that are compliant with PSA version 1.1.0. * Runtime control of architecture-specific (non-PSA) externs, through an @@ -277,7 +104,7 @@ The following are in the scope of this specification document: * Detailed description of the API semantics. * Requirements for conformant implementations of the API. -## Not In Scope +=== Not In Scope The following are not in scope of P4Runtime: @@ -286,8 +113,8 @@ The following are not in scope of P4Runtime: outside of the P4 language and are thus not covered by P4Runtime. Efforts are underway to standardize the control of these via gNMI and gNOI APIs, using description models defined and maintained by the OpenConfig project - [@OpenConfig]. An open source implementation of these APIs is also in progress - as part of the Stratum project [@Stratum]. + cite:[OpenConfig]. An open source implementation of these APIs is also in progress + as part of the Stratum project cite:[Stratum]. * Protobuf message definitions for runtime control of non-PSA externs. While P4Runtime includes an extension mechanism to support additional P4 architectures, it does not define the syntax or semantics of any additional @@ -296,17 +123,18 @@ The following are not in scope of P4Runtime: The following are not in scope of this specification document: * Description of the P4 programming language; it is assumed that the reader is - already familiar with P4~16~ [@P4Spec]. + already familiar with P4~16~ cite:[P4Spec]. * Descriptions of gRPC and Protobuf files in general. -* Controller [role](#sec-arbitration-role-config) definition (for partition of +* Controller xref:sec-arbitration-role-config[role] definition (for partition of P4 entities); the P4.org API Working Group may publish a companion document in the future describing one possible role definition scheme. -# Terms and Definitions +[#sec-terms-definitions] +== Terms and Definitions * arbitration : Refers to the process through which P4Runtime ensures that at any given - time, there is a single primary controller (&ie; a client with write access) + time, there is a single primary controller (i.e. a client with write access) for a given role. Also referred to as "client arbitration". * client : The gRPC client is the software entity which controls the P4 target or @@ -323,7 +151,7 @@ The following are not in scope of this specification document: any other architecture). * gRPC : gRPC Remote Procedure Calls, an open-source client-server RPC framework. See - [@gRPC]. + cite:[gRPC]. * HA : High-Availability. Refers to a redundancy architecture. * Instrumentation @@ -345,9 +173,9 @@ The following are not in scope of this specification document: : Abbreviation for P4Runtime. * Protobuf (Protocol Buffers) : The wire serialization format for P4Runtime. Protobuf version 3 (proto3) is - used to define the P4Runtime interface. See [@Proto]. + used to define the P4Runtime interface. See cite:[Proto]. * PSA - : Portable Switch Architecture [@PSA]; a target architecture that describes + : Portable Switch Architecture cite:[PSA]; a target architecture that describes common capabilities of network switch devices that process and forward packets across multiple interface ports. * RPC @@ -386,9 +214,10 @@ The following are not in scope of this specification document: : Uniform Resource Identifier; a string of characters designed for unambiguous identification of resources. -# Reference Architecture { #sec-reference-architecture} +[#sec-reference-architecture] +== Reference Architecture -Figure [#fig-reference-architecture] represents the P4Runtime Reference +Figure <<#fig-reference-architecture>> represents the P4Runtime Reference Architecture. The device or target to be controlled is at the bottom, and one or more controllers is shown at the top. P4Runtime only grants write access to a single primary controller for each read/write entity. A role defines a grouping @@ -402,15 +231,15 @@ may refer to one or more controllers. The P4Runtime API defines the messages and semantics of the interface between the client(s) and the server. The API is specified by the p4runtime.proto Protobuf file, which is available on GitHub as part of the standard -[@P4RuntimeRepo]. It may be compiled via protoc --- the Protobuf compiler --- +cite:[P4RuntimeRepo]. It may be compiled via protoc --- the Protobuf compiler --- to produce both client and server implementation stubs in a variety of languages. It is the responsibility of target implementers to instrument the server. Reference implementations of P4 targets supporting P4Runtime, as well as sample -clients, may be available on the p4lang/PI GitHub repository [@PIRepo]. A future +clients, may be available on the p4lang/PI GitHub repository cite:[PIRepo]. A future goal may be to produce a reference gRPC server which can be instrumented in a -generic way, ⪚ via callbacks, thus reducing the burden of implementing +generic way, e.g. via callbacks, thus reducing the burden of implementing P4Runtime. The controller can access the P4 entities which are declared in the P4Info @@ -423,15 +252,12 @@ installing and running the compiled P4 program output, which is included in the metadata. Furthermore, the controller can query the target for the `ForwardingPipelineConfig` to retrieve the device config and the P4Info. +.P4Runtime Reference Architecture. +[#fig-reference-architecture] +image::reference-architecture.png[] -~ Figure { #fig-reference-architecture; \ -caption: "P4Runtime Reference Architecture." } -![reference-architecture] -~ -[reference-architecture]: build/reference-architecture.[svg,png] \ -{ height: 7cm; page-align: here } -## P4Runtime Service Implementation +=== P4Runtime Service Implementation The P4Runtime API is implemented by a program that runs a gRPC server which binds an implementation of auto-generated P4Runtime Service interface. This @@ -441,7 +267,8 @@ P4Runtime service. Servers should allow users to override the default port using a configuration file or flag when starting the server. Uses of other port numbers as the default should be discontinued. -### Security concerns +[#sec-security-concerns] +==== Security concerns Appropriate measures and security best practices must be in place to protect the P4Runtime server and client, and the communication channel between the two. @@ -452,7 +279,8 @@ man-in-the-middle attacks between the server and client. Mutual TLS (mTLS) may be used to facilitate the authentication of the client by the server and vice-versa. -## Idealized Workflow + +=== Idealized Workflow In the idealized workflow, a P4 source program is compiled to produce both a P4 device config and P4Info metadata. These comprise the `ForwardingPipelineConfig` @@ -478,7 +306,8 @@ controller can also query the `ForwardingPipelineConfig` from the target via the configuration from a running device to synchronize the controller to its current state. -## P4 as a Behavioral Description Language { #sec-p4-as-behavioral-description-language} +[#sec-p4-as-behavioral-description-language] +=== P4 as a Behavioral Description Language P4 can be considered a behavioral description of a switching device which may or may not execute "P4" natively. There is no requirement that a P4 compiler be @@ -505,13 +334,14 @@ message as well as the embedded `doc` fields. Nevertheless, a P4 program which describes the pipeline is ideally available. The contents of the P4Info file will be described in later sections. -## Alternative Workflows +=== Alternative Workflows Given the notions above concerning P4 code as behavioral description and P4Info as API metadata, some other workflows are possible. The scenarios below are just examples and actual situations may vary. -### P4 Source Available, Compiled into P4Info but not Compiled into P4 Device Config +[#sec-p4-source-available] +==== P4 Source Available, Compiled into P4Info but not Compiled into P4 Device Config In this situation, P4 source code is available mainly as a behavioral model and compiled to produce P4Info, but it is not compiled to produce the @@ -520,7 +350,8 @@ means to implement the P4 source code's intentions. The P4 code, if available, can be studied to understand the pipeline, and the P4Info can be used to implement the control plane. -### No P4 Source Available, P4Info Available +[#sec-no-p4-source-available] +==== No P4 Source Available, P4Info Available In this situation, P4Info is available but no P4 source is available for any number of reasons, the most likely of which are: @@ -531,12 +362,13 @@ number of reasons, the most likely of which are: 2. The target was not implemented using P4 code to begin with, although it still obeys the control plane API specified in the P4Info. -As discussed in Section [#sec-p4-as-behavioral-description-language], in the +As discussed in Section <<#sec-p4-as-behavioral-description-language>>, in the absence of a P4 program describing the data plane behavior, the detailed knowledge required to write correct control plane code must come from other -sources, ⪚ documentation. +sources, e.g. documentation. -### Partial P4Info and P4 Source are Available +[#sec-partial-p4info] +==== Partial P4Info and P4 Source are Available In this situation, a subset of the target's pipeline configuration is exposed as P4 source code and P4Info. The complete device behavior might be expressed as a @@ -545,13 +377,15 @@ limits API access to only certain functions and behaviors. The hidden functions and APIs might be available to select users who would have access to the complete P4Info and possibly P4 source code. -### P4Info Role-Based Subsets +[#sec-p4info-role] +==== P4Info Role-Based Subsets In this situation, P4Info is selectively packaged into role-based subsets to allow some controllers access to just the functionality required. For example, a controller may only need read access to statistics counters and nothing more. -## P4Runtime State Across Restarts { #sec-restarts } +[#sec-restarts] +=== P4Runtime State Across Restarts All targets support full restarts, where all forwarding state is reset and the P4Runtime server starts with a clean state. Some targets may also support @@ -559,18 +393,18 @@ In-Service Software Upgrade (ISSU), where the software on the target can be restarted while traffic is being forwarded. In this case, the P4Runtime server may have the ability to access information from memory before the upgrade. -# Controller Use-cases +[#sec-controller] +== Controller Use-cases P4Runtime allows for more than one controller. The mechanisms and semantics are -described in a later -[section](#sec-client-arbitration-and-controller-replication). Here we +described in a later<<#sec-client-arbitration-and-controller-replication>>. Here we present a number of use-cases. Each use-case highlights a particular aspect of P4Runtime's flexibility and is not intended to be exhaustive. Real-world use-cases may combine various techniques and be more complex. -## Single Embedded Controller +=== Single Embedded Controller -Figure [#fig-single-embedded-controller] shows perhaps the simplest use-case. A +Figure <<#fig-single-embedded-controller>> shows perhaps the simplest use-case. A device or target has an embedded controller which communicates to an on-board switch via P4Runtime. This might be appropriate for an embedded appliance which is not intended for SDN use-cases. @@ -580,30 +414,27 @@ architectures typically feature multiple processes communicating with some sort of IPC (Inter-Process Communications). P4Runtime is thus both an ideal RPC and an IPC. -~ Figure { #fig-single-embedded-controller; \ -caption: "Use-Case: Single Embedded Controller" } -![single-embedded-controller] -~ -[single-embedded-controller]: build/single-embedded-controller.[svg,png] \ -{ height: 6cm; page-align: forcehere } -## Single Remote Controller +.Use-Case: Single Embedded Controller +[#fig-single-embedded-controller] +image::single-embedded-controller.png[] + + +=== Single Remote Controller -Figure [#fig-single-remote-controller] shows a single remote Controller in +Figure <> shows a single remote Controller in charge of the P4 target. In this use-case, the device has no control of the pipeline, it just hosts the server. While this is possible, it is probably more practical to have a hybrid use-case as described in subsequent sections. -~ Figure { #fig-single-remote-controller; \ -caption: "Use-Case: Single Remote Controller" } -![single-remote-controller] -~ -[single-remote-controller]: build/single-remote-controller.[svg,png] \ -{ height: 7cm; page-align: forcehere } +.Use-Case: Use-Case: Single Remote Controller +[#fig-single-remote-controller] +image::single-embedded-controller.png[] -## Embedded + Single Remote Controller -Figure [#fig-embedded-plus-single-remote-controller] illustrates the use-case of +=== Embedded + Single Remote Controller + +Figure <> illustrates the use-case of an embedded controller plus a single remote controller. Both controllers are clients of the single server. The embedded controller is in charge of one set of P4 entities plus the pipeline configuration. The remote controller is in charge @@ -614,52 +445,40 @@ For example, to minimize round-trip times (RTT) it might make sense for the embedded controller to manage the contents of a fast-failover table. The remote controller might manage the contents of routing tables. -~ Figure { #fig-embedded-plus-single-remote-controller; \ -caption: "Use-Case: Embedded Plus Single Remote Controller" } -![embedded-plus-single-remote-controller] -~ -[embedded-plus-single-remote-controller]: \ -build/embedded-plus-single-remote-controller.[svg,png] \ -{ height: 7cm; page-align: forcehere } +.Use-Case: Use-Case: Embedded Plus Single Remote Controller +[#fig-embedded-plus-single-remote-controller] +image::embedded-plus-single-remote-controller.png[] -## Embedded + Two Remote Controllers +=== Embedded + Two Remote Controllers -Figure [#fig-embedded-plus-two-remote-controllers] illustrates the case of an +Figure <> illustrates the case of an embedded controller similar to the previous use-case, and two remote controllers. One of the remote controllers is responsible for some entities, -⪚ routing tables, and the other remote controller is responsible for other +e.g. routing tables, and the other remote controller is responsible for other entities, perhaps statistics tables. Role-based access divides the ownership. -~ Figure { #fig-embedded-plus-two-remote-controllers; \ -caption: "Use-Case: Embedded Plus Two Remote Controllers" } -![embedded-plus-two-remote-controllers] -~ -[embedded-plus-two-remote-controllers]: \ -build/embedded-plus-two-remote-controllers.[svg,png] \ -{ height: 7cm; page-align: forcehere } +.Use-Case: Embedded Plus Two Remote Controllers +[#fig-embedded-plus-two-remote-controllers] +image::embedded-plus-two-remote-controllers.png[] -## Embedded Controller + Two High-Availability Remote Controllers +=== Embedded Controller + Two High-Availability Remote Controllers -Figure [#fig-embedded-plus-two-remote-ha-controllers] illustrates a single -embedded controller plus two remote controllers in an active-standby (&ie; +Figure <> illustrates a single +embedded controller plus two remote controllers in an active-standby (i.e. primary-backup) HA (High-Availability) configuration. Controller #1 is the active controller and is in charge of some entities. If it fails, Controller #2 takes over and manages the tables formerly owned by Controller #1. The mechanics of HA architectures are beyond the scope of this document, but the P4Runtime role-based client arbitration scheme supports it. -~ Figure { #fig-embedded-plus-two-remote-ha-controllers; \ -caption: "Use-Case: Embedded Plus Two Remote High-Availability Controllers" } -![embedded-plus-two-remote-ha-controllers] -~ -[embedded-plus-two-remote-ha-controllers]: \ -build/embedded-plus-two-remote-ha-controllers.[svg,png] \ -{ height: 7cm; page-align: forcehere } +.Use-Case: Embedded Plus Two Remote High-Availability Controllers +[#fig-embedded-plus-two-remote-ha-controllers] +image::embedded-plus-two-remote-controllers.png[] -# Client Arbitration and Controller Replication {\ - #sec-client-arbitration-and-controller-replication} +[#sec-client-arbitration-and-controller-replication] +== Client Arbitration and Controller Replication -The P4Runtime interface allows multiple clients (&ie; controllers) to be +The P4Runtime interface allows multiple clients (i.e. controllers) to be connected to the P4Runtime server running on the device at the same time for the following reasons: @@ -667,7 +486,7 @@ following reasons: non-overlapping, "roles" (or "realms") and should be able to push forwarding entities simultaneously. The control plane can be partitioned into multiple roles and each role will have a set of controllers, one of which is the - primary and the rest are backups. Role definition, &ie; how P4 entities get + primary and the rest are backups. Role definition, i.e. how P4 entities get assigned to each role, is **out-of-scope** of this document. 2. Redundancy and fault tolerance: Supporting multiple controllers allows having @@ -680,7 +499,7 @@ To support multiple controllers, P4Runtime uses the streaming channel (available via `StreamChannel` RPC) for session management. The workflow is described as follows: -* Each controller instance (⪚ a controller process) can participate in one or +* Each controller instance (e.g. a controller process) can participate in one or more roles. For each (`device_id`, `role`), the controller receives an `election_id`. This `election_id` can be the same for different roles and/or devices, as long as the tuple (`device_id`, `role`, `election_id`) is @@ -694,7 +513,7 @@ follows: for the same (`device_id`, `role`) values. A connection between a controller instance and a device id --- which involves a persistent `StreamChannel` --- can be referred to as a P4Runtime client. - + Note that the P4Runtime server does not assign a `role` or `election_id` to any controller. It is up to an arbitration mechanism outside of the server to decide on the controller roles, and the `election_id` values used for each @@ -720,18 +539,17 @@ follows: not populated by the controller. This field is populated by the P4Runtime server when it sends a response back to the client, as explained below. - * **Streaming of notifications (⪚ digests) and packet I/O:** The same + * **Streaming of notifications (e.g. digests) and packet I/O:** The same streaming channel will be used for streaming notifications, as well as for packet-in and packet-out messages. Note that unless specified otherwise by the role definitions, only the primary controller can participate in - packet I/O. This feature is explained in more details in the [Packet - I/O](#sec-packet-i_o) section. + packet I/O. This feature is explained in more details in the xref:sec-packet-i_o[Packet I/O] section. Note that a controller session is only required if the controller wants to do Packet I/O, or modify the forwarding state. * Note that the stream is opened per device. In case a switching platform has - multiple devices (⪚ multi-ASIC line card) which are all controlled via the + multiple devices (e.g. multi-ASIC line card) which are all controlled via the same P4Runtime server, it is possible to have different primary clients for different devices. In this case, it is the responsibility of the P4Runtime server to keep track of the primary for each device (and role). More @@ -745,12 +563,11 @@ follows: broken. When a primary channel gets broken: 1. An advisory message is sent to all other controllers for that `device_id` - and `role`, as described in a - [later section](#sec-arbitration-notification); and + and `role`, as described in a xref:sec-arbitration-notification[later section]; and 2. The P4Runtime server will be without a primary controller, until a client sends a successful `MasterArbitrationUpdate` (as per the rules in a - [later section](#sec-arbitration-updates)). + xref:sec-arbitration-updates[later section]). * The mechanism through which the controller receives the P4Runtime server details are implementation specific and beyond the scope of this @@ -763,11 +580,11 @@ follows: prevent eavesdropping attacks. gRPC enables the server to identify which client originated each message in the -`StreamChannel` stream. For example, the C++ gRPC library [@gRPCStreamC] in +`StreamChannel` stream. For example, the C++ gRPC library cite:[gRPCStreamC] in synchronous mode enables a server process to cause a function to be called when a new client creates a `StreamChannel` stream. This function should not return until the stream is closed and the server has completed any cleanup required -when a `StreamChannel` is closed normally (or broken, ⪚ because a client +when a `StreamChannel` is closed normally (or broken, e.g. because a client process unexpectedly terminated). Thus the server can easily associate all `StreamChannel` messages received from the same client, because they are processed within the context of the same function call. @@ -779,27 +596,28 @@ read state from the data plane, among others described later. P4Runtime relies on clients identifying themselves in every write request, by including the values `device_id`, `role`, and `election_id` in all write requests. The server trusts clients not to use a triple of values other than their own in -their write requests. gRPC provides authentication methods [@gRPCAuth] that +their write requests. gRPC provides authentication methods cite:[gRPCAuth] that should be deployed to prevent untrusted clients from creating channels, and thus from making changes or even reading the state of the server. -## Default Role +=== Default Role A controller can omit the role message in `MasterArbitrationUpdate`. This implies the "default role", which corresponds to "full pipeline access". This also implies that a default role has a `role_id` of `""` (default). -If using a default role, all RPCs from the controller (⪚ `Write`) must +If using a default role, all RPCs from the controller (e.g. `Write`) must leave the `role` unset. -## Role Config { #sec-arbitration-role-config} +[#sec-arbitration-role-config] +=== Role Config The `role.config` field in the `MasterArbitrationUpdate` message sent by the -controller describes the role configuration, &ie; which operations are in the +controller describes the role configuration, i.e. which operations are in the scope of a given role. In particular, the definition of a role may include the following: * A list of P4 entities for which the controller may issue `Write` updates and - receive notification messages (⪚ `DigestList` and + receive notification messages (e.g. `DigestList` and `IdleTimeoutNotification`). * Whether the controller is able to receive `PacketIn` messages, along with a filtering mechanism based on the values of the `PacketMetadata` fields to @@ -810,7 +628,7 @@ following: An unset `role.config` implies "full pipeline access" (similar to the default role explained above). In order to support different role definition schemes, -`role.config` is defined as an `Any` Protobuf message [@ProtoAny]. Such schemes +`role.config` is defined as an `Any` Protobuf message cite:[ProtoAny]. Such schemes are out-of-scope of this document. When partitioning of the control plane is desired, the P4Runtime client(s) and server need to agree on a role definition scheme in an out-of-band fashion. @@ -818,53 +636,54 @@ scheme in an out-of-band fashion. It is the job of the P4Runtime server to remember the `role.config` for every `device_id` and `role` pair. -## Rules for Handling `MasterArbitrationUpdate` Messages Received from Controllers { #sec-arbitration-updates } +[#sec-arbitration-updates] +=== Rules for Handling `MasterArbitrationUpdate` Messages Received from Controllers -1. If the `MasterArbitrationUpdate` message is received for the first time on - this particular channel (&ie; for a newly connected controller): +. If the `MasterArbitrationUpdate` message is received for the first time on + this particular channel (i.e. for a newly connected controller): - 1. If `device_id` does not match any of the devices known to the P4Runtime + .. If `device_id` does not match any of the devices known to the P4Runtime server, the server shall terminate the stream by returning a `NOT_FOUND` error. - 2. If the `election_id` is set and is already used by another live + .. If the `election_id` is set and is already used by another live controller for the same (`device_id`, `role`), the P4Runtime server shall terminate the stream by returning an `INVALID_ARGUMENT` error. - 3. If `role.config` does not match the "out-of-band" scheme previously + .. If `role.config` does not match the "out-of-band" scheme previously agreed upon, the server must return an `INVALID_ARGUMENT` error. - 4. If the number of open streams for the given (`device_id`, `role`) + .. If the number of open streams for the given (`device_id`, `role`) exceeds the supported limit, the P4Runtime server shall terminate the stream by returning a `RESOURCE_EXHAUSTED` error. - 5. Otherwise, the controller is added to a list of live controllers for + .. Otherwise, the controller is added to a list of live controllers for the given (`device_id`, `role`) and the server remembers the controllers `device_id`, `role` and `election_id` for this gRPC channel. See below for the rules to determine if this controller becomes a primary or backup, and what notifications are sent as a consequence. -2. Otherwise, if the `MasterArbitrationUpdate` message is received from an +. Otherwise, if the `MasterArbitrationUpdate` message is received from an already live controller: - 1. If the `device_id` does not match the one already assigned to this + .. If the `device_id` does not match the one already assigned to this stream, the P4Runtime server shall terminate the stream by returning a `FAILED_PRECONDITION` error. - 2. If the `role` does not match the current `role` assigned to this + .. If the `role` does not match the current `role` assigned to this stream, the P4Runtime server shall terminate the stream by returning a `FAILED_PRECONDITION` error. If the controller wishes to change its role, it must close the current stream channel and open a new one. - 3. If `role.config` does not match the "out-of-band" scheme previously + .. If `role.config` does not match the "out-of-band" scheme previously agreed upon, the server must return an `INVALID_ARGUMENT` error. - 4. If the `election_id` is set and is already used by another live + .. If the `election_id` is set and is already used by another live controller (excluding the controller making the request) for the same (`device_id`, `role`), the P4Runtime server shall terminate the stream by returning an `INVALID_ARGUMENT` error. - 5. Otherwise, the server updates the `election_id` it has stored for this + .. Otherwise, the server updates the `election_id` it has stored for this controller. This change might cause a change in the primary client (this controller might become primary, or the controller might have downgraded itself to a backup, see below), as well as notifications being sent to @@ -876,51 +695,52 @@ the primary client. Let `election_id_past` be the highest election ID the server has ever seen for the given `device_id` and `role` (including the one of the current primary if there is one). -1. If `election_id` is greater than or equal to `election_id_past`, then the +. If `election_id` is greater than or equal to `election_id_past`, then the controller becomes, or stays, primary. The server updates the role configuration to `role.config` for the given `role`. Furthermore: - 1. If there was no primary for this `device_id` and `role` before and + .. If there was no primary for this `device_id` and `role` before and there are no `Write` requests still processing from a previous primary, then the server immediately sends an advisory notification to all controllers for this `device_id` and `role`. See the - [following section](#sec-arbitration-notification) for the format of the + xref:sec-arbitration-notification[following section] for the format of the advisory message. - 2. If there was a previous primary, including this controller, or `Write` + .. If there was a previous primary, including this controller, or `Write` requests in flight, then the server carries out the following steps (in this order): - 1. The server stops accepting `Write` requests from the previous primary + ... The server stops accepting `Write` requests from the previous primary (if there is one). At this point, the server will reject all `Write` requests with `PERMISSION_DENIED`. - 2. The server notifies all controllers other than the new primary client + ... The server notifies all controllers other than the new primary client of the change by sending the advisory notification described in - the [following section](#sec-arbitration-notification). + the xref:sec-arbitration-notification[following section]. - 3. The server will finish processing any `Write` requests that have + ... The server will finish processing any `Write` requests that have already started. If there are errors, they are reported as usual to the previous primary. If the previous primary has already disconnected, any possible errors are dropped and not reported. - 4. The server now accepts the current controller as the new primary, + ... The server now accepts the current controller as the new primary, thus accepting `Write` requests from this controller. The server - updates the highest election ID (&ie; `election_id_past`) it has seen + updates the highest election ID (i.e. `election_id_past`) it has seen for this `device_id` and `role` to `election_id`. - 5. The server notifies the new primary by sending the advisory message - described in the [following section](#sec-arbitration-notification). + ... The server notifies the new primary by sending the advisory message + described in the xref:sec-arbitration-notification[following section]. -2. Otherwise, the controller becomes a backup. If the controller was previously +. Otherwise, the controller becomes a backup. If the controller was previously a primary (and downgraded itself), then an advisory message is sent to all controllers for this `device_id` and `role`. Otherwise, the advisory message is only sent to the controller that sent the initial `MasterArbitrationUpdate`. See the - [following section](#sec-arbitration-notification) for the format of the + xref:sec-arbitration-notification[following section] for the format of the advisory message. -## Client Arbitration Notifications { #sec-arbitration-notification} +[#sec-arbitration-notification] +=== Client Arbitration Notifications For any given `device_id` and `role`, any time a new primary is chosen, a primary downgrades its status to a backup, a primary disconnects, or the @@ -935,49 +755,51 @@ primary downgrades its status to a backup, a primary disconnects, or the * `election_id` is populated as follows: - * If there has not been any primary at all, the election_id is left unset. + ** If there has not been any primary at all, the election_id is left unset. - * Otherwise, `election_id` is set to the highest election ID that the server + ** Otherwise, `election_id` is set to the highest election ID that the server has seen for this `device_id` and `role` (which is the `election_id` of the current primary if there is any). * `status` is set differently based on whether the notification is sent to the primary or a backup controller: - * If there is a primary: + ** If there is a primary: - * For the primary, `status` is OK (with `status.code` set to + *** For the primary, `status` is OK (with `status.code` set to `google.rpc.OK`). - * For all backup controllers, `status` is set to non-OK (with + *** For all backup controllers, `status` is set to non-OK (with `status.code` set to `google.rpc.ALREADY_EXISTS`). - * Otherwise, if there is no primary currently, for all backup controllers, + ** Otherwise, if there is no primary currently, for all backup controllers, `status` is set to non-OK (with `status.code` set to `google.rpc.NOT_FOUND`). Note that on primary client changes with outstanding `Write` request, some notifications might be delayed, see the -[previous section](#sec-arbitration-updates) for details. +xref:sec-arbitration-updates[previous section] for details. -# The P4Info Message +== The P4Info Message The purpose of P4Info was described under -[Reference Architecture](#sec-reference-architecture). +xref:sec-reference-architecture[Reference Architecture]. Here we describe the various components. -## Common Messages +=== Common Messages These messages appear nested within many other messages. -### `Documentation` Message +[#sec-documentation-message] +==== `Documentation` Message `Documentation` is used to carry both brief and long descriptions of something. Good content within a documentation field is extremely helpful to P4Runtime application developers. -~ Begin Proto +[source,p4] +---- message Documentation { // A brief description of something, e.g. one sentence string brief = 1; @@ -985,14 +807,16 @@ message Documentation { // Multiline is accepted. Markup format (if any) is TBD. string description = 2; } -~ End Proto +---- -### `Preamble` Message +[#sec-preamble-message] +==== `Preamble` Message The preamble serves as the "descriptor" for each entity and contains the unique instance ID, name, alias, annotations and documentation. -~ Begin Proto +[source,p4] +---- message Preamble { // ids share the same number-space; e.g. table ids cannot overlap with counter // ids. Even though this is irrelevant to this proto definition, the ids are @@ -1022,39 +846,37 @@ message Preamble { Documentation doc = 5; repeated StructuredAnnotation structured_annotations = 6; } -~ End Proto +---- -### Annotating P4 Entities with `Documentation` { #sec-annotating-p4-entities-with-documentation} +[#sec-annotating-p4-entities-with-documentation] +==== Annotating P4 Entities with `Documentation` P4 entities may be annotated using the following annotations: -~ Begin p4example +[source,p4] +---- @brief(string...) @description(string...) -~ End p4example - +---- Attaching either or both of these annotations to an entity will generate a -P4Info [Documentation Message](#sec-documentation-message), which in turn will -appear in the [Preamble Message](#sec-preamble-message) for the entity. - +P4Info xref:sec-documentation-message[Documentation Message], which in turn will +appear in the xref:sec-preamble-message[Preamble Message] for the entity. The P4 compiler should not emit `annotation` messages in the P4Info for these specific cases; instead, it should generate the `Documentation` messages as described. - The following example shows documentation annotations for a `table` entity: - -~ Begin p4example +[source,p4] +---- @brief("Match IPv4 addresses to next-hop MAC and port") @description("Match IPv4 addresses to next-hop MAC and port. \ Uses LPM match type.") table my_ipv4_lkup { ... } -~ End p4example +---- +==== Structured Annotations -### Structured Annotations - -P4 supports both unstructured and structured annotations [@P4Annotations]. +P4 supports both unstructured and structured annotations cite:[P4Annotations]. Unstructured annotations of the form `MyAnno1` or `MyAnno2(body-content)` can either be empty, or contain free-form content; anything between the pair of matched parentheses is legal. Conversely, structured annotations of the form @@ -1063,19 +885,15 @@ which allows declaring key-value lists or expression lists. Both unstructured and structured annotations may be used simultaneously on a P4 element and P4Info supports this. -The annotations described up to this point, ⪚ `@brief()`, have all been +The annotations described up to this point, e.g. `@brief()`, have all been unstructured annotations, or simply annotations. These are represented in -P4Info as `repeated string annotations` fields in the various `message`s. -Similarly, structured annotations are represented in `repeated -StructuredAnnotation structured_annotations` fields which are siblings to the -unstructured `annotations`. The `structured_annotations` contain parsed -representations of the original annotation source. This parsing includes -expression-evaluation, so the resulting P4Info may contain a simplified -replica of the original structured annotations. +P4Info as `repeated string annotations` fields in the various `messages`. +Similarly, structured annotations are represented in `repeated StructuredAnnotation structured_annotations` fields which are siblings to the unstructured `annotations`. +The `structured_annotations` contain parsed representations of the original annotation source. This parsing includes expression-evaluation, so the resulting P4Info may contain a simplified replica of the original structured annotations. The structured annotation messages are defined in p4types.proto. - -~ Begin Proto +[source,p4] +---- message KeyValuePair { string key = 1; Expression value = 2; @@ -1106,7 +924,7 @@ message StructuredAnnotation { // Optional. Location of the '@' symbol of this annotation in the source code. SourceLocation source_location = 4; } -~ End Proto +---- The `StructuredAnnotation` message can represent either a `KeyValuePairList` or an `ExpressionList`. @@ -1122,47 +940,50 @@ conversions. The following invariants hold: -1. For any P4 entity, there are no two `StructuredAnnotation`s that have the +. For any P4 entity, there are no two `StructuredAnnotation`s that have the same name. -2. Within a `KeyValuePairList`, there are no two `KeyValuePair`s that have the +. Within a `KeyValuePairList`, there are no two `KeyValuePair`s that have the same `key.` -#### Structured Annotation Examples +===== Structured Annotation Examples We omit the `source_location` field in the following examples. **Empty Expression List** - -~ Begin P4Example +[source,p4] +---- @Empty[] table t { ... } -~ End P4Example +---- The generated P4Info will contain the following. -~ Begin Proto +[source,p4] +---- structured_annotations { name: "Empty" } -~ End Proto +---- **Mixed Expression List** -~ Begin P4Example +[source,p4] +---- #define TEXT_CONST "hello" #define NUM_CONST 6 @MixedExprList[1,TEXT_CONST,true,1==2,5+NUM_CONST] table t { ... } -~ End P4Example +---- The generated P4Info will contain: -~ Begin Proto +[source,p4] +---- structured_annotations { name: "MixedExprList" expression_list { @@ -1183,20 +1004,22 @@ structured_annotations { } } } -~ End Proto +---- **kvList of Mixed Expressions** -~ Begin P4Example +[source,p4] +---- @MixedKV[label="text", my_bool=true, int_val=2*3] table t { ... } -~ End P4Example +---- The generated P4Info will contain: -~ Begin Proto +[source,p4] +---- structured_annotations { name: "MixedKV" kv_pair_list { @@ -1220,14 +1043,15 @@ structured_annotations { } } } -~ End Proto +---- -### `SourceLocation` Message +==== `SourceLocation` Message A source location describes a location within a *.p4*-source file. The `SourceLocation` message is defined in p4types.proto as follows: -~ Begin Proto +[source,p4] +---- // Location of code relative to a given source file. message SourceLocation { // Path to the source file (absolute or relative to the working directory). @@ -1236,7 +1060,7 @@ message SourceLocation { int32 line = 2; int32 column = 3; } -~ End Proto +---- We provide source locations for structured and unstructured annotations. This information may be useful when annotations require further parsing or @@ -1258,8 +1082,8 @@ be found in the following place: an optional field `SourceLocation source_location` holding its source location, if present. - -## `PkgInfo` Message +[#sec-pkginfo-message] +=== `PkgInfo` Message The `PkgInfo` message contains package-level metadata which describes the overall P4 program itself, as opposed to P4 entities. `PkgInfo` can be extracted @@ -1268,7 +1092,8 @@ library. Although all fields are technically "optional," every implementation should include as a minimum the name, version, doc and arch fields. The other fields are recommended to be included. -~ Begin Proto +[source,p4] +---- // Can be used to manage multiple P4 packages. message PkgInfo { // a definitive name for this configuration, e.g. switch.p4_v1.0 @@ -1297,10 +1122,10 @@ message PkgInfo { // reject the P4Info when used with a SetForwardingPipelineConfigRequest. PlatformProperties platform_properties = 11; } -~ End Proto - +---- where the `PlatformProperties` message looks as follows: -~ Begin Proto +[source,p4] +---- // Used to describe the required properties of the underlying platform. message PlatformProperties { // The minimum number of multicast entries (i.e. multicast groups) that the @@ -1314,14 +1139,15 @@ message PlatformProperties { // Must be no larger than `multicast_group_table_total_replicas`. int32 multicast_group_table_max_replicas_per_entry = 3; } -~ End Proto - -### Annotating P4 code with PkgInfo { #sec-annotating-p4-code-with-pkginfo} +---- +[#sec-annotating-p4-code-with-pkginfo] +==== Annotating P4 code with PkgInfo A P4 program's `PkgInfo` may be declared using one or more of the following annotations, attached to the `main` block only: -~ Begin p4example +[source,p4] +---- @pkginfo(key=value) @pkginfo(key=value[,key=value,...]) @brief("A brief description") @@ -1331,7 +1157,7 @@ description") @another_custom_annotation(...) @platform_property(key=value) @platform_property(key=value[,key=value,...]) -~ End p4example +---- Above we see several different types of annotations: @@ -1368,7 +1194,7 @@ Above we see several different types of annotations: Declaring one or more of these annotations on `main` will generate a single corresponding `PkgInfo` message in the P4Info as described in -[PkgInfo Message](#sec-pkginfo-message). +xref:sec-pkginfo-message[PkgInfo Message]. The following example shows `@pkginfo` annotations using a mixture of single and multiple key-value pairs. It also shows `@brief` and `@description` annotations, @@ -1376,7 +1202,8 @@ plus some additional custom annotations. The well-known annotations will produce corresponding fields inside the `PkgInfo` message. The custom annotations will be appended to the `PkgInfo.annotations` list. -~ Begin p4example +[source,p4] +---- @pkginfo(name="switch.p4",version="2") @pkginfo(organization="p4.org") @pkginfo(contact="info@p4.org") @@ -1388,66 +1215,63 @@ Built for data-center profile.") @my_annotation2(...) // Not well-known, this will appear in PkgInfo annotations PSA_Switch(IgPipeline, PacketReplicationEngine(), EgPipeline, BufferingQueueingEngine()) main; -~ End p4example +---- -## ID Allocation for P4Info Objects { #sec-id-allocation} +[#sec-id-allocation] +=== ID Allocation for P4Info Objects P4Info objects receive a unique ID, which is used to identify the object in P4Runtime messages. IDs are 32-bit unsigned integers which are assigned by the compiler during the P4Info generation process. IDs are assigned in such a way that it is possible based on the ID value alone to deduce the type of the object -(⪚ table, action, counter, ...). The most significant 8 bits of the ID -encodes the object type (as per Table [#tab-mapping-p4-obj-ids]). The +(e.g. table, action, counter, ...). The most significant 8 bits of the ID +encodes the object type (as per Table <<#tab-mapping-p4-obj-ids>>). The p4info.proto file includes a mapping from object type to 8-bit prefix value, encoded as an enum definition (`p4.config.v1.P4Ids.Prefix`). These values must -be used (⪚ by the compiler) when allocating IDs. The remaining 24 bits must +be used (e.g. by the compiler) when allocating IDs. The remaining 24 bits must be generated in such a way that the resulting IDs must be globally unique in -the scope of the P4Info message. Table [#tab-format-p4-obj-ids] shows the ID +the scope of the P4Info message. Table <<#tab-format-p4-obj-ids>> shows the ID layout. -~ TableFigure { #tab-mapping-p4-obj-ids; \ - caption: "Mapping of P4Info object type to 8-bit ID prefix value"; \ - page-align: forcehere; } -|--------------------|----------------------------------------------------------------------| -| 8-bit prefix value | P4 object type | -+--------------------+----------------------------------------------------------------------+ -| 0x00 | Reserved (unspecified) | -| 0x01 | Action | -| 0x02 | Table | -| 0x03 | Value-set | -| 0x04 | Controller header (header type with `@controller_header` annotation) | -| 0x05...0x0f | Reserved (for future P4 built-in objects) | -| 0x10 | Reserved (start of PSA extern types) | -| 0x11 | PSA Action profiles / selectors | -| 0x12 | PSA Counter | -| 0x13 | PSA Direct counter | -| 0x14 | PSA Meter | -| 0x15 | PSA Direct meter | -| 0x16 | PSA Register | -| 0x17 | PSA Digest | -| 0x18...0x7f | Reserved (for future PSA extern types) | -| 0x80 | Reserved (start of vendor-specific extern types) | -| 0x81...0xfe | Vendor-specific extern types | -| 0xff | Reserved (max prefix value) | -+--------------------+----------------------------------------------------------------------+ -~ - -~ TableFigure { #tab-format-p4-obj-ids; \ - caption: "Format of P4Info object IDs"; \ - breakable: true; \ - page-align: forcehere; } -|----------------------------|------------------------------------------| -| MSB bit 31 ........ bit 24 | bit 23 ....................... bit 0 LSB | -+:--------------------------:+:----------------------------------------:+ -| Object type prefix | Generated suffix (⪚ by the compiler) | -+----------------------------+------------------------------------------+ -~ +//The row 0x04 as to be fixed as is in the madoko document +.Mapping of P4Info object type to 8-bit ID prefix value +[width=90%, cols="2", grid=cols,align=center, options=header, unbreakable] +[#tab-mapping-p4-obj-ids] +|=== +| 8-bit prefix value | P4 object type +| 0x00 | Reserved (unspecified) +| 0x01 | Action +| 0x02 | Table +| 0x03 | Value-set +| 0x04 | Controller header (header type with `@controller_header` annotation) +| 0x05...0x0f | Reserved (for future P4 built-in objects) +| 0x10 | Reserved (start of PSA extern types) +| 0x11 | PSA Action profiles / selectors +| 0x12 | PSA Counter +| 0x13 | PSA Direct counter +| 0x14 | PSA Meter +| 0x15 | PSA Direct meter +| 0x16 | PSA Register +| 0x17 | PSA Digest +| 0x18...0x7f | Reserved (for future PSA extern types) +| 0x80 | Reserved (start of vendor-specific extern types) +| 0x81...0xfe | Vendor-specific extern types +| 0xff | Reserved (max prefix value) +|=== + +.Format of P4Info object IDs +[.center,cols="2",width=70%, grid=cols,align=center, options=header, unbreakable] +[#tab-format-p4-obj-ids] +|=== +| MSB bit 31 ........ bit 24 | bit 23 ....................... bit 0 LSB +| Object type prefix | Generated suffix (e.g. by the compiler) +|=== It is possible to statically set the least-significant 24 bits of the ID in the P4 program source by annotating the object with `@id` (see Table -[#tab-exmpl-p4-obj-ids]). The compiler must honor the `@id` annotations when +<<#tab-exmpl-p4-obj-ids>>). The compiler must honor the `@id` annotations when generating the P4Info message and must fail the compilation if -statically-assigned ID suffixes lead to non-unique IDs (&ie; if the P4 +statically-assigned ID suffixes lead to non-unique IDs (i.e. if the P4 programmer tries to assign the same ID suffix to two different P4 objects of the same type by annotating them with the same `@id` value). Note that it is not possible for the P4 programmer to change the value of the 8-bit ID prefix, which @@ -1458,21 +1282,18 @@ the 8-bit prefix with a non-zero value, in which case the compiler will give an error if the 8-bit prefix does not contain the correct value, or leave it as is if it is correct. -~ TableFigure { #tab-exmpl-p4-obj-ids; \ - caption: "Example of statically-assigned P4Info object IDs"; \ - page-align: forcehere; } -|--------------------------------|------------------------------------------------------------| -| P4 declaration(s) | Compiler-allocated ID(s) | -+---{width:7cm}------------------+------------------------------------------------------------+ -| `@id(0x12ab34) table tA...` | 0x0212ab34 | -+--------------------------------+------------------------------------------------------------+ -| `@id(0x12ab34) table tA...` | **Error**(same ID suffixes for 2 objects of the same type) | -| `@id(0x12ab34) table tB...` | | -+--------------------------------+------------------------------------------------------------+ -| `@id(0x12ab34) table tA...` | 0x0212ab34 | -| `@id(0x12ab34) action act1...` | 0x0112ab34 | -+--------------------------------+------------------------------------------------------------+ -~ +//The second row as to be fixed as is in the madoko document +.Example of statically-assigned P4Info object IDs +[cols="2",width=80%, align=center, options=header, unbreakable] +[#tab-exmpl-p4-obj-ids] +|=== +| P4 declaration(s) | Compiler-allocated ID(s) +| `@id(0x12ab34) table tA...` | 0x0212ab34 +| `@id(0x12ab34) table tA...` | **Error**(same ID suffixes for 2 objects of the same type) +| `@id(0x12ab34) table tB...` | +| `@id(0x12ab34) table tA...` | 0x0212ab34 +| `@id(0x12ab34) action act1...` | 0x0112ab34 +|=== The `@id` annotation can also be used to choose the ID for match fields, action parameters, and packet metadata. In this case, there is no 8-bit prefix @@ -1480,9 +1301,9 @@ and the programmer is free to choose any 32-bit number. The compiler must fail if the IDs chosen by the programmer are not unique (within a table, action, or header, respectively). -## P4Info Objects +=== P4Info Objects -### `Table` +==== `Table` Table messages are used to specify all possible match-action tables exposed to a control plane. This message contains the following fields: @@ -1493,7 +1314,7 @@ control plane. This message contains the following fields: be used to construct the lookup key matched in this table. Each `MatchField` message is defined with the following fields: - * id, the `uint32` identifier of this `MatchField`, unique in the scope of + ** id, the `uint32` identifier of this `MatchField`, unique in the scope of this table. No rules are prescribed on the way `MatchField` IDs should be allocated, as long as two `MatchField` of the same table do not have the same ID. Nonetheless, if the P4Info message was generated from a P4 @@ -1502,41 +1323,39 @@ control plane. This message contains the following fields: can either choose the IDs using the `@id` annotation, or let the compiler choose them. - * `name`, the string representing the name of this `MatchField`. + ** `name`, the string representing the name of this `MatchField`. - * `annotations`, a repeated field of strings, each one representing a P4 + ** `annotations`, a repeated field of strings, each one representing a P4 annotation associated to this match field. - * `bitwidth`, an `int32` value set to the size in bits of this match field. + ** `bitwidth`, an `int32` value set to the size in bits of this match field. - * `match`, a `oneof` describing the match behavior for this field; it can be + ** `match`, a `oneof` describing the match behavior for this field; it can be either: - * `match_type`, an enum field of type `MatchType`, which includes all + *** `match_type`, an enum field of type `MatchType`, which includes all possible PSA match kinds. - * `other_match_type`, a string field which can be used to encode any + *** `other_match_type`, a string field which can be used to encode any architecture-specific match type. - * `doc`, a `Documentation` message describing this match field. + ** `doc`, a `Documentation` message describing this match field. - * `type_name`, which indicates whether the match field has a [user-defined - type](#sec-user-defined-types); this is useful for - [translation](#sec-psa-metadata-translation). + ** `type_name`, which indicates whether the match field has a xref:sec-user-defined-types[user-defined type]; this is useful for xref:sec-psa-metadata-translation[translation]. * `action_refs`, a repeated `ActionRef` field representing the set of possible actions for this table. The `ActionRef` message is used to reference an action specified in the same P4Info message and it includes the following fields: - * `id`, the `uint32` identifier of the action. - * `scope`, an enum value which can take one of three values: + ** `id`, the `uint32` identifier of the action. + ** `scope`, an enum value which can take one of three values: `TABLE_AND_DEFAULT`, `TABLE_ONLY` and `DEFAULT_ONLY`. The `scope` of the action is determined by the use of the P4 standard annotations - `@tableonly` and `@defaultonly` [@P4ActionAnnotations]. `TABLE_ONLY` + `@tableonly` and `@defaultonly` cite:[P4ActionAnnotations]. `TABLE_ONLY` (`@tableonly` annotation) means that the action can only appear within the table, and never as the default action. `DEFAULT_ONLY` (`@defaultonly` annotation) means that the action can only be used as the default action. `TABLE_AND_DEFAULT` is the default value for the enum and means that neither annotation was used in P4 and that the action can be used both within the table and as the default action. - * `annotations`, a repeated string field, each one representing a P4 + ** `annotations`, a repeated string field, each one representing a P4 annotation associated to the action *reference* in this table. * `const_default_action_id`, if this table has a constant default action, this @@ -1550,11 +1369,10 @@ control plane. This message contains the following fields: specified arguments when the table does not match. If no explicit default action is set, the identifier of this field will default to the id of the `NoAction` action. - * `implementation_id`, the `uint32` identifier of the "implementation" of this table. 0 (default value) means that the table is a regular (direct) match table. Otherwise, this field will carry the ID of an extern instance specified - in the same P4Info message (⪚ a PSA `ActionProfile` or `ActionSelector` + in the same P4Info message (e.g. a PSA `ActionProfile` or `ActionSelector` instance). The table is then referred to as an indirect match table. * `direct_resource_ids`, repeated `uint32` identifiers for all the direct @@ -1567,17 +1385,17 @@ control plane. This message contains the following fields: * `size`, an `int64` describing the desired number of table entries that the target should support for the table. See the "Size" subsection within the "Table Properties" section of the P4~16~ language specification for details - [@P4TableProperties]. + cite:[P4TableProperties]. * `idle_timeout_behavior`, which describes the behavior of the data plane when the idle timeout of a table entry expires (see - [Idle-Timeout](#sec-idle-timeout) section). Value can be any of the + xref:sec-idle-timeout[Idle-Timeout] section). Value can be any of the `IdleTimeoutBehavior` enum: - * `NO_TIMEOUT` (default value), which means that idle timeout is not + ** `NO_TIMEOUT` (default value), which means that idle timeout is not supported for this table. - * `NOTIFY_CONTROL`, which means that the control plane should be notified of + ** `NOTIFY_CONTROL`, which means that the control plane should be notified of the expiration of a table entry by means of a notification (see section on - [Table Idle Timeout Notifications](#sec-table-idle-timeout-notification)). + xref:sec-table-idle-timeout-notification[Table Idle Timeout Notifications]). * `is_const_table`, a boolean flag indicating that the table is filled with static entries and cannot be modified by the control plane at runtime. @@ -1588,11 +1406,11 @@ control plane. This message contains the following fields: `const entries` properties, and there is at least one entry in the list. -* `other_properties`, an `Any` Protobuf message [@ProtoAny] to embed - architecture-specific table properties [@P4TableProperties] which are not part +* `other_properties`, an `Any` Protobuf message cite:[ProtoAny] to embed + architecture-specific table properties cite:[P4TableProperties] which are not part of the core P4 language or of the PSA architecture. -### `Action` +==== `Action` `Action` messages are used to specify all possible actions of all match-action tables. @@ -1605,23 +1423,22 @@ The `Action` message defines the following fields: parameters that should be provided by the control plane when inserting or modifying a table entry with this action. Each `Param` message contains the following fields: - * `id`, the `uint32` identifier of this parameter. No rules are prescribed + ** `id`, the `uint32` identifier of this parameter. No rules are prescribed on the way `Param` IDs should be allocated, as long as two `Param` of the same action do not have the same ID. Nonetheless, if the P4Info message was generated from a P4 compiler, we recommend that the IDs be assigned incrementally, starting from 1, in the same order as in the P4 action declaration. The programmer can either choose the IDs using the `@id` annotation, or let the compiler choose them. - * `name`, the string representing the name of this parameter. - * `annotations`, a repeated field of strings, each one representing a P4 + ** `name`, the string representing the name of this parameter. + ** `annotations`, a repeated field of strings, each one representing a P4 annotation associated to this parameter. - * `bitwidth`, an `int32` value set to the size in bits of this parameter. - * `doc`, which describes this parameter using a `Documentation` message. - * `type_name`, which indicates whether the action parameter has a - [user-defined type](#sec-user-defined-types); this is useful for - [translation](#sec-psa-metadata-translation). + ** `bitwidth`, an `int32` value set to the size in bits of this parameter. + ** `doc`, which describes this parameter using a `Documentation` message. + ** `type_name`, which indicates whether the action parameter has a xref:sec-user-defined-types[user-defined type]; this is useful for xref:sec-psa-metadata-translation[translation]. -### `ActionProfile` { #sec-p4info-action-profile} +[#sec-p4info-action-profile] +==== `ActionProfile` `ActionProfile` messages are used to specify all available instances of Action Profile and Action Selector PSA externs. @@ -1671,10 +1488,10 @@ The `ActionProfile` message includes the following fields: * `selector_size_semantics`, a oneof for Action Selectors that specifies how `size` and `max_group_size` are interpreted. It can be either: - * `sum_of_weights`, indicating that `size` and `max_group_size` represent + ** `sum_of_weights`, indicating that `size` and `max_group_size` represent the maximum sum of weights that can be present across all selector groups and within a single selector group respectively. - * `sum_of_members`, indicating that `size` and `max_group_size` represent + ** `sum_of_members`, indicating that `size` and `max_group_size` represent the maximum number of members that can be present across all selector groups and within a single selector group respectively, irrespective of their weight. The `SumOfMembers` message used to represent this value also @@ -1692,7 +1509,7 @@ The `ActionProfile` message includes the following fields: `sum_of_weights` for backwards compatibility in Action Selectors. In Action Profiles, this value must be unset. -### `Counter` & `DirectCounter` +=== `Counter` & `DirectCounter` `Counter` and `DirectCounter` messages are used to specify all possible instances of Counter and Direct Counter PSA externs respectively. Both externs @@ -1716,10 +1533,10 @@ Both `Counter` and `DirectCounter` messages share the following fields: configuration of this counter. Currently, the `CounterSpec` message is used to carry only the counter unit, which can be any of the `CounterSpec.Unit` enum values: - * `UNSPECIFIED`: reserved value. - * `BYTES`: byte counter. - * `PACKETS`: packet counter. - * `BOTH`: combination of both byte and packet counter. + ** `UNSPECIFIED`: reserved value. + ** `BYTES`: byte counter. + ** `PACKETS`: packet counter. + ** `BOTH`: combination of both byte and packet counter. For indexed counters, the `Counter` message contains also a `size` field, an `int64` representing the maximum number of independent values that can be held @@ -1728,12 +1545,11 @@ by this counter array. Conversely, the `DirectCounter` message contains a which this direct counter is attached. For indexed counters, the `Counter` message contains also an `index_type_name` -field, which indicates whether the index has a [user-defined -type](#sec-user-defined-types). This is useful for -[translation](#sec-psa-metadata-translation). The underlying built-in type must -be a fixed-width unsigned bitstring (`bit`). +field, which indicates whether the index has a xref:sec-user-defined-types[user-defined +type]. This is useful for xref:sec-psa-metadata-translation[translation].The underlying built-in type must be a fixed-width unsigned bitstring (`bit`). -### `Meter` & `DirectMeter` +[#sec-meter-directmeter] +=== `Meter` & `DirectMeter` `Meter` and `DirectMeter` messages are used to specify all possible instances of Meter and Direct Meter PSA externs. Both externs provide mechanism to keep data @@ -1743,7 +1559,7 @@ meters and direct meters is: * Indexed meters provide a fixed number of independent meter values, also called cells. Each cell can be accessed by the control plane using an integer index, - ⪚ to set the rate threshold. + e.g. to set the rate threshold. * Direct meters are associated to match-action tables, providing as many cells as the number of entries in the table. @@ -1757,31 +1573,32 @@ Both `Meter` and `DirectMeter` messages share the following fields: this meter extern instance. The `MeterSpec` message is used to describe the meter unit and the meter type. The meter unit can be any of the `MeterSpec.Unit` enum values: - * `UNSPECIFIED`: reserved value. - * `BYTES`, which signifies that this meter can be configured with rates + ** `UNSPECIFIED`: reserved value. + ** `BYTES`, which signifies that this meter can be configured with rates expressed in bytes/second. - * `PACKETS`, for rates expressed in packets/second. + ** `PACKETS`, for rates expressed in packets/second. The meter type can be any of the `MeterSpec.Type` enum values: * `TWO_RATE_THREE_COLOR`: This is the *Two Rate Three Color Marker* (trTCM) - defined in RFC 2698 [@RFC2698]. This is the standard P4Runtime meter type + defined in RFC 2698 cite:[RFC2698]. This is the standard P4Runtime meter type and allows meters to use two rates to split packets into three potential colors: GREEN, YELLOW, or RED. This mode is the default, but can also be set explicitly in a P4 program by adding the `@two_rate_three_color` annotation to the meter definition. For example, in a V1Model P4 program, we might define a trTCM direct meter as follows: - ~ Begin P4Example + [source,p4] + ---- @two_rate_three_color direct_meter(MeterType.bytes) my_meter; - ~ End P4Example + ---- * `SINGLE_RATE_THREE_COLOR`: This is the *Single Rate Three Color Marker* - (srTCM) defined in RFC 2697 [@RFC2697]. This allows meters to use one rate + (srTCM) defined in RFC 2697 cite:[RFC2697]. This allows meters to use one rate and an Excess Burst Size (EBS) to split packets into three potential colors: GREEN, YELLOW, or RED. In a P4 program, this mode can be set by adding the `@single_rate_three_color` annotation to the meter definition. * `SINGLE_RATE_TWO_COLOR`: This is a simplified version of RFC 2697 - [@RFC2697], and the `SINGLE_RATE_THREE_COLOR` mode above. + cite:[RFC2697], and the `SINGLE_RATE_THREE_COLOR` mode above. `SINGLE_RATE_TWO_COLOR` restricts meters to use only a single rate specified by the Committed Information Rate (CIR) and Committed Burst Size (CBS) to mark packets GREEN or RED. In a P4 program, this mode can be set @@ -1794,12 +1611,11 @@ that carries the `uint32` identifier of the table to which this direct meter is attached. For indexed meters, the `Meter` message contains also an `index_type_name` -field, which indicates whether the index has a [user-defined -type](#sec-user-defined-types). This is useful for -[translation](#sec-psa-metadata-translation). The underlying built-in type must -be a fixed-width unsigned bitstring (`bit`). +field, which indicates whether the index has a xref:sec-user-defined-types[user-defined +type]. This is useful for xref:sec-psa-metadata-translation[translation]. The underlying built-in type must be a fixed-width unsigned bitstring (`bit`). -### `ControllerPacketMetadata` { #sec-controller-packet-meta} +[#sec-controller-packet-meta] +=== `ControllerPacketMetadata` `ControllerPacketMetadata` messages are used to describe any metadata associated with controller packet-in and packet-out. A packet-in is defined as a data plane @@ -1830,29 +1646,30 @@ message contains the following fields: * `metadata`, a repeated field of type `Metadata`, where each `Metadata` message includes the following fields: - * `id`, a `uint32` identifier of this metadata. No rules are prescribed on + ** `id`, a `uint32` identifier of this metadata. No rules are prescribed on the way metadata IDs should be allocated, as long as two `Metadata` of the same `ControllerPacketMetadata` message do not have the same ID. If the P4Info message was generated from a P4 compiler, we recommend that the IDs be assigned incrementally, starting from 1, in the same order as the fields in the P4 header declaration. The P4 programmer can either choose the IDs using the `@id` annotation, or let the compiler choose them. - * `name`, a string representation of the name of this metadata. If the + ** `name`, a string representation of the name of this metadata. If the P4Info message was generated from a P4 compiler, then this field is expected to be set to the name of the P4 controller header field (see example below). - * `annotations`, a repeated field of strings, each one representing a P4 + ** `annotations`, a repeated field of strings, each one representing a P4 annotation associated to this metadata. - * `bitwidth`, an `int32` representing the size in bits of this metadata. - * `type_name`, which indicates whether the metadata field has a - [user-defined type](#sec-user-defined-types); this is useful for - [translation](#sec-psa-metadata-translation). + ** `bitwidth`, an `int32` representing the size in bits of this metadata. + ** `type_name`, which indicates whether the metadata field has a + xref:sec-user-defined-types[user-defined type]; this is useful for + xref:sec-psa-metadata-translation[translation]. As an example, consider the following snippet of a P4 program where controller headers are specified and we show the corresponding `ControllerPacketMetadata` messages. -~ Begin P4Example +[source,p4] +---- @controller_header("packet_out") header PacketOut_t { bit<9> egress_port; /* suggested port where the packet @@ -1867,8 +1684,9 @@ header PacketIn_t { bit<1> is_clone; /* 1 if this is a clone of the original packet */ } -~ End P4Example -~ Begin Prototext +---- +[source,p4] +---- controller_packet_metadata { preamble { id: 2868916615 @@ -1904,21 +1722,20 @@ controller_packet_metadata { bitwidth: 1 } } -~End Prototext - +---- Note that the use of `@controller_header` is optional for Packet I/O. The P4 program may define controller headers without this annotation and use them to encapsulate controller packets. However, in this case the client will be responsible for extracting the metadata from the serialized header in packet-in messages and for serializing the metadata when generating packet-out messages. -### `ValueSet` +=== `ValueSet` `ValueSet` messages are used to specify all possible P4 Parser Value Sets. Parser Value Sets can be used by the control plane to specify runtime matches used by the P4 parser to determine transitions from one state to another. For more information on Parser Value Sets, refer to the P4~16~ -specification [@P4ValueSets]. +specification cite:[P4ValueSets]. The `ValueSet` message defines the following fields: @@ -1939,10 +1756,10 @@ According to the P4 specification, the type parameter of a Value Set, which defines the type of the expression that can be matched against the Value Set in a parser transition, and therefore determines the format of the members that can be inserted into the Value Set by the control plane, must be one of `bit`, -`tuple`, or `struct` [@P4SelectExpr]. The rest of this section looks at all 3 of +`tuple`, or `struct` cite:[P4SelectExpr]. The rest of this section looks at all 3 of these cases and gives an example `ValueSet` message when appropriate. -1. If the type parameter is `bit`, `match` will include exactly one +. If the type parameter is `bit`, `match` will include exactly one `MatchField` message, with the following fields (if a field is omitted here, it means the default Protobuf value should be used): @@ -1950,7 +1767,8 @@ these cases and gives an example `ValueSet` message when appropriate. * `bitwidth`: set to the value of `W` * `match_type`: set to `EXACT` -~ Begin P4Example +[source,p4] +---- @id(1) value_set >(4) pvs; select (hdr.f8) { /* ... */ } ~ End P4Example @@ -1967,14 +1785,14 @@ value_sets { } size: 4 } -~ End Prototext +---- -2. If the type parameter is a `tuple`, this version of P4Runtime does not +. If the type parameter is a `tuple`, this version of P4Runtime does not support runtime programming of the Value Set. If the P4Info message is generated by a compiler, and the P4 program includes such a Value Set, the compiler must reject the program. -3. If the type parameter is a `struct`, this version of P4Runtime requires that +. If the type parameter is a `struct`, this version of P4Runtime requires that all the fields of the struct be of type `bit` (where `W` can be different for each field). Otherwise, if the P4Info message is generated by a compiler, the compiler must reject the program. If the Value Set is supported, the @@ -1991,15 +1809,14 @@ value_sets { field, except for the `@match` annotation, if present (see the `match` field below). * `bitwidth`: set to the value of `W` for the corresponding struct field. - * `type_name`, which indicates whether the struct field has a [user-defined - type](#sec-user-defined-types); this is useful for - [translation](#sec-psa-metadata-translation). + * `type_name`, which indicates whether the struct field has a xref:sec-user-defined-types[user-defined type]; this is useful for xref:sec-psa-metadata-translation[translation]. * `match`: by default `match_type` is set to `EXACT`; the P4 programmer can specify a different match type by using the `@match` annotation - [@P4SelectExpr]. + cite:[P4SelectExpr]. * `doc`: documentation associated with the struct field. -~ Begin P4Example +[source,p4] +---- struct match_t { @id(1) bit<8> f8; @id(2) @match(ternary) bit<16> f16; @@ -2007,8 +1824,9 @@ struct match_t { } @id(1) value_set(4) pvs; select ({ hdr.f8, hdr.f16, hdr.f32 }) { /* ... */ } -~ End P4Example -~ Begin Prototext +---- +[source,p4] +---- value_sets { preamble { id: 0x03000001 @@ -2034,20 +1852,20 @@ value_sets { } size: 4 } -~ End Prototext +---- In the above example, the `@id` annotations on the P4 struct fields are optional. When omitted, the compiler will choose appropriate IDs. Although not mentioned in the P4 specification, P4Runtime also supports the -cases where the Value Set type parameter is a [user-defined -type](#sec-user-defined-types) that resolves to a `bit`, or a `struct` where -one or more fields is a [user-defined type](#sec-user-defined-types) that +cases where the Value Set type parameter is a xref:sec-user-defined-types[user-defined +type]that resolves to a `bit`, or a `struct` where +one or more fields is a xref:sec-user-defined-types[user-defined type] that resolves to a `bit`. For each `MatchField` that corresponds to a user-defined -type, the `type_name` field must be set to the appropriate value (&ie; the name +type, the `type_name` field must be set to the appropriate value (i.e. the name of the type). -### `Register` +=== `Register` `Register` messages are used to specify all possible instances of Register PSA externs. @@ -2062,18 +1880,17 @@ The `Register` message defines the following fields: instance. * `type_spec`, which specifies the data type stored by this register, expressed - using a `P4DataTypeSpec` message (see section on [Representation of Arbitrary - P4 Types](#sec-representation-of-arbitrary-p4-types)). + using a `P4DataTypeSpec` message (see section on xref:sec-representation-of-arbitrary-p4-types[Representation of ArbitraryP4 Types]). * `size`, an `int32` value representing the total number of independent register cells available. * `index_type_name`, which indicates whether the register index has a - [user-defined type](#sec-user-defined-types). This is useful for - [translation](#sec-psa-metadata-translation). The underlying built-in type + xref:sec-user-defined-types[user-defined type]. This is useful for + xref:sec-psa-metadata-translation[translation]. The underlying built-in type must be a fixed-width unsigned bitstring (`bit`). -### `Digest` +=== `Digest` `Digest` messages are used to specify all possible instances of Packet Digest PSA externs. @@ -2093,10 +1910,10 @@ The `Digest` message defines the following fields: instance. * `type_spec`, which specifies the data type of an individual digest - notification using a `P4DataTypeSpec` message (see section on [Representation - of Arbitrary P4 Types](#sec-representation-of-arbitrary-p4-types)). + notification using a `P4DataTypeSpec` message (see section on xref:sec-representation-of-arbitrary-p4-types[Representation of Arbitrary P4 Types]). -### `Extern` { #sec-p4info-extern} +[#sec-p4info-extern] +=== `Extern` `Extern` messages are used to specify all extern instances across all extern types for a non-PSA architecture. This is useful when extending P4Runtime to @@ -2105,8 +1922,8 @@ to at most one `Extern` message instance in P4Info. The `Extern` message defines the following fields: * `extern_type_id`, a 32-bit unsigned integer which uniquely identifies the - extern type in the context of the architecture. It must be in the [reserved - range](#sec-id-allocation) `[0x81, 0xfe]`. Note that this value does not need + extern type in the context of the architecture. It must be in the + xref:sec-id-allocation[reserved range]`[0x81, 0xfe]`. Note that this value does not need to be unique across all architectures from all organizations, since at any given time every device managed by a P4Runtime server maps to a single P4Info message and a single architecture. @@ -2120,30 +1937,30 @@ the following fields: * `preamble`, a `Preamble` message with the ID, name, and alias of this digest instance. - * `info`, an `Any` Protobuf message [@ProtoAny] which is used to embed + * `info`, an `Any` Protobuf message cite:[ProtoAny] which is used to embed arbitrary information specific to the extern instance. Note that the underlying Protobuf message type for `info` should be the same for all instances of this extern type. That Protobuf message should be defined in a - separate architecture-specific Protobuf file. See section on [Extending - P4Runtime for non-PSA Architectures](#sec-extending-p4runtime) for more - information. + separate architecture-specific Protobuf file. See section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures] for more information. If the P4 program does not include any instance of a given extern type, the `Extern` message instance for that type should be omitted from the P4Info. -## Support for Arbitrary P4 Types with P4TypeInfo +== Support for Arbitrary P4 Types with P4TypeInfo -See section on [Representation of Arbitrary P4 -Types](#sec-representation-of-arbitrary-p4-types). +See section on xref:sec-representation-of-arbitrary-p4-types[Representation of Arbitrary P4 +Types]. -# P4 Forwarding-Pipeline Configuration { #sec-p4-fwd-pipe-config} +[#sec-p4-fwd-pipe-config] +== P4 Forwarding-Pipeline Configuration The `ForwardingPipelineConfig` captures data needed to realize a P4 forwarding-pipeline and map various IDs passed in P4Runtime entity messages. It is formally called the "Device Configuration" and sometimes also referred to as the "P4 Blob". It is defined as: -~ Begin Proto +[source,p4] +---- message ForwardingPipelineConfig { config.P4Info p4info = 1; bytes p4_device_config = 2; @@ -2152,7 +1969,7 @@ message ForwardingPipelineConfig { } Cookie cookie = 3; } -~ End Proto +---- The `p4info` field captures the P4 program metadata as described by the P4Info. This message is the output of the P4 compiler and is target-agnostic. @@ -2171,14 +1988,16 @@ When writing the config via a `SetForwardingPipelineConfig` RPC, the cookie field is optional. For this reason, the actual value is wrapped in its own message to clearly identify cases where a cookie is not present. -# General Principles for Message Formatting {#sec-message-formatting-principles} +[#sec-message-formatting-principles] +== General Principles for Message Formatting -## Default-valued Fields {#sec-default-valued-fields} +[#sec-default-valued-fields] +=== Default-valued Fields There is a subtle distinction between the treatment of default-valued scalar fields vs default-valued message fields in P4Runtime. -### Set / Unset Scalar Fields +=== Set / Unset Scalar Fields In Protobuf version 3 (*proto3*), the default value of scalar fields is `0` for numeric types such as `int32`, and the empty string `""` for string types @@ -2195,10 +2014,10 @@ In contrast to scalar fields, note that for message fields, we often do make a distinction between an unset message field vs a message field set to its default value, see the next section. -### Set / Unset Message Fields +=== Set / Unset Message Fields In Protobuf version 3 (*proto3*), the default value for a message field is -"unset" [@ProtoDefaults]. An application, such as the P4Runtime client or +"unset" cite:[ProtoDefaults]. An application, such as the P4Runtime client or server, is **able to distinguish** between an unset message field and a message field set to its default value. We often use this distinction in P4Runtime and the meaning of a message can vary based on which of its message fields are @@ -2211,7 +2030,9 @@ set, a single entry will be read. Let's look at the counter example in more details. Based on this specification document, the C++ server code which processes `CounterEntry` messages may look like this: -~ Begin CPP + +[source,c++] +---- auto *counter_entry = ... if (counter_entry->has_index()) { auto index = counter_entry->index().index(); @@ -2219,24 +2040,30 @@ if (counter_entry->has_index()) { } else { read_all_entries(counter_entry->id()); } -~ End CPP +---- -1. Reading a single counter entry at index 0 in the counter array with id +. Reading a single counter entry at index 0 in the counter array with id ``: * Here is the C++ client code: -~ Begin CPP + +[source,c++] +---- p4::v1::CounterEntry entry; entry.set_counter_id(); entry.mutable_index(); // The above line sets the index field; it is equivalent to: // auto *index = entry.mutable_index(); // index->set_index(0); -~ End CPP +---- + * Here is the corresponding Protobuf message in text format: -~ Begin Prototext + +[source,p4] +---- counter_id: index {} -~ End Prototext +---- + * **Expected behavior**: Counter entry at index 0 is read. Notice that the `index` subfield is missing under the `index` field message of `CounterEntry` in the text dump of the message. This is because the @@ -2244,40 +2071,48 @@ index {} value. Scalar fields with default values are omitted from the textual representation of Protobuf messages. -2. Reading all counter entries by leaving the `index` field unset + +. Reading all counter entries by leaving the `index` field unset * Here is the C++ client code: -~ Begin CPP + +[source,c++] +---- p4::v1::CounterEntry entry; entry.set_counter_id(); -~ End CPP +---- + * Here is the corresponding Protobuf message in text format: -~ Begin Prototext + +[source,p4] +---- counter_id: -~ End Prototext +---- + * **Expected behavior**: All counter entries for the provided counter instance are read. Notice that the `index` message field is unset (default value) and is therefore omitted from the textual representation of the message. -## Read-Write Symmetry { #sec-read-write-symmetry} +[#sec-read-write-symmetry] +== Read-Write Symmetry The reads and writes a client issues towards a server should be symmetrical and unambiguous. More specifically, if a client writes a P4 entity and then reads it back then the client should expect that the message it wrote and the message it read should match if the RPCs finished successfully (with the exception of parts -of the response known to be data plane volatile, as explained in section on -[Data plane volatile objects](#sec-data-plane-volatile-objects)). -Consider the following pseudocode as an +of the response known to be data plane volatile, as explained in section +<<#sec-data-plane-volatile-objects>>). Consider the following pseudocode as an example: -~ Begin Pseudo +[source,pseudo] +---- intended_value = value status = server.write(intended_value, p4_entity) observed_value = server.read(p4_entity) assert(intended_value == observed_value) -~ End Pseudo +---- To ensure read-write symmetry, the rest of this document tries to offer canonical representations for various data types, but this principle should be @@ -2294,12 +2129,13 @@ Protobuf repeated field be preserved. For example, the server is not required to preserve the order of the `match` fields in a `TableEntry` message. If there is a specific case for which the order is significant and / or needs to be preserved, it will be explicitly stated in this document. The -`MessageDifferencer` class [@ProtoMessageDifferencer] included in the Protobuf +`MessageDifferencer` class cite:[ProtoMessageDifferencer] included in the Protobuf C++ API supports comparing messages while treating repeated fields as sets, so that different orderings of the same elements are considered equal. This method of comparing Protobuf messages may come at a cost in performance. -### Data plane volatile objects { #sec-data-plane-volatile-objects } +[#sec-data-plane-volatile-objects] +=== Data plane volatile objects An exception to read-write symmetry are objects whose contents or fields can change by the action of the data plane alone, even if no @@ -2312,12 +2148,12 @@ modify objects in the data plane via an `Update` message. For each, a description is given of the parts of that entity that are data plane volatile. -#### ExternEntry +==== ExternEntry Data plane volatility depends upon the definition of the extern and its control plane API. -#### TableEntry +==== TableEntry For a table with a direct counter associated with it, the `counter_data` field of a `TableEntry` can be modified by the data plane when packets @@ -2327,12 +2163,12 @@ For a table with a direct meter associated with it, the `meter_counter_data` field of a `TableEntry` can be modified by the data plane when packets match the entry. -For a PSA [@PSA] table with property `psa_idle_timeout` equal to +For a PSA cite:[PSA] table with property `psa_idle_timeout` equal to `PSA_IdleTimeout_t.NOTIFY_CONTROL`, the data plane can modify the `elapsed_ns` field of a `TableEntry` when _no_ packets match the entry for an implementation-specific amount of time. -For a PNA [@PNA] table with property `pna_idle_timeout` equal to +For a PNA cite:[PNA] table with property `pna_idle_timeout` equal to `PNA_IdleTimeout_t.NOTIFY_CONTROL` or `PNA_IdleTimeout_t.AUTO_DELETE` the data plane can modify the `elapsed_ns` field of a `TableEntry` when _no_ packets cause the extern function `restart_expire_timer` to @@ -2347,67 +2183,68 @@ and the action calls the `set_entry_expire_time` extern function (or any of the other extern functions defined to have an effect similar to calling `set_entry_expire_time`). -For a PNA [@PNA] table with the property `add_on_miss` equal to `true` +For a PNA cte:[PNA] table with the property `add_on_miss` equal to `true` the data plane can insert new entries into the table without any controller's involvement. -For a PNA [@PNA] table with the property `pna_idle_timeout` equal to +For a PNA cite:[PNA] table with the property `pna_idle_timeout` equal to `PNA_IdleTimeout_t.AUTO_DELETE`, the data plane can delete existing entries from the table without any controller's involvement. -#### ActionProfileMember +==== ActionProfileMember Not data plane volatile in any architectures defined by P4.org specifications. -#### ActionProfileGroup +==== ActionProfileGroup Not data plane volatile in any architectures defined by P4.org specifications. The `watch_port` feature does affect how action selectors behave while processing packets, but this feature does not affect what a P4Runtime client sees when it reads the configuration. -#### MeterEntry +==== MeterEntry The field `counter_data` is modified by the data plane when the corresponding meter is updated in the data plane. -#### DirectMeterEntry +==== DirectMeterEntry The field `counter_data` is modified by the data plane when the corresponding meter is updated in the data plane. -#### CounterEntry +==== CounterEntry The field `data` is modified by the data plane when the corresponding counter is updated in the data plane. -#### DirectCounterEntry +==== DirectCounterEntry The field `data` is modified by the data plane when the corresponding counter is updated in the data plane. -#### PacketReplicationEngineEntry +==== PacketReplicationEngineEntry Not data plane volatile in any architectures defined by P4.org specifications. -#### ValueSetEntry +==== ValueSetEntry Not data plane volatile in any architectures defined by P4.org specifications. -#### RegisterEntry +==== RegisterEntry The field `data` can be modified by the data plane when the corresponding register entry is updated in the data plane. -#### DigestEntry +==== DigestEntry Not data plane volatile in any architectures defined by P4.org specifications. -## Bytestrings { #sec-bytestrings} +[#sec-bytestrings] +== Bytestrings P4Runtime integer values may be too large to fit in Protobuf primitive data types (32-bit and 64-bit words). The P4 language does not put any limit on the @@ -2424,7 +2261,7 @@ fits the encoded integer value. This representation achieves three goals: * It ensures that a properly encoded binary string's integer value conforms to the P4Info-specified bitwidth. -* It supports [read-write symmetry](#sec-read-write-symmetry). +* It supports xref:sec-read-write-symmetry[read-write symmetry]. * It helps facilitate non-disruptive P4 program updates. @@ -2446,9 +2283,9 @@ range. In the P4Runtime API version 1.0 (including minor version revisions), values of table key fields, action parameters, and fields in packet-in and packet-out -headers between a device and the controller (see [#sec-controller-packet-meta]), +headers between a device and the controller (see <<#sec-controller-packet-meta>>), may not be of type `int`. The rules for encoding signed values thus only -apply to messages of type `P4Data` (see [#sec-p4data-in-p4runtime-proto]). +apply to messages of type `P4Data` (see <<#sec-p4data-in-p4runtime-proto>>). For a value of type `bit`, the fewest number of bits required to represent the integer value $V > 0$ is the smallest integer $A$ such that $V \leq 2^A - @@ -2463,9 +2300,10 @@ represent, regardless of whether it is signed or unsigned. The shortest possible binary string for an integer $V$ that needs $A$ bits to represent it is computed as: -~ Begin CPP +[source,c++] +---- minimum_string_size = floor((A + 7) / 8) -~ End CPP +---- Binary strings with the byte length computed as `minimum_string_size` promote P4Runtime read-write symmetry in both client-to-server requests and @@ -2476,10 +2314,10 @@ Any additional bits in the bytes sent for an unsigned integer value (type `minimum_string_size` minimum required, they must be filled with 0. Any additional bits in the bytes sent for a signed integer value (type `int`) -must be copies of the sign bit, &ie; 0 for non-negative values, or 1 for +must be copies of the sign bit, i.e. 0 for non-negative values, or 1 for negative values. If additional bytes are transmitted above the `minimum_string_size` minimum required, they must be filled with copies of the -sign bit, &ie; 0 for non-negative values, or 0xff for negative values. In 2's +sign bit, i.e. 0 for non-negative values, or 0xff for negative values. In 2's complement representation, this is called "sign extension", and leaves the numeric value represented unchanged. @@ -2506,53 +2344,52 @@ If the string's byte length is zero, the server always rejects the string. When the server rejects a binary string due to any of the previous criteria, it returns an `OUT_OF_RANGE` error. -For all binary strings, P4Runtime uses big-endian (&ie; network) byte-order. +For all binary strings, P4Runtime uses big-endian (i.e. network) byte-order. For signed integer values (`int` P4 type), P4Runtime uses the same two's -complement bitwise representation as P4. Table [#tab-valid-bytestring-encoding] +complement bitwise representation as P4. Table <<#tab-valid-bytestring-encoding>> shows various examples of integer values that the server accepts as valid P4Runtime binary strings according to the criteria in the list above. -~ TableFigure { #tab-valid-bytestring-encoding; \ - caption: "Examples of Valid Bytestring Encoding"; } -|-----------|----------------|-------------------------|---------------------| -| P4 type | Integer value | P4Runtime binary string | Read-write symmetry | -+-----------+----------------+-------------------------+---------------------+ -| `bit<8>` | 99 (0x63) | `\x63` | yes | -| `bit<16>` | 99 (0x63) | `\x00\x63` | no | -| `bit<16>` | 99 (0x63) | `\x63` | yes | -| `bit<16>` | 12388 (0x3064) | `\x30\x64` | yes | -| `bit<16>` | 12388 (0x3064) | `\x00\x30\x64` | no | -| `bit<12>` | 99 (0x63) | `\x00\x63` | no | -| `bit<12>` | 99 (0x63) | `\x63` | yes | -| `bit<12>` | 99 (0x63) | `\x00\x00\x63` | no | -| `int<8>` | 99 (0x63) | `\x63` | yes | -| `int<8>` | -99 (-0x63) | `\x9d` | yes | -| `int<8>` | -99 (-0x63) | `\xff\x9d` | no | -| `int<12>` | -739 (-0x2e3) | `\xfd\x1d` | yes | -| `int<16>` | 0 (0x0) | `\x00\x00` | no | -| `int<16>` | 0 (0x0) | `\x00` | yes | -|-----------|----------------|-------------------------|---------------------| -~ - -Table [#tab-invalid-bytestring-encoding] shows some examples of invalid +.Examples of Valid Bytestring Encoding +[.center,cols="4",width=70%,align=center, options=header, unbreakable] +[#tab-valid-bytestring-encoding] +|=== +| P4 type | Integer value | P4Runtime binary string | Read-write symmetry +| `bit<8>` | 99 (0x63) | `\x63` | yes +| `bit<16>` | 99 (0x63) | `\x00\x63` | no +| `bit<16>` | 99 (0x63) | `\x63` | yes +| `bit<16>` | 12388 (0x3064) | `\x30\x64` | yes +| `bit<16>` | 12388 (0x3064) | `\x00\x30\x64` | no +| `bit<12>` | 99 (0x63) | `\x00\x63` | no +| `bit<12>` | 99 (0x63) | `\x63` | yes +| `bit<12>` | 99 (0x63) | `\x00\x00\x63` | no +| `int<8>` | 99 (0x63) | `\x63` | yes +| `int<8>` | -99 (-0x63) | `\x9d` | yes +| `int<8>` | -99 (-0x63) | `\xff\x9d` | no +| `int<12>` | -739 (-0x2e3) | `\xfd\x1d` | yes +| `int<16>` | 0 (0x0) | `\x00\x00` | no +| `int<16>` | 0 (0x0) | `\x00` | yes +|=== + +Table <<#tab-invalid-bytestring-encoding>> shows some examples of invalid P4Runtime binary strings: -~ TableFigure { #tab-invalid-bytestring-encoding; \ - caption: "Examples of Invalid Bytestring Encoding"; } -|-----------|-------------------------| -| P4 type | P4Runtime binary string | -+-----------+-------------------------+ -| `bit<8>` | `\x01\x63` | -| `bit<8>` | `empty string` | -| `bit<16>` | `\x01\x00\x63` | -| `bit<12>` | `\x10\x63` | -| `bit<12>` | `\x01\x00\x63` | -| `bit<12>` | `\x00\x40\x63` | -| `int<8>` | `\x00\x9d` | -| `int<12>` | `\x8d\x1d` | -| `int<16>` | `empty string` | -|-----------|-------------------------| -~ + +.Examples of Invalid Bytestring Encoding +[.center,cols="2",width=70%,align=center, options=header, unbreakable] +[#tab-invalid-bytestring-encoding] +|=== +| P4 type | P4Runtime binary string +| `bit<8>` | `\x01\x63` +| `bit<8>` | `empty string` +| `bit<16>` | `\x01\x00\x63` +| `bit<12>` | `\x10\x63` +| `bit<12>` | `\x01\x00\x63` +| `bit<12>` | `\x00\x40\x63` +| `int<8>` | `\x00\x9d` +| `int<12>` | `\x8d\x1d` +| `int<16>` | `empty string` +|=== As the preceding examples illustrate, a P4Runtime server must accept a wide assortment of possible binary string encodings for the same integer value. @@ -2564,8 +2401,7 @@ running the `bit<9>` version of the P4 program will accept requests from clients that remain on the `bit<8>` P4Runtime version. Despite the server's binary string flexibility for P4 program update support, -the client and server must both remain aware of the -[read-write symmetry](#sec-read-write-symmetry) +the client and server must both remain aware of the xref:sec-read-write-symmetry[read-write symmetry] requirements. As described earlier, read-write symmetry requires that the encoder of a P4Runtime request or reply uses the shortest strings that fit the encoded integer values. @@ -2577,41 +2413,43 @@ is provided by the P4Runtime client, the server must verify that the length of the binary string is less than the maximum length specified in the P4 program, and return an `OUT_OF_RANGE` error code otherwise. -## Representation of Arbitrary P4 Types { #sec-representation-of-arbitrary-p4-types} +[#sec-representation-of-arbitrary-p4-types] +== Representation of Arbitrary P4 Types -### Problem Statement +=== Problem Statement The P4~16~ language includes more complex types than just binary strings -[@P4ComplexTypes]. Most of these complex data types can be exposed to the +cite:[P4ComplexTypes]. Most of these complex data types can be exposed to the control plane through table key expressions, Value Set lookup expressions, Register (PSA extern type) value types, etc. Not supporting these more complex -types can be very limiting. Table [#tab-p4-type-usage] shows the different +types can be very limiting. Table <<#tab-p4-type-usage>> shows the different P4~16~ types and how they are allowed to be used, as per the P4~16~ specification. -~ TableFigure { #tab-p4-type-usage; \ - caption: "P4 Type Usage"; } -|----------------|-----------------------|--------------|-----------------| -| | Container type ||| -| |-----------------------|--------------|-----------------| -| Element type | header | header_union | struct or tuple | -+:---------------+:----------------------+:-------------+:----------------+ -| `bit` | allowed | error | allowed | -| `int` | allowed | error | allowed | -| `varbit` | allowed | error | allowed | -| `int` | error | error | error | -| `void` | error | error | error | -| `error` | error | error | allowed | -| `match_kind` | error | error | error | -| `bool` | error | error | allowed | -| `enum` | allowed[^enum_header] | error | allowed | -| `header` | error | allowed | allowed | -| header stack | error | error | allowed | -| `header_union` | error | error | allowed | -| `struct` | error | error | allowed | -| `tuple` | error | error | allowed | -|----------------|-----------------------|--------------|-----------------| -~ +//looking for a better solution because is horrible +.P4 Type Usage +[.center,cols="4",width=70%, grid=cols,align=center, options=header, unbreakable] +[#tab-p4-type-usage] +|=== +| | Container type +| | | | +| Element type | header | header_union | struct or tuple +| `bit` | allowed | error | allowed +| `int` | allowed | error | allowed +| `varbit` | allowed | error | allowed +| `int` | error | error | error +| `void` | error | error | error +| `error` | error | error | allowed +| `match_kind` | error | error | error +| `bool` | error | error | allowed +| `enum` | allowed[^enum_header] | error | allowed +| `header` | error | allowed | allowed +| header stack | error | error | allowed +| `header_union` | error | error | allowed +| `struct` | error | error | allowed +| `tuple` | error | error | allowed + +|=== [^enum_header]: an `enum` type used as a field in a `header` must specify a underlying type and representation for `enum` elements. @@ -2619,7 +2457,8 @@ specification. For example, the following P4~16~ objects involve complex types that need to be exposed in P4Runtime in order to support runtime operations on these objects. -~ Begin P4Example +[source,p4] +---- Digest, bit<8> > >() digest_complex; digest_complex.pack({ hdr.ipv4.version, hdr.ipv4.protocol }); // ... @@ -2628,7 +2467,7 @@ header_union ip_t { ipv6_t ipv6; } Register >(128) register_ip; -~ End P4Example +---- One solution would be to use only binary string (`bytes` type) in p4runtime.proto and to define a custom serialization format for complex P4~16~ @@ -2640,7 +2479,7 @@ in addition to the binary contents of this header. Rather than coming-up with a serialization format from scratch, we decided to use a Protobuf representation for all P4~16~ types. -### P4 Type Specifications in p4info.proto +=== P4 Type Specifications in p4info.proto In order for the P4Runtime client to generate correctly-formatted messages and for the P4Runtime service implementation to validate them, P4Info needs to @@ -2666,7 +2505,7 @@ a `P4ErrorTypeSpec` message. `P4DataTypeSpec` is meant to be used in P4Info, to specify the expected format of the P4-dependent values being exchanged between the P4Runtime client and server. Each `P4DataTypeSpec` message corresponds to a compile-time type in the -original P4~16~ program (⪚ the type parameter of an extern). This +original P4~16~ program (e.g. the type parameter of an extern). This compile-time type is represented as a Protobuf `oneof`, which can be: * a string representing the name of the type in case of a named type (`struct`, @@ -2688,7 +2527,8 @@ is guaranteed to be the same as the order of the members in the corresponding P4~16~ declaration. The same goes for the order of members of an `enum` (serializable or not) or members of `error`. -### `P4Data` in p4runtime.proto { #sec-p4data-in-p4runtime-proto } +[#sec-p4data-in-p4runtime-proto] +=== `P4Data` in p4runtime.proto P4Runtime uses the `P4Data` message to represent values of arbitrary types. The P4Runtime client must generate correct `P4Data` messages based on the type @@ -2710,7 +2550,7 @@ guaranteeing read-write symmetry --- by introducing the following requirements: * An invalid header is represented by a `P4Header` message where the `is_valid` field is false and the `bitstrings` repeated field is empty. - * An invalid header union (&ie; all headers in the union are invalid) is + * An invalid header union (i,e, all headers in the union are invalid) is represented by a `P4HeaderUnion` message where the `valid_header_name` is the empty string (default value for the field) and the `valid_header` is unset. @@ -2721,21 +2561,23 @@ guaranteeing read-write symmetry --- by introducing the following requirements: included in the P4Info, in the corresponding `P4HeaderStackTypeSpec` or `P4HeaderUnionStackTypeSpec` message. -### Example +=== Example Let's look at the Register example again: -~ Begin P4Example +[source,p4] +---- header_union ip_t { ipv4_t ipv4; ipv6_t ipv6; } Register >(128) register_ip; -~ End P4Example +---- Here's the corresponding entry in the P4Info message: -~ Begin Prototext +[source,proto] +---- registers { preamble { id: 369119267 @@ -2791,10 +2633,11 @@ type_info { } } } -~ End Prototext +---- Here's a `p4.WriteRequest` to set the value of `register_ip[12]`: -~ Begin Prototext +[source,proto] +---- update { type: INSERT entity { @@ -2816,13 +2659,13 @@ update { } } } -~ End Prototext +---- -### `enum`, serializable `enum` and `error` +=== `enum`, serializable `enum` and `error` P4~16~ supports 2 different classes of enumeration types: without underlying type (safe enum) and with underlying type (serializable enum or "unsafe" enum) -[@P4Enums]. For `enum` types with no underlying type --- as well as `error` --- +cite:[P4Enums]. For `enum` types with no underlying type --- as well as `error` --- there is no integer value associated with each symbolic member entry (whether assigned automatically by the compiler or directly in the P4 source). We therefore use a human-readable string in `P4Data` to represent `enum` and @@ -2836,19 +2679,20 @@ mapping between entry name and entry value. When providing serializable enum values through `P4Data`, one must use the assigned integer value (`enum_value` bytestring field). P4Runtime does not provide a way for the client to use the name --- even when the enum member has one --- instead of the value, as it makes -it easier for the server to respect the [read-write -symmetry](#sec-read-write-symmetry) principle. +it easier for the server to respect the xref:sec-read-write-symmetry[read-write +symmetry] principle. -### User-defined types { #sec-user-defined-types} +[#sec-user-defined-types] +=== User-defined types -P4~16~ enables programmers to introduce new types [@P4NewTypes]. While similar +P4~16~ enables programmers to introduce new types cite:[P4NewTypes]. While similar to `typedef`, this mechanism introduces in fact a new type, which is not a strict synonym of the original type. It is important to preserve this distinction in the P4Info message, in particular for the purposes of -[translation](#sec-psa-metadata-translation). When introducing a new type, the +xref:sec-psa-metadata-translation[translation]. When introducing a new type, the declaration can be annotated with `@p4runtime_translation` to indicate that the type exposed to the P4Runtime client is different from the original P4 type. One -important use-case is for [port numbers](#sec-translation-of-port-numbers), +important use-case is for xref:sec-translation-of-port-numbers[port numbers], whose underlying data plane representation may vary on different targets, but for which it may be convenient to present a unified representation and numbering scheme to the control plane. **The `@p4runtime_translation` annotation can only @@ -2877,14 +2721,14 @@ the following fields: * `representation`, a Protobuf `oneof` specifying how values of this type are exchanged between client and server; it can be either: - * `original_type`, if and only if no `@p4runtime_translation` annotation is + ** `original_type`, if and only if no `@p4runtime_translation` annotation is present. It specifies the underlying built-in P4 type for the user-defined type. If the underlying type used in the P4 `type` declaration is itself a user-defined type, `original_type` is obtained by "walking" the chain of - `type` declarations recursively until a built-in type (⪚ `bit`) is + `type` declarations recursively until a built-in type (e.g. `bit`) is found. - * `translated_type`, if and only if the P4 `type` declaration was annotated + ** `translated_type`, if and only if the P4 `type` declaration was annotated with `@p4runtime_translation`. It is of type `P4NewTypeTranslation`, which itself has two fields --- `uri` and either `sdn_string` or `sdn_bitwidth` ---, which map to the two input parameters to the @@ -2895,7 +2739,9 @@ the following fields: For example, an architecture --- in this case PSA --- may introduce a new type for port numbers: -~ Begin P4Example + +[source,p4] +---- // Controller refers to ports as a string, e.g. "eth0". @p4runtime_translation("p4.org/psa/v1/PortId_String_t", string) type bit<9> PortId_String_t; @@ -2907,12 +2753,13 @@ type bit<9> PortId_Bit32_t; // Same as above. @p4runtime_translation("p4.org/psa/v1/PortId_32_t", 32) type bit<9> PortId_32_t; -~ End P4Example +---- In this case, the P4Info message would include the following `P4TypeInfo` messages: -~ Begin Prototext +[source,proto] +---- type_info { new_types { key: "PortId_String_t" @@ -2948,15 +2795,15 @@ type_info { } } } -~ End Prototext +---- Note that a P4 compiler may provide a mechanism external to the language to -specify if and how a user-defined type is to be translated (⪚ through some +specify if and how a user-defined type is to be translated (e.g. through some configuration file passed on the command-line when invoking the compiler). This mechanism should take precedence over `@p4runtime_translation` to enable users to overwrite annotations included as part of the P4 architecture definition. -### Trade-off for v1.x Releases +=== Trade-off for v1.x Releases For the v1.x release ofs P4Runtime, it was decided not to replace occurrences of `bytes` with `P4Data` in the `p4.v1.FieldMatch` message, which is used to @@ -2966,12 +2813,10 @@ implementations of P4Runtime. Similarly it has been decided to keep using values. However `P4Data` is used whenever appropriate for PSA externs and we encourage the use of `P4Data` in architecture-specific extensions. -In order to support [translation](#sec-psa-metadata-translation) for action -parameters and match fields, we include a `type_name` field in -`p4.config.v1.MatchField`, `p4.config.v1.Action.Param` and -`p4.config.v1.ControllerPacketMetadata.Metadata`. In addition, the `bitwidth` -field for all of these message types must abide by the following rule when -`type_name` names a translated user-defined type: +In order to support xref:sec-psa-metadata-translation[translation]for action +parameters and match fields, we include a `type_name` field in `p4.config.v1.MatchField` , +`p4.config.v1.Action.Param` and `p4.config.v1.ControllerPacketMetadata.Metadata`. In addition, +the `bitwidth` field for all of these message types must abide by the following rule when `type_name` names a translated user-defined type: * If the *controller_type* is a fixed-width unsigned bitstring, the `bitwidth` field must be set to the bitwidth of the *controller_type*. This information @@ -2981,13 +2826,15 @@ field for all of these message types must abide by the following rule when believe that using the bitwidth of the underlying type here would be inappropriate as it would make the P4Info message target-dependent. - * Otherwise (&ie;, if the *controller_type* is a string), the `bitwidth` must + * Otherwise (i.e, if the *controller_type* is a string), the `bitwidth` must be "unset", which, in Protobuf version 3, is the same as setting the field to 0. For example, consider the following P4 snippet, which declares a P4 table matching on two expressions with translated user-defined types: -~ Begin P4Example + +[source,p4] +---- @p4runtime_translation("p4.org/psa/v1/PortId_String_t", string) type bit<9> PortId_String_t; @@ -3004,11 +2851,12 @@ table t { drop; } } -~ End P4Example +---- This table would have the following representation in the generated P4Info message: -~ Begin Prototext +[source,proto] +---- tables { preamble { id: 34728461 @@ -3035,15 +2883,17 @@ tables { } # ... } -~ End Prototext +---- -# P4 Entity Messages { #sec-p4-entity-msgs} +[#sec-p4-entity-msgs] +== P4 Entity Messages P4Runtime covers P4 entities that are either part of the P4~16~ language, or defined as PSA externs. The sections below describe the messages for each supported entity. -## `TableEntry` { #sec-table-entry} +[#sec-table-entry] +=== `TableEntry` The match-action table is the core packet-processing construct of the P4 language. It consists of a collection of table entries, or flow rules, each @@ -3081,30 +2931,28 @@ the `TableEntry` entity, which has the following fields: performs a read on the entry. * `meter_config`, which is used to read and write the configuration for the - direct meter entry attached to this table entry, if any. See [Direct - resources](#sec-direct-resources) section for more information. + direct meter entry attached to this table entry, if any. See + xref:sec-direct-resources[Direct resources] section for more information. * `counter_data`, which is used to read and write the value for the direct - counter entry attached to this table entry, if any. See [Direct - resources](#sec-direct-resources) section for more information. + counter entry attached to this table entry, if any. See xref:sec-direct-resources[Direct resources] section for more information. * `meter_counter_data`, which is used to read and write the per-color counter values for the direct meter entry attached to this table entry, if any. - See [Direct resources](#sec-direct-resources) section for more information. + See xref:sec-direct-resources[Direct resources] section for more information. * `is_default_action`, a boolean flag which indicates whether the table entry is - the default entry for the table. See [Default entry](#sec-default-entry) + the default entry for the table. See xref:sec-default-entry[Default entry] section for more information. * `idle_timeout_ns` and `time_since_last_hit`, which are two fields used to - implement idle-timeout support for the table, if applicable. See - [Idle-timeout](#sec-idle-timeout) section for more information. + implement idle-timeout support for the table, if applicable. See xref:sec-idle-timeout[Idle-timeout]section for more information. * `is_const`, a boolean value that is `true` if and only if the entry cannot be modified or deleted by the client. The `priority` field must be set to a non-zero value if the match key includes a -ternary match (&ie; in the case of PSA if the P4Info entry for the table +ternary match (i.e. in the case of PSA if the P4Info entry for the table indicates that one or more of its match fields has an `OPTIONAL`, `TERNARY` or `RANGE` match type) or to zero otherwise. A higher priority number indicates that the entry @@ -3127,7 +2975,7 @@ table (the table has an empty match key), the server must reject all attempts to The number of match entries that a table *should* support is indicated in P4Info (`size` field of `Table` message). The guarantees provided to the P4Runtime client are the same as the ones described in the P4~16~ specification for the -`size` property [@P4TableProperties]. In particular, some implementations may +`size` property cite:[P4TableProperties]. In particular, some implementations may not be able to always accommodate an arbitrary set of entries up to the requested size, and other implementations may provide the P4Runtime client with more entries than requested. The P4Runtime server must return @@ -3140,16 +2988,17 @@ The `is_const` field must be `false` in any `INSERT`, `MODIFY`, or `DELETE` write request of a table entry. If it is true, the server must reject the operation and return an `INVALID_ARGUMENT` error. -### Match Format { #sec-match-format} +[#sec-match-format] +=== Match Format The bytes fields in the `FieldMatch` message follow the format described in -[Bytestrings](#sec-bytestrings). +xref:sec-bytestrings[Bytestrings]. For "don't care" matches, the P4Runtime client must omit the field's entire `FieldMatch` entry when building the `match` repeated field of the `TableEntry` message. This requirement leads to smaller Protobuf messages overall, while enabling a canonical representation for "don't care" matches, which is needed -to ensure [read-write symmetry](#sec-read-write-symmetry). For PSA match types, +to ensure xref:sec-read-write-symmetry[read-write symmetry]. For PSA match types, a "don't care" match for a specific match key field is defined as follows: * For a `TERNARY` match, it is logically equivalent to a mask of zeros. @@ -3168,7 +3017,8 @@ The following example shows a P4Runtime message that treats a `TERNARY` field as a "don't care" match. The P4 program defines table `t` with `TERNARY` and `EXACT` fields in its match key: -~ Begin P4Example +[source,p4] +---- table t { key = { hdr.ipv4.dip: ternary; @@ -3178,13 +3028,14 @@ table t { drop; } } -~ End P4Example +---- In this P4Runtime request, the client omits the table's `TERNARY` field from the repeated `match` field to indicate a "don't care" match. As shown below, the `match` specifies only the `EXACT` field given by `field_id: 2`. -~ Begin Prototext +[source,proto] +---- device_id: 3 entities { table_entry { @@ -3201,7 +3052,7 @@ entities { } } } -~ End Prototext +---- For every member of the `TableEntry` repeated `match` field, `field_id` must be a valid id for the table, as per the P4Info, and one of the fields in @@ -3211,19 +3062,21 @@ P4Runtime server must return an `INVALID_ARGUMENT` error code. * `EXACT` match * The binary string encoding of the value must conform to the - [Bytestrings](#sec-bytestrings) requirements. + xref:sec-bytestrings[Bytestrings] requirements. -~ Begin Pseudo +[source,pseudo] +---- assert(BytestringValid(match.exact().value())) -~ End Pseudo +---- * `LPM` match * The binary string encoding of the value (when present) must conform to the - [Bytestrings](#sec-bytestrings) requirements. + xref:sec-bytestrings[Bytestrings] requirements. * "Don't care" match must be omitted. * "Don't care" bits must be 0 in value. -~ Begin Pseudo +[source,pseudo] +---- assert(BytestringValid(match.lpm().value())) pLen = match.lpm().prefix_len() @@ -3231,20 +3084,21 @@ assert(pLen > 0) trailing_zeros = countTrailingZeros(match.lpm().value()) assert(trailing_zeros >= field_bits - pLen) -~ End Pseudo +---- * `TERNARY` match * The binary string encoding of the value (when present) and mask (when - present) must conform to the [Bytestrings](#sec-bytestrings) requirements. + present) must conform to the xref:sec-bytestrings[Bytestrings] requirements. * "Don't care" match must be omitted. * Masked bits must be 0 in value. This constraint taken together - with the [Bytestrings](#sec-bytestrings) requirements means that the + with the xref:sec-bytestrings[Bytestrings] requirements means that the value's binary string is never longer than the mask's binary string. When the value's string is shorter than the mask string, the most-significant value bits need zero-padding before any logical operations with the mask. -~ Begin Pseudo +[source,pseudo] +---- assert(BytestringValid(match.ternary().value())) assert(BytestringValid(match.ternary().mask())) assert(match.ternary().value().size() <= match.ternary().mask().size()); @@ -3255,16 +3109,17 @@ mask = parseInteger(match.ternary().mask()) assert(mask != 0) assert(value & mask == value) -~ End Pseudo +---- * `RANGE` match * The binary string encoding of the low bound (when present) and high bound - (when present) must conform to the [Bytestrings](#sec-bytestrings) + (when present) must conform to the xref:sec-bytestrings[Bytestrings] requirements. * Low bound must be less than or equal to the high bound. * "Don't care" match must be omitted. -~ Begin Pseudo +[source,pseudo] +---- assert(BytestringValid(match.range().low())) assert(BytestringValid(match.range().high())) @@ -3274,17 +3129,18 @@ high = parseInteger(match.range().high()) assert(low <= high) assert(low != min_field_value || high != max_field_value) -~ End Pseudo +---- * `OPTIONAL` match * The binary string encoding of the value must conform to the - [Bytestrings](#sec-bytestrings) requirements. + xref:sec-bytestrings[Bytestrings] requirements. -~ Begin Pseudo +[source,pseudo] +---- assert(BytestringValid(match.optional().value())) -~ End Pseudo +---- -### Action Specification +=== Action Specification The `TableEntry` `action` field must be set for every `INSERT` update but may be left unset for `MODIFY` updates, in which case the action specification for the @@ -3304,10 +3160,10 @@ the `oneof` in the `TableAction` message will either be: * an `ActionProfileActionSet` specification for indirect tables for which the `implementation` property is an action profile with - selector. This usage is described in [One Shot Action Selector - Programming](#sec-oneshot) + selector. This usage is described in xref:sec-oneshot[One Shot Action Selector + Programming]. -If the `oneof` does not match the table description in the P4Info (⪚ the +If the `oneof` does not match the table description in the P4Info (e.g. the `oneof` is `action_profile_member_id` for a direct table), the server must return an `INVALID_ARGUMENT` error code. @@ -3317,26 +3173,27 @@ The `Action` Protobuf message has the following fields: determined by the P4Info message and must match one of the possible action choices for the table, or the server must return an `INVALID_ARGUMENT` error code. If the client uses a valid `action_id` for the table but does not - respect the action scope specified in P4Info (⪚ tries to set a `TABLE_ONLY` + respect the action scope specified in P4Info (e.g. tries to set a `TABLE_ONLY` action as the default action), the server must return a `PERMISSION_DENIED` error code. * `params`: a repeated Protobuf field of action parameter values, each encoded as a `Param` message. For each parameter, `param_id` must be valid for the action (as per the P4Info) and value must follow the format described in - [Bytestrings](#sec-bytestrings). The P4Runtime client must provide a valid + xref:sec-bytestrings[Bytestrings]. The P4Runtime client must provide a valid value for each parameter of the P4 action; we do not support default values for action parameters. The server must return an `INVALID_ARGUMENT` error code if a parameter id is missing, if an extra parameter --- id not found in the P4Info --- was provided by the client, if a parameter value is missing, or if the value provided for one of the parameters does not conform to the - [Bytestrings](#sec-bytestrings) format. + xref:sec-bytestrings[Bytestrings] format. For indirect tables, if the P4Runtime client provides a member or group id which has not been inserted in the corresponding action profile instance yet, the P4Runtime server must return a `NOT_FOUND` error code. -### Default Entry { #sec-default-entry} +[#sec-default-entry] +=== Default Entry According to the P4 specification, the default entry for a table is always set. It can be set at compile-time by the P4 programmer --- or defaults to `NoAction` @@ -3354,20 +3211,21 @@ on the default entry, the client can either provide a valid action for the table or leave the action field unset, in which case the default entry will be reset to its original value, as defined in the P4 program. When resetting the default entry, its `controller_metadata` and `metadata` value as well as the -configurations for its [direct resources](#sec-direct-resources) will be reset +configurations for its xref:sec-direct-resources[direct resources] will be reset to their defaults. If the default entry is constant (as indicated by the P4 program and the P4Info message), the server must return a `PERMISSION_DENIED` error code if the client attempts to modify it. Apart from the above restrictions, the default entry is treated like a regular -entry, including with regards to [direct resources](#sec-direct-resources). +entry, including with regards to xref:sec-direct-resources[direct resources]. In this P4Runtime release, we have decided to restrict the default entry for indirect tables --- tables with an ActionProfile or ActionSelector `implementation` property --- to a constant `NoAction` action entry, with the hope that it would simplify the implementation of the P4Runtime service. -### Constant Tables { #sec-constant-tables } +[#sec-constant-tables] +=== Constant Tables Constant tables are defined as tables whose match entries are immutable. They are identified by the table property `const entries` @@ -3376,7 +3234,7 @@ in the P4~16~ source code. In the P4Info, such tables have source code has at least one entry in it, they also have `has_initial_entries` flag equal to true. For tables declared with the `entries` property, without `const` before `entries` see Section -[#sec-preinitialized-tables]. +<<#sec-preinitialized-tables>>. The only write updates which are allowed for constant tables are `MODIFY` operations on direct resources, and the default action (assuming the default @@ -3395,7 +3253,7 @@ the following fields must be set by the server: `table_id`, `match`, `action`, direct resources that are being queried. Idle timeouts are not supported for static entries. -When a priority value is required (⪚ for tables including `RANGE`, +When a priority value is required (e.g. for tables including `RANGE`, `TERNARY` or `OPTIONAL` matches), it is inferred based on the order in which entries appear in the table declaration. As of August 2023, the open source `p4c` compiler always assigns entry priority values in a @@ -3405,21 +3263,22 @@ language specification does not preclude the P4 developer from explicitly specifying priorities for entries in constant tables, but `p4c` does not yet support this. -### Preinitialized tables { #sec-preinitialized-tables } +[#sec-preinitialized-tables] +=== Preinitialized tables Preinitialized tables are those defined with an `entries` table property in the P4~16~ source code, with no `const` qualifier before `entries`, and at least one entry in that list. In the P4Info, such tables have `has_initial_entries` flag equal to true, but `is_const_table` is false. For tables declared with `const entries`, -see section on [Constant Tables](#sec-constant-tables). +see section on xref:sec-constant-tables[Constant Tables]. Every P4 table falls into one of three categories: * *Normal table*: Neither `entries` nor `const entries` are declared in the source code, and thus `is_const_table` and `has_initial_entries` will both be false. A corner case is that if - it has `entries = { }` with no `const` before `entries`, &ie; an + it has `entries = { }` with no `const` before `entries`, i.e. an empty list of entries, that is also a normal table. * *Constant table*: The table has `const entries` declared, and thus a separate `entries` property is not permitted by the language. Such @@ -3438,7 +3297,7 @@ Entries not marked `const` may be modified or deleted, just as a client may do for any entry in a normal table. Entries marked `const` behave like entries in a constant table, -&ie; only `MODIFY` operations on direct resources are allowed. +i.e. only `MODIFY` operations on direct resources are allowed. Unlike a table with `is_const_table = true`, a client may insert entries into a table with `has_initial_entries = true` and @@ -3447,8 +3306,7 @@ number of entries supported by the target for the table. The contents of preinitialized tables can be queried by the client through a `ReadRequest`. The server fills in the same fields in the -response as it does for constant tables, as described in section on -[Constant Tables](#sec-constant-tables), and with the same restrictions on table +response as it does for constant tables, as described in section on xref:sec-constant-tables[Constant Tables], and with the same restrictions on table features supported. If the table requires a priority value for entries, the priorities of @@ -3459,10 +3317,11 @@ in a normal table can. The contents of all table entries within the `entries` table properties in a P4 program can be written to a separate output file by -the open source `p4c` compiler. See Section [#sec-entries-files] for +the open source `p4c` compiler. See Section <<#sec-entries-files>> for details. -### Wildcard Reads { #sec-table-wildcard-reads} +[#sec-table-wildcard-reads] +=== Wildcard Reads When performing a `ReadRequest`, the P4Runtime client can select all entries from one or all tables on the target and use several of the `TableEntry` fields @@ -3504,7 +3363,8 @@ fields may be used to select and filter results: For example, in order to read all entries from all tables from device 3, the client can use the following `ReadRequest` message. -~ Begin Prototext +[source,proto] +---- device_id: 3 entities { table_entry { @@ -3514,13 +3374,14 @@ entities { metadata: "" } } -~ End Prototext +---- In order to read all entries with priority 11 from a specific table (with id 0x0212ab34) from device 3, the client can use the following `ReadRequest` message: -~ Begin Prototext +[source,proto] +---- device_id: 3 entities { table_entry { @@ -3530,22 +3391,23 @@ entities { metadata: "" } } -~ End Prototext +---- The canonical representation of "don't care" matches, combined with the ability to do a wildcard read on all table entries by leaving the `match` field unset, means that there exists a specific ambiguous case in which the same message could be used to either read a single "don't care" entry or to do a wildcard read. If a table has no fields with match kind `EXACT`, it is possible via -P4Runtime to add an entry that is "don't care" for all fields (&ie; has an empty -`match` field) but is not the default entry (&ie; `is_default_action` is +P4Runtime to add an entry that is "don't care" for all fields (i.e. has an empty +`match` field) but is not the default entry (i.e. `is_default_action` is false). When reading this entry from the table, there is no way to read *only* that entry from the table, because it would require providing an unset `match` field in the request, which in turn indicates that the client wishes to perform a wildcard read on all non-default entries. Consider the following example which uses a table with a single `LPM` match: -~ Begin P4Example +[source,p4] +---- table t { key = { hdr.ipv4.dip: lpm; @@ -3554,10 +3416,12 @@ table t { drop; fwd; } } -~ End P4Example +---- The following `WriteRequest` message can be used to add 2 entries: -~ Begin Prototext + +[source,proto] +---- device_id: 3 entities { table_entry { # don't care entry @@ -3575,33 +3439,35 @@ entities { # ... } } -~ End Prototext +---- The first entry is a "don't care" entry, while the second one matches all `10.0.0.0/8` addresses. The second entry has higher priority than the first one. The following `ReadRequest` message will return *all* entries in the table, not just the "don't care" entry. -~ Begin Prototext +[source,proto] +---- device_id: 3 entities { table_entry { table_id: 0x0212ab34 } } -~ End Prototext +---- This issue also exists for tables with `TERNARY`, `RANGE`, and `OPTIONAL` matches. However, in this case the priority is also taken into account for wildcard reads, and because a priority of 0 is not valid, in practice only the entries with the same priority as the "don't care" entry will be returned to the client. If the client uses distinct priority values for all entries --- which is -strongly recommended to achieve [deterministic behavior](#sec-table-entry) ---, +strongly recommended to achieve xref:sec-table-entry[deterministic behavior] ---, then there is no ambiguity because the wildcard read will actually return a single entry (the "don't care" entry) as long as the `priority` field is set to the correct value. -### Direct Resources { #sec-direct-resources} +[#sec-direct-resources] +=== Direct Resources In addition to the `DirectCounterEntry` and `DirectMeterEntry` entities, P4Runtime support reading and writing direct resources as part of the @@ -3638,62 +3504,62 @@ give the P4Runtime client fined-grained control over how direct resources are read and written through the `TableEntry` message. The list below describes how the server must handle the `meter_config`, `counter_data` and `meter_counter_data` fields for read and write requests, based on whether the -fields are set or not. We do not cover error cases in the list, &ie; we assume +fields are set or not. We do not cover error cases in the list, i.e. we assume that we are dealing with a table which is assigned a direct counter / a direct meter, and that the action being used for the table entry "executes" the direct resource appropriately. * `meter_config` field - * `WriteRequest (INSERT)` - * if **unset**: The initial configuration for the meter entry is the + ** `WriteRequest (INSERT)` + *** if **unset**: The initial configuration for the meter entry is the default (meter returns GREEN for all packets). - * if **set**: The initial configuration for the meter entry is the one + *** if **set**: The initial configuration for the meter entry is the one provided by the client. - * `WriteRequest (MODIFY)` - * if **unset**: The meter entry's configuration is reset to the default + ** `WriteRequest (MODIFY)` + *** if **unset**: The meter entry's configuration is reset to the default (meter returns GREEN for all packets). - * if **set**: The value provided by the client is used to re-configure + *** if **set**: The value provided by the client is used to re-configure the meter entry. - * `ReadRequest` - * if **unset**: The response does not include the meter entry's + ** `ReadRequest` + *** if **unset**: The response does not include the meter entry's configuration (`meter_config` is unset in the response). - * if **set**: If the meter entry's configuration is the default + *** if **set**: If the meter entry's configuration is the default configuration, `meter_config` is unset in the response. Otherwise, the response includes the meter entry's configuration that was written by the client earlier. This respects the "read-write symmetry" principle. * `counter_data` field - * `WriteRequest (INSERT)` - * if **unset**: The initial value for the counter entry is the default + ** `WriteRequest (INSERT)` + *** if **unset**: The initial value for the counter entry is the default (0). - * if **set**: The initial value for the counter entry is the one + *** if **set**: The initial value for the counter entry is the one provided by the client. - * `WriteRequest (MODIFY)` - * if **unset**: The counter entry's value is not changed. - * if **set**: The value provided by the client is written to the counter + ** `WriteRequest (MODIFY)` + *** if **unset**: The counter entry's value is not changed. + *** if **set**: The value provided by the client is written to the counter entry. - * `ReadRequest` - * if **unset**: The response does not include the counter entry's value + ** `ReadRequest` + *** if **unset**: The response does not include the counter entry's value (`counter_data` is unset in the response). - * if **set**: The response includes the counter entry's value read from + *** if **set**: The response includes the counter entry's value read from the target. * `meter_counter_data` field - * `WriteRequest (INSERT)` - * if **unset**: The initial value for all 3 counter entries is the + ** `WriteRequest (INSERT)` + *** if **unset**: The initial value for all 3 counter entries is the default (0). - * if **set**: The initial value for all 3 counter entries is the + *** if **set**: The initial value for all 3 counter entries is the default (0). Sub-field, if any, can only have zero (0) as its value. `INVALID_ARGUMENT` error is returned for any non-zero sub-field value. - * `WriteRequest (MODIFY)` - * if **unset**: All the 3 counter entries are unchanged. - * if **set**: All the 3 counters are reset to 0. Sub-field, if any, can + ** `WriteRequest (MODIFY)` + *** if **unset**: All the 3 counter entries are unchanged. + *** if **set**: All the 3 counters are reset to 0. Sub-field, if any, can only have zero (0) as its value. `INVALID_ARGUMENT` error is returned for any non-zero sub-field value. - * `ReadRequest` - * if **unset**: The response does not include counter values + ** `ReadRequest` + *** if **unset**: The response does not include counter values (`meter_counter_data` is unset in the response). - * if **set**: The response includes all the 3 counter values read from + *** if **set**: The response includes all the 3 counter values read from the target. In its default configuration, a meter returns the GREEN color for every packet @@ -3701,13 +3567,14 @@ when it is executed. This default configuration can be achieved by leaving the `meter_config` field unset when inserting **or modifying** a table entry. When modifying a table entry, if the P4Runtime client wishes to maintain the same meter configuration, it needs to be provided again in the `TableEntry` message -(&ie; the `meter_config` field must be set to match the existing configuration). +(i.e. the `meter_config` field must be set to match the existing configuration). -### Idle-timeout { #sec-idle-timeout } +[#sec-idle-timeout] +=== Idle-timeout P4Runtime supports idle timeout for table entries. When adding a table entry, the client can specify a Time-To-Live (TTL) value. If at any time during its -lifetime, the data plane entry is not "hit" (&ie; not selected by any packet +lifetime, the data plane entry is not "hit" (i.e. not selected by any packet lookup) for a lapse of time greater or equal to its TTL, the P4Runtime should, with best effort, generate a stream notification --- using the `IdleTimeoutNotification` message --- to the primary client, which can then take @@ -3717,7 +3584,7 @@ Two fields of the `TableEntry` Protobuf message are used to implement idle timeout: * `idle_timeout_ns`: the configured TTL for the table entry in nanoseconds. A - value of 0 means that the entry never expires, &ie; no + value of 0 means that the entry never expires, i.e. no `IdleTimeoutNotification` message will ever be generated for this entry. When a client reads a `TableEntry`, this field will be included in the response and the value must match exactly the one set by the client when inserting or @@ -3753,10 +3620,10 @@ server receives a `TableEntry` message which violates this, it must return an `INVALID_ARGUMENT` error. For more information about idle timeout, in particular regarding -`IdleTimeoutNotification`, please refer to the [Table idle timeout -notifications](#sec-table-idle-timeout-notification) section. +`IdleTimeoutNotification`, please refer to the xref:sec-table-idle-timeout-notification[Table idle timeout notifications] section. -## `ActionProfileMember` & `ActionProfileGroup` { #sec-action-profile-member-and-group } +[#sec-action-profile-member-and-group] +== `ActionProfileMember` & `ActionProfileGroup` P4Runtime defines an API for programming a PSA ActionProfile extern using `ActionProfileMember` messages. A PSA ActionSelector extern can be programmed @@ -3767,7 +3634,8 @@ entries are directly bound to an action instance. The following P4 snippet illustrates an indirect table `t` for L3 routing, implemented with an action selector `as`. -~ Begin P4Example +[source,p4] +---- ActionSelector(HashAlgorithm.crc32, /*size = */ 32w1024, /*output_width = */ 32w10) as; @@ -3787,7 +3655,7 @@ table t { } implementation = as; } -~ End P4Example +---- When programming table `t` in the example above, a P4Runtime client should specify the `TableAction` in the `TableEntry` to be a reference to either an @@ -3811,7 +3679,7 @@ The obtained member id is used to look up the member table in the selector and obtain the action specification, which is then used to modify the packet or its metadata. -### Action Profile Member Programming +=== Action Profile Member Programming Action profile members are entries in the ActionProfile or ActionSelector and are referenced by a `uint32` identifier that is bound to an action @@ -3864,7 +3732,8 @@ ActionSelector objects. A message with `action_profile_id` equal to the id of an existing ActionProfile or ActionSelector object, and a `member_id` equal to 0, will read all members of that specified object. -### Action Profile Group Programming { #sec-action-profile-group-programming } +[#sec-action-profile-group-programming] +=== Action Profile Group Programming Action profile groups are entries in an ActionSelector and are referenced by a `uint32` identifier that is bound to a set of action profile members already @@ -3893,27 +3762,27 @@ An `ActionProfileGroup` entity update message has the following fields: * `members` is a repeated field defining the set of members that are part of the group. For each member in a group, the controller must define the following fields: - * `member_id` for looking up the member table in the selector. - * `weight` specifying the probability of the member's selection at + ** `member_id` for looking up the member table in the selector. + ** `weight` specifying the probability of the member's selection at runtime. 0 is not a valid `weight` value and the server must return `INVALID_ARGUMENT` if the client attempts to use it. - * `watch_port` is the controller-defined port that the member's + ** `watch_port` is the controller-defined port that the member's liveness depends on. At runtime, the member must be excluded from selection if the watch port is down. See Section - [#action-selector-constraints] for notes on the behavior if all members in + <<#action-selector-constraints>> for notes on the behavior if all members in a group are excluded for this reason. If `watch_port` is empty, then the member is always included in the selection, regardless of the status of any port of the device. The value must be empty or the SDN port of an existing port on the device, otherwise the server must return `INVALID_ARGUMENT`. If the target does not support using the SDN port as a - watch port (⪚ on some targets LAGs cannot be used for this purpose), + watch port (e.g. on some targets LAGs cannot be used for this purpose), the server must return `UNIMPLEMENTED`. * `max_size` is the maximum sum of all members or member weights (as per the `selector_size_semantics`) for the group. This field is defined when the group is inserted, and must not be changed in a `MODIFY` update, otherwise an `INVALID_ARGUMENT` error is returned. See the subsection below for the - [rules on setting `max_size`](#sec-max-size-rules). + xref:sec-max-size-rules[rules on setting `max_size`]. An action profile group may be inserted, modified or deleted as per the following semantics. @@ -3938,7 +3807,7 @@ following semantics. field will be ignored. When setting the group membership with `INSERT` or `MODIFY`, the `members` -repeated field must not include duplicates, &ie; members with the same +repeated field must not include duplicates, i.e. members with the same `member_id`. The `weight` field is used instead to logically "repeat" the member inside the group. @@ -3953,7 +3822,8 @@ message with `action_profile_id` equal to the id of an existing ActionSelector object, and a `group_id` equal to 0, will read all groups of that one specified object. -#### Rules on Setting `max_size` { #sec-max-size-rules} +[#sec-max-size-rules] +==== Rules on Setting `max_size` The valid values for `max_size` depend on the static `max_group_size` included in the P4Info message: @@ -3965,7 +3835,7 @@ in the P4Info message: would have rejected the Forwarding Pipeline Config. If `max_size` is greater than `max_group_size`, the server must return `INVALID_ARGUMENT`. -* Otherwise (&ie; if `max_group_size` is 0), the P4Runtime client can set +* Otherwise (i.e. if `max_group_size` is 0), the P4Runtime client can set `max_size` to any value greater than or equal to 0. * A `max_size` of 0 indicates that the client is not able to specify a maximum @@ -3978,7 +3848,8 @@ in the P4Info message: target, the server must return a `RESOURCE_EXHAUSTED` error at group-creation time. -### One Shot Action Selector Programming { #sec-oneshot } +[#sec-oneshot] +==== One Shot Action Selector Programming P4Runtime supports syntactic sugar to program a table, which is implemented with an action selector, in one shot. One shot means that a table entry, an action @@ -4009,7 +3880,7 @@ is `sum_of_members`, or else the server must return `INVALID_ARGUMENT`. Each * `watch_port` is the controller-defined port that the action's liveness depends on. At runtime, the action must be excluded from selection if the watch port - is down. See Section [#sec-action-profile-group-programming] for more details + is down. See Section <<#sec-action-profile-group-programming>> for more details on the `watch_port` field, which also apply for one shot action selector programming. @@ -4023,11 +3894,11 @@ To preserve read-write symmetry, an implementation must answer `ReadRequest`s with the original one shot messages. It may not return a desugared version of the one shot message. -For example, consider the action selector table defined -[here](#sec-action-profile-member-and-group). This table could be programmed +For example, consider the action selector table defined xref:sec-action-profile-member-and-group[role]. This table could be programmed with the following one shot update: -~ Begin Prototext +[source,proto] +---- table_entry { table_id: 0x0212ab34 match { /* lpm match */ } @@ -4051,12 +3922,13 @@ table_entry { } } } -~ End Prototext +---- Which would be equivalent to the following updates, where `GROUP_ID`, `MEMBER_ID_1`, `MEMBER_ID_2`, and `MEMBER_ID_3` are unused ids: -~ Begin Prototext +[source,p4] +---- action_profile_member { action_profile_id: 0x11ab12cd member_id: MEMBER_ID_1 @@ -4096,11 +3968,10 @@ table_entry { match { /* lpm match */ } action { action_profile_group_id: GROUP_ID } } -~ End Prototext +---- Note that when using the above method (members and groups), the client also -needs to use multiple messages to ensure [correct ordering between the dependent -updates](#sec-batching-and-ordering-of-updates). Members need to be inserted +needs to use multiple messages to ensure xref:sec-batching-and-ordering-of-updates[correct ordering between the dependent updates]. Members need to be inserted first, then the group needs to be created, and finally the match entry can be inserted. Therefore, 3 distinct `WriteRequest` batches are required. @@ -4110,7 +3981,7 @@ the P4Runtime client is encouraged not to do so, as the same can be achieved by using the `weight` field. Note that to preserve read-write symmetry, the server must not coalesce multiple `ActionProfileAction` messages with the same `action` specification into one. Additionally, each `action` specification would count as -a separate member for the purposes of ⪚ the `sum_of_members` group size +a separate member for the purposes of e.g. the `sum_of_members` group size calculation for Action Selectors. All the tables associated with an action selector may either be programmed @@ -4127,14 +3998,15 @@ an action selector implementation. Support for the `ActionProfileMember` and `UNIMPLEMENTED` error for every `ActionProfileMember` or `ActionProfileGroup` message that it receives. -### Constraints on action selector programming { #action-selector-constraints } +[#action-selector-constraints] +==== Constraints on action selector programming The PSA specification states that the following features are *optional* in action selector implementations [@PSAActionSelector]: -1. Support for non-empty groups where in the same group, different members are +. Support for non-empty groups where in the same group, different members are bound to different actions. -2. Predictable data plane behavior when a matched table entry points to an empty +. Predictable data plane behavior when a matched table entry points to an empty group. For 1., if a client tries to `INSERT` or `MODIFY` a group with members bound to @@ -4167,7 +4039,7 @@ style of programming. The PSA specification includes a discussion on how to implement `psa_empty_group_action` in software in the P4Runtime server -[@PSAEmptyGroupActionAppendix]. +cite:[PSAEmptyGroupActionAppendix]. If a P4Runtime implementation does support `psa_empty_group_action`, that action should be executed when an action selector group is selected that uses the watch @@ -4179,7 +4051,7 @@ its behavior when a group effectively becomes empty because the watch ports of all members of a group are down. -## `CounterEntry` & `DirectCounterEntry` +=== `CounterEntry` & `DirectCounterEntry` PSA defines Counters as a mechanism for keeping statistics of bytes and packets. Statistics may be updated as a result of an action associated with a table @@ -4190,34 +4062,36 @@ P4Runtime message can be used for all three types of PSA counters --- `PACKETS`, * `byte_count` is an `int64`, corresponding to the number of octets. * `packet_count` is an `int64`, corresponding to the number of packets. -~ Begin Proto +[source,proto] +---- message CounterData { int64 byte_count = 1; int64 packet_count = 2; } -~ End Proto +---- P4Runtime does not distinguish between the different PSA counter types, and allows for simultaneous updates of `byte_count` and `packet_count` fields, which is equivalent to specifying the counter type `PACKETS_AND_BYTES`. Counters may be defined as direct or indirect (indexed) instances. -### `DirectCounterEntry` +==== `DirectCounterEntry` A direct counter is a direct resource associated with a `TableEntry` (see -[Direct Resources](#sec-direct-resources)). The `counter_data` field of the +xref:sec-direct-resources[Direct Resources]). The `counter_data` field of the `TableEntry` message can be used to initialize the counter value at the same time as the table entry is inserted. Once the table entry has been created, the P4Runtime client may modify the associated direct counter entry using the `DirectCounterEntry` message. Once the table entry is deleted the associated direct counter entry can no longer be accessed. -~ Begin Proto +[source,proto] +---- message DirectCounterEntry { TableEntry table_entry = 1; CounterData data = 2; } -~ End Proto +---- A `WriteRequest` may only include an `Update` message of type `MODIFY` with a `DirectCounterEntry`, whose fields are specified by the client as follows: @@ -4239,14 +4113,14 @@ A client may use `ReadRequest` in two ways to read the contents of a * As a direct resource associated with a table entry, request the server to return the counter value in the `counter_data` field of the `TableEntry` message -(see [Direct resources](#sec-direct-resources)). +(see xref:sec-direct-resources[Direct Resources]). * Explicitly request the counter value by including the `DirectCounterEntry` in the `ReadRequest`. The `table_entry.match` field must match the `TableEntry` whose counter is being read. If no such entry is found, the server returns the error code `NOT_FOUND`. -### `CounterEntry` +==== `CounterEntry` An indirect or indexed counter is not associated with a specific `TableEntry` and may be updated independently of any action. It may be read or written using @@ -4260,13 +4134,14 @@ the P4Runtime `CounterEntry` message whose fields are defined as follows: * `data` is a Protobuf message of type `CounterData`, which represents the counter value. -~ Begin Proto +[source,p4] +---- message CounterEntry { uint32 counter_id = 1; Index index = 2; CounterData data = 3; } -~ End Proto +---- The `CounterEntry` can only be used in a `WriteRequest` with the `MODIFY` update type. The P4Runtime server must return an `INVALID_ARGUMENT` error code for @@ -4295,16 +4170,16 @@ entity for each of the instances, specifying the `counter_id` and values for all indirect counters in the array identified by the unique id `counter_id`. -## `MeterEntry` & `DirectMeterEntry` { #sec-meter-directmeter } +=== `MeterEntry` & `DirectMeterEntry` Meters are an advanced mechanism for keeping statistics, involving stateful "marking" and usually "throttling" of packets based on configured rates of traffic. The PSA metering function is based on the *Two Rate Three Color Marker* -(trTCM) defined in RFC 2698 [@RFC2698]. P4Runtime clients may additionally -restrict meter usage on a table to RFC 2697's [@RFC2697] *Single Rate Three +(trTCM) defined in RFC 2698 cite:[RFC2698]. P4Runtime clients may additionally +restrict meter usage on a table to RFC 2697's cite:[RFC2697] *Single Rate Three Color Marker* (srTCM) or a simplified version of it that we call *Single Rate Two Color Marker*. The type of a table's meter is set by the `MeterSpec.Type` as -described in the [Meter & DirectMeter section](#sec-meter-directmeter). +described in the xref:sec-meter-directmeter[Meter & DirectMeter section]. The trTCM meters an arbitrary packet stream using two configured rates --- the Peak Information Rate (PIR) and Committed Information Rate (CIR), and their @@ -4333,7 +4208,8 @@ primary purpose of the color counters is for debugging purposes. A meter may be configured as a direct or indirect instance, similar to a counter. The `MeterConfig` P4Runtime message represents meter configuration. -~ Begin Proto +[source,proto] +---- message MeterConfig { int64 cir = 1; // Committed Information Rate int64 cburst = 2; // Committed Burst Size @@ -4341,7 +4217,7 @@ message MeterConfig { int64 pburst = 4; // Peak Burst Size int64 eburst = 5; // Excess burst size (only used for srTCM) } -~ End Proto +---- A MeterConfig for a trTCM typed meter must only be accepted if `eburst` is unset. Otherwise, the server should return an `INVALID_ARGUMENT` error. @@ -4361,23 +4237,23 @@ packets identically in all three cases. Thus, changing the meter type from *Single Rate Two Color Marker* to *Single Rate Three Color Marker* or *Two Rate Three Color Marker* is a non-breaking change. -### `DirectMeterEntry` +==== `DirectMeterEntry` -A direct meter is a direct resource associated with a `TableEntry` (see [Direct -resources](#sec-direct-resources)). The `meter_config` field of the `TableEntry` +A direct meter is a direct resource associated with a `TableEntry` (see xref:sec-direct-resources[Direct Resources]). The `meter_config` field of the `TableEntry` message can be used to initialize the meter configuration at the same time as the table entry is inserted. Once the table entry has been created, the P4Runtime client may modify the associated direct meter entry using the `DirectMeterEntry` message. Once the table entry is deleted the associated direct meter entry can no longer be accessed. -~ Begin Proto +[source,proto] +---- message DirectMeterEntry { TableEntry table_entry = 1; MeterConfig config = 2; MeterCounterData counter_data = 3; } -~ End Proto +---- A `WriteRequest` may only include an `Update` message of type `MODIFY` with a `DirectMeterEntry`, whose fields are specified by the client as follows: @@ -4406,7 +4282,7 @@ A client may use `ReadRequest` in two ways to read a `DirectMeter` config. * As a direct resource associated with a table entry, request the server to return the meter config in the `meter_config` field of the `TableEntry` - message (see [Direct resources](#sec-direct-resources)). + message (see xref:sec-direct-resources[Direct Resources]). * Explicitly request the meter configuration by including the `DirectMeterEntry` in the `ReadRequest`. The `table_entry.match` field must match the @@ -4415,7 +4291,7 @@ A client may use `ReadRequest` in two ways to read a `DirectMeter` config. per color counter data for the meter entry, if supported and specified in the request message. -### `MeterEntry` +==== `MeterEntry` An indirect or indexed meter is not associated with a specific `TableEntry` and may be executed independently of any action. Its configuration may be read or @@ -4434,14 +4310,15 @@ follows: represents the per color counter values associated with the corresponding meter. -~ Begin Proto +[source,proto] +---- message MeterEntry { uint32 meter_id = 1; Index index = 2; MeterConfig config = 3; MeterCounterData counter_data = 4; } -~ End Proto +---- The `MeterEntry` can only be used in a `WriteRequest` with the `MODIFY` update type. The P4Runtime server must return an `INVALID_ARGUMENT` error code for @@ -4472,7 +4349,7 @@ supported as follows: configuration for all indirect meters in the array identified by the unique id `meter_id`. -### `MeterCounterData` +==== `MeterCounterData` The `MeterCounterData` P4Runtime message represents the per color counters associated with a meter entry. Whenever a meter is executed and returns @@ -4483,16 +4360,16 @@ As seen above, these counters can be associated with a `DirectMeterEntry` or `UNIMPLEMENTED` if a `MeterCounterData` field was set in a read or write request. -~ Begin Proto +[source,p4] +---- message MeterCounterData { CounterData green = 1; CounterData yellow = 2; CounterData red = 3; } -~ End Proto - +---- -## `PacketReplicationEngineEntry` +=== `PacketReplicationEngineEntry` The PSA Packet Replication Engine (PRE) is an extern that is implicitly instantiated in all PSA programs. The PRE is responsible for implementing @@ -4500,7 +4377,7 @@ multicasting and cloning functionality in the data plane. P4Runtime defines an API to program the PRE with multicast groups and clone sessions to allow replication of data plane packets. -### `MulticastGroupEntry` +==== `MulticastGroupEntry` Multicasting is achieved in PSA programs by setting the `multicast_group` ingress output metadata to a non-zero identifier. The number of replicas and @@ -4510,7 +4387,8 @@ program illustrates a possible data plane behavior of multicasting ARP packets in the ingress. Note that the data plane type of the multicast group metadata is 10 bits on the PSA device in this example. -~ Begin P4Example +[source,p4] +---- control arp_multicast(inout H hdr, inout M smeta) { apply { if (hdr.ethernet.isValid() && @@ -4519,50 +4397,32 @@ control arp_multicast(inout H hdr, inout M smeta) { } } } -~ End P4Example +---- At runtime, the client writes the following update in the target (shown in Protobuf text format). -~ Begin Prototext +[source,proto] +---- type: INSERT entity { packet_replication_engine_entry { multicast_group_entry { multicast_group_id: 1 - replicas { - port: "\x05" - instance: 1 - } - replicas { - port: "\x0c" - instance: 2 - backup_replicas { port: "\x0d" instance: 5 } - } - replicas { - port: "\x12" - instance: 3 - backup_replicas { port: "\x13" instance: 6 } - backup_replicas { port: "\x14" instance: 7 } - } - replicas { - port: "\x18" - instance: 4 - backup_replicas { port: "\x19" instance: 8 } - backup_replicas { port: "\x1a" instance: 9 } - backup_replicas { port: "\x1b" instance: 10 } - } + replicas { port: "\x05" instance: 1 } + replicas { port: "\x0c" instance: 2 } + replicas { port: "\x12" instance: 3 } + replicas { port: "\x18" instance: 4 } } } } -~ End Prototext +---- As a result of the above P4Runtime programming, the target device will create four replicas of an ARP packet. These replicas will appear in the egress pipeline as independent packets with egress port set to PSA device port numbers corresponding to SDN port numbers 5, 12, 18 and 24. For more discussion on the -translation between SDN ports and PSA device ports, refer to the -[PSA Metadata Translation](#sec-translation-of-port-numbers) section. Each +translation between SDN ports and PSA device ports, refer to the xref:sec-translation-of-port-numbers[PSA Metadata Translation] section.Each replica can optionally have a list of backup replicas used as fallback ports for multicast, where the highest-preference starts with the primary replica followed by its backup replicas in order. When the highest-preferred port of a @@ -4576,10 +4436,10 @@ backups are down for a particular replica, the packet processing side effects can result in one of the two main expected behaviors that the target is recommended to implement: -1. No replica is created so none of the side effects from the +. No replica is created so none of the side effects from the after-multicast-replication processing should occur for this replica. -2. The system sends one replica to the primary port, which gets dropped, +. The system sends one replica to the primary port, which gets dropped, but the system will perform any side effects of the after-multicast-replication processing. @@ -4598,7 +4458,7 @@ semantics. * `INSERT`: Add a new multicast group entry bound to a set of egress ports and replica IDs. The `multicast_group_id` field is a `uint32` and must be greater - than 0 (see explanation [below](#sec-valid-values-for-mg-id)), or the + than 0 (see explanation xref:sec-valid-values-for-mg-id[below]), or the P4Runtime server must return an `INVALID_ARGUMENT` error. The replica `instance` ID is also a `uint32`, and its value may not exceed the maximum allowed by the target for the `EgressInstance_t` type (0 is allowed), or the @@ -4627,7 +4487,8 @@ other fields in `MulticastGroupEntry` are ignored. To perform a *wildcard* `Read` on all configured multicast group entries, the `multicast_group_id` field must be set to 0, its default value. -#### Valid Values for `multicast_group_id` { #sec-valid-values-for-mg-id} +[#sec-valid-values-for-mg-id] +==== Valid Values for `multicast_group_id` The PSA specification states that the valid *data plane* values for multicast group ids (`MulticastGroup_t`) range from 1 (0 is a special value that indicates @@ -4642,7 +4503,7 @@ multicast group ids. In other words, it is not possible to map (using translation) a zero SDN multicast group id value to a non-zero data plane multicast group id value. -### `CloneSessionEntry` +==== `CloneSessionEntry` PSA supports cloning of packets in both the ingress and egress pipeline. Ingress cloning creates a mirror of the packet as seen in the beginning of the ingress @@ -4661,7 +4522,8 @@ type of the clone session metadata is 10 bits on the PSA device in this example. We assume that the `clone_low_ttl` control block is applied in the ingress pipeline to create an ingress-to-egress clone. -~ Begin P4Example +[source,p4] +---- control clone_low_ttl(inout H hdr, inout M smeta) { apply { if (hdr.ipv4.isValid() && @@ -4671,13 +4533,14 @@ control clone_low_ttl(inout H hdr, inout M smeta) { } } } -~ End P4Example +---- At runtime, the client writes the following update in the target (shown in Protobuf text format). -~ Begin Prototext +[source,proto] +---- type: INSERT entity { packet_replication_engine_entry { @@ -4689,20 +4552,20 @@ entity { } } } -~ End Prototext +---- As a result of the above P4Runtime programming, the target device will create one replica of a low TTL packet from the ingress to the egress. Note that the clone session ID of the programmed PRE entry is identical to the value used in the data plane in this example (no numerical translation, which is the default -for values of type `CloneSessionId_t` [@PSATranslation]). The clone will be +for values of type `CloneSessionId_t` cite:[PSATranslation]). The clone will be treated for scheduling in the PRE with a class of service value of 2. If the packet is larger than 4096 bytes, it will be truncated to carry at most 4096 bytes. The cloned replica will appear in the egress pipeline as an independent packet with egress port set to CPU (corresponding to SDN port `0xfffffffd`; see -[Translation of Port Numbers](#sec-translation-of-port-numbers)). Note that the +xref:sec-translation-of-port-numbers[Translation of Port Numbers]). Note that the egress port (`port` field) must be an SDN port and must refer to a singleton port. @@ -4714,7 +4577,7 @@ semantics: * `INSERT`: Add a new clone session entry bound to a set of egress ports and replica IDs. The `session_id` is a `uint32` and must be greater than 0 (see - explanation [below](#sec-valid-values-for-session-id)), or the P4Runtime + explanation xref:sec-valid-values-for-session-id[below], or the P4Runtime server must return an `INVALID_ARGUMENT` error. The replica `instance` ID is also a `uint32`, and its value may not exceed the maximum allowed by the target for the `EgressInstance_t` type (0 is allowed), or the server must also @@ -4723,13 +4586,12 @@ semantics: service for each clone packet instance will be set to the value programmed in the clone session entry (`class_of_service` field). This value must be a valid value for the PSA `ClassOfService_t` type, which supports runtime translation - by default [@PSATranslation], or the server must return - `INVALID_ARGUMENT`. See [PSA Metadata - Translation](#sec-translation-of-port-numbers) for more information. The - `packet_length_bytes` field must be set to a non-zero value if the clone - packet should be truncated to the given value (in bytes). If the - `packet_length_bytes` field is 0 (default), no truncation on the clone will be - performed. + by default cite:[PSATranslation], or the server must return + `INVALID_ARGUMENT`. See xref:sec-translation-of-port-numbers[PSA Metadata + Translation] for more information. The `packet_length_bytes` field must be + set to a non-zero value if the clone packet should be truncated to the given + value (in bytes). If the`packet_length_bytes` field is 0 (default), + no truncation on the clone will be performed. * `MODIFY`: Modify the attributes of a given clone session entry, indexed by the given `clone_session_id`. Same restrictions as `INSERT` apply here. * `DELETE`: Delete the clone session indexed by the given @@ -4743,24 +4605,24 @@ configured clone session entries, the `session_id` field must be set to 0, its default value. The `session_id` field can never be equal to 0 in a `Write` RPC. If it does, the server must return an `INVALID_ARGUMENT` error. -#### Valid Values for `session_id` { #sec-valid-values-for-session-id} +[#sec-valid-values-for-session-id] +==== Valid Values for `session_id` The PSA specification states that the valid *data plane* values for clone session ids (`CloneSessionId_t`) range from 0 to the maximum value supported by -the target [@PSATranslation]. Note that unlike for [multicast group -ids](#sec-valid-values-for-mg-id), 0 is a valid *data plane* value for clone +the target cite:[PSATranslation]. Note that unlike for xref:sec-valid-values-for-mg-id[multicast group ids], 0 is a valid *data plane* value for clone session ids. However, just like for multicast group ids, P4Runtime reserves 0 as a special *wildcard* value which is used to read all the clone sessions configured in the target. This means that 0 can never be used as a `session_id` value when inserting a clone session, whether or not numeric translation is enabled for clone session ids. If translation is *not* enabled, we effectively "lose" one clone session, assuming the target supports 0 as mandated by the PSA -specification. If this is an issue (⪚ because the target supports a very +specification. If this is an issue (e.g. because the target supports a very limited number of clone sessions), one can enable translation on `CloneSessionId_t` and map any non-zero SDN session id to the data plane clone session with id 0, then insert a clone session with the chosen SDN session id. -## `ValueSetEntry` +=== `ValueSetEntry` Parser Value Set is a construct in P4 that is used to support programmability of parser state transitions. A transition select statement in P4 can use a parser @@ -4768,7 +4630,8 @@ Value Set to define a runtime programmable state transition as shown in the example below. A runtime programmable set of TRILL Ethertypes is used to transition the parser state machine to the `parse_trill_types` state. -~ Begin P4Example +[source,p4] +---- state parse_l2 { @id(1) value_set(MAX_TRILL_TYPES) trill_types; extract(hdr.ethernet); @@ -4779,11 +4642,12 @@ state parse_l2 { _: reject; } } -~ End P4Example +---- The corresponding entry in the P4Info for this Value Set is: -~ Begin Prototext +[source,proto] +---- value_sets { preamble { id: 0x03000001 @@ -4796,12 +4660,13 @@ value_sets { } size: } -~ End Prototext +---- At runtime, the client writes the following update in the target (shown in Protobuf text format). -~ Begin Prototext +[source,proto] +---- type: MODIFY entity { value_set_entry { @@ -4818,7 +4683,7 @@ entity { } } } -~ End Prototext +---- As a result of the above P4Runtime programming, all packets with EtherType values of 0x22f3 and 0x893b will be parsed as per the state machine starting at @@ -4838,7 +4703,7 @@ A `ValueSetEntry` entity update message has the following fields: it matches all its `FieldMatch` messages. This is similar to how a packet matches a table entry if and only if it matches all the components of the match key for this entry. `FieldMatch` messages in a `ValueSetEntry` follow - the [same rules](#sec-match-format) as in a `TableEntry`. + the xref:sec-match-format[same rules] as in a `TableEntry`. A `ValueSetEntry` may only be modified. If the update type is `INSERT` or `DELETE`, the server must return an `INVALID_ARGUMENT` error. If the update type @@ -4846,19 +4711,19 @@ is `MODIFY`, the server writes the members given in the repeated field to the Value Set entry indexed by the given `value_set_id`. The maximum number of matches must not exceed the maximum size given by the `size` field in P4Info of the Value Set, otherwise the server must return a `RESOURCE_EXHAUSTED` error. To -empty a Value Set (&ie; restore it to its initial state), the P4Runtime client +empty a Value Set (i.e. restore it to its initial state), the P4Runtime client can perform a `MODIFY` update with an empty `members` repeated field. -To facilitate [read-write symmetry](#sec-read-write-symmetry), the server must +To facilitate xref:sec-read-write-symmetry[read-write symmetry], the server must return an `ALREADY_EXISTS` error in case of duplicate members. Unlike for match tables, a priority value is not required for ternary, range and optional matches: overlapping entries do not need to be ordered and the parse state transition is determined by whether or not the packet matches at least one entry in the set. -See Appendix [#sec-value-set-example] for a more complex Value Set example. +See Appendix <<#sec-value-set-example>> for a more complex Value Set example. -## `RegisterEntry` +=== `RegisterEntry` The PSA Register extern is a stateful memory array that can be read and written during packet forwarding. The `RegisterEntry` P4Runtime entity is used by the @@ -4885,7 +4750,8 @@ control plane operations. Register entry in the P4Info, or the server must return an `INVALID_ARGUMENT` error. -## `DigestEntry` { #sec-digestentry } +[#sec-digestentry] +=== `DigestEntry` A digest is one mechanism to send a message from the data plane to the control plane. It is traditionally used for MAC address learning: when a packet @@ -4917,12 +4783,12 @@ if they are not duplicate. digest messages are exchanged between server and client for a given `digest_id`; these parameters are: - * `max_timeout_ns`: the maximum server buffering delay in nanoseconds for an + ** `max_timeout_ns`: the maximum server buffering delay in nanoseconds for an outstanding digest message. - * `max_list_size`: the maximum digest list size --- in number of digest + ** `max_list_size`: the maximum digest list size --- in number of digest messages --- sent by the server to the client as a single `DigestList` Protobuf message. - * `ack_timeout_ns`: the timeout in nanoseconds that a server must wait for a + ** `ack_timeout_ns`: the timeout in nanoseconds that a server must wait for a digest list acknowledgement from the client before new digest messages can be generated for the same learned data. @@ -4955,7 +4821,7 @@ digest list and acted on it. The server must keep a "cache" containing the set of all digest messages that have been sent, but not acknowledged yet by the primary client, up-to `ack_timeout_ns` in the past. The server must delete all cache entries for a given digest list when they are at least `ack_timeout_ns` -old or when a matching `DigestListAck` message (&ie; with the same `digest_id` +old or when a matching `DigestListAck` message (i.e. with the same `digest_id` and `list_id` fields as the `DigestList` message) is received. The acknowledgement mechanism described above is not used to implement some sort @@ -4979,7 +4845,8 @@ status change. Here is some pseudo-code implementing the handling of digest messages in the P4Runtime server: -~ Begin CPP +[source,p4] +---- DigestStream stream; DigestCache cache; DigestBuffer buffers; @@ -5023,78 +4890,82 @@ while (true) { } sleep(X); } -~ End CPP +---- -## `ExternEntry` { #sec-extern-entry} +[#sec-extern-entry] +=== `ExternEntry` This is used to support a P4 extern entity that is not part of PSA. It is defined as: -~ Begin Proto +[source,proto] +---- message ExternEntry { uint32 extern_type_id = 1; uint32 extern_id = 2; google.protobuf.Any entry = 3; } -~ End Proto +---- Each `ExternEntry` entity maps to an `Extern` message in the -[P4Info](#sec-p4info-extern) and an `ExternInstance` message within that +xref:sec-p4info-extern[P4Info] and an `ExternInstance` message within that message. The `extern_type_id` field must be equal to the one in `ExternEntry`. The `extern_id` field must be equal to the ID included in the `preamble` of the corresponding `ExternInstance` message. -`entry` itself is embedded as an `Any` Protobuf message [@ProtoAny] to keep the +`entry` itself is embedded as an `Any` Protobuf message cite:[ProtoAny] to keep the protocol extensible. It includes the extern-specific parameters required by the P4Runtime server to perform the read or write operation. The underlying Protobuf message should be defined in a separate architecture-specific Protobuf file. See -section on [Extending P4Runtime for non-PSA -Architectures](#sec-extending-p4runtime) for more information. +section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA +Architectures] for more information. -# Error Reporting Messages { #sec-error-reporting-messages} +[#sec-error-reporting-messages] +=== Error Reporting Messages P4Runtime is based on gRPC and all RPCs return a status to indicate success or failure. gRPC supports multiple language bindings; we use C++ binding below to explain how error reporting works in the failure case. -gRPC uses `grpc::Status` [@gRPCStatus] to represent the status returned by an +gRPC uses `grpc::Status` cite:[gRPCStatus] to represent the status returned by an RPC. It has 3 attributes: -~ Begin CPP +[source,cpp] +---- StatusCode code_; grpc::string error_message_; grpc::string binary_error_details_; -~ End CPP +---- -The `code_` represents a canonical error [@gRPCStatusCodes] and describes the +The `code_` represents a canonical error cite:[gRPCStatusCodes] and describes the overall RPC status. The `error_message_` is a developer-facing error message, which should be in English. The `binary_error_details_` carries a serialized -`google.rpc.Status` message [@ProtoStatus] message, which has 3 fields: +`google.rpc.Status` message cite:[ProtoStatus] message, which has 3 fields: -~ Begin Proto +[source,proto] +---- int32 code = 1; // see code.proto string message = 2; repeated google.protobuf.Any details = 3; -~ End Proto +---- The code and message fields must be the same as `code_` and `error_message_` fields from `grpc::Status` above. The `details` field is a list that consists of `p4.Error` messages that carry error details for individual elements inside -batch-request RPCs (⪚ `Write` and `Read`). `p4.Error` includes a canonical +batch-request RPCs (e.g. `Write` and `Read`). `p4.Error` includes a canonical error code but also enables different target vendors to additionally express their own error codes in their chosen error-space. This specification document tries to cover all possible generic error cases and to provide the appropriate -value for the canonical error code based on best practices [@gRPCStatusCodes]. +value for the canonical error code based on best practices cite:[gRPCStatusCodes]. -Figure [#fig-error-report] illustrates how these messages fit together. +Figure ,,<<#fig-p4prg>>.. illustrates how these messages fit together. -~ Figure { #fig-error-report; caption: "P4Runtime Error Report Message Format" } -![error-report] -~ -[error-report]: build/error-report.[svg,png] { width: 70%; page-align: here } +.P4Runtime Error Report Message Format. +[#fig-p4prg] +image::error-report.png[] gRPC provides utility functions `ExtractErrorDetails()` and `SetErrorDetails()` -[@gRPCErrorDetails] to easily convert between `grpc::Status` and +cite:[gRPCErrorDetails] to easily convert between `grpc::Status` and `google.rpc.Status`. Please see sections on individual P4Runtime RPCs for details on how @@ -5103,10 +4974,10 @@ Please see sections on individual P4Runtime RPCs for details on how Note that P4Runtime also provides a way for the server to asynchronously report errors which occur when processing stream messages from the client. This error-reporting mechanism is orthogonal to the one described in this section, -which applies to unary RPCs. See the section on [Stream Error -Reporting](#sec-stream-error-reporting) for more information. +which applies to unary RPCs. See the section on xref:sec-stream-error-reporting[Stream Error +Reporting] for more information. -# Atomicity of Individual `Write` and `Read` Operations +=== Atomicity of Individual `Write` and `Read` Operations Each individual entity in a batch is guaranteed to be read or written atomically relative to packet forwarding. For example, for every table data plane `apply` @@ -5120,16 +4991,17 @@ data plane methods. The atomicity guarantees provided by P4Runtime for individual `Read` and `Write` operations are the same as the guarantees required by PSA and are described in -details in the PSA specification [@PSAAtomicityOfControlPlaneOps]. +details in the PSA specification cite:[PSAAtomicityOfControlPlaneOps]. -The P4~16~ language introduces an `@atomic` annotation [@P4Concurrency], to +The P4~16~ language introduces an `@atomic` annotation cite:[P4Concurrency], to guarantee atomic data plane execution of entire blocks of P4 code. P4Runtime implementations are required to honor the `@atomic` annotation for `Write` -operations, as well as [non-wildcard `Read` operations](#sec-wildcard-reads), +operations, as well as xref:sec-wildcard-reads[non-wildcard `Read` operations], relative to data plane execution. Consider the following P4 example written for PSA: -~ Begin P4Example +[source,p4] +---- control C1 { typedef bit<10> Index_t; typedef bit<32> Value_t; @@ -5144,7 +5016,7 @@ control C1 { } } } -~ End P4Example +---- If a P4Runtime server is processing messages which write to Register `r1` at index `1`, these writes must not happen between the data plane `read` and @@ -5152,7 +5024,8 @@ index `1`, these writes must not happen between the data plane `read` and Now let's consider the following example: -~ Begin P4Example +[source,p4] +---- control C1 { typedef bit<10> Index_t; typedef bit<32> Value_t; @@ -5169,7 +5042,7 @@ control C1 { } } } -~ End P4Example +---- If a P4Runtime client issues a *wildcard* `Read` on Register `r1`, there is no guarantee that `r1[1] == r1[2]` in the response, as the read for `r1[1]` may @@ -5188,12 +5061,14 @@ If the `@atomic` annotation cannot be honored with the above guarantees by the P4Runtime implementation for a P4-programmable target, we expect the P4 compiler to reject the program. -# `Write` RPC { #sec-write-rpc } +[#sec-write-rpc] +=== `Write` RPC The `Write` RPC updates one or more P4 entities on the target. The request is defined as follows: -~ Begin Proto +[source,proto] +---- message WriteRequest { uint64 device_id = 1; string role = 6; @@ -5206,29 +5081,29 @@ message WriteRequest { } Atomicity atomicity = 5; } -~ End Proto +---- The `device_id` uniquely identifies the target P4 device. The `role` and `election_id` define the client role and election-id as described in the -[Primary-Backup Arbitration and Controller -Replication](#sec-client-arbitration-and-controller-replication) -section. The server is expected to perform the following checks (in this order) +xref:sec-client-arbitration-and-controller-replication[Primary-Backup Arbitration and Controller +Replication]section. The server is expected to perform the following checks (in this order) before processing the `updates` list: -1. If `device_id` does not match any of the devices known to the P4Runtime +. If `device_id` does not match any of the devices known to the P4Runtime server or if `role` does not match any of the roles for the device, the server must return a `NOT_FOUND` error. -2. If the client is not the primary for (`device_id`, `role`) according to +. If the client is not the primary for (`device_id`, `role`) according to the `election_id` value, the server must return a `PERMISSION_DENIED` error. -3. If the `Write` is attempted before a `ForwardingPipelineConfig` has been set, +. If the `Write` is attempted before a `ForwardingPipelineConfig` has been set, the server must return a `FAILED_PRECONDITION` error. The updates field is a list of P4 entity updates to be applied. Each update is defined as: -~ Begin Proto +[source,proto] +---- message Update { enum Type { UNSPECIFIED = 0; @@ -5239,11 +5114,11 @@ message Update { Type type = 1; Entity entity = 2; } -~ End Proto +---- This is modeled as performing an update operation on the given entity against -its entity container. The entity container is either a *logical* table (⪚ -`CounterEntry`) or an actual table (⪚ `TableEntry`) in the P4 data +its entity container. The entity container is either a *logical* table (e.g. +`CounterEntry`) or an actual table (e.g. `TableEntry`) in the P4 data plane. Each entity in the container is uniquely identified by its *key*. Please refer to the [P4 Entity Messages](#sec-p4-entity-msgs) section for details on what parts of the entity specification make up the *key* for each P4 entity. @@ -5255,14 +5130,14 @@ An update can be one of the following types: If the entity already exists, an `ALREADY_EXISTS` error is returned, and the existing entity remains unchanged. If the entity is malformed, an `INVALID_ARGUMENT` error is usually returned (unless a more specific error - code applies [@gRPCStatusCodes]). If the entity cannot be inserted because the + code applies cite:[gRPCStatusCodes]). If the entity cannot be inserted because the container is already full, a `RESOURCE_EXHAUSTED` error is returned. * `MODIFY`: Modifies the P4 entity to its new specified state. This uses - *assign* or *full-snapshot* semantics, &ie; the entity field contains the + *assign* or *full-snapshot* semantics, i.e. the entity field contains the complete new state of the entity, not a diff from its previous state. If the entity is malformed, an `INVALID_ARGUMENT` error is usually returned (unless a - more specific error code applies [@gRPCStatusCodes]). If the entity does not + more specific error code applies cite:[gRPCStatusCodes]). If the entity does not exist, a `NOT_FOUND` error is returned. * `DELETE`: Deletes the specified P4 entity. If the entity does not exist, a @@ -5272,7 +5147,8 @@ An update can be one of the following types: If an update is not allowed under the given controller role, the server must return a `PERMISSION_DENIED` error for this update. -## Batching and Ordering of Updates { #sec-batching-and-ordering-of-updates} +[#sec-batching-and-ordering-of-updates] +=== Batching and Ordering of Updates P4Runtime supports batching of `Write` operations. The list of updates in a `WriteRequest` is referred to as a *batch*. A batch can consist of arbitrary @@ -5286,21 +5162,21 @@ However, **the processing of requests must be strictly serializable**. That is, given a history $S$ of `WriteRequest`s including the responses to those requests, there must exist an order $L$ for all updates in $S$, such that: -1. All updates from the same write request must appear as a contiguous +. All updates from the same write request must appear as a contiguous subsequence in $L$, but the order within that subsequence can be arbitrary. -2. For two updates $u_1$ and $u_2$, if the write request containing $u_1$ +. For two updates $u_1$ and $u_2$, if the write request containing $u_1$ completed before the write request of $u_2$ was sent, then $u_1$ must appear before $u_2$ in $L$. -3. Executing all updates in $L$ sequentially must yield the same response for +. Executing all updates in $L$ sequentially must yield the same response for every update as in $S$. -4. The observable state of the switch after $S$ (⪚, through the `Read` RPC) +. The observable state of the switch after $S$ (e.g., through the `Read` RPC) is identical to the one obtained by sequentially executing $L$. The `Write` RPC demarcates the batch boundary, and can be used to ensure ordering between dependent updates. When the `Write` RPC returns, it is required that all operations in the batch have been committed to the P4 data plane, with the exception of any operations that return an error status. If two updates -from the client depend on each other (⪚ inserting an `ActionProfileMember` +from the client depend on each other (e.g. inserting an `ActionProfileMember` followed by pointing a `TableEntry` to it) and the updates are not split into separate batches, then the behavior may be non-deterministic. Similarly, clients can invoke multiple outstanding `Write` RPCs. If the updates across @@ -5312,8 +5188,8 @@ wants to enforce that batches are applied in a specific order, each `Write` call should be sent sequentially, waiting for the previous call to be acknowledged before sending the next one. - -## Batch Atomicity { #sec-batch-atomicity} +[#sec-batch-atomicity] +=== Batch Atomicity A P4Runtime server may arbitrarily reorder messages within a batch. The atomicity semantics of the batch operations are defined by the `Atomicity` @@ -5342,7 +5218,7 @@ enum. A P4Runtime server is required to support only the modes marked as If a P4Runtime server does not support this option at all, an `UNIMPLEMENTED` error is returned at all times. If a P4Runtime - supports some batches in an rollback way but not others (⪚ it is + supports some batches in an rollback way but not others (e.g. it is more straightforward to implement batches that contain only `INSERT` operations, vs. those that contain `DELETE` operations), an `UNIMPLEMENTED` error is returned when the batch cannot be executed @@ -5372,22 +5248,22 @@ atomicity mode as it sees fit. For example, for a set of entities, a client may decide to use `DATAPLANE_ATOMIC` at one time and default behavior (`CONTINUE_ON_ERROR`) at other times. -## Error Reporting +=== Error Reporting Please see section [Error Reporting Messages](#sec-error-reporting-messages) for information on error reporting messages and guidelines. P4Runtime server will populate `grpc::Status` as follows: -1. If all batch updates succeeded, set `grpc::Status::code_` to `OK` and do not +. If all batch updates succeeded, set `grpc::Status::code_` to `OK` and do not populate any other field. -2. If an error is encountered before even trying to attempt individual batch +. If an error is encountered before even trying to attempt individual batch updates, set `grpc::Status::code_` that best describes that RPC-wide error. For example, use `UNAVAILABLE` if the P4Runtime service is not yet ready to handle requests. Set `error_message_` to describe the issue. Do not set `error_details` in this case. -3. Otherwise, if one or more updates in the batch (`WriteRequest.updates`) +. Otherwise, if one or more updates in the batch (`WriteRequest.updates`) failed, set `grpc::Status::code_` to `UNKNOWN`. For example, one update in the batch may fail with `RESOURCE_EXHAUSTED` and another with `INVALID_ARGUMENT`. A `p4.Error` message is used to capture the status of @@ -5398,7 +5274,8 @@ populate `grpc::Status` as follows: updates. If some of the updates were successful, the corresponding `p4.Error` should set the code to `OK` and omit other fields. -~ Begin Prototext +[source,prototext] +---- # Example of a grpc::Status returned for a Write RPC with a batch of 3 updates. # The first and third updates encountered an error, while the second update # succeeded. @@ -5423,20 +5300,21 @@ binary_error_details { code: 600 # ERR_ENTITY_ALREADY_EXISTS } } -~ End Prototext +---- -# `Read` RPC +=== `Read` RPC The `Read` RPC retrieves one or more P4 entities from the P4Runtime server. The request is defined as: -~ Begin Proto +[source,proto] +---- message ReadRequest { uint64 device_id = 1; string role = 3; repeated Entity entities = 2; } -~ End Proto +---- The `device_id` uniquely identifies the target P4 device. If it does not match any of the devices known to the P4Runtime server, the server must return a @@ -5455,20 +5333,21 @@ require an `election_id`, and they do not require the presence of an open The `Read `response consists of a sequence of messages (a gRPC `stream`) with each message defined as: -~ Begin Proto +[source,proto] +---- message ReadResponse { repeated Entity entities = 1; } -~ End Proto +---- The `entities` repeated field is a list of P4 entities retrieved. The client reads from the returned stream until it is closed by the server when there are no more messages. In case of error, the stream is closed prematurely by the server and the client obtains the error status (in C++ the error status is obtained by calling the `Finish()` method on the stream object -[@gRPCStreamC]). +cite:[gRPCStreamC]). -## Nomenclature +=== Nomenclature * request : An element of the `p4.ReadRequest.entities` repeated field. @@ -5477,14 +5356,15 @@ obtained by calling the `Finish()` method on the stream object Each *request* acts as a query filter for that entity type. If a *request* fully specifies the entity key, the `Read` operation should retrieve a single P4 -entity. Please refer to the [P4 Entity Messages](#sec-p4-entity-msgs) section +entity. Please refer to the xref:sec-p4-entity-msgs[P4 Entity Messages] section for details on what parts of the entity specification make up the entity *key*. -## Wildcard Reads { #sec-wildcard-reads} +[#sec-wildcard-reads] +=== Wildcard Reads P4Runtime allows wildcard read of P4 entities. A *request* may omit or use default values for parts of the entity key to achieve wildcard behavior. Please -refer to the [P4 Entity Messages](#sec-p4-entity-msgs) section for details on +refer to the xref:sec-p4-entity-msgs[P4 Entity Messages] section for details on what parts of the entity can be wildcarded in a given *request*. For example, in a *request* of type `CounterEntry`: @@ -5498,7 +5378,8 @@ For example, in a *request* of type `CounterEntry`: To read the entire forwarding state for a given device, the P4Runtime client can generate the following `ReadRequest`: -~ Begin Prototext +[source,proto] +---- device_id: entities { extern_entry { } # read all extern instances for all supported extern types @@ -5507,16 +5388,16 @@ entities { action_profile_group { } # read all groups for all action profiles ... } -~ End Prototext +---- The `entity` oneof field in the `Entity` message must always be set, or the server must return an `INVALID_ARGUMENT` error. In other words, P4Runtime does not support performing a wildcard read on the entire forwarding state by including an empty `Entity` message in the `ReadRequest`. The main reason for this decision is to prevent backwards-compatibility issues if new entity types -are added to the `entity` oneof [@ProtoOneOfBackwardsCompatibility]. +are added to the `entity` oneof cite:[ProtoOneOfBackwardsCompatibility]. -## Batch Processing +=== Batch Processing A P4Runtime server may arbitrarily reorder requests within a batch to maximize performance. There is no requirement that a particular entity type *request* @@ -5524,27 +5405,27 @@ appears only once in the batch. A P4Runtime server will process the batch as follows: -1. Lock state (preventing new writes) and validate each *request* in the batch: +. Lock state (preventing new writes) and validate each *request* in the batch: - 1. If it is a valid *request*, perform the read; + .. If it is a valid *request*, perform the read; - 1. If the read was successful, return the entities read in + ... If the read was successful, return the entities read in `ReadResponse` stream. - 2. If the read failed (exception / critical-error), prepare a `p4.Error` + ... If the read failed (exception / critical-error), prepare a `p4.Error` with code set to `INTERNAL`. - 2. If the *request* is invalid (invalid-argument, not-supported, etc.), + .. If the *request* is invalid (invalid-argument, not-supported, etc.), prepare a `p4.Error` with relevant canonical code to capture the error. -2. Unlock the state (allowing new writes); +. Unlock the state (allowing new writes); -3. Close the `ReadResponse` stream and return a `grpc::Status` as follows: +. Close the `ReadResponse` stream and return a `grpc::Status` as follows: - 1. If no errors were encountered, set code to `OK` and do not populate any + .. If no errors were encountered, set code to `OK` and do not populate any other field. - 2. Otherwise, the overall code should be set to `UNKNOWN`. See section - [Error Reporting Messages](#sec-error-reporting-messages) for information + .. Otherwise, the overall code should be set to `UNKNOWN`. See section + xref:sec-error-reporting-messages[Error Reporting Messages]for information on error reporting messages and guidelines. Assemble a list of `p4.Error` messages (from step 1 above) such that each element reflects the status of the request in the batch at the same location (1:1 @@ -5552,14 +5433,14 @@ A P4Runtime server will process the batch as follows: `google.rpc.Status.details` field. This behavior also matches `Write` RPC. -### Example +==== Example If a client asked to read `{a,b,c,d}` and `b` and `d` *requests* didn't validate, the server will return entities corresponding to `a` and `c`, followed by a status `{p4.Error(OK), p4.Error(xxx), p4.Error(yyy), p4.Error(OK)}` in the `details` field. -The P4Runtime server is not required to perform any optimization (⪚ merge two +The P4Runtime server is not required to perform any optimization (e.g. merge two *requests* in the *batch* if one is a subset of other). As a result of this, it is possible for the `ReadResponse` to contain the same entity more than once. If performance is a concern, the P4Runtime client should handle this merging. @@ -5575,10 +5456,10 @@ This could be from the same or multiple clients. P4Runtime is based on gRPC which provides a concurrent server design. A server implementation that supports concurrent RPC handlers may choose to maximize performance by using a multi-reader lock (also known as multiple-readers/single-writer lock). -Conversely (⪚ in a single-threaded architecture), it may choose to serialize +Conversely (e.g. in a single-threaded architecture), it may choose to serialize `Read` RPC processing. -## Parallelism of Read and Write Requests +==== Parallelism of Read and Write Requests A P4Runtime server may be implemented to serve at most one `ReadRequest` or `WriteRequest` message at a time, sequentially. It @@ -5616,19 +5497,20 @@ meets all of the requirements above. It is possible to meet the requirements of this specification and perform even more requests in parallel than that example -implementation allows, ⪚ if the server somehow determined that two +implementation allows, e.g. if the server somehow determined that two `WriteRequest` messages that inserted entries to the same table could not affect the results of the other, they could also be performed in parallel. It is not required that a P4Runtime server do this, and may be difficult to implement correctly. -# `SetForwardingPipelineConfig` RPC +=== `SetForwardingPipelineConfig` RPC A P4Runtime client may configure the P4Runtime target with a new P4 pipeline by invoking the `SetForwardingPipelineConfig RPC`. The request is defined as: -~ Begin Proto +[source,proto] +---- message SetForwardingPipelineConfigRequest { enum Action { UNSPECIFIED = 0; @@ -5644,16 +5526,16 @@ message SetForwardingPipelineConfigRequest { Action action = 4; ForwardingPipelineConfig config = 5; } -~ End Proto +---- The server is expected to perform the following checks (in this order) before performing the required `action`: -1. If `device_id` does not match any of the devices known to the P4Runtime +. If `device_id` does not match any of the devices known to the P4Runtime server or if `role` does not match any of the roles for the device, the server must return a `NOT_FOUND` error. -2. If the client is not the primary for (`device_id`, `role`) according to +. If the client is not the primary for (`device_id`, `role`) according to the `election_id` value, the server must return a `PERMISSION_DENIED` error. The action is the type of configuration action requested, it can be one of: @@ -5677,7 +5559,7 @@ The action is the type of configuration action requested, it can be one of: forwarding state in the target is updated by replaying the write requests to the target device since the last config was saved. Config should not be provided for this action type. Returns a `NOT_FOUND` error if no saved config - is found, &ie; if no `VERIFY_AND_SAVE` action preceded this one. Returns an + is found, i.e. if no `VERIFY_AND_SAVE` action preceded this one. Returns an `INVALID_ARGUMENT` error if a config is provided with this message. * `RECONCILE_AND_COMMIT`: verifies, saves and realizes the given config, while @@ -5693,22 +5575,23 @@ The action is the type of configuration action requested, it can be one of: The `config` field is a message of type `ForwardingPipelineConfig` that carries the P4Info, the opaque target-dependent forwarding-pipeline configuration data -(⪚ generated by the P4 compiler for the target), and, optionally, the cookie -to uniquely identify such configuration. See the [Forwarding-Pipeline -Configuration](#sec-p4-fwd-pipe-config) section for details. +(e.g. generated by the P4 compiler for the target), and, optionally, the cookie +to uniquely identify such configuration. See the xref:sec-p4-fwd-pipe-config[Forwarding-Pipeline +Configuration] section for details. A P4Runtime server running on a non-programmable device may not -support `SetForwardingPipelineConfig` (⪚ the forwarding-pipeline +support `SetForwardingPipelineConfig` (e.g. the forwarding-pipeline config is part of the device's software image, or is supplied using a different mechanism). In such cases, the RPC should return an `UNIMPLEMENTED` error. -# `GetForwardingPipelineConfig` RPC +=== `GetForwardingPipelineConfig` RPC The forwarding-pipeline configuration of the target can be retrieved by invoking the `GetForwardingPipelineConfig RPC`. The request is defined as: -~ Begin Proto +[source,proto] +---- message GetForwardingPipelineConfigRequest { enum ResponseType { ALL = 0; @@ -5719,7 +5602,7 @@ message GetForwardingPipelineConfigRequest { uint64 device_id = 1; ResponseType response_type = 2; } -~ End Proto +---- The `device_id` uniquely identifies the target P4 device. A `NOT_FOUND` error is returned if the `device_id` is not recognized by the P4Runtime server. @@ -5743,11 +5626,12 @@ its value can be one of: The response contains the `ForwardingPipelineConfig` for the specified device: -~ Begin Proto +[source,proto] +---- message GetForwardingPipelineConfigResponse { ForwardingPipelineConfig config = 1; } -~ End Proto +---- If a P4Runtime server is in a state where the forwarding-pipeline config is not known, the top-level `config` field will be unset in the response. Examples are @@ -5769,9 +5653,10 @@ If a P4Runtime server supports both `SetForwardingPipelineConfig` as well as returning the `p4_device_config`, there should be read-write symmetry between `SetForwardingPipelineConfig` and `GetForwardingPipelineConfig` RPCs. -# P4Runtime Stream Messages +=== P4Runtime Stream Messages -## Packet I/O { #sec-packet-i_o} +[#sec-packet-i_o] +==== Packet I/O P4Runtime supports controller packet-in and packet-out by means of `PacketIn` and `PacketOut` stream messages, respectively. @@ -5781,10 +5666,10 @@ and `PacketOut` stream messages, respectively. message received by the server from a client which is not allowed to send such messages based on its current role definition must be dropped. The server may also generate a `StreamMessageResponse` message with the `error` field set to -report the error to the client. See the section on [Stream Error -Reporting](#sec-stream-error-reporting) for more information on `error`. +report the error to the client. See the section on xref:sec-stream-error-reporting[Stream Error +Reporting]for more information on `error`. -As introduced in the [`ControllerPacketMetadata`](#sec-controller-packet-meta) +As introduced in the xref:sec-controller-packet-meta[`ControllerPacketMetadata`] section, such messages can carry arbitrary metadata specified by means of P4 headers annotated with `@controller_header`. The expected metadata is described in the P4Info using the `ControllerPacketMetadata` messages. @@ -5792,7 +5677,8 @@ in the P4Info using the `ControllerPacketMetadata` messages. Both `PacketIn` and `PacketOut` stream messages share the same fields and are defined as follows: -~ Begin Proto +[source,proto] +---- // Packet sent from the controller to the switch. message PacketOut { bytes payload = 1; @@ -5810,7 +5696,7 @@ message PacketMetadata { uint32 metadata_id = 1; bytes value = 2; } -~ End Proto +---- * `payload` is used to carry the full packet content, including the headers. @@ -5824,13 +5710,13 @@ message PacketMetadata { to be consistent with what is specified in the corresponding P4Info `ControllerPacketMetadata.Metadata` message with the same `id`, in the following sense: - + If `ControllerPacketMetadata.Metadata.bitwidth` is set, or if + ** If `ControllerPacketMetadata.Metadata.bitwidth` is set, or if `ControllerPacketMetadata.Metadata.type_name` is set and `P4NewTypeSpec.translated_type.sdn_bitwidth` is set in the `P4NewTypeSpec` for the type name, then `PacketMetadata.value` must be a binary string of the specified bit width conforming to the [Bytestrings](#sec-bytestrings) requirements. - + If `ControllerPacketMetadata.Metadata.type_name` is set and + ** If `ControllerPacketMetadata.Metadata.type_name` is set and `P4NewTypeSpec.translated_type.sdn_string` is set in the `P4NewTypeSpec` message for the specified type name, then `PacketMetadata.value` can be an arbitrary SDN string subject to the @@ -5842,7 +5728,7 @@ message PacketMetadata { the section on [Stream Error Reporting](#sec-stream-error-reporting) for more information on `error`. -## Client Arbitration Update +==== Client Arbitration Update P4Runtime's client arbitration mechanism ensures that only the current primary can modify state on the switch, and that the `election_id` is monotonically @@ -5858,9 +5744,7 @@ controller first opens a bidirectional stream channel to the server via `StreamChannel` for each device and sends a `StreamMessageRequest` message. The controller populates the `MasterArbitrationUpdate` field in this message using its `role` and `election_id` and the `device_id` of the device, as explained -in detail in the [Client Arbitration and Controller -Replication](#sec-client-arbitration-and-controller-replication) -section. For any given `(device_id, role)`, the P4Runtime server keeps track +in detail in the xref:sec-client-arbitration-and-controller-replication[Client Arbitration and Controller Replication] section. For any given `(device_id, role)`, the P4Runtime server keeps track of the highest `election_id` that it has ever received. If a controller's `election_id` is equal to the highest `election_id` that the server has ever received, that controller is the primary. All other controllers are backups. @@ -5870,12 +5754,13 @@ primary. There can be at most one primary, because for any given This invariant must be maintained across in-service software upgrades, and the P4Runtime server must remember the highest `election_id` after such a restart. -However, across a [full restart](#sec-restarts), the `election_id` must be +However, across a xref:sec-restarts[full restart], the `election_id` must be reset. In fact, a full restart is the only way to reset the `election_id`. The `MasterArbitrationUpdate` message is defined as follows: -~ Begin Proto +[source,proto] +---- message MasterArbitrationUpdate { uint64 device_id = 1; // The role for which the primary client is being arbitrated. For use-cases @@ -5903,7 +5788,7 @@ message Role { // out-of-scope of P4Runtime. .google.protobuf.Any config = 2; } -~ End Proto +---- Note that the `status` field in the `MasterArbitrationUpdate` message is not populated by the controller. This field is populated by the P4Runtime server @@ -5911,9 +5796,9 @@ when it sends a `StreamMessageResponse` message back to the controller, in which it populates the `MasterArbitrationUpdate` message using the `device_id`, `role`, and `election_id` it previously received from the controller. The server also populates the `status` field in the `MasterArbitrationUpdate` according to -the rules in an [earlier section](#sec-arbitration-updates). +the rules in an xref:sec-arbitration-updates[earlier section]. -### Unset Election ID +===== Unset Election ID The sender need not specify an `election_id`. If the `election_id` is unset, the sender's `election_id` is considered lower than any @@ -5927,18 +5812,19 @@ Note that election_id : { high: 0 low: 0 } ``` is different from an unset `election_id`, see -[the section on default-valued fields](#sec-default-valued-fields). +xref:sec-default-valued-fields[the section on default-valued fields]. -## Digest Messages +==== Digest Messages See the [DigestEntry](#sec-digestentry) section. -## Table Idle Timeout Notification { #sec-table-idle-timeout-notification} +[#sec-table-idle-timeout-notification] +==== Table Idle Timeout Notification When a table supports idle timeout (as per the P4Info message), the primary client can specify a TTL value for each entry in the table (see -[Idle-timeout](#sec-idle-timeout) section). If the data plane entry is not hit +xref:sec-idle-timeout[Idle-timeout] section). If the data plane entry is not hit for a lapse of time greater or equal to the TTL, the P4Runtime server should, with best effort, generate an `IdleTimeoutNotification` message on the `StreamChannel` bidirectional stream to the primary client. The primary client @@ -5976,7 +5862,8 @@ server software, the channel or the client can handle. Here is a reasonable pseudo-code implementation for idle timeout for table entries: -~ Begin CPP +[source,cpp] +---- IdleTimeoutStream stream; scanning_interval = 10ms; @@ -6002,19 +5889,19 @@ while (true) { } sleep(scanning_interval); } -~ End CPP +---- -## Architecture-Specific Notifications +==== Architecture-Specific Notifications P4Runtime supports streaming arbitrary Protobuf messages between the server and -the client on `StreamChannel`, by including an `Any` Protobuf field [@ProtoAny] +the client on `StreamChannel`, by including an `Any` Protobuf field cite:[ProtoAny] named `other` in both `StreamMessageRequest` and `StreamMessageResponse`. This enables support for architecture-specific externs which require asynchronous -streaming of data from the server to the client, much like the [PSA `Digest` -extern](#sec-digestentry). See section on [Extending P4Runtime for non-PSA -Architectures](#sec-extending-p4runtime) for more information. +streaming of data from the server to the client, much like the xref:sec-digestentry[PSA `Digest` +extern]. See section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures]for more information. -## Stream Error Reporting { #sec-stream-error-reporting} +[#sec-stream-error-reporting] +==== Stream Error Reporting The P4Runtime server can asynchronously report errors which occur when processing `StreamMessageRequest` messages, using the `error` message field (of @@ -6025,7 +5912,7 @@ out-of-band mechanism to enable / disable this feature. The `StreamError` message has the following fields: * `canonical_code`, which must be set to the appropriate canonical error code - [@gRPCStatusCodes]. + cite:[gRPCStatusCodes]. * `message`, an optional developer-facing error message describing the error. * `space` and `code`, which are optional and can be used by vendors to provide additional details on the error. `code` is a numeric error code drawn from a @@ -6043,7 +5930,7 @@ The `StreamError` message has the following fields: `PacketOut` message received on the stream channel) so that the client can know exactly what packet-out triggered the error. -The appropriate canonical error code [@gRPCStatusCodes] should be used when +The appropriate canonical error code cite:[gRPCStatusCodes] should be used when populating the `canonical_code` field. For example: * if a controller is not allowed to send a `PacketOut` message under its @@ -6056,21 +5943,22 @@ populating the `canonical_code` field. For example: in P4Info, the code should be set to `INVALID_ARGUMENT`. The server may choose to assign a lower priority to error reporting messages and -drop them first if the stream channel comes under heavy load, ⪚ because of a +drop them first if the stream channel comes under heavy load, e.g. because of a burst of `PacketIn` messages. Note that client arbitration errors are never reported using the `StreamError` message. Invalid `MasterArbitrationUpdate` messages sent by the client cause the stream to be terminated and the appropriate error code to be returned to the client immediately. See section [#sec-arbitration-updates]. - -### Examples of `StreamError` Messages +==== Examples of `StreamError` Messages * **Malformed packet-out metadata.** If the server receives a `PacketOut` message with a `metadata` field with id 7 which is not included in the P4Info `ControllerPacketMetadata` message for "packet_out", the server may send the following `StreamMessageResponse` back to the client: -~ Begin Prototext + +[source,prototext] +---- error { canonical_code: 3 # INVALID_ARGUMENT message: "Unknown metadata field id 7." @@ -6086,14 +5974,15 @@ error { # more metadata } } -} -~ End Prototext +---- * **Packet-out which exceeds the MTU.** If the server receives a `PacketOut` message which requires injecting a raw data plane packet that exceeds the MTU (Maximum Transmission Unit) for the egress link, the server may generate the following `StreamMessageResponse`: -~ Begin Prototext + +[source,prototext] +---- error { canonical_code: 3 # INVALID_ARGUMENT message: "Packet exceeds the MTU for port." @@ -6104,42 +5993,43 @@ error { # extra information to the client } } -~ End Prototext +---- -# `Capabilities` RPC +=== `Capabilities` RPC The `Capabilities` RPC offers a mechanism through which a P4Runtime client can discover the capabilities of the P4Runtime server implementation. At the moment, the `CapabilitiesRequest` message is empty and the `CapabilitiesResponse` message only includes the `p4runtime_api_version` string field. This field must -be set to the full semantic version string [@SemVer] corresponding to the -version of the P4Runtime API implemented by the server, ⪚ "1.1.0-rc.1". +be set to the full semantic version string cite:[SemVer] corresponding to the +version of the P4Runtime API implemented by the server, e.g. "1.1.0-rc.1". Future versions of P4Runtime may introduce more advanced capability discovery -features. For example, P4Runtime supports three [atomicity -modes](#sec-batch-atomicity) for `WriteRequest` batches, two of them being +features. For example, P4Runtime supports three xref:sec-batch-atomicity[atomicity +modes] for `WriteRequest` batches, two of them being optional. In the future we may decide to leverage the `CapabilitiesResponse` message to enable the server to report to the client which subset of these atomicity modes is supported. The semantic version string included in `CapabilitiesResponse` can be used by the client to determine which exact feature set is implemented by the server, -since [minor releases](#sec-p4runtime-versioning) may introduce new +since xref:sec-p4runtime-versioning[minor releases] may introduce new functionality. However, because the `Capabilities` RPC itself was introduced in version 1.1 of P4Runtime, the client should assume that any server which does -not implement this RPC (&ie; an `UNIMPLEMENTED` error is returned by the +not implement this RPC (i.e. an `UNIMPLEMENTED` error is returned by the P4Runtime service) implements an older version of the P4Runtime specification (1.0 or a pre-release version of 1.0). -# Portability Considerations +=== Portability Considerations -## PSA Metadata Translation { #sec-psa-metadata-translation} +[#sec-psa-metadata-translation] +==== PSA Metadata Translation The *Portable Switch Architecture* (PSA) defines standard metadata, whose data plane types are different on different PSA targets. In order to enable uniform programming of multiple PSA targets, a centralized remote controller may define its own types and numbering of such PSA standard metadata -[@PSATranslation]. For such metadata, a translation between the controller's +cite:[PSATranslation]. For such metadata, a translation between the controller's metadata values and the corresponding target-specific metadata values is required at runtime. In this section, we will base our discussions on port metadata, although the same translation principles apply to other standard PSA @@ -6147,14 +6037,11 @@ metadata such as class of service. Since the `@p4runtime_translation` annotation can be applied to any user-defined type, these principles also apply to translated types which are not declared as part of the PSA architecture. -~ Figure { #fig-psa-metadata-translation; \ -caption: "P4Runtime Metadata Translation for the Portable Switch Architecture" } -![psa-metadata-translation] -~ -[psa-metadata-translation]: build/psa-metadata-translation.[svg,png] \ -{ height: 7cm; page-align: here } +.P4Runtime Metadata Translation for the Portable Switch Architecture +[#fig-psa-metadata-translation] +image::psa-metadata-translation.png[] -Figure [#fig-psa-metadata-translation] illustrates a motivating example, +Figure <<#fig-psa-metadata-translation>> illustrates a motivating example, where a centralized controller is controlling two P4Runtime targets in a fabric. Switch 1 and Switch 2 use different PSA devices, each defining its own port type and number space. In this example, Switch 1 uses a device with 9-bit space for @@ -6165,26 +6052,28 @@ numbers to a target's 9-bit or 10-bit port numbers is input to the switch via the non-forwarding switch config data that is delivered separately to the switch. -### Translation of Port Numbers { #sec-translation-of-port-numbers} +[#sec-translation-of-port-numbers] +==== Translation of Port Numbers In order to support the above SDN use case, P4Runtime requires translation of port metadata values between the controller's space and the PSA device's space as needed. Such translation is enabled by identifying a P4 entity (match field, action parameter, controller-header field or other) as being a PSA port metadata type. For this purpose, PSA defines the port metadata field type using special -[user-defined P4 types](#sec-user-defined-types), namely `PortId_t` and +xref:sec-user-defined-types[user-defined P4 types], namely `PortId_t` and `PortIdInHeader_t`, instead of standard P4 bitstrings. The P4Info entries for all P4 entities whose type is one of the special PSA port types use a controller-defined 32-bit type instead of the data plane bitwidth defined in the P4 program. The following PSA port metadata types are defined in *psa.p4* for the PSA device in Switch 1. -~ Begin P4Example +[source,p4] +---- @p4runtime_translation("p4.org/psa/v1/PortId_t", 32) type bit<9> PortId_t; @p4runtime_translation("p4.org/psa/v1/PortIdInHeader_t", 32) type bit<32> PortIdInHeader_t; -~ End P4Example +---- The first argument to the `@p4runtime_translation` annotation is a URI that indicates to the P4Runtime server which numerical mapping --- provided by the @@ -6198,7 +6087,8 @@ ports in the device-specific port number space. P4Runtime reserves device-independent and controller-specific 32-bit constants for the CPU port and the recirculation port as follows: -~ Begin Proto +[source,proto] +---- enum SdnPort { SDN_PORT_UNKNOWN = 0; @@ -6213,7 +6103,7 @@ enum SdnPort { SDN_PORT_RECIRCULATE = 0xfffffffa; SDN_PORT_CPU = 0xfffffffd; } -~ End Proto +---- The switch config will map `SDN_PORT_RECIRCULATE` and `SDN_PORT_CPU` --- as well as any SDN port number corresponding to a "regular" front-panel port --- to the @@ -6223,12 +6113,13 @@ perform the translation. The sub-sections below detail the translation mechanics for different usage of PSA port types in P4 programs. -### Translation of Packet-IO Header Fields +===== Translation of Packet-IO Header Fields Port type fields can be part of header types. For example, ports may be part of Packet IO headers, as in the following example:. -~ Begin P4Example +[source,p4] +---- @controller_header("packet_out") header PacketOut_t { PortIdInHeader_t egress_port; @@ -6238,7 +6129,7 @@ header PacketOut_t { header PacketIn_t { PortIdInHeader_t ingress_port; } -~ End P4Example +---- The header-level annotation `@controller_header` is a standard P4Runtime annotation that identifies a header type for a controller packet-out or @@ -6264,12 +6155,13 @@ config. The server will then insert the translated controller-specific value in the packet-in metadata fields before sending the packet over the stream channel to the controller. -### Translation of Match Fields +===== Translation of Match Fields Port type entities, particularly ingress and egress port standard metadata, may be used as match fields in a P4 table's match key as shown in the example below: -~ Begin P4Example +[source,p4] +---- table t { key = { istd.ingress_port: exact; // PSA standard metadata ingress port @@ -6278,7 +6170,7 @@ table t { drop; } } -~ End P4Example +---- Table `t` has an exact match on PSA standard metadata ingress port (`istd.ingress_port`). Since the field is of type `PortId_t`, the P4Info @@ -6299,12 +6191,13 @@ require that for these match kinds the port match be either *de facto* "exact" (0xffffffff mask for `TERNARY`, prefix-length of 32 for `LPM`, or same low and high bounds for `RANGE`) or "don't care". -### Translation of Action Parameters +===== Translation of Action Parameters `PortId_t` type parameters can be part of a P4 action definition as shown in the example below: -~ Begin P4Example +[source,p4] +---- action a(PortId_t p) { istd.egress_port = p; // PSA standard metadata egress port } @@ -6317,7 +6210,7 @@ table t { a; } } -~ End P4Example +---- The controller may write entries in table `t` with action `a` to set the egress port as shown in the P4 code above. The action parameter `p` is of type @@ -6327,7 +6220,7 @@ translation is required for this parameter. The P4Runtime server will use the switch configuration to translate action parameter values between the controller and the target device. -### Port Translation for PSA Extern APIs +===== Port Translation for PSA Extern APIs The P4Runtime API for action selectors supports specifying a watch field per member in an action profile group that is programmed in a selector. This field @@ -6347,25 +6240,27 @@ representation of the port(s). The P4Runtime server will translate these SDN ports to device-specific port numbers for multicasting and cloning in the data plane. -### Using Port as an Index to a Register, Indirect Counter or Indirect Meter +===== Using Port as an Index to a Register, Indirect Counter or Indirect Meter P4Runtime supports using a translated value (`PortId_t` or any other translated type for which the underlying built-in type is `bit`) as an index to a register, indirect counter, or indirect meter. -~ Begin P4Example +[source,p4] +---- Counter /* counter entry type */, PortId_t /* index type */>( 32w1024, PSA_CounterType_t.PACKETS) counter; action a(PortId_t p) { istd.egress_port = p; // PSA standard metadata egress port counter.count(p); } -~ End P4Example +---- This P4 Counter declaration will translate into the following entry in the P4Info messsage: -~ Begin Prototext +[source,prototext] +---- counters { preamble { id: 0x12000001 @@ -6378,17 +6273,18 @@ counters { name: "PortId_t" } } -~ End Prototext +---- The controller may read and write counter values from indexed counter `counter` using SDN port numbers as indices, and not device-specific port numbers. The `index_type_name` field in the P4Info message is a signal to the P4Runtime server that translation is required. -# P4Runtime Versioning { #sec-p4runtime-versioning} +[#sec-p4runtime-versioning] +=== P4Runtime Versioning P4Runtime follows the Google guidelines for versioning cloud APIs -[@APIVersioning]. We use a `MAJOR.MINOR.PATCH` style version number scheme and +cite:[APIVersioning]. We use a `MAJOR.MINOR.PATCH` style version number scheme and we increment the: * `MAJOR` version when we make incompatible API changes, @@ -6403,13 +6299,13 @@ different Protobuf packages, `p4` depends on `p4.config` and is not meant to be used without it, which is why both packages use the same versioning scheme and the same versioning cadence. -As recommended in [@APIVersioning], we may consider using pre-GA release +As recommended in cite:[APIVersioning], we may consider using pre-GA release suffixes (such as *alpha* or *beta*) in the Protobuf package name for future major versions, although we have chosen not to do so when developing version 1 (v1). Within a major version, the API must be evolved in a Protobuf -backwards-compatible manner. [@APIVersioningBackwardsCompatibility] describes +backwards-compatible manner. cite:[APIVersioningBackwardsCompatibility] describes what constitute a backwards-compatible change. We expect `MAJOR` version bumps to be a **rare** event. @@ -6421,10 +6317,11 @@ attempting to connect to the corresponding service. We may consider including a P4Runtime RPC to query minor + patch version numbers in future releases. All versions of P4Runtime, including pre-release versions, are tagged in the -P4Runtime Github repository [@P4RuntimeRepo] and the version label follows -semantic versioning rules [@SemVer]. +P4Runtime Github repository cite:[P4RuntimeRepo] and the version label follows +semantic versioning rules cite:[SemVer]. -# Extending P4Runtime for non-PSA Architectures { #sec-extending-p4runtime} +[#sec-extending-p4runtime] +=== Extending P4Runtime for non-PSA Architectures P4Runtime includes native support for PSA programs and in particular support for runtime control of PSA extern instances. While the definition of Protobuf @@ -6447,7 +6344,7 @@ as the major version number for the P4Runtime version they "extend". For the remainder of this section, we will refer to these two files as *p4info-ext* and *p4runtime-ext* respectively. -## Extending P4Runtime for Architecture-Specific Externs +==== Extending P4Runtime for Architecture-Specific Externs Each P4 architecture can define its own set of extern types. Controlling them at runtime requires defining new Protobuf messages in both *p4info-ext* and @@ -6455,79 +6352,82 @@ runtime requires defining new Protobuf messages in both *p4info-ext* and that the new architecture we are trying to support in P4Runtime includes the following extern definition, which we will use as a running example: -~ Begin P4Example +[source,p4] +---- // T must be a bit type, it indicates the width of each counter cell extern MyNewPacketCounter { counter(bit<32> size); increment(in bit<32> index); } -~ End P4Example +---- -### Extending the P4Info message +===== Extending the P4Info message * Id prefixes `0x81` through `0xfe` are reserved for architecture-specific externs. It is recommended that *p4info-ext* include a `P4Ids` message based - on the one in p4info.proto that the P4 compiler can refer to when [assigning - IDs](#sec-id-allocation) to each extern instance. + on the one in p4info.proto that the P4 compiler can refer to when xref:sec-id-allocation[assigning IDs] to each extern instance. -~ Begin Proto +[source,proto] +---- message P4Ids { enum Prefix { UNSPECIFIED = 0; MY_NEW_PACKET_COUNTER = 0x81; } } -~ End Proto +---- * *p4info-ext* should include a Protobuf message definition for every extern type that can be controlled at runtime. For every extern instance of this type, the compiler will generate an instance of this Protobuf message and embed it appropriately in the corresponding - [`p4.config.v1.ExternInstance`](#sec-p4info-extern) message as the `info` - field, which is of type `Any` [@ProtoAny]. + xref:sec-p4info-extern[`p4.config.v1.ExternInstance`] message as the `info` + field, which is of type `Any` cite:[ProtoAny]. -~ Begin Proto +[source,proto] +---- message MyNewPacketCounter { // corresponds to the T type parameter in the P4 extern definition p4.config.v1.P4DataTypeSpec type_spec = 1; // constructor argument int64 size = 2; } -~ End Proto +---- -### Extending the P4Runtime Service +===== Extending the P4Runtime Service Just like *p4info-ext*, *p4runtime-ext* should include a Protobuf message definition for every extern type that can be controlled at runtime. This message should include the extern-specific parameters defining the read or write operation to be performed by the P4Runtime server on the corresponding extern instance. Instances of this architecture-specific message are meant to be -embedded in an [`ExternEntry`](#sec-extern-entry) message generated by the +embedded in an xref:sec-extern-entry[`ExternEntry`] message generated by the P4Runtime client. Here is a possible Protobuf message for our `MyNewPacketCounter` P4 extern: -~ Begin Proto +[source,proto] +---- // This message enables reading / writing data to the counter at the provided // index message MyNewPacketCounter { int64 index = 1; p4.v1.P4Data data = 2; } -~ End Proto +---- P4Runtime also supports streaming arbitrary Protobuf messages between the server -and the client, by including an `Any` Protobuf field [@ProtoAny] named `other` +and the client, by including an `Any` Protobuf field cite:[ProtoAny] named `other` in both `p4.v1.StreamMessageRequest` and `p4.v1.StreamMessageResponse`. Architectures that wish to leverage this support should define the appropriate Protobuf messages for this bidirectional streaming in *p4runtime-ext* and embed instances of these messages in `p4.v1.StreamMessageRequest` and `p4.v1.StreamMessageResponse` as appropriate. -## Architecture-Specific Table Extensions +==== Architecture-Specific Table Extensions -### New Match Types +===== New Match Types -An architecture may introduce new table match types [@P4MatchTypes]. P4Runtime +An architecture may introduce new table match types cite:[P4MatchTypes]. P4Runtime accounts for this by providing the following hooks: * The `match` field in `p4.config.v1.MatchField` (p4info.proto) is a `oneof` @@ -6536,7 +6436,7 @@ accounts for this by providing the following hooks: string. * The `field_match_type` field in `p4.v1.FieldMatch` (p4runtime.proto) is a - `oneof` which includes an `Any` Protobuf message [@ProtoAny] field + `oneof` which includes an `Any` Protobuf message cite:[ProtoAny] field (`other`). *p4info-ext* should include a Protobuf message definition for each architecture-specific match type, which can be used to encode values for match key elements which use this match type type in the P4 table @@ -6544,30 +6444,30 @@ accounts for this by providing the following hooks: `other` field, which can then be decoded by the P4Runtime server using the match type name included in P4Info. -### New Table Properties +===== New Table Properties An architecture may introduce additional table properties -[@P4TableProperties]. In some instances, it can be desirable to include the +cite:[P4TableProperties]. In some instances, it can be desirable to include the information contained in table properties in P4Info, which is why the `p4.config.v1.Table` message includes the `other_properties` `Any` Protobuf -field [@ProtoAny]. At the moment, there is not any mechanism to extend the +field cite:[ProtoAny]. At the moment, there is not any mechanism to extend the `p4.v1.TableEntry` message based on the value of architecture-specific table properties, but we may include on in future versions of the API. -# Known Limitations of Current P4Runtime Version +=== Known Limitations of Current P4Runtime Version * `FieldMatch`, action `Param`, and controller packet metadata fields only - support unsigned bitstrings, &ie; values of one of the following types (not + support unsigned bitstrings, i.e. values of one of the following types (not the more general `P4Data`): - * `bit` - * `bool`. Note that as far as the `P4Info` message contents and + ** `bit` + ** `bool`. Note that as far as the `P4Info` message contents and thus controller software is concerned, such fields of type `bool` will be indistinguishable from those that have been declared with type `bit<1>`. P4Runtime server software will automatically perform any conversion needed between the type `bit<1>` values in P4Runtime messages and the data plane representation. - * an `enum` with underlying type `bit` - * a `type` or `typedef` with an underlying type that is one of the above (or + ** an `enum` with underlying type `bit` + ** a `type` or `typedef` with an underlying type that is one of the above (or in general a "chain" of `type` and/or `typedef` that eventually ends with one of the types above) @@ -6587,19 +6487,19 @@ properties, but we may include on in future versions of the API. in particular, there is no way for a client to query the supported minor + patch version numbers. -# Appendix { @h1:"A"} - -## Revision History +[appendix] += Appendix -### Changes in v1.4.1 +=== Revision History +==== Changes in v1.4.1 No content changes; tag was incremented only. -### Changes in v1.4.0 +==== Changes in v1.4.0 * Actions - * Fix invalid `action_profile_id` in the One Shot Action Selector Programming - example. - * Specify that `max_group_size` must be less than or equal to `size` for +* Fix invalid `action_profile_id` in the One Shot Action Selector Programming + example. + Specify that `max_group_size` must be less than or equal to `size` for Action Selectors. * Add a `selector_size_semantics` field to the `ActionProfile` message in P4Info. @@ -6619,7 +6519,7 @@ No content changes; tag was incremented only. unique for live controllers. * Generated code - * Enable C++ Arena Allocation [@ArenaAllocation] by default in + * Enable C++ Arena Allocation cite:[ArenaAllocation] by default in p4runtime.proto. * Added Rust code generation @@ -6627,7 +6527,7 @@ No content changes; tag was incremented only. * Add a `Type` field to the `MeterSpec` message allowing users to restrict the type of meters that can be used for a table and a new `eburst` field to the `MeterConfig` message for use with one of the new `MeterSpec` types. - See section on [Meter & DirectMeter](#sec-meter-directmeter). + See section on xref:sec-meter-directmeter[Meter & DirectMeter]. * Defined new meter annotations `@two_rate_three_color`, `@single_rate_two_color`, `@single_rate_three_color` * Enable P4Runtime servers to provide per-color counter values when direct or @@ -6641,11 +6541,9 @@ No content changes; tag was incremented only. * Clarify that for updates of type `INSERT`, error codes other than `INVALID_ARGUMENT` can be returned when applicable. * Clarified the meaning of set and unset scalar and message fields, see - section on [default-valued fields](#sec-default-valued-fields). - * Described Dataplane Volatile Objects, see section on - [Dataplane Volatile Objects](sec-data-plane-volatile-objects). - * Clarified use of bytestrings in messages, see section on - [Bytestrings](#sec-bytestrings) + section on xref:sec-default-valued-fields[default-valued fields]. + * Described Dataplane Volatile Objects, see section on xref:sec-data-plane-volatile-objects[Dataplane Volatile Objects]. + * Clarified use of bytestrings in messages, see section on xref:sec-bytestrings[Bytestrings]. * Replication * Add a `metadata` field to the `MulticastGroupEntry` message. @@ -6661,8 +6559,7 @@ No content changes; tag was incremented only. * Add `has_initial_entries` and `is_const` field fields to `Table` message to distinguish mutable and immutable initial table entries, see section on [Constant Tables](#sec-constant-tables). - -### Changes in v1.3.0 +* ==== Changes in v1.3.0 * Add IANA assigned TCP port, 9559, to P4Runtime server discussion. * Move "Security considerations" section to P4Runtime server discussion. @@ -6673,10 +6570,10 @@ No content changes; tag was incremented only. * Clarify that source locations for annotations are optional in the P4Info message. -### Changes in v1.2.0 +==== Changes in v1.2.0 * Add new `OPTIONAL` match kind. At the moment, `OPTIONAL` is only supported by - the v1model architecture [@v1model], and not by PSA. It will eventually be + the v1model architecture cite:[v1model], and not by PSA. It will eventually be included in the core P4 language. * Add support in P4Info for structured annotations, which are used to annotate objects with key-value lists or expression lists. @@ -6693,7 +6590,7 @@ No content changes; tag was incremented only. * Add optional P4 source locations to both structured and unstructured annotations. -### Changes in v1.1.0 +==== Changes in v1.1.0 * Major overhaul of master-arbitration: while the Protobuf messages did not change, the state machine that the server needs to implement is significantly @@ -6718,39 +6615,39 @@ No content changes; tag was incremented only. * Document that `@p4runtime_translation` need only be supported when applied to type declarations in P4. -## P4 Annotations +=== P4 Annotations -Table [#tab-p4-annotations] lists P4~16~ annotations introduced primarily for +Table <<#tab-p4-annotations>> lists P4~16~ annotations introduced primarily for the purpose of adding features for the P4Runtime API. -~ TableFigure { #tab-p4-annotations; \ - caption: "P4 annotations introduced by P4Runtime"; \ - page-align: forcehere; } -|-------------------------- |---------------------------------------| -| Annotation | Description | -+----------------------------+---------------------------------------+ -| `@brief` | See section [#sec-annotating-p4-entities-with-documentation] | -| `@controller_header` | See section [#sec-controller-packet-meta] | -| `@description` | See section [#sec-annotating-p4-entities-with-documentation] | -| `@id` | See section [#sec-id-allocation] | -| `@max_group_size` | See sections [#sec-p4info-action-profile], [#sec-action-profile-group-programming] | -| `@selector_size_semantics` | See section [#sec-p4info-action-profile] | -| `@max_member_weight` | See section [#sec-p4info-action-profile] | -| `@two_rate_three_color` | See section [#sec-meter-directmeter] | -| `@single_rate_three_color` | See section [#sec-meter-directmeter] | -| `@single_rate_two_color` | See section [#sec-meter-directmeter] | -| `@pkginfo` | See section [#sec-annotating-p4-code-with-pkginfo] | -| `@platform_property` | See section [#sec-annotating-p4-code-with-pkginfo] | -| `@p4runtime_translation` | See sections [#sec-user-defined-types], [#sec-translation-of-port-numbers] | -+----------------------------+---------------------------------------+ -~ - -## A More Complex Value Set Example { #sec-value-set-example} +.Example of statically-assigned P4Info object IDs +[cols="2",width=80%, align=center, options=header, unbreakable] +[#tab-p4-annotations] +|=== +| Annotation | Description +| `@brief` | See section <<#sec-annotating-p4-entities-with-documentation>> +| `@controller_header` | See section <<#sec-controller-packet-meta>> +| `@description` | See section <<#sec-annotating-p4-entities-with-documentation>> +| `@id` | See section <<#sec-id-allocation>> +| `@max_group_size` | See sections <<#sec-p4info-action-profile>>, <<#sec-action-profile-group-programming>> +| `@selector_size_semantics` | See section <<#sec-p4info-action-profile>> +| `@max_member_weight` | See section <<#sec-p4info-action-profile>> +| `@two_rate_three_color` | See section <<#sec-meter-directmeter>> +| `@single_rate_three_color` | See section <<#sec-meter-directmeter>> +| `@single_rate_two_color` | See section <<#sec-meter-directmeter>> +| `@pkginfo` | See section <<#sec-annotating-p4-code-with-pkginfo>> +| `@platform_property` | See section <<#sec-annotating-p4-code-with-pkginfo>> +| `@p4runtime_translation` | See sections <<#sec-user-defined-types>>, <<#sec-translation-of-port-numbers>> +|=== + +[#sec-value-set-example] +==== A More Complex Value Set Example This section includes a more complex Value Set example, with multiple matches of different kinds. -~ Begin P4Example +[source,p4] +---- struct match_t { bit<8> f8; @match(ternary) bit<16> f16; @@ -6758,12 +6655,13 @@ struct match_t { } @id(1) value_set(4) pvs; select ({ hdr.f8, hdr.f16, hdr.f32 }) { /* ... */ } -~ End P4Example +---- This P4 Value Set declaration will translate into the following entry in the P4Info messsage: -~ Begin Prototext +[source,prototext] +---- value_sets { preamble { id: 0x03000001 @@ -6789,12 +6687,13 @@ value_sets { } size: 4 } -~ End Prototext +---- A P4Runtime client can set the membership for this Value Set with `WriteRequest` messages similar to this one: -~ Begin Prototext +[source,prototext] +---- type: MODIFY entity { value_set_entry { @@ -6826,21 +6725,20 @@ entity { } } } -~ End Prototext +---- - -## Guidelines for Implementations +=== Guidelines for Implementations This section contains practical advice for implementing P4Runtime clients and servers. -### gRPC Metadata Maximum Size +==== gRPC Metadata Maximum Size In gRPC, the status of a RPC request is sent as metadata, whose size is limited by the `grpc.max_metadata_size` gRPC channel argument. By default, this limit is 8KB, which can be a problem for the `Write` P4Runtime RPC. The `Write` RPC returns an individual error for every item in a batch (see Section -[#sec-write-rpc]), which can quickly result in a status size over 8KB. In that +<<#sec-write-rpc>>), which can quickly result in a status size over 8KB. In that case, the gRPC server would not send the status, but instead send a `RESOURCE_EXHAUSTED` error, without any of the individual errors. @@ -6854,14 +6752,15 @@ channel. As a rule of thumb, it might make sense to allow for at least `8192 + MAX_UPDATES_PER_WRITE * 100` bytes of metadata. For example, in C++, one can create a client channel as follows: -~ Begin CPP +[source,cpp] +---- const int MAX_UPDATES_PER_WRITE = 100; ::grpc::ChannelArguments arguments; arguments.SetInt(GRPC_ARG_MAX_METADATA_SIZE, 8192 + MAX_UPDATES_PER_WRITE*100); return grpc::CreateCustomChannel(address, credentials, arguments); -~ End CPP +---- -### gRPC Server Maximum Receive Message Size +==== gRPC Server Maximum Receive Message Size At the time of writing, the default maximum receive message size in gRPC is 4MB --- while the default maximum send message size is unlimited. This can be a @@ -6876,14 +6775,16 @@ possible values of `p4_device_config` for their target(s). This can be done by setting the `grpc.max_receive_message_length` when building the gRPC server. For example, in C++, one can set the maximum receive message size as follows: -~ Begin CPP + +[source,cpp] +---- const int MAX_RECEIVE_MESSAGE_SIZE = 128 * 1024 * 1024; // 128MB ::grpc::ServerBuilder server_builder; builder.AddListeningPort(/*...*/); builder.RegisterService(/*...*/); // register P4Runtime service builder.SetMaxReceiveMessageSize(MAX_RECEIVE_MESSAGE_SIZE); builder.BuildAndStart(); -~ End CPP +---- On the client side, we recommend that P4Runtime clients do not use `Write` batches larger than the default maximum receive message size (4MB) --- in case @@ -6892,14 +6793,15 @@ clients are aware that the server is using a larger maximum receive message size. The gRPC server running the P4Runtime service must not set the maximum receive message size to a value smaller than the default (4MB). -## P4Runtime Entries files { #sec-entries-files } +[#sec-entries-files] +==== P4Runtime Entries files -The open source P4 compiler `p4c` [@p4c] implements an option to -generate an "entries file", &ie; a file that contains all table +The open source P4 compiler `p4c` cite:[p4c] implements an option to +generate an "entries file", i.e. a file that contains all table entries declared via the `entries` table property within the program. An example P4~16~ program that can be used to demonstrate this -capability is `table-entries-ternary-bmv2.p4` [@p4cTestProgramForConstEntries]: +capability is `table-entries-ternary-bmv2.p4` cite:[p4cTestProgramForConstEntries]: git clone https://github.com/p4lang/p4c cd p4c/testdata/p4_16_samples @@ -6937,6 +6839,8 @@ containing the data for one table entry. Note that if a P4Runtime client attempted to send a `WriteRequest` to a P4Runtime server with the contents of the entries file, the server must return an error for each entry that has `is_const` true, as -described in Section [#sec-table-entry]. +described in Section <<#sec-table-entry>>. -[BIB] +[bibliography] +== References +bibliography::references.bib[ieee] \ No newline at end of file diff --git a/docs/v1/install-asciidoctor-linux.sh b/docs/v1/install-asciidoctor-linux.sh new file mode 100755 index 00000000..f80999c9 --- /dev/null +++ b/docs/v1/install-asciidoctor-linux.sh @@ -0,0 +1,210 @@ +#! /bin/bash + +# Copyright 2024 Andy Fingerhut + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +linux_version_warning() { + 1>&2 echo "Found ID ${ID} and VERSION_ID ${VERSION_ID} in /etc/os-release" + 1>&2 echo "This script only supports these:" + 1>&2 echo " ID ubuntu, VERSION_ID in 20.04 22.04 24.04" + #1>&2 echo " ID fedora, VERSION_ID in 36 37 38" + 1>&2 echo "" + 1>&2 echo "Proceed installing manually at your own risk of" + 1>&2 echo "significant time spent figuring out how to make it all" + 1>&2 echo "work, or consider getting VirtualBox and creating a" + 1>&2 echo "virtual machine with one of the tested versions." +} + +get_used_disk_space_in_mbytes() { + echo $(df --output=used --block-size=1M . | tail -n 1) +} + +abort_script=0 + +if [ ! -r /etc/os-release ] +then + 1>&2 echo "No file /etc/os-release. Cannot determine what OS this is." + linux_version_warning + exit 1 +fi +source /etc/os-release +PROCESSOR=`uname --machine` + +supported_distribution=0 +tried_but_got_build_errors=0 +if [ "${ID}" = "ubuntu" ] +then + case "${VERSION_ID}" in + 20.04) + supported_distribution=1 + OS_SPECIFIC_PACKAGES="libgdk-pixbuf2.0-dev" + ;; + 22.04) + supported_distribution=1 + OS_SPECIFIC_PACKAGES="libgdk-pixbuf-2.0-dev" + ;; + 24.04) + supported_distribution=1 + OS_SPECIFIC_PACKAGES="libgdk-pixbuf-2.0-dev" + ;; + esac +elif [ "${ID}" = "fedora" ] +then + case "${VERSION_ID}" in + 38) + supported_distribution=0 + ;; + 39) + supported_distribution=0 + ;; + 40) + supported_distribution=0 + ;; + esac +fi + +if [ ${supported_distribution} -eq 1 ] +then + echo "Found supported ID ${ID} and VERSION_ID ${VERSION_ID} in /etc/os-release" +else + linux_version_warning + if [ ${tried_but_got_build_errors} -eq 1 ] + then + 1>&2 echo "" + 1>&2 echo "This OS has been tried at least onc before, but" + 1>&2 echo "there were errors during a compilation or build" + 1>&2 echo "step that have not yet been fixed. If you have" + 1>&2 echo "experience in fixing such matters, your help is" + 1>&2 echo "appreciated." + fi + exit 1 +fi + +min_free_disk_MBytes=`expr 1 \* 1024` +free_disk_MBytes=`df --output=avail --block-size=1M . | tail -n 1` + +if [ "${free_disk_MBytes}" -lt "${min_free_disk_MBytes}" ] +then + free_disk_comment="too low" + abort_script=1 +else + free_disk_comment="enough" +fi + +echo "Minimum free disk space to run this script: ${min_free_disk_MBytes} MBytes" +echo "Free disk space on this system from df output: ${free_disk_MBytes} MBytes -> $free_disk_comment" + +if [ "${abort_script}" == 1 ] +then + echo "" + echo "Aborting script because system has too little free disk space" + exit 1 +fi + +echo "Passed all sanity checks" + +DISK_USED_START=`get_used_disk_space_in_mbytes` + +set -e +set -x + +echo "------------------------------------------------------------" +echo "Time and disk space used before installation begins:" +set -x +date +df -h . +df -BM . +TIME_START=$(date +%s) + +# On new systems if you have never checked repos you should do that first + +# Install a few packages (vim is not strictly necessary -- installed for +# my own convenience): +if [ "${ID}" = "ubuntu" ] +then + sudo apt-get --yes install gnupg2 curl +elif [ "${ID}" = "fedora" ] +then + sudo dnf -y update + sudo dnf -y install git vim +fi + +gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB +curl -sSL https://get.rvm.io | bash +if [[ $UID == 0 ]]; then + source /usr/local/rvm/scripts/rvm +else + source $HOME/.rvm/scripts/rvm +fi +rvm install ruby-3.3.1 +rvm use 3.3.1 +gem install asciidoctor +gem install asciidoctor-pdf +gem install asciidoctor-bibtex +# Additional installations to enable installing +# asciidoctor-mathematical and prawn-gmagick +sudo apt-get --yes install cmake flex libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgraphicsmagick1-dev libmagickwand-dev ${OS_SPECIFIC_PACKAGES} +gem install asciidoctor-mathematical +gem install prawn-gmagick +gem install rouge +gem install asciidoctor-bibtex +gem install asciidoctor-lists +gem install prawn-gmagick + +which ruby +ruby --version +which gem +gem --version +which asciidoctor +asciidoctor --version +which asciidoctor-pdf +asciidoctor-pdf --version + +set +e + +set +x +echo "------------------------------------------------------------" +echo "Time and disk space used when installation was complete:" +set -x +date +df -h . +df -BM . +TIME_END=$(date +%s) +set +x +echo "" +echo "Elapsed time for various install steps:" +echo "Total time : $(($TIME_END-$TIME_START)) sec" +set -x + +DISK_USED_END=`get_used_disk_space_in_mbytes` + +set +x +echo "All disk space utilizations below are in MBytes:" +echo "" +echo "DISK_USED_START ${DISK_USED_START}" +echo "DISK_USED_END ${DISK_USED_END}" +echo "DISK_USED_END - DISK_USED_START : $((${DISK_USED_END}-${DISK_USED_START})) MBytes" + +echo "----------------------------------------------------------------------" +echo "CONSIDER READING WHAT IS BELOW" +echo "----------------------------------------------------------------------" +echo "" +echo "You should add this command in a shell startup script, e.g." +echo "$HOME/.bashrc if you use the Bash shell:" +echo "" +echo " source \$HOME/.rvm/scripts/rvm" +echo "" +echo "----------------------------------------------------------------------" +echo "CONSIDER READING WHAT IS ABOVE" +echo "----------------------------------------------------------------------" diff --git a/docs/v1/resources/figs/.gitignore b/docs/v1/resources/figs/.gitignore new file mode 100644 index 00000000..d31c7f4d --- /dev/null +++ b/docs/v1/resources/figs/.gitignore @@ -0,0 +1 @@ +stem* diff --git a/docs/v1/assets/embedded-plus-single-remote-controller.odg b/docs/v1/resources/figs/embedded-plus-single-remote-controller.odg similarity index 100% rename from docs/v1/assets/embedded-plus-single-remote-controller.odg rename to docs/v1/resources/figs/embedded-plus-single-remote-controller.odg diff --git a/docs/v1/assets/embedded-plus-two-remote-controllers.odg b/docs/v1/resources/figs/embedded-plus-two-remote-controllers.odg similarity index 100% rename from docs/v1/assets/embedded-plus-two-remote-controllers.odg rename to docs/v1/resources/figs/embedded-plus-two-remote-controllers.odg diff --git a/docs/v1/assets/embedded-plus-two-remote-ha-controllers.odg b/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.odg similarity index 100% rename from docs/v1/assets/embedded-plus-two-remote-ha-controllers.odg rename to docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.odg diff --git a/docs/v1/assets/error-report.odg b/docs/v1/resources/figs/error-report.odg similarity index 100% rename from docs/v1/assets/error-report.odg rename to docs/v1/resources/figs/error-report.odg diff --git a/docs/v1/assets/psa-metadata-translation.odg b/docs/v1/resources/figs/psa-metadata-translation.odg similarity index 100% rename from docs/v1/assets/psa-metadata-translation.odg rename to docs/v1/resources/figs/psa-metadata-translation.odg diff --git a/docs/v1/assets/reference-architecture.odg b/docs/v1/resources/figs/reference-architecture.odg similarity index 100% rename from docs/v1/assets/reference-architecture.odg rename to docs/v1/resources/figs/reference-architecture.odg diff --git a/docs/v1/assets/single-embedded-controller.odg b/docs/v1/resources/figs/single-embedded-controller.odg similarity index 100% rename from docs/v1/assets/single-embedded-controller.odg rename to docs/v1/resources/figs/single-embedded-controller.odg diff --git a/docs/v1/assets/single-remote-controller.odg b/docs/v1/resources/figs/single-remote-controller.odg similarity index 100% rename from docs/v1/assets/single-remote-controller.odg rename to docs/v1/resources/figs/single-remote-controller.odg diff --git a/docs/v1/resources/fonts/LuxiMono/LICENSE.txt b/docs/v1/resources/fonts/LuxiMono/LICENSE.txt new file mode 100644 index 00000000..7527d4d0 --- /dev/null +++ b/docs/v1/resources/fonts/LuxiMono/LICENSE.txt @@ -0,0 +1,41 @@ +Bigelow & Holmes Inc and URW++ GmbH Luxi font license + +Luxi fonts copyright (c) 2001 by Bigelow & Holmes Inc. Luxi font instruction +code copyright (c) 2001 by URW++ GmbH. All Rights Reserved. Luxi is a regis- +tered trademark of Bigelow & Holmes Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of these Fonts and associated documentation files (the "Font Software"), to +deal in the Font Software, including without limitation the rights to use, +copy, merge, publish, distribute, sublicense, and/or sell copies of the Font +Software, and to permit persons to whom the Font Software is furnished to do +so, subject to the following conditions: + +The above copyright and trademark notices and this permission notice shall be +included in all copies of one or more of the Font Software. + +The Font Software may not be modified, altered, or added to, and in particu- +lar the designs of glyphs or characters in the Fonts may not be modified nor +may additional glyphs or characters be added to the Fonts. This License +becomes null and void when the Fonts or Font Software have been modified. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BIGELOW & HOLMES INC. OR URW++ +GMBH. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GEN- +ERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR +INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFT- +WARE. + +Except as contained in this notice, the names of Bigelow & Holmes Inc. and +URW++ GmbH. shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Font Software without prior written +authorization from Bigelow & Holmes Inc. and URW++ GmbH. + +For further information, contact: + +info@urwpp.de or design@bigelowandholmes.com + + diff --git a/docs/v1/resources/fonts/LuxiMono/luximb.ttf b/docs/v1/resources/fonts/LuxiMono/luximb.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7473e1fe616530b3d2a00420b8d5e716d5a04f59 GIT binary patch literal 74076 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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/LuxiMono/luximbi.ttf b/docs/v1/resources/fonts/LuxiMono/luximbi.ttf new file mode 100644 index 0000000000000000000000000000000000000000..734201bed16677bc6494af52a15b4c842bb60184 GIT binary patch literal 69872 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 z
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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/LuxiMono/luximr.ttf b/docs/v1/resources/fonts/LuxiMono/luximr.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6ad6e1266faff2824dd3cef235e1c833875c2121 GIT binary patch literal 71784 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 KXY_8t$NvWn>r3hY literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/LuxiMono/luximri.ttf b/docs/v1/resources/fonts/LuxiMono/luximri.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9b028268a44f2cc8b4e88a51acb1df2264095d17 GIT binary patch literal 69496 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 mxZIf$E8| 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 Jdjb6K{{nvPpDq9Z literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/OpenSans/OpenSans-BoldItalic.ttf b/docs/v1/resources/fonts/OpenSans/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..855892833a465faca741e8c571fd5b49431989f5 GIT binary patch literal 136360 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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/OpenSans/OpenSans-Italic.ttf b/docs/v1/resources/fonts/OpenSans/OpenSans-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..29ff69386f7b74fe24f0cc85dea86771f5b7dc47 GIT binary patch literal 136604 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π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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/Utopia/LICENSE-utopia.txt b/docs/v1/resources/fonts/Utopia/LICENSE-utopia.txt new file mode 100644 index 00000000..9755d3ce --- /dev/null +++ b/docs/v1/resources/fonts/Utopia/LICENSE-utopia.txt @@ -0,0 +1,84 @@ +The agreement below gives the TeX Users Group (TUG) the right to +sublicense, and grant such sublicensees the right to further sublicense, +any or all of the rights enumerated below. TUG hereby does so +sublicense all such rights, irrevocably and in perpetuity, to any and +all interested parties. + +--Karl Berry, TUG President, +on behalf of the TeX Users Group board and members +17 November 2006 +http://tug.org/fonts/utopia + +------------------------------------------------------------ +October 11, 2006 + +RE: License to TeX Users Group for the Utopia Typeface + +Adobe Systems Incorporated ("Adobe") hereby grants to the TeX Users +Group and its members a nonexclusive, royalty-free, perpetual license to +the typeface software for the Utopia Regular, Utopia Italic, Utopia Bold +and Utopia bold Italic typefaces, including Adobe Type 1 font programs +for each style (collectively, the "Software") as set forth below. + +Adobe grants the TeX Users Group a license under its copyrights, to use, +reproduce, display and distribute the Software for any purpose and +without fee provided that the following copyright notice appears in all +whole and partial copies of the Software and provided that the following +trademark symbol and attribution appear in all unmodified copies of the +Software: + +Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. +(alternatively, @1989, 1991 Adobe Systems Incorporated. All rights reserved.) +Utopia(R) +Utopia is either a registered trademark or trademark of Adobe Systems +Incorporated in the United States and/or other countries. Used under +license. + +Adobe also grants to the TeX Users Group a license to modify the +Software for any purpose and redistribute such modifications, for any +purpose and royalty-free, provided that the modified Software shall not +use the font name(s) or trademark(s), in whole or in part, unless +explicit written permission is granted by Adobe. This restriction +applies to all references stored in the Software for identification +purposes, such as the font menu name and other font description +fields. The TeX Users Group is also permitted to sublicense, and grant +such sublicensees the right to further sublicense, any or all the +foregoing rights through multiple tiers of distribution. The licenses +granted herein are granted in perpetuity and may not be terminated by +either party unless such termination is based on a breach of the terms +and conditions herein stated. + +Adobe retains ownership of the copyright in the Software. The TeX Users +Group agrees that Adobe and its suppliers are the sole and exclusive +owners of all rights, title and interest, including all copyrights, +patents, trademarks, trade names, trade secrets and other intellectual +property rights in the Software. No title or ownership of the Software, +any copies of the Software, or the patent, copyright, trade secret, +trademark, trade name or other proprietary rights contained in the +Software is transferred to the TeX Users Group. + +The Adobe trademarks shall not be used in advertising pertaining to the +distribution of the Software without express prior permission from +Adobe. Any such use shall be in accordance with the Adobe trademark +guidelines, available on the Adobe website at +http://www.adobe.com/misc/pdfs/TM GuideforThirdPartiesFinal.pdf. +If any portion of the Software is changed, it cannot be marketed under +Adobe's trademarks unless Adobe, in its sole discretion, approves by a +prior writing the quality of the resulting implementation. + +The TeX Users Group shall have the right to evaluate the Software +provided by Adobe. + +ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR +ANY PURPOSE. IT IS PROVIDED "AS-IS" WITHOUT EXPRESS OR IMPLIED +WARRANTY. ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THE SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO +EVENT SHALL ADOBE BE LIABLE TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN +AN ACTION OF CONTRACT NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. ADOBE WILL NOT PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE +SOFTWARE. + +Adobe Document Id: 4400078611 diff --git a/docs/v1/resources/fonts/Utopia/utopia-bold.ttf b/docs/v1/resources/fonts/Utopia/utopia-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cdc18589fa959e649bc84c02a8f77511fbb6795c GIT binary patch literal 30648 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 ZG7WsxDIe{_uY`Zh_mBUu>#5BC{{oSSRQ3P> literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/Utopia/utopia-bolditalic.ttf b/docs/v1/resources/fonts/Utopia/utopia-bolditalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f32f040925ae7d9cccb713a691f5c3b74a9ba9c2 GIT binary patch literal 32596 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 T<_m8}zr%a|*^8&YIClPjJZlxL literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/Utopia/utopia-italic.ttf b/docs/v1/resources/fonts/Utopia/utopia-italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dd59c7ccfeae6d4c7b02073672bf145a6dc961f5 GIT binary patch literal 32596 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

w#o7pRT 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 bZ(>(v^mDj=rqBNmh;p3R literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/Utopia/utopia-regular.ttf b/docs/v1/resources/fonts/Utopia/utopia-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0625ef3b87978b5db8b0b78fc48c3e74494b91d2 GIT binary patch literal 31144 zcmch=2YejW)i-?a%odf^_TAaui|VeV)$Xcy%d)IyS#oc(C0hm~8#i3R6dU3I0YVQ+ z2oQ=x2%#rHAcT?-LLg4^kOUJGAUHf}l<*S3tM`9ri&nOxdp9Au_?f)#Z40(b3^zrof#Oeu|`p44YbGJ_45dG#R}m>8+(GUMoVh&tO^=caimN#y1)kX7K0;hFo!d3>PyXJC54lYf|KPeOKH^rBT-rtU1Lmdp4xs;P`Vnw} zF>?8&f?GiJm~Hl5!EwNE6LD}kfPEz~P%m*&)5M=S1+Ec@p8p1Mac5&|!L_T1nd`&# z`*F=fBn&Ed0)7kqgixMLBM*njd-hmrGHY>S)Vl}6o zNQhf8a00vmwiTF{PWofuii%qi#^GR_2>U0bj2^>=x!_7jGrbA>Y|hv{$@_{xtz(kM zNG0HNfR-w-U5G7=&4{fUTNAd+vH7qq!*)BiQEcn5g&DQ;8zz2A4`5CkiI3r0LPHv=Dw(e55HkIgaW%rD}I%@4yBn^)k5Uq)Kk@9Y@+wc`BYyoh(S z$Iesl#Bp{l!xz2Fo zz#`6bEol;A+(TRZnqc#vD5r~PHK^s=!#7-QX~ z4(TFuNjK>sz2Mq@GLH<9`DBm`L0&H;i^yWKge)b?$a1oRtR$<*Fj-C3kP)(;tR>$g zV`M)$LarbifbAcWi^$F7cjRZ}RdNB@Mz%ux+(@n_yU4BNc5;~PB@dFv$&2I#@-q28 zxt#o&+)chkZX=J7H=yHwN&ZNFOP(c9kzbL&kUPjN|*F$+yYx zK?(PgACoJ|wd5*tJ*ep@`8D}D)X70|F}Z{sAYUODlFP`sf#K{k^u zWIN_jhAlOR6#6Km`_l7@A9;yXCeO(|D_>EdRH-#uo!(#+OlFJKW_LJUZjaaJ4+IN~ zic3n%LgDg?%1Bi-7O$?Ut*dWnY-(<4J->Zc$L!8IU30s8di(n44a^@LTCi}@;w4L$ zEnl&6)i8Pa`+xq{v$wqS+AB}~>Fu99edn8h{hz!3aL+G(^o`#<@Xg1*``ovGzxn1h zBV*gQ-SERB_g}D|T>dr8113oPyW(nc&2@WMe}}9iWW%oA^ACT0--Q=le93`JFZ;^Dr0oJ) zOaAKz)!st>368v#K0)8$2)BeA=Pu`N%vbRj@%Qn^Bmv2QeN5xibZRcrJfitX+p0aNy;u9GE=RXOw@Y`c?sa`YU!}iD|GXh!7&n}6xZm)a z;ors_W3TaY4W>8DrRG-iBJ*bRE#^b!=gqH~Kei|> zrIrE9xaBg-^_GvU?baREXKglHz3q_gMcc>rko|o7@9iHuI7gvlk>hU1QD>F&BIk?F zKe|G$i(G$n``jDcH@pAoae2l(dpys3)!wztE9xDnJbrx+eI#irjJXm~d@#iI#C1WLzl)P73UwWYQk7eqz@vezC+5)~_#MY9d{&#^Z?kz>TWjenbd>umq-8$Z@&*HyazXt3rrs+blV2o$(pTP$ zM&HE7$em+Xa&qn#jLC`7dF7EfHn~^s#W%J%j

9vfYGsr%BW*1N~@*4M;pFRh8! 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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/fonts/verify-font b/docs/v1/resources/fonts/verify-font new file mode 100644 index 00000000..c163d51d --- /dev/null +++ b/docs/v1/resources/fonts/verify-font @@ -0,0 +1,5 @@ +require 'ttfunk' +require 'ttfunk/subset_collection' + +ttf_subsets = TTFunk::SubsetCollection.new TTFunk::File.open ARGV[0] +(0...(ttf_subsets.instance_variable_get :@subsets).size).each {|idx| ttf_subsets[idx].encode } \ No newline at end of file diff --git a/docs/v1/resources/theme/p4-stylesheet.css b/docs/v1/resources/theme/p4-stylesheet.css new file mode 100644 index 00000000..a29dbe7c --- /dev/null +++ b/docs/v1/resources/theme/p4-stylesheet.css @@ -0,0 +1,643 @@ +@import url(//cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.0/css/font-awesome.css); +/* normalize.css v2.1.1 | MIT License | git.io/normalize */ +/* ========================================================================== HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined in IE 8/9. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +/** Correct `inline-block` display not defined in IE 8/9. */ +audio, canvas, video { display: inline-block; } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address styling not present in IE 8/9. */ +[hidden] { display: none; } + +/* ========================================================================== Base ========================================================================== */ +/** 1. Prevent system color scheme's background color being used in Firefox, IE, and Opera. 2. Prevent system color scheme's text color being used in Firefox, IE, and Opera. 3. Set default font family to sans-serif. 4. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { background: #fff; /* 1 */ color: #000; /* 2 */ font-family: sans-serif; /* 3 */ -ms-text-size-adjust: 100%; /* 4 */ -webkit-text-size-adjust: 100%; /* 4 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* ========================================================================== Links ========================================================================== */ +/** Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { outline: thin dotted; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* ========================================================================== Typography ========================================================================== */ +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9, Safari 5, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari 5 and Chrome. */ +dfn { font-style: italic; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Correct font family set oddly in Safari 5 and Chrome. */ +code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } + +/** Improve readability of pre-formatted text in all browsers. */ +pre { white-space: pre-wrap; } + +/** Set consistent quote types. */ +q { quotes: "\201C" "\201D" "\2018" "\2019"; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* ========================================================================== Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9. */ +img { border: 0; } + +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari 5. */ +figure { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ +button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } + +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + +html, body { font-size: 15px; } + +body { background: white; color: #0a0a0a; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } + +a:hover { cursor: pointer; } + +a:focus { outline: none; } + +img, object, embed { max-width: 100%; height: auto; } + +object, embed { height: 100%; } + +img { -ms-interpolation-mode: bicubic; } + +#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } + +.left { float: left !important; } + +.right { float: right !important; } + +.text-left { text-align: left !important; } + +.text-right { text-align: right !important; } + +.text-center { text-align: center !important; } + +.text-justify { text-align: justify !important; } + +.hide { display: none; } + +.antialiased, body { -webkit-font-smoothing: antialiased; } + +img { display: inline-block; vertical-align: middle; } + +textarea { height: auto; min-height: 50px; } + +select { width: 100%; } + +p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.23333em; line-height: 1.6; } + +.subheader, #content #toctitle, .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title, .tableblock > caption { line-height: 1.4; color: #030303; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } + +/* Typography resets */ +div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } + +/* Default Link Styles */ +a { color: #4183c4; text-decoration: none; line-height: inherit; } +a:hover, a:focus { color: #4183c4; } +a img { border: none; } + +/* Default paragraph styles */ +p { font-family: helvetica, arial, freesans, clean, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.4; margin-bottom: 1em; text-rendering: optimizeLegibility; } +p aside { font-size: 0.93333em; line-height: 1.35; font-style: italic; } + +/* Default header styles */ +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: helvetica, arial, freesans, clean, sans-serif; font-weight: bold; font-style: normal; color: #333333; text-rendering: optimizeLegibility; margin-top: 0.2em; margin-bottom: 0.5em; line-height: 1.2em; } +h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: gray; line-height: 0; } + +h1 { font-size: 1.33333em; } + +h2 { font-size: 0.93333em; } + +h3, #toctitle, .sidebarblock > .content > .title { font-size: 0.86667em; } + +h4 { font-size: 0.66667em; } + +h5 { font-size: 1em; } + +h6 { font-size: 1em; } + +hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.33333em 0 1.26667em; height: 0; } + +/* Helpful Typography Defaults */ +em, i { font-style: italic; line-height: inherit; } + +strong, b { font-weight: bold; line-height: inherit; } + +small { font-size: 60%; line-height: inherit; } + +code { font-family: Monaco, "DejaVu Sans Mono", "Courier New", monospace; font-weight: normal; color: #B12146; } + +/* Lists */ +ul, ol, dl { font-size: 1em; line-height: 1.4; margin-bottom: 1em; list-style-position: outside; font-family: helvetica, arial, freesans, clean, sans-serif; } + +ul, ol { margin-left: 0.7em; } + +/* Unordered Lists */ +ul li ul, ul li ol { margin-left: 1.33333em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } +ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } +ul.square { list-style-type: square; } +ul.circle { list-style-type: circle; } +ul.disc { list-style-type: disc; } +ul.no-bullet { list-style: none; } + + +/* Ordered Lists */ +ol li ul, ol li ol { margin-left: 1.33333em; margin-bottom: 0; } + +/* Definition Lists */ +dl dt { margin-bottom: 0.33333em; font-weight: bold; } +dl dd { margin-bottom: 1.33333em; } + +/* Abbreviations */ +abbr, acronym { text-transform: uppercase; font-size: 90%; color: #030303; border-bottom: 1px dotted #dddddd; cursor: help; } + +abbr { text-transform: none; } + +/* Blockquotes */ +blockquote { margin: 0 0 1em; padding: 0; border-left: none; } +blockquote cite { display: block; font-size: 0.86667em; color: #030303; } +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, blockquote cite a:visited { color: #030303; } + +blockquote, blockquote p { line-height: 1.4; color: #030303; } + +/* Microformats */ +.vcard { display: inline-block; margin: 0 0 1.33333em 0; border: 1px solid #dddddd; padding: 0.66667em 0.8em; } +.vcard li { margin: 0; display: block; } +.vcard .fn { font-weight: bold; font-size: 1em; } + +.vevent .summary { font-weight: bold; } +.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.06667em; } + +@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + h1 { font-size: 2em; } + h2 { font-size: 1.6em; } + h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.2em; } + h4 { font-size: 1em; } } +/* Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) +*/ +.print-only { display: none !important; } + +@media print { * { background: transparent !important; color: #000 !important; /* Black prints faster: h5bp.com/s */ box-shadow: none !important; text-shadow: none !important; } + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + pre, blockquote { border: 1px solid #999999; page-break-inside: avoid; } + thead { display: table-header-group; /* h5bp.com/t */ } + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page { margin: 0.5cm; } + p, h2, h3, #toctitle, .sidebarblock > .content > .title { orphans: 3; widows: 3; } + h2, h3, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; } + .hide-on-print { display: none !important; } + .print-only { display: block !important; } + .hide-for-print { display: none !important; } + .show-for-print { display: inherit !important; } } +/* Tables */ +table { background: white; margin-bottom: 1.33333em; border: solid 1px #dddddd; } +table thead, table tfoot { background: whitesmoke; font-weight: bold; } +table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.53333em 0.66667em 0.66667em; font-size: 0.93333em; color: #222222; text-align: left; } +table tr th, table tr td { padding: 0.6em 0.66667em; font-size: 0.8em; color: black; } +table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f9f9f9; } +table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; } + +a:hover, a:focus { text-decoration: underline; } + +.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } +.clearfix:after, .float-group:after { clear: both; } + +*:not(pre) > code { font-size: 0.86667em; padding: 1px 5px 1px 5px; white-space: nowrap; background-color: transparent; border: 1px solid #dddddd; -webkit-border-radius: 3px; border-radius: 3px; text-shadow: none; } + +pre, pre > code { line-height: 1.6; color: black; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; } + +kbd.keyseq { color: black; } + +kbd:not(.keyseq) { display: inline-block; color: black; font-size: 0.8em; line-height: 1.4; background-color: #F7F7F7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; } + +kbd kbd:first-child { margin-left: 0; } + +kbd kbd:last-child { margin-right: 0; } + +.menuseq, .menu { color: #1a1a1a; } + +#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 66.66667em; *zoom: 1; position: relative; padding-left: 1em; padding-right: 1em; } +#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } +#header:after, #content:after, #footnotes:after, #footer:after { clear: both; } + +#header { margin-bottom: 2.66667em;} +#header > h1 { color: #030303; font-weight: 300; border-bottom: 1px solid #dddddd; margin-bottom: -28px; padding-bottom: 32px; text-align: center; } +#header span { color: #030303;} +#header #revnumber { text-align: center; text-transform: capitalize;} +#header br { display: none; } +#header br + span { padding-left: 3px; } +#header br + span:before { content: "\2013 \0020"; } +#header br + span.author { padding-left: 0; } +#header br + span.author:before { content: ", "; } + +#toc { border-bottom: 0 solid #dddddd; padding-bottom: 1.33333em; } +#toc > ul { margin-left: 0.26667em; } +#toc ul.sectlevel0 > li > a { font-style: italic; } +#toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } +#toc ul { list-style-type: none; } + +#toctitle { color: #030303; } + +@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; } + #toc.toc2 { position: fixed; width: 20em; left: 0; top: 0; border-right: 1px solid #dddddd; border-bottom: 0; z-index: 1000; padding: 1em; height: 100%; overflow: auto; } + #toc.toc2 #toctitle { margin-top: 0; } + #toc.toc2 > ul { font-size: .95em; } + #toc.toc2 ul ul { margin-left: 0; padding-left: 1.33333em; } + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } + body.toc2.toc-right { padding-left: 0; padding-right: 20em; } + body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } } +#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.33333em; padding: 1.33333em; background: white; border-width: 0; -webkit-border-radius: 3px; border-radius: 3px; } +#content #toc > :first-child { margin-top: 0; } +#content #toc > :last-child { margin-bottom: 0; } +#content #toc a { text-decoration: none; } + +#content #toctitle { font-weight: bold; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 1.06667em; padding-left: 0.13333em; } + +#footer { max-width: 100%; background-color: whitesmoke; padding: 1.33333em; } + +#footer-text { color: #030303; line-height: 1.26; } + +.sect1 { padding-bottom: 1.33333em; } + +.sect1 + .sect1 { border-top: 0 solid #dddddd; } + +#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; width: 1em; margin-left: -1em; display: block; text-decoration: none; visibility: hidden; text-align: center; font-weight: normal; } +#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: '\00A7'; font-size: .85em; vertical-align: text-top; display: block; margin-top: 0.05em; } +#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } +#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #0830df; text-decoration: none; } +#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #262626; } + +.imageblock, .literalblock, .listingblock, .verseblock, .videoblock { margin-bottom: 1.33333em; } + +.admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: center; font-weight: bold; } + +.tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; } + +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } + +.admonitionblock > table { border: 0; background: none; width: 100%; } +.admonitionblock > table td.icon { text-align: center; width: 80px; } +.admonitionblock > table td.icon img { max-width: none; } +.admonitionblock > table td.icon .title { font-weight: bold; text-transform: uppercase; } +.admonitionblock > table td.content { padding-left: 1.2em; padding-right: 1.33333em; border-left: 1px solid #dddddd; color: #030303; } +.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } + +.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.33333em; padding: 1.33333em; background: white; -webkit-border-radius: 3px; border-radius: 3px; } +.exampleblock > .content > :first-child { margin-top: 0; } +.exampleblock > .content > :last-child { margin-bottom: 0; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.66667em; } +.exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; } + +.exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #eaeaea; box-shadow: 0 1px 8px #eaeaea; } + +.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.33333em; padding: 1.33333em; background: white; -webkit-border-radius: 3px; border-radius: 3px; } +.sidebarblock > :first-child { margin-top: 0; } +.sidebarblock > :last-child { margin-bottom: 0; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.66667em; } +.sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; } +.sidebarblock > .content > .title { color: #030303; margin-top: 0; line-height: 1.4; border-width: 0 0 1px 0; border-style: solid; border-color: #cacaca; } + +.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } + +.literalblock > .content pre, .listingblock > .content pre { background: #F7F7F7; border-width: 2px; border-style: solid; border-color: #dddddd; -webkit-border-radius: 3px; border-radius: 3px; padding: 0.66667em; word-wrap: break-word; } +.literalblock > .content pre.nowrap, .listingblock > .content pre.nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } +.literalblock > .content pre > code, .listingblock > .content pre > code { display: block; } +@media only screen { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.69333em; } } +@media only screen and (min-width: 768px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.78em; } } +@media only screen and (min-width: 1280px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.86667em; } } + +.listingblock > .content { position: relative; } + +.listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.4em; right: 0.4em; } + +.listingblock:hover code.asciidoc:before { content: "asciidoc"; } +.listingblock:hover code.clojure:before { content: "clojure"; } +.listingblock:hover code.css:before { content: "css"; } +.listingblock:hover code.groovy:before { content: "groovy"; } +.listingblock:hover code.html:before { content: "html"; } +.listingblock:hover code.java:before { content: "java"; } +.listingblock:hover code.javascript:before { content: "javascript"; } +.listingblock:hover code.python:before { content: "python"; } +.listingblock:hover code.ruby:before { content: "ruby"; } +.listingblock:hover code.scss:before { content: "scss"; } +.listingblock:hover code.xml:before { content: "xml"; } +.listingblock:hover code.yaml:before { content: "yaml"; } + +.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } + +.listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; } + +table.pyhltable { border: 0; margin-bottom: 0; } + +table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; } + +table.pyhltable td.code { padding-left: .75em; padding-right: 0; } + +.highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } + +.highlight.pygments .lineno { display: inline-block; margin-right: .25em; } + +table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; } + +.quoteblock { margin: 0 0 1em; padding: 0; border-left: none; } +.quoteblock blockquote { margin: 0 0 1em 0; padding: 0 0 0.6em 0; border: 0; } +.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } +.quoteblock .attribution { margin-top: -.25em; padding-bottom: 0.6em; font-size: 0.86667em; color: #666666; } +.quoteblock .attribution br { display: none; } +.quoteblock .attribution cite { display: block; margin-bottom: 0.66667em; } + +table thead th, table tfoot th { font-weight: bold; } + +table.tableblock.grid-all { border-collapse: separate; border-spacing: 1px; -webkit-border-radius: 3px; border-radius: 3px; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; } + +table.tableblock.frame-topbot, table.tableblock.frame-none { border-left: 0; border-right: 0; } + +table.tableblock.frame-sides, table.tableblock.frame-none { border-top: 0; border-bottom: 0; } + +table.tableblock td .paragraph:last-child p, table.tableblock td > p:last-child { margin-bottom: 0; } + +th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; } + +th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; } + +th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; } + +th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; } + +th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; } + +th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; } + +p.tableblock.header { color: #222222; font-weight: bold; } + +td > div.verse { white-space: pre; } + +ol { margin-left: 0.96667em; } + +ul li ol { margin-left: 0.7em; } + +dl dd { margin-left: 1.125em; } + +dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } + +ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.5em; } + +ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; } + +ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.66667em; } + +ul.checklist li > p:first-child > i[class^="icon-check"]:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } + +ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; } + +ul.inline { margin: 0 auto 0.5em auto; margin-left: -1.46667em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; } +ul.inline > li { list-style: none; float: left; margin-left: 1.46667em; display: block; } +ul.inline > li > * { display: block; } + +.unstyled dl dt { font-weight: normal; font-style: normal; } + +ol.arabic { list-style-type: decimal; } + +ol.decimal { list-style-type: decimal-leading-zero; } + +ol.loweralpha { list-style-type: lower-alpha; } + +ol.upperalpha { list-style-type: upper-alpha; } + +ol.lowerroman { list-style-type: lower-roman; } + +ol.upperroman { list-style-type: upper-roman; } + +ol.lowergreek { list-style-type: lower-greek; } + +.hdlist > table, .colist > table { border: 0; background: none; } +.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } + +td.hdlist1 { padding-right: .8em; font-weight: bold; } + +td.hdlist1, td.hdlist2 { vertical-align: top; } + +.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } + +.colist > table tr > td:first-of-type { padding: 0 .8em; line-height: 1; } +.colist > table tr > td:last-of-type { padding: 0.26667em 0; } + +.qanda > ol > li > p > em:only-child { color: #3876b4; } + +.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } + +.imageblock.left, .imageblock[style*="float: left"] { margin: 0.26667em 0.66667em 1.33333em 0; } +.imageblock.right, .imageblock[style*="float: right"] { margin: 0.26667em 0 1.33333em 0.66667em; } +.imageblock > .title { margin-bottom: 0; } +.imageblock.thumb, .imageblock.th { border-width: 6px; } +.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.13333em; } + +.image.left, .image.right { margin-top: 0.26667em; margin-bottom: 0.26667em; display: inline-block; line-height: 0; } +.image.left { margin-right: 0.66667em; } +.image.right { margin-left: 0.66667em; } + +a.image { text-decoration: none; } + +span.footnote, span.footnoteref { vertical-align: super; font-size: 0.93333em; } +span.footnote a, span.footnoteref a { text-decoration: none; } + +#footnotes { padding-top: 0.8em; padding-bottom: 0.8em; margin-bottom: 0.66667em; } +#footnotes hr { width: 20%; min-width: 6.66667em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; } +#footnotes .footnote { padding: 0 0.4em; line-height: 1.3; font-size: 0.93333em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; } +#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; } +#footnotes .footnote:last-of-type { margin-bottom: 0; } + +#content #footnotes { margin-top: -0.66667em; margin-bottom: 0; padding: 0.8em 0; } + +.gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; } +.gist .file-data > table td.line-data { width: 99%; } + +div.unbreakable { page-break-inside: avoid; } + +.big { font-size: larger; } + +.small { font-size: smaller; } + +.underline { text-decoration: underline; } + +.overline { text-decoration: overline; } + +.line-through { text-decoration: line-through; } + +.aqua { color: #00bfbf; } + +.aqua-background { background-color: #00fafa; } + +.black { color: black; } + +.black-background { background-color: black; } + +.blue { color: #0000bf; } + +.blue-background { background-color: #0000fa; } + +.fuchsia { color: #bf00bf; } + +.fuchsia-background { background-color: #fa00fa; } + +.gray { color: #606060; } + +.gray-background { background-color: #7d7d7d; } + +.green { color: #006000; } + +.green-background { background-color: #007d00; } + +.lime { color: #00bf00; } + +.lime-background { background-color: #00fa00; } + +.maroon { color: #600000; } + +.maroon-background { background-color: #7d0000; } + +.navy { color: #000060; } + +.navy-background { background-color: #00007d; } + +.olive { color: #606000; } + +.olive-background { background-color: #7d7d00; } + +.purple { color: #600060; } + +.purple-background { background-color: #7d007d; } + +.red { color: #bf0000; } + +.red-background { background-color: #fa0000; } + +.silver { color: #909090; } + +.silver-background { background-color: #bcbcbc; } + +.teal { color: #006060; } + +.teal-background { background-color: #007d7d; } + +.white { color: #bfbfbf; } + +.white-background { background-color: #fafafa; } + +.yellow { color: #bfbf00; } + +.yellow-background { background-color: #fafa00; } + +span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +.admonitionblock td.icon [class^="icon-"]:before { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } +.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #4183c4; color: #2e6295; } +.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } +.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } +.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } +.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } + +.conum { display: inline-block; color: white !important; background-color: #333333; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; font-weight: bold; line-height: 20px; font-family: Arial, sans-serif; font-style: normal; position: relative; top: -2px; letter-spacing: -1px; } +.conum * { color: white !important; } +.conum + b { display: none; } +.conum:after { content: attr(data-value); } +.conum:not([data-value]):empty { display: none; } + +p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1em; color: #666666; } + +h2 { color: #030303; border-bottom: 1px solid #dddddd; } + +#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { color: #333333; } + +#header, #content, #footnotes { max-width: 660px; padding-left: 0; padding-right: 0; } + + +#content ul li { padding-left: .7em; } + +.olist.procedure > ol { counter-reset: li; list-style: none; position: relative; } +.olist.procedure > ol > li { position: relative; padding: 5px 0 5px 55px; margin-bottom: 5px; } +.olist.procedure > ol > li:before { content: counter(li); counter-increment: li; position: absolute; top: 0; left: 0; height: 100%; width: 30px; padding: 0 10px 0 0; color: #999; font-size: 1.46667em; font-weight: bold; line-height: 1.6; text-align: right; border-right: 1px solid #ddd; } + +.quoteblock blockquote { background: url('../images/github/blockquote-arrow.png?1372292342') 0 2px no-repeat; padding-left: 1em; } + +.sidebarblock > .content > .title { margin-top: -20px; margin-right: -20px; margin-left: -20px; margin-bottom: 20px; padding: 1em; font-size: 0.8em; background: #eaeaea; } \ No newline at end of file diff --git a/docs/v1/resources/theme/p4-theme.yml b/docs/v1/resources/theme/p4-theme.yml new file mode 100644 index 00000000..f033a222 --- /dev/null +++ b/docs/v1/resources/theme/p4-theme.yml @@ -0,0 +1,284 @@ +extends: ~ +font: + catalog: + UtopiaStd-Regular: + normal: Utopia/utopia-regular.ttf + bold: Utopia/utopia-bold.ttf + italic: Utopia/utopia-italic.ttf + bold_italic: Utopia/utopia-bolditalic.ttf + LuxiMono: + normal: LuxiMono/luximr.ttf + bold: LuxiMono/luximb.ttf + italic: LuxiMono/luximri.ttf + bold_italic: LuxiMono/luximbi.ttf + OpenSans: + normal: OpenSans/OpenSans-Regular.ttf + bold: OpenSans/OpenSans-Bold.ttf + italic: OpenSans/OpenSans-Italic.ttf + bold_italic: OpenSans/OpenSans-BoldItalic.ttf +page: + layout: portrait + initial_zoom: FitH + margin: [0.5in, 0.67in, 0.67in, 0.67in] + # margin_inner and margin_outer keys are used for recto/verso print margins when media=prepress + margin_inner: 0.75in + margin_outer: 0.59in + size: A4 + numbering: + start-at: toc +base: + text_align: justify + font_color: 333333 + font_family: UtopiaStd-Regular + font_size: 10.5 + # line_height_length is really just a vertical spacing variable; it's not actually the height of a line + line_height_length: 12 + # The Noto font family has a built-in line height of 1.36 + # With this line_height, a line of text will occupy a height of 15.78pt + line_height: $base_line_height_length / 10.5 + font_size_large: round($base_font_size * 1.25) + font_size_small: round($base_font_size * 0.85) + font_size_min: $base_font_size * 0.75 + font_style: normal + border_color: EEEEEE + border_radius: 4 + border_width: 0.5 +role: + lead: + font_size: $base_font_size_large + line-through: + text_decoration: line-through + underline: + text_decoration: underline + big: + font_size: 1.2em + small: + font_size: 0.8em + subtitle: + font_color: 999999 + font_size: 0.8em + font_style: normal_italic +vertical_rhythm: $base_line_height_length +horizontal_rhythm: $base_line_height_length +link: + font_color: 428BCA +# codespan is currently used for monospaced phrases and table cells +codespan: + font_color: #B12146 + font_family: OpenSans +kbd: + background_color: F5F5F5 + border_color: CCCCCC + border_offset: 2 + border_radius: 2 + border_width: 0.5 + font_family: $codespan_font_family + separator_content: "\u202f+\u202f\u200b" +mark: + background_color: FFFF00 + border_offset: 1 +menu: + caret_content: "\u00a0\u203a " + font_style: bold +heading: + font-family: OpenSans + font-color: #262626 + font-size: 17 + font-style: bold + # h1 is used for part titles (book doctype) or the doctitle (article doctype) + h1_font_size: floor($base_font_size * 2.6) + # h2 is used for chapter titles (book doctype only) + h2_font_size: floor($base_font_size * 2.15) + h3_font_size: round($base_font_size * 1.7) + h4_font_size: $base_font_size_large + h5_font_size: $base_font_size + h6_font_size: $base_font_size_small + # rely on built-in line height in Noto + line_height: 1 + margin_top: $vertical_rhythm * 0.4 + margin_bottom: $vertical_rhythm * 0.9 + min_height_after: auto + chapter: + break-before: auto +title_page: + font-family: OpenSans + font-color: #080808 + font-size: 25 + font-style: bold + text-align: center + logo: + image: image:logo.png[pdfwidth=3.0in,align=center] + subtitle: + font-family: OpenSans + font-color: #080808 + font-size: 15 + text-align: center + line_height: 1 + revision: + font-family: OpenSans + font-color: #080808 + font-size: 10 + text-align: center + margin_top: $base_font_size * 1.25 +block: + margin_bottom: $vertical_rhythm +caption: + align: left + font_size: $base_font_size * 0.95 + font_style: italic + # FIXME perhaps set line_height instead of / in addition to margins? + margin_inside: $vertical_rhythm / 3 + margin_outside: 0 +abstract: + title: + font-family: UtopiaStd-Regular + font-color: #080808 + font-size: 15 + font-style: italic + text-align: center +admonition: + column_rule_color: $base_border_color + column_rule_width: $base_border_width + padding: [$vertical_rhythm / 3.0, $horizontal_rhythm, $vertical_rhythm / 3.0, $horizontal_rhythm] + label: + text_transform: uppercase + font_style: bold +quote: + font_size: $base_font_size_large + border_color: $base_border_color + border_width: 0 + border_left_width: $horizontal_rhythm / 3 + padding: [$vertical_rhythm / 4, $horizontal_rhythm, $vertical_rhythm / 4, $horizontal_rhythm + $quote_border_left_width / 2] + cite: + font_size: $base_font_size_small + font_color: $role_subtitle_font_color +verse: + font_size: $quote_font_size + border_color: $quote_border_color + border_width: $quote_border_width + border_left_width: $quote_border_left_width + padding: $quote_padding + cite: + font_size: $quote_cite_font_size + font_color: $quote_cite_font_color +# code is used for literal, listing, and source blocks and literal table cells +code: + font_color: #fcf3d9 + font_family: LuxiMono + font_size: 9 + padding: $code_font_size + line_height: 1.25 + # line_gap is an experimental property to control how a background color is applied to an inline block element + line_gap: 3.8 + background_color: F5F5F5 + border_color: CCCCCC + border_radius: $base_border_radius + border_width: 0.75 +conum: + font_family: $codespan_font_family + font_color: $codespan_font_color + font_size: $base_font_size + line_height: 4 / 3 + glyphs: circled +example: + border_color: $base_border_color + border_radius: $base_border_radius + border_width: 0.75 + padding: [$vertical_rhythm, $horizontal_rhythm, $vertical_rhythm, $horizontal_rhythm] +image: + caption: + font-family: UtopiaStd-Regular + font-color: #080808 + font-size: 10 + font-style: italic + text-align: center +prose: + margin_bottom: $block_margin_bottom +sidebar: + background_color: EEEEEE + border_color: E1E1E1 + border_radius: $base_border_radius + border_width: $base_border_width + padding: [$vertical_rhythm, $vertical_rhythm * 1.25, $vertical_rhythm, $vertical_rhythm * 1.25] + title: + text_align: center + font_color: $heading_font_color + font_size: $heading_h4_font_size + font_style: $heading_font_style +thematic_break: + border_color: $base_border_color + border_style: solid + border_width: $base_border_width + padding: [$vertical_rhythm * 0.5, 0] +list: + indent: $horizontal_rhythm * 1.5 + #marker_font_color: 404040 + # NOTE list_item_spacing only applies to list items that do not have complex content + item_spacing: $vertical_rhythm / 2 +# Force all indent levels of an unordered list to use the same font +# glyph for all symbols, because the fonts we are using do not have +# definitions for any of the ones that asciidoctor-pdf normally uses. +# If we change our fonts to have definitions for the default code points +# used by asciidoctor-pdf, the 'ulist:' section can be deleted. +ulist: + marker: + square: + content: "\u2022" + circle: + content: "\u2022" + checked: + content: "\u2022" + unchecked: + content: "\u2022" +description_list: + term_font_style: bold + term_spacing: $vertical_rhythm / 4 + description_indent: $horizontal_rhythm * 1.25 +callout_list: + margin_top_after_code: -$block_margin_bottom / 2 +table: + border_color: DDDDDD + border_width: $base_border_width + grid_width: $base_border_width + cell_padding: 3 + head: + font_style: bold + border_bottom_width: $base_border_width * 2.5 + body: + stripe_background_color: F9F9F9 + foot: + background_color: F0F0F0 +toc: + indent: $horizontal_rhythm + font-family: OpenSans + font-color: #01226e + font-size: 10 + indent: 20 + title: + font-family: OpenSans + font-color: #080808 + font-size: 15 + font-style: bold + dot-leader: + content: ". " + levels: 2 3 4 5 +footnotes: + font_size: round($base_font_size * 0.75) + item_spacing: $list_item_spacing / 2 +index: + column_gap: $vertical_rhythm +header: + font_size: $base_font_size_small + line_height: 1 + vertical_align: middle +footer: + font_size: 10 + font-family: UtopiaStd-Regular + height: 1in + columns: =100% + recto: + center: + content: '{page-number}' + verso: + center: + content: '{page-number}' diff --git a/docs/v1/references.bib b/docs/v1/resources/theme/references.bib similarity index 84% rename from docs/v1/references.bib rename to docs/v1/resources/theme/references.bib index 01b95f7c..ae47c0d6 100644 --- a/docs/v1/references.bib +++ b/docs/v1/resources/theme/references.bib @@ -31,7 +31,7 @@ @ONLINE { Stratum @ONLINE { P4ComplexTypes, title = "Complex types in $P4_{16}$", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-p4-type" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-p4-type" } @ONLINE { ProtoDefaults, @@ -47,22 +47,22 @@ @ONLINE { PIRepo @ONLINE { P4TableProperties, title = "Table properties in $P4_{16}$", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-table-props" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-table-props" } @ONLINE { P4ValueSets, title = "Value Sets in $P4_{16}$", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-value-set" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-value-set" } @ONLINE { P4SelectExpr, title = "Select expressions in $P4_{16}$", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-select" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-select" } @ONLINE { P4Revisions110, title = "Summary of changes made in $P4_{16}$ version 1.1.0", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-summary-of-changes-made-in-version-110" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-summary-of-changes-made-in-version-110" } @ONLINE { P4Revisions122, @@ -77,7 +77,7 @@ @ONLINE { P4Revisions124 @ONLINE { P4Spec, title = "$P4_{16}$ 1.2.1 specification", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html" } @ONLINE { PSA, @@ -92,7 +92,7 @@ @ONLINE { PNA @ONLINE { P4Enums, title = "Enums in $P4_{16}$", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-enum-types" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-enum-types" } @ONLINE { ProtoAny, @@ -128,7 +128,7 @@ @ONLINE { P4APIWGCharter @ONLINE { P4NewTypes, title = "Introducing new types in $P4_{16}$", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-newtype" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-newtype" } @ONLINE { APIVersioning, @@ -158,7 +158,7 @@ @ONLINE { RFC2697 @ONLINE { P4MatchTypes, title = "Match types in P4", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-match-kind-type" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-match-kind-type" } @ONLINE { gRPCStreamC, @@ -173,7 +173,7 @@ @ONLINE { gRPCAuth @ONLINE { P4ActionAnnotations, title = "P4 standard annotations on table actions", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-table-action-anno" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-table-action-anno" } @ONLINE { PSAActionSelector, @@ -193,7 +193,7 @@ @ONLINE { PSAAtomicityOfControlPlaneOps @ONLINE { P4Concurrency, title = "P4 Concurrency Model", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-concurrency" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-concurrency" } @ONLINE { PSATranslation, @@ -213,7 +213,7 @@ @ONLINE { ProtoOneOfBackwardsCompatibility @ONLINE { P4Annotations, title = "P4 Annotations", - url = "https://p4.org/wp-content/uploads/2024/10/P4-16-spec-v1.2.5.html#sec-annotations" + url = "https://p4.org/p4-spec/docs/P4-16-v1.2.1.html#sec-annotations" } @ONLINE { v1model, diff --git a/docs/v1/setup-for-ubuntu-linux.sh b/docs/v1/setup-for-ubuntu-linux.sh new file mode 100755 index 00000000..4be3ac99 --- /dev/null +++ b/docs/v1/setup-for-ubuntu-linux.sh @@ -0,0 +1,128 @@ +#! /bin/bash + +print_supported_os_versions() { + 1>&2 echo " Ubuntu 16.04" + 1>&2 echo " Ubuntu 18.04" + 1>&2 echo " Ubuntu 20.04" + 1>&2 echo " Ubuntu 22.04" +} + +echo "------------------------------------------------------------" +echo "Purpose of this script:" +echo "" +echo "On a supported operating system that has not had any additional" +echo "packages installed yet, install a set of packages that are" +echo "needed to successfully create the HTML and PDF versions of these" +echo "documents from their Madoko source files (files with names that" +echo "end with '.mdk'):" +echo "" +echo "+ The P4_16 language specification" +echo "+ The Portable Switch Architecture (PSA) specification" +echo "" +echo "While it would be nice if I could assure you that this script" +echo "will work on a system that already had many packages installed," +echo "I do not know which packages might have conflicts with each" +echo "other." +echo "------------------------------------------------------------" + +# This is where the application gnome-font-viewer copies font files +# when a user clicks the "Install" button. +FONT_INSTALL_DIR="${HOME}/.local/share/fonts" + +warning() { + 1>&2 echo "This script has only been tested on these OS versions:" + print_supported_os_versions +} + +lsb_release >& /dev/null +if [ $? != 0 ] +then + 1>&2 echo "No 'lsb_release' found in your command path." + warning + exit 1 +fi + +DISTRIBUTOR_ID=`lsb_release -si` +UBUNTU_RELEASE=`lsb_release -sr` + +if [ ${DISTRIBUTOR_ID} != "Ubuntu" -o \( ${UBUNTU_RELEASE} != "16.04" -a ${UBUNTU_RELEASE} != "18.04" -a ${UBUNTU_RELEASE} != "20.04" -a ${UBUNTU_RELEASE} != "22.04" \) ] +then + warning + 1>&2 echo "" + 1>&2 echo "Here is what command 'lsb_release -a' shows this OS to be:" + lsb_release -a + exit 1 +fi + +set -ex + +set +x +echo "------------------------------------------------------------" +echo "Time and disk space used before installation begins:" +set -x +date +df -BM . + +# Common packages to install on all tested Ubuntu versions +sudo apt-get --yes install git curl make nodejs npm texlive-xetex dvipng + +if [[ "${UBUNTU_RELEASE}" > "18" ]] +then + # Only needed for Ubuntu 18.04 and later + sudo apt-get --yes install texlive-science +else + # Only needed for Ubuntu 16.04 + sudo apt-get --yes install nodejs-legacy texlive-generic-extra texlive-math-extra +fi + +# Common packages to install on all tested Ubuntu versions +sudo npm install madoko -g + +set +x +echo "------------------------------------------------------------" +echo "Time and disk space used just before 'apt clean':" +set -x +date +df -BM . + +# After install of the packages above, this command often seems to +# help reduce the disk space used by a gigabyte or so. +sudo apt clean + +# On a freshly installed Ubuntu 16.04 system, added about 1.3G to the +# used disk space, although temporarily went about 1 GB more than that +# before 'sudo apt clean'. + +# On a freshly installed Ubuntu 18.04 system, added about 0.8G. + +# Retrieve and install fonts +mkdir -p "${FONT_INSTALL_DIR}" +curl -fsSL --output "${FONT_INSTALL_DIR}/UtopiaStd-Regular.otf" https://raw.github.com/p4lang/p4-spec/gh-pages/fonts/UtopiaStd-Regular.otf +curl -fsSL --output "${FONT_INSTALL_DIR}/luximr.ttf" https://raw.github.com/p4lang/p4-spec/gh-pages/fonts/luximr.ttf + +set +x +echo "------------------------------------------------------------" +echo "Time and disk space used when installation was complete:" +set -x +date +df -BM . + +if [ ${DISTRIBUTOR_ID} == "Ubuntu" -a ${UBUNTU_RELEASE} == "22.04" ] +then + set +x + 1>&2 echo "" + 1>&2 echo "------------------------------------------------------------" + 1>&2 echo "WARNING!" + 1>&2 echo "------------------------------------------------------------" + 1>&2 echo "" + 1>&2 echo "While this script can successfully install the required" + 1>&2 echo "packages on an Ubuntu 22.04 system like this one, these" + 1>&2 echo "installed packages are different versions than for" + 1>&2 echo "other supported OS's, and in our testing they GIVE" + 1>&2 echo "ERRORS and FAIL TO BUILD HTML and PDF files for the P4" + 1>&2 echo "specifications. See this issue:" + 1>&2 echo "" + 1>&2 echo " https://github.com/p4lang/p4-spec/issues/1115" + 1>&2 echo "" + 1>&2 echo "If you know how to fix this, your help is much appreciated." +fi From c43d9382977d06c14f8cfa07cefc76a21bec5e70 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sun, 17 Nov 2024 21:51:28 +0100 Subject: [PATCH 03/35] Addressed some comments in the PR Signed-off-by: Davide Scano --- ...4Runtime-spec.adoc => P4Runtime-Spec.adoc} | 164 +++++++++--------- docs/v1/resources/theme/logo.png | Bin 0 -> 75134 bytes 2 files changed, 82 insertions(+), 82 deletions(-) rename docs/v1/{P4Runtime-spec.adoc => P4Runtime-Spec.adoc} (98%) create mode 100644 docs/v1/resources/theme/logo.png diff --git a/docs/v1/P4Runtime-spec.adoc b/docs/v1/P4Runtime-Spec.adoc similarity index 98% rename from docs/v1/P4Runtime-spec.adoc rename to docs/v1/P4Runtime-Spec.adoc index feb8df74..c74495ea 100755 --- a/docs/v1/P4Runtime-spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -17,6 +17,7 @@ :stylesdir: resources/theme/ :stylesheet: p4-stylesheet.css :source-highlighter: rouge +:data-uri: :bibtex-file: resources/theme/references.bib :bibtex-order: appearance :bibtex-style: ieee @@ -50,7 +51,7 @@ protocol-independent runtime APIs for P4-defined or P4-described data planes. This document specifies one such API, called *P4Runtime*. It is meant to disambiguate and augment the programmatic API definition expressed in Protobuf format and available at -[https://github.com/p4lang/p4runtime/tree/main/proto](https://github.com/p4lang/p4runtime/tree/main/proto). +link:https://github.com/p4lang/p4runtime/tree/main/proto[https://github.com/p4lang/p4runtime/tree/main/proto]. === P4 Language Version Applicability @@ -217,7 +218,7 @@ The following are not in scope of this specification document: [#sec-reference-architecture] == Reference Architecture -Figure <<#fig-reference-architecture>> represents the P4Runtime Reference +<<#fig-reference-architecture>> represents the P4Runtime Reference Architecture. The device or target to be controlled is at the bottom, and one or more controllers is shown at the top. P4Runtime only grants write access to a single primary controller for each read/write entity. A role defines a grouping @@ -362,7 +363,7 @@ number of reasons, the most likely of which are: 2. The target was not implemented using P4 code to begin with, although it still obeys the control plane API specified in the P4Info. -As discussed in Section <<#sec-p4-as-behavioral-description-language>>, in the +As discussed in <<#sec-p4-as-behavioral-description-language>>, in the absence of a P4 program describing the data plane behavior, the detailed knowledge required to write correct control plane code must come from other sources, e.g. documentation. @@ -397,14 +398,14 @@ may have the ability to access information from memory before the upgrade. == Controller Use-cases P4Runtime allows for more than one controller. The mechanisms and semantics are -described in a later<<#sec-client-arbitration-and-controller-replication>>. Here we +described in <<#sec-client-arbitration-and-controller-replication>>. Here we present a number of use-cases. Each use-case highlights a particular aspect of P4Runtime's flexibility and is not intended to be exhaustive. Real-world use-cases may combine various techniques and be more complex. === Single Embedded Controller -Figure <<#fig-single-embedded-controller>> shows perhaps the simplest use-case. A +<<#fig-single-embedded-controller>> shows perhaps the simplest use-case. A device or target has an embedded controller which communicates to an on-board switch via P4Runtime. This might be appropriate for an embedded appliance which is not intended for SDN use-cases. @@ -422,7 +423,7 @@ image::single-embedded-controller.png[] === Single Remote Controller -Figure <> shows a single remote Controller in +<> shows a single remote Controller in charge of the P4 target. In this use-case, the device has no control of the pipeline, it just hosts the server. While this is possible, it is probably more practical to have a hybrid use-case as described in subsequent sections. @@ -434,7 +435,7 @@ image::single-embedded-controller.png[] === Embedded + Single Remote Controller -Figure <> illustrates the use-case of +<> illustrates the use-case of an embedded controller plus a single remote controller. Both controllers are clients of the single server. The embedded controller is in charge of one set of P4 entities plus the pipeline configuration. The remote controller is in charge @@ -451,7 +452,7 @@ image::embedded-plus-single-remote-controller.png[] === Embedded + Two Remote Controllers -Figure <> illustrates the case of an +<> illustrates the case of an embedded controller similar to the previous use-case, and two remote controllers. One of the remote controllers is responsible for some entities, e.g. routing tables, and the other remote controller is responsible for other @@ -463,7 +464,7 @@ image::embedded-plus-two-remote-controllers.png[] === Embedded Controller + Two High-Availability Remote Controllers -Figure <> illustrates a single +<> illustrates a single embedded controller plus two remote controllers in an active-standby (i.e. primary-backup) HA (High-Availability) configuration. Controller #1 is the active controller and is in charge of some entities. If it fails, Controller #2 @@ -1225,12 +1226,12 @@ P4Runtime messages. IDs are 32-bit unsigned integers which are assigned by the compiler during the P4Info generation process. IDs are assigned in such a way that it is possible based on the ID value alone to deduce the type of the object (e.g. table, action, counter, ...). The most significant 8 bits of the ID -encodes the object type (as per Table <<#tab-mapping-p4-obj-ids>>). The +encodes the object type (as per <<#tab-mapping-p4-obj-ids>>). The p4info.proto file includes a mapping from object type to 8-bit prefix value, encoded as an enum definition (`p4.config.v1.P4Ids.Prefix`). These values must be used (e.g. by the compiler) when allocating IDs. The remaining 24 bits must be generated in such a way that the resulting IDs must be globally unique in -the scope of the P4Info message. Table <<#tab-format-p4-obj-ids>> shows the ID +the scope of the P4Info message. <<#tab-format-p4-obj-ids>> shows the ID layout. //The row 0x04 as to be fixed as is in the madoko document @@ -1268,7 +1269,7 @@ layout. |=== It is possible to statically set the least-significant 24 bits of the ID in the -P4 program source by annotating the object with `@id` (see Table +P4 program source by annotating the object with `@id` (see <<#tab-exmpl-p4-obj-ids>>). The compiler must honor the `@id` annotations when generating the P4Info message and must fail the compilation if statically-assigned ID suffixes lead to non-unique IDs (i.e. if the P4 @@ -1923,7 +1924,7 @@ the following fields: * `extern_type_id`, a 32-bit unsigned integer which uniquely identifies the extern type in the context of the architecture. It must be in the - xref:sec-id-allocation[reserved range]`[0x81, 0xfe]`. Note that this value does not need + xref:sec-id-allocation[reserved range] `[0x81, 0xfe]` . Note that this value does not need to be unique across all architectures from all organizations, since at any given time every device managed by a P4Runtime server maps to a single P4Info message and a single architecture. @@ -2100,8 +2101,7 @@ The reads and writes a client issues towards a server should be symmetrical and unambiguous. More specifically, if a client writes a P4 entity and then reads it back then the client should expect that the message it wrote and the message it read should match if the RPCs finished successfully (with the exception of parts -of the response known to be data plane volatile, as explained in section -<<#sec-data-plane-volatile-objects>>). Consider the following pseudocode as an +of the response known to be data plane volatile, as explained in <<#sec-data-plane-volatile-objects>>). Consider the following pseudocode as an example: [source,pseudo] @@ -2183,7 +2183,7 @@ and the action calls the `set_entry_expire_time` extern function (or any of the other extern functions defined to have an effect similar to calling `set_entry_expire_time`). -For a PNA cte:[PNA] table with the property `add_on_miss` equal to `true` +For a PNA cite:[PNA] table with the property `add_on_miss` equal to `true` the data plane can insert new entries into the table without any controller's involvement. @@ -2346,7 +2346,7 @@ it returns an `OUT_OF_RANGE` error. For all binary strings, P4Runtime uses big-endian (i.e. network) byte-order. For signed integer values (`int` P4 type), P4Runtime uses the same two's -complement bitwise representation as P4. Table <<#tab-valid-bytestring-encoding>> +complement bitwise representation as P4. <<#tab-valid-bytestring-encoding>> shows various examples of integer values that the server accepts as valid P4Runtime binary strings according to the criteria in the list above. @@ -2371,7 +2371,7 @@ P4Runtime binary strings according to the criteria in the list above. | `int<16>` | 0 (0x0) | `\x00` | yes |=== -Table <<#tab-invalid-bytestring-encoding>> shows some examples of invalid +<<#tab-invalid-bytestring-encoding>> shows some examples of invalid P4Runtime binary strings: @@ -2422,7 +2422,7 @@ The P4~16~ language includes more complex types than just binary strings cite:[P4ComplexTypes]. Most of these complex data types can be exposed to the control plane through table key expressions, Value Set lookup expressions, Register (PSA extern type) value types, etc. Not supporting these more complex -types can be very limiting. Table <<#tab-p4-type-usage>> shows the different +types can be very limiting. <<#tab-p4-type-usage>> shows the different P4~16~ types and how they are allowed to be used, as per the P4~16~ specification. @@ -3233,8 +3233,7 @@ in the P4~16~ source code. In the P4Info, such tables have `is_const_table` equal to true, and if the list of entries in the source code has at least one entry in it, they also have `has_initial_entries` flag equal to true. For tables declared with -the `entries` property, without `const` before `entries` see Section -<<#sec-preinitialized-tables>>. +the `entries` property, without `const` before `entries` see <<#sec-preinitialized-tables>>. The only write updates which are allowed for constant tables are `MODIFY` operations on direct resources, and the default action (assuming the default @@ -3317,7 +3316,7 @@ in a normal table can. The contents of all table entries within the `entries` table properties in a P4 program can be written to a separate output file by -the open source `p4c` compiler. See Section <<#sec-entries-files>> for +the open source `p4c` compiler. See <<#sec-entries-files>> for details. [#sec-table-wildcard-reads] @@ -3768,8 +3767,7 @@ An `ActionProfileGroup` entity update message has the following fields: `INVALID_ARGUMENT` if the client attempts to use it. ** `watch_port` is the controller-defined port that the member's liveness depends on. At runtime, the member must be excluded from - selection if the watch port is down. See Section - <<#action-selector-constraints>> for notes on the behavior if all members in + selection if the watch port is down. See <<#action-selector-constraints>> for notes on the behavior if all members in a group are excluded for this reason. If `watch_port` is empty, then the member is always included in the selection, regardless of the status of any port of the device. The value must be empty or the SDN port of an @@ -3880,7 +3878,7 @@ is `sum_of_members`, or else the server must return `INVALID_ARGUMENT`. Each * `watch_port` is the controller-defined port that the action's liveness depends on. At runtime, the action must be excluded from selection if the watch port - is down. See Section <<#sec-action-profile-group-programming>> for more details + is down. See <<#sec-action-profile-group-programming>> for more details on the `watch_port` field, which also apply for one shot action selector programming. @@ -4002,7 +4000,7 @@ message that it receives. ==== Constraints on action selector programming The PSA specification states that the following features are *optional* in -action selector implementations [@PSAActionSelector]: +action selector implementations cite:[PSAActionSelector]: . Support for non-empty groups where in the same group, different members are bound to different actions. @@ -4422,7 +4420,7 @@ As a result of the above P4Runtime programming, the target device will create four replicas of an ARP packet. These replicas will appear in the egress pipeline as independent packets with egress port set to PSA device port numbers corresponding to SDN port numbers 5, 12, 18 and 24. For more discussion on the -translation between SDN ports and PSA device ports, refer to the xref:sec-translation-of-port-numbers[PSA Metadata Translation] section.Each +translation between SDN ports and PSA device ports, refer to the xref:sec-translation-of-port-numbers[PSA Metadata Translation] section. Each replica can optionally have a list of backup replicas used as fallback ports for multicast, where the highest-preference starts with the primary replica followed by its backup replicas in order. When the highest-preferred port of a @@ -4493,7 +4491,7 @@ must be set to 0, its default value. The PSA specification states that the valid *data plane* values for multicast group ids (`MulticastGroup_t`) range from 1 (0 is a special value that indicates no multicast replication is to be performed for a packet) to the maximum value -supported by the target [@PSATranslation]. This means that, in the absence of +supported by the target cite:[PSATranslation]. This means that, in the absence of translation, the client must set the `multicast_group_id` field to a value in this range when inserting a multicast group. However, because P4Runtime reserves 0 as a special *wildcard* value which is used to read all the multicast groups @@ -4958,7 +4956,7 @@ their own error codes in their chosen error-space. This specification document tries to cover all possible generic error cases and to provide the appropriate value for the canonical error code based on best practices cite:[gRPCStatusCodes]. -Figure ,,<<#fig-p4prg>>.. illustrates how these messages fit together. +<<#fig-p4prg>>.. illustrates how these messages fit together. .P4Runtime Error Report Message Format. [#fig-p4prg] @@ -5086,7 +5084,7 @@ message WriteRequest { The `device_id` uniquely identifies the target P4 device. The `role` and `election_id` define the client role and election-id as described in the xref:sec-client-arbitration-and-controller-replication[Primary-Backup Arbitration and Controller -Replication]section. The server is expected to perform the following checks (in this order) +Replication] section. The server is expected to perform the following checks (in this order) before processing the `updates` list: . If `device_id` does not match any of the devices known to the P4Runtime @@ -5949,7 +5947,9 @@ burst of `PacketIn` messages. Note that client arbitration errors are never reported using the `StreamError` message. Invalid `MasterArbitrationUpdate` messages sent by the client cause the stream to be terminated and the appropriate error code to be returned to the -client immediately. See section [#sec-arbitration-updates]. +client immediately. See section <<#sec-arbitration-updates>>. + +[#sec-stream-error-messages] ==== Examples of `StreamError` Messages * **Malformed packet-out metadata.** If the server receives a `PacketOut` @@ -6041,7 +6041,7 @@ translated types which are not declared as part of the PSA architecture. [#fig-psa-metadata-translation] image::psa-metadata-translation.png[] -Figure <<#fig-psa-metadata-translation>> illustrates a motivating example, +<<#fig-psa-metadata-translation>> illustrates a motivating example, where a centralized controller is controlling two P4Runtime targets in a fabric. Switch 1 and Switch 2 use different PSA devices, each defining its own port type and number space. In this example, Switch 1 uses a device with 9-bit space for @@ -6497,69 +6497,70 @@ No content changes; tag was incremented only. ==== Changes in v1.4.0 * Actions -* Fix invalid `action_profile_id` in the One Shot Action Selector Programming - example. - Specify that `max_group_size` must be less than or equal to `size` for - Action Selectors. - * Add a `selector_size_semantics` field to the `ActionProfile` message - in P4Info. + ** Fix invalid `action_profile_id` in the One Shot Action Selector Programming + example. + Specify that `max_group_size` must be less than or equal to `size` for + Action Selectors. + ** Add a `selector_size_semantics` field to the `ActionProfile` message + in P4Info. * Controller Sessions, Roles, Arbitration: - * Clarify controller session establishment, maintenance, role and arbitration - * Simplify specification for arbitration updates for which there is no change + ** Clarify controller session establishment, maintenance, role and arbitration + ** Simplify specification for arbitration updates for which there is no change to the controller's `election_id`; in particular, a "no-op" arbitration update from a primary controller (the controller already was, and remains, the primary controller) is essentially treated the same way as an arbitration update which leads to the election of a new primary controller. - * Add support for string role identifiers and deprecate integer role + ** Add support for string role identifiers and deprecate integer role identifiers. - * Add support for specifying a role in `ReadRequest` messages: if present, + ** Add support for specifying a role in `ReadRequest` messages: if present, only entities belonging to this specific role are returned. - * Clarify that the (`device_id`, `role`, `election_id`) 3-tuples are only + ** Clarify that the (`device_id`, `role`, `election_id`) 3-tuples are only unique for live controllers. * Generated code - * Enable C++ Arena Allocation cite:[ArenaAllocation] by default in - p4runtime.proto. - * Added Rust code generation + ** Enable C++ Arena Allocation cite:[ArenaAllocation] by default in + p4runtime.proto. + ** Added Rust code generation * Meters - * Add a `Type` field to the `MeterSpec` message allowing users to restrict - the type of meters that can be used for a table and a new `eburst` field to - the `MeterConfig` message for use with one of the new `MeterSpec` types. - See section on xref:sec-meter-directmeter[Meter & DirectMeter]. - * Defined new meter annotations `@two_rate_three_color`, + ** Add a `Type` field to the `MeterSpec` message allowing users to restrict + the type of meters that can be used for a table and a new `eburst` field to + the `MeterConfig` message for use with one of the new `MeterSpec` types. + See section on xref:sec-meter-directmeter[Meter & DirectMeter]. + ** Defined new meter annotations `@two_rate_three_color`, `@single_rate_two_color`, `@single_rate_three_color` - * Enable P4Runtime servers to provide per-color counter values when direct or - indirect meter entries are read. + ** Enable P4Runtime servers to provide per-color counter values when direct or + indirect meter entries are read. * Miscellaneous - * Add a `PlatformProperties` message specifying desired underlying platform + ** Add a `PlatformProperties` message specifying desired underlying platform properties to the `PkgInfo` message. - * Specify Read behavior in the absence of a P4Info + ** Specify Read behavior in the absence of a P4Info (`ForwardingPipelineConfig` not set yet). - * Clarify that for updates of type `INSERT`, error codes other than + ** Clarify that for updates of type `INSERT`, error codes other than `INVALID_ARGUMENT` can be returned when applicable. - * Clarified the meaning of set and unset scalar and message fields, see - section on xref:sec-default-valued-fields[default-valued fields]. - * Described Dataplane Volatile Objects, see section on xref:sec-data-plane-volatile-objects[Dataplane Volatile Objects]. - * Clarified use of bytestrings in messages, see section on xref:sec-bytestrings[Bytestrings]. + ** Clarified the meaning of set and unset scalar and message fields, see + section on xref:sec-default-valued-fields[default-valued fields]. + ** Described Dataplane Volatile Objects, see section on xref:sec-data-plane-volatile-objects[Dataplane Volatile Objects]. + ** Clarified use of bytestrings in messages, see section on xref:sec-bytestrings[Bytestrings]. * Replication - * Add a `metadata` field to the `MulticastGroupEntry` message. - * In message `Replica`, replaced primitive field `uint32 egress_port` + ** Add a `metadata` field to the `MulticastGroupEntry` message. + ** In message `Replica`, replaced primitive field `uint32 egress_port` in a compatible manner with new `oneof port_kind` containing preferred new field `bytes port`. * Tables - * Clarify that the limitation on supported types for `FieldMatch`, action + ** Clarify that the limitation on supported types for `FieldMatch`, action `Param`, and Packet IO metadata fields (no support for signed integers, with type `int`) apply to all minor revisions of P4Runtime v1, not just to P4Runtime v1.0. - * Add `has_initial_entries` and `is_const` field fields to `Table` message to + ** Add `has_initial_entries` and `is_const` field fields to `Table` message to distinguish mutable and immutable initial table entries, see section on [Constant Tables](#sec-constant-tables). -* ==== Changes in v1.3.0 + +==== Changes in v1.3.0 * Add IANA assigned TCP port, 9559, to P4Runtime server discussion. * Move "Security considerations" section to P4Runtime server discussion. @@ -6617,7 +6618,7 @@ No content changes; tag was incremented only. === P4 Annotations -Table <<#tab-p4-annotations>> lists P4~16~ annotations introduced primarily for +<<#tab-p4-annotations>> lists P4~16~ annotations introduced primarily for the purpose of adding features for the P4Runtime API. .Example of statically-assigned P4Info object IDs @@ -6625,19 +6626,19 @@ the purpose of adding features for the P4Runtime API. [#tab-p4-annotations] |=== | Annotation | Description -| `@brief` | See section <<#sec-annotating-p4-entities-with-documentation>> -| `@controller_header` | See section <<#sec-controller-packet-meta>> -| `@description` | See section <<#sec-annotating-p4-entities-with-documentation>> -| `@id` | See section <<#sec-id-allocation>> -| `@max_group_size` | See sections <<#sec-p4info-action-profile>>, <<#sec-action-profile-group-programming>> -| `@selector_size_semantics` | See section <<#sec-p4info-action-profile>> -| `@max_member_weight` | See section <<#sec-p4info-action-profile>> -| `@two_rate_three_color` | See section <<#sec-meter-directmeter>> -| `@single_rate_three_color` | See section <<#sec-meter-directmeter>> -| `@single_rate_two_color` | See section <<#sec-meter-directmeter>> -| `@pkginfo` | See section <<#sec-annotating-p4-code-with-pkginfo>> -| `@platform_property` | See section <<#sec-annotating-p4-code-with-pkginfo>> -| `@p4runtime_translation` | See sections <<#sec-user-defined-types>>, <<#sec-translation-of-port-numbers>> +| `@brief` | See <<#sec-annotating-p4-entities-with-documentation>> +| `@controller_header` | See <<#sec-controller-packet-meta>> +| `@description` | See <<#sec-annotating-p4-entities-with-documentation>> +| `@id` | See <<#sec-id-allocation>> +| `@max_group_size` | See <<#sec-p4info-action-profile>>, <<#sec-action-profile-group-programming>> +| `@selector_size_semantics` | See <<#sec-p4info-action-profile>> +| `@max_member_weight` | See <<#sec-p4info-action-profile>> +| `@two_rate_three_color` | See <<#sec-meter-directmeter>> +| `@single_rate_three_color` | See <<#sec-meter-directmeter>> +| `@single_rate_two_color` | See <<#sec-meter-directmeter>> +| `@pkginfo` | See <<#sec-annotating-p4-code-with-pkginfo>> +| `@platform_property` | See <<#sec-annotating-p4-code-with-pkginfo>> +| `@p4runtime_translation` | See <<#sec-user-defined-types>>, <<#sec-translation-of-port-numbers>> |=== [#sec-value-set-example] @@ -6737,8 +6738,7 @@ servers. In gRPC, the status of a RPC request is sent as metadata, whose size is limited by the `grpc.max_metadata_size` gRPC channel argument. By default, this limit is 8KB, which can be a problem for the `Write` P4Runtime RPC. The `Write` RPC -returns an individual error for every item in a batch (see Section -<<#sec-write-rpc>>), which can quickly result in a status size over 8KB. In that +returns an individual error for every item in a batch (see <<#sec-write-rpc>>), which can quickly result in a status size over 8KB. In that case, the gRPC server would not send the status, but instead send a `RESOURCE_EXHAUSTED` error, without any of the individual errors. @@ -6839,7 +6839,7 @@ containing the data for one table entry. Note that if a P4Runtime client attempted to send a `WriteRequest` to a P4Runtime server with the contents of the entries file, the server must return an error for each entry that has `is_const` true, as -described in Section <<#sec-table-entry>>. +described in <<#sec-table-entry>>. [bibliography] == References diff --git a/docs/v1/resources/theme/logo.png b/docs/v1/resources/theme/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..75445f3563bbc100e5c309f76af7a678cef1794f GIT binary patch literal 75134 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%0DkX4|*swCpzN)qsKds=*r_L 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�m8#T!%88p3_)| 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 Date: Tue, 19 Nov 2024 22:33:06 +0100 Subject: [PATCH 04/35] Addressed some comments in the PR, part 2 Signed-off-by: Davide Scano --- docs/v1/P4Runtime-Spec.adoc | 194 ++++++++++++++++++------------------ 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index c74495ea..a89c79ee 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -799,7 +799,7 @@ These messages appear nested within many other messages. Good content within a documentation field is extremely helpful to P4Runtime application developers. -[source,p4] +[source,protobuf] ---- message Documentation { // A brief description of something, e.g. one sentence @@ -816,7 +816,7 @@ message Documentation { The preamble serves as the "descriptor" for each entity and contains the unique instance ID, name, alias, annotations and documentation. -[source,p4] +[source,protobuf] ---- message Preamble { // ids share the same number-space; e.g. table ids cannot overlap with counter @@ -866,7 +866,7 @@ The P4 compiler should not emit `annotation` messages in the P4Info for these specific cases; instead, it should generate the `Documentation` messages as described. The following example shows documentation annotations for a `table` entity: -[source,p4] +[source,protobuf] ---- @brief("Match IPv4 addresses to next-hop MAC and port") @description("Match IPv4 addresses to next-hop MAC and port. \ @@ -893,7 +893,7 @@ Similarly, structured annotations are represented in `repeated StructuredAnnotat The `structured_annotations` contain parsed representations of the original annotation source. This parsing includes expression-evaluation, so the resulting P4Info may contain a simplified replica of the original structured annotations. The structured annotation messages are defined in p4types.proto. -[source,p4] +[source,protobuf] ---- message KeyValuePair { string key = 1; @@ -962,7 +962,7 @@ table t { The generated P4Info will contain the following. -[source,p4] +[source,protobuf] ---- structured_annotations { name: "Empty" @@ -1510,7 +1510,7 @@ The `ActionProfile` message includes the following fields: `sum_of_weights` for backwards compatibility in Action Selectors. In Action Profiles, this value must be unset. -=== `Counter` & `DirectCounter` +==== `Counter` & `DirectCounter` `Counter` and `DirectCounter` messages are used to specify all possible instances of Counter and Direct Counter PSA externs respectively. Both externs @@ -1550,7 +1550,7 @@ field, which indicates whether the index has a xref:sec-user-defined-types[user- type]. This is useful for xref:sec-psa-metadata-translation[translation].The underlying built-in type must be a fixed-width unsigned bitstring (`bit`). [#sec-meter-directmeter] -=== `Meter` & `DirectMeter` +==== `Meter` & `DirectMeter` `Meter` and `DirectMeter` messages are used to specify all possible instances of Meter and Direct Meter PSA externs. Both externs provide mechanism to keep data @@ -1616,7 +1616,7 @@ field, which indicates whether the index has a xref:sec-user-defined-types[user- type]. This is useful for xref:sec-psa-metadata-translation[translation]. The underlying built-in type must be a fixed-width unsigned bitstring (`bit`). [#sec-controller-packet-meta] -=== `ControllerPacketMetadata` +==== `ControllerPacketMetadata` `ControllerPacketMetadata` messages are used to describe any metadata associated with controller packet-in and packet-out. A packet-in is defined as a data plane @@ -1730,7 +1730,7 @@ encapsulate controller packets. However, in this case the client will be responsible for extracting the metadata from the serialized header in packet-in messages and for serializing the metadata when generating packet-out messages. -=== `ValueSet` +==== `ValueSet` `ValueSet` messages are used to specify all possible P4 Parser Value Sets. Parser Value Sets can be used by the control plane to specify runtime @@ -1866,7 +1866,7 @@ resolves to a `bit`. For each `MatchField` that corresponds to a user-defined type, the `type_name` field must be set to the appropriate value (i.e. the name of the type). -=== `Register` +==== `Register` `Register` messages are used to specify all possible instances of Register PSA externs. @@ -1891,7 +1891,7 @@ The `Register` message defines the following fields: xref:sec-psa-metadata-translation[translation]. The underlying built-in type must be a fixed-width unsigned bitstring (`bit`). -=== `Digest` +==== `Digest` `Digest` messages are used to specify all possible instances of Packet Digest PSA externs. @@ -1914,7 +1914,7 @@ The `Digest` message defines the following fields: notification using a `P4DataTypeSpec` message (see section on xref:sec-representation-of-arbitrary-p4-types[Representation of Arbitrary P4 Types]). [#sec-p4info-extern] -=== `Extern` +==== `Extern` `Extern` messages are used to specify all extern instances across all extern types for a non-PSA architecture. This is useful when extending P4Runtime to @@ -1947,7 +1947,7 @@ the following fields: If the P4 program does not include any instance of a given extern type, the `Extern` message instance for that type should be omitted from the P4Info. -== Support for Arbitrary P4 Types with P4TypeInfo +=== Support for Arbitrary P4 Types with P4TypeInfo See section on xref:sec-representation-of-arbitrary-p4-types[Representation of Arbitrary P4 Types]. @@ -1998,7 +1998,7 @@ message to clearly identify cases where a cookie is not present. There is a subtle distinction between the treatment of default-valued scalar fields vs default-valued message fields in P4Runtime. -=== Set / Unset Scalar Fields +==== Set / Unset Scalar Fields In Protobuf version 3 (*proto3*), the default value of scalar fields is `0` for numeric types such as `int32`, and the empty string `""` for string types @@ -2015,7 +2015,7 @@ In contrast to scalar fields, note that for message fields, we often do make a distinction between an unset message field vs a message field set to its default value, see the next section. -=== Set / Unset Message Fields +==== Set / Unset Message Fields In Protobuf version 3 (*proto3*), the default value for a message field is "unset" cite:[ProtoDefaults]. An application, such as the P4Runtime client or @@ -2095,7 +2095,7 @@ counter_id: message. [#sec-read-write-symmetry] -== Read-Write Symmetry +=== Read-Write Symmetry The reads and writes a client issues towards a server should be symmetrical and unambiguous. More specifically, if a client writes a P4 entity and then reads it @@ -2135,7 +2135,7 @@ that different orderings of the same elements are considered equal. This method of comparing Protobuf messages may come at a cost in performance. [#sec-data-plane-volatile-objects] -=== Data plane volatile objects +==== Data plane volatile objects An exception to read-write symmetry are objects whose contents or fields can change by the action of the data plane alone, even if no @@ -2244,7 +2244,7 @@ Not data plane volatile in any architectures defined by P4.org specifications. [#sec-bytestrings] -== Bytestrings +=== Bytestrings P4Runtime integer values may be too large to fit in Protobuf primitive data types (32-bit and 64-bit words). The P4 language does not put any limit on the @@ -2288,17 +2288,16 @@ may not be of type `int`. The rules for encoding signed values thus only apply to messages of type `P4Data` (see <<#sec-p4data-in-p4runtime-proto>>). For a value of type `bit`, the fewest number of bits required to represent -the integer value $V > 0$ is the smallest integer $A$ such that $V \leq 2^A - -1$. +the integer value latexmath:[$V > 0$] is the smallest integer latexmath:[$A$] such that latexmath:[$V \leq 2^A - 1$]. For a value of type `int`, the fewest number of bits required to represent -the integer value $V \neq 0$ in 2's complement form is the smallest integer $A$ -such that $-2^{A-1} \leq V \leq 2^{A-1} - 1$. +the integer value latexmath:[$V \neq 0$]in 2's complement form is the smallest integer latexmath:[$A$] +such that latexmath:[$-2^{A-1} \leq V \leq 2^{A-1} - 1$]. -As a special case, define that the value $V=0$ requires at least $A=1$ bit to +As a special case, define that the value latexmath:[$V=0$] requires at least latexmath:[$A=1$] bit to represent, regardless of whether it is signed or unsigned. -The shortest possible binary string for an integer $V$ that needs $A$ bits to +The shortest possible binary string for an integer latexmath:[$V$] that needs latexmath:[$A$] bits to represent it is computed as: [source,c++] ---- @@ -2414,9 +2413,9 @@ the binary string is less than the maximum length specified in the P4 program, and return an `OUT_OF_RANGE` error code otherwise. [#sec-representation-of-arbitrary-p4-types] -== Representation of Arbitrary P4 Types +=== Representation of Arbitrary P4 Types -=== Problem Statement +==== Problem Statement The P4~16~ language includes more complex types than just binary strings cite:[P4ComplexTypes]. Most of these complex data types can be exposed to the @@ -2479,7 +2478,7 @@ in addition to the binary contents of this header. Rather than coming-up with a serialization format from scratch, we decided to use a Protobuf representation for all P4~16~ types. -=== P4 Type Specifications in p4info.proto +==== P4 Type Specifications in p4info.proto In order for the P4Runtime client to generate correctly-formatted messages and for the P4Runtime service implementation to validate them, P4Info needs to @@ -2528,7 +2527,7 @@ P4~16~ declaration. The same goes for the order of members of an `enum` (serializable or not) or members of `error`. [#sec-p4data-in-p4runtime-proto] -=== `P4Data` in p4runtime.proto +==== `P4Data` in p4runtime.proto P4Runtime uses the `P4Data` message to represent values of arbitrary types. The P4Runtime client must generate correct `P4Data` messages based on the type @@ -2561,7 +2560,7 @@ guaranteeing read-write symmetry --- by introducing the following requirements: included in the P4Info, in the corresponding `P4HeaderStackTypeSpec` or `P4HeaderUnionStackTypeSpec` message. -=== Example +==== Example Let's look at the Register example again: @@ -2661,7 +2660,7 @@ update { } ---- -=== `enum`, serializable `enum` and `error` +==== `enum`, serializable `enum` and `error` P4~16~ supports 2 different classes of enumeration types: without underlying type (safe enum) and with underlying type (serializable enum or "unsafe" enum) @@ -2683,7 +2682,7 @@ it easier for the server to respect the xref:sec-read-write-symmetry[read-write symmetry] principle. [#sec-user-defined-types] -=== User-defined types +==== User-defined types P4~16~ enables programmers to introduce new types cite:[P4NewTypes]. While similar to `typedef`, this mechanism introduces in fact a new type, which is not a @@ -2803,7 +2802,7 @@ configuration file passed on the command-line when invoking the compiler). This mechanism should take precedence over `@p4runtime_translation` to enable users to overwrite annotations included as part of the P4 architecture definition. -=== Trade-off for v1.x Releases +==== Trade-off for v1.x Releases For the v1.x release ofs P4Runtime, it was decided not to replace occurrences of `bytes` with `P4Data` in the `p4.v1.FieldMatch` message, which is used to @@ -2989,7 +2988,7 @@ The `is_const` field must be `false` in any `INSERT`, `MODIFY`, or must reject the operation and return an `INVALID_ARGUMENT` error. [#sec-match-format] -=== Match Format +==== Match Format The bytes fields in the `FieldMatch` message follow the format described in xref:sec-bytestrings[Bytestrings]. @@ -3140,7 +3139,7 @@ assert(low != min_field_value || high != max_field_value) assert(BytestringValid(match.optional().value())) ---- -=== Action Specification +==== Action Specification The `TableEntry` `action` field must be set for every `INSERT` update but may be left unset for `MODIFY` updates, in which case the action specification for the @@ -3193,7 +3192,7 @@ has not been inserted in the corresponding action profile instance yet, the P4Runtime server must return a `NOT_FOUND` error code. [#sec-default-entry] -=== Default Entry +==== Default Entry According to the P4 specification, the default entry for a table is always set. It can be set at compile-time by the P4 programmer --- or defaults to `NoAction` @@ -3225,7 +3224,7 @@ indirect tables --- tables with an ActionProfile or ActionSelector hope that it would simplify the implementation of the P4Runtime service. [#sec-constant-tables] -=== Constant Tables +==== Constant Tables Constant tables are defined as tables whose match entries are immutable. They are identified by the table property `const entries` @@ -3263,7 +3262,7 @@ explicitly specifying priorities for entries in constant tables, but `p4c` does not yet support this. [#sec-preinitialized-tables] -=== Preinitialized tables +==== Preinitialized tables Preinitialized tables are those defined with an `entries` table property in the P4~16~ source code, with no `const` qualifier before @@ -3320,7 +3319,7 @@ the open source `p4c` compiler. See <<#sec-entries-files>> for details. [#sec-table-wildcard-reads] -=== Wildcard Reads +==== Wildcard Reads When performing a `ReadRequest`, the P4Runtime client can select all entries from one or all tables on the target and use several of the `TableEntry` fields @@ -3466,7 +3465,7 @@ single entry (the "don't care" entry) as long as the `priority` field is set to the correct value. [#sec-direct-resources] -=== Direct Resources +==== Direct Resources In addition to the `DirectCounterEntry` and `DirectMeterEntry` entities, P4Runtime support reading and writing direct resources as part of the @@ -3569,7 +3568,7 @@ meter configuration, it needs to be provided again in the `TableEntry` message (i.e. the `meter_config` field must be set to match the existing configuration). [#sec-idle-timeout] -=== Idle-timeout +==== Idle-timeout P4Runtime supports idle timeout for table entries. When adding a table entry, the client can specify a Time-To-Live (TTL) value. If at any time during its @@ -3622,7 +3621,7 @@ For more information about idle timeout, in particular regarding `IdleTimeoutNotification`, please refer to the xref:sec-table-idle-timeout-notification[Table idle timeout notifications] section. [#sec-action-profile-member-and-group] -== `ActionProfileMember` & `ActionProfileGroup` +=== `ActionProfileMember` & `ActionProfileGroup` P4Runtime defines an API for programming a PSA ActionProfile extern using `ActionProfileMember` messages. A PSA ActionSelector extern can be programmed @@ -3678,7 +3677,7 @@ The obtained member id is used to look up the member table in the selector and obtain the action specification, which is then used to modify the packet or its metadata. -=== Action Profile Member Programming +==== Action Profile Member Programming Action profile members are entries in the ActionProfile or ActionSelector and are referenced by a `uint32` identifier that is bound to an action @@ -3732,7 +3731,7 @@ an existing ActionProfile or ActionSelector object, and a `member_id` equal to 0, will read all members of that specified object. [#sec-action-profile-group-programming] -=== Action Profile Group Programming +==== Action Profile Group Programming Action profile groups are entries in an ActionSelector and are referenced by a `uint32` identifier that is bound to a set of action profile members already @@ -4919,7 +4918,7 @@ section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures] for more information. [#sec-error-reporting-messages] -=== Error Reporting Messages +== Error Reporting Messages P4Runtime is based on gRPC and all RPCs return a status to indicate success or failure. gRPC supports multiple language bindings; we use C++ binding below to @@ -4975,7 +4974,7 @@ error-reporting mechanism is orthogonal to the one described in this section, which applies to unary RPCs. See the section on xref:sec-stream-error-reporting[Stream Error Reporting] for more information. -=== Atomicity of Individual `Write` and `Read` Operations +== Atomicity of Individual `Write` and `Read` Operations Each individual entity in a batch is guaranteed to be read or written atomically relative to packet forwarding. For example, for every table data plane `apply` @@ -5060,7 +5059,7 @@ P4Runtime implementation for a P4-programmable target, we expect the P4 compiler to reject the program. [#sec-write-rpc] -=== `Write` RPC +== `Write` RPC The `Write` RPC updates one or more P4 entities on the target. The request is defined as follows: @@ -5118,7 +5117,7 @@ This is modeled as performing an update operation on the given entity against its entity container. The entity container is either a *logical* table (e.g. `CounterEntry`) or an actual table (e.g. `TableEntry`) in the P4 data plane. Each entity in the container is uniquely identified by its *key*. Please -refer to the [P4 Entity Messages](#sec-p4-entity-msgs) section for details on +refer to the xref:sec-p4-entity-msgs[P4 Entity Messages] section for details on what parts of the entity specification make up the *key* for each P4 entity. An update can be one of the following types: @@ -5155,20 +5154,20 @@ entity or table (in the case of `TableEntry` entities). The P4Runtime server may choose to reorder updates in a batch when processing them, and/or process updates in parallel. Updates across multiple concurrent -`WriteRequest`s can also be processed interleaved and/or in parallel. +``WriteRequest``s can also be processed interleaved and/or in parallel. However, **the processing of requests must be strictly serializable**. That -is, given a history $S$ of `WriteRequest`s including the responses to those -requests, there must exist an order $L$ for all updates in $S$, such that: +is, given a history latexmath:[$S$] of ``WriteRequest``s including the responses to those +requests, there must exist an order latexmath:[$L$] for all updates in latexmath:[$S$], such that: . All updates from the same write request must appear as a contiguous - subsequence in $L$, but the order within that subsequence can be arbitrary. -. For two updates $u_1$ and $u_2$, if the write request containing $u_1$ - completed before the write request of $u_2$ was sent, then $u_1$ must appear - before $u_2$ in $L$. -. Executing all updates in $L$ sequentially must yield the same response for - every update as in $S$. -. The observable state of the switch after $S$ (e.g., through the `Read` RPC) - is identical to the one obtained by sequentially executing $L$. + subsequence in latexmath:[$L$], but the order within that subsequence can be arbitrary. +. For two updates latexmath:[$u_1$] and latexmath:[$u_2$], if the write request containing latexmath:[$u_1$] + completed before the write request of latexmath:[$u_2$] was sent, then latexmath:[$u_1$] must appear + before latexmath:[$u_2$] in latexmath:[$L$]. +. Executing all updates in latexmath:[$L$] sequentially must yield the same response for + every update as in latexmath:[$S$]. +. The observable state of the switch after latexmath:[$S$] (e.g., through the `Read` RPC) + is identical to the one obtained by sequentially executing latexmath:[$L$]. The `Write` RPC demarcates the batch boundary, and can be used to ensure ordering between dependent updates. When the `Write` RPC returns, it is required @@ -5248,7 +5247,7 @@ decide to use `DATAPLANE_ATOMIC` at one time and default behavior === Error Reporting -Please see section [Error Reporting Messages](#sec-error-reporting-messages) for +Please see section xref:sec-error-reporting-messages[Error Reporting Messages] for information on error reporting messages and guidelines. P4Runtime server will populate `grpc::Status` as follows: @@ -5300,7 +5299,7 @@ binary_error_details { } ---- -=== `Read` RPC +== `Read` RPC The `Read` RPC retrieves one or more P4 entities from the P4Runtime server. The request is defined as: @@ -5457,7 +5456,7 @@ multi-reader lock (also known as multiple-readers/single-writer lock). Conversely (e.g. in a single-threaded architecture), it may choose to serialize `Read` RPC processing. -==== Parallelism of Read and Write Requests +=== Parallelism of Read and Write Requests A P4Runtime server may be implemented to serve at most one `ReadRequest` or `WriteRequest` message at a time, sequentially. It @@ -5502,7 +5501,7 @@ parallel. It is not required that a P4Runtime server do this, and may be difficult to implement correctly. -=== `SetForwardingPipelineConfig` RPC +== `SetForwardingPipelineConfig` RPC A P4Runtime client may configure the P4Runtime target with a new P4 pipeline by invoking the `SetForwardingPipelineConfig RPC`. The request is defined as: @@ -5583,7 +5582,7 @@ config is part of the device's software image, or is supplied using a different mechanism). In such cases, the RPC should return an `UNIMPLEMENTED` error. -=== `GetForwardingPipelineConfig` RPC +== `GetForwardingPipelineConfig` RPC The forwarding-pipeline configuration of the target can be retrieved by invoking the `GetForwardingPipelineConfig RPC`. The request is defined as: @@ -5651,10 +5650,10 @@ If a P4Runtime server supports both `SetForwardingPipelineConfig` as well as returning the `p4_device_config`, there should be read-write symmetry between `SetForwardingPipelineConfig` and `GetForwardingPipelineConfig` RPCs. -=== P4Runtime Stream Messages +== P4Runtime Stream Messages [#sec-packet-i_o] -==== Packet I/O +=== Packet I/O P4Runtime supports controller packet-in and packet-out by means of `PacketIn` and `PacketOut` stream messages, respectively. @@ -5726,7 +5725,7 @@ message PacketMetadata { the section on [Stream Error Reporting](#sec-stream-error-reporting) for more information on `error`. -==== Client Arbitration Update +=== Client Arbitration Update P4Runtime's client arbitration mechanism ensures that only the current primary can modify state on the switch, and that the `election_id` is monotonically @@ -5796,7 +5795,7 @@ it populates the `MasterArbitrationUpdate` message using the `device_id`, also populates the `status` field in the `MasterArbitrationUpdate` according to the rules in an xref:sec-arbitration-updates[earlier section]. -===== Unset Election ID +==== Unset Election ID The sender need not specify an `election_id`. If the `election_id` is unset, the sender's `election_id` is considered lower than any @@ -5813,12 +5812,12 @@ is different from an unset `election_id`, see xref:sec-default-valued-fields[the section on default-valued fields]. -==== Digest Messages +=== Digest Messages See the [DigestEntry](#sec-digestentry) section. [#sec-table-idle-timeout-notification] -==== Table Idle Timeout Notification +=== Table Idle Timeout Notification When a table supports idle timeout (as per the P4Info message), the primary client can specify a TTL value for each entry in the table (see @@ -5889,7 +5888,7 @@ while (true) { } ---- -==== Architecture-Specific Notifications +=== Architecture-Specific Notifications P4Runtime supports streaming arbitrary Protobuf messages between the server and the client on `StreamChannel`, by including an `Any` Protobuf field cite:[ProtoAny] @@ -5899,7 +5898,7 @@ streaming of data from the server to the client, much like the xref:sec-digesten extern]. See section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures]for more information. [#sec-stream-error-reporting] -==== Stream Error Reporting +=== Stream Error Reporting The P4Runtime server can asynchronously report errors which occur when processing `StreamMessageRequest` messages, using the `error` message field (of @@ -5995,7 +5994,7 @@ error { } ---- -=== `Capabilities` RPC +== `Capabilities` RPC The `Capabilities` RPC offers a mechanism through which a P4Runtime client can discover the capabilities of the P4Runtime server implementation. At the moment, @@ -6020,10 +6019,10 @@ not implement this RPC (i.e. an `UNIMPLEMENTED` error is returned by the P4Runtime service) implements an older version of the P4Runtime specification (1.0 or a pre-release version of 1.0). -=== Portability Considerations +== Portability Considerations [#sec-psa-metadata-translation] -==== PSA Metadata Translation +=== PSA Metadata Translation The *Portable Switch Architecture* (PSA) defines standard metadata, whose data plane types are different on different PSA targets. In order to enable @@ -6113,7 +6112,7 @@ perform the translation. The sub-sections below detail the translation mechanics for different usage of PSA port types in P4 programs. -===== Translation of Packet-IO Header Fields +==== Translation of Packet-IO Header Fields Port type fields can be part of header types. For example, ports may be part of Packet IO headers, as in the following example:. @@ -6155,7 +6154,7 @@ config. The server will then insert the translated controller-specific value in the packet-in metadata fields before sending the packet over the stream channel to the controller. -===== Translation of Match Fields +==== Translation of Match Fields Port type entities, particularly ingress and egress port standard metadata, may be used as match fields in a P4 table's match key as shown in the example below: @@ -6191,7 +6190,7 @@ require that for these match kinds the port match be either *de facto* "exact" (0xffffffff mask for `TERNARY`, prefix-length of 32 for `LPM`, or same low and high bounds for `RANGE`) or "don't care". -===== Translation of Action Parameters +==== Translation of Action Parameters `PortId_t` type parameters can be part of a P4 action definition as shown in the example below: @@ -6220,7 +6219,7 @@ translation is required for this parameter. The P4Runtime server will use the switch configuration to translate action parameter values between the controller and the target device. -===== Port Translation for PSA Extern APIs +==== Port Translation for PSA Extern APIs The P4Runtime API for action selectors supports specifying a watch field per member in an action profile group that is programmed in a selector. This field @@ -6240,7 +6239,7 @@ representation of the port(s). The P4Runtime server will translate these SDN ports to device-specific port numbers for multicasting and cloning in the data plane. -===== Using Port as an Index to a Register, Indirect Counter or Indirect Meter +==== Using Port as an Index to a Register, Indirect Counter or Indirect Meter P4Runtime supports using a translated value (`PortId_t` or any other translated type for which the underlying built-in type is `bit`) as an index to a @@ -6281,7 +6280,7 @@ using SDN port numbers as indices, and not device-specific port numbers. The server that translation is required. [#sec-p4runtime-versioning] -=== P4Runtime Versioning +== P4Runtime Versioning P4Runtime follows the Google guidelines for versioning cloud APIs cite:[APIVersioning]. We use a `MAJOR.MINOR.PATCH` style version number scheme and @@ -6321,7 +6320,7 @@ P4Runtime Github repository cite:[P4RuntimeRepo] and the version label follows semantic versioning rules cite:[SemVer]. [#sec-extending-p4runtime] -=== Extending P4Runtime for non-PSA Architectures +== Extending P4Runtime for non-PSA Architectures P4Runtime includes native support for PSA programs and in particular support for runtime control of PSA extern instances. While the definition of Protobuf @@ -6344,7 +6343,7 @@ as the major version number for the P4Runtime version they "extend". For the remainder of this section, we will refer to these two files as *p4info-ext* and *p4runtime-ext* respectively. -==== Extending P4Runtime for Architecture-Specific Externs +=== Extending P4Runtime for Architecture-Specific Externs Each P4 architecture can define its own set of extern types. Controlling them at runtime requires defining new Protobuf messages in both *p4info-ext* and @@ -6361,7 +6360,7 @@ extern MyNewPacketCounter { } ---- -===== Extending the P4Info message +==== Extending the P4Info message * Id prefixes `0x81` through `0xfe` are reserved for architecture-specific externs. It is recommended that *p4info-ext* include a `P4Ids` message based @@ -6394,7 +6393,7 @@ message MyNewPacketCounter { } ---- -===== Extending the P4Runtime Service +==== Extending the P4Runtime Service Just like *p4info-ext*, *p4runtime-ext* should include a Protobuf message definition for every extern type that can be controlled at runtime. This message @@ -6423,9 +6422,9 @@ should define the appropriate Protobuf messages for this bidirectional streaming in *p4runtime-ext* and embed instances of these messages in `p4.v1.StreamMessageRequest` and `p4.v1.StreamMessageResponse` as appropriate. -==== Architecture-Specific Table Extensions +=== Architecture-Specific Table Extensions -===== New Match Types +==== New Match Types An architecture may introduce new table match types cite:[P4MatchTypes]. P4Runtime accounts for this by providing the following hooks: @@ -6444,7 +6443,7 @@ accounts for this by providing the following hooks: `other` field, which can then be decoded by the P4Runtime server using the match type name included in P4Info. -===== New Table Properties +==== New Table Properties An architecture may introduce additional table properties cite:[P4TableProperties]. In some instances, it can be desirable to include the @@ -6454,7 +6453,7 @@ field cite:[ProtoAny]. At the moment, there is not any mechanism to extend the `p4.v1.TableEntry` message based on the value of architecture-specific table properties, but we may include on in future versions of the API. -=== Known Limitations of Current P4Runtime Version +== Known Limitations of Current P4Runtime Version * `FieldMatch`, action `Param`, and controller packet metadata fields only support unsigned bitstrings, i.e. values of one of the following types (not @@ -6802,15 +6801,16 @@ entries declared via the `entries` table property within the program. An example P4~16~ program that can be used to demonstrate this capability is `table-entries-ternary-bmv2.p4` cite:[p4cTestProgramForConstEntries]: - - git clone https://github.com/p4lang/p4c - cd p4c/testdata/p4_16_samples - mkdir tmp - p4test --arch v1model \ - --p4runtime-files tmp/p4info.txt \ - --p4runtime-entries-files tmp/entries.txt \ - table-entries-ternary-bmv2.p4 - +[source, bash] +---- +git clone https://github.com/p4lang/p4c +cd p4c/testdata/p4_16_samples +mkdir tmp +p4test --arch v1model \ + --p4runtime-files tmp/p4info.txt \ + --p4runtime-entries-files tmp/entries.txt \ + table-entries-ternary-bmv2.p4 +---- You can replace the `.txt` suffix of the file name `tmp/entries.txt` in the example command above with `.json` or `.bin`. The `.bin` format is a binary P4Runtime API protobuf message format. The `.txt` From 207dd87430b62af53aaac23b8abd6554a6c4eb02 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Tue, 19 Nov 2024 22:54:43 +0100 Subject: [PATCH 05/35] Addressed some comments in the PR, part 3 Signed-off-by: Davide Scano --- docs/v1/Makefile | 10 +++++----- docs/v1/P4Runtime-Spec.adoc | 9 +++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/v1/Makefile b/docs/v1/Makefile index 2e3d99d8..05b7f7ee 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -10,11 +10,11 @@ build: mkdir -p build # Note: Brute-force image rendering; could use more precise file-by-file make rules -images: build resources/figs/*.odg - soffice --convert-to svg --outdir build resources/figs/*.odg > /dev/null 2>&1 - soffice --convert-to png --outdir build resources/figs/*.odg > /dev/null 2>&1 +figs: build resources/figs/*.odg + soffice --convert-to svg --outdir resources/figs/ resources/figs/*.odg > /dev/null 2>&1 + soffice --convert-to png --outdir resources/figs/ resources/figs/*.odg > /dev/null 2>&1 -${SPEC}.pdf: ${SPEC}.adoc +${SPEC}.pdf: ${SPEC}.adoc figs time asciidoctor-pdf -v \ -a pdf-fontsdir=resources/fonts \ -r asciidoctor-mathematical \ @@ -22,7 +22,7 @@ ${SPEC}.pdf: ${SPEC}.adoc -r asciidoctor-lists \ -a rouge-style=$(ROUGE_STYLE) $< -${SPEC}.html: ${SPEC}.adoc +${SPEC}.html: ${SPEC}.adoc figs time asciidoctor -v \ -r asciidoctor-mathematical \ -r asciidoctor-bibtex \ diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index a89c79ee..d6386090 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -22,6 +22,7 @@ :bibtex-order: appearance :bibtex-style: ieee :listing-caption: Listing +:revdate: {docdate} [abstract] @@ -428,7 +429,7 @@ charge of the P4 target. In this use-case, the device has no control of the pipeline, it just hosts the server. While this is possible, it is probably more practical to have a hybrid use-case as described in subsequent sections. -.Use-Case: Use-Case: Single Remote Controller +.Use-Case: Single Remote Controller [#fig-single-remote-controller] image::single-embedded-controller.png[] @@ -446,7 +447,7 @@ For example, to minimize round-trip times (RTT) it might make sense for the embedded controller to manage the contents of a fast-failover table. The remote controller might manage the contents of routing tables. -.Use-Case: Use-Case: Embedded Plus Single Remote Controller +.Use-Case: Embedded Plus Single Remote Controller [#fig-embedded-plus-single-remote-controller] image::embedded-plus-single-remote-controller.png[] @@ -2291,7 +2292,7 @@ For a value of type `bit`, the fewest number of bits required to represent the integer value latexmath:[$V > 0$] is the smallest integer latexmath:[$A$] such that latexmath:[$V \leq 2^A - 1$]. For a value of type `int`, the fewest number of bits required to represent -the integer value latexmath:[$V \neq 0$]in 2's complement form is the smallest integer latexmath:[$A$] +the integer value latexmath:[$V \neq 0$]in "2's" complement form is the smallest integer latexmath:[$A$] such that latexmath:[$-2^{A-1} \leq V \leq 2^{A-1} - 1$]. As a special case, define that the value latexmath:[$V=0$] requires at least latexmath:[$A=1$] bit to @@ -6557,7 +6558,7 @@ No content changes; tag was incremented only. to P4Runtime v1.0. ** Add `has_initial_entries` and `is_const` field fields to `Table` message to distinguish mutable and immutable initial table entries, - see section on [Constant Tables](#sec-constant-tables). + see section on xref:sec-constant-tables[Constant Tables]. ==== Changes in v1.3.0 From f6703ed4db890335f0fc69bef232e48579c2fd6c Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Thu, 21 Nov 2024 23:31:55 +0100 Subject: [PATCH 06/35] Addressed some comments in the PR, part 4 Signed-off-by: Davide Scano --- docs/v1/P4Runtime-Spec.adoc | 89 +++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index d6386090..368060bb 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -256,7 +256,7 @@ metadata. Furthermore, the controller can query the target for the .P4Runtime Reference Architecture. [#fig-reference-architecture] -image::reference-architecture.png[] +image::reference-architecture.png[width=400,align="center"] === P4Runtime Service Implementation @@ -419,7 +419,7 @@ an IPC. .Use-Case: Single Embedded Controller [#fig-single-embedded-controller] -image::single-embedded-controller.png[] +image::single-embedded-controller.png[width=400,align="center"] === Single Remote Controller @@ -431,7 +431,7 @@ practical to have a hybrid use-case as described in subsequent sections. .Use-Case: Single Remote Controller [#fig-single-remote-controller] -image::single-embedded-controller.png[] +image::single-embedded-controller.png[width=400,align="center"] === Embedded + Single Remote Controller @@ -449,7 +449,7 @@ controller might manage the contents of routing tables. .Use-Case: Embedded Plus Single Remote Controller [#fig-embedded-plus-single-remote-controller] -image::embedded-plus-single-remote-controller.png[] +image::embedded-plus-single-remote-controller.png[width=400,align="center"] === Embedded + Two Remote Controllers @@ -461,7 +461,7 @@ entities, perhaps statistics tables. Role-based access divides the ownership. .Use-Case: Embedded Plus Two Remote Controllers [#fig-embedded-plus-two-remote-controllers] -image::embedded-plus-two-remote-controllers.png[] +image::embedded-plus-two-remote-controllers.png[width=400,align="center"] === Embedded Controller + Two High-Availability Remote Controllers @@ -475,7 +475,7 @@ role-based client arbitration scheme supports it. .Use-Case: Embedded Plus Two Remote High-Availability Controllers [#fig-embedded-plus-two-remote-ha-controllers] -image::embedded-plus-two-remote-controllers.png[] +image::embedded-plus-two-remote-controllers.png[width=400,align="center"] [#sec-client-arbitration-and-controller-replication] == Client Arbitration and Controller Replication @@ -514,8 +514,7 @@ follows: client that has the highest `election_id` that the device has ever received for the same (`device_id`, `role`) values. A connection between a controller instance and a device id --- which involves a persistent `StreamChannel` --- - can be referred to as a P4Runtime client. - + can be referred to as a P4Runtime client. + Note that the P4Runtime server does not assign a `role` or `election_id` to any controller. It is up to an arbitration mechanism outside of the server to decide on the controller roles, and the `election_id` values used for each @@ -546,8 +545,8 @@ follows: packet-in and packet-out messages. Note that unless specified otherwise by the role definitions, only the primary controller can participate in packet I/O. This feature is explained in more details in the xref:sec-packet-i_o[Packet I/O] section. - - Note that a controller session is only required if the controller wants to do + + + Note that a controller session is only required if the controller wants to do Packet I/O, or modify the forwarding state. * Note that the stream is opened per device. In case a switching platform has @@ -867,7 +866,7 @@ The P4 compiler should not emit `annotation` messages in the P4Info for these specific cases; instead, it should generate the `Documentation` messages as described. The following example shows documentation annotations for a `table` entity: -[source,protobuf] +[source,p4] ---- @brief("Match IPv4 addresses to next-hop MAC and port") @description("Match IPv4 addresses to next-hop MAC and port. \ @@ -1020,7 +1019,7 @@ table t { The generated P4Info will contain: -[source,p4] +[source,protobuf] ---- structured_annotations { name: "MixedKV" @@ -1052,7 +1051,7 @@ structured_annotations { A source location describes a location within a *.p4*-source file. The `SourceLocation` message is defined in p4types.proto as follows: -[source,p4] +[source,protobuf] ---- // Location of code relative to a given source file. message SourceLocation { @@ -1094,7 +1093,7 @@ library. Although all fields are technically "optional," every implementation should include as a minimum the name, version, doc and arch fields. The other fields are recommended to be included. -[source,p4] +[source,protobuf] ---- // Can be used to manage multiple P4 packages. message PkgInfo { @@ -1126,7 +1125,7 @@ message PkgInfo { } ---- where the `PlatformProperties` message looks as follows: -[source,p4] +[source,protobuf] ---- // Used to describe the required properties of the underlying platform. message PlatformProperties { @@ -1502,14 +1501,13 @@ The `ActionProfile` message includes the following fields: allowed for weight. - PSA programs can use the `@selector_size_semantics` annotation with one of - `sum_of_weights` or `sum_of_members` to specify this value for Action - Selectors. In the `sum_of_members` case, the `@max_member_weight` annotation - can be used to specify `max_member_weight`. Unless otherwise specified, the - value of `selector_size_semantics` should default to `sum_of_weights`. - However, an unset `selector_size_semantics` should also be treated as - `sum_of_weights` for backwards compatibility in Action Selectors. In Action - Profiles, this value must be unset. +PSA programs can use the `@selector_size_semantics` annotation with one of +`sum_of_weights` or `sum_of_members` to specify this value for Action Selectors. In the `sum_of_members` case, the `@max_member_weight` annotation +can be used to specify `max_member_weight`. Unless otherwise specified, the +value of `selector_size_semantics` should default to `sum_of_weights`. +However, an unset `selector_size_semantics` should also be treated as +`sum_of_weights` for backwards compatibility in Action Selectors. In Action +Profiles, this value must be unset. ==== `Counter` & `DirectCounter` @@ -1579,8 +1577,9 @@ Both `Meter` and `DirectMeter` messages share the following fields: ** `BYTES`, which signifies that this meter can be configured with rates expressed in bytes/second. ** `PACKETS`, for rates expressed in packets/second. - - The meter type can be any of the `MeterSpec.Type` enum values: + + + The meter type can be any of the `MeterSpec.Type` enum values: + + * `TWO_RATE_THREE_COLOR`: This is the *Two Rate Three Color Marker* (trTCM) defined in RFC 2698 cite:[RFC2698]. This is the standard P4Runtime meter type and allows meters to use two rates to split packets into three potential @@ -1589,11 +1588,13 @@ Both `Meter` and `DirectMeter` messages share the following fields: annotation to the meter definition. For example, in a V1Model P4 program, we might define a trTCM direct meter as follows: + + [source,p4] ---- @two_rate_three_color direct_meter(MeterType.bytes) my_meter; ---- + * `SINGLE_RATE_THREE_COLOR`: This is the *Single Rate Three Color Marker* (srTCM) defined in RFC 2697 cite:[RFC2697]. This allows meters to use one rate and an Excess Burst Size (EBS) to split packets into three potential @@ -2154,7 +2155,7 @@ volatile. Data plane volatility depends upon the definition of the extern and its control plane API. -==== TableEntry +=====TableEntry For a table with a direct counter associated with it, the `counter_data` field of a `TableEntry` can be modified by the data plane when packets @@ -2192,54 +2193,54 @@ For a PNA cite:[PNA] table with the property `pna_idle_timeout` equal to `PNA_IdleTimeout_t.AUTO_DELETE`, the data plane can delete existing entries from the table without any controller's involvement. -==== ActionProfileMember +===== ActionProfileMember Not data plane volatile in any architectures defined by P4.org specifications. -==== ActionProfileGroup +===== ActionProfileGroup Not data plane volatile in any architectures defined by P4.org specifications. The `watch_port` feature does affect how action selectors behave while processing packets, but this feature does not affect what a P4Runtime client sees when it reads the configuration. -==== MeterEntry +===== MeterEntry The field `counter_data` is modified by the data plane when the corresponding meter is updated in the data plane. -==== DirectMeterEntry +===== DirectMeterEntry The field `counter_data` is modified by the data plane when the corresponding meter is updated in the data plane. -==== CounterEntry +===== CounterEntry The field `data` is modified by the data plane when the corresponding counter is updated in the data plane. -==== DirectCounterEntry +===== DirectCounterEntry The field `data` is modified by the data plane when the corresponding counter is updated in the data plane. -==== PacketReplicationEngineEntry +===== PacketReplicationEngineEntry Not data plane volatile in any architectures defined by P4.org specifications. -==== ValueSetEntry +===== ValueSetEntry Not data plane volatile in any architectures defined by P4.org specifications. -==== RegisterEntry +===== RegisterEntry The field `data` can be modified by the data plane when the corresponding register entry is updated in the data plane. -==== DigestEntry +===== DigestEntry Not data plane volatile in any architectures defined by P4.org specifications. @@ -2292,7 +2293,7 @@ For a value of type `bit`, the fewest number of bits required to represent the integer value latexmath:[$V > 0$] is the smallest integer latexmath:[$A$] such that latexmath:[$V \leq 2^A - 1$]. For a value of type `int`, the fewest number of bits required to represent -the integer value latexmath:[$V \neq 0$]in "2's" complement form is the smallest integer latexmath:[$A$] +the integer value latexmath:[$V \neq 0$] in "2's" complement form is the smallest integer latexmath:[$A$] such that latexmath:[$-2^{A-1} \leq V \leq 2^{A-1} - 1$]. As a special case, define that the value latexmath:[$V=0$] requires at least latexmath:[$A=1$] bit to @@ -3821,7 +3822,7 @@ object, and a `group_id` equal to 0, will read all groups of that one specified object. [#sec-max-size-rules] -==== Rules on Setting `max_size` +===== Rules on Setting `max_size` The valid values for `max_size` depend on the static `max_group_size` included in the P4Info message: @@ -4486,7 +4487,7 @@ other fields in `MulticastGroupEntry` are ignored. To perform a *wildcard* must be set to 0, its default value. [#sec-valid-values-for-mg-id] -==== Valid Values for `multicast_group_id` +===== Valid Values for `multicast_group_id` The PSA specification states that the valid *data plane* values for multicast group ids (`MulticastGroup_t`) range from 1 (0 is a special value that indicates @@ -4604,7 +4605,7 @@ default value. The `session_id` field can never be equal to 0 in a `Write` RPC. If it does, the server must return an `INVALID_ARGUMENT` error. [#sec-valid-values-for-session-id] -==== Valid Values for `session_id` +===== Valid Values for `session_id` The PSA specification states that the valid *data plane* values for clone session ids (`CloneSessionId_t`) range from 0 to the maximum value supported by @@ -5213,7 +5214,7 @@ enum. A P4Runtime server is required to support only the modes marked as of the rollback mechanism are outside the scope of this specification. One possibility is to create a shadow copy of both the software and hardware state at the start, and restore it upon failure. - + + If a P4Runtime server does not support this option at all, an `UNIMPLEMENTED` error is returned at all times. If a P4Runtime supports some batches in an rollback way but not others (e.g. it is @@ -5234,7 +5235,7 @@ enum. A P4Runtime server is required to support only the modes marked as all operations within the batch. At the end (if there were no errors), a simple pointer-swap like approach can be used to switch to this half of the table. - + + If a P4Runtime server does not support this option at all, an `UNIMPLEMENTED` error is returned at all times. If a P4Runtime supports some batches in an atomic way but not others, an `UNIMPLEMENTED` error is returned when the batch @@ -6642,7 +6643,7 @@ the purpose of adding features for the P4Runtime API. |=== [#sec-value-set-example] -==== A More Complex Value Set Example +=== A More Complex Value Set Example This section includes a more complex Value Set example, with multiple matches of different kinds. @@ -6794,7 +6795,7 @@ size. The gRPC server running the P4Runtime service must not set the maximum receive message size to a value smaller than the default (4MB). [#sec-entries-files] -==== P4Runtime Entries files +=== P4Runtime Entries files The open source P4 compiler `p4c` cite:[p4c] implements an option to generate an "entries file", i.e. a file that contains all table From ef538d649aa9c370bd3ca8687523547c1d8dc881 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sat, 23 Nov 2024 16:24:05 +0100 Subject: [PATCH 07/35] Addressed some comments in the PR, part 5 Signed-off-by: Davide Scano --- docs/v1/P4Runtime-Spec.adoc | 103 ++++++++++++++++++------------------ 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index 368060bb..498210d7 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -983,7 +983,7 @@ table t { The generated P4Info will contain: -[source,p4] +[source,protobuf] ---- structured_annotations { name: "MixedExprList" @@ -1284,7 +1284,7 @@ error if the 8-bit prefix does not contain the correct value, or leave it as is if it is correct. //The second row as to be fixed as is in the madoko document -.Example of statically-assigned P4Info object IDs +.P4 annotations introduced by P4Runtime [cols="2",width=80%, align=center, options=header, unbreakable] [#tab-exmpl-p4-obj-ids] |=== @@ -1577,10 +1577,11 @@ Both `Meter` and `DirectMeter` messages share the following fields: ** `BYTES`, which signifies that this meter can be configured with rates expressed in bytes/second. ** `PACKETS`, for rates expressed in packets/second. - + - The meter type can be any of the `MeterSpec.Type` enum values: - + - * `TWO_RATE_THREE_COLOR`: This is the *Two Rate Three Color Marker* (trTCM) ++ +-- +The meter type can be any of the `MeterSpec.Type` enum values: + + ** `TWO_RATE_THREE_COLOR`: This is the *Two Rate Three Color Marker* (trTCM) defined in RFC 2698 cite:[RFC2698]. This is the standard P4Runtime meter type and allows meters to use two rates to split packets into three potential colors: GREEN, YELLOW, or RED. This mode is the default, but can also be @@ -1588,25 +1589,25 @@ Both `Meter` and `DirectMeter` messages share the following fields: annotation to the meter definition. For example, in a V1Model P4 program, we might define a trTCM direct meter as follows: - + - [source,p4] - ---- - @two_rate_three_color - direct_meter(MeterType.bytes) my_meter; - ---- - - * `SINGLE_RATE_THREE_COLOR`: This is the *Single Rate Three Color Marker* ++ +[source,p4] +---- +@two_rate_three_color +direct_meter(MeterType.bytes) my_meter; +---- + + ** `SINGLE_RATE_THREE_COLOR`: This is the *Single Rate Three Color Marker* (srTCM) defined in RFC 2697 cite:[RFC2697]. This allows meters to use one rate and an Excess Burst Size (EBS) to split packets into three potential colors: GREEN, YELLOW, or RED. In a P4 program, this mode can be set by adding the `@single_rate_three_color` annotation to the meter definition. - * `SINGLE_RATE_TWO_COLOR`: This is a simplified version of RFC 2697 + ** `SINGLE_RATE_TWO_COLOR`: This is a simplified version of RFC 2697 cite:[RFC2697], and the `SINGLE_RATE_THREE_COLOR` mode above. `SINGLE_RATE_TWO_COLOR` restricts meters to use only a single rate specified by the Committed Information Rate (CIR) and Committed Burst Size (CBS) to mark packets GREEN or RED. In a P4 program, this mode can be set by adding the `@single_rate_two_color` annotation to the meter definition. - +-- For indexed meters, the `Meter` message contains also a `size` field, an `int64` representing the maximum number of independent cells that can be held by this meter. Conversely, the `DirectMeter` message contains a `direct_table_id` field @@ -1688,7 +1689,7 @@ header PacketIn_t { original packet */ } ---- -[source,p4] +[source,protobuf] ---- controller_packet_metadata { preamble { @@ -1774,8 +1775,10 @@ these cases and gives an example `ValueSet` message when appropriate. ---- @id(1) value_set >(4) pvs; select (hdr.f8) { /* ... */ } -~ End P4Example -~ Begin Prototext +---- + +[source,protobuf] +---- value_sets { preamble { id: 0x03000001 @@ -1828,7 +1831,7 @@ struct match_t { @id(1) value_set(4) pvs; select ({ hdr.f8, hdr.f16, hdr.f32 }) { /* ... */ } ---- -[source,p4] +[source,protobuf] ---- value_sets { preamble { @@ -1962,7 +1965,7 @@ forwarding-pipeline and map various IDs passed in P4Runtime entity messages. It is formally called the "Device Configuration" and sometimes also referred to as the "P4 Blob". It is defined as: -[source,p4] +[source,protobuf] ---- message ForwardingPipelineConfig { config.P4Info p4info = 1; @@ -2061,7 +2064,7 @@ entry.mutable_index(); * Here is the corresponding Protobuf message in text format: -[source,p4] +[source,protobuf] ---- counter_id: index {} @@ -2086,7 +2089,7 @@ entry.set_counter_id(); * Here is the corresponding Protobuf message in text format: -[source,p4] +[source,protobuf] ---- counter_id: ---- @@ -2150,12 +2153,12 @@ modify objects in the data plane via an `Update` message. For each, a description is given of the parts of that entity that are data plane volatile. -==== ExternEntry +===== ExternEntry Data plane volatility depends upon the definition of the extern and its control plane API. -=====TableEntry +===== TableEntry For a table with a direct counter associated with it, the `counter_data` field of a `TableEntry` can be modified by the data plane when packets @@ -2293,7 +2296,7 @@ For a value of type `bit`, the fewest number of bits required to represent the integer value latexmath:[$V > 0$] is the smallest integer latexmath:[$A$] such that latexmath:[$V \leq 2^A - 1$]. For a value of type `int`, the fewest number of bits required to represent -the integer value latexmath:[$V \neq 0$] in "2's" complement form is the smallest integer latexmath:[$A$] +the integer value latexmath:[$V \neq 0$] in 2's complement form is the smallest integer latexmath:[$A$] such that latexmath:[$-2^{A-1} \leq V \leq 2^{A-1} - 1$]. As a special case, define that the value latexmath:[$V=0$] requires at least latexmath:[$A=1$] bit to @@ -2429,12 +2432,11 @@ specification. //looking for a better solution because is horrible .P4 Type Usage -[.center,cols="4",width=70%, grid=cols,align=center, options=header, unbreakable] +[.center,%autowidth] [#tab-p4-type-usage] |=== -| | Container type -| | | | -| Element type | header | header_union | struct or tuple +| Element type 3+^| Container type +| | header | header_union | struct or tuple | `bit` | allowed | error | allowed | `int` | allowed | error | allowed | `varbit` | allowed | error | allowed @@ -2449,7 +2451,6 @@ specification. | `header_union` | error | error | allowed | `struct` | error | error | allowed | `tuple` | error | error | allowed - |=== [^enum_header]: an `enum` type used as a field in a `header` must specify a @@ -2577,7 +2578,7 @@ Register >(128) register_ip; Here's the corresponding entry in the P4Info message: -[source,proto] +[source,protobuf] ---- registers { preamble { @@ -5214,14 +5215,14 @@ enum. A P4Runtime server is required to support only the modes marked as of the rollback mechanism are outside the scope of this specification. One possibility is to create a shadow copy of both the software and hardware state at the start, and restore it upon failure. - + - If a P4Runtime server does not support this option at all, an - `UNIMPLEMENTED` error is returned at all times. If a P4Runtime - supports some batches in an rollback way but not others (e.g. it is - more straightforward to implement batches that contain only `INSERT` - operations, vs. those that contain `DELETE` operations), an - `UNIMPLEMENTED` error is returned when the batch cannot be executed - in a data plane-atomic way. ++ +If a P4Runtime server does not support this option at all, an +`UNIMPLEMENTED` error is returned at all times. If a P4Runtime +supports some batches in an rollback way but not others (e.g. it is +more straightforward to implement batches that contain only `INSERT` +operations, vs. those that contain `DELETE` operations), an +`UNIMPLEMENTED` error is returned when the batch cannot be executed +in a data plane-atomic way. * *Optional*: `DATAPLANE_ATOMIC`: This is the strictest requirement where the entire batch must be atomic from a data plane point of view. Every data plane @@ -5235,11 +5236,11 @@ enum. A P4Runtime server is required to support only the modes marked as all operations within the batch. At the end (if there were no errors), a simple pointer-swap like approach can be used to switch to this half of the table. - + - If a P4Runtime server does not support this option at all, an `UNIMPLEMENTED` - error is returned at all times. If a P4Runtime supports some batches in an - atomic way but not others, an `UNIMPLEMENTED` error is returned when the batch - cannot be executed in a data plane-atomic way. ++ +If a P4Runtime server does not support this option at all, an `UNIMPLEMENTED` +error is returned at all times. If a P4Runtime supports some batches in an +atomic way but not others, an `UNIMPLEMENTED` error is returned when the batch +cannot be executed in a data plane-atomic way. There is no expectation that a given client must always use the same `Atomicity` enum value. At any given time, the client is free to compose batches and assign @@ -5273,7 +5274,7 @@ populate `grpc::Status` as follows: updates. If some of the updates were successful, the corresponding `p4.Error` should set the code to `OK` and omit other fields. -[source,prototext] +[source,protobuf] ---- # Example of a grpc::Status returned for a Write RPC with a batch of 3 updates. # The first and third updates encountered an error, while the second update @@ -5958,7 +5959,7 @@ client immediately. See section <<#sec-arbitration-updates>>. `ControllerPacketMetadata` message for "packet_out", the server may send the following `StreamMessageResponse` back to the client: -[source,prototext] +[source,protobuf] ---- error { canonical_code: 3 # INVALID_ARGUMENT @@ -5982,7 +5983,7 @@ error { (Maximum Transmission Unit) for the egress link, the server may generate the following `StreamMessageResponse`: -[source,prototext] +[source,protobuf] ---- error { canonical_code: 3 # INVALID_ARGUMENT @@ -6260,7 +6261,7 @@ action a(PortId_t p) { This P4 Counter declaration will translate into the following entry in the P4Info messsage: -[source,prototext] +[source,protobuf] ---- counters { preamble { @@ -6662,7 +6663,7 @@ select ({ hdr.f8, hdr.f16, hdr.f32 }) { /* ... */ } This P4 Value Set declaration will translate into the following entry in the P4Info messsage: -[source,prototext] +[source,protobuf] ---- value_sets { preamble { @@ -6694,7 +6695,7 @@ value_sets { A P4Runtime client can set the membership for this Value Set with `WriteRequest` messages similar to this one: -[source,prototext] +[source,protobuf] ---- type: MODIFY entity { From 4b9875f842dc0f6a9bbd5918aeb16ef14c74dd30 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sat, 23 Nov 2024 20:24:25 +0100 Subject: [PATCH 08/35] Addressed some comments in the PR, part 6 Signed-off-by: Davide Scano --- CONTRIBUTING.md | 7 +- docs/v1/Makefile | 5 +- docs/v1/P4Runtime-Spec.adoc | 97 ++++---- docs/v1/README.md | 71 +++--- docs/v1/bibref_no_title.js | 5 - docs/v1/cpp.json | 105 --------- docs/v1/install-asciidoctor-linux.sh | 210 ----------------- docs/v1/make.bat | 1 - docs/v1/p4.json | 113 --------- docs/v1/proto.json | 86 ------- docs/v1/prototext.json | 54 ----- docs/v1/resources/theme/p4-theme.yml | 3 + docs/v1/setup-for-ubuntu-linux.sh | 128 ----------- tools/madokolint.conf.json | 40 ---- tools/madokolint.py | 327 --------------------------- 15 files changed, 94 insertions(+), 1158 deletions(-) delete mode 100644 docs/v1/bibref_no_title.js delete mode 100644 docs/v1/cpp.json delete mode 100755 docs/v1/install-asciidoctor-linux.sh delete mode 100644 docs/v1/make.bat delete mode 100644 docs/v1/p4.json delete mode 100644 docs/v1/proto.json delete mode 100644 docs/v1/prototext.json delete mode 100755 docs/v1/setup-for-ubuntu-linux.sh delete mode 100644 tools/madokolint.conf.json delete mode 100755 tools/madokolint.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9dac0765..501702c4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,10 +4,9 @@ You can fork the repo and submit a pull request in Github. All developers must have signed the [P4.org](http://p4.org) CLA. -### Madoko style checker +### AsciiDoc style checker The P4Runtime specification is written using -[Madoko](http://madoko.org/reference.html). We provide a lint tool to catch +[AsciiDoc](https://docs.asciidoctor.org/). We provide a lint tool to catch basic formatting issues and try to keep the spec uniform. The lint tool will be -run as part of CI and patches cannot be merged until it returns success. You can -run the lint tool locally with `./tools/madokolint.py`. +run as part of CI and patches cannot be merged until it returns success. diff --git a/docs/v1/Makefile b/docs/v1/Makefile index 05b7f7ee..c2e4bbe5 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -1,4 +1,3 @@ - SPEC=P4Runtime-Spec ROUGE_STYLE=github @@ -26,8 +25,8 @@ ${SPEC}.html: ${SPEC}.adoc figs time asciidoctor -v \ -r asciidoctor-mathematical \ -r asciidoctor-bibtex \ - -r asciidoctor-lists \ + -r asciidoctor-lists \ -a rouge-css=$(ROUGE_CSS) $< clean: - /bin/rm -f ${SPEC}.pdf ${SPEC}.html resources/figs/stem-*.png + /bin/rm -f ${SPEC}.pdf ${SPEC}.html resources/figs/stem-*.png \ No newline at end of file diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index 498210d7..0c97d016 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -1577,8 +1577,7 @@ Both `Meter` and `DirectMeter` messages share the following fields: ** `BYTES`, which signifies that this meter can be configured with rates expressed in bytes/second. ** `PACKETS`, for rates expressed in packets/second. -+ --- + The meter type can be any of the `MeterSpec.Type` enum values: ** `TWO_RATE_THREE_COLOR`: This is the *Two Rate Three Color Marker* (trTCM) @@ -1607,7 +1606,7 @@ direct_meter(MeterType.bytes) my_meter; specified by the Committed Information Rate (CIR) and Committed Burst Size (CBS) to mark packets GREEN or RED. In a P4 program, this mode can be set by adding the `@single_rate_two_color` annotation to the meter definition. --- + For indexed meters, the `Meter` message contains also a `size` field, an `int64` representing the maximum number of independent cells that can be held by this meter. Conversely, the `DirectMeter` message contains a `direct_table_id` field @@ -2109,7 +2108,7 @@ read should match if the RPCs finished successfully (with the exception of parts of the response known to be data plane volatile, as explained in <<#sec-data-plane-volatile-objects>>). Consider the following pseudocode as an example: -[source,pseudo] +[source,python] ---- intended_value = value @@ -2435,8 +2434,8 @@ specification. [.center,%autowidth] [#tab-p4-type-usage] |=== -| Element type 3+^| Container type -| | header | header_union | struct or tuple +| *Element type* 3+^| *Container type* +| | *header* | *header_union* | *struct or tuple* | `bit` | allowed | error | allowed | `int` | allowed | error | allowed | `varbit` | allowed | error | allowed @@ -2638,7 +2637,7 @@ type_info { ---- Here's a `p4.WriteRequest` to set the value of `register_ip[12]`: -[source,proto] +[source,protobuf] ---- update { type: INSERT @@ -2760,7 +2759,7 @@ type bit<9> PortId_32_t; In this case, the P4Info message would include the following `P4TypeInfo` messages: -[source,proto] +[source,protobuf] ---- type_info { new_types { @@ -2857,7 +2856,7 @@ table t { This table would have the following representation in the generated P4Info message: -[source,proto] +[source,protobuf] ---- tables { preamble { @@ -3036,7 +3035,7 @@ In this P4Runtime request, the client omits the table's `TERNARY` field from the repeated `match` field to indicate a "don't care" match. As shown below, the `match` specifies only the `EXACT` field given by `field_id: 2`. -[source,proto] +[source,protobuf] ---- device_id: 3 entities { @@ -3066,7 +3065,7 @@ P4Runtime server must return an `INVALID_ARGUMENT` error code. * The binary string encoding of the value must conform to the xref:sec-bytestrings[Bytestrings] requirements. -[source,pseudo] +[source,python] ---- assert(BytestringValid(match.exact().value())) ---- @@ -3077,7 +3076,7 @@ assert(BytestringValid(match.exact().value())) * "Don't care" match must be omitted. * "Don't care" bits must be 0 in value. -[source,pseudo] +[source,python] ---- assert(BytestringValid(match.lpm().value())) @@ -3099,7 +3098,7 @@ assert(trailing_zeros >= field_bits - pLen) most-significant value bits need zero-padding before any logical operations with the mask. -[source,pseudo] +[source,python] ---- assert(BytestringValid(match.ternary().value())) assert(BytestringValid(match.ternary().mask())) @@ -3120,7 +3119,7 @@ assert(value & mask == value) * Low bound must be less than or equal to the high bound. * "Don't care" match must be omitted. -[source,pseudo] +[source,python] ---- assert(BytestringValid(match.range().low())) assert(BytestringValid(match.range().high())) @@ -3137,7 +3136,7 @@ assert(low != min_field_value || high != max_field_value) * The binary string encoding of the value must conform to the xref:sec-bytestrings[Bytestrings] requirements. -[source,pseudo] +[source,python] ---- assert(BytestringValid(match.optional().value())) ---- @@ -3364,7 +3363,7 @@ fields may be used to select and filter results: For example, in order to read all entries from all tables from device 3, the client can use the following `ReadRequest` message. -[source,proto] +[source,protobuf] ---- device_id: 3 entities { @@ -3381,7 +3380,7 @@ In order to read all entries with priority 11 from a specific table (with id 0x0212ab34) from device 3, the client can use the following `ReadRequest` message: -[source,proto] +[source,protobuf] ---- device_id: 3 entities { @@ -3421,7 +3420,7 @@ table t { The following `WriteRequest` message can be used to add 2 entries: -[source,proto] +[source,protobuf] ---- device_id: 3 entities { @@ -3447,7 +3446,7 @@ The first entry is a "don't care" entry, while the second one matches all The following `ReadRequest` message will return *all* entries in the table, not just the "don't care" entry. -[source,proto] +[source,protobuf] ---- device_id: 3 entities { @@ -3897,7 +3896,7 @@ the one shot message. For example, consider the action selector table defined xref:sec-action-profile-member-and-group[role]. This table could be programmed with the following one shot update: -[source,proto] +[source,protobuf] ---- table_entry { table_id: 0x0212ab34 @@ -4062,7 +4061,7 @@ P4Runtime message can be used for all three types of PSA counters --- `PACKETS`, * `byte_count` is an `int64`, corresponding to the number of octets. * `packet_count` is an `int64`, corresponding to the number of packets. -[source,proto] +[source,protobuf] ---- message CounterData { int64 byte_count = 1; @@ -4085,7 +4084,7 @@ P4Runtime client may modify the associated direct counter entry using the `DirectCounterEntry` message. Once the table entry is deleted the associated direct counter entry can no longer be accessed. -[source,proto] +[source,protobuf] ---- message DirectCounterEntry { TableEntry table_entry = 1; @@ -4208,7 +4207,7 @@ primary purpose of the color counters is for debugging purposes. A meter may be configured as a direct or indirect instance, similar to a counter. The `MeterConfig` P4Runtime message represents meter configuration. -[source,proto] +[source,protobuf] ---- message MeterConfig { int64 cir = 1; // Committed Information Rate @@ -4246,7 +4245,7 @@ P4Runtime client may modify the associated direct meter entry using the `DirectMeterEntry` message. Once the table entry is deleted the associated direct meter entry can no longer be accessed. -[source,proto] +[source,protobuf] ---- message DirectMeterEntry { TableEntry table_entry = 1; @@ -4310,7 +4309,7 @@ follows: represents the per color counter values associated with the corresponding meter. -[source,proto] +[source,protobuf] ---- message MeterEntry { uint32 meter_id = 1; @@ -4402,7 +4401,7 @@ control arp_multicast(inout H hdr, inout M smeta) { At runtime, the client writes the following update in the target (shown in Protobuf text format). -[source,proto] +[source,protobuf] ---- type: INSERT entity { @@ -4539,7 +4538,7 @@ control clone_low_ttl(inout H hdr, inout M smeta) { At runtime, the client writes the following update in the target (shown in Protobuf text format). -[source,proto] +[source,protobuf] ---- type: INSERT entity { @@ -4646,7 +4645,7 @@ state parse_l2 { The corresponding entry in the P4Info for this Value Set is: -[source,proto] +[source,protobuf] ---- value_sets { preamble { @@ -4665,7 +4664,7 @@ value_sets { At runtime, the client writes the following update in the target (shown in Protobuf text format). -[source,proto] +[source,protobuf] ---- type: MODIFY entity { @@ -4898,7 +4897,7 @@ while (true) { This is used to support a P4 extern entity that is not part of PSA. It is defined as: -[source,proto] +[source,protobuf] ---- message ExternEntry { uint32 extern_type_id = 1; @@ -4930,7 +4929,7 @@ explain how error reporting works in the failure case. gRPC uses `grpc::Status` cite:[gRPCStatus] to represent the status returned by an RPC. It has 3 attributes: -[source,cpp] +[source,c++] ---- StatusCode code_; grpc::string error_message_; @@ -4942,7 +4941,7 @@ overall RPC status. The `error_message_` is a developer-facing error message, which should be in English. The `binary_error_details_` carries a serialized `google.rpc.Status` message cite:[ProtoStatus] message, which has 3 fields: -[source,proto] +[source,protobuf] ---- int32 code = 1; // see code.proto string message = 2; @@ -5067,7 +5066,7 @@ to reject the program. The `Write` RPC updates one or more P4 entities on the target. The request is defined as follows: -[source,proto] +[source,protobuf] ---- message WriteRequest { uint64 device_id = 1; @@ -5102,7 +5101,7 @@ before processing the `updates` list: The updates field is a list of P4 entity updates to be applied. Each update is defined as: -[source,proto] +[source,protobuf] ---- message Update { enum Type { @@ -5307,7 +5306,7 @@ binary_error_details { The `Read` RPC retrieves one or more P4 entities from the P4Runtime server. The request is defined as: -[source,proto] +[source,protobuf] ---- message ReadRequest { uint64 device_id = 1; @@ -5333,7 +5332,7 @@ require an `election_id`, and they do not require the presence of an open The `Read `response consists of a sequence of messages (a gRPC `stream`) with each message defined as: -[source,proto] +[source,protobuf] ---- message ReadResponse { repeated Entity entities = 1; @@ -5378,7 +5377,7 @@ For example, in a *request* of type `CounterEntry`: To read the entire forwarding state for a given device, the P4Runtime client can generate the following `ReadRequest`: -[source,proto] +[source,protobuf] ---- device_id: entities { @@ -5509,7 +5508,7 @@ be difficult to implement correctly. A P4Runtime client may configure the P4Runtime target with a new P4 pipeline by invoking the `SetForwardingPipelineConfig RPC`. The request is defined as: -[source,proto] +[source,protobuf] ---- message SetForwardingPipelineConfigRequest { enum Action { @@ -5590,7 +5589,7 @@ different mechanism). In such cases, the RPC should return an The forwarding-pipeline configuration of the target can be retrieved by invoking the `GetForwardingPipelineConfig RPC`. The request is defined as: -[source,proto] +[source,protobuf] ---- message GetForwardingPipelineConfigRequest { enum ResponseType { @@ -5626,7 +5625,7 @@ its value can be one of: The response contains the `ForwardingPipelineConfig` for the specified device: -[source,proto] +[source,protobuf] ---- message GetForwardingPipelineConfigResponse { ForwardingPipelineConfig config = 1; @@ -5677,7 +5676,7 @@ in the P4Info using the `ControllerPacketMetadata` messages. Both `PacketIn` and `PacketOut` stream messages share the same fields and are defined as follows: -[source,proto] +[source,protobuf] ---- // Packet sent from the controller to the switch. message PacketOut { @@ -5759,7 +5758,7 @@ reset. In fact, a full restart is the only way to reset the `election_id`. The `MasterArbitrationUpdate` message is defined as follows: -[source,proto] +[source,protobuf] ---- message MasterArbitrationUpdate { uint64 device_id = 1; @@ -5862,7 +5861,7 @@ server software, the channel or the client can handle. Here is a reasonable pseudo-code implementation for idle timeout for table entries: -[source,cpp] +[source,c++] ---- IdleTimeoutStream stream; @@ -6089,7 +6088,7 @@ ports in the device-specific port number space. P4Runtime reserves device-independent and controller-specific 32-bit constants for the CPU port and the recirculation port as follows: -[source,proto] +[source,protobuf] ---- enum SdnPort { SDN_PORT_UNKNOWN = 0; @@ -6369,7 +6368,7 @@ extern MyNewPacketCounter { externs. It is recommended that *p4info-ext* include a `P4Ids` message based on the one in p4info.proto that the P4 compiler can refer to when xref:sec-id-allocation[assigning IDs] to each extern instance. -[source,proto] +[source,protobuf] ---- message P4Ids { enum Prefix { @@ -6386,7 +6385,7 @@ message P4Ids { xref:sec-p4info-extern[`p4.config.v1.ExternInstance`] message as the `info` field, which is of type `Any` cite:[ProtoAny]. -[source,proto] +[source,protobuf] ---- message MyNewPacketCounter { // corresponds to the T type parameter in the P4 extern definition @@ -6407,7 +6406,7 @@ embedded in an xref:sec-extern-entry[`ExternEntry`] message generated by the P4Runtime client. Here is a possible Protobuf message for our `MyNewPacketCounter` P4 extern: -[source,proto] +[source,protobuf] ---- // This message enables reading / writing data to the counter at the provided // index @@ -6754,7 +6753,7 @@ channel. As a rule of thumb, it might make sense to allow for at least `8192 + MAX_UPDATES_PER_WRITE * 100` bytes of metadata. For example, in C++, one can create a client channel as follows: -[source,cpp] +[source,c++] ---- const int MAX_UPDATES_PER_WRITE = 100; ::grpc::ChannelArguments arguments; @@ -6778,7 +6777,7 @@ setting the `grpc.max_receive_message_length` when building the gRPC server. For example, in C++, one can set the maximum receive message size as follows: -[source,cpp] +[source,c++] ---- const int MAX_RECEIVE_MESSAGE_SIZE = 128 * 1024 * 1024; // 128MB ::grpc::ServerBuilder server_builder; diff --git a/docs/v1/README.md b/docs/v1/README.md index e0d2141a..4d69cac9 100644 --- a/docs/v1/README.md +++ b/docs/v1/README.md @@ -5,62 +5,67 @@ specification document. # Markup version -The markup version uses Madoko (https://www.madoko.net) to produce +The markup version uses AsciiDoc (https://docs.asciidoctor.org/) to produce HTML and PDF versions of the documentation. Pre-built versions of the documentation are available on the [P4.org specifications page](https://p4.org/specs). Files: -- `P4Runtime-spec.mdk` is the main file. -- assets: Figures - - `*.odg` - OfficeLibre source drawing file used to export images. These are +- `P4Runtime-Spec.adoc` is the main file. +- resources: + - figs + - `*.odg` - OfficeLibre source drawing file used to export images. These are bulk-rendered at build time into .svg and .png images via `soffice` command-line (required in build environment) + - fonts + - `*.ttf` - Type font source file used to export fonts. + - theme: + - `*.yaml` - Describes how PDF P4Runtime specification will be displayed. + - `*.css` - Describes how HTML P4Runtime specification will displayed. + - `*.bib` - Bibliography file that contains a list of bibliographical item, such as articles, books, and theses. - `Makefile` builds documentation in the build subdirectory -- `p4.json` is providing custom syntax highlighting for P4. It is a rip off from - the cpp.json provided by Madoko (the "extend" clause does not work, my version - of Madoko asks for a "tokenizer" to be defined). Style customization for each - token can be done using CSS style attributes (see `token.keyword` in - `P4Runtime-spec.mdk`). + ## Building -The easiest way to render the Madoko specification documentation is to use the -`p4lang/p4rt-madoko:latest` Docker` image: +The easiest way to render the AsciiDoc specification documentation is to use the +`p4lang/p4rt-asciidoc:latest` Docker` image: - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-madoko:latest make + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc:latest make ### Linux ``` -sudo apt-get install nodejs -sudo npm install madoko -g -sudo apt-get install libreoffice -sudo apt-get install texlive-science texlive-xetex -make [all | html | pdf ] +rvm install ruby-3.3.1 +rvm use 3.3.1 +gem install asciidoctor +gem install asciidoctor-pdf +gem install asciidoctor-bibtex +gem install asciidoctor-mathematical +gem install prawn-gmagick +gem install rouge +gem install asciidoctor-bibtex +gem install asciidoctor-lists +gem install prawn-gmagick +make ``` -In particular (on Ubuntu 16.04 at least), don't try `sudo apt-get install npm` -because `npm` is already included and this will yield a bunch of confusing error -messages from `apt-get`. - -`dvipng` is used to render "math" inside BibTex (used for bibliography) -titles, so you will need to install it as well. On Debian-based Linux, it can be -done with `sudo apt-get install dvipng`. +You can use the [local +installation](https://github.com/p4lang/p4-spec/blob/main/p4-16/spec/install-asciidoctor-linux.sh) +method. ### MacOS We use the [local -installation](http://research.microsoft.com/en-us/um/people/daan/madoko/doc/reference.html#sec-installation-and-usage) -method. For Mac OS, I installed node.js using Homebrew and then Madoko using -npm: +installation](https://github.com/p4lang/p4-spec/blob/main/p4-16/spec/install-asciidoctor-linux.sh) +method. For Mac OS you can install AsciiDoc using Homebrew via: ``` -brew install node.js -npm install madoko -g +brew install asciidoctor ``` -Note that to build the PDF you need a functional TeX version installed. ### Windows -You need to install miktex [http://miktex.org/], madoko -[https://www.madoko.net/] and node.js [https://nodejs.org/en/]. To -build you can invoke the make.bat script. +You need to install chocolatey [https://chocolatey.org/] or rubyInstaller [https://rubyinstaller.org/downloads/]. +Once you’ve installed Ruby , open a terminal and type: +``` + gem install asciidoctor +``` diff --git a/docs/v1/bibref_no_title.js b/docs/v1/bibref_no_title.js deleted file mode 100644 index a67417f0..00000000 --- a/docs/v1/bibref_no_title.js +++ /dev/null @@ -1,5 +0,0 @@ -$(document).ready(function(){ - $('a').filter(".bibref").hover(function(e){ - $(this).attr('title', ''); - }); -}); diff --git a/docs/v1/cpp.json b/docs/v1/cpp.json deleted file mode 100644 index 19c08a42..00000000 --- a/docs/v1/cpp.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "displayName": "C++", - "name": "cpp", - "mimeTypes": ["text/cpp","text/c"], - "fileExtensions": ["cpp","c++","h","c"], - - "lineComment": "//", - "blockCommentStart": "/*", - "blockCommentEnd": "*/", - - "keywords": [ - "alignas", "alignof", "and", "and_eq", "asm", "auto", "bitand", "bitor", "bool", "break", "case", - "catch", "char", "char16_t", "char32_t", "class", "compl", "const", "constexpr", "const_cast", - "continue", "decltype", "default", "delete", "do", "double", "dynamic_cast", "else", - "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto", "if", "inline", - "int", "long", "mutable", "namespace", "new", "noexcept", "not", "not_eq", "nullptr", "operator", - "or", "or_eq", "private", "protected", "public", "register", "reinterpret_cast", - "return", "short", "signed", "sizeof", "static", "static_assert", "static_cast", "struct", - "switch", "template", "this", "thread_local", "throw", "true", "try", "typedef", "typeid", - "typename", "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t", "while", - "xor", "xor_eq" - ], - - "typeKeywords": [ - "bool", "double", "byte", "int", "short", "char", "void", "long", "float", - "char32_t", "unsigned", "wchar_t", "char16_t" - ], - - "directives": [ - "include","if","endif","ifdef","define","line","warning","error" - ], - - "operators": [ - "=", ">", "<", "!", "~", "?", ":", - "==", "<=", ">=", "!=", "&&", "||", "++", "--", - "+", "-", "*", "/", "&", "|", "^", "%", "<<", - ">>", ">>>", "+=", "-=", "*=", "/=", "&=", "|=", - "^=", "%=", "<<=", ">>=", ">>>=" - ], - - "symbols": "[=>)([A-Z][\\w]*)", ["keyword", "identifier"] ], - ["[A-Z][\\w]*(?!\\s*[\\w\\(])", "type.identifier" ], - ["[A-Z][A-Z0-9_]*(?![\\w\\(])", "type.identifier" ], - - ["^(\\s*#)(\\w+)(.*)", { "cases": { - "$2@directives": ["namespace","namespace","string"], - "@default": ["meta","meta","string"] - } } ], - - { "include": "@whitespace" }, - - ["[{}()\\[\\]]", "@brackets"], - ["[<>](?!@symbols)", "@brackets"], - ["@symbols", { "cases": { "@operators": "operator", - "@default" : "" } } ], - - ["\\d*\\.\\d+([eE][\\-+]?\\d+)?[fFdD]?", "number.float"], - ["0[xX][0-9a-fA-F_]*[0-9a-fA-F][Ll]?", "number.hex"], - ["0[0-7_]*[0-7][Ll]?", "number.octal"], - ["0[bB][0-1_]*[0-1][Ll]?", "number.binary"], - ["\\d+[lL]?", "number"], - - ["[;,.]", "delimiter"], - - ["[lL]\"([^\"\\\\]|\\\\.)*$", "string.invalid" ], - ["\"", "string", "@string" ], - - ["'[^\\\\']'", "string"], - ["(')(@escapes)(')", ["string","string.escape","string"]], - ["'", "string.invalid"] - ], - - "whitespace": [ - ["[ \\t\\r\\n]+", "white"], - ["\\/\\*", "comment", "@comment" ], - ["\\/\\/.*$", "comment"] - ], - - "comment": [ - ["[^\\/*]+", "comment" ], - ["\\/\\*", "comment.invalid" ], - ["\\*/", "comment", "@pop" ], - ["[\\/*]", "comment" ] - ], - - "string": [ - ["[^\\\\\"]+", "string"], - ["@escapes", "string.escape"], - ["\\\\.", "string.escape.invalid"], - ["\"", "string", "@pop" ] - ] - } -} diff --git a/docs/v1/install-asciidoctor-linux.sh b/docs/v1/install-asciidoctor-linux.sh deleted file mode 100755 index f80999c9..00000000 --- a/docs/v1/install-asciidoctor-linux.sh +++ /dev/null @@ -1,210 +0,0 @@ -#! /bin/bash - -# Copyright 2024 Andy Fingerhut - -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -linux_version_warning() { - 1>&2 echo "Found ID ${ID} and VERSION_ID ${VERSION_ID} in /etc/os-release" - 1>&2 echo "This script only supports these:" - 1>&2 echo " ID ubuntu, VERSION_ID in 20.04 22.04 24.04" - #1>&2 echo " ID fedora, VERSION_ID in 36 37 38" - 1>&2 echo "" - 1>&2 echo "Proceed installing manually at your own risk of" - 1>&2 echo "significant time spent figuring out how to make it all" - 1>&2 echo "work, or consider getting VirtualBox and creating a" - 1>&2 echo "virtual machine with one of the tested versions." -} - -get_used_disk_space_in_mbytes() { - echo $(df --output=used --block-size=1M . | tail -n 1) -} - -abort_script=0 - -if [ ! -r /etc/os-release ] -then - 1>&2 echo "No file /etc/os-release. Cannot determine what OS this is." - linux_version_warning - exit 1 -fi -source /etc/os-release -PROCESSOR=`uname --machine` - -supported_distribution=0 -tried_but_got_build_errors=0 -if [ "${ID}" = "ubuntu" ] -then - case "${VERSION_ID}" in - 20.04) - supported_distribution=1 - OS_SPECIFIC_PACKAGES="libgdk-pixbuf2.0-dev" - ;; - 22.04) - supported_distribution=1 - OS_SPECIFIC_PACKAGES="libgdk-pixbuf-2.0-dev" - ;; - 24.04) - supported_distribution=1 - OS_SPECIFIC_PACKAGES="libgdk-pixbuf-2.0-dev" - ;; - esac -elif [ "${ID}" = "fedora" ] -then - case "${VERSION_ID}" in - 38) - supported_distribution=0 - ;; - 39) - supported_distribution=0 - ;; - 40) - supported_distribution=0 - ;; - esac -fi - -if [ ${supported_distribution} -eq 1 ] -then - echo "Found supported ID ${ID} and VERSION_ID ${VERSION_ID} in /etc/os-release" -else - linux_version_warning - if [ ${tried_but_got_build_errors} -eq 1 ] - then - 1>&2 echo "" - 1>&2 echo "This OS has been tried at least onc before, but" - 1>&2 echo "there were errors during a compilation or build" - 1>&2 echo "step that have not yet been fixed. If you have" - 1>&2 echo "experience in fixing such matters, your help is" - 1>&2 echo "appreciated." - fi - exit 1 -fi - -min_free_disk_MBytes=`expr 1 \* 1024` -free_disk_MBytes=`df --output=avail --block-size=1M . | tail -n 1` - -if [ "${free_disk_MBytes}" -lt "${min_free_disk_MBytes}" ] -then - free_disk_comment="too low" - abort_script=1 -else - free_disk_comment="enough" -fi - -echo "Minimum free disk space to run this script: ${min_free_disk_MBytes} MBytes" -echo "Free disk space on this system from df output: ${free_disk_MBytes} MBytes -> $free_disk_comment" - -if [ "${abort_script}" == 1 ] -then - echo "" - echo "Aborting script because system has too little free disk space" - exit 1 -fi - -echo "Passed all sanity checks" - -DISK_USED_START=`get_used_disk_space_in_mbytes` - -set -e -set -x - -echo "------------------------------------------------------------" -echo "Time and disk space used before installation begins:" -set -x -date -df -h . -df -BM . -TIME_START=$(date +%s) - -# On new systems if you have never checked repos you should do that first - -# Install a few packages (vim is not strictly necessary -- installed for -# my own convenience): -if [ "${ID}" = "ubuntu" ] -then - sudo apt-get --yes install gnupg2 curl -elif [ "${ID}" = "fedora" ] -then - sudo dnf -y update - sudo dnf -y install git vim -fi - -gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB -curl -sSL https://get.rvm.io | bash -if [[ $UID == 0 ]]; then - source /usr/local/rvm/scripts/rvm -else - source $HOME/.rvm/scripts/rvm -fi -rvm install ruby-3.3.1 -rvm use 3.3.1 -gem install asciidoctor -gem install asciidoctor-pdf -gem install asciidoctor-bibtex -# Additional installations to enable installing -# asciidoctor-mathematical and prawn-gmagick -sudo apt-get --yes install cmake flex libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgraphicsmagick1-dev libmagickwand-dev ${OS_SPECIFIC_PACKAGES} -gem install asciidoctor-mathematical -gem install prawn-gmagick -gem install rouge -gem install asciidoctor-bibtex -gem install asciidoctor-lists -gem install prawn-gmagick - -which ruby -ruby --version -which gem -gem --version -which asciidoctor -asciidoctor --version -which asciidoctor-pdf -asciidoctor-pdf --version - -set +e - -set +x -echo "------------------------------------------------------------" -echo "Time and disk space used when installation was complete:" -set -x -date -df -h . -df -BM . -TIME_END=$(date +%s) -set +x -echo "" -echo "Elapsed time for various install steps:" -echo "Total time : $(($TIME_END-$TIME_START)) sec" -set -x - -DISK_USED_END=`get_used_disk_space_in_mbytes` - -set +x -echo "All disk space utilizations below are in MBytes:" -echo "" -echo "DISK_USED_START ${DISK_USED_START}" -echo "DISK_USED_END ${DISK_USED_END}" -echo "DISK_USED_END - DISK_USED_START : $((${DISK_USED_END}-${DISK_USED_START})) MBytes" - -echo "----------------------------------------------------------------------" -echo "CONSIDER READING WHAT IS BELOW" -echo "----------------------------------------------------------------------" -echo "" -echo "You should add this command in a shell startup script, e.g." -echo "$HOME/.bashrc if you use the Bash shell:" -echo "" -echo " source \$HOME/.rvm/scripts/rvm" -echo "" -echo "----------------------------------------------------------------------" -echo "CONSIDER READING WHAT IS ABOVE" -echo "----------------------------------------------------------------------" diff --git a/docs/v1/make.bat b/docs/v1/make.bat deleted file mode 100644 index 2f789eaa..00000000 --- a/docs/v1/make.bat +++ /dev/null @@ -1 +0,0 @@ -madoko --pdf -vv --png --odir=build P4Runtime-spec.mdk \ No newline at end of file diff --git a/docs/v1/p4.json b/docs/v1/p4.json deleted file mode 100644 index f8148c37..00000000 --- a/docs/v1/p4.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "displayName": "P4", - "name": "p4", - - "lineComment": "//", - "blockCommentStart": "/*", - "blockCommentEnd": "*/", - - "keywords": [ "action", "apply", "control", "default", "else", - "extern", "exit", "false", "if", - "package", "parser", "return", "select", "state", "switch", - "table", "transition", "true", "typedef", "verify" - ], - - "extraKeywords": [], - - "typeKeywords": [ - "bool", "bit", "const", "enum", "entries", "error", "header", "header_union", "in", "inout", "int", "match_kind", "out", "tuple", "struct", "varbit", "void", "type" - ], - - "extraTypeKeywords": [], - - "directives": [ - "include","if","endif","ifdef","define","ifndef","undef","line" - ], - - "annotations": [ - "atomic", "defaultonly", "name", "priority", "tableonly", "hidden", "globalname" - ], - - "operators": [ - "=", ">", "<", "!", "~", "?", ":", - "==", "<=", ">=", "!=", "&&", "||", "++", - "+", "-", "*", "/", "&", "|", "^", "%", "<<", - ">>", "&&&", ".." - ], - - "extraOperators": [], - - "symbols": "[=>](?!@symbols)", "@brackets"], - ["@symbols", { "cases": { - "@operators": "operator", - "@extraOperators": "operator.extra", - "@default" : "" } } ], - - ["\\d*\\.\\d+([eE][\\-+]?\\d+)?[fFdD]?", "number.float"], - ["0[xX][0-9a-fA-F_]*[0-9a-fA-F][Ll]?", "number.hex"], - ["0[0-7_]*[0-7][Ll]?", "number.octal"], - ["0[bB][0-1_]*[0-1][Ll]?", "number.binary"], - ["\\d+[lL]?", "number"], - - ["[;,.]", "delimiter"], - - ["[lL]\"([^\"\\\\]|\\\\.)*$", "string.invalid"], - ["\"", "string", "@string" ], - - - ["'[^\\\\']'", "string"], - ["(')(@escapes)(')", ["string","string.escape","string"]], - ["'", "string.invalid"] - ], - - "whitespace": [ - ["[ \\t\\r\\n]+", "white"], - ["\\/\\*", "comment", "@comment" ], - ["\\/\\/.*$", "comment"] - ], - - "comment": [ - ["[^\\/*]+", "comment" ], - ["\\/\\*", "comment.invalid" ], - ["\\*/", "comment", "@pop" ], - ["[\\/*]", "comment" ] - ], - - "string": [ - ["[^\\\\\"]+", "string"], - ["@escapes", "string.escape"], - ["\\\\.", "string.escape.invalid"], - ["\"", "string", "@pop" ] - ] - } -} diff --git a/docs/v1/proto.json b/docs/v1/proto.json deleted file mode 100644 index 0a09fb9c..00000000 --- a/docs/v1/proto.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "displayName": "Protobuf", - "name": "proto", - - "lineComment": "//", - "blockCommentStart": "/*", - "blockCommentEnd": "*/", - - "keywords": [ - "syntax", "import", "package", "service", - "rpc", "returns", - "message", "oneof", "repeated", - "reserved", - "=" - ], - - "extraKeywords": ["optimize_for", "cc_enable_arenas", "objc_class_prefix", "deprecated"], - - "typeKeywords": [ - "enum", - "double", "float", - "int32", "int64", "uint32", "uint64", "sint32", "sint64", - "fixed32", "fixed64", "sfixed32", "sfixed64", - "bool", - "string", "bytes" - ], - - "directives": [], - - "symbols": "[=>&2 echo " Ubuntu 16.04" - 1>&2 echo " Ubuntu 18.04" - 1>&2 echo " Ubuntu 20.04" - 1>&2 echo " Ubuntu 22.04" -} - -echo "------------------------------------------------------------" -echo "Purpose of this script:" -echo "" -echo "On a supported operating system that has not had any additional" -echo "packages installed yet, install a set of packages that are" -echo "needed to successfully create the HTML and PDF versions of these" -echo "documents from their Madoko source files (files with names that" -echo "end with '.mdk'):" -echo "" -echo "+ The P4_16 language specification" -echo "+ The Portable Switch Architecture (PSA) specification" -echo "" -echo "While it would be nice if I could assure you that this script" -echo "will work on a system that already had many packages installed," -echo "I do not know which packages might have conflicts with each" -echo "other." -echo "------------------------------------------------------------" - -# This is where the application gnome-font-viewer copies font files -# when a user clicks the "Install" button. -FONT_INSTALL_DIR="${HOME}/.local/share/fonts" - -warning() { - 1>&2 echo "This script has only been tested on these OS versions:" - print_supported_os_versions -} - -lsb_release >& /dev/null -if [ $? != 0 ] -then - 1>&2 echo "No 'lsb_release' found in your command path." - warning - exit 1 -fi - -DISTRIBUTOR_ID=`lsb_release -si` -UBUNTU_RELEASE=`lsb_release -sr` - -if [ ${DISTRIBUTOR_ID} != "Ubuntu" -o \( ${UBUNTU_RELEASE} != "16.04" -a ${UBUNTU_RELEASE} != "18.04" -a ${UBUNTU_RELEASE} != "20.04" -a ${UBUNTU_RELEASE} != "22.04" \) ] -then - warning - 1>&2 echo "" - 1>&2 echo "Here is what command 'lsb_release -a' shows this OS to be:" - lsb_release -a - exit 1 -fi - -set -ex - -set +x -echo "------------------------------------------------------------" -echo "Time and disk space used before installation begins:" -set -x -date -df -BM . - -# Common packages to install on all tested Ubuntu versions -sudo apt-get --yes install git curl make nodejs npm texlive-xetex dvipng - -if [[ "${UBUNTU_RELEASE}" > "18" ]] -then - # Only needed for Ubuntu 18.04 and later - sudo apt-get --yes install texlive-science -else - # Only needed for Ubuntu 16.04 - sudo apt-get --yes install nodejs-legacy texlive-generic-extra texlive-math-extra -fi - -# Common packages to install on all tested Ubuntu versions -sudo npm install madoko -g - -set +x -echo "------------------------------------------------------------" -echo "Time and disk space used just before 'apt clean':" -set -x -date -df -BM . - -# After install of the packages above, this command often seems to -# help reduce the disk space used by a gigabyte or so. -sudo apt clean - -# On a freshly installed Ubuntu 16.04 system, added about 1.3G to the -# used disk space, although temporarily went about 1 GB more than that -# before 'sudo apt clean'. - -# On a freshly installed Ubuntu 18.04 system, added about 0.8G. - -# Retrieve and install fonts -mkdir -p "${FONT_INSTALL_DIR}" -curl -fsSL --output "${FONT_INSTALL_DIR}/UtopiaStd-Regular.otf" https://raw.github.com/p4lang/p4-spec/gh-pages/fonts/UtopiaStd-Regular.otf -curl -fsSL --output "${FONT_INSTALL_DIR}/luximr.ttf" https://raw.github.com/p4lang/p4-spec/gh-pages/fonts/luximr.ttf - -set +x -echo "------------------------------------------------------------" -echo "Time and disk space used when installation was complete:" -set -x -date -df -BM . - -if [ ${DISTRIBUTOR_ID} == "Ubuntu" -a ${UBUNTU_RELEASE} == "22.04" ] -then - set +x - 1>&2 echo "" - 1>&2 echo "------------------------------------------------------------" - 1>&2 echo "WARNING!" - 1>&2 echo "------------------------------------------------------------" - 1>&2 echo "" - 1>&2 echo "While this script can successfully install the required" - 1>&2 echo "packages on an Ubuntu 22.04 system like this one, these" - 1>&2 echo "installed packages are different versions than for" - 1>&2 echo "other supported OS's, and in our testing they GIVE" - 1>&2 echo "ERRORS and FAIL TO BUILD HTML and PDF files for the P4" - 1>&2 echo "specifications. See this issue:" - 1>&2 echo "" - 1>&2 echo " https://github.com/p4lang/p4-spec/issues/1115" - 1>&2 echo "" - 1>&2 echo "If you know how to fix this, your help is much appreciated." -fi diff --git a/tools/madokolint.conf.json b/tools/madokolint.conf.json deleted file mode 100644 index 3da443b6..00000000 --- a/tools/madokolint.conf.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "keywords": [ - { - "category": "P4Runtime message", - "keywords": [ - "WriteRequest", - "WriteResponse", - "ReadRequest", - "ReadResponse", - "SetForwardingPipelineConfigRequest", - "SetForwardingPipelineConfigResponse", - "GetForwardingPipelineConfigRequest", - "GetForwardingPipelineConfigResponse", - "StreamMessageRequest", - "StreamMessageResponse" - ] - }, - { - "category": "gRPC error code", - "keywords": [ - "CANCELLED", - "UNKNOWN", - "INVALID_ARGUMENT", - "DEADLINE_EXCEEDED", - "NOT_FOUND", - "ALREADY_EXISTS", - "PERMISSION_DENIED", - "UNAUTHENTICATED", - "RESOURCE_EXHAUSTED", - "FAILED_PRECONDITION", - "ABORTED", - "OUT_OF_RANGE", - "UNIMPLEMENTED", - "INTERNAL", - "UNAVAILABLE", - "DATA_LOSS" - ] - } - ] -} diff --git a/tools/madokolint.py b/tools/madokolint.py deleted file mode 100755 index 1438728f..00000000 --- a/tools/madokolint.py +++ /dev/null @@ -1,327 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2019 VMware, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - -# DISCLAIMER: This is a work in progress. This linter was written specifically -# for the P4Runtime specification document and may not be useful for other -# Madoko documents, as it may be making some assumptions as to how the document -# was written. - -# TODO: handle Madoko includes (we do not use them for the P4Runtime spec)? - - -import argparse -from collections import namedtuple -import json -import os.path -import re -import sys -import traceback - - -DEFAULT_CONF = 'madokolint.conf.json' -LINE_WRAP_LENGTH = 80 - - -parser = argparse.ArgumentParser(description='Lint tool for Madoko code') -parser.add_argument('files', metavar='FILE', type=str, nargs='+', - help='Input files') -parser.add_argument('--conf', type=str, - help='Configuration file for lint tool') - - -class MadokoFmtError(Exception): - def __init__(self, filename, lineno, description): - self.filename = filename - self.lineno = lineno - self.description = description - - def __str__(self): - return "Unexpected Madoko code in file {} at line {}: {}".format( - self.filename, self.lineno, self.description) - - -class LintState: - def __init__(self): - self.errors_cnt = 0 - - def error(self, filename, lineno, line, description): - # TODO: print line later? - print("Error in file {} at line {}: {}.".format(filename, lineno, description)) - self.errors_cnt += 1 - - -lint_state = LintState() - - -class LintConf: - class BadConfException(Exception): - def __init__(self, what): - self.what = what - - def __str__(self): - return self.what - - - def __init__(self): - self.keywords = {} - - def build_from(self, conf_fp): - try: - conf_d = json.load(conf_fp) - for entry in conf_d['keywords']: - category = entry['category'] - for keyword in entry['keywords']: - if keyword in self.keywords: - raise LintConf.BadConfException( - "Keyword '{}' is present multiple times in configuration".format( - keyword)) - self.keywords[keyword] = category - except json.JSONDecodeError: - print("Provided configuration file is not a valid JSON file") - sys.exit(1) - except KeyError: - print("Provided JSON configuration file has missing attributes") - traceback.print_exc() - sys.exit(1) - except LintConf.BadConfException as e: - print(str(e)) - sys.exit(1) - - -lint_conf = LintConf() - - -class Context: - """A context is an object that is used to determine whether a specific "checker" (check_* - method) should visit a given line.""" - - def enter(self, line, filename, lineno): - """Called before visiting a line. - Returns True iff the checker should visit the given line. - """ - return True - - def exit(self, line, filename, lineno): - """Called after visiting a line.""" - pass - - -class ContextSkipBlocks(Context): - """A context used to only visit Madoko code outside of blocks.""" - - Block = namedtuple('Block', ['num_tildes', 'name']) - - def __init__(self): - self.p_block = re.compile('^ *(?P~+) *(?:(?PBegin|End)(?: +))?(?P\w+)?') - self.blocks_stack = [] - - def enter(self, line, filename, lineno): - m = self.p_block.match(line) - if m: - num_tildes = len(m.group("tildes")) - has_begin = m.group("cmd") == "Begin" - has_end = m.group("cmd") == "End" - blockname = m.group("name") - - if has_begin: - self.blocks_stack.append(self.Block(num_tildes, blockname)) - return False - if has_end: - if not self.blocks_stack: - raise MadokoFmtError(filename, lineno, "Block end line but no block was begun") - expected = self.blocks_stack.pop() - if num_tildes != expected.num_tildes or blockname != expected.name: - raise MadokoFmtError( - filename, lineno, - "Block end line does not match last visited block begin line") - return False - if blockname is None: - if not self.blocks_stack: - raise MadokoFmtError(filename, lineno, "Block end line but no block was begun") - expected = self.blocks_stack.pop() - if num_tildes != expected.num_tildes: - raise MadokoFmtError( - filename, lineno, - "Block end line does not match last visited block begin line") - return False - self.blocks_stack.append(self.Block(num_tildes, blockname)) - return False - if self.blocks_stack: - return False - return True - - -# TODO: would "skip metadata" be more generic? -class ContextAfterTitle(Context): - """A context used to visit only Madoko code after the [TITLE] block element. - """ - - def __init__(self, *args): - self.title_found = False - self.p_title = re.compile('^ *\[TITLE\] *$') - - def enter(self, line, filename, lineno): - if self.title_found: - return True - self.title_found = self.p_title.match(line) is not None - return False - - -class ContextSkipHeadings(Context): - """A context used to skip headings (lines starting with #).""" - - def __init__(self, *args): - self.p_headings = re.compile('^ *#') - - def enter(self, line, filename, lineno): - return self.p_headings.match(line) is None - - -class ContextCompose(Context): - """A special context used to combine an arbitrary number of contexts.""" - - def __init__(self, *args): - self.contexts = list(args) - - def enter(self, line, filename, lineno): - res = True - for c in self.contexts: - # we use a short-circuit on purpose, if a context returns False we do not even enter - # subsequent contexts. This has some implications on how contexts are used. - res = res and c.enter(line, filename, lineno) - return res - - def exit(self, line, filename, lineno): - for c in self.contexts: - c.exit(line, filename, lineno) - - -def foreach_line(path, context, fn): - """Iterate over every line in the file. For each line, call fn iff the enter method of the - provided context returns True.""" - lineno = 1 - with open(path, 'r') as f: - for line in f: - if context.enter(line, path, lineno): - fn(line, lineno) - lineno += 1 - context.exit(line, path, lineno) - - -def check_line_wraps(path): - def check(line, lineno): - if "http" in line: # TODO: we can probably do better than this - return - if len(line) > LINE_WRAP_LENGTH + 1: # +1 for the newline characted - lint_state.error(path, lineno, line, - "is more than {} characters long".format(LINE_WRAP_LENGTH)) - - foreach_line(path, - ContextCompose(ContextAfterTitle(), ContextSkipBlocks(), ContextSkipHeadings()), - check) - - -def check_trailing_whitespace(path): - def check(line, lineno): - if len(line) >= 2 and line[-2].isspace(): - lint_state.error(path, lineno, line, "trailing whitespace") - - foreach_line(path, Context(), check) - - -def check_predefined_abbreviations(path): - abbreviations = { - 'e.g.': '⪚', - 'i.e.': '&ie;', - 'et al.': '&etal;', - } - - def check(line, lineno): - for k, v in abbreviations.items(): - if k in line: - lint_state.error(path, lineno, line, - "contains '{}', use '{}' instead".format(k, v)) - - foreach_line(path, ContextCompose(ContextAfterTitle(), ContextSkipBlocks()), check) - - -def check_keywords(path): - def check(line, lineno): - for word in line.split(): - if word not in lint_conf.keywords: - continue - category = lint_conf.keywords[word] - lint_state.error( - path, lineno, line, - "'{}' is a known keyword ({}), highlight it with backticks".format(word, category)) - - foreach_line(path, ContextCompose(ContextAfterTitle(), ContextSkipBlocks()), check) - - -def process_one(path): - check_line_wraps(path) - check_predefined_abbreviations(path) - check_trailing_whitespace(path) - check_keywords(path) - - -def main(): - args = parser.parse_args() - - for f in args.files: - if not os.path.isfile(f): - print("'{}' is not a valid file path".format(f)) - sys.exit(1) - _, ext = os.path.splitext(f) - if ext != ".mdk": - print("'{}' does not have an .mdk extension") - sys.exit(1) - - conf_path = None - if args.conf is not None: - if not os.path.isfile(args.conf): - print("'{}' is not a valid file path".format(args.conf)) - sys.exit(1) - conf_path = args.conf - elif os.path.isfile(DEFAULT_CONF): # search working directory - conf_path = DEFAULT_CONF - else: # search directory of Python script - this_dir = os.path.dirname(os.path.abspath(__file__)) - path = os.path.join(this_dir, DEFAULT_CONF) - if os.path.isfile(path): - conf_path = path - - if conf_path is not None: - with open(conf_path, 'r') as conf_fp: - lint_conf.build_from(conf_fp) - - for f in args.files: - try: - process_one(f) - except MadokoFmtError as e: - print(e) - - errors_cnt = lint_state.errors_cnt - print("**********") - print("Errors found: {}".format(errors_cnt)) - rc = 0 if errors_cnt == 0 else 2 - sys.exit(rc) - - -if __name__ == '__main__': - main() From dbbfe091a97689c415fd1a720100207087e3b558 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sat, 23 Nov 2024 21:56:29 +0100 Subject: [PATCH 09/35] Addressed some comments in the PR, part 7 Signed-off-by: Davide Scano --- CONTRIBUTING.md | 5 +---- docs/v1/README.md | 29 +++-------------------------- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 501702c4..47f44b80 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,4 @@ All developers must have signed the [P4.org](http://p4.org) CLA. ### AsciiDoc style checker -The P4Runtime specification is written using -[AsciiDoc](https://docs.asciidoctor.org/). We provide a lint tool to catch -basic formatting issues and try to keep the spec uniform. The lint tool will be -run as part of CI and patches cannot be merged until it returns success. +The P4Runtime specification is written using [AsciiDoc](https://docs.asciidoctor.org/). diff --git a/docs/v1/README.md b/docs/v1/README.md index 4d69cac9..9be0b84b 100644 --- a/docs/v1/README.md +++ b/docs/v1/README.md @@ -36,36 +36,13 @@ The easiest way to render the AsciiDoc specification documentation is to use the ### Linux ``` -rvm install ruby-3.3.1 -rvm use 3.3.1 -gem install asciidoctor -gem install asciidoctor-pdf -gem install asciidoctor-bibtex -gem install asciidoctor-mathematical -gem install prawn-gmagick -gem install rouge -gem install asciidoctor-bibtex -gem install asciidoctor-lists -gem install prawn-gmagick -make -``` -You can use the [local -installation](https://github.com/p4lang/p4-spec/blob/main/p4-16/spec/install-asciidoctor-linux.sh) +You can use the [local installation](https://github.com/p4lang/p4-spec/blob/main/p4-16/spec/install-asciidoctor-linux.sh) method. ### MacOS -We use the [local -installation](https://github.com/p4lang/p4-spec/blob/main/p4-16/spec/install-asciidoctor-linux.sh) -method. For Mac OS you can install AsciiDoc using Homebrew via: -``` -brew install asciidoctor -``` +We do not yet have instructions for generating PDF and HTML from AsciiDoc source on macOS. You are welcome to contribute documentation for how to do so if you find instructions that work. ### Windows -You need to install chocolatey [https://chocolatey.org/] or rubyInstaller [https://rubyinstaller.org/downloads/]. -Once you’ve installed Ruby , open a terminal and type: -``` - gem install asciidoctor -``` +We do not yet have instructions for generating PDF and HTML from AsciiDoc source on Windows. You are welcome to contribute documentation for how to do so if you find instructions that work. From faf7275f6c1d89c7e7d692b5773c5a5459349d40 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sun, 24 Nov 2024 10:01:22 +0100 Subject: [PATCH 10/35] Addressed some comments in the PR, part 8 Signed-off-by: Davide Scano --- docs/v1/P4Runtime-Spec.adoc | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index 0c97d016..799452a9 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -1284,7 +1284,7 @@ error if the 8-bit prefix does not contain the correct value, or leave it as is if it is correct. //The second row as to be fixed as is in the madoko document -.P4 annotations introduced by P4Runtime +.Example of statically-assigned P4Info object IDs [cols="2",width=80%, align=center, options=header, unbreakable] [#tab-exmpl-p4-obj-ids] |=== @@ -2444,7 +2444,7 @@ specification. | `error` | error | error | allowed | `match_kind` | error | error | error | `bool` | error | error | allowed -| `enum` | allowed[^enum_header] | error | allowed +| `enum` | allowed[1] | error | allowed | `header` | error | allowed | allowed | header stack | error | error | allowed | `header_union` | error | error | allowed @@ -2452,7 +2452,7 @@ specification. | `tuple` | error | error | allowed |=== -[^enum_header]: an `enum` type used as a field in a `header` must specify a +[1] An `enum` type used as a field in a `header` must specify a underlying type and representation for `enum` elements. For example, the following P4~16~ objects involve complex types that need to be @@ -4408,10 +4408,28 @@ entity { packet_replication_engine_entry { multicast_group_entry { multicast_group_id: 1 - replicas { port: "\x05" instance: 1 } - replicas { port: "\x0c" instance: 2 } - replicas { port: "\x12" instance: 3 } - replicas { port: "\x18" instance: 4 } + replicas { + port: "\x05" + instance: 1 + } + replicas { + port: "\x0c" + instance: 2 + backup_replicas { port: "\x0d" instance: 5 } + } + replicas { + port: "\x12" + instance: 3 + backup_replicas { port: "\x13" instance: 6 } + backup_replicas { port: "\x14" instance: 7 } + } + replicas { + port: "\x18" + instance: 4 + backup_replicas { port: "\x19" instance: 8 } + backup_replicas { port: "\x1a" instance: 9 } + backup_replicas { port: "\x1b" instance: 10 } + } } } } @@ -5897,7 +5915,7 @@ the client on `StreamChannel`, by including an `Any` Protobuf field cite:[ProtoA named `other` in both `StreamMessageRequest` and `StreamMessageResponse`. This enables support for architecture-specific externs which require asynchronous streaming of data from the server to the client, much like the xref:sec-digestentry[PSA `Digest` -extern]. See section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures]for more information. +extern]. See section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures] for more information. [#sec-stream-error-reporting] === Stream Error Reporting From 4c48e1b7fc29c801ee3c821ba9571647598e84a8 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sun, 24 Nov 2024 16:52:50 +0100 Subject: [PATCH 11/35] Removed trailing whitespace. Add lint script Signed-off-by: Davide Scano --- .github/workflows/spec.yml | 2 +- CONTRIBUTING.md | 5 +- docs/v1/P4Runtime-Spec.adoc | 261 +++++++++++++++--------------- tools/asciidocint.conf.json | 40 +++++ tools/asciidoclint.py | 310 ++++++++++++++++++++++++++++++++++++ 5 files changed, 485 insertions(+), 133 deletions(-) create mode 100644 tools/asciidocint.conf.json create mode 100755 tools/asciidoclint.py diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index 7306011e..b6e11d4e 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v3 - name: Run linter run: | - ./tools/asciidoc lint.py docs/v1/P4Runtime-Spec.adoc + ./tools/asciidoclint.py docs/v1/P4Runtime-Spec.adoc build-spec: runs-on: [ubuntu-latest] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 47f44b80..b357f9ab 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,4 +6,7 @@ All developers must have signed the [P4.org](http://p4.org) CLA. ### AsciiDoc style checker -The P4Runtime specification is written using [AsciiDoc](https://docs.asciidoctor.org/). +The P4Runtime specification is written using [AsciiDoc](https://docs.asciidoctor.org/). +We provide a lint tool to catch basic formatting issues and try to keep the spec uniform. +The lint tool will be run as part of CI and patches cannot be merged until it returns success. You can +run the lint tool locally with `./tools/asciidoclint.py`. diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index 799452a9..74ae1dc6 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -132,7 +132,7 @@ The following are not in scope of this specification document: the future describing one possible role definition scheme. [#sec-terms-definitions] -== Terms and Definitions +== Terms and Definitions * arbitration : Refers to the process through which P4Runtime ensures that at any given @@ -217,7 +217,7 @@ The following are not in scope of this specification document: identification of resources. [#sec-reference-architecture] -== Reference Architecture +== Reference Architecture <<#fig-reference-architecture>> represents the P4Runtime Reference Architecture. The device or target to be controlled is at the bottom, and one or @@ -309,7 +309,7 @@ configuration from a running device to synchronize the controller to its current state. [#sec-p4-as-behavioral-description-language] -=== P4 as a Behavioral Description Language +=== P4 as a Behavioral Description Language P4 can be considered a behavioral description of a switching device which may or may not execute "P4" natively. There is no requirement that a P4 compiler be @@ -387,7 +387,7 @@ allow some controllers access to just the functionality required. For example, a controller may only need read access to statistics counters and nothing more. [#sec-restarts] -=== P4Runtime State Across Restarts +=== P4Runtime State Across Restarts All targets support full restarts, where all forwarding state is reset and the P4Runtime server starts with a clean state. Some targets may also support @@ -514,7 +514,7 @@ follows: client that has the highest `election_id` that the device has ever received for the same (`device_id`, `role`) values. A connection between a controller instance and a device id --- which involves a persistent `StreamChannel` --- - can be referred to as a P4Runtime client. + + can be referred to as a P4Runtime client. + Note that the P4Runtime server does not assign a `role` or `election_id` to any controller. It is up to an arbitration mechanism outside of the server to decide on the controller roles, and the `election_id` values used for each @@ -889,7 +889,7 @@ P4Info supports this. The annotations described up to this point, e.g. `@brief()`, have all been unstructured annotations, or simply annotations. These are represented in P4Info as `repeated string annotations` fields in the various `messages`. -Similarly, structured annotations are represented in `repeated StructuredAnnotation structured_annotations` fields which are siblings to the unstructured `annotations`. +Similarly, structured annotations are represented in `repeated StructuredAnnotation structured_annotations` fields which are siblings to the unstructured `annotations`. The `structured_annotations` contain parsed representations of the original annotation source. This parsing includes expression-evaluation, so the resulting P4Info may contain a simplified replica of the original structured annotations. The structured annotation messages are defined in p4types.proto. @@ -1142,7 +1142,7 @@ message PlatformProperties { } ---- [#sec-annotating-p4-code-with-pkginfo] -==== Annotating P4 code with PkgInfo +==== Annotating P4 code with PkgInfo A P4 program's `PkgInfo` may be declared using one or more of the following annotations, attached to the `main` block only: @@ -1239,33 +1239,33 @@ layout. [width=90%, cols="2", grid=cols,align=center, options=header, unbreakable] [#tab-mapping-p4-obj-ids] |=== -| 8-bit prefix value | P4 object type -| 0x00 | Reserved (unspecified) -| 0x01 | Action -| 0x02 | Table -| 0x03 | Value-set -| 0x04 | Controller header (header type with `@controller_header` annotation) -| 0x05...0x0f | Reserved (for future P4 built-in objects) -| 0x10 | Reserved (start of PSA extern types) -| 0x11 | PSA Action profiles / selectors -| 0x12 | PSA Counter -| 0x13 | PSA Direct counter -| 0x14 | PSA Meter -| 0x15 | PSA Direct meter -| 0x16 | PSA Register -| 0x17 | PSA Digest -| 0x18...0x7f | Reserved (for future PSA extern types) -| 0x80 | Reserved (start of vendor-specific extern types) -| 0x81...0xfe | Vendor-specific extern types -| 0xff | Reserved (max prefix value) +| 8-bit prefix value | P4 object type +| 0x00 | Reserved (unspecified) +| 0x01 | Action +| 0x02 | Table +| 0x03 | Value-set +| 0x04 | Controller header (header type with `@controller_header` annotation) +| 0x05...0x0f | Reserved (for future P4 built-in objects) +| 0x10 | Reserved (start of PSA extern types) +| 0x11 | PSA Action profiles / selectors +| 0x12 | PSA Counter +| 0x13 | PSA Direct counter +| 0x14 | PSA Meter +| 0x15 | PSA Direct meter +| 0x16 | PSA Register +| 0x17 | PSA Digest +| 0x18...0x7f | Reserved (for future PSA extern types) +| 0x80 | Reserved (start of vendor-specific extern types) +| 0x81...0xfe | Vendor-specific extern types +| 0xff | Reserved (max prefix value) |=== .Format of P4Info object IDs [.center,cols="2",width=70%, grid=cols,align=center, options=header, unbreakable] [#tab-format-p4-obj-ids] |=== -| MSB bit 31 ........ bit 24 | bit 23 ....................... bit 0 LSB -| Object type prefix | Generated suffix (e.g. by the compiler) +| MSB bit 31 ........ bit 24 | bit 23 ....................... bit 0 LSB +| Object type prefix | Generated suffix (e.g. by the compiler) |=== It is possible to statically set the least-significant 24 bits of the ID in the @@ -1288,12 +1288,12 @@ if it is correct. [cols="2",width=80%, align=center, options=header, unbreakable] [#tab-exmpl-p4-obj-ids] |=== -| P4 declaration(s) | Compiler-allocated ID(s) -| `@id(0x12ab34) table tA...` | 0x0212ab34 -| `@id(0x12ab34) table tA...` | **Error**(same ID suffixes for 2 objects of the same type) -| `@id(0x12ab34) table tB...` | -| `@id(0x12ab34) table tA...` | 0x0212ab34 -| `@id(0x12ab34) action act1...` | 0x0112ab34 +| P4 declaration(s) | Compiler-allocated ID(s) +| `@id(0x12ab34) table tA...` | 0x0212ab34 +| `@id(0x12ab34) table tA...` | **Error**(same ID suffixes for 2 objects of the same type) +| `@id(0x12ab34) table tB...` | +| `@id(0x12ab34) table tA...` | 0x0212ab34 +| `@id(0x12ab34) action act1...` | 0x0112ab34 |=== The `@id` annotation can also be used to choose the ID for match fields, @@ -1594,7 +1594,6 @@ The meter type can be any of the `MeterSpec.Type` enum values: @two_rate_three_color direct_meter(MeterType.bytes) my_meter; ---- - ** `SINGLE_RATE_THREE_COLOR`: This is the *Single Rate Three Color Marker* (srTCM) defined in RFC 2697 cite:[RFC2697]. This allows meters to use one rate and an Excess Burst Size (EBS) to split packets into three potential @@ -1618,7 +1617,7 @@ field, which indicates whether the index has a xref:sec-user-defined-types[user- type]. This is useful for xref:sec-psa-metadata-translation[translation]. The underlying built-in type must be a fixed-width unsigned bitstring (`bit`). [#sec-controller-packet-meta] -==== `ControllerPacketMetadata` +==== `ControllerPacketMetadata` `ControllerPacketMetadata` messages are used to describe any metadata associated with controller packet-in and packet-out. A packet-in is defined as a data plane @@ -1663,7 +1662,7 @@ message contains the following fields: ** `annotations`, a repeated field of strings, each one representing a P4 annotation associated to this metadata. ** `bitwidth`, an `int32` representing the size in bits of this metadata. - ** `type_name`, which indicates whether the metadata field has a + ** `type_name`, which indicates whether the metadata field has a xref:sec-user-defined-types[user-defined type]; this is useful for xref:sec-psa-metadata-translation[translation]. @@ -1918,7 +1917,7 @@ The `Digest` message defines the following fields: notification using a `P4DataTypeSpec` message (see section on xref:sec-representation-of-arbitrary-p4-types[Representation of Arbitrary P4 Types]). [#sec-p4info-extern] -==== `Extern` +==== `Extern` `Extern` messages are used to specify all extern instances across all extern types for a non-PSA architecture. This is useful when extending P4Runtime to @@ -1927,7 +1926,7 @@ to at most one `Extern` message instance in P4Info. The `Extern` message defines the following fields: * `extern_type_id`, a 32-bit unsigned integer which uniquely identifies the - extern type in the context of the architecture. It must be in the + extern type in the context of the architecture. It must be in the xref:sec-id-allocation[reserved range] `[0x81, 0xfe]` . Note that this value does not need to be unique across all architectures from all organizations, since at any given time every device managed by a P4Runtime server maps to a single P4Info @@ -1957,7 +1956,7 @@ See section on xref:sec-representation-of-arbitrary-p4-types[Representation of A Types]. [#sec-p4-fwd-pipe-config] -== P4 Forwarding-Pipeline Configuration +== P4 Forwarding-Pipeline Configuration The `ForwardingPipelineConfig` captures data needed to realize a P4 forwarding-pipeline and map various IDs passed in P4Runtime entity messages. It @@ -1994,10 +1993,10 @@ field is optional. For this reason, the actual value is wrapped in its own message to clearly identify cases where a cookie is not present. [#sec-message-formatting-principles] -== General Principles for Message Formatting +== General Principles for Message Formatting [#sec-default-valued-fields] -=== Default-valued Fields +=== Default-valued Fields There is a subtle distinction between the treatment of default-valued scalar fields vs default-valued message fields in P4Runtime. @@ -2099,7 +2098,7 @@ counter_id: message. [#sec-read-write-symmetry] -=== Read-Write Symmetry +=== Read-Write Symmetry The reads and writes a client issues towards a server should be symmetrical and unambiguous. More specifically, if a client writes a P4 entity and then reads it @@ -2139,7 +2138,7 @@ that different orderings of the same elements are considered equal. This method of comparing Protobuf messages may come at a cost in performance. [#sec-data-plane-volatile-objects] -==== Data plane volatile objects +==== Data plane volatile objects An exception to read-write symmetry are objects whose contents or fields can change by the action of the data plane alone, even if no @@ -2248,7 +2247,7 @@ Not data plane volatile in any architectures defined by P4.org specifications. [#sec-bytestrings] -=== Bytestrings +=== Bytestrings P4Runtime integer values may be too large to fit in Protobuf primitive data types (32-bit and 64-bit words). The P4 language does not put any limit on the @@ -2357,21 +2356,21 @@ P4Runtime binary strings according to the criteria in the list above. [.center,cols="4",width=70%,align=center, options=header, unbreakable] [#tab-valid-bytestring-encoding] |=== -| P4 type | Integer value | P4Runtime binary string | Read-write symmetry -| `bit<8>` | 99 (0x63) | `\x63` | yes -| `bit<16>` | 99 (0x63) | `\x00\x63` | no -| `bit<16>` | 99 (0x63) | `\x63` | yes -| `bit<16>` | 12388 (0x3064) | `\x30\x64` | yes -| `bit<16>` | 12388 (0x3064) | `\x00\x30\x64` | no -| `bit<12>` | 99 (0x63) | `\x00\x63` | no -| `bit<12>` | 99 (0x63) | `\x63` | yes -| `bit<12>` | 99 (0x63) | `\x00\x00\x63` | no -| `int<8>` | 99 (0x63) | `\x63` | yes -| `int<8>` | -99 (-0x63) | `\x9d` | yes -| `int<8>` | -99 (-0x63) | `\xff\x9d` | no -| `int<12>` | -739 (-0x2e3) | `\xfd\x1d` | yes -| `int<16>` | 0 (0x0) | `\x00\x00` | no -| `int<16>` | 0 (0x0) | `\x00` | yes +| P4 type | Integer value | P4Runtime binary string | Read-write symmetry +| `bit<8>` | 99 (0x63) | `\x63` | yes +| `bit<16>` | 99 (0x63) | `\x00\x63` | no +| `bit<16>` | 99 (0x63) | `\x63` | yes +| `bit<16>` | 12388 (0x3064) | `\x30\x64` | yes +| `bit<16>` | 12388 (0x3064) | `\x00\x30\x64` | no +| `bit<12>` | 99 (0x63) | `\x00\x63` | no +| `bit<12>` | 99 (0x63) | `\x63` | yes +| `bit<12>` | 99 (0x63) | `\x00\x00\x63` | no +| `int<8>` | 99 (0x63) | `\x63` | yes +| `int<8>` | -99 (-0x63) | `\x9d` | yes +| `int<8>` | -99 (-0x63) | `\xff\x9d` | no +| `int<12>` | -739 (-0x2e3) | `\xfd\x1d` | yes +| `int<16>` | 0 (0x0) | `\x00\x00` | no +| `int<16>` | 0 (0x0) | `\x00` | yes |=== <<#tab-invalid-bytestring-encoding>> shows some examples of invalid @@ -2382,16 +2381,16 @@ P4Runtime binary strings: [.center,cols="2",width=70%,align=center, options=header, unbreakable] [#tab-invalid-bytestring-encoding] |=== -| P4 type | P4Runtime binary string -| `bit<8>` | `\x01\x63` -| `bit<8>` | `empty string` -| `bit<16>` | `\x01\x00\x63` -| `bit<12>` | `\x10\x63` -| `bit<12>` | `\x01\x00\x63` -| `bit<12>` | `\x00\x40\x63` -| `int<8>` | `\x00\x9d` -| `int<12>` | `\x8d\x1d` -| `int<16>` | `empty string` +| P4 type | P4Runtime binary string +| `bit<8>` | `\x01\x63` +| `bit<8>` | `empty string` +| `bit<16>` | `\x01\x00\x63` +| `bit<12>` | `\x10\x63` +| `bit<12>` | `\x01\x00\x63` +| `bit<12>` | `\x00\x40\x63` +| `int<8>` | `\x00\x9d` +| `int<12>` | `\x8d\x1d` +| `int<16>` | `empty string` |=== As the preceding examples illustrate, a P4Runtime server must accept a wide @@ -2417,7 +2416,7 @@ the binary string is less than the maximum length specified in the P4 program, and return an `OUT_OF_RANGE` error code otherwise. [#sec-representation-of-arbitrary-p4-types] -=== Representation of Arbitrary P4 Types +=== Representation of Arbitrary P4 Types ==== Problem Statement @@ -2435,21 +2434,21 @@ specification. [#tab-p4-type-usage] |=== | *Element type* 3+^| *Container type* -| | *header* | *header_union* | *struct or tuple* -| `bit` | allowed | error | allowed -| `int` | allowed | error | allowed -| `varbit` | allowed | error | allowed -| `int` | error | error | error -| `void` | error | error | error -| `error` | error | error | allowed -| `match_kind` | error | error | error -| `bool` | error | error | allowed -| `enum` | allowed[1] | error | allowed -| `header` | error | allowed | allowed -| header stack | error | error | allowed -| `header_union` | error | error | allowed -| `struct` | error | error | allowed -| `tuple` | error | error | allowed +| | *header* | *header_union* | *struct or tuple* +| `bit` | allowed | error | allowed +| `int` | allowed | error | allowed +| `varbit` | allowed | error | allowed +| `int` | error | error | error +| `void` | error | error | error +| `error` | error | error | allowed +| `match_kind` | error | error | error +| `bool` | error | error | allowed +| `enum` | allowed[1] | error | allowed +| `header` | error | allowed | allowed +| header stack | error | error | allowed +| `header_union` | error | error | allowed +| `struct` | error | error | allowed +| `tuple` | error | error | allowed |=== [1] An `enum` type used as a field in a `header` must specify a @@ -2529,7 +2528,7 @@ P4~16~ declaration. The same goes for the order of members of an `enum` (serializable or not) or members of `error`. [#sec-p4data-in-p4runtime-proto] -==== `P4Data` in p4runtime.proto +==== `P4Data` in p4runtime.proto P4Runtime uses the `P4Data` message to represent values of arbitrary types. The P4Runtime client must generate correct `P4Data` messages based on the type @@ -2684,7 +2683,7 @@ it easier for the server to respect the xref:sec-read-write-symmetry[read-write symmetry] principle. [#sec-user-defined-types] -==== User-defined types +==== User-defined types P4~16~ enables programmers to introduce new types cite:[P4NewTypes]. While similar to `typedef`, this mechanism introduces in fact a new type, which is not a @@ -2887,7 +2886,7 @@ tables { ---- [#sec-p4-entity-msgs] -== P4 Entity Messages +== P4 Entity Messages P4Runtime covers P4 entities that are either part of the P4~16~ language, or defined as PSA externs. The sections below describe the messages for each @@ -2932,7 +2931,7 @@ the `TableEntry` entity, which has the following fields: performs a read on the entry. * `meter_config`, which is used to read and write the configuration for the - direct meter entry attached to this table entry, if any. See + direct meter entry attached to this table entry, if any. See xref:sec-direct-resources[Direct resources] section for more information. * `counter_data`, which is used to read and write the value for the direct @@ -2990,7 +2989,7 @@ The `is_const` field must be `false` in any `INSERT`, `MODIFY`, or must reject the operation and return an `INVALID_ARGUMENT` error. [#sec-match-format] -==== Match Format +==== Match Format The bytes fields in the `FieldMatch` message follow the format described in xref:sec-bytestrings[Bytestrings]. @@ -3114,7 +3113,7 @@ assert(value & mask == value) * `RANGE` match * The binary string encoding of the low bound (when present) and high bound - (when present) must conform to the xref:sec-bytestrings[Bytestrings] + (when present) must conform to the xref:sec-bytestrings[Bytestrings] requirements. * Low bound must be less than or equal to the high bound. * "Don't care" match must be omitted. @@ -3194,7 +3193,7 @@ has not been inserted in the corresponding action profile instance yet, the P4Runtime server must return a `NOT_FOUND` error code. [#sec-default-entry] -==== Default Entry +==== Default Entry According to the P4 specification, the default entry for a table is always set. It can be set at compile-time by the P4 programmer --- or defaults to `NoAction` @@ -3226,7 +3225,7 @@ indirect tables --- tables with an ActionProfile or ActionSelector hope that it would simplify the implementation of the P4Runtime service. [#sec-constant-tables] -==== Constant Tables +==== Constant Tables Constant tables are defined as tables whose match entries are immutable. They are identified by the table property `const entries` @@ -3264,7 +3263,7 @@ explicitly specifying priorities for entries in constant tables, but `p4c` does not yet support this. [#sec-preinitialized-tables] -==== Preinitialized tables +==== Preinitialized tables Preinitialized tables are those defined with an `entries` table property in the P4~16~ source code, with no `const` qualifier before @@ -3321,7 +3320,7 @@ the open source `p4c` compiler. See <<#sec-entries-files>> for details. [#sec-table-wildcard-reads] -==== Wildcard Reads +==== Wildcard Reads When performing a `ReadRequest`, the P4Runtime client can select all entries from one or all tables on the target and use several of the `TableEntry` fields @@ -3467,7 +3466,7 @@ single entry (the "don't care" entry) as long as the `priority` field is set to the correct value. [#sec-direct-resources] -==== Direct Resources +==== Direct Resources In addition to the `DirectCounterEntry` and `DirectMeterEntry` entities, P4Runtime support reading and writing direct resources as part of the @@ -3570,7 +3569,7 @@ meter configuration, it needs to be provided again in the `TableEntry` message (i.e. the `meter_config` field must be set to match the existing configuration). [#sec-idle-timeout] -==== Idle-timeout +==== Idle-timeout P4Runtime supports idle timeout for table entries. When adding a table entry, the client can specify a Time-To-Live (TTL) value. If at any time during its @@ -3623,7 +3622,7 @@ For more information about idle timeout, in particular regarding `IdleTimeoutNotification`, please refer to the xref:sec-table-idle-timeout-notification[Table idle timeout notifications] section. [#sec-action-profile-member-and-group] -=== `ActionProfileMember` & `ActionProfileGroup` +=== `ActionProfileMember` & `ActionProfileGroup` P4Runtime defines an API for programming a PSA ActionProfile extern using `ActionProfileMember` messages. A PSA ActionSelector extern can be programmed @@ -3733,7 +3732,7 @@ an existing ActionProfile or ActionSelector object, and a `member_id` equal to 0, will read all members of that specified object. [#sec-action-profile-group-programming] -==== Action Profile Group Programming +==== Action Profile Group Programming Action profile groups are entries in an ActionSelector and are referenced by a `uint32` identifier that is bound to a set of action profile members already @@ -3848,7 +3847,7 @@ in the P4Info message: group-creation time. [#sec-oneshot] -==== One Shot Action Selector Programming +==== One Shot Action Selector Programming P4Runtime supports syntactic sugar to program a table, which is implemented with an action selector, in one shot. One shot means that a table entry, an action @@ -3998,7 +3997,7 @@ an action selector implementation. Support for the `ActionProfileMember` and message that it receives. [#action-selector-constraints] -==== Constraints on action selector programming +==== Constraints on action selector programming The PSA specification states that the following features are *optional* in action selector implementations cite:[PSAActionSelector]: @@ -4505,7 +4504,7 @@ other fields in `MulticastGroupEntry` are ignored. To perform a *wildcard* must be set to 0, its default value. [#sec-valid-values-for-mg-id] -===== Valid Values for `multicast_group_id` +===== Valid Values for `multicast_group_id` The PSA specification states that the valid *data plane* values for multicast group ids (`MulticastGroup_t`) range from 1 (0 is a special value that indicates @@ -4605,9 +4604,9 @@ semantics: value for the PSA `ClassOfService_t` type, which supports runtime translation by default cite:[PSATranslation], or the server must return `INVALID_ARGUMENT`. See xref:sec-translation-of-port-numbers[PSA Metadata - Translation] for more information. The `packet_length_bytes` field must be - set to a non-zero value if the clone packet should be truncated to the given - value (in bytes). If the`packet_length_bytes` field is 0 (default), + Translation] for more information. The `packet_length_bytes` field must be + set to a non-zero value if the clone packet should be truncated to the given + value (in bytes). If the`packet_length_bytes` field is 0 (default), no truncation on the clone will be performed. * `MODIFY`: Modify the attributes of a given clone session entry, indexed by the given `clone_session_id`. Same restrictions as `INSERT` apply here. @@ -4623,7 +4622,7 @@ default value. The `session_id` field can never be equal to 0 in a `Write` RPC. If it does, the server must return an `INVALID_ARGUMENT` error. [#sec-valid-values-for-session-id] -===== Valid Values for `session_id` +===== Valid Values for `session_id` The PSA specification states that the valid *data plane* values for clone session ids (`CloneSessionId_t`) range from 0 to the maximum value supported by @@ -4768,7 +4767,7 @@ control plane operations. error. [#sec-digestentry] -=== `DigestEntry` +=== `DigestEntry` A digest is one mechanism to send a message from the data plane to the control plane. It is traditionally used for MAC address learning: when a packet @@ -4910,7 +4909,7 @@ while (true) { ---- [#sec-extern-entry] -=== `ExternEntry` +=== `ExternEntry` This is used to support a P4 extern entity that is not part of PSA. It is defined as: @@ -4938,7 +4937,7 @@ section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures] for more information. [#sec-error-reporting-messages] -== Error Reporting Messages +== Error Reporting Messages P4Runtime is based on gRPC and all RPCs return a status to indicate success or failure. gRPC supports multiple language bindings; we use C++ binding below to @@ -5079,7 +5078,7 @@ P4Runtime implementation for a P4-programmable target, we expect the P4 compiler to reject the program. [#sec-write-rpc] -== `Write` RPC +== `Write` RPC The `Write` RPC updates one or more P4 entities on the target. The request is defined as follows: @@ -5165,7 +5164,7 @@ If an update is not allowed under the given controller role, the server must return a `PERMISSION_DENIED` error for this update. [#sec-batching-and-ordering-of-updates] -=== Batching and Ordering of Updates +=== Batching and Ordering of Updates P4Runtime supports batching of `Write` operations. The list of updates in a `WriteRequest` is referred to as a *batch*. A batch can consist of arbitrary @@ -5206,7 +5205,7 @@ should be sent sequentially, waiting for the previous call to be acknowledged before sending the next one. [#sec-batch-atomicity] -=== Batch Atomicity +=== Batch Atomicity A P4Runtime server may arbitrarily reorder messages within a batch. The atomicity semantics of the batch operations are defined by the `Atomicity` @@ -5377,7 +5376,7 @@ entity. Please refer to the xref:sec-p4-entity-msgs[P4 Entity Messages] section for details on what parts of the entity specification make up the entity *key*. [#sec-wildcard-reads] -=== Wildcard Reads +=== Wildcard Reads P4Runtime allows wildcard read of P4 entities. A *request* may omit or use default values for parts of the entity key to achieve wildcard behavior. Please @@ -5673,7 +5672,7 @@ returning the `p4_device_config`, there should be read-write symmetry between == P4Runtime Stream Messages [#sec-packet-i_o] -=== Packet I/O +=== Packet I/O P4Runtime supports controller packet-in and packet-out by means of `PacketIn` and `PacketOut` stream messages, respectively. @@ -5837,7 +5836,7 @@ xref:sec-default-valued-fields[the section on default-valued fields]. See the [DigestEntry](#sec-digestentry) section. [#sec-table-idle-timeout-notification] -=== Table Idle Timeout Notification +=== Table Idle Timeout Notification When a table supports idle timeout (as per the P4Info message), the primary client can specify a TTL value for each entry in the table (see @@ -5918,7 +5917,7 @@ streaming of data from the server to the client, much like the xref:sec-digesten extern]. See section on xref:sec-extending-p4runtime[Extending P4Runtime for non-PSA Architectures] for more information. [#sec-stream-error-reporting] -=== Stream Error Reporting +=== Stream Error Reporting The P4Runtime server can asynchronously report errors which occur when processing `StreamMessageRequest` messages, using the `error` message field (of @@ -6042,7 +6041,7 @@ P4Runtime service) implements an older version of the P4Runtime specification == Portability Considerations [#sec-psa-metadata-translation] -=== PSA Metadata Translation +=== PSA Metadata Translation The *Portable Switch Architecture* (PSA) defines standard metadata, whose data plane types are different on different PSA targets. In order to enable @@ -6072,7 +6071,7 @@ the non-forwarding switch config data that is delivered separately to the switch. [#sec-translation-of-port-numbers] -==== Translation of Port Numbers +==== Translation of Port Numbers In order to support the above SDN use case, P4Runtime requires translation of port metadata values between the controller's space and the PSA device's space @@ -6300,7 +6299,7 @@ using SDN port numbers as indices, and not device-specific port numbers. The server that translation is required. [#sec-p4runtime-versioning] -== P4Runtime Versioning +== P4Runtime Versioning P4Runtime follows the Google guidelines for versioning cloud APIs cite:[APIVersioning]. We use a `MAJOR.MINOR.PATCH` style version number scheme and @@ -6340,7 +6339,7 @@ P4Runtime Github repository cite:[P4RuntimeRepo] and the version label follows semantic versioning rules cite:[SemVer]. [#sec-extending-p4runtime] -== Extending P4Runtime for non-PSA Architectures +== Extending P4Runtime for non-PSA Architectures P4Runtime includes native support for PSA programs and in particular support for runtime control of PSA extern instances. While the definition of Protobuf @@ -6507,7 +6506,7 @@ properties, but we may include on in future versions of the API. patch version numbers. [appendix] -= Appendix += Appendix === Revision History ==== Changes in v1.4.1 @@ -6644,24 +6643,24 @@ the purpose of adding features for the P4Runtime API. [cols="2",width=80%, align=center, options=header, unbreakable] [#tab-p4-annotations] |=== -| Annotation | Description -| `@brief` | See <<#sec-annotating-p4-entities-with-documentation>> +| Annotation | Description +| `@brief` | See <<#sec-annotating-p4-entities-with-documentation>> | `@controller_header` | See <<#sec-controller-packet-meta>> -| `@description` | See <<#sec-annotating-p4-entities-with-documentation>> +| `@description` | See <<#sec-annotating-p4-entities-with-documentation>> | `@id` | See <<#sec-id-allocation>> | `@max_group_size` | See <<#sec-p4info-action-profile>>, <<#sec-action-profile-group-programming>> -| `@selector_size_semantics` | See <<#sec-p4info-action-profile>> +| `@selector_size_semantics` | See <<#sec-p4info-action-profile>> | `@max_member_weight` | See <<#sec-p4info-action-profile>> | `@two_rate_three_color` | See <<#sec-meter-directmeter>> | `@single_rate_three_color` | See <<#sec-meter-directmeter>> | `@single_rate_two_color` | See <<#sec-meter-directmeter>> -| `@pkginfo` | See <<#sec-annotating-p4-code-with-pkginfo>> -| `@platform_property` | See <<#sec-annotating-p4-code-with-pkginfo>> -| `@p4runtime_translation` | See <<#sec-user-defined-types>>, <<#sec-translation-of-port-numbers>> +| `@pkginfo` | See <<#sec-annotating-p4-code-with-pkginfo>> +| `@platform_property` | See <<#sec-annotating-p4-code-with-pkginfo>> +| `@p4runtime_translation` | See <<#sec-user-defined-types>>, <<#sec-translation-of-port-numbers>> |=== [#sec-value-set-example] -=== A More Complex Value Set Example +=== A More Complex Value Set Example This section includes a more complex Value Set example, with multiple matches of different kinds. @@ -6813,7 +6812,7 @@ size. The gRPC server running the P4Runtime service must not set the maximum receive message size to a value smaller than the default (4MB). [#sec-entries-files] -=== P4Runtime Entries files +=== P4Runtime Entries files The open source P4 compiler `p4c` cite:[p4c] implements an option to generate an "entries file", i.e. a file that contains all table diff --git a/tools/asciidocint.conf.json b/tools/asciidocint.conf.json new file mode 100644 index 00000000..3da443b6 --- /dev/null +++ b/tools/asciidocint.conf.json @@ -0,0 +1,40 @@ +{ + "keywords": [ + { + "category": "P4Runtime message", + "keywords": [ + "WriteRequest", + "WriteResponse", + "ReadRequest", + "ReadResponse", + "SetForwardingPipelineConfigRequest", + "SetForwardingPipelineConfigResponse", + "GetForwardingPipelineConfigRequest", + "GetForwardingPipelineConfigResponse", + "StreamMessageRequest", + "StreamMessageResponse" + ] + }, + { + "category": "gRPC error code", + "keywords": [ + "CANCELLED", + "UNKNOWN", + "INVALID_ARGUMENT", + "DEADLINE_EXCEEDED", + "NOT_FOUND", + "ALREADY_EXISTS", + "PERMISSION_DENIED", + "UNAUTHENTICATED", + "RESOURCE_EXHAUSTED", + "FAILED_PRECONDITION", + "ABORTED", + "OUT_OF_RANGE", + "UNIMPLEMENTED", + "INTERNAL", + "UNAVAILABLE", + "DATA_LOSS" + ] + } + ] +} diff --git a/tools/asciidoclint.py b/tools/asciidoclint.py new file mode 100755 index 00000000..3a8b31ae --- /dev/null +++ b/tools/asciidoclint.py @@ -0,0 +1,310 @@ +#!/usr/bin/env python3 + +# Copyright 2024 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +# DISCLAIMER: This is a work in progress. This linter was written specifically +# for the P4Runtime specification document and may not be useful for other +# AsciiDoc documents, as it may be making some assumptions as to how the document +# was written. + + + + +import argparse +from collections import namedtuple +import json +import os.path +import re +import sys +import traceback + + +DEFAULT_CONF = 'asciidocint.conf.json' +LINE_WRAP_LENGTH = 80 + + +parser = argparse.ArgumentParser(description='Lint tool for Asciidoc code') +parser.add_argument('files', metavar='FILE', type=str, nargs='+', + help='Input files') +parser.add_argument('--conf', type=str, + help='Configuration file for lint tool') + + +class AsciidocFmtError(Exception): + def __init__(self, filename, lineno, description): + self.filename = filename + self.lineno = lineno + self.description = description + + def __str__(self): + return "Unexpected Asciidoc code in file {} at line {}: {}".format( + self.filename, self.lineno, self.description) + + +class LintState: + def __init__(self): + self.errors_cnt = 0 + + def error(self, filename, lineno, line, description): + # TODO: print line later? + print("Error in file {} at line {}: {}.".format(filename, lineno, description)) + self.errors_cnt += 1 + + +lint_state = LintState() + + +class LintConf: + class BadConfException(Exception): + def __init__(self, what): + self.what = what + + def __str__(self): + return self.what + + + def __init__(self): + self.keywords = {} + + def build_from(self, conf_fp): + try: + conf_d = json.load(conf_fp) + for entry in conf_d['keywords']: + category = entry['category'] + for keyword in entry['keywords']: + if keyword in self.keywords: + raise LintConf.BadConfException( + "Keyword '{}' is present multiple times in configuration".format( + keyword)) + self.keywords[keyword] = category + except json.JSONDecodeError: + print("Provided configuration file is not a valid JSON file") + sys.exit(1) + except KeyError: + print("Provided JSON configuration file has missing attributes") + traceback.print_exc() + sys.exit(1) + except LintConf.BadConfException as e: + print(str(e)) + sys.exit(1) + + +lint_conf = LintConf() + + +class Context: + """A context is an object that is used to determine whether a specific "checker" (check_* + method) should visit a given line.""" + + def enter(self, line, filename, lineno): + """Called before visiting a line. + Returns True iff the checker should visit the given line. + """ + return True + + def exit(self, line, filename, lineno): + """Called after visiting a line.""" + pass + + +class ContextSkipBlocks(Context): + """A context used to only visit Asciidoc code outside of blocks.""" + + Block = namedtuple('Block', ['num_tildes', 'name']) + + def __init__(self): + self.p_block = re.compile('^ *(?P~+) *(?:(?PBegin|End)(?: +))?(?P\w+)?') + self.blocks_stack = [] + + def enter(self, line, filename, lineno): + m = self.p_block.match(line) + if m: + num_tildes = len(m.group("tildes")) + has_begin = m.group("cmd") == "Begin" + has_end = m.group("cmd") == "End" + blockname = m.group("name") + + if has_begin: + self.blocks_stack.append(self.Block(num_tildes, blockname)) + return False + if has_end: + if not self.blocks_stack: + raise AsciidocFmtError(filename, lineno, "Block end line but no block was begun") + expected = self.blocks_stack.pop() + if num_tildes != expected.num_tildes or blockname != expected.name: + raise AsciidocFmtError( + filename, lineno, + "Block end line does not match last visited block begin line") + return False + if blockname is None: + if not self.blocks_stack: + raise AsciidocFmtError(filename, lineno, "Block end line but no block was begun") + expected = self.blocks_stack.pop() + if num_tildes != expected.num_tildes: + raise AsciidocFmtError( + filename, lineno, + "Block end line does not match last visited block begin line") + return False + self.blocks_stack.append(self.Block(num_tildes, blockname)) + return False + if self.blocks_stack: + return False + return True + + +# TODO: would "skip metadata" be more generic? +class ContextAfterTitle(Context): + """A context used to visit only Asciidoc code after the [TITLE] block element. + """ + + def __init__(self, *args): + self.title_found = False + self.p_title = re.compile('^ *\[TITLE\] *$') + + def enter(self, line, filename, lineno): + if self.title_found: + return True + self.title_found = self.p_title.match(line) is not None + return False + + +class ContextSkipHeadings(Context): + """A context used to skip headings (lines starting with #).""" + + def __init__(self, *args): + self.p_headings = re.compile('^ *#') + + def enter(self, line, filename, lineno): + return self.p_headings.match(line) is None + + +class ContextCompose(Context): + """A special context used to combine an arbitrary number of contexts.""" + + def __init__(self, *args): + self.contexts = list(args) + + def enter(self, line, filename, lineno): + res = True + for c in self.contexts: + # we use a short-circuit on purpose, if a context returns False we do not even enter + # subsequent contexts. This has some implications on how contexts are used. + res = res and c.enter(line, filename, lineno) + return res + + def exit(self, line, filename, lineno): + for c in self.contexts: + c.exit(line, filename, lineno) + + +def foreach_line(path, context, fn): + """Iterate over every line in the file. For each line, call fn iff the enter method of the + provided context returns True.""" + lineno = 1 + with open(path, 'r') as f: + for line in f: + if context.enter(line, path, lineno): + fn(line, lineno) + lineno += 1 + context.exit(line, path, lineno) + + +def check_line_wraps(path): + def check(line, lineno): + if "http" in line: # TODO: we can probably do better than this + return + if len(line) > LINE_WRAP_LENGTH + 1: # +1 for the newline characted + lint_state.error(path, lineno, line, + "is more than {} characters long".format(LINE_WRAP_LENGTH)) + + foreach_line(path, + ContextCompose(ContextAfterTitle(), ContextSkipBlocks(), ContextSkipHeadings()), + check) + + +def check_trailing_whitespace(path): + def check(line, lineno): + if len(line) >= 2 and line[-2].isspace(): + lint_state.error(path, lineno, line, "trailing whitespace") + + foreach_line(path, Context(), check) + + +def check_keywords(path): + def check(line, lineno): + for word in line.split(): + if word not in lint_conf.keywords: + continue + category = lint_conf.keywords[word] + lint_state.error( + path, lineno, line, + "'{}' is a known keyword ({}), highlight it with backticks".format(word, category)) + + foreach_line(path, ContextCompose(ContextAfterTitle(), ContextSkipBlocks()), check) + + +def process_one(path): + check_line_wraps(path) + check_trailing_whitespace(path) + check_keywords(path) + + +def main(): + args = parser.parse_args() + + for f in args.files: + if not os.path.isfile(f): + print("'{}' is not a valid file path".format(f)) + sys.exit(1) + _, ext = os.path.splitext(f) + if ext != ".adoc": + print("'{}' does not have an .mdk extension") + sys.exit(1) + + conf_path = None + if args.conf is not None: + if not os.path.isfile(args.conf): + print("'{}' is not a valid file path".format(args.conf)) + sys.exit(1) + conf_path = args.conf + elif os.path.isfile(DEFAULT_CONF): # search working directory + conf_path = DEFAULT_CONF + else: # search directory of Python script + this_dir = os.path.dirname(os.path.abspath(__file__)) + path = os.path.join(this_dir, DEFAULT_CONF) + if os.path.isfile(path): + conf_path = path + + if conf_path is not None: + with open(conf_path, 'r') as conf_fp: + lint_conf.build_from(conf_fp) + + for f in args.files: + try: + process_one(f) + except AsciidocFmtError as e: + print(e) + + errors_cnt = lint_state.errors_cnt + print("**********") + print("Errors found: {}".format(errors_cnt)) + rc = 0 if errors_cnt == 0 else 2 + sys.exit(rc) + + +if __name__ == '__main__': + main() From 4e277debc12b85312239a07f9de00c85a6e52910 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sun, 24 Nov 2024 18:44:08 +0100 Subject: [PATCH 12/35] Changed caption table 7 Signed-off-by: Davide Scano --- docs/v1/P4Runtime-Spec.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index 74ae1dc6..d6a6cba2 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -1284,7 +1284,7 @@ error if the 8-bit prefix does not contain the correct value, or leave it as is if it is correct. //The second row as to be fixed as is in the madoko document -.Example of statically-assigned P4Info object IDs +.P4 annotations introduced by P4Runtime [cols="2",width=80%, align=center, options=header, unbreakable] [#tab-exmpl-p4-obj-ids] |=== @@ -6639,7 +6639,7 @@ No content changes; tag was incremented only. <<#tab-p4-annotations>> lists P4~16~ annotations introduced primarily for the purpose of adding features for the P4Runtime API. -.Example of statically-assigned P4Info object IDs +.P4 annotations introduced by P4Runtime [cols="2",width=80%, align=center, options=header, unbreakable] [#tab-p4-annotations] |=== From 36c2602fbef53372ee97f71d02219a321ebfdc6b Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sun, 24 Nov 2024 19:22:28 +0100 Subject: [PATCH 13/35] Fix tables caption Signed-off-by: Davide Scano --- docs/v1/P4Runtime-Spec.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index d6a6cba2..399813d4 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -1284,7 +1284,7 @@ error if the 8-bit prefix does not contain the correct value, or leave it as is if it is correct. //The second row as to be fixed as is in the madoko document -.P4 annotations introduced by P4Runtime +.Example of statically-assigned P4Info object IDs [cols="2",width=80%, align=center, options=header, unbreakable] [#tab-exmpl-p4-obj-ids] |=== From 8f0f754cb3ce1ff2dc1014fd8341428dd75e8524 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Mon, 2 Dec 2024 22:15:31 +0100 Subject: [PATCH 14/35] Proposal to address LibreOffice comment Signed-off-by: Davide Scano --- docs/v1/Makefile | 11 +++-------- docs/v1/README.md | 17 +++++++++++++++++ docs/v1/libre-office.png | Bin 0 -> 98393 bytes 3 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 docs/v1/libre-office.png diff --git a/docs/v1/Makefile b/docs/v1/Makefile index c2e4bbe5..8111e747 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -8,12 +8,7 @@ all: ${SPEC}.pdf ${SPEC}.html build: mkdir -p build -# Note: Brute-force image rendering; could use more precise file-by-file make rules -figs: build resources/figs/*.odg - soffice --convert-to svg --outdir resources/figs/ resources/figs/*.odg > /dev/null 2>&1 - soffice --convert-to png --outdir resources/figs/ resources/figs/*.odg > /dev/null 2>&1 - -${SPEC}.pdf: ${SPEC}.adoc figs +${SPEC}.pdf: ${SPEC}.adoc time asciidoctor-pdf -v \ -a pdf-fontsdir=resources/fonts \ -r asciidoctor-mathematical \ @@ -21,7 +16,7 @@ ${SPEC}.pdf: ${SPEC}.adoc figs -r asciidoctor-lists \ -a rouge-style=$(ROUGE_STYLE) $< -${SPEC}.html: ${SPEC}.adoc figs +${SPEC}.html: ${SPEC}.adoc time asciidoctor -v \ -r asciidoctor-mathematical \ -r asciidoctor-bibtex \ @@ -29,4 +24,4 @@ ${SPEC}.html: ${SPEC}.adoc figs -a rouge-css=$(ROUGE_CSS) $< clean: - /bin/rm -f ${SPEC}.pdf ${SPEC}.html resources/figs/stem-*.png \ No newline at end of file + /bin/rm -f ${SPEC}.pdf ${SPEC}.html \ No newline at end of file diff --git a/docs/v1/README.md b/docs/v1/README.md index 9be0b84b..bf2a069d 100644 --- a/docs/v1/README.md +++ b/docs/v1/README.md @@ -26,6 +26,23 @@ Files: - `*.bib` - Bibliography file that contains a list of bibliographical item, such as articles, books, and theses. - `Makefile` builds documentation in the build subdirectory +## Document Figures + +Each image in the specification has a corresponding `.odg` file under +`figures/`. These are LibreOffice drawing files. The files are rendered into +`.svg` and `.png` images (for HTML and PDF output, resepectively) at build time, +using the `soffice` command-line tool. The page size for each image should be +adjusted manually by the author ("artist") to just fit the image on the +apparrent "page," to minimize padding around the image in the rendered +document. Use the menu item `Format | Page/Size Properties.` See the example +screen shot below. (Do not check the "Fit object to paper format" box - it will +change the object's aspect ratio.) +![LibreOffice](libre-office.png) + +``` +soffice --convert-to svg --outdir resources/figs/ resources/figs/*.odg > /dev/null +soffice --convert-to png --outdir resources/figs/ resources/figs/*.odg > /dev/null +``` ## Building diff --git a/docs/v1/libre-office.png b/docs/v1/libre-office.png new file mode 100644 index 0000000000000000000000000000000000000000..155c8f0707b29a20d905b094f4e39529738a2971 GIT binary patch literal 98393 zcmX`S1ymbfv^`8IZGqC_?(XjH?t$X&PVwTU#a)8C1d11Tic<($++Bma^Ud$Q_x}QG z&0;1)Ztk3W&OUqZ8=l7KTG+~t*}KWrkRV!vaN`Y=@u+zcl#C9e5x@#xt)jY>8n4XJaN zpic^E1g?MsfsY zFo-W!k|CK2!zCUBV$r5c9;SOIG4a5gt`r|W$gcF$X9c3ewAo6c>J$cd+uJUGkT1U++2SW^4o|KC8f7Y@I@HE`X3mnB@p{6MCACNndER%$dB;Ydm(zL zIF;5zFcxYFJjBUg`fMf2J@WBvc3^v4tyG!9NgFPL7%N+$ace)bA7im7H98Kf{G~0P zqlar@JeKrkQ!6v_R2bcCC`waQ1Tkd6;+0y?SQ-{}_#Ek6#kOX6?;9O4V`RP>qOPH; zA!mgvYirXsT82bMqDd91E7cj!_RQBX2^;DrMj*H>b;UyD7m)=Q6lYzAQVohU>8Oz& z$#9Yr!U>u^P>mU$#1aorN*IgJMzPYvB?Ry>QWPO1Bk6xBm_X?$Dr)`7c_Rph2Xrb- z%8N*JbAIrp@iC3Tm}Zlp3ao<4Y|fejTMqSKbN)|a6cD>>S%n3)j71UNZMt_sU^(jW zk~Vo=lAZg-&pMMRD~7~H7)TiCL9o_uK^cttDovuASsBBog`!G~nkHzO`6z-JQk&=w+4}2)ZHxp? zE}|vwuAV!y{N}hjO-WHfa40z|1R}-!`f*>8a64+|%sXM~76^(;h9}DQfx5*B zADk)Mqb>-`JC)j`3f+>!^2SFRId_zaOf@C!vO8BRU*NI+&(p@^mForBO@2hakS zi@rKkRsDjh%)hn*p@s)v;T{2b#3tiJGgy-*RGk6sj)Wyqr!i?&hsf7Gy438Qaf50* zc7y||OSy_|g;IN6R3{i(8X-`Xh%jFy@UPGD7xu?razwf;>-@SH;J+>Ct(%b&rO|UN z+Tu(r;&B=UM}qFf=4lLhT4@xg8B`p$Aav= zI`H=HV1pWtrdZ9C6V0x4Hx0UjE%T(2VtD~IMiq7UPl?2aMMTmKniO9XsVLqD?G*+` zQ2Rx;&@)hoThl~T9%8w97Yu!VNQyYiz_z;i1P|X7t8g`uijl=H7-?T}FeJnF#L({- zR2CV09FAxgBCpWdhXx-Z&6G`zi9M~Lfo11<^Y#a^a;?)ATw&O)3kUARf?(H!)3;MG zq&bC&q=?a9v@;1b=rQq;8Cc1Emj>_~6HDnq7kokZ5K6~*)|v2Pfrw`Q3&*x{WI0P; z`7aFH#VE5?rzJi&c$gI3VqVdlh3^dL*(v0Grr4G8f8mzUX}*=BlJ*i%pdjwODU+)> zTb22A*iWy(At6xkHx(XZ0ne!Ad$fBz*qg@s)-cWe`bJH_(4-7!BH^T9s+>*BL*9ym zit_z+4_2g_DNh!aa5|q>p>Tg$oPphv?*FC`8Mjrg)OKrqQv73DGK7TipJ?z?T=Y0m zcb##z8EM5qTYStK5>s3*hN)&XQl**&1}ueO3XF(gy`1lIeQ&y495~Y5B~1&-p)#fY znH6xR{8DD>OyuD-92SY{YRC|je=Fs9e`U};6Z60L&zpIEz(x-F?>+29Z_?;zKVM^D zzX{?{6XQz%w4)%uKKsk(O}E1o`vH40<7ScIZ{|#;;rw{0DNSurk_*W2CyKiix@T7R zm$&X7*GckH2S>yvzjzfXlJgle#mZWE-$2wbFw$9ClW_hiu=CB!GNoAk`a`(U*8GO5 z?Y-^{x}=VaRwY4RU0vo0I0mLz1iEvIDWlzM?6`;1`8;WZrHDsW`;6it6W^2XHDkvy ziTCVps53l>ss8ZL%7$&>8@3<)J^9EqPw;0v#@cO!mCyd^Fq!7JQHB$tIVJhB9rzZ| zyCyvv?a%uMr_`o$S?;25SBQ%QA9PmmrOl?=?6_?Q5l?lgMh}BXqVr-&e;ruY&yWT= z5`r1I%@&+6&Z!L91?WSyu9MiPJX>?Sb3Xse{%=S~@Yp931UL(0Din=K|4Ot< z*URXHJ36F}=sG%xb&Au@qmi-IN>ge!kv7i}kOs*UlrZ9?U0{~sR)32(`!uqzEGQ5t z#=6$YVll0+%K|oKzO#<1;g8+a6${2{;t2mNKM1GYKRKW#h^g~jv8%1YGZZ$Ia&VI& z)Vvf(`<$L5qV?%&GO1P_V{_q6Xls&*3?2~yl~ssUevKw>#{ykv?SWxKio>+dW>d-k zR3@21eo>rU3*D)t-vbERL1JhK7=tc08HKtjGi>@9JmPhZgi~DlJwO&adz-=8R!o`% z#u&dm^Z(-_m#0^|s~?2=M_VE2bYm9Q93WOtj)|V}of<=)LhH@cN4hx!FkF${Q2@6E zW4uwePi5rZ{kl6El3kVnuZ&XBz5`zkJr`{>%iOd)g@vofu|IQ=FFnkxvC>q$$s!!A>kY;>1dHjhHXfS zT!kUI+s*$-3S*GL3^`X}=AEeqEA9|BgL^TR6GSdwQyfo5f2pJza$&galbwNj5R1^T zj2=o$ov{5L1O4Mp+xDgRFh>Zo&_xTqK}pg#`oW?dHgI^N9QFQK8eU__!Th@7Ve&tr zYn~i>?q_#=&#dM%z5pi#QOlYZLFvUfjZtFjZya6n4rKU9yynUJ78InE*&~Tx4a=N_ zH8U0;EYfhCOtWhL{`U0vq2QF|)Be+jOGV;a79Mf8vYx|%O45z_wCf;#Hiw**+0>{8 zGWIvHB6XxwjF~5Mx_hLYnq~cNKHFk|WTYJ=QlaEvta)2zum+RZ-DDGc_|B@pG#1GT z(%1J*jAkYVGX@izgmyeeLOV-tgbZC(Z9LcH+ep8H1C>mSYkYnirMz0Xd5K_nB!M-f z)16S$t4cCFKH9XsX8D^0s(D1S2rTusNXt9TGH$B#0aTd{t;pzXs5vc9QuKVZHq7Qy z@_(yeMwINn6~=liOR+84ZbSrI?~xjVe1jekpJ)+$eP)v>rFo|xm^r)kDnm~{%s0+t zI7sYQgG#j|sg>y%W*8PijddFI-eM($V=hY09)3#d4XN*C3;(Xom^8kJ#1=t@CPALu zoz%bqIx&@k{>zD?;JJUry9FllhmacXJ$v%9+m8wE|zrv`FK`u46tc?-Eg zLpu-DK&>gTv1P$}t@kzDeVuIST_TeSnp%0vuaCKAEMZsn(`N@O?Qe=zI4rM!GaR_y zIdrhEWw(T38VTyXBC~f)X$-5HxnKXA%ib`ki}j1`a*J@M>Ah6H3yNE@@ohL6v-ADN z{Ol9rClVJI@ufUb!DEtM7$X$Q&zo0nIz~^hYiFvThy6hck4gjoS1#oqzB@r;*KJLb z?Z5K}AcB0+hkIBxAU~C4X{pSbXNahcCz4JIG-l<~Sj?*wXX|SmDUW=uQJ;m0w-u~i z((mE)i$mhMX+B0q6PpWZQxKnaCvr0s$yp1kpW`_(%TE66bm!HrmgqylPCHv(f-cNB;4hEMCfdl5Jh4(67b7)YY{tKORYFuHVxEREkxj z1GeFcL@OXKZ_WEN=ML-kf@#90lBCxvK^4t-@3-AF?qs4ZD1KZRmU)oQWbHRuAUe=W zFcDB6&QA|}Uts4-afC=WPib7j`&BFC>-0trMChrN&LZtfS!mu>g@H(tlDrRtBoL+7 zwf^oz(Qztppi94FNmjsSjn_m@+Ab#vXppKhkfdklozMN=RjyI#n}1*;EJhcXQ7&iA z!8e_rmS$0=BaxvFilDn=X=sf)o%z)wk^?j4V=rhd(5uA!tLuon?(0#;jSAPKC9cPw z$e#3chu2c}fgw+?a%bDdl8J!T8ik?qc%88e2+Wm|Gz2{~_&+j}-B5`pwX%xYX(3*9LR1 zbMGeJ-u~hzFAE_fiQD2c{dQ;9pwMwLmaZvFM2k{rL(qJ!wt-0bP^mO)Hi9Bgnt>JB zc&abxd?|%#n{3N`#!H*!xW+x)a5JL0q%!)$5yXi#m~Odb!9ze#VC5PG&Ek&uB{4f5>3pTWp%+-g^0EJ2gpt%3K%Qu-K*} zTu-6S^ZM>BZBBlP;7`MG7au0sJe?p|KzOE+0tmkh>iZUwCqeF8$3yTP6! zDU^zZE&uR}W6bftIW@z)JIGKlHG&VY|Njn!6w>ACK;nNT-+9;1T5H-H>YdCAz4ga& zZ8sjFw1@05Yp2M#^`8m#9J$Rc9exkop!k2cMxp6Z%hMCG=yg90&pAI0IOjJN{J(1i zF}qJ_-(fz}hbK(sf6{gSyukjrK$gn>4_5$(IVK6j;$qjQs@^s5Derch8lWDvsQ*rJOB7=>qQ5wd=tU_Ooab)FnLBdKlUG=fF0lD57TD&_FE2 z$OdUvFlTCOOD-cBZ^Y_zKRU?naU1wQP$@-`dIafc=Xw`q-e{O<)y8V+n@YKKDdezZ zB#?i{Jz(~nktyl;a+=b6pJFev1sa|`RZ&=Y2ev`dAZkXkeSU7$~V|%2b2cHsNbk^D;^+3Cv~HmlVxTg!KoK*FF7lw|1@w zMr?i6s|oZ7aWzAW%*}b}qQCZ; zSY+hfe6WTo>R>1d=zkwRJS@0ODM!tg8>DVtR-*w3zJ_k>f%}fKuo9NoeCZjj={jkD z+R9S>=S2Y2NE@kzAl{YjwJOh$obl(AqCp&gM2WS(QM3X?0RnQ$5*1Dlmm&g{PS>8; zq9F)99@TAMcn71+H;z)GiYf_Y(;)t!wyZ#aU?n9b6@f~lJz#Yie95(8HuCy3fwO-mTp6#U95G6{WWGDC?GMRhs$v5iKg%CC0UD%CC=y_?zaCJB)+?cQp1Oj0Rf)yw@sCWaVfiiaT1X5Iaj=i|zF zadgNq)1ELdH+KjqGB!3A-&J^=G8LMjR2(j2&HBEKdTBbqfL>Z8cW=4H&0)FOMSkaS zly{9HcibGWt~#RY*1yqtZJ_K+dCC(pZj`jaoaGHCF@nf}yU%I}%704{N5^MR5z(%5 zu%?uqWTiQKE>!ialU-uvGYl@Ap?kKIT;$L5=a*Es-oGDp;xQzCzjnRpJRfy7%b-!9 z=V`AE5s3*|~ssC8Uwq)rC+vjwkD4<(^o-MU@vv-4Ew#o6jTJ-(iuF0^_O_8@A1 z{P6xg3-AokerS}aOioSpc8LYT`Wb@BQlY>N=$^~&Qw6u;vxXOv82}HC&Eu>vZ55J z&<1ezvS#d(Q(JPjpqJ6KFFnM1hUPZLqBOUVxv)Lo`Wd}Vm2Q|N;U1yiA8$5@C4yi;MEDFHH*dY*5}0W?s)y( z7i=YaL}JilWae8v7#s9rQjG&bxb0`-hb&lz>&S!ijH>gofN82-K#@=~CWTP77@YjT zeG9Oh=?=z4NY%z^y@^o|S&R^1)U?S8iE>o`4L?~SL5W7Yy-<*cXMnM~U7#dOGjTPC zpu@nV*uv!f4eWJwN`T1f|M z)l>R&Py9o?#&f951?G2q%FR+N8$9W8^kz7NgG_^8sWFf)?uAr^ud&cn%KXOncC!U> ziJDW(B;OR=$s0-EDnTIH#M z*O2nLr$(7iWvr#{U8m?^unRd8bn|A(i8gioy!!*`#L9}Ytn7!!+tWce;ge=_+{Ud6 zn-42o%)<~4(ffn(Z)cLEo1Kp*_Qd5gc8VF>0ttu<4k@mseO{fH+RZt08F*{1m&^{U z?GZLyt#{6NrcQMN{q~ZN^m_`8^6fuwrx>R&aA?Xl>ScbC71G; z^+8;$MyIcKWVS#Ns6n}`Cb~GWTTH%3Tqr*$C)GQjvrk7_JV6RPj*EQ{p9uF)Vfva@ z#>T8Wt|2yD3JrRcI8hYA;%IkLg$dZ1k@}6J+uKxvUMEF=s^jb$hK&PYOG3BHmsA)L zmdsjw=wUA}A_bF(PH+uk@%7j#wuzY;1v*U3KCBGM$dr_OyZ&L{a+(TY6#$;nro;&@ zwsGnR#f(_zb9+t>M)Nb|=kME~x3jeN z^4U6U{9@ib&SiYXi)aXdL!q%q0AM&Mo?*8)BFO0Kf z{A|CFba&PF)bNE$B`DD@)^CPuLr=z=Gb#V!B;b%%CCDZ%zNY?D2U@=Ej@!7XDou92 zR{7-QWRRFz^<1fDdHckEV@RBK-{4Ic3RPk?5BVavduVJZuwa#8^^3uWxM;(aq1su!O^eXd0{CaAb``6 z(s{b|7|@G4)_Wo>TW$te+@5@E`bzWq0Wvi;=&rjyeD7Ij$_ z4FLrem6MOJd7Zn-G4tevMJ1Pi)Uj!G7|;m-k*s{??tZ*CBx{WNw*p7>o&WUfJ9mt(Jy)&)^~mk+Y-5M9IW$D!+N9%^ zEA8`j+)Ft=O$cLwx|D*vsu!-R$UTB{`#nu>FQvmuE2P1ft4T2OG~l+az0HfYY0XoR z^l@Gmx1%IMF4#;G->!`+W+fqn6o5|b3J{DTi^P+Y6YueJ|39Xlc%B0;M1X{WK4?pC z9>p#qqEe${P#=4C%QmZaWMXFa!-7LTAC18X6BDxtWc%-6`XZN+eAmzh376$CIy!n{ zO-D%&ajB6#`sxV?$gtd#MS7?D9|fnkD^ag&7H6i z-gIRgqnW6*p>%UuS~vV;G!uLdF*z@Y_6}C=?B^R zpy)l)2UHS3tgN+!;Q)&ye85ccVZQxhxEu@loffy}ZwNTQhv-h|_UY1Zdx-Yn=*Zwj zs-*_%vgUu=0Io_k@<|7l+eJd0kUSTGzTO*cv=}M55|9NazS$(5zrR0p@gU13#`60w z6>`DZyu_8g5_fbKgq;iifq{Y2IeP$8+#D_RCQ!=qF~la0@BN3qcaKv|@qqTY&iB?S z$8U3p+KbZK7W8bf@RXSJ1&d z$qhWCi!yQp1Fd2b*gsWC2%SMc_*MTQ zDkp##fLb;>F@g5;=TGP#4Fyv^o(1Cvs)P=ZKscn zIm^}cu?utcD@SVV(4*fcEZ(ZHYae^|oti&hFIdO-uT67PipoDEQ~w39iu9`cDA%Q}4*Vd+XBgxboxH?d<*&a-F4X z>r-~KPlpOXv6IBv?U8ux|0Kj4_B7@3G@yY} z)0A176-zra)U8uVA&Lu;7>D+7@WL;b`#`k}=;2#YF&AiMh~DLXHxtDmp&x^&)sv_6Eai zwR7L0mrV&+sr>HyY}M@#b}(wa@)*}At zk?@gFij}v1bjgO(ffRsL7Yl1eK|x`1RG&GcMMn(Ps81ri*Bp%dA^e;67MFIa| zm>U}jf;D7;G3j;wg!+R_#}li1hfaDFj&2WnPv>-O6=v3Xnlj&Dml5zzyi0k>+3Xs# z94|M`<{h>U0QL)R8Ll9ViKA8vmt%q`sBw9Sw5~xYJtj;o%k7h&aU~i0p{##;c>mlh zUxdK7c^+?48b5g$F?vq0QmLot5oM4JQm6!5Fz{0z_t#oqj$T^)HWRJZGA^>1StpY$ z*D}R>{~vB`bbNU5LHaTAAR2K0ntQ2> zqFWX_;m$F9cZZM%H)+SPZo#e`R_v9hZze;jjSFrQfV_5AytAlgk<-mx0`B}EV z^I6v-bGv|RRzfLKz}X4m-vQ`ldYvqv{zyVS+SxY(u(@Qd)AscjlPD?}k&M?RrcsImPD%)j*Uw%C@`|3>7ej(0SjMl8SPILWn8k zljIqI*=sGKR$7&M(ma`l37`do4#)RHza2B>sQz7;>gm~PF}wBKHO%@9J#+#|A2mCh zSh30oDwa5oD@T)*7TUc(j|bmlg7fk(a?thEk|niJt9+C$NzULd(!mYVMt|w&Rkkb1 z}MW29xYST^z(&(ZquqyCeW`&0U!=2#KS-@?sbIx z){*Gjsqp&`?^B46(Iom|{kX>4l})QwW@Z#bq-gDe0&sy9HD_wYq+gW)L#+on&cX=3whH9Zl^)ECzladk%NUeW} z<90rZ6ih?;!p#nOyq~YmJVJOH!i27ZFtQ^1=;MQTn&AAP)gS3JcvPy`n)IkFLdm zm20)g;r#`Su`H$kbtafNOr`|ISh1Eh3{yk)y@T{0ScFSeM1Jk++Xkq7LC(W!(Mw*3 zKVJQy{mJ#B4{0n%7&?M$eJ7!-5)co;!y{VXpDffV9?DtqwV`Ihh#%k66|R4Hg6S0L zaJJv3FlPcSv*p@q2N;SCkN?|_9#aa!W~Lsk8F`q~QE6{RgL(DzbB(IjV=9q{M*^|6 ztqmA%mWW3Nr}a2lFj?m4|8V8X!l?!Lv%-G#q4|O4HFQ<5hJt+NNoIhbiIDo?+Oj;) zT|Tw8rYhTJy!2xS`|aCjfFk8HPSBmH z=K;9Bpo{bd^rPR&l@X@RH|=R&_Pn~j0rHyn-9}i?V_^@> z$KD~D`K_%JOs`p00x=STfw_g*etFV{7h_mu^~>87FN@#JY7((LCMxPkFO1t0aiQUT zH1Dz5d!-Sp-gQx2w;%<8uwmgXh#zOZx57XiOTKLXdgQNV zDbQklE#uH@LvLK2%{KzGj%CMFJWn`oLU+r$G;%hu^SEmFqhc{9?mT5}sTEzya+UTV zcwd(cg46oNHJYQz+=)>dFOGI1W3)LlP+U-t5n@~V=uIx)Vm-&X)}R~Rb;~}+Nw7Ji zgm#BF@bsKY6DzQKq_XpANu8A48O8Y`DbmFw52GSnw-`Yqj}G zb1KJ~Z@uUcf4YE&Eq{oyFa{Ov4x{b<1tL!BYZhX%LV9<1x25zEM&+w5S88rLql&5L z39O&AVWAFI$UEnpoAInS)TSPnp1~LeP?7BX>_KeNY~VkjqJQ`_CB?s)KK63aZ(mXY z3aW;0g-sPJ%dDUr*{_)u>b>Dv1v>AD?8vhN{IeFmE?%byg|XTUf?(%D=T$UBLxtPi8M^Ayf%+zkRMVKH>(1pi?|K zB9Wtox)|Cpn&$R|@NEekXvn42c5x`D6n^o}QCw$bUARr&_90-bx(%qTS5=^=p&c0V zbWc1+yeyk3`{LSygwl&RIKhU^@OE@L9ppm%Y{SjV5fgrlD+@MZNY&@S-H7z>JiI1A zFZk9O2116`YMEdX?MD4GSmC0rQjoWpkc;I9L>#Ot*ch9v1IL1FP|Psi{dMS6FZ)rE-ZSeNBRs zcNWt5MFJ71@NA!wloaI{xn6iuX=vM<@vGQ2x z@~?ODK&4D+B`0QX-Y3ajm&;l`N3cTGb#D@Jv=PEpA991HSaV%>cTaSLHy{PGa|Dm3 zv29I~QYr>S+~s7=yP&W=Z|!H!@=2x-^wa=94&Kv61Prj&{llqSQfx|?ZT#^z)*~>Y zH{tj&{ZLaihUEDUUsP1#D-&4AzhzqhR&5NQB71!q4+C7AnhZd?Rn&>1I1?(XQspAB zt*|i`C;|hp6zHL-bN9dHMD=vlus(N`X)>f0dk@hF05aZxb%6sQHoR1C6B*TTC0Yyy zxKIje=BdjIpuSpqK7D#whFVO>N%H=8TcWB{Z!mV<4hq3?E;p{9#cl&P~N z_paASUFCCU$z(W&Cwz=_Sgy_20y%q^Js-z8lc4|{0%Y*dWi59CuufyvC{KbISZiv> z7G>| z)pKufjx~HAGc0lJj4QSDYua}a+&XU>pl@~RtUdumQI>#5WGk%JrB|j1%vohzr{vqR zFt`Ynqt_pwKQf1yCAjKO6!2e^&G1`-K_7?9HHS3`Ev^1)i1f;SKI>jMr`~C3$_JH> zusYAyEIenY;Tb2i_dnFDJu>to#S%Y!uiNU6qCf>qW@_ns0dx?nE87L&pS{}|T@pFq z6mgBDlvM$JOi7tTamoW1sL|C2V1g8Wkl8%11XMips#R*yr$U+WN6qV?OtLwkNWIEg zJLAV1g#fVRDJf(ZIuTc^yn58gO66R`Q5UDItel7<<9Brr(U6LxeRZ-Zq6UUpPeaqP?2b=Qjk&c|d9&xruK)?{AuI0i z`9Wr45!z0%qu|}DRMVW-ZnmXUqvp_{s=&{znnsm`6pVcOrL$5=!^jPTr{vS+kUjCo z$F%W1dYq3_x4$OK7c3R}DRvrR|Ac5D7JhzuEkk>kSjhQ8GoBS4N*qhdvJ8t4%G`0> zv@6FK$RRx5jzGwA3+ATKs$UK>Hjddlul3!1gSDIGqs0;y zOY$TEs~l;1gkytK-)@B$g0(jmgT{sR`({n7#h_S|p<$r$=3Q|_M1=PsY+=x~#lVJR zHC~$u$NI1Rb)kB(t=>u%BES)?&q1>UdF9ElgHS3B7k9X^C-1js?6`+_F0y#)Q_&^V zN;R$OtFce~(7lf>7n3)3Yk>J?nDV3fu4Y7rUK~V@&`J70+?bkP?H@H{|6tA&H_F24 z`vg2n&Ta1Md$Ws0=t$?E8M|aNa#d5aw1@&h%5}xIcApLrNh2UCMw`GOfR_jQ*4*u+ z+&cu=Y~_}p&54<@p2q3GT4<2z{!s4jzsVP&$4*rUDEs{R-s}Y$c+VOT*n-V^z2?eA zMvh=)3wC}z$aSr^z*HjHyyuOZn9E*Y;WgUnD722SYL(Yvd0h2L)?V`qt4qRe^=+e% zA=wJSHQv2z!7%I){&sI_6mU*`L&`5%RuZSF=^Vrg*!AbzyhwLkBen+PrWO_!F4pWi z>C9{JQY_UOk|PERbc!PY!+v*-;{Yun?KdvTl}u434ZRzsCmKxOAfyW>BZ#30{!gvN zlYxco@u?`jaVD{6<*cy+f%&36MQ9uI;VPr`JTDx0s3S5D* zDH=`vVZw;0kTZJRlQZAzcuup_t>hsH70*}80}6#g3E&{%OOS)+=#RFF*637NoJl0? zxM%y8uQBGB&+UPb#O*g>Es^!ZtvVA9V1aPkrnkvnW2yEg-8%nPu3EXKzf|MteLtC$ zm3{$G;%I{$dKZhM*BKWMOX=s2+04})(OdJJi*qPg(?=R~<2l+nX{tHG+N;Yq+}lWJ zhaMOAMCY+ao3Z?b(I6%L7)0?7tvx_<1h%_G_3P2Ji~_{&j)wr zVI~D6BU}c8+X7G>Z zSo>@DhYJ0s*s-xOZ{-PGE`?M;A=0u=Q(_7O+zE9kxt~pC<^%R5mmN9=N&RmP2WV;e z+z$Cp1HVQWVq%{hF<<`NL#-`a+D%VgE3D=n`xtnsEMt+ScOp$=pLp`*^m5a0e$=}6 z@>N=;&H+%23n`(uowxoZ-rJ^|=Xa4=K@jlY;pBZ zz2Si)^J7aZXq{u`>guXiHZFs6=S@D90v;dDv_bAKV%wQYu-!f0C~fugyz7#+u2#9~ z@dX$JEHQ5=lc&SR4gJx#jM%Q6+lL0I{x4NVTVtNg4l?iKIls=EH-Lf%qQm+R7?h}H zOCZXXa8}wcoDj~p{<$Qw&(*{W6}Q%&YabL4Y_qE1Z-6S&XtPu=l-zGGoO7+D=zvy7 zc$k=g&vo$rS+3PU6ADeB4bHO<5*ZblWunC9ixqFsqQsXs_$~BZih|ww(dzatr=36Q?DI|pIC!S-4BIof zObs%Dvn^HzMlI_2H`xiN?}zMJ-!d(B03Yf9E zvoB>$(sIQ4>nNELJ~Os#W$ah(gpg-uY?fQs^excq8SDd@QM7D&`oD(`qYDHK>3j z*p*pQtvUrTo@MDorxoJvI=cf6QEY4@Q$4_C1JY5qx3imz{aUC0G>oNc@8V|3nNvte z$=MmTu+ScGS)H_Aj$K}u=W5@B6x11TeiMgT_}v4XtJoWAET#oK^yzQs9|F6(-G3~d z2EwHa_I{I3P?pBalzB6*}}t@yM>a5kVsVb^qg6=~u!4y*ZA~Q@7m_{Qt=QS(f>P-msSA8^hEQ zgk8}4%e0sJoEmzhsN`Ki`0g8iROa1gtB7Y1m@E3btK$)t+Wj{;>xnBJ>ovkud z1l$oWM1aWM5ryLd1Cf0aU!N^Cd{6iaWq-j}Nz7SA6kj(^IX|t9J_wbxR%I1OTW^8F zG~5z(8L;%c!s!X)XJ`CJEIR{&e;~hM{P`t$ilEgN#38MD%=kI!4VkEqKqn_Nq?ONk7{3 z=f*?ji;~k~XXr*!*!^toGk(LkKTh=th*x+l;EYD}Zc;-@({#_DbfZ_W_Gy&&&*(vI zw{V>Q58Bg}p!}2rz5Es@bcwT`kE|5I>wsutc(uIS^Y?VSxK|?KVLnVbrs}$BvPk*JV3;JD%YQum%7iE{f4uVZ+>IuP}Fy6V-_l6VvaN z_2nbx3{`o7dYM&l{ufE20AEzm(nU=Jd8U=|!xNMcIDs&&I+ra1sRO)@=au&R8^WU{ zZ&CgC9CJ?y7p|rmG=iQ-WH?cPp0&GurWa|$H9T9XZw0n>YT_Y|S|Yxz{*d8$sSVrS zmpRp#GCn=q=w&9YX@zaJo^YRHGN4VDVF#OXjRaOdyQlyRK^dY%T@@@}6|J+VJei}$ z2CL?~Xk?=4_k2LqZ2W<_bLmY(LsPZ5X10H-)?)DyU;9UKu3j7JT*KJ?6`)1?agQF* zo7yB2Kn#q!eGL%fS;B7q#Bh4Vy5GK+>gXzsV2JbIQ6%y{td94;J!^@1zxHyjdLS>- zXVblP&KeleEBa_3@Uj_IG;s5k$@(`9;n~AS)|%4C&nj`+-;U;9L}1hMH-A=o2mf4r zIa!?Ojx(-SOTZL*y@C>DVpSZ+x1aYYI-D%@4^0(btzN)o&Rv-r(3(f>_5gl{HB?Fp zR!R`tsMRR1ZHmkH*;3(>bUGBr>&GPNNCmPFTSS~FT1494^p!hB` z&AhNE?(09lJIvgz)$E^i9kn$M88096JxMqG+-DbtGXPT>1^Xb@u2237(v#1I4@|?_ z+L|$5Y3g;Pa*oB|?2DM&Ua?kN01o$2Xv_ZfG%eyNr(sj)KEHmWgDn$E@c1F%PTWo7 zH&QlmHV-+Oy1MU|$Vu3!bBoQMllYDTB*BWMbF$oK7z@S@CE`?mc~j~}xbjK_T3jaC zTX_62&cbu5^IxOQ`h(X(V1UV)8eN{|7yGA<2raH_ii;ga_yuRGlQzma%4<<5ojLT|mqf)V9@ANE&pRNUB_Y2x z`<*wgeHpe?-!01UW<7oh;O`^p49VO905P$sU?6CJbYq=K8 zq;eG}>NvyG%VEXO_i+uW#Mz!dX$359o(sCAC1h>~jz-bToMF(X&PMgi$o z?vQ&e(agar?Wz*otLw#*1rhlrIJNA+g`?*6pP3 ziN({0@tVEk6^EAU)a(Sl2n%>j=`!E&OfA~Gm%vBLvfO7B6($v-$^N&3q9b>xxt8Ng z&UN>zacab(V~oz7it+*uBgK<%(76@vkzO-TO3-HHdV zMwPb|CVry&&p)q%fpJnak&XlRJlGK8H6bjUD|;j z*dQH?T3sT^*I6z`Lbu*}Ug^&ye!y;(?zn&_$_F1`{Y-3RX)cV7#w90vX$C{2OGe`| zM{R@q}`y@ZD~^O}(jgLZEF3V+`LsU4$gy zs@K6-R7!i%b~}Mn&dWW?c7z!Wa@-+L89`I!rW96@tyS`JZ%7VW?L>f|VJMlbz#2r- z2nQ=#@;J;W3!X#u0B>i$3BT-w$hl+fE3xrkVMo z{K|^`V8oo~J1PhEA|wFWTx zyND`sk(Y=WI(qA(j~T?$PAd2B4%3=QVs?dWWCYuR%JXXmX2F@>;(g5GSud$ZhyS29 zRD1|Qkm#D9$1{FhoWmm_+2zc==Sp`k&PQVCvf;MM_h%iyM1&tI%O~$pbWJwZ#R)oP ze(bELotm*33)}rRDH49*B3`J=e~bj(Q=}@JWE$EDFworJESNN??Atm|$sC2CHs@y~ zQ7l+p(5itNT)zlCUrm7(s5|dMSOJL#o5A4yCy3)YY0?&-wufd3AvOdHdrkl5-jnfD z5Qz{sqpX5F8UmocA6`$CXbxW*%m1@+vgiS$!%x+ROHuS~u`5kw@tS47#MoNpX*P#f zWy~sa;`V^;0 zwj?niekZ@oeAcfd#>zM$D#FgeJ5N|{tklxxVx)+2CS=eLMJ1!moZ#&2n)x(qQKgsB zXTLShda_vgFB zkhD^s6NhaI@)~J+gYNAAcfOP55{KiRJvOg#aFIJ{am6}Om zq0K`8fD!OsBIG<=17I+|oGgH9OFRUHu$z75#$!?LkaD6%2f$!cov_HbMDnNv?O&?& ziJ2Kxxfhb7oFPVrtK5w?#`uF?qp22YByvd!pE$_rp#jN%wh4Q90%o<*Go56b)mN@R z{6zscv;xAN&p4B3o>;3cDR&$To=kW#7oH|O*5=QBWJ1-~Aw~dk=2_I1*CJ)fV32Ip zkbI&95H`F<;(z}E!57b;ZtVXF4;@~>Z2BHYe2TgJ0FnL_{2KvUA4Y7I!s;du-l=va z2897R%}j@;GK^ql`?HhK->APn@ucST)X9#)v$SZ_nmcSHd0XHvh+s^6QX zns4b+O8BmD;q#Nnt8FEFQeEOPKly{l-l|LTcgQWx+E2z`U8E69pSMzS%=UOw!jD?i z5nGT_=1Hye3%()%CF{Zo-h8-5!L(ljV$=CH52g|K=IWz(PVUR@GqGTe(uLMP!iZWz zxh#o*jBMvNT}|*FJha?$gNqpslVUod(WwKuQ&d>{VL`5uDYKm9Mw3IRyV{vun37?( zB00&-56u99LbI7c%>g=sxi-zkz2y=%?)Oo+*d_70~h!TwoWCFM!Ic1&4_keZog+sG}djksR`@4Ss|6+mb? zr7tJ|kDu4!1^-)E&pWAuFbq+>BUa5Gk;psy`?zB>$$^c0b(6e6;_?W)N9i~`wPwW2mR*_&iuN~etTKp0aDv)Qp#$+~LsO9jV^Ct97_{W+AgYEZpdI1eVo5g@q;CqC1zIpnyIz!&C2kFZoN+e-=)!oS5i|Aiwu3M%O0D&3#1N#N(T znrV=!@+I{uN#fMQ^2?%{hHf7fVPvh@1UeShPIDEKpXpa*R8(b#6uRVVr;XtA*}cZ zn9kT{nHwD7dr6OdT&t}ZP;?;%5TLpM26aY)&4HEcrcYQBx>*BPqCKt#0)0)J^{iQk zpDhirBt&N*zlfHhRs{s1aG?c6>ZpZX3w8c+4|w02{Z>0ZX6MQh1jyfiCC#|JXPlrG zfnK-R)u^@L0%w`RpeRxdR}B-~ZjX6-G_6+bzA$`76JDKQZwT0p&i6lXH`EbK3Q-XM zYe$FL60xzt2`~n1Y_b3dAPzs7Eg(%1PoAidIHoY^ali;=8FzG?@8W^x`?kjC^SUT9 z)F?qlzDFp0cln9eC#Iz9U4jNP6TC#}`Zqp`&1aYE?dbrn`CvNMe)WlYv_KlrMCX`R z;3{ibx~%`iE4zmCdN!|CV^rKu|9bv-xwF>V8G3wZ)cLTpC|fAde6XPOy*RPGrfGPH zY;_Q=>j4wZ>xGio=L#^+obOx-aBpiwo_g;Q=r4Olb+g`G=mMuMW=f?OeG&ZR>>nk- ztigFLqD#y)MiJn!6cB;qWNH*O4(vkXHcFP7|cX)AN4CkoCJ~ zKwSx&914$KQI{=IYFovc+p$L1Ffd9sL% zDdl)a9)d`2om~wHX|mU|B}pPr4Ml7>!#=}QnI8y^2^Sh_Y zy%0XyYyR2cN{r+qNKIR7HN_HOWy5n66sVTc|3gCou?p1%TOHFoq$QCL6+&&H`Je~4{#VzP?lWHvJ7}e9exIml2FS8RKtv2+Ubzu3-rl^`_=mA z34Cs|?P{K*K&iebDp5|)d;%(iwInqP47S<7YKhEsP#Z0kM{;*sN@AVN+z<&OOt$Bq zy$)8Tn;$3*KqIk&;|4+;Q8t9?HwSL#N5;ftIr-53Vt(HqYQ4~mK987TrlA;cP~+%# z$T1(}RYYr3WDy@#{!`b{YsW8d&Hu^7u;T^)jx6=mvrY=wKwjJKtz|%_BH!;;hKkXs zaz0^3nYY5(d;l(JtyX&A@RjDwdcDh%uP0xeMi-IHN^8D&WJjk%87qB<;jZqM7qEcgPj>2%Uh&MEK#4(+ za?~45ut#Y1x%N|{gs1)vI3BCgsclHn!FuZCbk#M9B-S^L<+GaC!@)(}`?#LhF;Z?X z22KP{DssRlG(oY&N{yIv_Z+oge$1PI*I!&fMwW0uGM#}I)|pMGj)9|G&z95W!9~D9 zcd;!P9P$_W%7Z#x*S!V}IP9i%33{`uEwRLcLCYQi9_aR6YQ?kg!(T>DY_kqtU}mtx zq!c^j<1tjrIHzS`{yEXq=y2oxLyhpAXz;{g+8=kizO(!cI`c!9-^#0~MkE8_2=f3DR1CAFhBjb6BhnTRz|^GVxz88AA)Xh+=zW2Ok+B391EgRg3F3f zK4sy4E?dT7H1jH&BhHpn-dj)2`HbNI5jifE0=E`eO7d8M&SU~vhEw_R|Sw84Xf;|>xdVsIJh~Ng& zvtln%$*FL^+>e~Iqd@Bj5*N@gNK%fo; zJ8R0N#RB-%te1wnUYp)87}v4?m0+HKAHLUkqpQVcH^Sa#E3BK%kcC zhuFYx)iUKDNeU&ifTpMD+1o+I-Vpyf(aEbVz4@HDvJihnEy}?GC>>VI<0o8%&Ff7}? z3*uds(O?l-A(y4n%MvIo_wv${I!h;Jux@{Y>x*q z0xlEfUg?0IRmc;p^?vNT8zXQ5@_l>VG;mBk)#+vbXxX>Hp^W5*Nu1^sZzRQhSbJ$V z>&LP8S1W&?=k=ghtxAJr+###xb#deskksWVEq3tqEOJ9Z&8R4IfhQsH??KbwKslT* zZ6#aU-mSXi)$6sVQquIn7tgvDb&Q`as0;A+fSqh+v=8>$yZP{TT>YLwo9mWUlIs%! zm}43X0&{Xm^?e>q0q-2oS#!7r6}$Ni2@E7)uVv|a@O+N~WMY5>_}imo)z2(=FC*HD z=pHxJ&R1a>O600MLd7E=bpDD}4Yw``RVdgcQ7VM4PORT*m*#NYHF^8NomerD8g_5! zQ(8oF^nz1;Ki3H!4B#<3+qp8zA*ODaEl#fl-&+aVG$SAeuP;Yi?Ai4ydRNU2r|_v} zE`x1;>1qo={3!T)<|orv!qXEQ+gIqjLvNUKvE|9^ulq=Di$91Hjay!5Vr6xme-;KP zSJ;zja3d#(G_I@$ITbn>O9AC5pHoT+W;k!G4;bTnEk2s?EqRJ1pgH6NG7;`t#{ji; z&Ix9u)WP}{D{`Qc@6+t3n~)R8GQ(eR3rm*`O&`u#q4yhALcZJh;ur2%k=`e(QYFYT>>=jxXie8K zAq_d)DyHp6V8TEG838>GSvNT{?m1-4G`i-Rvtwcq7ukLyUPy&$Z;B8IScn>>(py-o z-JB94tbpzR1eC1C>QF#$fEY3GJ7Si-=G?T5YnWdxm}IQ(cbdx$0bAG7t(DuRGw zu&+d^ps@c&sGsYalk+CUv~Kyojqa2^tJ(>O;pC_RTKoC_q6F{_!$SuH#_&4#Su^3Q z@K_FBR=<;0`8~(Ngc0|?D1#s6dSgADz1fwjBo(};hoMce-6WZLo1xI=hTbCTjI6pL z{&eyX->BNvLY|)>a1>Q-^*(4)e%B6#mYxdg#MbiM02*z*>}+JzDxFKWBHdQoB-@FG za8<w}N-e#HExj77{xH-!*JVVVV>#(L5IJhlUe^PfLS0J+BJaZ6`D znWLxKqgoc_8VCl%|56R^awB@$j$@RN?G?q0z`2ZOEqwWgmA9!m>fef#$OV3Ci{mt` zKrGvd{(A#?OC!!_1qF3+ym^-qt6CNW095rP|BBG)eJC~rP6i6 zmt~^az3Lt#dFWrFu%yY31T4x+@pM-fK`ELuRgnm0K0GHkf3D}jcXVGP*igYWDv{7p< zU?fBvbZNRNFk&f`Ig)@V8e7YRj*IhxLouf1kp-K~k$w^wSn(i8kt9|4J|I{_`R9G- z6Z=ti>`Y?xM`*sjYZ_$a@0`6nUy|~TDravw@K9Rv{7HCvTo8S3@;d2wyZt; zo?Y%O|Fdx6GQlU8ouAuwK1NrEjwGkD2Pz|uH6ERvwVW%Uu42?D6)qGSFLZtPXFp5T z7-#lGnL+0IC%(@3LDZxw^%)jCXD-q=t<^c@)a91GwgOM97|YhY14+6uJ>ewsPH*nW zC08{tB>c>mRol`2=YZ7~f@l4i&efIxSpiqW7|7`uH7;@AiAHOF?a|9xd7vnfgUs!8 zr3^(qHEu^HYP2=iFwfd5faCMB%F5yTape`B#4NqJ8X8a1T@~ecxC<}EIi?`cxD`Wk z@QQVCsNE2*@T#)mdqGZ3V0vE^>K?8t>TEcbTt*Gl42dbagV-^sDvCAIs(YgGDt?iHXs8Rd#M}IdmBh zPtQBlw11US0Ub6xokGs`z=3ZMxXfX}rafAHjn+2HX!AS}na}|>S=DQ=KK3TD>rGfK zv7jB0x?-yl$+Vce8&AQlwL73omn!S`nSTMUzmfFX%8*0%os;ymqm!Sw^u2A!PMRtXI+_elzxI$Xjm>yrG|8+5{-X>{f=p2gry6jZr>2_q?kwYPk7ghoQ;lmeZt2yY z(h0pvtT~RIVJo!{-drrUxEuOi?Lgjn;4o%TVMH3H=M~hKBe#0ME_GTFg~tfXev2$K zCBr9LKM8zg+Og+Cw<~gAN$@M$}3=IH~_2N;lOy&^^WcPycx>pY?h@^t9ah|Q-Fm`upe%o)V8yp ztRACCIn16-i#wkZsgEKjY)8uG_>tj2(Yw3!httDgLy|CH{Q9ZldqMZSagry1MOl-u z<~^mOc=#FN?-n7Z(cQs`aJ+&A*c_74WyHUw!;7nzAkceRyr^`>qGEs#L zaeBo1rVl^!KtPu4R@R_<#I;KfKf(29Bu~oe&T!>&esyb-xzqy`dWBe{K$imgQQg-R z>rdr86>sGsJ!&z=KC>poF>uRQEQU`|edhEGC}NN3_RiX@JA-U~fO0pX-iIPDT~Mtl zlPC}P44l$c5^jG_cx})A2!jtN>+VkR1bZF8%5mjN7AIP(*PK-8MMY&9Q6*EPht)oA z3>~er$_)fgPVPo!Q_@rWBiE>9SCEF)y=Mz8#lw(!9BO({auv&6I9gK;9Y+%#8Pvyk ze$hZBS^DB|h6}r3N6}zK>9~!)!#+`^Ktp!AIcCubm@e&KVYB{3R}-JNKL~GZ)W;?= zjCMS1em2lb0t8kLyRQlzeOymF2SgmtBX&Z!* zp>Iad)$ck_7|ZT&L$sb9E5ghfYn zV9dYP%F5LGq&dB=9QGraO)4}ry@KxCbC+%5r<5{OD_jWr-w45_xxpgjOCdDI=@AJf zA8RR7IqK$%9yBH20&F7Jjgi6ZSryD=)v&77Lq^3K&j*Jjc6{CXoKE?us<+H|xh;3$ zX=@QQ!I{kj61pX?v32WCQyrIs$xNbGLPITSI?wg{)vrw*^AKKB(y)-a-%e_Q^-5?W zyEn!fbux#+C0|i$C~GQ{Mt+&T^bDnDK3J>z>THW|a@|b|Md57S7HcwNe7nAQB{S`G z(?K=E*51on;JMjNsW7wx*`A?P=oF^zYGxLLOc6bh<r(#V5T$wF8zf>I}Y30Tzexl&1ss0_Kp`^%{(ZRm87NbFu1 zgZz=H{4WfG+ylj=wUkQ989v*GW3yO*%Vfh3+@nwaHS~;Ph8g<_{)f2goydKljt5lL zGIfBer%6^!lr3RdMqP3&(w~ebGZH--9+L;YGbc~_C_J{=3$YeC>tCT|66SO><3f2RrMn?%mw#>CLUBh%<;o} z9Vt?4UGb#wt$dIPU~d0|Of*7qf>}0jVHd-+4Q0X0K46he{|vt~Awz=8VFmkVnlS#n z_xTXyG|Idv9RhtmlxHjZ-^f3(+dW|KQ$dml3j^c?{+Z7`@s}_3yn3+psGfkOUtc>h zAg}<$?KM35bC}AAjv(cg7A^SAd>x}EkX3p3Nb1^sqUbZ1qf4=>B@C29w( z(|H?w*ka3&79q_VacYa3aGlfkF+p60sR4PH@7Ve9jN}{3Vzsdxn0VJ2E3 zvr4|%FX4TqwU|`^ne#JyNlNq$Y?M~Y=6;He_!+bietZ7Qm9DRUM2+e>WcUD$e4AeW ztrI96SKC*I-l|tcdwH_xPLy{yo1+!CBgne`r6hwTkG;kya%Kg>v#<8L^clO zwGNbV-ayyTO_XmW&Q)Cmj2(m=E8#poS*-_u8y+?Dmu;77p!cG8v=Hfj9>IA}KW%;( zMh_@N1uA>phG7WB1CTPQoafdgB)EU#a+Fn&2U5CNv=VAIaJ{dl81DSoU#RHu6LLRP zZc)&~kXTj7H&0NDQ`~6p0_SdoeIuuLossBTK%XhERxm1(R57R&4y_V;HMkE;>uGeI z7x;6bI^O*FIfJ7DzW}&dqezO^)#aC?v&y&$xye`CjJA>~XjSMR#ceLjt*%=P)@ACw58gm>;hxnW;F&>v z6!)bMWW{c`>|Ubsx`B9k6S~Z7>V2N-iwp&gd<4Ic)VRQhw0`^=Dq$|_J}aO-5ub0F z&AP*3NauEh-rkHT?88`b94d*(&3~EAv!zVW#G?zet-kNV;00Uo2Ha(v0LVZDwoiC% z8cC@Gsf)KPx`SC@A~hapC@h%aKYZ!z-={OkIRHF)Iop9~s1CcA7~D1+l1i>TMXKR| z4_S=~_pxZo2X{4xC{{ym1c-usED(9>0^Eh#DJ>LawPRdwO~)2NF$PR^Daog%6FUZ$ zT#6GZl>6~tBy3k*Z|;6fx_((>nznG_V4qJ0B9kh{EEoVod-t+1bYOm`14K6kqtwjw_35j3VgA8Y|`l&4?7VvGbc zrcX{O0EIx4>7!+GfN()XC7?YcdxWX?5&f{ayrFIVPUXZO2#Ew{4tDT=&t)8U4y%GR2O7|VHYiul&Jn$ z|or6yL5t;!L+aet`iNQMAL%Z1Rx4V-CveUy1M1SRRsTz8-1Y^)sq{g zkctz{?oW2E$Ylx-vb!IDd0BTY7RiJHK)_T_vr(%}dI27U_bx4SQqOZ}@BrMbDRLeT z&`1I8;U<8GENT%8e(OcSrsxdGBzuHPUeuSMU-Fn*$EGZYXU{(MatrhB6UJy8ZtUTm z6m&0RrlZ)#9PL*fUH*;_CG2|v@nFrQQuP&^ff?!|-(W8H9sF#))*c=Gtub$R07a|Z zufLdd<_f-pE}f@= zL!O2I^qQQZIhSM=EQxA13`;P#^gfu`yxefQQb$N|XfguSL&v5e%SL0;vh)G&oWJ*L z7ew$>j;t75#+JF-GVs2jkqQofVd;u8U4417dx5RhK9%D+N&vDnB_t%YS_ufFLmGD* zwOT(Sp>sNVrAsX>{bGydu3muM?1ukHmn|@8;Qg9e$g>_bEHd!p`TXDp&1UQHYF4ry zdd=}h6R`yC>aCU|Ogn|7X-(XhrgxbVj@N#dDO)0Qxy6)gX9)FrV=Hkf9rApwAu(w0 zW|GBc_+hiU=Esl+J6E8iLjtAUnR&Zy{Z7iaqX-XTH&>PeMCS6v>LPZRkdXvwX)UDyNiZU=#hlI*W*t;Sr{La)ZCWx{f?LZf<3c9i*K|1hp(Oa=o);xSMo zm+bG2>+#+EMvM$%eWni;wE+!GHx1=WntSQyIYwSySy~3($&}JDHBJYUjO&H&(`EsL z6AcO+pVa1{R^dh3Am;)jGikqYL!o3}=q|8sb>98`1R6**qz3tm@%}{J$Y`I@QsE$z zlO1=%i}l&QnS1a`ytokQT~<)J?`q2|pdG}2o?%g2f5p-#x<86^Z}$OV8+bTlZNA-f z^+!^V2;ET_JVhHE^w0YCMV1_|`My)GE$Dni@1NDH&~J;`@aJlOuD`e(_g7(WoH~J1 zyiSJ;0YByX23Fa)Qmhjzy@Cl6ygQ;$VrN8_rux-`K~3*)u%qV7@8_$;0&Jr#Q@#lD ziKDyN##oQ6Ls|dUe33SKr*=VO4;GIrv*(^VM(61rK2P+;v$M1FWj~e@upSz8&i<{8 zd_e03oEt^ti9xZp{-GhiL}0}rLZ!CgF8WRiSUm}B_~@MvvM51~^KtfD^G>r17~emz zBO`S>6P?z9hT*9^whRQ}MZ7<3Xcl2yzdZ#loTz8n_P?o*dFl2ETi~;;$tc9AfL-Ee$|1~VK;`Y_wJ&b3Heah`^pq=3w31r@lLAG-QsYTcd$X>GkCW| zWHPq%YEkfITIp&bwzH?Do|f)F5kp%RbAezoN(ns`mS_DPCii_ekZx+;2~bx#&9l#* zULrE6O&n^CU6Hlv81$!@UafY$uKv5U0kZ!buyq4#=1as5VCDX=uux12aD(!Bkhol) zx3_}2&kdBpK3{=%1xkHy+#F%N92VrTuUnJJc%l<__-LFi6UZMl$cT}cFi0OXnmrfd z{e9h7hB20SFhcxY`+&9>>2`!%c=H&obLMEGvs7_rz0wZ#f6w^=w79m;Db^F%Xp@SAm4*5RX1# zfAa+;Rm+#@J3VzB#-1`P>7FV9JySv%48^6rHv*8!?^H{{mT+~L#SE}TpL}EDDJl#E zh6j*!Hr1V3Zu$8YciHtdqNSkoW*ndS!Tp3_5X{Tl7yCk(;ty!nAqK06(Dba6VhkU0 zmr>EG1A-8CK7gmi+>Wv7;NF%cSkb$uCcAgOegx~|$ZpKhUL-YUya3Bw1OCM({Y*Cn*r#omXw8iw<4A#R~Mx=*UZp{Z`C_{=&AO~rSgdJ;9ZR{jFvAGu7yRO&T?1Ru{F#EX_ofw6z7 z<5+gQ!YBNHJN&GAJ~@{g5MkI%Ax(6=)>eALH~MO185w(UHaHp74D@ z8iBX*LQl1PfxX5`DEX=&i;&(>nnYe80%tDVxzcoTBC}@dL{&F!pZcG58+qym5|Eh# z21EdJtejp$$EP{P_rt%O`^c+~>>3sTq5lH0A%wcekB|CtynZ?MV=K7tQXZ0Yl`!Mw zgHqot-=R`Z_L2SKNgx8gHd8Na!E}_onjX7gE7f!DnWk`y`RLiXg(nM-Y3D8Xbg^?lp-#endW^ z#94EE$NKk^M@&xu0DOMpW%j~(HO*)7O7;Te$>Q`f50wY0ovnFa`4WTyS^B3fVyfC; z79Sr*Ir@d_uc4|DHbe`YjXI09XECAQY+%93n=7*Tga$_klE5k5FkTMu|CiqHf;T_u z<@@^iWB=}m>-j<#f16~}_?`IY6TpcOW5=@Z(Oh+4Ao4*QQMsMriAe7+Ud^HT_%$4B zw(hcCpe?$Q+dA4-_^AnxA13v3sb+aRn`5hHwpb2LAXhv}SB&VtpiYWO~g2qU$H=D8ptEA?`efZopXzHSX;znmC!m%^1lfv&h%1!3Q> zGwPhNR2BN%u7mVoOWxH9 zwuFk!KjF@|g0Gd#e;t7YIQI0`nN-b!mX9ik*UW~Zq3bnswr{^aP}!8W{>2DHg%hTe zm_))Nj!n)hB+rB?sfE-p>rVf!?NvuS>PqM`IpK90pp0Op>Ewt^BP7ao9Nr!8SjwB; z?N**<@ z>)%u5Y%PjvB!VCbwE=3O&bfIzm!&uM#Y<|QZsffC~8@gy0zM$ z95{<5nh*BGnc9NE1IB_nPFK*Mnd1A^A>sYiX|7XA^K`4e(+bE)v-D$~_EsDHl`$y` zv;`;>H2SSqCs1W5++y$4WUsaa+j1x2+g0V|ikMpiqA6JdMi`+oJP??s9KPd=GPuji1nsd7IMeLxuPyu3agwI^nOQ>7MCX;5~NGw zVK!gV;-M@jp!pvXXMYE?=C>Ej-wq3C5I^Pe024uIg}ulB0P*bdwE8g*s55-AQ86Ei zSiE)}fe;KJN*jpN{l~!XhltU+-SD>8kdkgdy(fNPi4~6p}f=qcw5j`@ew(EgujIF1tEiimLzYdr-kcd2JTxR~y9HJx7O` zW=Q6%$j|n&GMnMEM(+=9|5oXQVFHSe6;>gH3GV9e%)MOWChS_Rc!U!uq3Cfe-M(%Z zlk3Q2gh2uep#tAaXtqQ;AvXn3H4uDX_|w`z98G=ZemX)g=d|WxOGdolIzNbBUPSh_ z5l2&r+R+}OzDq-vm&s3;^(u7k%66Icts3A&DWTj}6yXnZCzmDFeX)}en)t$<6}{{A zqTd1w=gCcBf2%rHj17K@rH$ic)`A&^9vV=r0P-aByocMnTGV#- z41F4;ag-!g^-)u~qI}dEfGH-|3ctqT#|r8}P5p~l%7hga;x*kkQ_XQLlo+YOs$VMYq2ue#tcd#R7=|IY5|I9yFS=)$8lQ9F^f#4BP0p zJ_NeR4%FovFV|q|B@;&S#f4rBZij1|60c>?CjJV~%Z2EB$#lzeQr6evSU`&Qc5@T$ zaZIk*cj3j76`xRj#OG7-e%O{tJC~21L{b?#{ z9QP>gdv0iSlGL`VB}}oohwP1eJUg(eVv>^sBq%=Q7*ZAiW_p*=D%eOLDl8JxjCCEo zWn{yR2ur(%?x3uPV5zSJ(Prz|m=h`78dT_0WvLR=ikIc=ZNB10Sej2QtR2I)3lmNZ z?EcPRLrOvA>iWxSP|@~s)#aJH@`Yv_F@plh$gz$;MBMQ{mD~ToXbBZ# zmE!W>RI;&f%m!V3pJQ{A#?7fSB2V$ptAAKo;u|ZI#L0)VeR6XFaj$h)MQ1Fktf~n27`+}Nq}FzWRiaD7>fwZ_yMF^if48-qML8Y9up~ap z#!GG+^ep&A&{3)PMOG4%OCp6%Jg{s!?!6FfS8a6gDMh&jNxISw_ z1<^;^xC-?uWHWERo=??2EjT@=h;4XX;dregQ$9#pA5#FLgFAT`uqrBa?g=n%l&B^3BrTAsB%U-F4Pc(%g6MTCjuNcGO=qSR{-T@a+ z2=a#`>&vcipHeVjmF+VF3m0@Yz#uZ@1`Ig+m%Kn!+XB#xL>8@~T%nmkegFb9P!P_TjE z7dz>UEe_fxuXoyII>oC#E&cqRs=K)gpU%tO(6a0`h56%yStaYOF5icP)2BmPzWdt; zK4-5a57Pg>++`>tfMdaZaueNMV3;l@=r`bzgQho zoIa08xZ0I4>g;rhJTs|HH<-L)=)3QbguKXdpLqnq*?x;whDEfAHT`YAovt(hg0rey>TXVj zpyvBmlvH&=V#)rfP|6nDFUr7|JUBR)w$MuDCFq==4va0D!1o1=g$6!?>J{8Pb{7xgo z6%62)BkBP%f(p{?QZ20Gvlpi{E&KcLBAyo{v_tV52O{(9iGAmjll#PRxO{;S@BuJs zJMrzrpT12aHWHhhFnvwP-&WQ}xKlkvmR0)bbrO2Vm?#tL&8&!bi8~v!-+|PwwfL z7Xfy%YfXEFK`jFVkrKu1*6+5lNeNkN#K$KmcHl1<#_wGob6bCKk2vgAM&)9zjS=NZ`}hR-;uf22N@8*YV+;dfm|yW6~oYR8ei(8Gofg3}!_J z?2+i&Dai<_bxcgDp?*^ezDjs(aP6JsTfO9~o9+na78tcLQW5)`y)_caY@Ch-rs}w- zpcXPOyfIRm5)ZZod!!+qR+Yx+=vZnLrzMALWb>I|PNvDeI{7$M7yf9D#5H}B-cjNq zBYXR>dh@Amnb7Mx$B2kX<|HU_@*)lrb1qj@ITdYf89lxA!n122wp+)IOwU~%+5WDtBOLq&nb^0>cS|G>*9IyXTuI}XqTM0{^JHSGC#}8 zmj1~ZBCYPXV<==#?=s^E<~pNF3fK~e~b zdv}afgbZNg;)3#{WIodt$bP0Grl>Qb4B?SkaY>UsCo2*)i)Q)wtE?s5-(PHWY&7oc zMFct&{a`Pu`DE?p{%Zk@kn@m-;O3;ngO3ldq zOaBJrIgO1-<~~>UOmFm9S&Ko-w0O7APg?{;*h3Gw(0yX;+jCqG2n6&%gcHs^&d(#U zPxUvD!K`}Nsanv>_M9A|oje@oHG+7g(iG|T)JnEN<0#`23Up8=^EZ-lqsQo_wb~dz zzu>K${fSP%oF)0y&JJOM8<$LwU&lauqf4)h`(XeFTU@GT>0sj4CIlEJS05Gu)ipI$ z{CwWmXcN#wE;s5xFw1tabgKu^Rc~Q!UD({5_WSp5goyzT!szO6{eM&h zhLM|aZ6m2^lR5?9Il#;xtLRdQVrC-P=!#nLMw@p9GrBk#tWT_D1A&eD z`fLtE07S!?VL7=cHC>e08M)bY>1KU(-%D{0hwD7#6lv>lk=%Q7^Ka16Ul6%|?nQzy zB=7M|7R}!H+F^3!2-7cyLdVPI^>kIp(e2}NbX{RCs2?49h_SI0WNi^3Ij<3A1Ycz5l_ODJ?aklH;P9iCP_F;tio^-uC>e@yH{a~H!*lD@f!i#ffELd!U8?J%frT>k(@C# zl6_qDe|NqHFngDWCpIgqz3hC{CUWv>!NNA?$jHm#EG8}dWh9nBN~`{%FtI-clXm&D z(+OYDQSSi~EB{(#4HP!c6wQWjg1>fz#TCW%OThg?0aan-_ROQ3LU#>1FE47dZp2Ae z9t4CRgsh~Px^2=Q2Vx?lR&-uECZ?N$E>y0GL4h$x1=(7We_V=%Z4g_Z*eV(z5C5IU zJ-Dd7v^76~N-IV4n&BYD>kfAJ2ziPtE^Moh{k0irgqYM8k|0Xyx%#kkrKPH&E5*+z zC+^~OeCl(Jczk5JDf{gNL0*Yj4uyPH7;*G~W9b$bTG3CL70nVY&ftx;o{@p(v!o0w z8%}Qn;12;_{l8oHOrCNllCAQwoRy}9jSn|X9)%-8J~1^>`iFtQ<7cF+a@)e9!(*GF zk!%SETQca~gj6j>_C3Q^#M0k7!^-cLlYh847&>+#8;^>se)~H~H?d+~47o^OX+y2n zgze%O1TO4I=3Zp-vZ&6?&ITp{!=}Zg=w<)CdWIzsX9mn@VPhA}Qn}8g^78S$pH8-G zPZ{gIKm$3pI4dSgarCvEnT;os&>On-!U)k!*w8vi`;=bcEYxR*kB)B`LLDB?Y~gUv4`&DqvGg`fG|^sp*h z-F{$*gKi$k=S%u(!$mMz2NrV8Ea&UiSV~9m<1=0oNm1_94~I+Zp4`KY@g3*X>s{LFCwo z3YxK88J7OE^U>1x#uiE!*`cca+i{5M0c9tI`bZSzazC$xF6F8f%zQDgcmbJA!c3j) zx~q~FZHVRe16%=)~)D&|LL<_0N_#B?c+FnQ9M`2y7WLbFi@`3Qyu z74`T}kV2YGyLD&GBBafAX+wXMFSGpA=!zuigDsDVg7+0gw;V(0D#v;fu@+R@U5O+1 z11G3vW&262yb$_Cb@OO|K_N0jG&Wy!t7IH(5(z+S>Z!;}8EHTl!yZpHCeT#qu;vI3Jf z9O3Lq!`OaVG{7POhVB7@d}`}B(PpaXDdCKuA)MPI*_rGRReW1Cs*+YpwLtX0-fvU| z=U%@fC}mb*`}&n-6>}|Nlecw$1hie~#|&Yn6)wL|uEOkBQfu8~GUa|TB|UXN_;ihH zXLh$n=d$8oG5xXR*S@CGjVvLYF4I@#Kxzmol7kqhQ(e5hdOY@WLGhs$ z^?=1(&m13t;5G|VB^%wzyEI2R`of(W^9%hAuNwti7X5MWhmFY9vz*%K zZR1^@8wvPIA9L!HnukSF@l`k!Y%fyj*|dYK!RmRgt2;tU*p@J!qmj(zN3*4k++)9J z=>x9xEgaDn?fV}~XBiY%({=46NN^AC?hNkku7METAq4ke!QI^*LV`nZcOTpx27)_- z^PT&7KYmeEQOpc|x_9rj_O;pxnUO0A_IsXmF7FhpFa$j?dO&%g-|8xs@5l`9(O z1P7zUDE-;u)BOBr-UD&MF-WU|+;;lH_5@`}A?S;koA|)#?gQ2bv!#4Rw~aX*a!v5# z{-h}*rWseR?g!jnY78V(n{8BJ+ssIyhlP{=RIK7Ly}H~x!fAD(CY2%>+)xO6`o59$ zxQN;GdM6cHo@*dUnF0^n3%d05^<1y|e)Nuu%qy>yVnn#Uz2R@1nvN*{AfT+fR)l## zvkSg$Gn&^6zZ&Z8Vrqn3d+smCJYU%Q4+%PSNVfh8u*&TSJNLhJ;CHJ^`&~j)vHT2b z1hEHutzTo7P$SUO)01bthH7yTjg~j$M#;E*bo{(K20{U-)d1!14W@#rpJ%mkq8=x{=R5BM947Nv4CI!Bk0Tt2(L!NK z`UC8*oQNgl)iwBWLj6^~@Smb|l1?0~HfzzIY35jMrF`a`4IXsD`GkDxt&poy41pAg;)Q}{*CfLJu`CJ zSPbu%$sI>_!#rLlsX{dybcLhU|7HQl`I38+G^GLrC!f5**Cj@el(l`;7waq^z3!uk zYODtnA{`AWB8sf|-CM&uxA`dgdYNV#cybF^v_f~yQCP$+Yu$>gV>pEoEhm0wveXXL{@k z;*yg@&pm6I%GNJUS{S$CticQt4;<9g z`=?lp07u!}VILY6%D|AJyxNjR5bu>NtB5E=gmJ0qijGFP%M&^jcDS@OItZB%$LNc= zb!@MUakK5}w|*kU`Vx(j-H$k@@o!U>F{OW(8$U+S^961^>kUKvm@t{l;d#qm4y3^l zvbfu`d;5Ot+MwAd7y~wl!nBA=Gm#Hyt(VgE4oCCOwA|G0yGsTfnoVCpiX&MV3r#do z6?M6{EVV6g&K;v4zoJ{X0RR;I-K{f&cq0WbClS(3jg1Z8z#?(p61UsEea{Px;p`P0 z_lmrQJN0kJbYu5{j^c2i=l@10OM|W-!LdRaM;J;)gEt z#N?~^JfeJG^4Kh{KFN-IiHCkH3JE`S$-bQ7ZQ30v1~k~(7ygFx7u=$R5F838W>LsA zf^6#}DA6~%KMX$_eG6SiZbuZw?kLr~?@oGQ7@@9!y8h+mlTySs zCiCy@&O*X>xx>#U%ffMWC%MS0J{J!Y@$8)(+o6WlVJS>H@8VU;I8DNUiro4Pp=#t_ zL&MivByE>(n853!Yl6|zPsP@e5!Bsq3XLLr{Q%%r7_*C-Xrw0H{y-nwm0738z+W1& zd$n!!j6&5&ovayXlM%dzc3T1;n+)4qa^E|U-b+D%6n}8d$;YLzUUA#(Q-ZJ>w#Z?R ztj;o4S4H0o+(Ye!dw=%4fa_1IUz3wBEd8U9P-N`Cj0p zt|qMyQmXw8Yym$rmblo~?Z)(NO?&VG8HiJEk2vmMwc#hF?zAwS_mGm7S_Z?xY+$e94zZ7`VtF>90gW zVjQ!Ns&%GyiU`POokt?|c4#Nv5BaF`{QR*g4+TXsUSXAYa|$(I%aYZNhHA`-Be!}) zX?NH<#7hMd@Pb_1MM0yZisWkXM#(C+55 z$4#Sa%~_g1YLlB&m$C6%oYz6un^i^T#Q4ii8e*_M3bAjH+2$kkroq(_TKz(pammiv z38{Xh8{-Z)gip?}Z%ZTsK79;3Tul60ft@6zKebH_G4`(y% zgiI)1bky{-f|3d1zD#lVkNMx@-Ee!v3yQvz*kZ|)p5FO{j|3tomYaD6swW3C(lRViedn)>Q6lxZ z&nwGZIgz`?Y*I=HFs&PpOtI(kwfjx}WYzcukQo2Hy(}Qfv6#KjVovzdR;&6;Fd=_m z)!TU-;&@BcQpV{G5BD~!;bfxGy`9F>Ypj_=N1TvQFnZEJp66q!1U|P1u3>dt;*4`* zM1Ql~g83FYtf)TX7X+ogaYlt>?{XQ=*_OtdK6!%t!K-*$E09*~#IPE#aH!WRJqjWP zegw3jv}cLAq`0VqWYvkD>A(JovRfKgW=6=nHYmM!*JIf5a-Ibw37x(9jqc>N|S z=^qSLNi%tI5jp={RD;kLLof|D8>=Bz?JgDl_TbIEoEvfJwLTtq*CSU?ysbWlqzRV6 z6F<^|W$4Id!OTys19btgyT%KX&i%MSUddKfwAHc1N1TyYnMW{P{D&VN&s1$)FI4-_ z^_xY-t?_3bZ@Iqy*KPN&TUj`eQhcEo)>9HRMUl5Zb3Yz|R1p869=x=gJ2TZp=q{OY zHwb0T9-TDK<9C}gqQE9FknWPs6G)Uqw8P5}vaRgtE5t?5PwKT5tf}@nT%+Ts>HVHy_IZRGCZXBX3kt{2XkT#Ypp&MB_I z1kK2!7fd_ZIJE{5vS9h1N2_v!CR~bHE#_xNtFM{B?B@36LoL!M;-|gB2Isn z&hoJ+lm-++J!&$)*OOH3o!(RJiW&td+|9cDv)iFyyHi81d_q^hJ`}Zp9EgO0VHi^g z1b6Jhtd|p{=n+Gso>99LUV^|_C}L{|Lp6!iva+n_{U4czlP-T|nB_&F`rliLd{1}U ziM~TgAXJ*VIzwI#{gglh#fsiHKY~MI3y`BW8wLu(I<*-Yc_5%!t4VPx(2_6#v!jO7 z2Iqlg;IdA|VgvXByxLQEL5;bR6EFFBObh_bm< zRwkokImAt=Ly@d_)v%~I(k!}eo08`tThXp{&@SJE*!_BXClhrk3i|eg#b#(zXZ*-R z;N`Zqydxf%qO4o_`pJRgxJtUYetM}lc&UXXThuXj^eLAD!_{K{50bug{V>DL%=4?> zxM3S?Q;LmZI)=lV{BCEx*7_Tl4sintuYFh68k}m~ndpoAolJ3jtQ0=2^S@z8-osXJ zR&M?``=45j@>a5fhpv$$kv}khE*=bkl=SVP5F&cVVo7q0{&T46*Dj#-IR}b~u09L` z#tN^~Fk?N#Z_%+3KF#=kXSxiQYVO-xWXrGV-I>ce2R0scd<3eZe<5o0G)@{e71_?C zxZ@HfGXDgTLCwwDwET|Fbzf24kp#XJ}L?NK7 z0WI#RboatAa&&>y#}k=_PGwuySG`b^2TxHR^eoNgv%NWW>D@KZbD&*+l%#5`KSzpp zU}wP9pI$(?FZ4jL@o=;X82TU|9a_h5X^aeL1ied_}Qvqd_6_ z524cAu$r{$QtAgoa)`ZIVLwQJ^F$D&scl#Z-6zD900|^s&Q0d7{xnfCoRe`-WgM{ts8+|ChsrPccQTW^=7 zdp0>Pl>CJ7G1Ne7GE13p0c`CMDW;Z49X)0bnagqjaU?gF43!VL$5>`k^=Q^+h7OVK zY(ZbC)*WtpZufRzT?T}J`nq7)-h9v5YWAn^f={nIczn2M38Vy+9uH**dyf<}p!E$!+95NI z>)z1<&mN&W;kU9Axx4zEyf;Qt#W?F(L=*h{y-$UYbDmNoAu$8Rp>NBLF+;lp5a&%F zv&8@kDa%9ga;M!fr|iob-#jq*Vv78zQ9c+bym&{s*gNZBoM;b^8I{yd)<1)UDcTc2 z9ad;q(Q_EAj6Fo<{l~7eE+-fpza@59V(=k~2wpNaBEr!bD)D!pOvx|cC8HVT>#B1C zVyU^k2BJy5iH3d;;*}TwaA$wb7Lv)t4)4|1P+lcagCtKd4v<~210VW8+4KHnL2@Dx z_fqUS430BZ{@MX}PS7Np>Gh#rXJ7A`S&b0<{a9t+hV0>;CGyGJ|H+@d^tB;=`bhA{ zts2DO{cp3*W`jTR%AxI@CH|UtICXsKtCBd{~e25zgO4gwJXv@`vV1e#( zC;Jvu^##$5h-a$9muNzn=UTKA3kG9b;>rbS2(@}VOw7|Id|VHHd2L?JO>)2TPqLZT zXm^rPKvTYHdu8qOBGF5A@WE* zG`IJ4L&hOU5vrosQZZ|+$f;3{|ID-$u`M-yKAy0#7x$iw7l+6T<(DIqvf2JnBOVndRhyMPz~f( zI?PxI-Yej#dk7EW5rET9`M7v^66I)Z0LiMN0;PKK&nYXg;7wKtj25Z6{r@~|MbET8 zb$ma}#OOZ{xtufX0_&b=X>x@;%9PXRMtOY!LLEc^*BzkRUH|q_ASCL zNvFsZ2w{D^i{Uaw4|2hRquHu&deM3QX{jE5ffrI=ZiwEZj%ZxiJX@={%rx~Wd;ARG zM?Z>q&*nXdW*b%1#Oh}0g%-WSY%r-^I7N6)~|eXuSn%> zsn`y}iY9#mxQqK#kV$M6HwA9>ml421f4T1@Ob}*95f+M3@ufBpxPe=?n=C^cZcC=u z2=wbOx%by=?1&g>LQSH>GL^&mf-x3ZxkV}9zwB4NshjYnp#_iZF<<5Maw43H(&9aR+d z4yn&^sd?tF__$~s3MvKW5gl^}w#hLQ+t$Pb7V?;+v1d6m zoADbFc-qI3g1eK)hsHunYe9|pVrrEemb+z+?WyoQD<}-R3RCS!F93Um7Nr`4p zR7fJb*tl1zmr1o-1zcvDn%DsP22eo0efxIdDb#vVFXIvhw2u`LdZsQwn~!%*UT-g_ z8NI=}?x!mQwYx(=C^@js;g`74o3Oc9k!PcZ4Pp=fd$w1+F6%- z{U@lpVDxsMUT&k`UzWXiuCXdPkd7UIEv?M3S#a39e&MH$^+Td+@_)zY==p^T&QHi0 zzwZTsl&Lg-cXP2bvsu82xZC>@@VCcL-~DG}SgDbu`81GHPycOstf}*X#8jKq?MP_z z>C%a3Q#j1v+^)-SHZ=4#} zI_$`_!%PnJ((`Jf+>$xJ{+wtc1;ltM;%37cGlbbrdtoU!&zzSkZ&Vz7!@@fFPvPV= zQ`5j?t~^K>8oeaI+Me7k2qUG6C+coH6G!^CiZ3rgO_#=$1)Is|QjzDl zr0O?7OgdTFW8wA1{|%-&sKrx(lyYVvf+;?%tpY>!-$Ez}W66aKs_N!! z{U%9Wn@q>pyin<=@a4e58KkQ|k=%zHE9+B2@~>azxg1?=t~ibXDxQXpjw}};4GvO( z#`5Cd|DJV3{iMrJQ3FoI2X&6`C}3l$A_h!($r#DgZ+?(PM*kd=Jyp-QWhYyb%q+QLdIYzDbd_#rSBKnEajVCQ~!*A}hipf5)YVy46wZ=7&iO8ps zn3q=#>;;@?Zqr>({nC>2S{`bgaOQ&(g4b<2Uvl4tgakwtc_k(ALU%R2G0t4lA;JB4^`pP3Q2X{9txx*os@yRRkFq65x z;r9KpMZoyx(IbD_cd|$vc3urGb}Kc7?}9m>5krkZKQ$6v1?p=mljn{L2`5OpKUNLpCHS%Gu=Kq$c&^gt%LhJnFEyVrI6)jmfzor0X{4kkiZU)e#2SW6pr2svgL zbW%cJLKi1BH4w3wO@C&pr(aD@DzqMR2C1v#l$nw>mTJ}8DZ>lKPmr<# zwyEQF^!T&bf1%^70OqqGmv*Oq(3_;;7?!-?nUMpr{C?mp zfWuO+L3;sDzYDDJ6^e{Yw@%2%S%XZCO6{;C(odG7n@@Ufc`0DGYbGCN#+8(2_X^-e zkw2~s;^Dz!s20mF3x@}EmY?ku1M(_gyFVUsT1BsOOKGd1ri7$ZrdmE(AAUQzNICKE z$jGu*+gaQMmJtq;X!jDF0Aq|*mDxGh*pW;*gzi&!7@%)l-5g`lf(ZM;N9y#y$4;_& z-y%=<_Et+I-iov-V#r!{Nn5jA#wkTMU|bh~j*WKMu;J z;9Ewf-Zn>X@c4;}0};pnr-LyOX8JZq+{=gUh$Jg3>qM+aWRgh`W`mGxXv8_cp01rO z;FakAww`uB&Sqa)Rb~IX4bYe{03qh9TCjw29rUXKx7!vL;*bBff)>kN089i}RvH>y zpZ`V~{PVyvlRe=OL!yrsb0XBh-FxWfpul*yNgusZL(1k52caV0&LGsT8jC zKS3PWpKENP_Koe2jNW%A(}QXIjgUY(@4Aq(s!mQ{(Ru4Llq$hyPiFfEOP6+5aeYGN zd-XRA(@~NuKQ^fj$5xoHJ8HP0i9)|3#RAB#g47aVTKF%f^uyzRLg498d*Mn77)0LD z?&kv5rpu?Ym5{Rkw4g>iAk(lKBWhr&&H_1hR|#mh{m(GNk|BfTMoG2j^tZB<{6sBA z*AG6QoDTgJV#(Uv&3ZIh7>OLG0|s}}v3;-qz7XQhf$V^->2loKGUD=&Z?buD78I?h zfB|?hG6o*550*Q91>XUoK}9Vs8AnG)SL8}G=s5;bi>Ci+c_;$EOX+^H)YIZ}@Q%-AAEnLx zbY?Kk(vln&VK)%IqrIX#Sca1YsA7pl{jw7h5`b|f!0!aOx`2bd>=DC?dF8$pJ~T<) zuk}Fna(O=l@3Xc@?n$#RT$Yjr4J71Y+r&@u40CPL8{tRk=tuW;AgfH*>*3y|Ljo`o z=zm|e1QJem8STooB6SSCLIB_*;VhR!o!i7|*l=q0$XsP2+3=IL!j4=Bcfg`d>Ey2f z6Qz?5nfK+n?iv$iYUQw&eCVnWeP;jgF;q~1385~LazSx62DaVvl9GXtnu{;9VSD=E zpbR`bJZ<}_9Ch!>a{d2ac2mwJ_b0O?3Kqt;gQTnrD+!EG_SZynlBlPy9pc9~fI(_buE55Rc`FVM}dJ#La8o>o9Y zBELX)2B#H4q##bJj^<~=fnh@0P>dTMGBfCi$yuj2KdGWILIU?pvvIpzL?VL=YDje5_%il+@VZ9qW6>BUJuNkl3!BF7LB>aj(Ev%s6)2_Jx+R!Z% zdrt9i2SqHFtz}L!Un%X%550KF8^UJkRGU*lIJw85izTt*D?!+kD*sbSx#eaNt2*+1 zVyq&7UNc+h2eH4r@TUin>`SvGdKy;ZG9>`w$I}i$^~7HHj6C`^4mAo?sMXTa zQd3uVx<<93&0!)mQeZf76`&gU(LoRNjb__VPg>)oqTkq(V6>g_?&111G0Fp|jTz+V zdPssjd6PvDOo&1=DXi>eNNV4>sAXH^%=g?cJq#uaRQn7RGHNn88C@wp!{v?MJtJTBW214iECnxAm>2SDO4 zVg^qvC(#jv10VLHhThKZ)SX8-#G}q~K%%e;wv1@?LUuIWfMok3wlZ2qK)3!o>8l!k z-cU#m{{CDLhc3%y1I)C zAAG{+dO?X^Nq%JZQ4S*j=5*lDebK0nJFq1%&h7VOSkBqcs~}wGKZ39;$C}G1@~&A7 z_HcC6b<~HASNTdtD1<~rUgsT9TJ8HYNeqdpjg8n^pJgqw$LO6% z+(e8IW6ta8mu?@)g)k7rhxDd4kz0`S+i_>!(=!H4QpIbcQTKcbZHGsY?Pi4KN64Yl z)cO6La%5zrg-Q|Cn#%);427RqGK_S?3twW&`3!Vm>g98|tD1O#oxSvmrRPpu+{?T_ z&+A@iz5Z3^Nr2D!dvN530bpibwiuLV@G-Xj+adFYKa{+FAEzGL%}(ln7vWS(D~UiX zIP%YtP0)k1+v~&$g$jGa8YxV3C>HY)XV%M@NYY8+Fg@ut?vK74UwX`-SfgNMv_ zpFtoKjO{MVFnWD$Qp+KM-!Gt7^COGk_T$50r>5)8UA?LHCuj=Xp{RGfD`hO5BgL~C zLkOFG{|?QVb%H^AyTiwq1EFN?WXFqc3M{Co1bC8{-%3_Di3~2`v}?QOJcrjNQC%At z89l)%>U%j^sYQQEDElYugpxNr7VK;Z9Ei@e%7^pD(i?mux2jNghTBtUX zRZ(G;2)DsFP0nG+CT4z5hXCi&eHPsOj>4n{&e<}66G0wX zNwnCT0+M@_t16`VCJA_Mnj)D({%^$#X^g;z@&+$j?Lysz!WU;BBR`jLNr1$-6O)h+ZV#Q%AE^+s!)4x@5!V}c0(WfFQwtW~l4 zOdjiUOIUp9N|>TV&Vnvk#I9kJ^_qY`bD3C&Eq7=x&Bw8d{5~kB%=7Z$;POX1^Doqy zg5RDu(@#s#US2+zGa)~S<>byhbMB}8aTT_DJZ3Y)&+)T*Ec?t~2NE96^GxfDHtDRT7a!rnWC)EFQUE)n`RBcF+`9~B92MS=0|XwRm!vo zj+u!`djHfr_jzWew6G{5H3iJbg{vtuRgL81vV$8mzxz8N*oJ@Np-SBuZ$I%US#C(& zWD66GWa8j(xVn2}zlcA=?~Y7B>9B6%UgjgFIhcTUqxQ6j^~yO=sira9629P=dE@mT z!8JFf*8V1b1TEiuqE`j=O?G>}7BVQ?w^}iPAb8roM$ou8Y&`$>phDPsE|RPSf<7zW z4A)<%Vo^o_Uu@rTbyuw2Dqxz=&=Q>V{FQFE+J3iUD|9{1IZI0|>vF87fW=$^nGQR* z9O{JOB1w{BOs(}(hN(Lz{>zOEkK{lvp`4Oc_qhE1AJO*3h5=48*hF1fAj6=---OOrMdMvoFz4S_ z`}`mlryWqWJ;LI~!4RADWSzx$A}(wGWx1u%x8WMe66%5-q}H_WrMDeq9Aj{(>UgzZ z$R;*?u5?6$SC2dX!5BZdq;ogLI(CP>m->TSYk!8(w&|be2+`2y(sJS12oYS2!m^|Q3oD%9X|IFj&W|k}EXg|K#u%0|ZlDA$MIM%P}x8GD;|v$5ac#hU6F9W2!E&N?D}9 zi5Em3H#gyn?J$<_ZeYFZsY6Atl~NERhs8;?Skd)@!oQQ6b{6^E#Z~mx8UeQ|nVbU= zT|(c};k&PDI5DYrD=D0AN)G}Q*J4AjR%F)F_i$gys2a=Nx@Apk1IoVQjLhfZDX8Lu zDZ-1uP+0dvhENlI47 z9t8AsoZ*>gwb1Xu2?+}w-%r4_7(r438N9+gdxNs}iW7ac_{PGQK$S(xnie&Y#TzHO z+2TTH1VpE$bKBwq=}L5Et=^dorsKabCG-cn)paE$d|dT(siYX(MjG+DJeE6KTAkcb zWdnIJiY?b+ignhbw6JCy9CcZ%ScoCLmj>l*jCwBnL1Aw_yX`A?fWv#gAg0=uJR83R zR2}aXH`zz30`hspSr@kdmiEc{CRWv&6hs0jz`n(^NEU*|UlA;JS$~%{ zu!_B9(89Nw{*)*s30@7ULCIca9?@0=XdS?Ry^+Qip=I5k^_T5hsMovyejq_)wD|J_ zN_CjI4(Eg{mR8m8A^OkF?HL#Ewr}H4>2t*)RKG;tHPmjP^)rS)(2C*Y6(&NzrSc{nSX8pyeH>o``zPj1@J&% zSLVK_^Idd$Hj~;YxsW$5q%g@DMs6(|3{}~`M1Ek0QcOwHx z7(wg@k^(uSIKR3k4!Sd$;!$b5@{pF zvcfEa9IOPb&8jbKQ(M3nTP9^abkk6mTCKo@4OpvI4#FD_f+5WHU#^+2)*`72@sX=d zQM1T>AbK`7a5ibjZ@`294loK%mbCl{wK2&^i@M@-CzNGW8Vg|{w<}}IDoQU6u~DhW zk5fXc0d`2a7De4AcLvf*yy9tV+H`Xc6@c)7k7AY{8vCuopyk)p;{cds$i&+pJk*CSoLsxWRtJkB>3Bbk2~6^cHsn_&C$_lkU&J{0$5J7gF4@3 zL}MzNqoPt^$YBLhWgOsjl~G6J+D~@XXU$Dv#KPRffJ#l12}wvCTux3(WxjHpZ(4>3 zH%tRwNmg>Nb2|T#yw|S91V-%Ks$g-ObyJa-5Vl&I+qFv~m3AnK|LaHp?#5YpzZdkk z;EzXkue0Z`q)%W}vwRMyfQg2P6+_<&0o@P1E|FYh~ z0xsZFs|*7Vc!)f>vB$&c8C9O`fi`n_%RBOEx^)c&BxK|OJ>GC-)HKCzLq7DhPP+L1r!Wl4r^f-(ex|=ZS%mCB^!#cgVp!jQ zws;v%)PFX@Bi^g-PKz*c^~F`e)1BHIUJrSm{+sfhuW|lE2DcCSiS1XXZ+)A-=WwAK zEkdijkqRYz4N%`$RGh1Ovn<3GyP_0rxP9u9= zQnAt#QrcK6NQMbuc*&K}dT^AqSVW_sPA@J-*_B;BJntRII(ZAFIncv~V(ijrSAC?* zF*c@`H>8%uQ|+Y1iOqTN%}Pa1v)H)t(GajPMI`FlOfpG~me-SgU!~2E!$7f!yo#N#!_n=t ztw4!Jc60#Z*qY0Z9E5*Y9fo_Nq z0YZ-bJe&7S*>#)JwCr_*;xT_P+kXD}73{HL{Ays!U-zQrUV(#Pq9)>vYV?{US~Sko zO#rd&y7qeAU4%NHXi-U?w|5&o?=io<#=WMaB1bOYUTt0&bv}}Iy*~L%86JQisyF$@ z%S2wu!#4c_V3hmTUiR=F((?S%Jv#3`J}3s84S%7`uRPMs(jNH9Ze%O8dQDTwmlKx9f!$#wD3Eeh3?9uULC1+4tM}G zs$BJvwa-}(DZtj{7SdBLa+*n0{HGp>vtXrsP!B91r|Rp==J!p^T=~)N_Xc+!fKe>_ z(dLx6u;Mqd4v*G6NGbRo14%L#erbX(Gz}}Ga@FE1E|ndf=WPxxaLaoyVGr~sG)Bj* zqH7P3D5Af6X9yHzKw0e^e7t2Rhvj%EP_TSio^NEq2^XPGy7ssgUsWY7L^J}&P9@&O z+U?3kK%6;oGrpJ2%F)!R>!7)>03#u%&g^S$sXC2Kj&DI8NxLL^H6zUXKq1WN*utEw zgHTMa_i0_cJE2~{ zD&#|n;~-udbFo>F$#xxUFk5Wbxw8pDhV=W@Mojn{_lCsLOO5Pvx*Ua~;DFUr%iL23tYTnit!)5Vm zP1F&e8aq`eTjSgCQf3yH6)5*gsehPkvZkdt3DHXnu^0s@ zXB@C-hL5Dmy&5+qoc=DqYnN-a@pNnX6;lfAwc)!fEh8hV+g6D7 z_gvNoqWYTNf{a(^cuRd%o1~+}=!-Xmerl?7tb0OtP9-P0 z`TR!|vJ^YdoM|**J*)RTkoQKzq|G+udvW}H%=U(AD|*ZJpb?bS^*YwIAGc%wx{v+_ z_r3$(%^S#xTcY>%?HJE#dgs3-v83j$$CN{Isx?1n*w8}0F*|;&7khCc`oz~l3X>7* z@^~ZvXsY&^H!57m`D)Gve#fS;WPUFB(-w6opVvO~sj}5SQZ6SAc9lF4Y5$qxDnA|* zkIdOJ74|*PUw;_Nx^9`*i_|{rsCJ^O{WBULbL6q>eju7B&_#E@0KvG8B26MJN8wr%W8bXb8{qFVm&IO|9ve%$m9g0T_| zFGF3}ctgm|l|12FQ4pV(;HlILUxZMmuozaA9*t^$NO@6Z9C;YLzPY^(&;YuV=9C@D zgiX`Mt+kKs9@aT*A^1o$e68`?oL+yGolZ_7lQJU6lhF`3uX9~F@WMeH=SF>1>W+PX z+Y{xIW?;?kTi7mqjP4K^zMo_@^ za!qoiQqhX zbU*QSVJan{ zz4Kc6OHMYt(`7|pnGMDz?rQgY=;ZR22Yb+n^47uSlj^z4?N~`fSq`oc z-#K6FESP_d4_O)HZNmZ97mZ~bp9Pl${BLH*S=H+LUxH6;3-bMFJlHC?Di8dFbvrXZ zMkcl2Kd$bzrOgQM?7xQTTnuGEc!|mi>%q$ zIsJ$Woc{KoQYnT|wP_%z-pTf_J7XtCqe@2m+~Y+ietk<>%fsE#>MZjy&}%gA&Tj5K zn)V{nTXmkG4<5N$y0$OPO7g3@>hLnCzX|oZP9wHipz42zgDk|(NB9oVY2x+ec-!OM z>FeS?g<5Q(6Hvov6A^Ow{!E8w9gd#!VTwIf)2;$kY{CgR;vpa`+XTK)=z0v$g+;Cj zMrX<%I;wrK{g+=*a+U{jNo3{6aGsjF#&)v5iEW|ob2vPyiQea3X?xI4Rc~)1E5S$I%PG8H%6X*+^D==g z132(R1jM8R@^>y3Em0O(qGP|0h#v)2T=w;uYCQvUbM1FV^q(I-fB$izj@I?8tdhq! zzO|f$(#CY*rN2}jE!G1Y6`(?vEQJ&mI-lh<1ipUEH5+Fg8(8O$r23S)s%Yp(K{HKW z7Wz?cFzKGEWll?bHXgggZIdV3I6Z$eYP`ymC^Un?pUZmd>V9}+#AIu&t-bS_*=5w_ z@{8nn&gbs!msR%Ut=whqvEzn(OHJ8i=s@?~WAt~sA|yiq7PGdFh4MVumU)f-di z7K6TuiE{<$4dN>ov$LRYuL(K3NO(R|eAs?xwZlHs7_=*gGNw#VC!tQ=ov_l5KcP%P?K7d$9Ss_MF!icJpjXkdwvcgbtuvf13}*MXsbEJ;itLw zvd)>9w9~^U)}QRQCa&%ZtXuhZ)QkBQ{p{Ur$QV~$K_)IMCsRYQx%=k(!Vuh2-|T__ zkz`&eaX(g(rjVkwik1Tk_w%Jmu#r#5kmwzP27@`zv(u<^C+t#V(#XT#)A4g*!JsZa znlVtFOyQl6f#`>j`|xv}0t7IUGq_A5ThxxzKO=3{fR-rF^)d#`ogk+EV9Yx2#Z&E1 zBfs8?Au~g3PjufAS@2%kFCfvnJ z)7u$qE;D>_5oq<>Pa|LR0U9bD>?FVMYU7W?XWB!N#RKQ z3i9@7l^iMZ`?=`(A#QW4q%!P2rcB$^YaNgPb9{Zbr1;&6BhY`X7`3RFE<8FHOO2uf z*u00mrQU_5bRKtakpBBo`Jr!&CJQt2?{8)^Yij6=LIkQev{}~YxOk&(=Wn!+9#jz5t6rQz*f@$qO(&> zRDQK5PiOS;*5h)+mhG~0jB@Cp@bJWD)HkJpY;&l^B*+_Y!phYF?_I>UAyBZ|9Fo!q zmA%ukC+%Eg)CM!rC1=GAr9Xx&=>>fF;AK&v|2MPur}Xh9T5*m!S8BI&8@qB)zyh%E zuEi1jBe0lwfo_i~UZ2&v3;2M_YH*sy`bU1Ws|AYD2eQ4gvUNQZx+n%^2(gxcl(4gL ziY{S8SC!}2;74ka~KQW_8_ZOljI^y?il?t5yIK`CW7XocF}u=ljCE+ML;cd8f3Y zEs#TSrL}NPn^Q6TvDufxCqmnBqb|i!g`vYYr@;g9=nAP;DJa;LgGQ7(`mSkqhBMev z10_aaJclz4iq>S%n>>KAM?JaDsuD{zc2^4{2UYrz?Uuj_)LIX&t8v~A7(aJbuk zQ4bi}XUErOU@KXK`|YH^na6*jOu6LaM{6`I$}UF~!l88OB%w>mg4EN-)m?p+>Xw(<=6cuzeub@Gu5PIA{9d&nKP-%4@Ge zxRY6`24HctJo|!XOP+#kp>MxGm4X;5D=4#xOnQWgyu4TK-FX1`(ckzRW2QDJsf^UO zFCZ(l>E(y^mks-klVfA`J|D|l(!Hs2%ScmUM{auu@K)L!A_Q@byc&~|aR*qg3^R?&;-}6c`wWE+)IEjV(!n#Qo_%n0^WY*! zI|>Wwhw#X!VFo)(5bX$ZSVUD99t6=!m>o&gkRi_R1X18)5)RJZwVDl!pCV?3;ouM{ zYq0}g&of|u8>P_DmmewglDdMa(8ulEu90M*iM7L4MW^bhU%I&v4%Uy<`pWJw|D%{r zjuE2PX3Y{{jV#F^ZllXDLN&3k%N=&%&@r6Kggw)Bb(@#-K+xY}n;)$LJw z3u#Ol3EPA!^73T!v)^uV9vJn`EU|*YLpftFL{xiw`*jbsVTXj_nrd48&)cMrvNL6Tj_0)6q74|D=v}QuD z_Tn`=aktToS8N?C$nC3lUcFsL5W~LI{-Bw#vvW;neSVMLQt(0HlGDQm6OJ@2sg^Hx z*Bn-@l(|rBi%+GLY=#0is`hpr`m4OEw6Kse$v$a%Z5V0yUrnDLkUC`tayCuRF(BQq zLRS+Sl6FdwcF9UApRf?y@FDZ7rnJepUrT&x+rbeb%0CuMREx+nE|4FZG4 z(9$7%M7BOFOI#N~cRbj9nRK{D7ZvTE-aUBO8w6j_`Qz_~RECXIejRlXZph7hxffTgMo4bQ z%fd_ONqW7xCRv(=vI=oq0U9sem!|VX%s6(JJ;u1)lJN@qaauE35nhamJ0*HF?13+T zK#BL-CaT(dVlol|0qB4ti$oYNRSrNy1#Ac$Ok|4vO zB##KNFyEQcgj?HwRnjwxT?zYbO&f#u&^F8fQ9!9Mg!&IpZG7_DDmIHQ=3p|?CPT8c zLqtP^YD(aZ4I=29<`>mqG}?MZKb|9Lbg>Y~l;=|gN{ra}!Sd<~yukA#Jr)y>TpHXq zAA?UNSPJWJUI*3Y16l2ZMwfU|x9#~$$ShAZj36ao|AW%tRnhZsiE5k;(*?mJmyh6b z1MBa0PbM%3m&Lmmzid1~KRckgaXf>#{&+h3F$-yDk>t1iYVbG zfW}d#L=_4m=(?k%C+IWd7&%XJe(sNTZ@=2d>pR+TMxc~)he92NEy-%NQ6j7`g6k4) zv(ad>y0IYoHMjI2NLG>XTd)C3s8o~u3xG8WyYba`~+Fb z;@bSO2q|uHZS7<4gD9(jK>xQumH{e@U2t{7;bfBHDqxC1hl6T7JS{?l3s*w9y%-ti zu#@Nz9BHbt#KJ)Sd0Qp&wPCf}&yMni57-nY^jp`U-Cg4CTp>~r`o+g`ecbkp<9wZm z_2QuAGyFqDgDffOE)Q@q-nAufMI(;?w9I(2cDO^*~lK#y)~Yx4?x@zAW%RgjUnZk#y0Zf9KZul_L&d%h}= z=eUFRBc#yB0j=irAU8*r&d-pAxCS+UF+$uJpR6|tBQ%pP;FoI`Agr8_!p{4TEeEtM zll+ci_2EQ3J$c%}XC^-be~`RiMfmMtl9bifI>`zelUQm!buxE7-U*z0wn8-bVt)yb zDqtU}NE?HePuKphn#3^O?fQS@upB@%XBNI#z22_VVU6BnoOl@k_Pu*}P*GREOXAs- zk4uj|{10qbFK&}Lk)1_%U++M*Yh|q;>~8u`_4YsU=zqP`i9fEH*Ibrfop(25ptQ8) z^z@<0+;;5-OJvuB@%Q0G_E}DEa3}cjR`|p9fM@)0%;?=9xM!=s8iXM7_jLR9cvoO^ zF7lk0qj6!NpCS}MT?&lgI@H8u&odzceJOwG|NoEd`>6i2a%eLSjDac}m+<7)7 z)}L1hMW~J5FXe`lUHJ-P?Hw3@lKsl_=aNlK|M18Ep7ekBrgg|ZrNxN7`!@)3ZeboH zW=Q9c3snpbi>a~kkB0}3o7-DDM#k5FFoMLW-H$Qdk*X(If`&oTpNS0Y`&CcyU7O_9 zN#)~(D?1GrLx$&=V-SPf2ybp;99rn;sO;^lc$>s@yz!XReSak={_j!#M8sd8&Z^%4382gKilYxXy;i|;Kh1Y-aYY|zxb72S@`{W^pvBx z|M7!!QLd@~ISe0qF~I~El&aN)oNRUA@5;a_yy}-j&MMxOxJK_3`hlgk4WSy9_O94tvt#doZcz%AialCBdI`QUs zLg8G`_<37NW0F-P3*0SO?o`5(VPl%-7!ckj}Q^ zeyHh9VQE%c=XQg|#&_H(pK^M{&70K{5Q=EV?#t8G?e9WD-N~HZ2dN6iXwpXPx&v9- zFbb-0XQIUgsU{j3YPAdp)CGwcCsDX!GYXBtME2@hjv+-8IiMdRsy`P$rtFp{JXQ;* zqGlLbP-8Kn;3Clz_hVCu7K@yRC*6rR)*_3x#Hk&~M(Om~k>KQPrULq&L(XtvqQF*Z zf+*MxYxCvZrpdnn)^nz<{#MTdJ2`Y(aDF|P4Og2Jm8Yn9=iJeK=53S>YvnNu4qy>| zt)WX4la;vVAPzVbW~Ml6mnhii1y~vTtDDc<)hls+uR$6}+!y2u{z0D^o4Q1P*&V? zp)t?ED~uSDXDo(O3h9c(8IcP4P=FC>k^zSmubxpFw95$M2GV}$=^~-o z<&s8tY%TaxR01G_GD-5+v%v{0os<_~eBk=&(bpbg!uk$bXq0}K@-x-}q8q2wA^n~tsDTJ^=$Srik852!8^|oil ziAsCna|F-LSP5Mc_r#C#*~2BYp-fSwPACiw!nZNvzr-j)8=`{B`m8-;9AtvLLPmE` zI{02y%dQUm7e2Ve)%&LIh4;@r)wAniJ#TaVBI-b^r%vcDtjElf@HnQDAkZRqkGvzj zwDXR~ghbB^*di{Zf`+3Rob)t2$nB(o$DZ0A8M-JaD~ehKT2Qs^2`_0)!YVVYPf{+BIcN&h-W>l)y$dJ%G z+o-F6Zr(RncrE$okxFTU>hE5Hc35$mm0Qc9Ohtm^FG@@OREqGkF#`1ectZRPc zKo1GkN%ZxMtFVRA?x%f=Fr@f+Q?C$l7cowffc$1K(ZO&~$P)DZoJ4ZR`-Td3mHw#H zi%b?jEG{vjv6FeEnpFIjxNZ3j^3BcfRcj!7lgL*Qt)jf-7b~j$@MbFDz&-r#(v*+}TU*5r_kmNHzuX}YE zsOSpnR;T+o;6U?Ba5C-eP_V`CVKvCJCI25i)12#ZFHb#FhEi>vIcxVYdf=RIc-X18 zX>~TcvcV3Ro~#M?**qLIr9YB_KEs4Z@Or+|igl46VAC6}-=LH!ogL7y*p~$yyUZz5 zSY@y9c38p2b<&+2j#Cd=9gpd`;_+0s{A}G#Qr+R@q0#yut@k+O6UGQ`JkO{gLAtZs z>S_ypT0GjFx4r<7u2y}rf+od z4>S|;iKtcoWY7@ni;V?&dfQIP5DM~jy5ddIjWa$s=d4Yp*-MQuF%F*IvjrZDt~_-1 zRX6yLXKKWoJlkluL`F;h2r4i^>Z8n*2RsF2vGTl?`-P2d;lcXCv|+u*3(3BZ1A*@n z-#Y~T4)rzt|^&~m>Di~rR;5pMd|!nq36_7ces&5j|&@rr3LE;YU0uqDJ1IY zj|7L~tGj>-3Jfv40Fw~)(4{1v;ewq{DAhh7tUlLJ{DVT_7Mgefsm-$)dY~vSD`RUL zla>Y8jk540>2pQ53j((B^AzD_ajHt4$7EJ8P{R^)c>!Sdk!=K?{rp++f4oO#8 z_+@V&M=j6ncKzd43rXPK`9hBmwU5|j^|!F)>b50DQ3w`@rL5iqeeCe;@a~C&5P?)T_P|{1q^7MKt*;!io3I65Vl-&V;W(W9H;+jJ()&AOB_y|k z*{jcuIFv56RJo0F@{@FNCn&-tF)cqj8iBFEz{rzamL90q`&}EoGlZvbBZw6Lgrne+ z-&7_Xvq(C#rEu7<^*J|C*Ic-%FnZL;(&fM2!&24IjI51$y03pi8U&1~F|>?PSIb84 z$h!Qn!z@ga(oq=1Y1OOp&i*8$H>#?JBAjQ393MMIGjlWX_RrZ+4g0mq9r$AqNajfB6?@X`=i3|n(FO7s2l_izxCv7~w#^*fNJT3zql!6_+5!@)PE zHw@V5;|#@xjD`EhTMxGpk#=5pFefuQYCb_jSBs5sKBHByL;hPd^+1GtD zJTkSHz!HfCNuO;bG%r<^iH}uE^Ua{I*LkQ+6@#{PhE@8m`DVAOCRx~15VcD0M*(F| zhbZg{Vws1se_0O$RC&&_2Q=a^4$1f{hPhse>r^d=ZMJn`9QEt|IOa(UE5-0M*Zp{3Dc&+HZ#_hvw`*T<9r4vjJ4J+yr5zhfI*LKP zpXPm_h9Wcw&1^CL`R^ZB?`^XZN)o%9(Het_s+c^ZSGng@Xy6Ci!JouzBMPNl;pamg70Pdu>PYD<(xjI7H3y@I8aQmEovzal{Vaf23JeE zqU+x16=hb?u7%Q?qF0@Ln%TXSwxi^BfB@A(1qF%vvT-)UniUwwn<>3!iD;r<_QfiZ z0Xq*%LB8jAzLXJtNcz+MjFSy(2WUynw;RcTv2lUwUW06cM`RX%5STJs^B3 z1SCh|m6%aY56C<2_#fl5MeFT`Y?;LwO#SYh@ro%#|Ain20+ zMl4ZYNX`7)_9m<*3rc?zos4}JegQdD%D2RXs zAY^3faF)0MFA^=dqXXbthXdws3tE9a<%lSLY2k>e``6d!mp&&^5RsYK=R@S;RaSuIB0q7(4t2alYBj|jES!H+2I;+xG5AK5uwxW!DN^~Gkc((A8eEGS0>)&`Hn7J6~m;hqB2v$q&gvH3==mz z3T-(V)=Y9VV~9L^)e}&`t^DWJz^f=GKarwy$gI_u^r3iBDz&z?=|RF#OWf_W4vd}- zBA(=K`YFISH?O(vneb)^#h&}K;+k>2k1m?wJ8e`r`twO^2`yD(JRlw(Owp)1J3FJK zp^4ojX`xM5GRM|*P+q=?j{0hbGq_~bhlYfLGBdLxYa;_+pnMb^CqrjrZM{X(eeHg8 zLk>hJ*!xWwHv*Jzjs`qL!B{`iJ624WjEFqR4L-O&4oh!btDQH4x5|Th`3tgtE`<>mODWt{?-N@_gVhrMP z2(YpF`0)BabB>rNkB-Woe77wt;c;psLlUX)PGw^0kenDz4Tb!yI)Zzsm}5z5p{k)K zx3uqcv8MBk8GLi2D(S0xOrU^?5Fs-Z-jgn6paA`#3~M#nyp8Zh*~s8;ox$bwwvFZb zD2yL{+?QBYtZSu5a5CEi)@Z!z*4yIKa+*P9z)k+`R(<`ocO4o^m6f7PQ%S_+pyZ0C zV1J0`#OF+St<(zMTq2@I&&KQbYBj%uTP5`C%xC%+N)g_|u% z)U8{iD|7l1hb01U_f#n8!|bfbGRJ_F$w|fUzic1(XoRB{Pg@I3s7e4+xBS@L=I8&w z43?#?-bV!}d>v}&#k+ltO>U-gXxMIfg8fZ`5m9oeV++*MWVPO$&4x?x|sI6p=-A8WNxtIVEu8!EY zgH=rroN7164)e7qP`khoLx9Pd_ z!!^jzaD8E$B$UED@~7KXgmzI$hcd25Zm?h$hV4U^4w3o#RH#a<8pmZx8F#X>`26DU z8=^3}&1@Y{c=#^6clT~iubsKE8y~!)w15SzLOuDSRIOzUh|Gn}@H(|Ud*P-9sF596 z+=+^kg8CM6Tnr&A1GX8R{RdSff!PJ>^s{lXawxMnmOVQ#7!;k2$X1)1e5 zBAtUiuoO}qz0Sf8FR*as%E}yt6+;~oMVTgx@Wfr7_o1Muk@rb#-tfxZHb(Bz=5Xu| zj3n2}u#n@f|89uFLX6yCdhE}bpQ~gP0H;(PsEbPsArYuVurb3mHLpdx2i08!$wyf+5}saZzrw4 zJ>0jiHj+|OxaiI(x%MX8rBij}?8CzTV5${ZQ7>19rP=_d`dzdOCp@sdu98c6!jmm` z^3px|`8iSJP{h#%37HV@H!Uz}+St%p>u+t&cHH)A7za~`H@)Z6wavT07kDMOuWWr|8*9K8s^NBgR_Y>Q* z11G@vfD-Qpz^#AQ)<)Ldo=C&0TcXpXMDPTeM3@1*P2WWz$-Fb`?FHQ6xEVm~xAhq! z=*PRurExK+v8gFhw&W8a9HGLGQ*>_z3XM!#AqD?|Ze~r$t1|td@X$ZyV2NF01?{kM zaWTN}<2YIR(g+29>Rt@{wsjAC_2Snu#_%J`lX>k3y=7f!rjEBMm(pQXyb}imORC+Fs0CX>tuq#$&LWPW1ELIHF$qIU)&E3 zpfyv%By|Zy-&AjZo%f>!B+R@h@%9NuTIDf>$Ph>t<~7}V#(r@oxG-bsELO|)7P@g%X2AJ+sI={{#SPRodT3#_85s%RC66VhcWOaG>A z=|Qz|r3^X+#CKZg6o|ME{8A=;2D9X6%JdRC=Ma+){KGum)4hodqo!Gp?@9@ECho{D z9wf%*<*>6jROZDtjy8p@W+3-$;xeI+6ND%PCp*|M@?6BEmGJ`Sa~JmAp1HfO$*~e zn>VZkt6dIW>Wgmz3H7;`jy_gNqxt8WF5e%y%mjgLsDWYWg~R=T{qfsZJk)46tfXF3 zxYlDw;ej#7oZV$5p>T<;ygaf{`C4!%k99@%#L+QDi|t|^-J+adOT_x+`A<(und6*! ztPw>+pL;^3z#C^qrL5bsco8@3!b>E2)rcehILu5b&a?U3yX?P{_(o0ku6su+59g~& z0hGPr$eu?3I&e9v9d#yg%wAg6L&Z26&~Y>_x{{qszMyacwU;0fy0PPf3}A8>Q;|hy ztlqCHBc@DC!(|q>h{0i-TOU+bMMDbJZgs}gq=l8zVQjx7y8)K3i6~`!_?>KOlL+9X z2+aj#i@NeIuE;rS2)0&J7C0pXL>hMuDz>sT=7q6-58o%UWy)sv_V<&UW`}Ld(|yW{K)nQXX19GMyNK_tCHDgF^2oCA@*G8mULOZ8 zp~{IyBX8LZXri?bc`qEUX%?sD=nx^gmP{_nqQ>|zk+k{My1W-un4)W0wS8=kIUrt? zaidnC@Yl(7K5kRqXGLcRdjMGX!rSW&`7@0_q=m!202Yim8uh<}up}aMLHqSbj(n46 zPxp@o2zptJhOSDQ%XN3j-HWOzTDRNfXW&v$;jjASi)!Z4F@~!rKi+r_A)2oJJeG;v zu>X+Qb%k`k%9=chjvLnUGO!mUswU;9^Du)I6w%ZzXLjHvGrC!$RWZ)4VFD~SbhN+l43Rc^`^CwfyS26LUak2 z<-xwrZ=x+Ge!sAbVVEJiuZ^8FTZuOSjpX%rD_!V*FRKDnurllLpf9(f^7qbiYacr| z&TLQ5w2Sd zL`MD#i)=jG@r+v(4mWB5*T*65MSa=MOe7f{)v;Ta(^6Scq$MlR-4Y@RH~BZ?M+{&VTk49t!K>M4Ig5&` zKu8J*l(w$S0aR4Ur}vcA$LV}K}pqHQd@j{Ui%@*$H;(Yh# z;g!0lglh_I2^@?Vutwug<(Y^gCRE6i9k3+~MKH<3Kzv?v0ITOCOfU_y%FB+8;t}JM zrz#qFiLq!;!L1SVB)$3xT zoV!)PA_w}|e&NqrUQBMkm@YLz*csgLAd{An1Z;VCEzai1?7Ea{Yan%(oqdPrUo8Zn zXWMr%09$c2qnf$g{wFxq4413f17b%3nkGk{lB@G%ED-ndZ@VOm!TG;~chKVL{-7ka z!PdFrmT9Z^`4gbn!=E_suewn@eo6oiVfb3`{Bt3Z2Yu58U;b-`wdOhzMrhlCrjxc~ zjmg@Z1 zYnsg$7m(Dl;xBMQIe>~7Lxj5aitUho|3V>Z$3Jm&1XpTfvkRb$L;i!)gu_R;mbM`R zu%!eO{VuN>%Gi12FXRmq5uL)4P1Qb4@rst&3DN#7Ufo*Xm5T5f68R0#MA2g6fE1bX z%3qmR53?0mMCVm_eHUV}41Grwsj@(FaOr$2a2Y8P++CbJu_*j=)}`1~yPUbJeSe3y zS_&vbV{(q{WMh8SBJ~{o<;&8IPnrCcLeA)NW2L66A14QgMH*`Awk1$SR3=?K;{`DQ zO5;Ym@n%^xz}TXMwYK3O|2vEZhtoQ}48qbhJz+Bmr(hkoYt;t0P?pGW&dU%#QWRMU z8{i{CaChAu%QkS;=qVrrTD;WY*!$d;> zkG(F);uoy^#GNSJz_&nQRauwY8#g!r>Jx)^YfP8=L<6-n!fg07T{C;Or>3I}OcVTk zfB#;w#$3F!qgDkbE~p9boo;??f);D~97Vr!4R8HJL$>`8M6C`)YL<5P*%ZFI(c7f9 zfV$RZR*ec6-_j@cdj)42=z8=(Qmd|TF1ZY~JV@MKNo}KDI>SxjziK4yIEb)RvpM|!X~xb>5+*zd%Cd?I6FLRBM|L}Q za;OsX4YXsZpSOy4a)f=OH&i4n))}K+I^DQ)3rcK5le2U{2e2YkUN47wxNb8o2$t9X z3}RZA>T>w1#}nL)oe~f81M{{E$nyM7=w#*OI55Cjr=nj`9$=$=5&zaR_G>_QLxq1< z{YCIgjW)FB58Q}CK7J%bA1fLyp?8@^VTb>tG=O0m$P@HcMo42ZDitIG-V6?^r8{@R zf~vAyV+SHKrK}|NA2WW+EjsnrV*-B;gh1*)F$n!m!B5Kz-6qq8zUZT5>MhAu!XL=8 ze$=X^yj|xBPd%%F6R%HTbUgo%e4&r-a>JK=Z{u}LC_!dZ$RY3hr_KF0qA9ie{+g|k zNk^p5Of-RmJ+~o#Cpg_={+y_E0FmTP!-MC-jQ5@tT`M|1E#waAZu=o!*^rH-do?WO z!Ux9LsqA3<&?8WvoX5m~_46`5fhX3_no(g>FdeEvnp zFYgni*c(Wbk!H_bDFuFNTnes7dPv96=iU7zo%yHZl!qc$Wyx3E!P6!uRkq1|TXWV6 zWo5%ShTP(!W6l@wp^B=mh<8_v|7Dj%TTAwQjFrhUyq~wkUW7o(_aE?LtSjE}>CHs_ zUl7<^cG2>md#z~U+iG|FICC9K|CA&F**3e!FZA9QVPIPN$^G^9h{ygzAu*Y6iG)Pv z()f>3m|6>=nwcYQXu)5`(kW7V&pi?dEV68AGUc5v&TLdG)SKE&Vd$v%TD{dZ7WKJ# zQfEX)$LZtb2ae8&O3Hbo&G@|p^B8O^;Y3`@WBO>?GrPTr4dqCc?;4wb`gx1H`jdP& zptHeLGFb7T&-~OEw#wCtILl7-U)_%~meif=OUp!desft0eDQWK$H)+S%9Hf2?NEH~ z>nu+e|zg~TAgPg@9wx&@(B8OZ)R$rn=?8^O%lzg^a95hC?X;y z8Su{eLuy`CgdT=#cJTy9l>#1XoSyKn+F|(?=XxpfU$|`#CnZZ?yiQvK$E^2jFq}QF z*OcBPRkYa1I26FfvF#*pmyDyA2W7&K?(&y}E(nLUbZv==Q-TI**_Uv|AgCL9?Z7F? zNjm~#D_4T}S-GUK29?#e>h&oje3rUDc)4x?!K*&p_P^z|$k;Zzal|cN?qqo;J&}cBwczP$ zNyE+gUVm^6%~>65*u*<{Lp+t)WIo3<6pc4N#3XAM{d3~=t8B%fQMxKQQ536!JOySU z15p$POqz{3lFwgaTf{^&d-KcBWnlaLI5C59y+%;h_ir+U&}lZ7)jike9K@Y2j%ur~94>P*b3ZUQIaqBX0eI$w+ZW zW+-9DDSt1tWHfW|dLsgG!Dx89TMso9qryEnLf3k%E}@R^`Bu2ZF|;b&f>pkJ0ps5a z5-SWn?BBS(Q^9IEyJZ>`zC!He6Zsy6&Chi39UBT&*xqSNfI#SjdIZXp()mRI@GB$4*1H z)KcosI!<6}m1AJca~ZKX^$V@xjdR}m9VPWj6zeh^*^#60Bx={Zl$BEQkZ@~!n!Tgx z&5uokUz0X2#5Tov`-Dl~euREA{tM;X^ANmf>)28Qc0lRw%)aQ%o?YJq z&`vyGVeLZd6fh()etv=gx#s2ge)ZIv_x?D_ql}xOjpe-cv->F)Hp^vTa9H6w>H5qb z%{R7KXQ%sPVlyzx@QcYneOOLFAnZCGLHcUk>JOyP3ywaC($9=~&4J&7(ZCKJ5!zZD z?LxeAUt8nbwV3}>sI?n5AO^Ekaq)Xz?8O*8vkM9eiXE%IJU>6~q<4i%x*o3lG1F{O znBA*t-q>*z0`nbAWDhyMCVYs{VkKXjrhtmGaCQb=D?fj2E1Ij;37vwbXOC!Yz^Uce zET2o-z3Xu_b3gANadSPn`)mmuyYd1at>D@}Td@D@%5{7_YgHS=zj`~|9(bqaK_mhn zr?i}JL}f=xWw^s@5yutAKIi&tk|uT;Em1c;;w>FXu-sMq6X`}~q-j7r8tAykQB=wn z@#}m<3FO}8uS3|YR#5LW0uS~&k^Nm7gQ>s&quejr&XIK#uIQPYuQO6guCLa7_9KMu zL4;+Kjj9GZ;#uSi8+ADpn|`UGFYv?xcjzA7otYPRjl)MKV`|rTKsA4X_Me)Cu$AZ zxb_5|rY@Nf;rMFZ-cpM=b00-jb^aLO%j7Kj6N;EXG=G!-c(OM)rXM!D)gBkT@cntS z@aQn=F(XJzjsnlDz-AM-=NCB!%1FP_^Twz|Gt1o?>F;n4Sru&yFTpeE#$O~%&te9 zcxZLHgVTs3UW8pxB{caRAFR2BykPZ=e3Fg{@+kd{34BrWw!6Y4)ECvSdnUn4uH{ib zX#V!jj{&ddEVLk5|D!${AfKAp?vpwKDzRKjVXDypBMgN^sP{zUH=sbqu^R`3jFs9w z&-bS~oj!k{3{!Ic8_Sme!eT=y8h%w2e2vf)(zJWs6sUU$$Z=!Xd^u72=kOR6O8x}? z6Vh#s?YZ`*BijixdZnVzoqdz+B5$E)xH#-9<$w7Zfxwd7-iOuhdyr!&F+ra1xOr!n$?$`93tMv#TZH3u21@&hIPMDZ9KLE*2wM8h2 z=OEvg>nLK|k?=3=()D#uaU~((?|4|ZWYQ4yf09`$MC>)_6-g#9G^N@!QzeM1HQex* z?WfpRv*EOtgu+tg_2J3M2>6$6AytLUo*^1)+E2{-h>uP}q;jiqpIz^I$)bwUn*L|PTm%@&>cf5;E zGkiV6RZ+(o)9ICnj0=UU1BRNJl9;EYvIVt^cE1TV+c#C^GzHw`7(j;kR9hD#p z9kEQbfm9V)lk&O*-!9L2Zn{$%?57Y7dg z4j-v_Mx8lNQOp3PdqaUeyYC!XRaZ5*tQ)a;QOR3_%VM7jDrSt1iRHknFrvA+ON{4B z=qquh9d;E`$2%HXH_lkv<>kGT$kqOJi}y~{P}IOKz}GgL^93e>{Sg{s5@KE-;wrA7 zZ$I)sTJs5fm>rBlAj4Vig`}Is$Q&s9kknK#w$yLY>mMZDUU{VwNJO<9aCIf=F#A6B z8I1`NeDHrfgl$^AytjKB4K!% zi{70tK1F8eza9ARqANnl-w!<`*B6Tq#o%yQV{WCV`eThsoJYa+vOEyUJW*eu2YVqY%pKX58T(@`f3gKWafYixgVeP?yO zppNeN=iTr$0eElX2j~^xs`6N|Wsr!rVY69gTR)$URh*h_~q4+wkm~4IdB*Bzo(n_8u^( zHZ}gOh}D2v)|T7<4i98wIIoSfN{mvE&6uI(rI9qYf5Q~!GSOigvd%Tct~rMDW9+=B zygb8cSRv3T06nlA*YTCfaQ#(Gvr2m)_7@x?{^@evJ=Mw^w&XtH_h>P@OGnFFIhKFR z_-6N|)G!a6yDh(LsxhmUTmVIWar`OXQ~V`AS^@*c!R6?#1up4iOd> zC4M){R-eNmYPoC|uFUfN((3Dh14L`m58E4BIy#Guj#f7h4?`!b8D~OWAgziiyRGf( zTG;0r(a6(rq`Jp=E55s4;oC44V$w5};x%F|eT zQhZJ~N>4k10%9sHK$El1OZfKk5ihOAkI-=kZq@KvL-8U{gxe!r-wAJC0epBVl+Y1k z|CrIR^_e^HeX&CO;Z(kccHnc`+P!Pe>m9t!sQOLvAwY50Y4OccA1 zP|Y^yX4W?qx_vqY`#yck@p38TN%+4<1a5;+N^+*O5|d2@XvWC?)x8w6T!p&Db4Q0- z-yi{w3hzV4rCwUt)M5TVGbjFQpH4vW|8ISs@5I-9^+DMoNMvQ&OYXb(R?>Z_Ai_B> z)M#nL@w?0DuTihZDAehdY_cQQZR-$d+Y1_f_hjn@^XKtQ@ilH#;kKkM^Y{{mi{iH7 ztrG2E@`UuTF%nXB_vDQh30gGsgO!&k_1r=h|Cj(a$1<3AtOD6Su6&CtGRFJ5_}>}A2O)eQB8@*v>SM97`TC%nZ?C9wZUv}yNGZ229 zOLZ$=)fe!F@6?wntJSRT$4)`Q*BGp>xe3(AFVWU!IZwj;`72HX%HSjdru38Ir?r4& zzU-ZPnE1{&0>WXzUaS0fEPE@DUAjy;3z=i%TdY=b0;@@)l8yi_;@`PV8=p@I(snwB z!(6SC_nRn+>#^URh}_)~;d}&fVuw@^*hf%w^-wV6sQz9l>vKnBjl!&z_SUJnHJ%l; zcf+RF#I`+`h(iSA=nDg1T2So5Hc;?MHzfBMAkc%a(wGaXJHA`LR0K8T*z$?51n=B< z&uQ`)Yd_t`FyN@EYJZfzPJD3#-vNrJm#8z;jhtM=(2&ySL$2-{nix9xXXduGhjaeg zD#qDT1z@Iw>th|>cQJ3!3GOi_L(>$0d2w#l$4XDzZ^$*6b!KOU;b>g%UHtK1C0h%2 zfU2ZLf3X?y_d-^XwXk7+LY)KVQhc0h^v({(nnSCJH&x?8u^Juw@_6~;7a*_j%B$nB zs(=*%?5>JlmY*keF8sHMMICApnF__K{Jsw5@iZs@)*e22 znh!H}6_+z6(^2R;qo8>s7GzmIn&RL`V=T3BQBy2=$-aluoV;(ph9|LtoYps6>Mw(=-jo^XJ9k2|5J&q zRX^UGJn93(^C)&q(SbI!MN?K}HR|$eWfH9II%Oq&e`fh{ZE3mL4VOOFcUQ_E(S{E3 zRE*n$e=uG{*Re2smMlk8{!bU3F|TJW8Ba`x`_8+{yl*U+Mp=beRuKOy!;FCGq@ zfu!Hu-I+$zqvfgn4Vvw7VI&5qo@mV04p~7#L%T_~hZ+EH77hj;ilyV4%|nSnkREqL zm_@*aaPlKM&!~pTp-z2Vw<}&}EUuvO^6=7eu1z;#qiNx3j~@CVa!A+qwPe=os>cW9 zf=eiwO2We1lGD@6zX*vihTnN{WS<)-Klvd*k$;N57&JY!{~EVkqC31a!yNNo6gL9Q`qfev=;2+*ZY8}5*Tm0 zU2OHerg!?=IxIWsy^hGzp8p&E`{e37v?D+3LWxi1C#UhBSLCbdFM&I{c;Qh~B!5X- z*s3xpeDnJP5x>KBTyXatv>W|LHQGQVy-M?sid<%+V zE<{rcnVeEG$E`-63PaOk*z_MC@%-JkL6bCU#KVHUgdD#(LNk)2iA+{X58u_VG2*E( zqn!yQ*r{SSG&tk%{rfLxJXInrQ8?$*(fxWicaKC_s+!Aiu9h{24nvmGF)mA|l0Spz z9+)Un)xPzpWc}x2!7R=LAXRbL!j@!bm%4zq-ON`%T6`Y}GB=-3-J21o^lG;VWT9w0 zS*p?E0^t_>8C<>_?n=InI(%*IUn{D9li;&(Cfn=Xxp}6H?NdHtm?EU;*0-4I+L9;1 z3FRk%R^^IUVixU_V+UCM41oml;$)eTXu43eoixzc{?*g#tn_%!J#b-wj$5BP&GX9;M_Ro}wyYNfhi?oDp0R z_aP&Cyi*)l`u5!kVJ&cr-s?kd1v3w}UQ?f1Gm&N)8LehF)?^j=X^leLqLWolPkWtb z!tBqN+ta-SCbPI~uY3e(%{xlb)Yhp&YI@-Jf3O|$qN%O^{RYzKmICrU#c?Devn30x zkL_vDl?qGnxsK_uAV+x9OcdNys2_Qk2>maaJV?IETz(6dwt+^}tTB^NW5Q=eHlxi9 z+x=maMSG`Q>+xF|AxA&>oFy;?9Pd6;>&1k+(EyR~IWtHx;PHeZ=S=!vqo3eux_aGt zDv8rC4w1Llc>yOdy8wNkUX5Qq^H{G|JK$A)%tP$G=`jkczHmSx`YH}6Ser`2OG|Z< z;Z@+AueaprBslR)+S>_`LFuV#`udcgGjK7Yuw)bs*r-|snf*TJLm8?4fT;I)NJAi{ z4j%kz(jzNsLbB<7Otj#z6v;9@>e*EnMk$n5)tQdhgT>N$2P0#ztjd#(Y>RW#lf6ot z+Z--2E9dMGbQ;Ev^i|RC??RsrvF{PH;oHV3p z*j(y-uSbWjw~6%fe6DP&KZXZPy3$+@enHW7G$zydL;q#T?jD!rPhR3UHBxlriAL6i zunakSf!EjlK3+D$5j6g7=6}6FJ3;LG0Q=8pvv?<{yY_Vtl;?gdykeU?Ck-|-d}>%BkP3TM%GfE9}J!u_WWQBJ8dcF zr4YqNr_$Dtqi>+DAkH}$ofaP=UAnmpl8S%N5uydG;cYA@qUnQrfXR!DdJ?(^$cguV zdAJ^62|!O@RiMv>A;pdX{_=;fS?s&nA7gojG{qfMcCyq_YtJ4uFa1;6-Aw{K6K3YY zj!B)O(3Vsie0;`!g8a(22N2`)PzHh_dkE# zp*zuJmRMb2a;v6YBWBU053#q9(E|X@+rN};-pGaCL47!Ro1&JxO1IZi(Y#(;f`vK~ z7CI&lawRQCtlx5{zQaX}lZ!}6!Rp$Mj*bF5^B(83D4|cHk?`EV;DPZ)ow6Orq!&qp z!KmAaRPIgA6XHQ= z{#c79D*xrlw)>dDB)}iAR?%(Au zJ!-ayA})6h9E>Bu{`BrUjkXC@S-v4x7Q2F?H>7N%fYkHL3n_0|ID9^zc7B^n**cFt zigEgGzi@HnrL;JE9rGC*AdO_?V4?;yVW8H9k8m|f4tUwupqY#++_DxHxMz+5ZgzKG zJ~Z)C$CG>GLSxhZ=IxUoj-5Q6gaGj_>ibo~lGmnxrS2cunF>W!S)lhhM%{)h3PoD#=L&ku6q{)Zt?g z-1LAK1+cyzbidyU{}w~6HYW{Dm)otG^=WSW01AAbdj1EFGxSw`~8*CQ043Q=_ffY!}|mK zRs5_=_APM8rV?{HbO|8Dn+53vgl3FNzCl=50ntE=`Yk^&Y2rElA5~u&6=m19t%4wp zbPOOO-7(T#(kb1IbTwaCG@1BYGaDPzgGuA%mv$H+%6NbzQuDY^Wf?CzSeo}!w^MGrd}cl{ zKfC%VSpnYAQn(^sovrwX5^#rnqUG12Ld?E0k1~`gHif{({d(7*0-u8WwvzURfl(B| zh1CUC%g_+?Amd)b`Dj`FLn|BMY?{ODezvv3@dalHM~7d-Epy6QNCRNq+2L zGCAyWZya)asuqcU%n!i6TN|fdvkf)%92yrZU4>uuN%mL`Q zNqbTjGIn;%B<}m9UwO~ow2yNzA~aKQme@6|0AmcS$FQYiiX>^BGZz<7Py%3ZJCs-2 zidv_6vW;LzALq9^#dscn>f;~vvR!9JbD5*udTn~9)89Y)$rwwA#8XDF_}U6M$wt#| zy$~}D>Pz!4zYFH-l^b@hvw20bE>E&mlTfyutY1c_;ftNPOxIE!b>VrB$*bR3KEW@u z@(p+5%go=Ld5e1!3mY#qU6a_2xQ25YQ#-dkfN|Dl1nkDyt4FfN{vrD$RNPQ^=OVAF zHJ=;ClaFHvg&$|<@WInA`8zmEjDwv3{eYVrXAe2~otMtyA{Rrwuo)hllhd_XiE$(& zX(=ImU+ws|=Fia@c1#3S^kYuRL3;)Dro5gZ)F2VXJKBc0SL+ps@!N9OQO|#=*+az0-}JGRUcuxtd|UC zMQxqy!*Q7+!KIRhveb!*Qw(n|Bc=i)kOzEeF~~_`on@FBhy! z{gV_59*U0RHjr+#m0GmBBBz|j5n6sT*d2Pjm7@EA5;~}|?qYgy%<(3d&~+E{CG3RP zrwh&5I_Hli!NMJ9@j4>0_6uzO*vTL6mONkiTka!dT@tL-h1 z!>k!S-Mj0N{JSgraNZXi0iKtKZIbnl*l$(CcN1XZWZE(eSY_E3r8VUe&|dcW%Zsx@ zZ)=|sG;fdd{#2)ntl@uVP2VOXxu=%(JX3A1Z^~%6j{h^oTV0!Gc%0+YQ+?FLcAHM& zWsRFQ0dI?PwAo?rpRsA>5#-R4{|$V)s}+&LzIMlQ%lCX*Y)!MZ z!tR}6^>C}Gvno(|id8!J;QH@ecXK+uZ6iQidpJ!+dwx${h5vDGxy@i?nwW`_VW8GZ zvGB`)$YW!a9J>r=RG-JhF^%xXCDgX5#ePaLm|EJ8k=gn{8F8rs0ZtfG8;g{JB)2@q z>KDXjlZ-IqllLy?^Ttp{PQx+s2z;x!-flj$JBQzQu-bOL|KXS9UWM((N;M}c;VBdg zp1n;>C57i~qAfS8dn|?Vaiu^qYZfQcSpa{&kU`RfZ#edl#N;JGcT1|wYO9a$0fa=0 zlK!wq$?1B79%HAI{hep5v&lPwoR#2!$00Dl1Lelye zo*{M)SN(Ba0DvcD=xSk}+KLy2;QNh}7(%g^IIMF48?<_d_MCI8oorHK+VS{6g#yo+ z|5n+%7!NKNTdII6GPAsQ{#ozWW+u;!bXiJJU&#m9Ln>OUKaJUlQ}J0;`#JO}*>#5? z-lt;_;6~sGVw;c+SE~+~J*k@h5j$BFKOL7~fR~&-X@4}u9Oy%Q@qh?B7*gj0IR!nu zC5Ch?oT!9O9c0~#_ex6&+T7Z)m~f&@nHavwx)7cI#Z!His$ct+x=>5dN*zBiD-^|Oy~BBjtxsBCr2wO_== z^AmdF{^t+O4fqUk1dmCh;#e9f!!28oJLQ#@RGx+~!=Scd?o-d8DBcGjq%AeL9JB!a zd;HO+ui4r80!v^0lQ`lwgbFt}qmZRX+ic2!@{QK?ez>XNs>xPWkk5 z?x~JyKUU6|hbQg0h9Loa!HhYTU<9ip2zZPDDiITd@n)I9#k=M4kmN!5^MO*TIX}u^`vfPbMBGY%I$&svGR2bYP=H}! zaKV9cLPOh9JSQv*n|y~A0lF+Q2&pod!K6!afoJHFYR47SW-+hxFCnUq{qy&)fAYdD zbG{v^H=Nn&VLNegyM@OcGn6iv+?e%zexPDxlGpE zzw{+p$7ecMTOQ0#rI1^WwkK0LorBSCh%-Gtz2|VOOEnlve{#ISO_(yTZN1{vd0cgI zb=w2{4*9{zx#!_xIXo|qm!8*ub#qH^C-TH}H4EYeu7f+-`2SYv(hob#MGH%%wOy&xVdPnPQ7JnQUyHg{O-=Ch*LT(Tf_w zJXDGe`)J!_FI&~SxzH4*udt+2aBQ=;I#qDVOLW=8S+LG)0ei)?Idd(psM0C^KL!gh zJeAITFe@e1j#moG>T)t611BYAIfsyP6Fc5hYcHaI3FRgWTAe0=vynQVv7M$9#Dkq{ z#updD4v;oki8iTI77tMF9Aiq&B9oItJrhO_A30;vOkJ;=NY-7SzO1cwQFgy!_X19>bN|qFCZu`X-Bo2|(!3dXwsx=aU5mwYAn|9XsF|fx zuY?8SWMx==ltir65Se!*&d7Uvn2-VP^c$n~a`ZXhS$Q5WOgS&dw=<-;6i9BH1N_<9 zjqi?s(pLZOybGGnSdp=z3*Cs6*KG5<*fdC8?{nK-IQZi9F?XXW$qILi zW_ag2>!Er2lM&f5ulBE@UHRGB_=_|Jplz5}`9@~npl>2wPM{kh|VBa;zr zW1tu5xDC_mr#A7Y)Z6`|)83t@4^spx@*reAhG)*tRetr@92yh#+k4c>*zH?|+rCkc z;3^GSMMdVc#f3KEf$B7osju-hL)6zxbbK|C>`8StUMPgECiPE2adcyHe4HvID?Wq! zIWVw?ZejXr=z?oO~q0eXItWc*2 z_xmP&k->=_kaM63UREyvr?;2H>c?Y;!0EOU@iAo_MYc8^s|(4v4BAe$Nt! zTXb%qhv6{5UKswV+4^=w{_8iezh=BP*tsUx!`PV03bL4@ZSfs;mw9>#cl!#x?SLA0@dnwsFn-E0kDQu*vc9S1<^(EXO9 z#~UBpyKekA{?19TOO<0_7@19wTI~&SXj5H9zANh3bN{-1J~I)!)U4%~$*TCB^DA+ZLBoUC;$0^pKUs5q8ZxrT!NEcL zz5x($vcIAC4lzo6nVJN;Y}a1fL2QWMHvmt)2miUTe01FzZjGd2CAti)l$E9M0J?K6OlQtvBg+qvM@M9m$oEeBSjm?E@GVt ziM(-cgku4+>Xv0A(??P7xA3LYa`LNU!>wY7_On`A(oTGlI|SZT`{#fIhXRf{sJgo4 zQ43x9>8)1g*)!w6#UO4P|?U{;TtVktQN$gND}XK@W`^0!N0Z~$zr69p&%5vzL%X+Cdade+&MMw?iwNK*AaW62tX7He^&@TsDewLMU9s}K40ILzNXe@#_KQUiQHW;*R} zhch}hRvkp%S-)!x|3MZ$M3|XZnyh@vc|#O+srMb~bn09{6qKB|Q(S?1)^gf9Se@&_ zIm#t(!#Y2fE-j;#vJARtjb!Y#TkahGu#s;Uv`@2El_HWvuY?XP?a>5 zq}Dbb3z}O!N4I>klNA5e+e{idYQEAwJ9{Z z8fBs!f{YCtmlNSc5{kF_cFW#&bsLZ7>g#V*RD^QV)3&Ah%@C3ZP{XK6p&-J{U&#|m zQWFq>*|SZXX7yaVEM1QWwl*sIh`a1SCL`&h9C4>xpr}4h_alxd{%1VmDAVCg zpuI?iwW;cJts2-!96B&iOHW73FY$NlTe2Gf#@Br<0Y3};JSj!x;$F0ESe|2i$Q*Pr zueLhOj-}$RMWJfe$(WA%mDt&PmDgZuyUXGR3pNZ-KKx z7F?Z@4kJT|yY2_(8g0k)vM?uFEQ9g(_BRb$2^WC8ogoyRJt}^)`+0Bw_qv6oyg;X2 z?97w`EJY*7CRaoBHGUy20x5$ig*wg_PKe0%XRQ2eZ~gQ@e?jBh8F^`lBPW(p#5*1pL|q2*l?ebKCWXl4Xa$_)VR#^r{;G$2tx@d$ zKcIw#IJ8hCyR^`Vsz0G!>H}#v`1KYarjG~czEOB_fKdXbhE_7HuEDaj(&Wx-a|GzO z>$<>V&(P;G3dx zc@sdu`cv73mYEuvGA_R_f1X0k6u_>$Fh`8Cah^bed>H6v1l}I*{NI!YveL;RRRA{p zIY~NZXeUtBwjq(vi;Dq*jGOYW7jYD58_BuRssZl!Bh~od)i{xi6FEYxBVX2~K&zFQ zlDH0Iay&f~HlC5Ym@T*nKae|7BKFM)&!1sWCgD^brx}&Bm-`~yUTC?J4cWioDWPf)~0)wH{U+_Va zS`_f#dwDuuo0ysD>5aIxJ6k8^;^q$0=mbnkF^TC~p*_K@RpxPx5Aj4%oXsl1kK+rhs!dhz zsAm8#AZf0J#2DXJ0o`u5molFu-)HGo?1;-*{AeLBBibZq#1fT&*}4v6c%KXL6&q%l z>9Uodc4yomS3~wZej#X#$HE=u%V?Gll)je#mTNTFD^qWMyD9bf-w;2e<%_5A0}B?1 zyCdy-{{?C-dNTAKYP|OA^L-z&;JE{6b+B3U@7n zh>=K31H`!18`stbvrcVuE0^2kn~{ zo@*c#L}%>9o24WkF~Yic{8xu?3EoHQG(RNE4Xi-Vvp)9rrxJO*S8GYEa==e8AoB9{ z;%-vAsvyZPYDKonHS^v|0nI;Ba7tOD0*j~qT1(#I#=WJu?N*2HDl15>-uCV7sskDt z@6{(X-aFvW)u+R`wXm^0LI*=h>Q|$d1bWSd8VlS7OXqCN=PT~9PW8IK;V3SOS9d}$oDJDM56 zTDy+5yt@iAU%DZ>d07Y3kUVmpJY8WXnhCMamTxAR+G(uq98FNM@?V+nmZgm>jI5F3 zYmMf->^Ugkd2l=q5>E46s3$D9fO_lU^8xEo*sk}31NQejd%=YoKlVl_*sQRJe6G~@ zT{Bo8WEI%xf1Q)@TH_b- z14gbM56+EEO~BSB9E3Wxu)sN;{9RG8(~IycIx-yNe4=9L>MF7KVVzGH3gOps*Yiz< z5bo}6j0mxTol3xhQrc1BSN#)p>}JDIQp2cV15X^oLicimwX>HSckO5$3oVTM>I<>W zUZf!nKo_D+LQ&-Xo9^NaA_tGlja9&0rCN8m+_N2+k)?@`RqRg@9(ZkKxV}J1^tknu z=?%BUNysmtdjb}4vPZ^as;#m`jzp2zTX(l@10AQQWJ=ZH>M|Cbk0oW}i-*~OwR?VX z>F$LD57zuS-z0UI0F@9ZXuk022zmiIkfWv{o~5#yXnew+%(!Fyw=0+bkfvi&+7??o z;uBV?-7(CG-Tbg@A;Rq;(Oi=xO7aY2LZ>N^Vfc~T>nE@7GsZ+U#2o?;S&NE|oNR`+ zaa<;MO0FiJTLBw*cTMA`yGf1M0i#zvp*<%{5^|EX303f*5sMaGf;}k6cqrlg^yS7z zSw&^@+MWC?xw~`YOaxajc%bV{zU`cPS;ocR&r%m@>E#Z>*}O&7TWuZ?AYF6{r6S~e z`oR0JM!p!^O>z;<67DJR2WzlDDqt`Q0j7)Si`GBViP;bpJ-pxlEc$HA+V@!B21)xM zsS_eAWwFBi*@VHP$ej9v@npopi9FR_OBCn!ULgXGRXKFbCMH;PqNlMOEkYmXGrRF` z>(#EpE(L3N8 zP?vM>`?ji+xfhHysqx0+l%xBLxdCHJim9B}qmJ4z9I6O$b#{BTJDR1dp2cvLv1gf; z3O?+Ya5&TTiDFNGART0zsEx4Nc^GwjJ5FVTkCgGu@l^JN&42e`lMOTTYt9q4?Va{r z&Foh)>)+JXX`h+(Fd1m!P$FSgZ8;;c$z!RnMw&X;{z+-0Rd1~$qg;ZMTF>o-8q;Ql z`+}v}8J2?-e@ofB4;`|3dtzR)tn5d+nDfs1maz$DLpf|-78q^shu;KlbYfn`;^XO! zM!ihi=6&x9z~ml^FvBs8~+(QmWqYc@SVeo(*u;3vhF&u583^pO7 zb2lPOTjG~vi_VdyW}24gl>Z^}J69~~K-mypPqHC+SWDn(@HMMsXD~?Ze3}e&f4i1_ ztrhoq3aNa2fY9cDu^Ev3wq*(vl z>vG}x<@wKVFNGaO;S&Ru$H&vnzxR!jqcf?#gLqwOhrqd z+t`?_Od~2GF(7}29U=m7+%dJSnLDayf%O1dO2CmNEsd_7x&o~VSF^k8JLU+OW;+rs z%2n3+^Jcsdo;(-I*^P}cW^Mr%LpSU`!-FIX{nh3voM)Xw#r3DuCM4YbNkA+HDq!nk zCF}E0ws7!(kK=Pcr!Yuy{|s@v4I9(95Ut$8)AluC%XCm^L_Hp+8oCu zdb9T`d-|wW9#QeM!l1QtVm!TTkjYTSBcqDXMPL1%>WQc(^=RuoxjQ%9nM+#cp@?{E z^MX!f%Ol2LzGu4=ZK%F2-Kh7L18C7sFWgb_b*t!B0w{(G;Jps4bB)8SFN9>YbCT4+ z$>b8)h?(S3OP}vac;QFLB%Ig8Y4=J0XowharG~GSx&K^@y>v5;Q(% zB^}*q+tg9p%jXm4dtkqz#tDL#j)Lz}o=-y7pauSBWoick;Mm@ZO0yEc5tb4{TaAOC zsDp+Wkv6btmS*#lWd%>tP;>Uo`v|l+LDe-Jbv?NAhDnQf9A~s3DfZHs9ofH=&45D% zmD?1Jyalf&Dr*n5))XsodcMi1>w}NbY0Re`umq-{q#@6 z*ReJeGUg8A?e)HpJKnH*6A4zqzcl7=`^U$!v|iw)bp&;r5~7LsS*dg&h`F9_S07R?raKa^y20wj8 zLZw+kE?^6bY5J_b>5}~SCQ=5m|D$5%C;&V%2HK90t-W%4RC4eX6+La%-zNW`YmA0) z0qC1wvucQkV?P5Wj(hzuTG4b&5B8J>CW83cy(gX+{?I#pjV1TOf-(*wiZoe? zSvp`l`5j1aY?dbb1*^MRgcmrN9|!lip-3Q{E37^xJr&1Y zV1PKD36^Z#SMu}QXuJM$?+bj$8T_|=MYarX*3@T3VA9t&NaN=2>_AdsT!z;V?F+k% z6}8_&IhTNpF7yxoT_Mcb;0guEE6(0%NLX|j!(MO)U+$3NBv zjH4Yh@>ZqYG*B8Ft6MJJP{5-SgLoBk;o=NB9-+$~r@Sns;(AM8YprB};;O!|dgHUo zEmI?pZvsLt1#bYw27*Dxh4w?QwL+e`tmDUD=mvv$*n-r#K!e`%wg=bT+`QqF{gj5o zW;X($I+ry!52^ksW7nZ)n;rJ4TPA;e`0zA`i#UGW0#V+qaRujLYOa+Ycq*HIyR?0F z0GAbd&TR;*+n|No*Wii^kcR{Hzv+E_kNh0LIM+}Lbep!uiuaUGKOy^&0cArU22Qgf&+dlOYuA7vwzQfCQ=mcT!(O%*4LbVl0& z3557Ya+@9P6P`BmD5utS)tb@wGPsh|CZnkm0GRlVp{aTJQffE3pINd(wRZ zp$@%Q2u}I5wrtY@5TVt|YotQGYw9{1LVl5!Z{ z5LQ{G2z+XvlH(Wsg3(cF#6W3B+VBC9qLuS9M@d7(2 zu&pW6gaEF7JELSJ;3Vl}Ee7%R=E87{5Ww}ac~#SuY;C2(qST3ivc(K zn~28O?!@ZZZUbguRe?~YCQ(SO%ZIK%Cr#)5+iO*i`y4B~#iAXjs*LJ%JOT9$q>6vR zTyBn(^!Kp^KT2D;do)VqE5Z853`^Cy1wP5au>vRT5PX*}X?VJ|%ho}Q%Le#ja22x-MZ19QN8j6$AdQqj z8-}QJaTOZfEc?`rK8+0aJFVE@KIUdYPvT1&xV*zGFXWc&nq@2;OlvBU34-JOjmrR` z$%f7c$eR3f>Ocm&thXjvx_>906YI7j1CQ?bb{(fZwKhjv+GG9b#2(bmSOqRnq26v& ztE(X&D>9xueHa7zJ#$c~tA5gqJifROO9?pq(W-H}f|$nT`S$3?5byMb&&2g8t;>eX zz=R=uoMH59N0}lP|G$b?)Qn>e)e6COw2dN(DW5=+fn7wu`?f!-f&gsxeq zzPH)qO*%hJ+x;gjsj;mk4Zd7u<_Vk<&_HT#ZJf26jFD7>cAiWSF z*RtugYo2y3e0tp1Vvv4}Au(uSStNRt z*tsda0q=3O^R>Ra@bt9umP48<0-*&z@)|S&7;7%aET?~iqmT(K4(e5}r-x=A_n(`= zkkx0rp|75a<#fF`FB_c_3S6+BO#>4{Y!7#(4t2}@u*R=0;C;cuGySOs9E6KzFM2z8GkP} z8OH1!_O9MOeo5i}?1mCTU4{2E#-#ULOZyRf1qG!!RC?nxvyyB`PEOxJi!~8Svh;)} zS|V1W_`C72t%lVsI-#%7s^6Y*&PSnTf=QfW9aLSu3P?9EFUB*0v`@l)Xw*N{xht#7DgY5%{JOwUJ9sZgT0Xe5u1tAl@(JTt zp8XjPgVxHEZ5|q3W+QAKwsxb-pZW$dIQE>AK;0vi)>*SY(%HGu4S)D^P3@~IN`bxk zhglrw4157&17*f$m=ff;(aNnI2q)+g{fn&YE|I5e7orx#f?VF6>Hfd90jJqoKY3{k zn~OD3yJg8g-W8PL7T6p5hH}j#0(W&@u!~Ge;=1N+^442m zv@(9V%pyNCwh@2+3udj7CO6|bJDS719BGbfLt5rz3Y@VD`)i>%X0^Nu>jo@8YF>~U zHY$$4@5z}BCa{E{S1-wdP?xiLFV?$z+}8FDLrRX>Mu_*4C{Mcaz{SFmmnqr~ih~*s zUG7V_j*ibMmQH++5^q$tR^&;ki3Zn?LOR+mW!#3h;Ay(C#J+n)V0F!zFx5l>1piHY z!Ev-+s45D|0_@{1B7^Nf#Yy_=e-C2o2?_4^rZdeRR8V{ z^ymE%PF4^N0L2Vg?A~B?P%9VJJmY?_vzmbV@iAzaQe$>pd z3NsR`xEh65$1vZM8aw^-5E-Bh9SMV1CZqKGzI_@jbw+ND04=Q=#ZG4=!w;1BJS#P; zDrDXrG%K&6?jLPN8b1(Cu%F3#%yb%Qpf%W0TUM^fzv;<5ZW!q@8IVE|X{d|NgK7;! zDS9gqQ~7?z6*=PgXMD)i97$I#y@p(BmXA4jP`5{z#5>NV^%g}ojZf-gUY}r&r!$ZI zx|+x<)&(`q_~dcHC`MtC3x3=TwA70a_LfF@CXt7}8L<=F!ewMT`Lqp{`dj<^#zPkXRE%q9PA@eYri5fxfh&@!%%4VCYD@MQ{%hrEG?Hh z*re?_3F`{?PfxPz_@!sReh3UROKnQ5`3vKEc;}Km$n%crnHTs zsPcVma3=y*NHEfBP1-|_z2#}=u7wyGTuFM;X=sHNdEkW7O1A{Z#-Oyx#yre~Tx4+p zBW?t+YOU$v%1@ad#ZGPWk(YdP9X8}h;7OpZ=Z82#h9B44{UkZ?;5B^<+u7RLE>~bl zeT1itckA|8@Mo5~DmKy#$MJ(0TTyl4QbAY9?I*JJRXFaoox06%gr;3ZJ@VKw)~%4W}ogwQz*bxb&$%7&(((d7XFiyES{?$TuQWi5?pR7N_abqnohFy#jx|a zxNRrxZrYw`Ov5~fb-md2*&(fe`CVPqspITR8~w<-BVtKXw$0#|>;g3{O1B>lI9$Vi zEY$0B+O$2u0jV}x9g4(iZ3Gz;a^|A=PBKyjXXdrX9vMka#&J+>$mtiRO;6tn%;{~- zL&Ud@xX$%LD0NLFaMGo0oS$IWA@{Q(l0_jc#xg zI%Bz78)j1nGTbTpzFd=;+|sm~U2nj3c#P#*s zt>nYFzNf@L`JYkO1IGAZNirZLlVlX>6d8jH42}{6ZmOP^UwsGhE!_*=;^IWocEX_X z{L-&y`aE>ke+59Q>p67J6} z>|pQ=XxC#JC(u6WM8U}wtG3luGf~Zq^B{Ilm8J+|7{;$P+VHI8M4CG8up;0oFC>5r z>76Hg2;wK2a01r$1e{V^H?B;FUzz!1-*Lt$OlasOa3F$fqC=~49rWfW7IF4Qj* zYnh+`&IUNBaKxk=UuHIlCk2(*ogk6_0xmnbEm{=5YQZ7MH79y zFVjvGroUw$+_Ul0`o`yh%QE@B@uaP{6rQA@R|nC#lq!Xc63TZjD}_?|JF0y=0n;clB_E2v)mwF&geTNT5UY&G;PF_R^@g* zp*6I<|3KK~xCOo(I*dNFfHzJ|G$emJ(RG=&(>KnUx^@M=P~(Ph&O)*7GKmP|Xub@O zyYh5p7#lT!Py!D+HSa7nxPj3`RG3Nhz`s<}m8ugi0hg4N{FyQb^lroFTa<6+8=VM| zaEAN#E)~?()f2n6n$e1}=;`UJt7`#=%0zY-2I8o_P$V*I#+V;E!J2V_CpzqNT5D>~8em%EziT25cq} zjS1=M1iwOhoG*M=uX$(x(X0|SE&KP~{|H~WaC*E$Xnl^b8DCrDpLV~VDf5cY&Nkq? zxtdb`{yjn)IoIrTe;wijRaI+y)_LALeH=XtzcrYQ1{(3peptf=e#ev>KAxAIw|v(h zJl##aD|h~VjF`pFW$Mcqi@CcZxXWSRAaUtDT}E>Fo3#w@K(i4IcULwduM3;|F;O?^ zbg|x%?-81FcG|Qta@)QaB)19^Hkf6ElDhP+?KaKRKJp*p-3p4l(dPwJo40_pDGUAS z$;+|2ZsQhuS%&+}%jPmZLWKln;3XId)(QeR)fne^HBQ%x`RJIE77=Tw`E`9+B_#m@ zpV$m^+<7<8Blu0>#)djBP2@)hnb9K@wUt=^c~XaB0liNk$MamCA?Q-cZ8@B!D`2ld z43L2VoeW_Vb`1+a7aPc8W?@BvhrDLrw^&J+J>gCBx2WvS9^hN##sOAbCts2zFXGEQ zv4<+!n{29ZHhhNvn_}{C;H#5kCZTm0~ zSEScFz~%aG&t8zE3?*sv#DzCL&&Wo_j{!r6aCNXcbyxr(Zl%o&jMo>8^DsK6s?IW` zBnI4?nrpH~R0L)_gos6iqH7+eFSa%_;-P=G@85-BR?-{9{Vlz`c3 zAGv($LIpkvDA)}YaFAuJmn4|IlsFe(W+m$5DXY!_YWq@Gns8>#Rse|tQXxAIuK{iK z8z6pfIEfn`GUPPCtPAu2eV#p&knJ!CrCBpZj0J@i6h0d7>|kosk&5{Cp+FALj=61| zKR_(*{4%j%c?=m3ojdx!i<5KD>>X>Oz04WoRDMZ+Nv}5sm|Zlqe@nfD*@LI4yGy#+ zUO_EcM`nh9276LKA|Mu`jN^G}(Q=--qKXcH1vVA2=njfb%{Vzb>LpVgp0?m(9j&!x zj7Fj+6A&^sO-Q{r-MnE>H1R$gGWka02~hN~zO;Yb99)Uq8#-3oU20f1Y%n{+Muvl4 zMZItUWH7=1d`ZQ?x}k+Klfy{=gYunviv_tOyZqiGF(DgLO=`8cU(2U^k-o{EpaSqb z`vZHbZWPuZOy|nOsIEF19@5Fbt9%t)f}=v9azg z&5`s%93ibSm5f7UczA-jRB60c7l7;UD($TZ#3VzW20ie&9cs9 zGX@y6PlX*cGXWrI3Cidb+1o^pwVhT>e|B~8)i{XxuWlo|mbM|XvHXtXMn?AEy+ULXJ?cmhiy`(ie2 z4ZzjAnYx$&1{;udiV-66X9$o*hoP)H6JlYqWfLX=rt9KN`yktdT9IJP&m_GsT^hi(1ym19mH zJFw1y>Yd~#5UiQ*jAt#xQZK7bcd;~`{HT4|$zY^5QDScNUcis>EmTE;7SgkK4akoI zH6&!FzCeaHF5S-`p3IKdFQI49r}+f(4oD&!a#y`Kpdh}hRR7O^q=D5{2PIwe69RiT zxV#vYU<`a}H@!5so-3&q$||~^a1kbkmzGBqDa!Lf`8qYzL*^4!9DDmSqws9P`(}`raSFcoeszlThJ&eWC-l2 z6S3VmKWJ!tSU>N;41VvQ6~f?$zKKyCxGt^sXehq|%klFq7YyJ}6{HiG3T~!D6~6p| zqWun$UQ-fVV+?Lh3EGp-ix45Dcgrux@|M{~U(^3EQq9zsn?+hASX0>hxqTzn-ss6@ zzfE`unHN(?s~5UA@vXE1=j8Ns54bnw0D|_qK4A{5Y`|RvkT|knxfHkh3$!x|CIU3g zBDVS=z3Vce5SXSH0xmh%F+9mqWOF{2eM- zfP+kEK>u4pI1_bnPoNR|Uh`A@PfNymS-x?5@lT2{Mx?U{&lit;tP+1vDS>v9B)|j# zXdgT;oi0HB!jL>rwOrT()L?3AYSNUEN&~39Kx49uapczc;-a6`!u0Hn#F`DMHM53r zk48bEFS`%SDDm4aSl&0{ZOAaIHi?{CxrwwgPU610sdx*@*nG z$6rt_U&N`j5oTCBGJH8xJ|+9+#g{|pI!gVxy+01pd|HS<-Bqi3v-*O>Q3D@0EDLNq z28aaMp49PUawHLA=9ZQs*!SpU!*#1JixCycn_zcl=e969kP-M|N>hnB zL&#lt_u_?~qxVKE5^FLN153uA@+g?o_OiEDxK#GSfc{ullqHs5$K7jMLHT;^v+5M*!P?|{B*>)2}qo*E+ zo-yL7MY*D0y?(jE(jW@Ft%k!!ao-;0g#7xsFE%4x(I?1HEwRaQ;1o$*EG=kDv|0jO z>v{}~Sn*TCV3jp2Lc_wKEo)EO5~kem)i@=UbzJ%*xKWhbP&k}ZF%B2b3Z6PFpzV&6*!^Vx;%;}=Gt_Mp8zix0?jy?W>c-^Q9 zkY6z~*c~cb(EH9|eMFXc6(M~e{MmZDafYLI<*@!YD4`|Ok7-Mxpfo_6|ECC2H89KM z1n3a3I#M4px9Gop$x=?6Gd_P*zS?UkQ*Pxpn1g3}0Q8Q@kBMaqXuhg3mahZ3*^AuT zE13W=%hAtXJv{+#%z-RNk9i5u!~#U$0YVtINOnl}isdgPq|S&0bArcSnN{O1c&qoS z`y5HSCr@quq9j4_ZEpsBSL@c>9rR!to;?ZN@|koYqXIAZ{eLbF^Op4VKD}^Y2ADat z29z9s=g@+=-sgdXsk$7J7z5PT=t?ty9M&RYY|n73_o3g|A*bv&0S_@dV7ODS z#emS7$58?d?>X?x4K6TFn$3o z;zWA}GpIeF+t#Q*%ckXsB=d!|Ga&<)pjT^wU}m#SDhG_Hm9g_m(?V&>{N1Ck_g)U1 zc%BJG-Oe~@mSq1@hR!D+A7)CHg5AZNNru{d=q~8uD~RX@JsH|O&#RPCkMsmLpwa79 z%H)Wr9(%S_cXaXRM8o@cplh_z4)+^%n$-ngu3Jux7cW$gaMN#1ofxjKUn>Tnjk{J@ z1_E=++6yt*Bk$v-Y*)ufL%+YPpIxO1o;Y^;62$!(otWEs^}$8w{Bk!N{y=(dAZtXQ z22y`s053s)@}~qW-Rmf|PX5}9k6EzmsTa*rux|kEyj~5lNW0xYJ8*~x8}UKmf3IlL zo64RVn&Ph1@i^YE!{uOg{XW+LK0NO$;BiwQ@MS3roqgsQr=F?@tZO`)AtVh zGBbcd&|>hvnKh|&O`4bwJ}@$F&P1O}68qRMYRAbqfs^jHmCL3UnD=>se}eoY@I6YC zUO5um_Ui4V5aM-9adzK9xIw2-M+$%aTp$`d##sk2sIxFlT5=%Z-T7RmKY8~0TeAS- zB&~`Lg!mRd{w&*HmH*5E7oH<6RO3db2=oCFEseHc^@3mCyncYS&7=q^AWyq6Y_2?D zvyOs?Q0tNd6C3y^2GJkG2FsNTbO+KV*f~8K$#G7kbAI2SeT(C$Y-Faw--#z*)cG8i*YD}O)*cy#53%=$wxybapUtO z6NAsoHOt(>=4DBC?I3PF_SyXkmQr_3xSCrAO60=g63}te<{DiMZZ)ugFJiYeIA~#5 zz1yOvdoJwT2aF#;OKzySe=q|9;zyw%Ah~Av@7xTv(gY~>8_rFXjo*Z%-x46RgIyT& zCs#%{=H#;9vZCjmbdh9ROVDdRKfd3zgUKedjGQ@fjpVU%%~5Ed|>oi z=~BedsUT&e>#2iom+TjLNtBvl6mXk)J5!*+H(r*IsNHOOPvC)cm&m?;<3N4+@81Jv z2_RCfVnWNx8dGgH{12^HI2!mrH;*>>zCP_fDT7-i9-kPP+O>6tvh(NA`5mz`UJTT~ zfjN?&pB@%&bJ>IHTneJ#eIDM@q^$l~OYNv`pnz{{jqU#jjpSdhzI-=7)J=wXs!8H1Rb-iU!99F%x(^;|tc-6hWkjLxonag!tSHpS8EirYFY+wcMwd*jSo_ z0Sf}AgJg_QSsff22x9ul-E)Ie-^qPvLts=|B*Rc#w}PIwhr+k_vi3TB|J>Hk^Zdwq zZ9b;1Y1M|mZ0JV%y#g7jLDplI5dSPK(ptny3PWD#3Rki0*MYDXw!v(tLB}h3;vCFG z<-04tOKI)Kyzl#Y3D?D zol)*lkNLg5(X`GJw9C9%Y2*vlL7eM5PW$7rsr)I4nwIuXt{Vl|DGfx{HE3JOqZVL7 zf}C;TNy$$jxyf%Obw6r&rzdc6UrD2s*Pw|k_k~s>rBv&^uxgWoJjrVW;~Nm)!Q&Rzcaaf{P(U}DB9-)D?LW~;>4!pxk^ZK<(UrF$Iqf7V=Rr? zCvbP=#OexZ^$~C6ae@w|&C5kYDaL0`LQx37)t@Z%WHYyg2jkRQbFpLp12v{Z<<*MSFK9UKi@|Z)NcV5@?rK*_bwr3!Nm4NPB(gmO7EdLii zUjv;8>AG~<58-1DAOl*Y7{s!U7_;Ti`skn0P&b&FL4QqARa`rwp!B=Y(kf{jVp!dz zBt`gj9>=eN@4N?wK2BUSl_n+S{2CO%{!9BIl7t?!Q^FjO(b4lFf=uq8K;SKkYNLp( ztcg=~9glQ+uhuxxY$CSD3b6FH&{UiRrzVfxbm=WA;Jxy`Ad4|lwu)49;fr_P?d?&o zVScl(rVP-#d==n>5fBoQtzOO@z2phk)bVy#1`j#LA>=3qaVbwUPGn z-KT*})kctmp7AY7R_ROG8 zs2N-C3ogqV?;<@rgqkTMoiG+3FH399@f!5$%%_1VgVqd^1-Tim0*{O8!&`QsSlVxUUc!PR3u2#&6oW5*k=n zx1YYe#4cv`PXE(!BkQGfhmpxkr2NcKQMH8eq6Il=Dj|?2eOUET02Em4V>=OE)%Jsa z(PQtac2!+mJu;GbPD2|5b;m8+srFH7=~B|v_3>&STt!4?()jOG z0pIwZwG~AVH^%DPs_FV8H0T%J!~pj3HksoAJ333v+)OT|j&n95Y5q=?>-IMk5*M1O zYD1Lgy*nAg6H!Zh6rT<6!f1EwT?A*VwbtM|;gA9(C&rS6SGYIX(IFj}NP%l&KDnco zewk}Mwp|E9%U(JF$TS+Wcz74DhA=3ha+gBOR1!ae2H_ z_di_@GF{ekPx}Ln91=oU%pt<;Yi&IMpR*)A*YZHhOai}~;DJQQFLq6XTf8|^#*c_W zOF!0LZ@bTG^(ZtiUG)Xm!mmw13y!*DjSD1ZDGmk6avCThu?n(80WcR02=4+jaAFFy zhc?q?Wj>_rt0%NQ19wm^91B*$)m%8bw28xnwJDne$qm)@32P<1ptoJg6auD>aNv6Y zwdpCjav-gNyiHIe5DkZe2TRhc zAW+}`!VU0J>@EVU!-8G13!mWsAb}9eg}ifv&v{b%|NA<Mno1TZ@3+0rlQqfAJAmITBK6#-CXBQGWmVd7Lg*cX_zRMDL}f&^zw zK=`3G3Piqi^pm>KYzsB1x*B8KsU_jbUtvq*ls}}`Z3O=C&PN1BUP0&($af@!cj+@c zc-opHub%YFI33$hpR%yje;f$ViagZc>j7tKOAWbaplGwjbMMpsAG$Eg3G?*YSW=&E zTRreO3s?hvlK8LUKlHdV$g&{#v;Uq$|D*K-`W7}qFm*Hh|NgSf1u3KD{{cvq^8bjF zqV=*Ae$osh5G`QF)hSlNIe||x5_)TIUKjj3zj*#-hXH~RbYS>D3*HX`H1UA4@Va~$ zfk+dQ+~JBx8@Zadm16PQ=SBN1p1lv+Op?}ZI5BXr>9vLN1<(~LQK2f^pZ9+4Ow47H zXEb@rO27to$$v3SIXvNbF}<56h;xxc`>JKy^B9Bd_tnzmH#G#L-{~07 z!_(BfE(3Jstj#ya-LnmGlrwvbrDNW2-K4{!>NTVzD?p+B#RGIZyg6K%w=6&Nwth4+!KD2PiT z#(z?hgmwBtg$~S(jWWNF(#C@=^J5wzn@k*%J=g=uKYdC;UAbL;bP&xKceDH*OE8lx-9!55yGN<*MKVb}Aa z4%FY*I7j#AmXYTk8$JFj-}Z3Ee?PQdTXGtR%{tQkmy$5Fu}O=BTr#G3W`d5a~Ry4-Y2-XKY?v$W-7(a`&+2Psi4VFLId=Ils2sm4jH`xew&JDW*QMg);ijDN46k zj7?+NJr1J7u7+Qpye%m49T%CT!8vwzPDU&!YhA{zF_aw55Wk)*Ot;=ujux*~nI711 z!@U&%1UNN3(0GPVZ5D1FSyKOb(}b)#pK#zo@&WL_0#zV@NKdLlvB^Sh+zf}A(bNQZ zbo1tb;r@Zi#xh^K#}%*BFdL{phS$9fGm%)4}j&-|FAjAEiHLwD~muCM1) zwNwoOH@N9W(UsCj_aB8KJZxa08g1R|y^oN>bYWYYK>!n(!#i@jsYW3&t}-wiN`L!G zpPv6(--Ri*vtMiSpF1y)BX|DX0dd*jk8-L4qw=aW^3Mo=RjqS9Ou|aus=wPPM;jO& zQZHI>Sg8a?smjG!H|*Qjv#8LBf1*>1{S$t(K!bT86zQU{rJAcC`BVG*teHBB+gP5Z zW2V+>I=n1KDzy!6i!I z%ep84Z^ieJcpf5p^NaK~EYh`uJ?l@$ht$21|u&nf=B+p&iyw2%__Z;ytB83^&&d=q$zdEn+&oMfRV@KMP78;w|5t@ zjrOUH)N0QnRXNP78={!aG-qkZQ_IETkrDO))-(a&E(PgBO8WUwB9Jx2)Rg()Xsf0g z>ESPAh9~#FiZk@JEy{oG5cX2^U#sP>#yeK#me&vzc^K*O!DJSUgGlz~G`+mx_xKjlKcvk;(*9Vg-rBK5MKp&?Y52vzCR3p~1w*<9!?za_%M-{!&gca|k%1Gy z^F!QAVIgDaDmxz3DPa>~!S2csbMAo;vsAzLLkS8(iBNAVFA7}y+IU(m??^Quor7mJ zHsz@wr(}(k>nTrC^<0s|i3+E4_c4Je$8l%*JNl^?Mdvero5Z-q{-xQV&O-(x?APZe zrR*G&n$rT4Qx9G6{s|0GSwL{^C#8=0J}rMm@L3F2?Zq6Oth{8gV} zIzFA1&(G9kdsZdFK~h<6-~?B&fCL7^J5Jh=4g?x^Q1_wi)r>N6k4n0W%du>jw35Ev zyQjC(;H|eJ8Ps`GIKyvax~=DMZ!fmy%u0CTx z)9>U8w55vJkdl;JlWK2>O4r&w^jM%c$gBBieRO|r&A(Decfls?-)-}^-dfk<1AAk- z{UyV4&t);W9^7lWUz+m1=c?W| zPo9enU(C!|UK!-;_0G(D;k6F+SR7Yh-ZmA@HEkNDV$h6Nn zqu#+xb|qzxU7P!m(=%IGd3gm1Xd2jovz!wMq{0Yn1w;pvDhn#tIbFm1eV<_OyQ!7f z?pD$I%wf~A9hBPf3LdmilGy>KR7ga=SNZmH7;;m zlPFhjc{o`qvC0xa!2SA}5Yq;v%o7sSmJk7oX<#dWH6egOY|)0@e`(Hz>|E`}VVUL$qZUB91%yEJ@d^0(ADwCtnwBEu z+WzNBiO5pMAG zVBNnc{RJa}$^WBx*ctNorFe&-B~J^07d+aC)u6%Y8G4sh$}U|&jZxO`DrBh=B)UZv z#Q7S+=+$*J1Ff57iqM0rSKiCX4a*kmQ8inMDeysd-K1`UQpu$5){PgdqBCGD4&-vQ zK=-}NI97wNXSK~+wnWX$S%+{bZGZD4cnKgBk68kSA*gW?fX*k2qPlKJ?~ZlU(n(%% zJqmq_ctS^0x*VnXGO&riK@1GQk!*qOmWs>E0j5I$juu!2bpNZ(zq_#@MWub2uMgC} z2yVnjnC7^6Xblo01DX_omHbyk@5LJMmj-GR(9oUI-yLERoBx){ARxdpkVZw8m`6BHu)0pV;bdpaIOI!`DdGr zN_v{6{m8PxeRJaHj z2*HT`A>B?1$KT+=h>*x38EW(5y?`O}45us5)9VU^O9SXg0PN%K?U#rMd8(axfXMsz z@%!De4CTU~@FzS!P#AB*{1L$f)A&pEq0QfIDgbqe%N6W|2)buI94{9bsQ19cL5VVP zzxr`T;!5tz>$`9d!ljxpOswhYX>mP0f~!5|&ZCQ|nHf=1++G$W-nHPykB}6ycW8%( zk+FvbDLRLztE{T+FT3z#0ZgDMpwIzO`V2)T11Kg7zs)IqE`A@ADe<=24rO9)HbTm^+4umLZFgBYZTVQrwfRt&vu%iQqeYcwhDLxo6b&F@aobXHc-yNqF z-L8-!W!Mv^CKjZGGRHi%pl&iRuV!BFTO`A(lnuxrDU9i`g)>FMAo$pwkmS1NNhNp{ zU?fU%_~oNS);mM+TJaB`Ee#Vv66n|hqwEQlr~tP(;GO_hBn2w|L&4#C7UYDl6k;6s zZC?#42F+`=n(4`Uu^^`ys}Wg7-qw6U2sbV6P;8?61L?Yj>$LjN`t`xIMoOZpp`o8> zuzu-tr)>puR$jG<6nU~esw+R?D+L0R+9UvjCJ#lOUh+ZdSQEaL{u1n2S=W9aTRq(G zAs*Pz>^fk-M1@b33zWAJg(~>YYOO-f&|>bC0d7X^rz9UDSmCv#O6PEU-g%$$gLJDHalHemd zFK_;=7#|`R0BP#)OE39&s8LH+QTKVG(h0=%T(p9#a^<1&z$_60nY>5H?ehwL$K-cv=$D4SQ58+%hp(VN7s=W`N=dT$E zORQlM-B$FH3~^+*;l_Ntupls!<2RWJX+C0ddwK?B*jRb$u)otVJ)iWOf0t8>P;B>W ze7zkIYBrcDPcu>m1Q`a;*pJX6B+k>(fN7{y!){TaEBGU^h$bS4HL5!1ZhbFl9jGAw zRc>}f1pn7W4QEp5o?luT2C%|ED=J2nHwS_NwFGx=>1e{d-Ot0?$$jA%)GBhS-f>K( z_4cTY2_*fTuP`Kw)wp3Ov9(t_R{ZUuRX#7Cj|Q3=O>jS(w#2t@+eDk|(rcgYV!tL` zoriv@J<7tc)8@+}l2%gRJ=i;GKxOgOB~rH2{@RzdjAW-oA{hdKj%KEcsKJUx*)-w}B$ zq}}L3+eJ67d4mD8jCzbl4qfkJd0tWAP_uIL=Bdo37Q7EBtox}F*e|@14);c=mps!? zJ<>PR7c|n_j`=6UhY5@)1Mmo!{8MFo$=}<)BO3Wye}$A4&X707N9QYxl5+?++-lGX zUvbhywX;smJk1AR1AB=mnw1jecu`di!HflSE^pMFJ~cz^G28Y1*T5i~bnTk2C}iS_ z&8+x9h#!>NN~LAP2c8CS>{11UyiP$tQP#qOq6o8E`$vIvO#Gl36Cal>Ehnb_&Gofm z-3%bM0FW5UDl3n3QiIfN8kh1<<`XrNr=52RSHA|K8a|*rdD(kqpsF+<_AJkAgNEzd zu8}DQ0M%>|m|@4F&zEFl(z{CF97=@0kX@%cj)ho#dUaK)C!b$in_zu=0b3(CbA}!} z_V9qTq;*8EHSvH_=p3ik#{{E|s6s*Sce7mUV(uSi`}fEhZigD5xOhj7LG0>nDF- z{nA|PciLvj=w?K3?@MdJpxymL4QIs{`r%BTY_ysU^9z$aUzU_-q)waDr-juoz^O0h zzu2X8J&iNIe&vZ^fJ%9c4oQ_xB!OU8v2GRyN)!;Z09r`a6~LGsP?0v6yoD%S07Qhx zY?MVsbIUk_1ZV4i&io>AjQp~=4Ih|VP;z=EsUp8riMr=}=CJ=nzdKrJe&%*dcvjqA z8veC7lDq!wvqK9FLWuQhN0vKk=B`bMjqOhUuU`SR(x~9=UcCHj3Ze>2>ys!9ghx?Z zq!dKxuT7XIjEpX*g_i&YnsKMJ`;m_B>)T0|wezx6`kw#C+;7d1eNX6p>J*Z4iA8ag z{ENwphTg5!80^#R{IzGhI}*nwi_9!U7)wMgli3Gu-iv}l&24-PYWWfon6hyUtFF}u znjc8-B&#F(hLi2&5__N9XwiXy`=i-slI^Q!XL4~0^ln;Acy5;o*vE2>QxDl!A}j;y3&S6A7~#{`VQ zfBytI0)sk%$yqE@WG_#qg=IiOFc6W|&#Ly7tKEcBr5a1Qu zDe$)mW|fZ$tRFmbiK#mTBLs`(sn8gb7&b4N^cg5z?5} zm9Bc6^uf%4n|sYa^oR(`=S}qQT=)1|$IzoOxqq{;vizGQlWYHZhS5f1<{n=|;>4=^ z_jsS)sY`stl|UXhZ03KXO{Y||bJIZqtX|&UVbZ<|isK2454ihhT_x7nC_Z}s)CZcP8uv6aDPa=O*Ez0X zK`?=FTnyBG$CucY$|Xew1pPliLE~zP_!(scb$3}MtTraWTULsy#LNzCKHwj*%az5h zFP{pjt*wsCT)pF(nj}HU_I17am`CzKP^yoQUe-20jFl7<8syiTDAbqg?og)%azoq8@%bdN3n?y#GXC}mNTy6c*a$v@t2?#IkU_-qo<2f8^cAhrM^c>4?)iW+4i<=9aRVDp&sdf(-4Xl4M38IUa`n``nU3$>_;y)bUnY2aUAvTT1c|iXldqBiTuKk7IN6u0CF0VFGYt*s$yy^kLke zxu%->u_F1D#Ptxs)Sh9IQ&OyLZQ;xw&Ticb_cnOO@48g;Jd!RReEQi8(K^4-^;P-Z z*g7mXiW(V__;tLA@NJo+DCy6cJ3C|C#eV;@i6sVK-_QWohZCP0+`H0D>3SIl2qJ@e zVAbS&gh<+nc<&0b%g*F6P(r_7=Eq7C8Od&W66dMx<1x#`kD8t9&Bj6Bz91R3d>2t0 zDE^&u5Ef{aF2&TKDCD@s-k|K0ml(gL!hk)$y6RUDh29VTYS3UaPlt&RyxC7yL{S|t z0+41#CrNA;Mi#2H*1(g=Sh9tBIn00<7#Z8@#55@yG&7&efLz9-QhM@+#Ybp%Zf>Yn zwQ9qdD`l9Kn>)1fhZVfSBg=g8M(Z?l*N(E z^C*httlh3cr~;*7w#fW!p3(CYF4}Xc)}m3u5KCMdMvdZ(@(_59M=a)Bn2Ve9tcU@O zaV(49eX7r6i`ORZcn?9CfA^9mx_AofOwaGMklIR_2y4sqO>9S)^Q6mEkV8@Uu@R&3 zL0G$(B+@H32AR{soAYN7w7~Es-+00;htogp9Ue3&pW=tW2ZGRt&%i45U9Ec(H!X8j zYa7f|G=f}qh(sqE2&li9oCS>M=kvuR5{AK*7p_H#m-U8z?Cb#xA{nf)vsC>3tGRt_ z3mUpD;kAc~%+Swq%0po$ACRl6N6jgZqXD|MsXyU{jjkNu8rmBbgBN9Lh^i#e zPQD353_MeQI+kHO;HdU6Qx-T`<-2nO(bHcff=UF5{g`j-hI?+$V#rq9JKj$nV7j`- z2{Q3{|B&}oQ9Ceh4>e*2ac7BL@R0}Qs?e-^GJO|W7g=&QXuy9mls#$=EfFle>?xbX z4n`}Sru{rQpZzNO&nGJJX-L22EcY&D`R={Caau6RvsIo3Gw}Gz#rZy(OMkpN^k&?T5MJ1C!e{x{{DvqZku8Ua(98G_aw1|l4aLnI6sfmcl@<10sqb>i7lrHY(6 z)Mo#VGk$D#IX-X^2RhU^Z9KCl%=2vJgpzCLMl~CM*Gm)T zUjJ%-(HInk8&izMFfJAT$8O>ViI|y%k5s$yNJgy+dcMXD zr|)QCcz92h6(*Ngq#k981REP_o2m%zzLu>agt}LE@H)Z|D9|pTQt3&J~nlUK38Q>(9qCeSJ(6*TcCM7 zP+Hll<(^o$Wy0W#U!D5%t&xAYz@3o4tLwKCjI~SucF%63w=Llb?0@f4f){imy8L{a zjXh6U*H+UgPGIhtb9^M^dnwvDMoWx-OfPZ{>_qN)+>f56E}=O4nfv#PwVeiDOq2! z)WeY&+i;pLZap~~WGdG|Y4{(c(Gl(!d>+HbJ6h#sQLn~EQF)edL8cpIIsTp{ttV~n zI$1P()Bl{mXUs`WC{Oy97OBw04)1-uhqkkGKns^JfnL$VbGU$kz2IOZNXT6w;UsWMUF z%C9+~_%N5t#L#$CqBp@Bu|rQVRaU$8ynCgm|FC_AXOFls6iA6_7|r~8@)rM(Jawwb z@tBC|ma{f%HGdtiw>v=3zddTsjac1zL0eC>M0e1q39F zjMnbxG~TpPo;u^l_gHhfKBzQ*IQ75c^*0RYc*{^m8>IGmJg}@Yd~tj}*3Z1C5~4qQ zD!cQ%FA=^ptLSW+6s<=m&~J9jYX0Woz-;+{jEQNz2PH;|e0+vWIDd?llX43549Cpu%;2HCntkk@CH0d`b2d*N6nzg$(LUmnD zP%qp&HRa+a7YyIxF`KsDf5{+9VN7XCqt%72LLU^`ybuehRTLZuV2mrV2;0Qv74nc~ojztjnVhkC@yxa|>dP>qkkqh4 za%KF?wUD^J3pe+08M78w7ix8FTXMAe5ACBgT6%72Y51c@=ICg})(eQC)7h?`jmyBX zZB)kc+vtPj6v1%$FlKmYy=h-+6v+JRyw!IQ&T&qW1DYYEi3z z?J16qw@VbsQg#-nZ2Oil)!*(v7{X5xRrk2TD+N{JUQCtP>xWS>VGc^?E&OYfW^Pv} z4Qp}k98CJ2k*x+In27TaNQkJXEDbx8zEmN5w)uU_X4Xp*>@JyV*-dGlx-H}Af=fdO zzUi2b_+nv)KjuP7d8HAQvtkWiBFxTXI#I-k$3e+^-+V&FA1M>KwKp0wbKFyK> znBC5qzE4AQg@}X81))LsEtBB5%LhTu#0y~m8R9yWcHS0L<-P2#5;?tf1jzUj6!aJ< zR90>d2(@YiTpVDfrymaNu?yhm^xXErAKGpsO2WepIxxgdA6bQ`ti&K~uz}BrUE9cA z{yoL1p<5sARAlxv_}>$qMs=8N4{1`Ju58>H?LJhI=y&l*2C~uSQNDX&4YQE1i!of^ z?2Bxyl&{v_o>qRVpu*MJCtkV(`xA1G&+uehI&HX)pHWlSf zJ9_wxV#wIPEkvnO zkEp2072n$d=fn1QS(Yu0!Z~7cVO)PECkZW)!*{Qy7kukml@VFoP6YWduAVQ39d-0P zdU1jU&f1>1J^?a_R{zIj#Ng5C%bsuDb2Lj{gQ;W~s2lxWyeP2@!5Kxpd~Smu4yqro zS$SJTe0@`k7W&QXg#`s!ee~!@7^wGG>L>AE7?>D7*`APDB^u#IqB=M`vW~Y1+ZLv- zY!AxCH$T#Rp@}GM+P>nI^9$7GkN}YzWsCAlf(+BYB?%~$qwzB>ievgj~#l_6@KQJLn& zo{>>%E0UA^_V#RVcGP*7c#hjF#yyPiE05jx8A=hir_SYy!rLt^TOJlae!4arDK01^ z1N|`ybPIcXq8>}aD>f3ShD7o`E0=oi%bOMJa^s+rOw>`N&G8C$es<+qrpeg}5uU69 zM~`o(*>17K@D=!FUj~_RqhtM=I~5kG&``FhhHG7uD3Vf>&WM~pe%BkR<+w}j+mQ`m zT;Z50`AE&Rk4IeC!akORt}N;$;Ommoge=QINU@LlyILTo&d#h5dYn zkds(Qaa8{zguJM*q9V%ZdDBrxTie*pE&0(y(ErZ8LuAg?Zb|4eRl6L8Y=~VP>rR-K z5()b|obmp}DfEq9l;veE2Qulr?N8O$d-1M9D~>$DVqiPM*`~DO zLFybIv1*NF_WLFlukYFn&07ehBF*L0y9+M)`u^USQ<3{|*bY7(*%d|9c8#K5{OPz& zu_Yb;*~Q7Y(ODY@Hp$txjPSH^GA{l>yUh%U?6olCSzTZ`OlNBgOB^eLRxu;JptSHa z?a`;E+gr(zOPKM}u7nB9Z~nw?A8nyAy>x%wDMI-T|H3!QrryW*i`3XasplM-Nb}m= z!^p&I4Ppn!v~mvYPmrel{CmHp$@JETOD1l-Cs%iCv{}&@)2A33Pk(^lEHTxtH@0U- ze&syuf?}Az?I*peH7ITQe1VWs75#}L+eq%^ruZ?vzvekeOf;z2Wa$G`*Slov{Ew=d zMb8(OKY4ZK)NJJ`;!)-t{DL}SDb(X74)wy~H&(Zi7+0Y6aSy0$qH5Dd$?I0S(uG$? zRQ!<)WCT$8#tlB(ubCIj5B!;YUyuGV|BIqs=mf8`11`G-5f~YrBl7i?82d{$y8Yqa zOB|V4H62@i(Qxq ztI*LX=gl%ZBL zqx~{^sY5`~H77CGI&2ZIHp_R=EdK4K%;@U%>1=v!ZQMlO3-7@v8&s-s`VX^T=|oFSeid4Y`Find@7m*hnuvwofjG7YAo#gmWkFp&8JkfbJ@_}e;@j$A)!cu}eh zK;Y^+>yI>Q4=xFbCEy31$%OJFazc)p=N}03zUnmV%()`<0I9he4e;!cq8n!ak9PoN zhECWae46*x@j@*y9*~)?d4|<5UaCQnr7$`14@Pa1U6EnlWt~e zx)ld@0Xdr*v?~B*Ly2l_(xxU^XIs4mt+|@t3~$Qg+K|uq@1t6stkOd&kEF+ah#H#1 zLCiwa<*uM-m$T;@-VXSFtT!Lu(I=U^6+tTFtTv-v9JWZ+wA`TTww2LW^Lj5 X|9`=ifvz8L!8=(=C5cKg Date: Mon, 2 Dec 2024 22:55:02 +0100 Subject: [PATCH 15/35] Implemented proposal (a) to update image and generate via LibreOffice Signed-off-by: Davide Scano --- docs/v1/README.md | 14 +- ...embedded-plus-single-remote-controller.png | Bin 0 -> 44622 bytes ...embedded-plus-single-remote-controller.svg | 271 + .../embedded-plus-two-remote-controllers.png | Bin 0 -> 49551 bytes .../embedded-plus-two-remote-controllers.svg | 311 + ...mbedded-plus-two-remote-ha-controllers.png | Bin 0 -> 69904 bytes ...mbedded-plus-two-remote-ha-controllers.svg | 518 + docs/v1/resources/figs/error-report.png | Bin 0 -> 58359 bytes docs/v1/resources/figs/error-report.svg | 244 + .../figs/psa-metadata-translation.png | Bin 0 -> 40826 bytes .../figs/psa-metadata-translation.svg | 767 + .../resources/figs/reference-architecture.png | Bin 0 -> 73961 bytes .../resources/figs/reference-architecture.svg | 16689 ++++++++++++++++ .../figs/single-embedded-controller.png | Bin 0 -> 30763 bytes .../figs/single-embedded-controller.svg | 220 + .../figs/single-remote-controller.png | Bin 0 -> 30948 bytes .../figs/single-remote-controller.svg | 217 + 17 files changed, 19248 insertions(+), 3 deletions(-) create mode 100644 docs/v1/resources/figs/embedded-plus-single-remote-controller.png create mode 100644 docs/v1/resources/figs/embedded-plus-single-remote-controller.svg create mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-controllers.png create mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg create mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.png create mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg create mode 100644 docs/v1/resources/figs/error-report.png create mode 100644 docs/v1/resources/figs/error-report.svg create mode 100644 docs/v1/resources/figs/psa-metadata-translation.png create mode 100644 docs/v1/resources/figs/psa-metadata-translation.svg create mode 100644 docs/v1/resources/figs/reference-architecture.png create mode 100644 docs/v1/resources/figs/reference-architecture.svg create mode 100644 docs/v1/resources/figs/single-embedded-controller.png create mode 100644 docs/v1/resources/figs/single-embedded-controller.svg create mode 100644 docs/v1/resources/figs/single-remote-controller.png create mode 100644 docs/v1/resources/figs/single-remote-controller.svg diff --git a/docs/v1/README.md b/docs/v1/README.md index bf2a069d..d99511b1 100644 --- a/docs/v1/README.md +++ b/docs/v1/README.md @@ -29,7 +29,7 @@ Files: ## Document Figures Each image in the specification has a corresponding `.odg` file under -`figures/`. These are LibreOffice drawing files. The files are rendered into +`resources/figs/`. These are LibreOffice drawing files. The files are rendered into `.svg` and `.png` images (for HTML and PDF output, resepectively) at build time, using the `soffice` command-line tool. The page size for each image should be adjusted manually by the author ("artist") to just fit the image on the @@ -39,9 +39,17 @@ screen shot below. (Do not check the "Fit object to paper format" box - it will change the object's aspect ratio.) ![LibreOffice](libre-office.png) +Commands to convert a image from `.odg` to `.svg` and/or `.png`: ``` -soffice --convert-to svg --outdir resources/figs/ resources/figs/*.odg > /dev/null -soffice --convert-to png --outdir resources/figs/ resources/figs/*.odg > /dev/null +soffice --convert-to svg figure_name.odg +soffice --convert-to png figure_name.odg +``` + +Commands to convert a image `.odg` to `.svg` and/or `.png` and move to `resources/figs/`: + +``` +soffice --convert-to svg --outdir resources/figs/ figure_name.odg +soffice --convert-to png --outdir resources/figs/ figure_name.odg ``` ## Building diff --git a/docs/v1/resources/figs/embedded-plus-single-remote-controller.png b/docs/v1/resources/figs/embedded-plus-single-remote-controller.png new file mode 100644 index 0000000000000000000000000000000000000000..377494c2044f2dce5d91199ccc93b9866850cb27 GIT binary patch literal 44622 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 KpB1UU`tToUuD_W8 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/figs/embedded-plus-single-remote-controller.svg b/docs/v1/resources/figs/embedded-plus-single-remote-controller.svg new file mode 100644 index 00000000..8b0badca --- /dev/null +++ b/docs/v1/resources/figs/embedded-plus-single-remote-controller.svg @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gRPC Server + + + + + + + + Instrumentation + + + + + + + + Platform Drivers + + + + + + P4 Target + + + + + + + + gRPC Client + + + + + + P4 EmbeddedController + + + + + + + + Entities + + + + + + + + Config + + + + + + + + + + + + + + P4Runtime + + + + + + P4 Pipeline + + + + + + + + + + + + + + + gRPC Client + + + + + + P4 RemoteController + + + + + + + + + + + + + + P4Runtime + + + + + + + + Entities + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-controllers.png b/docs/v1/resources/figs/embedded-plus-two-remote-controllers.png new file mode 100644 index 0000000000000000000000000000000000000000..4560ce089024ac77c65068cc4f5005581c8f95eb GIT binary patch literal 49551 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 a84sW`6;H=ED-;ojVj1e0-l@@Xi~U~+PQZZx literal 0 HcmV?d00001 diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg b/docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg new file mode 100644 index 00000000..ee277657 --- /dev/null +++ b/docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg @@ -0,0 +1,311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gRPC Server + + + + + + + + Instrumentation + + + + + + + + Platform Drivers + + + + + + P4 Target + + + + + + + + gRPC Client + + + + + + P4 EmbeddedController + + + + + + + + Entities + + + + + + + + Config + + + + + + + + + + + + + + P4Runtime + + + + + + P4 Pipeline + + + + + + + + + + + + + + + gRPC Client + + + + + + P4 RemoteController #2 + + + + + + + + + + + + + + P4Runtime + + + + + + + + Entities + + + + + + + + + + + + + + + + + + + + + + + gRPC Client + + + + + + P4 RemoteController #1 + + + + + + + + + + + + + + + + Entities + + + + + + + + \ No newline at end of file diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.png b/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.png new file mode 100644 index 0000000000000000000000000000000000000000..12f6a822459eff87ff4f9f5e71e87fe469d9d639 GIT binary patch literal 69904 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 -H7Nqck5%Cv$%ab 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

ohNEi)?k1AX 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�e;Tgm+0ra~iL5)3dj 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 E15W^U1ONa4 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg b/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg new file mode 100644 index 00000000..cdd754e9 --- /dev/null +++ b/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gRPC Server + + + + + + + + Instrumentation + + + + + + + + Platform Drivers + + + + + + P4 Target + + + + + + + + gRPC Client + + + + + + P4 EmbeddedController + + + + + + + + Entities + + + + + + + + Config + + + + + + + + + + + + + + P4Runtime + + + + + + P4 Pipeline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gRPC Client + + + + + + P4 RemoteController #2 + + + + + + + + + + + + + + P4Runtime + + + + + + + + Entities + + + + + + + + + + + + + + + + + + + + + + + gRPC Client + + + + + + P4 RemoteController #1 + + + + + + + + + + + + + + Primary (Active) + + + + + + Backup (Standby) + + + + + + + + \ No newline at end of file diff --git a/docs/v1/resources/figs/error-report.png b/docs/v1/resources/figs/error-report.png new file mode 100644 index 0000000000000000000000000000000000000000..7df72db92f733e53540128942c5c093451ff5ca0 GIT binary patch literal 58359 zcmeFZRahMDx-AMJfeRF1{!M` zIsAVz=b3xWv*z0S=A4`JUG-D-JXO`-t7D9}Doj~X3hNo^GbAJ=EE(zdsz^wWKO!ML za(asTaO7l<)EfzD9VGMqt-4p{!4jGmfdp0G2~__XH8nRA@;fY``14(9G;3KEpSZl2 z65(gdLeBvD;i`q61z)fqJ$t13UOkpU!AF736RK~8e$GqxxDyKdq14pc+zbYTo0slK zMqB0&p5y*raaKb-Wf(7M{;W7T-e%OmRD@EjQvvY^*w(yJnuwmWC1o6Hx z*YoHXe9*^qN;wfUNo13i)1hXO<}Eq%o#Q>UsqQ~RPb>E0`hH zqajxM$QEr1JLBNHFeP8Ex&x2bgp@yXSLUV++_FiMDmmam8{Bs%Y)8Q%wYFcQD6y`q z_j1ZH1=_*@YWg+pM`Wihwhc#iS8NopR&4X-8Cty`y|ntPI&Ng(m~;{ms({l&u@sIx z$n3B|V`%#rq;oTi`zobeVIljlB$3xbnsf-1y)il&3Sp_-*s0Gj^sxxkI#Kc;@d?Qf zTA5C_H53T- zGJB*r4#vO^PFBlC*LRMh85b1mo%USS2^K}l(}ZVxDmi+~j3ggeC@ON2`1!&!`r&tFOUmfB#PziVR=rXk7 z!Q)!H8S9Rgvj=xgByDW}gjn2YaT z-(K;YW9#?2UJ|@!WOu%7tSZ%Nqu2+`i_HoNfNyV`E)WL1V>=zm)4Ep{>zq1f9(*9# zt@m_FThY6-FIfTulrHa{5Rd1PYcD&uUb?L1aXaXq-RF6#^tvvpBe7vgD{wrVDL|n2KyP^4dI?>W zCxH|?V|oX6Kid(_A%)rEiWvv&)!B@s84<+;Q$GI6#eq#4aM7>iUyKlg0{GjPu2Xn` zuM;Y&_(0&(c(K5MX9PYus)Z4;0-rKO>}f>Ft24QsPgfweR2q$Xb=kGaV+qSRHrm+L zX5-FlMHlN7?PIB}H_R?gPh8EMkZauMdkV4eQ{9`;mvWM%jvXHpgDKzori%Cj`0Ojq z?reB`(Kb488*22I-prO!%-L0K(;~)96*hz3z4=Gv_mWW|)nqSq7InSlXONB7Zy-^q zS!`|V?@_;r_m6)^2Ey4W^407Rx9T6DfW*n|~Y!5mXLOP-Zd0sO2g!B*{C zPY)08u|Td#azsj@kB1hQWj>p(s3{+lC}yLFl;aXab2Q`AhR|LS3`1aO>@WRI2MN7W z$aljzjF!f5VI+V4wMl;l71H%3!M&g)eC6FlowXOYPz;7OXCZCK?k@7n1Wk*YLhlQ^ zzOBdB(iDtS<-f8Ar0=3h98gUKJVUtp*j!lpJ)o{?#T(1npONA2A?;9P z*ul_J1UdK?U&!OY46#L}-Qa_Bzbw$x8&_Yt28_xA)`&4ukr6cpiX$#)wSVl>@qM;8 zHssYtZveR&Q#p@FJmmk>>0`8LD*g9WAs0PnG`&K*-c=i+Q;ti?*Kj=RZ0kS8R&yr` z2PycXTcOR4*G@@pN1CiFheJnA0zw$Se ze${q+F_5Tmh>e6!_30V~_OSj>$E6xEj?cTu`(Xo9-+x7aNU`r8K0`+l`atV?L;M&@ zEP05W(PUph&f7Uvd|nzy%f)0nV&+&m?{~lCr%?gvjP~zqayfaLv5jdl)ah-P(-UqjmoAQ>s5jl*I9YuxR_s8zxf-%?t6>6k3Hwg%`dWbUiR-}*2aD23mwcxD3oC(s z5dUe5>nB=W%SoWM5FxoxZ+RFqv3fN!Isr1?Z=-nAFW(?3$3G&F-yiH1C#<~XPnJO& znw;T4KWiT%<~4_?0q$KwSe?jBLml(BzM6Ee3ku!y#Z^RG#Sa7t_h39{EKS0J^_Z;} z>FVhVM3+j5elrgt)=~r%ToO^Fx(|kXrlC(cJelFLC5DfX-eGxATkitkHE!{t_%Fo{ z>xt1n3)HxgkX0?rEv}iap`91YlpfH<><=zs1lIU_0D2Ev_@FA~i{1kVHfwFBdA3p^ z9mV_sop(ADzC?xEK|xR~Wlr$^cKG_t>GClIH6(f=pvu9{v&mz`8F87Knv)zFfy0#0 z_w!8dd52UAN1zgs%l0{DDTEqw=(1I<4+-z4#?vFG;6S&# z>y3udWq(;(iIAgwWg%)fS^BzqW8q96>S?bNjEy9+$upZ6Ma*R*QYe-)b^;?KQEh!G zp8YBpeU^@j-RUPI9cP;JxtxOhq`_yFK=zt<9=sMT@Akd%uL`V4me2LNW^_HZW^;)P zH40Y;E2C~S&s@t4NV;yg__V>z!aRx>mfdPFVx_bes$p1Ll71hqPg z`P20=!?w^qvM1zqT$Z;ie7fi&`T@HN%oK#m?Rvn7W1R(?#RR_6YMJmauVm+l4*8y{ z&ECmFoL=abn{B)X$1ZoZs-50#{Nix+G@HI~!#upi5_^2Gd7O>mMK>rvuvc%j)XcMa zYx2c4Yf*aE2;0|X#PlGQgay(T3Q^Kq@%aYSs>X{I7FT?h{9OVDu!&_{1u77?%Zh<2 z1LG@QFI`S9p49QsUwTH3XN?C1NNFng&=6E4PY z>Q!uhD-_e41pl}X>BD`@Xabt=tGyL0uCZ>jlZ3Eqy{B;(*XgL`N@GgK%P zY{+M@bBam+x&Jb!C19ywAhupbKax+9I}Jtp&x!Zh68~R_pJ_bmHj@?|??MBf4H+OD|UMVd5{>M1fbp$+G{Js#FfK%olyz&D7e z3d}~}$td#R8D-BgCAYzy(`RDf!Ch!s?Dt(+HeGuyh27mYQ>t5+{a-6lg#p?Rm(QlX zrrZRx!G<=n&q&+jbMEPbX5XEarF{A-dKNw0 zmSxd8c&9B+EPO5%FpprIZBt9&2{hO7VC!gy+`c{Oh#DYQ3Fay;7zmG;y2}+TO_5U0 zKJ}Ss2#9#>y0Nf&@ERQCTsn-Ks*#tRW_C{G3Ig4>cSw=w)Cp?lw@9D5OaUI+?0(nx zlSr|_;@2M->Q-B8)g*lW z6v)Y2S-v9;W8J(m77sk_@j3R>c{WYaAJ0h~;x1Ey3X)sygLjgR{X)2V^J`6i2Bv5-|x80q8)BfqH9wpwtlS7{{6W0j4Q|`!-GTE@}-5FpU*r41S z_%>-rF7z=D##_C;BJ&8};-zLTj`esw>x&!V?EWqvXU2qUtThCWkbu(~_6a9Zz6T

o<_ia({CI?8 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�ii7+` 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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/figs/error-report.svg b/docs/v1/resources/figs/error-report.svg new file mode 100644 index 00000000..ba62cd05 --- /dev/null +++ b/docs/v1/resources/figs/error-report.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + StatusCode error_code_; // canonical error codestring error_message_;string binary_error_details_; // serialized google.rpc.Status + + + + + + + + + + + + + google.rpc.Status + + + + + + int32 error_code; // canonical error codestring message;repeated Any details; // P4Error + + + + + + + + + + + + + int32 canonical_codestring message;string space;int32 code; // vendor-specific codeAny details; // reserved + + + + + + + + + + + + + + p4.Error + + + + + + p4.Error + + + + + + + + + + + + + + + + + + + + + + + + + + + int32 canonical_codestring message;string space;int32 code; // vendor-specific codeAny details; // reserved + + + + + + + + + + + + grpc::Status + + + + + + + + \ No newline at end of file diff --git a/docs/v1/resources/figs/psa-metadata-translation.png b/docs/v1/resources/figs/psa-metadata-translation.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee5392ec0f58d18e4449508d9ee1600c5354a1 GIT binary patch literal 40826 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≪ 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°Rw@UqG0d2%J6D0{dc&@{Hc0an02k_xbIDqFo# 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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/figs/psa-metadata-translation.svg b/docs/v1/resources/figs/psa-metadata-translation.svg new file mode 100644 index 00000000..a83eb292 --- /dev/null +++ b/docs/v1/resources/figs/psa-metadata-translation.svg @@ -0,0 +1,767 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Config 1 + + + + + + + + P4RTServer 1 + + + + + + + + Device 1(9-bit ports) + + + + + + Switch 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 9-bit ports over I/F + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Config 2 + + + + + + + + P4RTServer 2 + + + + + + + + Device 2(10-bit ports) + + + + + + Switch 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + 10-bit ports over I/F + + + + + + + + Controller(P4RT Client) + + + + + + + + + + + + + + + + + + + + + + 32-bit ports over I/F + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/v1/resources/figs/reference-architecture.png b/docs/v1/resources/figs/reference-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..02e48e7b0761901c54a810fcb173354c693a1a84 GIT binary patch literal 73961 zcmcF~Wl&sQ*JU@2I|K;s?(QBeK?1?O@!%3%g1fszf)m^tcXtWWjXMN)Cz-t8^L#T? zH8sDc=1)Xn3C~n3Q$Bf=o+Z8HA0#zeXG5&B`BTrIn@D2U#NMB=PaotR|LbmKDj60$N|gUR`1k+kP&nFuhuBrB z0kr?xEWk%i_;2%#(!ivDtw(76e>Lt(K-uljLZnM)(UwITlBZCP|wYs?ayZ=X?XOrJ#rj@lXj`RW@5VYCE-R7*lP8%DGQ z%m2FX$FlI-w}`nvJ-Ghy!>_tS(*Fnd6cGhy2jKhHr@k9-zyr4D2JABXrAPhar~=1M zddUyxa1PIDp(M&!V=(_FNjH8~CtQUW%$9mknZ0cZX3s7%<&2?MJ1*1;YardNUi1gI zW`k}CXekbeVhrL62kNdg(El@=1oHAF_z|s0sJ~nQ7h2GiuO2e|ALNrZB*tp%M?P{# zIN%wZXmvC<5s1DkKqTM6!s1CntHde*)$1)=gV>Y( zkjn?_ikY%|l2+wkcVKy21*FueHefMUX{}pI4bPC*k_<@~C2m7*PkZJ+gU5*{tG*^N z^|XkDmL7G9j&Z*?(9J{y%5`LZLKhSTDs{lWJQvPLmTOxsHGE?W9kSH(B6WJ)ap1uH zC%}rrk8^?bh!F;eG6%d}E1Ur24UC6pNn|HXtlESde@QvFj01~-2xS5aY^e(ve^+$C+_P=XxBM;Ma${@IVk ztao?fD_HJrdO5fJtcB+13m(<9s$`oF3l2KKv@ZcD{lKq z@y1q!jF!Af<0gXE+KVx`Z&h@)ml$_Yqn_cWEjs=sU~*XPg%D}P_-9ea>(HJ`3aITQ z$%dm)RHz?8gdfZY>P3^FjrvczM&#YJ0<6i)7Wo=58K*UUW{{Cz(Vf6lig}o%JD_Eq zTJTb;p%AQtY?xV(NJtk>wK7=B`k}1B#ex}M2vE2PH^)fnBG4{|jjYqt$75W^g?$rM zfS=UtP$G(Er;8QyOjdhv5MBQ$Qv+{`3mZf+>hRa_+a1UzVyOo8w*040^$Ve)rbHv)ml8x5P2 zUD*MAJrTMAqrBiF8v>>LIa61|f2O67ey9$dOF$@{jV}vrQk0Z)@88k72lWq0BQv3V zgo`}kN|b$z9~MeS^Om51+|(kgq9dNJ#Fn)M|BxD39@|IbVs>tiRqG|Ls!^rmK9=57 z>4RUDhiDSefPt2U`8I8ZU(bQLAxpqsHKWp()$ShXoA3^JvDu+rX{|2uiAhH{qv#U>>#ZH zOoZ_OYgnrLc0AZ;;VUIC!TaxotZt?N*6<;fNTLf&yl#J0|6w1r_2QOHABq#<726PL0dCaV_(#Db(M5l z$87N}zT_`*5<6^h-MN}IY0bD$(gY!lWMa2Xw#8d)9AlDoVf`Chi+}5tIn#gxf3}`? z4#JO^bX}d5`HPo;cz^(b!>&+IG=d&Dy|dOKk4yHp z7co>|QZWxGa!A|V03(57?ZMrP{8^ibGMXLP_+96fQWJ?BM%6$H76`fm`~GMA+dmmNM{zp^CkX(+GRE=w{4FtI4q^{ zVR~JqwVl=jtSSFG10%*Bzbf^WO)}2^ghC_zC$e-%LL8b?^H2@PwEc5rC-f(U{a|33 zso&dR?78vW-%tF0Z@9s6cpCRRjWnsTw$G>R$snUY88l6pVL#})r;(NvIF zHL0_!mqeiKG4%}NTm;q*8Yc^9>-OAt?B2LFCStFg><)i?=y_R*}Ti){9D|E-)C>5yB?FV4u=?9p7M1=vr|oB1=!cDNI(E$=&zfF>reFa~n|;;xW2 zYs?1fu7>-Ut$)x2)h(l>dz0_x4O+lKJZo7UfDsdMsA1*L3szZbL(d&{tq2jJI|KN9 zP}&qF;hw{3i;l7t^+Fv(U<_136e49Mtc+-|wG{D^gRnBn`mMg{8*?t(eai1CF;*DB zt_way6!W2$({^u&o97%tJT3h|usJ6$=}?`AD*w;>ac;5zx~-Tx%_{fTsl#=fbAh(B zkW$gTZh*w=TwgGs@l85S4g7;q3wZ)-JF7>pVyQKWq-nF4#&21BU zoAZ+VO&3lutDffkCIj+nVN^j6tZY4h;(suW%tvqK{{@sj9j zL-g^DQ<=&}F?FY*;xT@eqYMSQZ;9C;y0PqFl`uiO|8o4UQOo*m>iul~tcSu4F=gy9 zF!?Kd$7_}Zy))p1o~dN>ARr?=u<)d{Y0Y@TGRM(EO8aqi^k=}&N;}vf>qQ#iA0S#6 zA*O|}dmjSlfs-i0$$;o&mOq%uNl9J5RrmWw=!TbHs^`uLg3)x*qJ)^D1-KNd#P!98 zrod@5a(zt1)A4)5xuoQU^!(j(3ke)guwkp667HG+Zb z9UU1hMpo=fpV-Wtvwv$P!2&)V7$znN}_cC#%hXOxOs4AUe0BwnID z*}gKYFk`V`+f=ZG+;WJp;moSljj*RTiJ3{aMXbXW&FW}H!Vm=Ycvl&$Qq#5>zjfr; zD|H1lv8=>5oT{3mpz919_1`T#e>I!_sr_9@i=0P$i$dyAqGxcj61UP@6tm@}?rYTI z+C;ULNfrW{vX7>h#1pAENgZLWxs+2zyr~``NYpz5AwuhG^iZ7XN`>xtyoZNZ){jm^ zUtgtJ3%#j6d(zixezRZj9ij*s=CIm7pG;AZMe{gH* z#>vDO$f0|)Nk7$}8JmrrxS_g}Xc*l)Y6gn}HMk*+l)f6I<3wVZ*ja+CD8vz{1oyGs z$)eslN9VV4iOR*w2I&6mte8R_Sd`#_oL!E-38az|?6!KVVl~$))uyGT)=&RV$#*l| zy&ICW5Z>+oTR7wi>LE4iP4Eh@@P^VZSI^U&!gHCVC-Gi4fK`2c7$S9TUAg^4x4Bcw zSU&v+xb71$VC&7~CYHEd^TE(x?9;S3=zQ>G7!rM#DkHD6M#E1wqV+tRd{x_XXP-89 z3l+ikEW~bk?wF~CqDz3UG$^w)OKvpDmCXlxC=%@@YPz{CwwzB%DF@27#ECY}3E;d= zjBOztcl_$U!=@;l5;>wtY9w&Ze{3Y#Iqe-^PNS}R?~2@&lJFVTjNqo@rbxa8C69D zIkk>%OSd$=!urS;=k}L8K~+kOGtMb!41%KI02QByKU!N{5JDDKYQS5Mz#gFtw(!Z8Lt3X$ zHU{Qo&E*0B1I=ECK|luF;P{C#l7pw3T5B?y1-^w=tGWcLr4z{MSq?IHZIK4&qhldj z{v-5WI9hXL9W=B$6$H%Q>i%(1-)--Rh`0u9K{t!9o6f$cVYRUM@QNciy{}fi`X0dn zNI$LpjIEO?Z(#c7xnY+E+`n_eGiQpOd-ihn#C8X?gJRh^)Kl<6;Ec=zP18b6{V<6} zn18(uY*3cqgoL;Fh;H^S#_K^G_8Jnlpqa)aQ)%Ii6n`)ofS}YZwJGtRZw>-H9^Ff{ zE}fh~?|@)SWZllf9aXphNzG)VUzD^jZRJq(}qRv0AesHf+h87wjiM!G9gxbrdArx2R`zV6I-Xp^DY8%bA0Ar5v$#3v&vu7 z(W_o?#I3kr*dByUki!Feow_{nh$g=>p@*heORKx@F-3mkGOh2g8rSSnih1zA5Zgy}_kia{%M}?G4dQ!%g|kxhMv+ z;t0CapmCmf3Dw1d0&&oU)%okNw-+AxObMb+O6np*qc>A~j0jZczL1dDFlqX5SG4HW zM;(Vq0Bn=P+N*RGNIJRo_>9T+I2x>_+`({>E{&sJ(}P0F38YEGR}nBvzXrCO+p4J~?XxScd~biR+Ke)elLO;xCv4VYE}v!G=R3JcFI zRCKkAmqmp>P3s)yi>s&!z0Ix3s#@l1- zL#{~2vXnN5$a*LtM&h^t!Mb|UXPW0cF@5s+BG_?r-9eq|6|IkBe`RR!bVLM5TpUDO zf4h>gcE70uF5%JdhT6{62U4g2RYs@*y;YT*tlN@5yf2hs@4t95{= zJQ9EHeeTaiAIp4yzGpiM;;FQq5r{g(!D7Ge9uN4Ew0@z_c`v-FdHV`_Ry{Kwpue+1 z)Ym2;x7vs&I3D`l7MI@1qXgr2ARY)3MB6vAwCglI=P3<%&8u^>_tV(1ux^MuUxEnb zxke0_F(QhTV``45dOjMT2&T=NizI%hK0w8Eu#%V&n3DX~svu}QXMYH886uTxySksH z{fy~=;h{}>I1%4d68o0wo+NCGO5CZAFC1s(7v4e1<`|48VvN=5ODg3>+g`>=vDTxx zL>LXhS};zfw5p3W3qR>}kV15zq6{vHCl`raRs)z3bFBhdl{@L ze7e&lsRGx8UpL%|+@^v#Z9K6>$=Ik&OxkEU@U>}Fc0PIQUV|D=cxrDk2ER!}qwz?XzDM-=eH?9IN2K!9!d4JCY0thj*XSyE+LO_4g+(Lj) zx0I0Si=WOuMBV&pT$0Xh_yJ*wY9Omd&5bc;Ik-xG&V+xPeigd}xx2pd&4byoY?*%w z;<~!?vy%THus=)i@mVP*fI9i48L+3 zU;Z{a3%@=P$TA!vPts?`SJ9LEEb%SiRoF{(f|<9b-mC1Z$WhAPPvGr6sumIH1YD7n zP{QEEsF0RApIQDWqn6joICBNlG@Slo z!{+#J$br7Fz8o)_4_D=tetI?XV-R z&udx4i#+l%_3!*Dp%H6uN#Qz3sc%BU4WhYN#}h1b!mYh_wq>4W*yZMKClqgmwk7W7lW0E6dk|*xthC@*wte?lw?*a4F?Dvhd}s{h(pvbIf9V96@;8mEb2d}H)8GYr z=fC>>T@}NvfKzrNUpbVYuUDH41%&nP;#}^4;#m`Lp2_xOxm9nYVZ6D1;qmp;j~|qu z*O7iP%Q@ZNhD09qxLe>(<=7LGlZ>z=IX@W)`_i|eJ+mZc3cTdR(}*dntyGoULtSL# z=$**;N&5S9j<9mBbK_!dv4@0&`kyw~1d|G~DVS)Uv6V7~2-f#wKMG&O}d^bNR`!(RcN`x&x=|! za6d0Rco>_avdBB~d-V;!azf5Jm(l#A_sSUA-eB4=iL1R+2&p#0@L>eC_Yz8s#C3WI zjhV*pD235kx|&1|49$gYkP_%bD`uUri9GlztjTS){d%`)UfC6%(larH@Z0VR<6`hK z*T=cF3I_+n4qMob84-0$E$*tQ5bDQ@kAL#!WP%g*bfd((kLblu{~k#JqLL{ju*w?! z^S3C2+a2rfLo3VgwClpQN@?8OB3~yFG$HN4?5~#XVvq$zE6{h=m>j_pUjuueH+50L z_|H@uqWK7tzioT9hVTfoEY~W^J`;x2jRDY%2A6b-qY-i|;Rzg2NsOjJ>UW7@X|riT z$>U^pLO&AquLEc*rHRvvTXOsQr*#RaH4A6Q+yqq*+FHeNGce4&3v`2xtx9Dzf5UM1C4@Qe^UZ+!^cYrZua zbAi^wHtw(3cTeuj9S6U0-F9Ew1tx0*d)5(=#mqW6DU)T(Cm8nMYxVm0HsUDE!M@C8 zuQHhCuY9oqRz|Vi+(-9#K`3f1&L8;+di-EW7NdQ$E6Ff>$j9*{+lLpJ)$5FBPaF0F zn`W6U81p$NB#abt-4STt&|Mc=TK|^R?08k|-O*)%$KF|z+9>XbynoU~ZAN%Jpy2#0?F^G}P_R%vO6Il=7 zz6obmQRa17duLQ?jv>kljj21uuY|nNxBRRxgd&)|jia*AmS>w+uWXmr4wKhpZ}7aQ zhyvOUPUhH{?M^6wgG5#~H&uYq4!~Y4&`A2;PtHs_fV;Amdzf4-COR{f(}ghN@(oho zR00B0%`D+wa!luCXVoW;pw?82{sZKt90GT z)OGOtm|e&udn_?IlS{p0jf?~MeCtB4yU*B}SUpA7KQ2b3zbsnF$dr7SF-NG8GC_9X z4TDa+F)PK8UoS}>ao~EF)$?UlDaJV+HDAh21^(_NUM>+6leE!4yWq>acD=v3T35i5 z_`%Q%sSlT>=^k#7j=JSX6>AI~-`5Y1mXw*ALqVQ87WzpdXw=(g#8Z)GO$iwSDZmi3 z(D#2*HFwWUQ;9)?^%FXSaJeW{cH}B%#LUi`?E$n+fZ=JJjw>{l<8fi)vLd>ZNrsMj zK~a}hiaOQD#QpRXE5n zu4JP@@+Pgu6#iEtD=Xn(Mbm@zrO^X0MP!J1Jvm=MpB;@7Wo#+4mODnHOPBn_!?N*i zhzf5;s>;X1J<%!3tsMirG3ho2pf}_3^cSfum(c`oB4?jFszVR@^T31a*PkG3ekp4& zV%IpDopaD7GIaM?q`D&FstM|{kwFc-D=2FYH0R0W9M|bhspA0y|l9Vs!&5 zHCUJWl;U#c@dg>R@q*Q7i5TD9g_b%^jZ^&eqm%A&zjg|e@^uL(M!y-Hu>{D43(qf& zn?L>sfGq<=mPe>5uJ|FRtA|=xt}VCAAV@a#eG&| zk1+egtS`crdVtS|MrC(8F1GZ*?j;=ZdrKO53yD{+D%U1(a=5Q>%ksU(^%a4k20V{u z?GdisyD8C^BS@hs6aU=fg5hSh{_X&cMnf zyW%I!U8+mbgrZgCLAz{U@0NlUv#-<_Cer;<@O~+!IPM$kJh^2$4Q^&WMbx4$#jF9j z7RR%sW`n2Ov|wAc{x4V!0H@O2?U8OEnkmF|&?{CgJz$u_+DOL8tN(zGPt7-uxV^9G z!e~x+Q*^RDz9A}tO0hDz5;|R2-xI7W*rfFphv=kTXle1B#;5v8=vA|cOb|T0eob2w zwiv%{4%U9ZQ)-|HhgmoF6Qd-`BF^Huy$MDPv4>pP<6vwhicCUoS1Bzbtj1k7yD`YD z%Vuu8j_OaA!Q&)5i%yiBk&~qplBWQq=a=bPUZJ0cv$-BIZ_pB$^g6KSnq&|;RaaDO zY;BsLDmH5B-LG|HP2U6e{fa69b!xHg{b>w?l*MBtfztNcsPgh!zf?LGFZ1M0Nj!aY znU+L^ek2uQFBRFEd41wdV)4Z`XU1(4YV(0g=j1NEc%$qY-=4f|r62iY$ik zpeD#;9R(fxkxt=iKvfmKeo?J+M2_MJcx`fE`PE!rj1+@Zdv(jieA9()G4(%gW z^pjhuC>^==5sR%Xb=-Mn55C2*xpHDjlLowc%_X78m?q))JEO!Xv-WuE@{Z^>l}5Ad zBe%{HpTsk)1UnF$ve_R!7Kbb>RlI`YFBrVsflg}1_~Nx68WvL4)CwVD(MtFS4-5Q$ zrhMmrHacRs4Xf{|2V41>n~0|#cdJlDC5hes_BhU)>dPM2__09O64I}6N%0|iIiq7V zZxG)Ghvs6A&#ZK{ugCd01XfCuLi_q(eCK#7>z^D7u6)4L`68HvlW?gqnm;6jrIJMI_w%-)b!SCrk1Z1K4N+?~C~~S6!RJhQ_G7+NWdkALWC2q*|tpXh@;m6`#*+y@fkZXv?$DP z1t(CeTRnK`*&3Quu_?*=YGvL98kob0U^zDGEF@}E?o1ewDr=C#Oo5`{RfU$iM%o&M zzQ~=+8EdUMCnBt`u9FHjC_Znkpv#_=pIeX+LlAdX&vFHmi;aRE4(_QSc8zB#c>H9_ zEd+Ez){NFq-fm%egkqx#T)*M-6}{M9KD1q^N_p6+7b&k%P{I%szob=xzmHwd)5D$d zpCEO7+e?RvqlS0^>o!2;>3AS1WclAIsp2%sRT(cM?Oy%Ly4DQsM(&9E4s10|jO|H8 zHiF3+%}<0j4IT?K!>Rc^g$r@IC0j_d1cbkTaEsO>p>+cxVo;}1%=Gv`ulU1@)#mlP zwOgqdji66=Vgu$t5$eEGA&gWD9|Aq{D~%j|_e0v+ipm9DH!rWOZD4J!p?r20yOP(Y zLF`kTrtVKqLp$rvYm4Wanjtv;F^u5&{mh{y`__VmS=r?~{-4V}Lf)we`o@D1&4KHz zDF)zctEOzOu>|$;pc!`iuOzx&^$$Q6{Xu1UTUiyGChi&d^JUwDJIgU!UW%J?)ru2B zLT0_SEI!)$dxP1=A?79Jijb0N^-_x^IEnb5Eo35!iWtvlDm6Prue%nEdo)cjR5Sa& ziJ`D6kWf`Mh+5rNM^SSlkF3kDb4qHHRopmKl^!;>IF9*ef{3`B%r^}!c$?RF z`jMOD44;S?)vHyP0Z~`^`f6;Ct#LQP~`q}_B9wKKm;l;L*SHBJZdkx zq>tq93^LJ>^6C-^2G{cc!~XW~5k@Ucu&KP=#QYfTN*ko3`PJWX`Ei8_67<9I&v7P;%~ zytKVOW`~%63*R>2WcTHEvT;HCXl}f$&jK6xYW)=k=UZkU{a$4JXNsU}|ET{{8!L;3auT!J`b+FoW)1Bq(6b|PsoZvQM3zL6Q;kMr4_6nZ9 zq&fNXu-4zr8dP_-t)n^h4HZZSc5XSoG9`V&MWFGx>2V~#q*;}rjP+C&zpbzTv+fI< zh;07>)A@e=^>a zs`SxOa8Y12g_@;8X6K&O6#r%)DI9~O*~qUo^#nz8n>UUeIVo-NpS+7WBE`uSq!4B2yJmbU~#s2Tc9-lGoCL^{sx2n+_ zK6xs4;omDcY?UL5XF#rul#<`>Y^O;OPYIpIEW;VJri7TBN%i$|C5DQKRt}DI(H}$a z)wC-X+oKUUl#f-i%^4ND19&p;2zgdPLw1H=i1`tLDDBQojiEx;Hh6q9>^E-X{IbhM z=>XjZk`~VxgnkrkE$S79K-kF!jU(J+D8@8THhPS4DRO+y3o-U<>9)ME7YnCdEwv!g zH0Y%hYBq{d)1-swx$=WxgjrwTRj}UL=Td9wr`;n6eQiuOy+2jzy$O z(xG7#6p4{<<dAc_U1ex*XenHw|WAu&fi{^5d29^T`Nt~4rV&tah{kqO)c_nEBV>CT{cfUi)Kr3qKkEwp76}rUD9>>=8a{+~Iz6_My$4apBXnohewlv*>-Zz?c3^yswNdy3FeE#?_B2gmgu~F8 zAj0HWQp4xz-5szayWlBK-7kA@$)RJmYU_GuI@Pt-Q4bd_;cXaPKdevM5APX6oJE}b zs*Armx1w4U<3WhTb6)q-`%iBV!%2KI4b;7CvAuT|-!seJzc6KO+~P#r|4UFo^kuL4 zCi@;(I?b+Ibet4gq=l$WpxU2WlgyG|bFIazWjTI_8MUxxVZ|Xj*pyl}PAflUi1jks!N zgfXqrcrFrJ!suuyp`{g?(WJl~DYE}Hp3GA7?+6ndPF2G9>X$EYv~>p_Z9(>wS``=3 zA&I4$1B)Q+lf~N7-6}<5EXjLeZoGl~-bmZ5!Z?Mas06CKC=gD)??7&>l#wCdRhCgr zU7?OAG3QLh_lk~6_|P9-9=p$A3nfL4VQkwkCY=J8=Eo(x81H}lUKu(g6m_753#DJu zDL}#YH)aW)`N-twDnbu5Qqmj#u*B_0vaW7UNn5LQ zx%4NtP>*cLwF6*(!`qeYZ|_}hh*{o;0c7Tn7$naa)^QLX#?}v=ziIWVO!B61aw%Ny zVn7mf0qGz7?fwliBZLJ?LYtM1M)C|^-qs$>?jMM`H820skqr#}{>y`zIVZ`avf!@s zN=geTF%73NqgZy{TpbtQ5pmly;e%JhXDa1zvN1NSGkC#>w%FUv1S*o+(Hek^s0T!| zCI~Z)TYRPAJeS)utE6`I$S(miS0(r=L9u z*-N(4Q8mk-j+(U-sRmTnC73dNYSfx?HGLMo%ZhQ&(-=NNfF@N7{#i*069fox^ zq^b|`O&~wKQf5#4f(yz`jYU%Y;=99Z&$A~P(_i7T^#NV`7!t^$3a5V$72PdbB3maM z8ctmyLfr{`7rO?K=@x*2Db>gzf(|)q8Rl=x`qu@DM`Fb}hmPkiCuP08-a6PxGj(2S zaaQVMH}C2G?B9^rg-eHCg%L7CG6gK*jO*>`V(oeQg9206qrR|Kz+CQRTpe^}!guK+ z#9iU1u1hI|^USSHBk`gEW++uRekr3STu#E4 zk06rCX#;eL4f?%wM_o7RJ7`hup5g0cqsEZMu*j*<2-NXhA=0S&X#% zB3=gaVD}`UIldAJcpy%2)L!VbhqWqFB8Gc2ax|EcS`KbxG~0_x6qNs* zM~8@VPgbGJ73cEwH5X66-+$f{%IBSnj5xGk`^7mlSobxL7=LtD;Zt5PZ1$Xn=Zcye zG}N1FywyKXvDIJ$o>~W^u!LJ3s=_mV6i>w;-ZUjCoLsb&+jI@$D0$4TZ!4n<8p4#F z*jFFfT6=Ebc2?g1e)z-&8BQqQDib1!_HD)QK*S2~Zb8>{`64UmU_Vpr{&&xDe8?v0 z;&w9pG@?U*sXIvT#I-qQqmXun{lv9YAN9AsQcZ!k=)4Vgs;ij!PKG_ERUviaJx2aw zo16imj7&bKd|JK22(*4k2CyIQy*_@X77BU@ClRLjLIm(+zR)}Mq4g!I%`4l=PrDP$ zc{bDbPs=IcI&_Sgnvyy*4OaLca4HP;U(pP}-+BH+yz2}@QW95)ha6-pkPL8y7`r-|HLnp%l%}0N|2dbSOga)2i|XJdM`~XDX7@o5u|0!1 zh<|= zhuE|AN<5M}qXl!27SgpuM zjERhx_6N*|CANRCrPqlV%--mm-t4aZPj^><(^+Ms!7${}S6sHgQ_ zxnR@1`HrIRXN|}Ko`ZxfA##ToJf;=Z7_`{Iv}*)bs4UI44YnnsK6CZ6ElETj4<5*9 zgyoadjRJX4Y3Sbq+oFc{qs`r3y=eT9PZAYM&gIWjL2Gvg9p7U;q3tNoXf)d0=<%p( zoEz00w2pRG#Ht5>AcVwbhhCo!;A?p1sS|dR#abCAp7^@$pOh7vWiHb`ixGy(^7b*ELqG_G0=<~LK85NmJX zwO`;?TtIuKDQCk6t>3O%nIl=d}CAkyE8?qN5$xR|#(*?t{tYWkZtP0k4gD7XBEL zNVsW=U{)7%DiM{Cu3xzp2gl5Du~x(_>9Y$d=4P7n|yfW9UOVz8Fg*NPF1CW`I9CcEGCXTwI5c-HZISO!L=&o zGIC_2W~dg_*TGseAWtJqRr4OJD$b9h17xFnrS@{|ff|H_(7&{X!*7=>kf2>yAc*zr zeO*KwX}AGfd+=yN=t5-ALygGq94+H%8;ktc z-Vy@xsaEuu&dM#ImZPYr9G7*{co38s!!W1Oi{t3wo50x*5cNs3kE7BsJBM2QBn>;t z182Dz$AOgBxzJ!y6=a>~{D+SR%dsY#&r5Qy-P{dWMEs*+nql^NT_xb*3_Dx6jKxJt9To6_xx}h`$KNZTjPO!M~ZQ!lY@S!0wevPZ3d{^pTeBJ`<>KiH_zF`L>j7|vWEu`UXH zVH?19p4rFjd`I6i+9YX>(SA-3p2yuoxp^sAH2&%3AA$|uRUM=hHgIFFO=Rc%_#b+; zSRnwWY<>{X?+9oxQbTt)Ya+~OZTXcPkaHjKhPW*nSNbU&><=zO+1y26J*?`G`$h^S z0@D5rr27wZ|Bwh_VzH=c0&hy z5As7)hQ8N_nqUqnB4>YUX7=tTzuT zohUzFltaBzjMidfkjK(k2BNtKBSb>Me}u&g806uez35k4I48hXlR>5}uLBrU>L%wa-*a&n-TCbLTZ z2OBHTUFHPOBlJ&V41Ma`oty(OzZH2-&y?Jl9DaMHx zxL)m4%N;zgfUfH%6jg0O#V3xMZdR|lSR^#@4=wJk^f%W3gR+*W{r!JZ)-vn)l!JPX z)6DAA^<42*%mxa4ID-&MlN9yqwmb=9vZs9HQAvlDhB5&18Iiab=kb52%By!Q&e3UD zKEh+6hSg+)DkqCL!RHN?lt|^y=}zLzg|qcpesXM`Sdk>YVnwRE!>C0AR^Li~1r3%s zVWJO8`eO;g^!hYR0g08wdxMW7A0lOUi*CEf1xmyU15c2&<53obF9WBB|zSz5)n?Y6v* zG-l9nrJ-GHD_IMz*YB8Von`}^_eAl!$-ySJMPIv7SjjrEw+~T_Ym%X@2h>+K%lF~~ zcMeWkewlo_3gZrQ3-dGN!B&&KpS3MU>^uuOo83YsvVB2*PIk}T5zL=;&}{1G5;aMX z9cjoL4L6S{Yusu=wsYgxgj$c<-J{H^8J8ohW1=ND2m zaFos`{hXkYXs!|F)c*NitYF0Fz99v8vtgL#y#C`RzRT(GKs*h`Sh$Y5$&vPbm^8CAWdi6%bz9=?Kv2O&ev{8tWz=r z)TNDC2p(vHScGw$61Id{-lh`|ltm8RF}MrT71s&+w7~*@zRA+pHVcF^7V1nNbSJHc z{2LO+l-!}2kv|rc!|DsR3G^xS>BIaEksp{qgxz)nb*Jq(RUat+XJfwJi6&^?j8K}) z%$Zsr7F3)jEn|sU`#~gZvYow9!Sg}%6a9LKZZCoKAy=(OXag5oLaK`ffhA4*qS2{A z2XTtgxOCbRW2KFM6kE<#f7NB^p+bt+NI`l2iDfl;M68fzj0H0HIw9TEMd99o%Pfl?^NdB8z`yf zQf3BMPMFTmhxAlKNG*zsv7_hHSU9AlsG{rda7~2L7Sm4t;88~2{dcKCpynE|DaBb_ zSZtEOi?H83wLp+XPc38?LUpE#J@}M|7rTo}0iPKa66m-pW=A!($SKT-#>|B?`86}9dgCE{8`gbOs(`dpQlHiw3PAJhufv4Gn27ldih2nK$a%Ny-iVQ8SRbeAcQ+T(m{0G54 zgTdIK0$f)avrQ1KUI73`PR*2)`)-q7t^K1>bkr3(ttG{g?I5(Nf&q-3l%4?rz13yOmPh-QC>^1&S4ScXugH@r{&X-5ZK*{M__; zzi;OJJ~M}3%rGRmlS@`sR<1!_#`501 z7J9!!4*o@HVAU_-*KS6iCqfwx4(K8^GwwVO@>j~SK*n%13Ri7pF?G}q+L$q3kRxsI zk}f8YeA6&6-TJjJ0(*Hg)!?O!#k`1R_}F-5#D+FUT}*Hz;YR#k(hu`(X%0In2HGha z#Cn~*q%S7OdMv2^SGS6AwBPU>3!SlS=LO$bNK`)_>U*TziF3c(G`e2X=eC>^ET+6g zUoTp#S>zG)sy*^&RE&@%o)ur94kVt?m^D3&h^=#T3GJ*z%_Sq>+4+RYR32e zz9#!{R^DF00-8nyizz2D0?tQ}&?mfx_jW_eW0H7~RDv_FKCJ$Ugd6R54jYozrmzM~ zS}Kweg%1OOeB#SkNBe1mIo>&eiLFd*ZFmX%ePFx8KvoyR61oi$jsnwWvL1OYKNGgP z-)^g(e2W`t9HiXLDLsaY^C~1U6(%J`3!D~iYoXw8q-LyHP0)pGLkcf%loB`c5Ih6r zXCUWzOQ;^xU-$Vg_uZDeJ4+!t!%la}&4B-;(wVU`C>q}BHb7`<#9r#I8fLYA55CLS zM~w9sp~M^Ku-+T84KA>X@IJWD!%}M%T1`&yl~wbPTgv(PJ&xbNQwqitOg82ghArrc z#B!)+@cuqv;2J7Vm)USg`m=w~8?F?+mr_+V8!=E}(uxMC3K8|RRBY5YY-bXO9f80T zbheY7#UdC&iyb{yt6c&Io7Em+>Iao4ph&09&@QDF{D$O`jr1QiKY5HrL*$DQ*6WQ@ zcoO-_O5&|4Rad;$N+zRef3eyPtyc^kGk5df2YCXj&gRnwzhdh&i>T&ycB1(3R?6Jj zkF-+h%jl=rg3gR&2kB*uY?8<6^2Ij((@7+0nScM{sf0)zF4+Z?R@ll-s2dsAoWFvlX8HE2T$4sO z`y#b|fvS>K4t`xumuGEFDZHlAwy`*??zfWgsd<0jE5{X^fa~;67cgw z6_QCjzASxIcLRlq(E~yvy`k)qE8=-mB@6*`$ zAF?dyS?!?b-$W9;|nkzrAO#iW)sR6MwsFiyd49~i1R3h|m)mW6=)KAX=yp@|=!f0oidcdBNao>Av~pVqTv3?0 z!LM8iV&g>E9sZzYnM6svZzuZ28calX{H-m6){-$=Aim6Rb4bqHy?HlR;Tz1{|C?4W zo6Z3aoL8v1IB|XkTkK4IUZj}}&Jt|Iux2eO)OA2O+yN2&vVVIiTRABf35~jDR!Z0% zFb9M{_#RBQS+ObV#b0E|D=qFYWXoXlI}w?sBch^aq}8ohd>inzXC#Pzm7XH%q=rrz zHhX9%3shC3PUS)t5+|fZ&c`YY({7li4i-Sh{!R^!A zuI&!_q1XE*e2}9$cmDGq)sPR5D9XkWJE~Gnj{6FJ?x%PZ2HY6bv?hb=W(<(2TNCGo zd6K<1J<&WcvR8jARi0llJ%0qL@5io#w<2pJeI=Gw8JRXCzl-H2Vy12nZmxga+ue<} z(~$*sg-Lme+IaEZ2Da=T$6jzkj0RuOitCy(c}cyEw6o*O2Jf9Y>#L}xKhS~3^7fLZ z$Y9xAIZ)aDqa!E&4;@(+mau3^&GH?=xTY(CCM5bqP1(gtNl`Q?jhm(Oi-+q^tMKI2 zz#jyS4DbVMYG|6R)JWEvMTcqhd(gncq=lNE2A8y7MpEG$$RAHp@eG6p^8A@)DquYK zZ`<6UXdA!cLMj)rmV0P9mUJ{>l#<4GB4-wv*P5Ma9f+=v|ik5^(cD+V~@iIh!0cM{k9?IJcWiWGW}jSS43- zvXa#Ar0Z|5e%f$;(D}HlxRDPvU6@=od>2`N^5_-N)~IiCr9t-7Lu~mY@rtL>5ulg(jWEi8?1qs6=>eLHn->L2Np{k>w22JX!Pw^70 zmd$H)wvFtc?yp!@YxF9>=G>YZ>agumH;La^hr-+seY|P$SmsIku;B zZSjLvK|z7|_AphL+qc4419iN1SYET(f3%T}439?9p87H2Yt&?9+i=$8N;XP zMZ*5An7{9+*<}3ODjW=w6?%WXj1eolZ^;TvIBv;2Lmo{^3Uzfo!qjdIrwWObC0E|4 z_87_d@c`G517#F((rwYbIp8M^xnV*P4!+;%$7H-xS(d4Ikv9j4}&_7NGkr?px95ceI*8$a18ksPX{OR#~pr9$z9W59*-o>Yi9h`C9y& zBjFDpjpts+>^=U9isQgBPlLc#caz|fF{|Y9;{#-=lucICJn@b(N zr~_vn17HJnt+a@b_gy}i2*pgV=m!|<54^j=`OyHa9I*`=Y3J?qVi8{-@aPh=JZ)FB6%^^R_l@Yl3^1s-pLC_0M&bN1|3H@ zK1_c)I!AdpPiM)<#Wg$chF`_{xG|60nXrlpg2`i-SL`bv3rrR|_u%JMOme|9+>B3k zcOlYM9ip?=w*mq=mSl%2eaiK7h~u^AM+$s-DA=0!s6x3|tcd#unAq$xOpC}LLQK|s z`7Td@k9a%Gdl~amQ?m|!*8UbTJc)++!C1L~C*ogCh@^nn-B-cEe`$3+|57VI+mi-7 zd}L2RoEf3BCS6Q7?Eh9a7*&fm=nsj6nvIx#ji>srz6lb5f5mZRLkb}A{AYJ8TkH3* zEhF~BcUhl_6v#nm&Rluq_e2zwTqFr9Yy$r)FL$KFDE@iSlKAP?O;2ZvC>C7VXRd-7 z?RP%JrR60#C^ce6s`hjcL2y`c?i|YDb#t|*U1Mg0MEI-)6%)15@_5;}0T3ck>i@5* zb3Xn-cq^|J+O2eRJoSK8|C*+$nSc|k@ls0X-(coLj47#<&?cNwi0jgB?po);Mx1R3 zi$|S!z(8LTZpP)^qSXhBC?Tv6L>Z}ngz+=}{_bFf>m4h?%hv!jG(5l-|DU>iM->0x z3Wb=a)ZsSc<71JM0IYME8?m#V$K$qawzZkxl5%2+O;t-Fiu;;L$T}v4A6tf8aiPZamC=}|zRk&9-A9vIy@QD{T_Jg! z;}E)w>uBG-(xgoB&i*G}RW6j%yRLHa!vDWzmW;ws3$jDUbUpc*Rt)0U^0h+FiD)?T z;H7VTTbu4Z9ZBPsA%QKv-l-g5>cgGmV3o?2Q(9+ZZ5z(;pB-Rr0=swhF4PlGJD+Hk z1Ur(!QhOHROi!b)Q>8?_TH@G(>y-&AqpSO~rRR1imJ6(EHyZ!5_EsP}6L;mj6;n+@ zl%FNY8&pl*G19pei0y5(kzmO5R=KTh`&zq4osmcg8hsP6rizYdWaYiG{`hIbN}F7a z&lMwQVAXQ^jp*+sEna)Ap1l8AuA^GeDf1HJ01o3!qTL$JSZB?JEB&*%=0}Fi;X`o6 zgOJK#gZ@BgC#!akXoAY&H>8LMzlm_Qu))MRi1A|P&8wV^v|6Q*LU=d0oR9*d%Sg%p zRf~K?fFGM_(0Ve6`xTtfdUp;P8C-dK&l=gvpAcGjZ;Omq)cZL!vNtEq>YgAT@gBsI zoY*)XtMYgCQZ9An;^J??U4u(D8710pY({;~L#9K8%}@W8q&y-73I|2-Ppd}J5bw>fb z@#YI3x&KT|NS)+=LP}K2h|ND4m$EEtPB|`O>_`!|0>7j$Af;7%K59`-yd>JT(vZn%yL~sA1(q})#Bb%4uo2y zM6A%gGa2kW6KsKy{ck1nrC=I(go8x3M_j!KXW4#!DDj}g%+#E#uc_qZ?G7FJ78j{V z@!|GB=$EAPZ4%ajivenK*F#q<3uXd~k$G5Vj*0$|qCojxb?z7a_ufqOj@?ZkQ>~aL z|7T;DZ}F%M215xQMXEl#P-5EOsx=+U6gWp|x*Hu7V|@aC$`0dNvpwT*CZhLa0J&j8 zX2%{^znvv}xVU3A-4NWkK39~NA!o*+F1BX+8Fw!$7TvA&g_0l|jf$f=tlO6=;(czY zfrCk0y#q;yNHZ^GOD#8debCofN`&}M3?-e7m~qk4Pu{H>!HX8pJG0ZiPWy)3I9xT~ zszzREDEYP_hM6z!x3_tpGl#7Kv zi@_=DhgzICM4+EBDNu^TH1L70W=IQ&O49Q~y_92D$jlb#c+o?EJCTvvTLW$4w>Q+> zlu411)8Te^DCmd57eKXIH8{P1_aEtzjy9z=vV0=@KCJBrc%y$t)l?@7#6osPOoGmO z5?%iCh$B8Me)QXKE@K)OSD0|7qbHY|ZvkUnUSKHa{#mLrr(+Y2L#?eA9|B1)Uf8QL z2PZdkF)K@#vC7K@NOR`!QXfaM!-?Gpjm%s+HfMTk8i_pr(FvWpd8mKfK4G`LUvYBu z!Qi8oZj~N!f}jRzHu_t!yhGtk#&Jbiugx2p5qlc?N?AMj7j*pvwxINO>_km3H@<1e zb(NGd*gx<&I%oS9!*R;lwuLeUKX+thRy4l(xuj5Irtv$rvOU?(=Xa7no0*4l6-Spe zeIb)N)NKb>s*qj7T7uc#x#G&h?Z?l~7fWw-duYi{61t+Jn`-F}cz$ zc*yazLf6hH!iqVOz?ol<7QwE&gOiQ?v_?LmmfAp0xYdDpIFmPAvXnUBJm?5nazkoQ zzg;{alU}@Ma&`&CD>UgPz3%Vi_@S}^2}_aUfBa#Xo5%{U917~(L&R*YXW!lz|v;n@fAxN{nA<5C?jTrNw3;t zfGX^F(keb*Pbc;)#+=(Hg@}gYN9b`N+s2vTFW0k%zrP*C{f*$cbK_`<3LD^y-w{M8FS-!+!G2jmOC~8MEaS1^N zJPa4+-vvL2xX%4H0-kw5+x+x! zVF&8M|FoVOwt8a{1RisTG<~X+o&R~;dO1hbFJ3q*^)vl2DMxML;+0ugk^@~t_6@i2 z(-D*Wms`e`!{^A}n*)oPX^%DXeGN_zig+P0FG}LS4#S=b43PU$qKymrqz3#3v{6wn zgl*Y$DNBLZn6>vLn2~xsdA+M>e~KJNo&!iCsa08rao6YT4wh~>tWQalo9!y;zJ3i< zqKv1e8}X@f&@mnvUezCNBM$qG1TU`wZTH7?pX=&9F0`W1dCwB9`F@SRAos(Q+WW9e z%OwT*M|U1pyY0}fOW{QY5mT{W9%%kMdR~^o5hj#(DCtsSBlB#O!R@?}g-d!W5e7-v zyNNnQ{BN;2`9HgJcVZuX@``tswNw<0sWFyDM?n24mv>7$V}J0sDQrDdjHb$_P1AY@ zzW4j`E{TT}X8^KY+*-{S_kgD_2?nhm7{zEy&Vjr0s@pW@rvhn)Od-nVn5fUu5Pb+7 z!Yn0h>KjVqt7~}ZQTiFXejR$N2w~8oJKN5~pU1J;cOizyNR>$fNF9eNVQB8A>Fw|6 zdQYP^g<{fcpAdvb0tVmNToXam1>eLMNh`=#RxCI{Iup;YN@=5%r{&_KQ4!wjMro;T zMJkln(mo_?tFiA|o!(o)Z>+T!;p!#!L)E10#6HBQg?(t@tFsN%@k;%c#XARclG>2$ zB|vh3gd?ajKF_xs+q@U2?y;08PG`NvzB7ui7XntV`_qo3I^x=UA%w!;n zs1dPSDOCTIgTCs2!KvY*q-JY}dILktVLzw1;kv-S%5w{e;oFSmP(6zrFLZQ%;Bh2_ zp8ETBU-1`mDN=FOhpr^O)xCqH>WU6zJj!ZWfKzGfKf9I}TGIFKB@}G`?3qX4s})M% z0WD^xyO9C96?rg&lI+GLuCu8L2`ZC=6PYWj9m}K|(K*F+m2iB0Yj#0I{-pUQH0Q_; ztR->n$}%z{B6seBD4=GU<+EyNSA!uxraDc^w}&xVOPz7*hHm80U(hE1rmc@Kvfb?k z)z)v_uO4zLWXAJ4>;EoMs_WXL#P+ZBdxqdjhwCIcKR6nC?NJg8^p14#>GWw-o6}`L zr1o4E3FLMzQawTD=O5r$4dcaakYiM<3A|T%6`7ghr_F+&O6;oyHUl3}f;_?{SiT=yc*YFzodv8B1pUF@xQwih2 zy<$uL0*$MUTId?daL;@h?!6+alIwM#_Q-@HNLU)RrFQCPFDdqE#A*P+pRT#0=}<44 z^&_ueMMwIqjX*B=K(5g$7MVV4Cn=eZyfOI3{12XQ6w0pC#Sd1$`+?q7XDG|V!UVX3# z>bs}6uN2C0*y7Yinq^)m*NGX7GY|MFz?xrI*Si3PGjO3NH$ofdcJNIeTNd-aB6qGz!vhYI`zUZi^Q zV|(YwiTCVBoWb1EUq|J!Uy9=!qh`ZAO%k+oiPbD zYC}i+&oi2s zQ7b}VVCSov3QX^x=#b8P!3XdT{KMS}{Kl;x(Ziu=%y+*7{?MaPRcV{k9=-0j z!jqg?zT&M4djF9%6w!axK1Mb}E63!~bK#eE0KttNW_Q0?dcU)v|@PJ5qMEAk2yQ+AV){6E=9dExzW4Zja#k4hvL z*W0lAFh1HJ7SYd83_Ia$es8?r;9s)vAm^O;PS^zpbISh~o=ms}g>({-=@KjM-Rz`V zuk5HHo9+j4Wklw3(J1+(v8(pO$7WcqziFT$vSFI}iG4jjzU9-1 zjqQC5;3n^kO$&s>AWD>tKw;d_UxQA?@YD zR55}<{i$OeB%zYtM5jP1@Azlc;5SNr&8sv7Q^ihXqNTU*r_B)_7zC+3EIy*vs>+<& z?j`@^P9L*XH%JR9j1yiQhbG>=j`Mfr$z9{Y3Px*aP{zxB#w8T#5MF`Dpq?mb_LO&@1g2p&9<4eQYtpAyECVK9e}K; z7v4qwwd3HUD;Zw4f^mGsXPFh<^2IhO5e5CFrN25lnPIpL^Xd$olB;Rwb@O$#O=Nt; zgYm5vjt@4uuj!SR7u_X-Zw;uB126oDvTNEv0=opOSI$W&sv4PMnXe=5<`F+yXlV#i@k ztjH#kh4G|)=w1O;y(=9{gBKd!LFKV3VVUhL>hO6wKGsmn9k0Ez2r48`1oaW4=chBH z$_%)s;?3IQP?^~vTA<@oB!9bL?^KqRn!}w}Z!okxXb59y36E_ob+Zl&qB3cLZ^fcI zNFPgR53-BLjG;Qu3R-vU#BXKJP7t45zD|#Z`j}DmIGiJ!XTh`dubT)5gDPr@X>hX` z6UovuGfo1;egLz?Fe(07kn(Qp6>`pYAJ-_)>E*t+JYHT-L>l+?Mk&nvyuK8~(v@57 zl%y{wEqa?ssAOfEr7T-hJ7->}b@_c6$w+k_1%L2sS4dNFd=>|Lqa)gbegmXR|jtLU|MGtU@m%KE{m0orE z^D&>TJf}^T7%8W%wfq{{K_M^}SxXe!y!TAG9FPS%Wg?l(1*&2> zvwOv87ZbhBfu4rKuEMX?jx?*Y0R)N9{%~v*4}{>ZcHBL&Jk&_-n{?K;fa!ddkWU6^ z9PG?^Bc#_w7aIX&tX;$_>rLHkm2DZ3f~1HntecB~fegNG`mv_>C&*xha^Pgo<^$>c zJrKA>1|;*t>*~m2RV&!OA>dc7DXAn&E1CPsSO2W_G-I8pT?&dU9jQB75`r{;9t--|0y}Ocx1i-HnCgk2+sJ z9kqRS;*#yXWkG;8Y2W@BerSHkW`~57pys#+z$i9&-4}&=)Y68zVb-IcdNt}xh&H(1 z_B0%|7=?yaB9|>ef)xq>u5e;C&Q8Xfm~z!39TC$rN33bs z(j2)nil>Njati!v=v~b|L~f%l->1*IpG$tCfN4_R&8uU$sA)_z2paf!JoFw4gBG45H-vM{b=mY z+}x7n-!t4{72?CPp+Qn5@pPhw!!16vP%D4?1wmWS!-Zmu}(!VEP(_ksq2Tz{W z%5j<*7?vcm;KXq&M|N+=k(-}i;#`oKV3D5KxncpmCFXafCYgICjoi)Ap|v}oc5-gj z_&{b^!YJ@e%Ig1wQ^;y5^-&PVthO80)72gY*hJbI9I%HCqGJx+&dMb_U&@f(`tp}D zlPs!9R4YhaL@L#RYbUW(4I_uajX^)7ZS`W~iU&T0UNl&y;mtXPhBZyUw)mbHew)`V zzYZmS(!GOs_^ai?Q>!pKv$EZ{rRW-EAQsvVj}x}>h?8M&5CO*F1zp|zG9MxZks$gU z@xP4_xul>Fa1|02Bux~fGz#0dO5B}WKQs;d9!~Rnd?MN7BkHn0ggQVV2QmAnsW9ZJ zG0XIuiiDt0p#4oc0+LY!8Es$yIs-;P5MdztaAYgG_+tr!Eoa@$v>fC&TYZwUQK*s0 z)}kBQ*J}<=f*K)aHYGV97^WgxfWA7sx_gzK|1pZ?&*8bRRTXfKC|EvUN|GT%fHX*B zwu_R4K-zZFZdq)N+i&^nGuo!ttM9CThUV50sm&fNb#w5FAg3Od;|_g8_%i$#d@454^*M$7RtNd_r+C?s+8e69Rz%ZJ2XMHq zw2KGdzjft$3gGtt*prR(xiUbbu>1MTuG9WWktXq;<7k*`_4Zg*-p87b*De<=lM0ha z+q!UP17_bcQ|hz>4y4Kg{@{g|alnb@v24Eo>uhk`_YL(=O_V)_eDjL|@na0xC|Mu? z`r_R@`n;yh6^dHon;Dr=u-LKC4uRs{V^ilxuYj5QnZTzfx=QIsNW#!wnN|N;u>AdB zEkAxwE@NWrZ|i4sZdeq$H?Yi4H+Wm?*ompzy+9!BMbotPUDYG{cA@{~V&b#j?N4yX zin8!^|9YFPE>mck`^`f-T9?D%msVEugT|ctn{-n4s~Zj?kst7HmIR^%{Ba1mm{xnd zShaiIqz(sYO)?CSLhOgz(p=GOGqysyMMvtg>q)@OS2mAs2$K49C$N@~5*SGQIdIGy zl|Zz_U6oSKpQy@CnrO<h3W z2g;KxxNm1YqkpR+m51iNAnu@v*Xv<$AfVe_7<+dUJlbUZoGL57l7co=;TRZk#z47u zxM_`Df6r!EcivxTqiXs{JBjV`Akp%U z+u;BkJ&?1*pY%S$`o1?D3VbG$Ne>nv>qfA6ijQ?#F{%ksj0UoDssf2jsTunQ6q@XzJV;b;CoAb`4KE9%zz)Ynk2>gd*77b7cH4mfyhDfx1R%sOgw=Vah(i1yuP7DUL4UC885Bc9Tu zw3ObAcFQP670Wy&2@IXi~=+mgHUS;7QaflJkEu(<>>h=3PRjKj~99oJ%bWa2|KRVzh#%Imq6{4{AfnE-NBwXD&@8sg( zG3>lq^8TyP?a^?SXDTkB-p}GfBAapfAAHzb40s7uB#CsAvcrl)rbljN>T*!()2D*7G!`joYAslN_hZx_dls4p1 zmw&@sS|1Gv08odPk&K|+qGq_%VQz51PUZv>>~04_7VA#aPBj66g5w0|r1+(@JpK#Q7=djJv$>A4Wbr@EmEzo;@ ze`g~`|COXyl?;zTJN+H&{~kN@2cF)W|4!70big=75;r2UD!!@r-vQ?wHA+(PEJrwx zLthSm0_FcC{#b=lFRcxAHeN(C$?`ITiVt!Ad&6b^UOkA;U;j-ZBrq#Nt}a!d)<9iT zJ7SX5qfX@YS3bqNn%$<;yWUicd>Mt7?B!aP>9*IdnN;G7Jg{!#OiC~oXOmKww7q3` z;0I!KCS3o_VhfaoBC|7sVz4>ZyjiomxH~y|TAAZZ_rF4d+u&`JLsyN-sn9E8%#vNO z{><#r=8O6U~ zz4Og+pPjKx&v60N8cD`1_WAUj=6Hd##0SAAztESD-SP1cpoi6sL}J23s>~fFs7kBN zGh}avg}_~*J3FRuaBzTF>lH7rk*k`b2}Oqu+^={{yPK04x$nDR*g2wI!v*+~W8xVK zvEbdV4_+j6{r%%w+r!kwqny0Ou*demb4Pda(zyekx(RaisDFqG!Mjbdt&Jt@*ph-X zYa4A(j$(YaaVQ?ZKmwm`8Qw85Iqmn7L){-Uv0{gfw1!xD-a#>hoo2}gfQLrtiP%kF zl`3b4YzID*7qT9IS>GhHR}L@lR#b|i;z$~tZm2<3T;h7bc9(_nogLetp=W(RoCh9V z;sOk68)?Lic~B=QB!mc1Pm%K4VLhp+s*axTjdBD$c!^||{bgomPD)A&N@Y+*0dc&0 zhhorT*FTZY1p58E47`g?zK4irZjLt%ww}!!?(%-or;y755SK}+P8`aI{N41GLaiuU z3fBD9#Kc6M>*37ZdKXUv8=U;i#s=9!sS55>hCE$VZ0z7YxHr*r+n-QIMy9T*>6D8l z^>MS^^^hucJgk?ClQSth8<~)hPy~1>ao*sFSv*62Qq9c*MVgaDCgIXA`|Tm*COZ=X ziR(3W1hH&nTIGih%)fgih{KvMI$f=YJvcx=qlCMT8JrVZ!^2M6CO zUrQcu>ipwX1f{HDE`F}d9(~phb4!gLcow_+O{<(IOe__NvE=9sXzdgi{#3s6FDJFN zeWRSE_RQCNI_iJ3895kB@+SOouo^B6cV&S8q67Y8~Cd)wdq};~FMs{aeS=rStZ!Q!RlrU|@ ztTx6mU)oUgYrD&F>><9{a7}cwZ+co3iN~7PeQ5^jo#a{>uR(dA22s#z!KF5I~!;6#Z1cZmY0_Y zekAc?OWqY_ye!cTutcEhMqxEU0RdzYA*gqX-!=&rRsp#1imBS&L<{gwq$8vXa@_f_ z`g#sUC8hAcG=Yy-I>$4L@?s0xH(KdWTYw2Y^sNtsqlWiZR#d3z>PFEkW$a94b4eEL z8@=;x)tPVBKk2EE+|&ikNCJ>cp-)XuhojmAo(~g3k1K00Usi~3t;gTD68N|>QrmSX zOuOfnw_H}+eekBeLrtLovnlPR{fNj zxzhjHToWNMinYF4?-q|UeZw}VU|{Y1b6fuVltV~{oM?F*xe$StOIb(5MU0iAB1%X|$fY5Tq`c0LmVX^ARRgX70{1>g#K)rp z@$dYnb-vl{#etKX+oI>3PyFt#d39%P#S4M{Z$8#QL(#Ycudo)srYH4$@BTN8%0Cd8 zDeWp<>WAssz1WzT0hZPcnq0o|+4Ozdt_$1i<1g?A4%+1~G)f}wqToLS-sYXlz(0EN zElZsTRcnF+pF6a*)ZbLO;*^&IS;eQV(Rrm#c{}{~8({uyBFiqSLDfo!`Q6Iw$-Iw}Z9B^+2@)+XXe!kX{Q2BJE(Mk?UYNSPNP1auO* zOHryj&lMw2vjgCT$L*!1B_uSop(?$`F!e^Q>a@q{3a!d81>AtAr`q19cMp%i9Pa^v z8$45Z<%215i6xsr7X3ZXM-h-?N`nE2G>;7AErO>YZaBT$u!fj3t z50~`FG}P6p@ylHRSr=b_v&@(2h}p!%3FP@;=;cnJUrYf$HXU`^78M^&5HH8 zJloI;ZGineJSqW_(RbvdL`LyztlJVT-QN3mPa^42yA6t2+4A*f+xT!^t2+rlsgWr6 zBUsx!IFDZc{WU!ZSZo52s?{^!0vE|(px()TJ6!ky9sPrtVsTMXNFWWWhZJQua@9g~ z(X|WEVB}ljlz{lx#d%+&rw1`RYpG}iaZBIewDGUgtS(Cu5d}RL9PAV9EnP8~js>hb zpxul%9Ko8JDGF8R#d+Fh3whRHQIx+Z8bvU{^AiU2xAer&AR!>tjf&iCgl3uq0P0%W z?x4)fOs7YkfEs&w`KX>)Dfw1FHHxUk!)eD)lsFx^my~S)CnuzYM)4b7Q*%#tcCUZ% z=eT~BqT;){GfU2ZpXA}mutrYcE;Tscxmynre9EiZ!a~V5-k*0@C;xE!C40rmt$?7Q z`OTkAe)r=vU`F@&1O-VNt!GP(>565#@KX|}e6CORI(X@hJU_*QWfgwXLp`jy6O849 zmET0>#Ind@Vp@u+*|)0c>1I)l4UqHjxXaJJ?enKR4gH#qH(82k@#JM9k5-;u`5i=k zF$@&pK&12w$`80xc=0u?`H)~(L=@an1G;UmJ#;b=pASe#i>YCs2H3E1adAUaQgBvR zSATc%hq*DKBpE3a;W5yV_nyYe8oE$aRZs1loH0MFW6R1SK%5#QBP&H}@Y8lq$TQE+ zx3RN0CJ;SmiIE5mNZh_NfHw8CXq)lz@O~ts0o5R!_D13dqj4G3G&N~AegW`8XPC!! znTm=^e71yEB)Vdfi`sWo02*SnTl{tK4-cq`mVhZf_k{l#pG!UT${DEXKqosrOV^ePl z5Qd4lf8c&Bop)eC1dD=pKhY}t{rFnVkb2IA-mzc-q%dtA9aQ{87+8eg?b3jhaV-?H zqS0Yf&`fNGZLg0Fw!!b#MfmY@VSpz{;d#)YB9T(;edZO_BMSW3d-;jC!>vL!imP5W+AcdBe7LkZglW4452eAnyCl^<})g-|NfUWOXF{q6aURw&C z7qlH33I?qE;@6M2qlfP5enCE@zvjlF9UKY$W7i#*_*@M1^;TGzEZ_e+`(MovX+$qV zS^TZe{cP*J{!~>_z3sE~OUwr{y#W6?YN-g*sVt6v&Bweh&On){s1NXTdo198-$8-* zy|Ns$LsMN#?DxzoRfDQ5ktATLKB5w`;yoQmy*RZdkkG;|VfePZXdT)>2;X9v_#C%{ z+d4bAI?W9A=lT-p6W?%MgGgpXQjHXh2CBpL$1L_S^Z*C#GoQ_^)N{zS%klCn;?$)0kQA3G zl7s4{zun}1VS#KThy4RhnN6kF)DQAJl%T`}T^vdIZQv?i2%)i;1hliP3<+=nt}P%6 z7wY)$Jsmg#{`(S0?^){BR*OWh6Y7`%@`DH_LNF@jW`5_Sm> zAj6|?FF?O&ri&C;3`gaKz9|meg*|~tctA_U+t_-bl5GL(;4MKvsFO%$Les$u#P%UL zp9AnW>I-BEJ^!QpfOrU)-cWwvQ#p7SAfV=GmrR)_Ggxq+wBRQ!MiZ#nfuf(o>6gMU z4(jxiK=KX+kQQ7zbqQ5|F75%qv97-U@xNenIX*D(`er*Y@bL_w66AiD4}@AeIn_}p z$#S1xT@B-^3d3Y8%O2LHh`u2B?pI=noFXFRMRJKFE%xhWFML*#54h_uMxO5<0Z?w| z{JaL>>aeX_K1>uozo`Wydk{fIl_s8>?z&xG^)KAZcK|XKXF9pM0&+}$y4)Mdmrxuf zNJ>fyGU4Ll>Uz9hU+oR-#iFP+>WqLw0gfTT3HWzH3h#YvfRI=L>YT{44RkiTxVyW{ zD=UZf_V&K)Z>WnIK;N7%_QwZ?hDSzF4wdKWzg;?Rv^n$pTmol~67t{Yw!)H(qY_6( zXJa?oU4df(fYYeN0Eh%q*5G-t0UeIQqrE7RftlGi2%jT1Dk^H|3s_WKdEP%f z+yneno1is+SJ6o z5paLzwG)hZJloD-6dKqAnC<|K>C!9tuuFm$`#S)l)T{CjC;%S-9Kr+9jBWq-Z^nm{ z{rxZiZqz*)jxR2L_@JXRI6JGFKYY@-Tx*i3lEZ6ue|`3HGv^Fgu_RH`UsKrwy@Ah< ztq>_y*b~48ZP)@tDJTn6!t;w-KQF!Of()Q~UCzl}={EG(49DO@5Ay?oAOml0ZT&Ll z>X$HrnLK%rCF09VLqoH(y9=;fKr=_f4qfN6Aiwd322RlRUZNN)THjyDAm-rKmNBr= zee^Qj?r^VsS<%jaO#o_tICywhTDJp7=Bok?c^ zFcDxivb{bTHhx40HgRu(qkez_r+$0|p6Ph8Z!i!FvT|}x{zaKPK?8&JyWUI|;Gnnn znZk3!InwDK@Iv72==k%X>GMgKXlWWCPhw5KOs6WuZ25LLMlO+p#jq{wANhX7`tTqx z>P$>bJP;r|I&VB|YE|`GvwO@Tvwcg zUoLJIR$X0vU}%Vpg+;MtQlWaK)) z$NPp7KOVY2r5+rZa8CyU_0hcFY4oqX>hACB3m*5+plA zEHU}=p1{Ey{Gj|coF4agNMfvDNfP)NKzqQ!t*+-$1pbSy?;QaA6t&&;vhQZMA2{va zcb8WIK5h`Gj#vOm5Ca6*Ke8VX8h~|(A>cv-&_C_n{XLNW`}bWD2`ugb&2?yEBDx7H zZZeZTBf(9_>7NV(^A*3cs<+O&ppK-ZB=@5@9a zb11AuiF|NR0KR6IYJVyv3|q?Nv$2yEr$?C4!$gL|cE6ipSxWN#m73#0RR&~SyW6Mw zWm210>6LlPzn+x*JMxy6bV^D}!Rv22qrt&Y8(!C)eJ52uivTx660Ov3GWv@#?SrJ; z8=-mh@|Q>Am9i1VP@Z=;qdpSQ`It~~huQ z*b({#vqUNyC#u8=8`3kWa>?%j1WMTAahwP~M2Y*8iM#s8u3dM^Gdc}s);gq-j33`~ z$lA1!D(C(*9ion@1l4t@P>2!@5T_vRRJ&~N)^0cLziY}9>Zu$r?Cg+(Q^CV7E7^A( zrgJ38K4`=SR6uj~?6pv$2sEk~Q`vmSQKyX}A4PNo~DR%xHN_m03 zxy61L0)SBnz=_3|EZaO3gHJ6R`~U^yvu8#~%nZp2zwa(b94sH5$p~}=KTs+?Nx5GX z6UVbU!|_M+`B(cz4)|0fEUmz4dOiawe0IFK(d!+D@syjsqbiyN9IQ|Gw`;^!s66(x z-wtdCL6tz{smS=LSvWbT|8$(=LS#-wmK;asROz$N=FwzE$bX~N8j z3#H1By6jo*$60R74tt_-iK5j&@d~HoezQ)!xdxabis%LDf9$EDtb{RG*36qABR19P z|D9$t*RRoO$&g=!ezUdawF|zJ(bb|z*ffzvX6p;xTnz6{59j8rlMY3YB32mkA4U@K z?q?d=bf%xc@01R0nEum$o%cRT#PsIyNk`2(Y&B~=9_;a-YsU-3*1L@W;~xwm)3eVX zica>^<92&_Uyy*@h~c=S#Kw&iORxh)R9COd(00v?d0f)^e64MA!jKcmVoJhazu4#7 z7qi>jKj`6|YVgX(B(fTBU$?y8v7qqH_GhT4_mird_no~znP35f-rwabz&jojj&@o} zzw&P8a-N^x?P_m(xF}38^TaKYuZ7TScc!Rs76^@ZRxERj=QKq^5m3R0n;OH>xIzD@ zjnDCegM)pInC+I#=~p|4hm@J{qp;oR5hb))C;zBy$*AWzW&wu}KvZI8VflC5kv@vn z)HRv((jwN~IjYnwm@JksYSKCD>f$pD20wKT^!JLdEFAtU6OxPBWBm_J>R5rFJ^2nW z;g-;Z_n3X(2zi44V>IYfUfWj)Rr^sjtghYNYdp+Ua5f;sOK24C?-93eQP8RJ(XV)r zj?laJYSz0xgFx=1EpPQWJ|Ym{c2wP;^H;{zAWT(4 zxOQ(U#i8DiD)#*j+V^!IbL02d-qM0;vO-_fM#&BP@21-?6!xA*+>b92GnUgM`!hqcr-dj(OF6>J01Ug|rSHCxLF`u5J$N8nVrVEMk- zFqob;fFlA<>v*-*^>uh%-{&4~K=&d7AYdVE{7>tFCmuKw^fcqQhS?Z}7a#`9k?sG~ z<&D#;>${eNFgTlWbC#uGtd2^8>yAy7`E&MVwT#YeFTwrbvIuckv1J-_dGbrp>=dMA zyEE>~orC?Enc+Kd(GZxiAG_u2?|8LwX~3G-w07925x>d z=jH^`K%b_k9GBr?yD(z}n*zMqVF1i0=H-zB>IA=`b2~tLoC4VBL77zr+iY(vLEyIc zp2^rLn_wvKY5!$#%F?AyiNNF0w<6|S)pc7Lx=ZQvOVur>`BLFuYQUY+h%rEQl&1uP z+!`A-BGiiF$zIM=80!fB zX!2FS@mBCn(g#n#w}aV%H4Om}w*pE_OJ^1vi=R3?fTkoNEe#-bB8l{t@G{puar{hV z3~baw0o;N9(C1SMD+rqN0diqo^wABb+O&t zyqDWwZ~pU9HRnlM8^huw*0VFKI0q!wM|R6PA*)`d7+N5X{}~4wcxM(&&EB;-3mZj* z#h)-g%R-imNJv{_yHV8rd=cEPmVcOQVi^S=Q<3sV@TEYQ#Pznb>36uJ7Axdn`EI*o z&o*!SYU2!Yu(PXd4_Xb4jC=;zlYp+M**|wH_3p2Nq!a-K4&|d3-mYDQOv&Rv^bk|= z-1c3Sd=OLEOlDf{F=}@tA-Voh4#EvX+GO{4cfnQs_}^^{0jAa&GvSMl2u!a?=U|+w z9zqco;M3?`IZrki%%8PaBQF2*@L5my@k>=|@P1IW^M=bJGs-kU=f(kdyrYR-3$%#c zrhlfAQ*@iy)2<>3mWxmI_k@z9dsML*%MLUTO1iRxzV2EtKVfUDY0Q-TmWIUAloJBv z1b}tG0w+rs+1uOy>%fBI1i(1URk}fdOl0q;P-oZ=L%{9)`5)yGd;C>mD&VpO+>DSK zoe@F^Px)*n1NBXJLP*+y0bz1tSD=Tud6GELVv6Cyx~%SouX%(5tph2A_yaX#>ZyFR5rJgxoxX$JV;=PiWD1Nzk``=@+tsNa^_0R zd6xp}SoggeJ;9~}oIv)JptUcD2^zY)yVuT;M?uYs{#eroHv#C1n%ARFYZjz|8WTno zZJN=I0Z*hCnj$iQHyvQz5S<}cV>2)H=F5*yYyFz6rD=R}L+bwE>GzDIMzYtf{Cs8) zm+x3kl9*0P;{M;2E<474Iw5Id0R`Wu?#qZFaH^FgQNzk;8M9^7XsqaMQjfP5g@C5Cw8eI3lXi zw&Rzx6vgD2#~j^3Jtu*QtbNFWJ?jf@oG|iNBoZ;(@UV0F-AhjG34H9(Q<%dRcUHLe z>C9fX<$>qhw7i?jk7tt+PN&bv)p0_Om83d8e9S)aUqp*S!do)Kb9|-yx>NdZ2R8%k zmyN><0at;=_pPiX1%m6Nd2R6k@@WzXy617~dhsQ-(E5Yn)l=bYINL#yg z%9x*Ov9F%Hv2XWxi|wDQi*FwGXrCSOj0@m$G!~cZtK>EGj9Cwk59>b)p5i1ecc2BB z)Y2vx1s#D~I+VB{-fo4%m!2E3U$}mCP$M;)PU1a-Kzl>@b{K7mXHkuf9Qg$W?FS8L zi$%hg`PDl!;iVegbI7q}h%O+(=x0}QJ>JAvCa_dbwAVX+j5GkiHuXP8e3x;psp*&9T? z6+O{AWZc@~0@y*t5r%`N90_<5LWGTBzqa_QWCWcoFp=MpA<1S0U1M?g>pT;{7*%N# zV))o;n@V0r9AC-A81@i<442tVnQb#itaAv7{x1@1*Ex6 z4W7*={~(MkqnGT{CcYX>4mWl`uYu>!GRbRxr}_su!vK~|4=2k7;7u0rq{8(gcApMd zRQOis_A#ILO|`$iXa^7aVHxzx4KeW5ZXyH`4M-@w2i{hT?=%nR^zTWXGk5z6;-OA3 zOnNY>jNIMFPyfnK@{Ey4jwlE-<{>u8_%+I-ad-g*sV|#-0pFjukEQ?FJzy>)Z83!FIHT|1IR+)aO=knsZ@NU5*CXZ+&2^IY} z!RPlp%UwlSQ6vq|0^-b!-+tC5dFAGUb%LeM-R@&IblQ=#dd zEkk$==35NL)YDe#Pcy)@C%4Mwb-l69#=~n`ck3wT<3S^DX<|NG!1Ct!=!;dMGn4 zT#|^AmBJaC$pV+_Ej}2@e6wWQw{0*{HF%!zzKWrLVwHT>P?31$oT+dCo^*StgnT>F zN{FZSbxT%u5?4_*sHU-=g-KA^Qsfn$%9I&%e2#K!sM4H8xQ%x*{Ey&0c5%UeU)l;_ zjh5A3An@zlgDt;U#C5B&SfYsrzo5y&e(fznOx)Ev&Ct!!RrtF_jdt^56II!2H++aSn|VPIvG{<5p41@mjrtSspOXR*8>Ky~XF3Vwb< zkhWf^U+a&@$HbREHHmE<=gyK+$|A6oP&N<{)s#Z?BQq=0gwR7*XqvAJ!p4V)1d%Oq zPG7he=!-{b{;i*AoxtU97@YV}jOy@$MN~!H`U`*Lu8e3GNWa0#ZT(?CiR`|(O`At- z*+^4#mc~nn4i|T9(?^0pdi3`GaXLgdh05W&%_aBy?x361OusxdroslwiqH;MHg<>K zyASW3&kDs;D+e|(VZHD-!wa584#^7qUCZU)hjBZ)TT`@#X86X*spuJ6Q^xj?5x`KDolslh-o2dz06dJ zKly1l!z#Nm+o3dNO>HCJ>ItMy*_|lN&^7RJyl7vYU~K;S?5t62M2%LAT%r%(jB-F? z&K2#*FEts?g_$74i>jna>6&Hxfjt2ARry2eD=ME1)XLKf!iSeF+fYSY>|nJ|U;=fw z2(^_%(grNsvTc~r)bR7qb0HwU?K)y@*;jpz^JaeniO}&5a}>EO=zx1VLbEGI@YQoS zQQwr*`KX%H^A#hO!Xx+Eeo*;>uFQYXW_u@@_w?JU9Xl6}Wm8ucuC|hkmim9syux#7{f?gir zZTsnYF*EbS`Dz0fn^A|R5v5eQG{Mk51jYi?n{~*ne1_sdhEjfQl~?j-FfGQ*f$@6C z-JPvIuJ>ir>o!N3HFeP{Fs@Big2mCaw@f9XHxrXNWzMOMD|DJ5>Iq+E134WBD4PWn zKaj`Gj?l{5+Fh3<8JXu1poL-s07ckxK;?YnbO`PoTN9=}n-&%RXEshbx-o7Xi zhWR^5*+003rcBOXWap@de2J%Xft%7rt|XJ2QE7r&(Q3>0Wq7@-`iv=zry+s2#QQq0 z21rI@nc9l!%1T;*d%D+rv#rs$C(EvjcIC0Hr7*#8+vAw`3>a`5ZiOhpqV)4V$?`^gN-Boa~oX;kseAgP4+QY&7anM45hm$0Ra-d9*- z!@XtPa{Wi~M@Q*+Oe(?bF08=iV|~$b80cbLsxbx*-B9?vV|&Znmb)rAKJjw3$_M=- zFM-0*l+~=pvtNuVg|D`EiQ-i3?3vzH848J?GEQq|1DLUZTke7TyOmbSF#e(p&I)OASh<5zU; z25m8%gehOsRS$rjsb-M!@Wy92G8EX zf%c|@Jy*)z-96yAs7=ykOrb1FrTDGTiQ}O+)wybp>sWo|TF|hY?dJ>6k9t$N_fCg7 z2ACJsknMo6vGsMJ)!Z0)@x9#cCRVS~>3zQ4M+7tC$*ckPtM+F=1G!n!4v|N(!uYuf zI!SVcQRasevm%yIQ7Jb2PagqHVLe zV_P;9q}^Qe7>Q>5y4-7rFOtV-IG#7r`{@z53M;ld>}A`wPly`YI-_ZLm@r5F*KaP4 zfw27oW@8IxBycB@2y%O_ha7!ssj@ve1wo4O;t$THK|k?D`sN#&Qsz%e1&et>IWYI8 zzxU&XRcI-S(v5b!jt+GZS${noaRO!{z_(E<8;V_gM;-I*1~7LJ(=wGap^Vvpkqgn5 zNv_Z4WRHuIa&YIbQc86nV>Y4pCNWX@P9>7 zP9mQaJbe&!d1bJVmA<#U6)rFQ@c+%IRunOPpQxuSf?cUZAHgms=I;+}w=OOlos50ouc-3|O0S{``r|NIqGr}=w3 zpwHKA?9NTFER4NG+VE3d-3OA2>D-fIx`+~43^7TFBw+kpkj5n@uJ)_qEDX3ToHdk@ z-3=d|_x@pLMWU9~8td=Qage-ZKG#M>g=85h4-L{x{**>2-o1f+7Zaf2waX9QbjA*B zrR+HK+RbXt$TODx4~+I*2F)*7l@fPyb%2m5?y0|1Ro#IfL^@TZSr)Zzod8&H4RT=XfX`M9jz=yAa5f@MqO>weIH^%c3BI-EbjtuP7OZ@gKRz z<4n0V+7xncUOOlG!zm>7u0tia?<`|8V|awMR*J)9Nfz#%{}m6})JW>w)!S`j53gb8 zZNVvcHyT(P(i7i%ey(vXk19ggVY^WA}{WwcQr?ZYop(oy2m*?XdOmm7}SpFLl#$O)gf|)v9p?)aDF{{9$HymTP2Y2}=#{=m$V)u-t1F0n zEC_%I*>I<1LLds&vtQ(hOnPe~DatPijK2Vi^7#OYeL}&Pv23J?q>@X=u<$ZwQmcP?em=oAmNLwvsidEKuL#+k zw+zSdFB;UC3)2g2>%$Um|cAxqUVaNkQs7H60J-Gr? zkR@)13n0o>^)7eL7`xb6ch=){j&;ln@_y@LBg(0Y!ut5(UZCtJz`5AW)H&K4 zQHFC0KE6osEy5ZD2xPr&8<&%rJkYF{(>5%_CgclXYcT>6AL2BjMAGWTBF7>eE>m*rTESO^JuOr{{txldMyX~nZ$^1yF!>{tX zN}r0DlXUW&aV4ccReY6uh+`|1+AwLdcc?XSr=Sb)_y5m&wN7mNoSKUZ_n&JSFo!*m z-+i-O_)J7Zbf_yh|7C9>TQo1%Ia@;3QqPkUvT{+Z`}Hy`zRnb*798XhU9 zJ0QHp`Ezn?$z}}$NX{4kx^w2+@@-wI{l^HJ_xq-jHJ>Z4oAI2XQYT~j6HW|ny_uo; z`M#$jeS9ix+z(?6}?Lj!nYlhm{^J8P{@W?yw$eth&YC_4Pl%8y@-;Sm$Zc|Bd7 zicq2^F)FiJl=u-U8BgyNlQQkBuh^zO+zqFiWQWIZ`t7AmcJIab%Sa0NqFg`I{jlrF zaF=L>^<(6V3_FrzzDwdSDX0;ZnZ9@^9GX;R%D=uJw`Z7ya9MjC8Ub^Vi0bzCW?9`{ z%HY>}9vfZga(!`mRL6&yn3x>+h;)(s+^3)nMwY4a%2iFVwZCZ)@p;m8Z$4tU_^^SN zAJ8rsOf5aRVhqX;&^LuFVT8ahcI_+K7Kt}Jg87*8nH^n)pu2UKc&Z%ku+Xk~S?K0$ zb0^7kOlO>T@VJ$H$OaNc&Pyfpbqt_}??M+z{}E_{Ns(+f0-wHL_n8se)NAoXdCH3> z1+j;fV&K_rbwmJB99Ts~MG&nZTt-;piNo`8TsU1c5GOF&8;AhmzeRB?5Tf#BJLl1S zHgaDF`Drj)e~GojjnZ0G|5P0-5%j4mwe20s_hp}A>$!;#FB*iC^LkR_^P(uK+1U4c zx_gW*JoX4AEbC!`8>rgI;<;-3#_j3c=?MR~ zu=QGPPVL4MIaF{*2o)Eizs>AH>;Cg}XcA|FL71zuz_5B2Q4B>X_aonyE?vm*()06( zp7+T|$szM&-}1@)6(4~fH>`l%b(BK7X?7~;?#X=@k%c#%y%!(fbtfa6gBA8*c5rVb zbL-@Ok@n5*3>(M(%FokS>Iwou&`L~5m8J&(L;N;P-!Hg8Z0Gz%)>p8)yHsg z;w4;g_si`4B3alVj`8*akAl(E8L$Y!8g8^PHIeZ0f*9{60>Q^4cBVAu592$tXLcUm zGkth3XZMe8obFph0(SVp)eO9b+gYr0phj3rlN3RMfHSrYWFbI6NXX&?dbq1nqs$vj z^8@$N2VA9o{G@K!z4nTgep5QRu^){qdD){Z#Mffz5*fviURkscwzDEe$e6=qdUWbb z+$wiQo;IxeVA8-!<~YjKWP2mzKrD#5p(>8;h~ela9PH+?+nHFT5gjNb7oiSot;F0o zZ_86%9!kA&s*r7eJBJIc7_x$v&+ar z6v55QFKAh{-xIJt^O?$gy_>oWb4ATx_sQ4XtO+ioifAYSR*T)$%UL!}+05Ba$v(Sn zSh0;=XykMFV}M-d9-vhV70YKmTo=#LRH%ryQRuWL{&La(cBmEs zd4PW6JX6Msf{qp2KUa74**A?7Rol92(y92LQ z#x<;b%t0!rPGYih%FXh0*zH&(?z2NKVSCSygwpwW`wM531_c}I_u}iB-k?;0Yy7vH zd83xr))Y6FvEMc^YvxCj7P2R&@vA&NTRr%3Iti=%#poY3<~h!Tg{?s|>v$GSIg1_y>w3sfafU!zYDa- ze!q?!#w?5S6N$!|Z45pZRmq;4pGU>TjY#LP+Phe-H(zhEnS!mEwsv2zNciu5P@k>0b75kMQEJr>5V51#?@XT@wW*y67d}^>Y4+-5Me-b18T9{U=EXQK zkU{9rKmHKUfS+gX4S`Hjo(&G(8q}5%*)c}f-cqF%Nj6`#B5TS)2qJ-Jx*q#oTK{4-$H79rihe7xA+6-aJhtuygDc-C=O#h150UTqckEG=5q=Zo{$}Q zXQ8eLsds`5FL(EW+mVZ$9ZLFcThVVG6LfOQq+DbdrC@{7SYYXQxlog^E#CYALxb^L zq16Ax9LX!y^teTdRw8@-!umUOiLLQX17k9#419i2Tv3$d)ieaE`!Gf0uRv{P5qFvm z5pKr%j`tbNb|HUzQr-oIFB+^*nxr8woFKX>th%iF7j!Yg4nb3KU9rMlS!+$NWf6HJpjQeV+Nw6OX5@x2Ws_QCNp% z`o=-X#C_Cp)ZJ&)e52Q;3Jf3yT^f>kx;l6tj&bjR}c@}zNxAiJq2cj zT5(W@2kX{N*AL)zXm8E=F($b&jBTu^v>mdiqo~3KLVsl#cv`10lU?_K7kHxCFQ?dq ztN>hMD_dTenj=V{UMCD04P9n~;npQmP$fw#l;Yl?m3MJY)_h91wC z_W?_~=sW1~(TV39&{A}itHMF0rjI-lI~EOY^*-HK?Z#MZF~>mdv!_prHt zXi;o=v?Ggint@4~SrXdVPvWz&f;eQR4U7vpygPLb)pgSz1JYoYpRW5J7Tr(_l=~LP z34PMjMY7ZVbLkB=x~~{rvn>KW*tC1Mg+tS0-kF7bk+mVnP^|X+v$L!s{hTmvTqdS) z#b~Q_^hQ`!T_8+IC(axDuAb(mvc$lLxDHBL$=e=}VP_wTigH&Qj<7zxh( zw!(@s0v$kFU-Qu#nQQAq)DzoI*vimNWy@fjd9SUsGGDIE%-{WXQSO;!*W!ATMEG{n z&N1e{e-(N(q<(yA{H(@M`|V5&fn$;Mu9;ZzylCQ8QjR-Ld?Z$!6FjB#W~NDVW%+(v z?c1(%7!1At zD>j0+p?%lQ=Xbs|b>Rh%_J%R5zJg?p;StW@t#GvE)}!(Qq%-zgJ}K{gl~m2X3yU0d zMbuIix{*Uib9THAAlMEhf!G%;8+~_L%h;bYNld^;rB!;pd03k_$G_X`$G}f&DD_VH^RGuCHoHxttIhCUayJqZD!0jn&+Qn|-Ao}n z+lOX1n@cG-TKf{{vfG-?XpmHdy&=51K4=d62OeKJT|Sk6M;>f??4049t_4~_;aOyr z#HbB)-8Oe&2QnOqWxK(kW9ojc4{aq7=Ea6RHe(h~-}Gunu%Rra9_WufGe5r{k9W@02Jsve+wC4K5r(IJgZ8+>krD`Q#&aG-M}~OSEcqk2*b*m+GA`G~Rpx z-LmD$#TU%e$J_-=oO(XICD6Cffg@@xmmut(wGUe>6-^IAOM`f8E{{<*cswwRLpclj zjq$%rw|9&k<9?3U+CcIRf4FetZ{^5zf@Mm@nlX+0@#7t(M?C+wgmTh=vxv{ivqetu^@9C%_ z*7IxU;9mH>-&?BuYPgB7GPajT2NR|GRzv(hEuGVOsM~xFc_9O4Z(J0FkhjF^L|g6ilh-JgHP4pNO7$WXZO6MF8H}6 zsB?XayipfE^<3Q?)$0saHq#aAiXqGX+?}1Q?@9!ccw|tf?HiN4Sd_l${y}UU%l-6U z4UqTy#JjTt=k2A0hN}d;*rp=RJmdY@RcSW*EIJen3>gOpCLy=8KQLv%^=jjbfI#96#$ZPd#wBjIkel=7K4knOa&V3uhp3jx zo{#-*JOsI&S+#k;KXDdN#cwh7qITzHcTsM9=q^i@tdZ1FO^^V_MVaN_daOO3PvDn6shj=fGoy$=}q1zpIzp1+g#v$*+;UD8DQ7-$Ts2Hco2X3o8?VyBM?< zSR^(U_c@8sAY)YFJ6_LW&2u<*_m%mm^M^H>Z3(x$@8!IK5fY&PR)Ij%UDcd2_5V>q zWp2}1zG2QrcxZc@G^v$j`w`o)_B|q!nA*FrbF4TCGB*a+tC)JTlI`WpM5?SEstT)8 z3zl8&6psoR%gCeGB3URR+k;dn^4aRz>sO2pUI}*+IhMyH zKd()8BdWlT6>CMIjQlt}kPA4AapXVHP*rKLI&Vgq>QT7w)d@O%;3R(W&bYOZop&mI ziktP@X|WTS$Z3Z_PfMQijbb3`gRudLrGMEe#b~^C ze#M6pk_su?T;R%OBJ~~%xURk{Y|jFyZ*nD>{kNC9%2D;+QMK#f9R6BfQYjF(a#-w}{X4RGR#^c^98SN!pN2 z*$Birg;Zb-2!M5gdB*UerifYvF@tyCzZtnzAh8ykKAY-|D}mS*Bii1*_T#{vHOzZN zu@~*3A`-%=_7~jpI?)op#Qn&r8ooT$p2a{*HfIDiqF<28#PuBFbG=*dZVphEd&x8Y znYwvI^D`z}0I}M_2#CT+vk1~zvi-?3b!j zyvo3|S9o`B7jq&Ji~LMu!HJA6;{JHLz_35`2VD}#gWz~FqnKD!9Q0H#U#xTv+w-+W zIEdYc#!J?JT!hq?TJJ|;d4gq)V5uxEhOl%lvyV|)k*?k$(0G`9f-r%Dw${y@X)rdH zb?@Y%YG|6`HYB{N)(U!RrVyg9@5}v&8Q^@HyW*$q*;pmy8Vk7O_z|{P*a0RAAm;JING2o3F4;I^|LD$qgB;qt_>~- zh}~#gV5cZ0UYy(zei=yC($#{Q%jQIP`Nm*mtn?66%_gX3Xo33tb5LyK7yk#%{ni*R zXN@bdFHZ&)IB+E|O`k)>>D%EnHY%zr&YXA5db8bfGpDq&gEtUUJk%|M6GKl7|9rbQ z!{JA6EzU~zSiq;%GdhD9{t~eavPIf+jlgZePNLEi(#B{(m<29V)WNG4sR`C@r2eh> z|7=0&puJ@tHn<5$i&U86Cfz>BcV|VZm4~<2cme&9KNe;zLuWsu6V!(*L~;yl+o|0s zqjpu(s_CfYIar+k%9xwnA>zGLs|e6la33HA{_>~7GObaP%rP|ytr{3`HgWwt zscVmimRR>eDroUD6e4I=D#N0&)vRw$xwt%!vBg4<6&E2Z%fJ-ENpne(C;y-@I?!dj zJFb=X>%rN?g_Y_4LhF_kYw4Ow*DZ=n)&x)ZD0jk37TOFXw0=V|Jj*t<3_cHe;1 z?6Q#XN{glnVZ1w`D!7>5!!1!9`3Xu(vYXp=Ejg!PtsKX0Z4WZ%zi&`j&8bFwqeGoF z3iM`QEW+x=CeNk2;_EP7RIEYvBt(pP?iSaeElRnd;s=q;aqOe5yl=4_7zg1tTq89HM18iw#*= zP#L(J5FS1z=k49$n>_@W(s%a;qfX|jomjskBgau+Xoj3BIe0H?5=4HoWVem{(uD=> z`Q^+1(f;TEf7-wOv8oU&``HXi3=+|B2)x-%zoxqPj$IOZ;6iQl&Hf*4$zTHhEWBKc zB{-p~8Nbv@8JRvG3pl~`UrFjoD!t0Ap$J{Zp*tB=bU0%wZ6_#i4{|8BGMaLyp$^2& zLdtCL4JFFY)Sn%xl?MnrBNLz4){lI1x*%+p;s!v^%O(@Rji@AokaO$jx2cVYDL zEnrmC5%5l;Kj7iQv=EY5w2=%CZ3H@gvt3kUegEJNm(z4&hLcuDAW|VOAN=8;SdLf- zBS1@GX{S4QRj$=w`@6N8@rn+sI@;Y4-oy~Y_GEsZXj?A|Yrg;~L0jIy%UJ}$WrUYa z_u}V-j}v5asF_~P6S#;_5BuqKb`on_Ckpck^}K5rBi8pIf^pRtvv7L|nd!RcOB#n| z3uoR_!_|pyV#*6<-19qs4Q9{>QkX|O|H`)sDE#kPy`Wsl4XGa@h8ED(AU&M#HDB6z zuz$VHk=JOPwUyZqP0aG!uQ`{^6yUbOvfe(+KY;gR!O!c%YkMb6i5jkS1f(puGwG=X zrdjDY+_{+Io@o)?t9Tc$HndxONqljZXyBK>-`~jjSuHl8d5XRIwLUujzf8}qUBDay zM`n3}>V0VHOe2=1S}j*bc=*X_WGpbdQn4WZ_wQgpEi(qD?SMjZb5h$MhTfuLODDWa;jpldqp|+Zz{uPU54*Zg_mm?VwTm2+j{Ik49KnV8oJ<;95pZ2Qj zG>rQUb_LXr^mQ6;3NG$jD#x6fH%0D!w5@r)HDN5(d2Xx2fBT^{H>E8Kx*lJVKI))z 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 literal 0 HcmV?d00001 diff --git a/docs/v1/resources/figs/reference-architecture.svg b/docs/v1/resources/figs/reference-architecture.svg new file mode 100644 index 00000000..aecd4475 --- /dev/null +++ b/docs/v1/resources/figs/reference-architecture.svg @@ -0,0 +1,16689 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <date/time> + + + + + + <footer> + + + + + + <number> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gRPC Server + + + + + + + + Instrumentation + + + + + + + + Platform Drivers + + + + + + + + P4Info + + + + + + + + P4Blob + + + + + + + + gRPC Client + + + + + + P4 Primary Controller + + + + + + + + + + + + + + + gRPC Client + + + + + + Optional – P4 Backup Controller(s) + + + + + + + + Entities + + + + + + + + Config + + + + + + + + + + + + + P4 Runtime Configuration + + + + + + + + + + P4 SourceCode + + + + + + + + + + + + + + + + + + + + + + + + + + p4info.proto + + + + + + + + + + p4runtime.proto + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + P4 RuntimeInterface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/v1/resources/figs/single-embedded-controller.png b/docs/v1/resources/figs/single-embedded-controller.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1ec5140feedd532b933b78c61c28223354e6d7 GIT binary patch literal 30763 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 y1A7fX%+>CW8hk{7_OJWx|EjUOG`ok literal 0 HcmV?d00001 diff --git a/docs/v1/resources/figs/single-embedded-controller.svg b/docs/v1/resources/figs/single-embedded-controller.svg new file mode 100644 index 00000000..f9583cf8 --- /dev/null +++ b/docs/v1/resources/figs/single-embedded-controller.svg @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gRPC Server + + + + + + + + Instrumentation + + + + + + + + Platform Drivers + + + + + + P4 Target + + + + + + + + gRPC Client + + + + + + P4 EmbeddedController + + + + + + + + Entities + + + + + + + + Config + + + + + + + + + + + + + + P4Runtime + + + + + + P4 Pipeline + + + + + + + + \ No newline at end of file diff --git a/docs/v1/resources/figs/single-remote-controller.png b/docs/v1/resources/figs/single-remote-controller.png new file mode 100644 index 0000000000000000000000000000000000000000..b38fa6cc8eed6d584c85fe4b4827907649a9273a GIT binary patch literal 30948 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gRPC Server + + + + + + + + Instrumentation + + + + + + + + Platform Drivers + + + + + + P4 Pipeline + + + + + + P4 Target + + + + + + + + gRPC Client + + + + + + P4 RemoteController + + + + + + + + Entities + + + + + + + + Config + + + + + + + + + + + + + + P4Runtime + + + + + + + + \ No newline at end of file From 50b8bf56992b7554ae721928ae44cdaf9dc21e8b Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Mon, 2 Dec 2024 22:59:50 +0100 Subject: [PATCH 16/35] Remove rogue version from Dockerfile.asciidoc Signed-off-by: Davide Scano --- docs/tools/Dockerfile.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools/Dockerfile.asciidoc b/docs/tools/Dockerfile.asciidoc index 139fbf5e..e47e96b1 100644 --- a/docs/tools/Dockerfile.asciidoc +++ b/docs/tools/Dockerfile.asciidoc @@ -14,7 +14,7 @@ RUN gem install asciidoctor \ cd rouge \ git log -n 1 | cat \ gem build rouge.gemspec \ - gem install rouge-4.4.0.gem + gem install gem VOLUME ["/usr/src/p4-spec"] WORKDIR /usr/src/p4-spec From 9eae1e4d07cde264f753d7e1ab669a2e6d350047 Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Mon, 2 Dec 2024 23:07:10 +0100 Subject: [PATCH 17/35] Fix Dockerfile.asciidoc Signed-off-by: Davide Scano --- docs/tools/Dockerfile.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools/Dockerfile.asciidoc b/docs/tools/Dockerfile.asciidoc index e47e96b1..7d6da482 100644 --- a/docs/tools/Dockerfile.asciidoc +++ b/docs/tools/Dockerfile.asciidoc @@ -14,7 +14,7 @@ RUN gem install asciidoctor \ cd rouge \ git log -n 1 | cat \ gem build rouge.gemspec \ - gem install gem + gem install rouge VOLUME ["/usr/src/p4-spec"] WORKDIR /usr/src/p4-spec From 6a58e487e1332216719393bff13a71921bfdb70f Mon Sep 17 00:00:00 2001 From: Davide Scano Date: Sat, 7 Dec 2024 21:07:02 +0100 Subject: [PATCH 18/35] README updated, and PNG, SVG images removed from the repo Signed-off-by: Davide Scano --- docs/v1/README.md | 15 +- ...embedded-plus-single-remote-controller.png | Bin 44622 -> 0 bytes ...embedded-plus-single-remote-controller.svg | 271 - .../embedded-plus-two-remote-controllers.png | Bin 49551 -> 0 bytes .../embedded-plus-two-remote-controllers.svg | 311 - ...mbedded-plus-two-remote-ha-controllers.png | Bin 69904 -> 0 bytes ...mbedded-plus-two-remote-ha-controllers.svg | 518 - docs/v1/resources/figs/error-report.png | Bin 58359 -> 0 bytes docs/v1/resources/figs/error-report.svg | 244 - .../figs/psa-metadata-translation.png | Bin 40826 -> 0 bytes .../figs/psa-metadata-translation.svg | 767 - .../resources/figs/reference-architecture.png | Bin 73961 -> 0 bytes .../resources/figs/reference-architecture.svg | 16689 ---------------- .../figs/single-embedded-controller.png | Bin 30763 -> 0 bytes .../figs/single-embedded-controller.svg | 220 - .../figs/single-remote-controller.png | Bin 30948 -> 0 bytes .../figs/single-remote-controller.svg | 217 - 17 files changed, 13 insertions(+), 19239 deletions(-) delete mode 100644 docs/v1/resources/figs/embedded-plus-single-remote-controller.png delete mode 100644 docs/v1/resources/figs/embedded-plus-single-remote-controller.svg delete mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-controllers.png delete mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg delete mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.png delete mode 100644 docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg delete mode 100644 docs/v1/resources/figs/error-report.png delete mode 100644 docs/v1/resources/figs/error-report.svg delete mode 100644 docs/v1/resources/figs/psa-metadata-translation.png delete mode 100644 docs/v1/resources/figs/psa-metadata-translation.svg delete mode 100644 docs/v1/resources/figs/reference-architecture.png delete mode 100644 docs/v1/resources/figs/reference-architecture.svg delete mode 100644 docs/v1/resources/figs/single-embedded-controller.png delete mode 100644 docs/v1/resources/figs/single-embedded-controller.svg delete mode 100644 docs/v1/resources/figs/single-remote-controller.png delete mode 100644 docs/v1/resources/figs/single-remote-controller.svg diff --git a/docs/v1/README.md b/docs/v1/README.md index d99511b1..b9bf2f45 100644 --- a/docs/v1/README.md +++ b/docs/v1/README.md @@ -28,6 +28,12 @@ Files: ## Document Figures +The P4Runtime specification can be generated on your local machine or via the Docker container. Due to this, the document figure can be rendered using two different approaches + +### Local machine + +You need to install [LibreOffice](https://nl.libreoffice.org/) on your local machine. + Each image in the specification has a corresponding `.odg` file under `resources/figs/`. These are LibreOffice drawing files. The files are rendered into `.svg` and `.png` images (for HTML and PDF output, resepectively) at build time, @@ -51,6 +57,11 @@ Commands to convert a image `.odg` to `.svg` and/or `.png` and move to `resourc soffice --convert-to svg --outdir resources/figs/ figure_name.odg soffice --convert-to png --outdir resources/figs/ figure_name.odg ``` +### Docker container + +The Docker container, generated from the `p4lang/p4rt-asciidoc:latest` image, does not require +LibreOffice to be installed. + ## Building @@ -61,8 +72,8 @@ The easiest way to render the AsciiDoc specification documentation is to use the ### Linux ``` -You can use the [local installation](https://github.com/p4lang/p4-spec/blob/main/p4-16/spec/install-asciidoctor-linux.sh) -method. +You can use the [local installation](https://github.com/p4lang/p4-spec/blob/main/p4-16/spec/install-asciidoctor-linux.sh) method, and you also need to install LibreOffice to render the +images into .svg and .png formats. ### MacOS diff --git a/docs/v1/resources/figs/embedded-plus-single-remote-controller.png b/docs/v1/resources/figs/embedded-plus-single-remote-controller.png deleted file mode 100644 index 377494c2044f2dce5d91199ccc93b9866850cb27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44622 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 KpB1UU`tToUuD_W8 diff --git a/docs/v1/resources/figs/embedded-plus-single-remote-controller.svg b/docs/v1/resources/figs/embedded-plus-single-remote-controller.svg deleted file mode 100644 index 8b0badca..00000000 --- a/docs/v1/resources/figs/embedded-plus-single-remote-controller.svg +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRPC Server - - - - - - - - Instrumentation - - - - - - - - Platform Drivers - - - - - - P4 Target - - - - - - - - gRPC Client - - - - - - P4 EmbeddedController - - - - - - - - Entities - - - - - - - - Config - - - - - - - - - - - - - - P4Runtime - - - - - - P4 Pipeline - - - - - - - - - - - - - - - gRPC Client - - - - - - P4 RemoteController - - - - - - - - - - - - - - P4Runtime - - - - - - - - Entities - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-controllers.png b/docs/v1/resources/figs/embedded-plus-two-remote-controllers.png deleted file mode 100644 index 4560ce089024ac77c65068cc4f5005581c8f95eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49551 zcmd43byU<{^e>DEA|fClC8eYYNQ1OWBcXJM#L(R}2-4DBgF#4lH$%q^(nELm&;!h! z@p*oC-L>w!?t9<${%)LqnDwo*_dYv5d+&1y|EMgB|LEBx3=9l>c{wRn42=7zpO_;L zAE5rQ^pTTdV0388OTAO~%-oyDHhwxa6M78rSd9)gz85Iz6d{tRx-*iz(74!mQQMMK zcCeu5@k7}vQZ1*xsY&E(J>WtlLrG3fKtT=@ft(jH_W*1RrO7)(5RlBYGiQphzeDz@ zaPQIIUvk}_FrU+-#>%@yjK5brpDa$iA5u-~8`72TJAtz9=ta!Tfa+{HGXb zt|cv{97hoDBCkC7GNsbC^@~~c8ysKE!CXYAsR-EL4+QJ zKe67TFLVXHy!Qls;rRLg_>maR5~gp5c)@<83G)QF{pDv*hNd5yy1#SgHrKsbN+WXg zhpf)?F1IbVC!TouHixOx*HAh$e?+aMDpnEcd&T^@iVB-&t+)pn*gpHgWn;hCGV>4J ziI3&1dDmROqljS)y)SSW9ONZzEg@lPIOe*gIfalJUJj zsOfzQc*&2Yta)<^)zGY9{=tonF5>lgbR_Q7s)FxXU9#KLE}60X%kRh=d+L)^AwdnL zY7&|<)-PcrqAItJ?SGn6Zb}@@9W2dt)qUujE1pDqHNC!#3^E+@@(QzkP;1;d0eoAHixzHPSV>SDj-?6%gcAW zjt_^uq(ZB}hWA9MVMSPAhOCY&thTNFqx0HgX;)^IE|TBFv15toS*Y`H>=)VYZzIKIklCiob4DDn?*`(|j{X8aI$DAPK?xA1nR;gkAi1j}*ig)_gto>&Oo?-%ERv@Gyh0 zb8&b01m}56r}ayEjqsVraq(zf%I7G;FARMvxH#X0a=-Ngsk2+b0=?So ztip$vKK9VJV1_#{T2qMA@eI_*(1R50WMJo?AnboBCC}Jv9Npg=%0l+fmP_-6cw9@4 z`R0RnLcydK&uoPU5qa&`q8^yc>t1%;Sq|zXo}G!GX47v?Fi!1pl!lsZlGD7%+XDiM zNgQ;3?tqc_yfpiVTtcjM#R2I@H&3>x5}S$>Qt0@~Hq&48f9Wz!F#e>_f6>N{c)8L) zZt;8g$n`H3Q+Wc@l}59x#wzEzzBUx1QxZ)HyxAPO1c!EfS#4fGL&5r%d+LHTTktHU z{ALX2Yn3Jj8z(KwJ4acqv5v#QGDX;Yx+I%~7J&NCQxH#%iRHlEt^ zXB#a(x-;B)#K)eO*?Z!;R*+Ymt=SQQr538|Sc6OOb133P9^4N$eznujLn@a?mZaSwyaL&I5D*QU9r z)|f%ZHu^LTYJuBBDR~`SMpKA-8ZH3=4;T!^Lq*8$-p}DhSBR$8=1iH%0cCG}78fgs zgqnYSNFn5d;?dIHu}><&?QIZC7b$kqlz2p@)wo4{zJO#U%Gt+_8Rl*4r`S5r8`rUJ z5(thJ@IM?f$UB4O{Ss@6#Z=s+q}rlHz-*#7eU? z4D{{PyY!G{0DrxAPU&xpwqY^Wqt-DE&e{oS2*J)FtsPrO>%5FzPyha}%sZ4Ll$+S( z$~vW;&fa9DIb--9p1td~XXt4mP7QI{8T>3PY=p-|w&Js*jn~d8kH$HDW@)x0n5!vG9bC;1t9mW(B|yEjzoV}5JF@%C zEBc$OAmC;$QBULiQ;x!?j8B#g8s>Dl&VPkA`epd2VS9uwjO+IM_QO!uP*#NTxZfD?@Df+Hn^@nZ244<+~_>#{(-=mWmV* zFIBq>hQC|y|5AU2itNtbJTx!|xbbxN$mpr@n*|T?u z+;YDBP`+J#7!Jg_zGn$yQOoq3@Jgjn!DjLsu?L!FZ!I2+@{=s=;zTLhXcd9Hj1Ifbc!`zXa?wnhHFC7h zy@_8=VtryJJS(18>i@&>!(!mzKFmV++A9{G_;!>37CUrE*v-H+peO^FEuc1|oN6Ns zzkF34L!W=YhEfASmwSR%ma%jOQgMB(ma4WVy-m+<@)_ppr`;syT1y=L_`ccV-B)Cp z=6d3rnNqiEoVNW0sExn-YOCmVLUcR$mx-}WeK}Dz4~=)2RdB-ad0hqpB0Gv}W}Nl- zE6vwMB>>Hz*=f>dnz>cd$mb}U){^Ny3}r#%112(6DiAHk?fdq42gC2ED7Ts};~L-u zU#d}xRiz{y20wd<olX3bqqXLQ_~zPiHo68+%}P2h7(Jx3q&P?q;SWVB2MEcN*5H6X4A+Du z$^~o>Ez&)(Yj%-v0X4u#?#m9fnRJZ29C16JvVL}ohX`!5y2+l7pXF8$`HOHyw-sH( z`2=YiCtSCvPO!ucCw_!)mlLKci!(zj1>n3u%P0EDE|ZJJfQqM&&%5BiTaF&*T5-Oo zUxtZx098fVg={AYdBVR~Nh&I*x-lIW*gIZ54l8QEJ(5DJk!N0ReJ))!T@!4xG^I8Ia^NbMj`KQ&0mqUw>Bpd=I zuOO`&4!En=jhKV3YLmIEL$wS`2M`MpW(<6udt3fvu$zX*GW%|B!kgK6P=O(}uJ5dIL<)8X9e*4)PU1IWzrjNpwgnbe!I=jnZXonAt3aobtZ zt~X+$h6u}|t(K*O+~$${h7ix{@)_%q22U}6hsgq>0aLN}FN||t;UePP^jz{T-Bumr z78AfFTNlDhP0VK~Po*s~yk9kBY?+ylZKI8IKxr);-EV>LQK&WQ_ZsBSaw!rxs!qEZ z_K|IcIrEE(OQI+TNykEd>zf5B6XA(rm4S%;d4lEkpIDAWc#5y@eof5Ejf1RuU!_PpZ z8XBBE9rjAAld)&nXm)LCPVMn3)3I=9g|g=Xyx3JjQ=j2TlmwFEerzGrpC|aKm{0s! zxHtuoagk>#zT{Z4ORaa%R}j7Z^56j5g!^dKevD2d$OPXYC6go1r7MD1I`BlBWBysuL02heOqlo3kl=2PuyX4`uK1kEkv?({ zGM89kDb!p?^m!NoZ|vA-PA#wx4BZp~^W!-?qz|z#w>~u%U$pl(98`38^7PR#=F-t8 zlJQL`+YNZK1)ZN#KrK%XDRq}wN|H&mDXuBY@l$Kgal@yhhEE4>sAYr?@%#KUi13S4 z2i-+;*3eMrk0PPwpv1*~hxV9I;*V6aydWXLCdujy%moTU)0HZ~L7-6H934(7WPtsN zwQvcW(&i_=1-ch>jq5#p0^ zleX>OnrnWAvLNRy!RlH8_yH1(b^i+V)=AZkGxxQH9!({*lqoG>eVfUV(PsgLhh>2% zJp4`xOvc>Km35n#NhgDQk&EH-SR&h!8GaJ@;|O?WGQMar(5ilDdJbs5@roA!sB zdP_h0==0A?d*z!Mx>bfvwJ4O@fU=R+i!<@dN~I7hqA~VzJNIlOtrEENhY16 z={WYy-P8`one2tz6Mp*?q}jQZZ9Y=WbWi0Ww)3(tX(1%E;kx9KUb7#1rH+FX{S*LaZove24&n5B9bigpO)S%gl5Vs%5g+quMtJJU4Y?*kD>@MR-m>7&_{pKGE`KF~N(n)2;5y*JR4w1*aI z??2f@nyI1JH}$-ejRN%S0r$CMAyfasGZEJGhP< z;=^;7!E))bz;N86vk^4^?6dYCw1rh9+Xrn~d>mWxF6`l;(N`IE6f_$j;>BvE1b;n;N4{7>|pB}o=>SichMywK8mC|yMYi~SU>n;S%3~pGM z#C3|wd6T39Qw-yk_;vr|?4Fi^+A>Y(a{-aSqelUnc?7J-e(4>4p2)CDJ7DUeoq(i-WHjHub_UH?=wm@dLTN9B6s(NiOc4QNspP#yr;Q zQ?El3*V(MuDi17jr4dVwTvL>_-cjFgRY^XsO9|v*YMpkrko8&V0(S`oK88V+N)rrI>s&@e~`G zB#%}=DBqF9@K_t_X@0U2b?LEGa%>-#>@9VTPTSlE*4AMJmw>`gO6zZ}D8AbB+# zelBmI?56x#i;|m?`$^?9u8MzCfd&xmay5|TMwLJ?YeuO&Zfh?yv*i~nqWN`czG6<= zwK8Y-{XG;@ACxv5XKagFgkmS3c$z%)ZJwb9jD>sHVhi#+N0BS@&Zbrt@6GlPKC>1E zNVpU$a#e7!5OX8O8k5sfaEl0a;9_#fFvQ~uhjJ&M&d?xRFp(BHHM&)}c5#yr!g{cO@zTTMC0 zB4`*|RdMyDR4jEfH8tCA_SwcJxkGKjo`1`;4ebT5T10dg<>j|NxKw;K4VNx%K<{6! zIEy5t)~sF@Gm~s-w;kENscmTRct4PYDx$Jh@QtapT!-SWJ?jkqG$KU3gY!OM`?0E` zO1a>(iUtY+)?TRB~(y8z_wkTdTRi zNIp+lIU@MIm!23-j1l+90uKN64jPRmo!JT?kb>|bCJ)!!2ZrCgYNEdq+EaI!36lx( z)^Jxs5wvcE{4)P(UH2O?y2^|i|9jhLa@`7-pnl0xbAav(IEUf%4fv?chirMCGykkF zqd>2>&UIb8So`+gxO{bfznYeKX5k=r?vX+SMKqY}!WZ(W0z`9&V%*83o4B4;LLd<59fzx-JDb;>XqVqnJuf2q# zAM>nU5VhHei?|P&_SSP+U7ccGKem@!xPub$W+Xukpp~%Me#cb8VsXz<=_h**FZQPm zf2Qp7jZsYcjfHE*+)Bl~P^w7!Os?W~mBf&BTPA3Jv$)CQdXqnXQMz{>CX4ni|2UEY z>PfkDv8n)jyE%SI_fd~1!1{-}O5bf&O$iseWeKF5I=^6kS;R{g_=w_UixUYRpx6`) zulravVWvA()o9TJ{d_#XS@l^G6RVnj=X!I?@eh~vT1B+;VAVp0+DDZu zG+r+Z485|a2g}TMD=KU={ZfBNc7D)^;Ap0^%SMEJEqYMyJta|0*A}8#SHnC1S=2|O zIZlI$q#WxaZ>$OUr@^4cSK}db{g~3}rQ?%jl?(IhL>gQF)i$ZDTkN=w?z5cya^E6B zfouiQsN~8_@a$+u{z>6;XZjlQV7g~D3xk`GQ3eet^KD>QXvm6ybLJf~a4XM0LbtT{1Y zCK7YpP|h5!r{;jg{^Web5wuz?5B^)$^8)xuj4>|Nyo`4}uluxqCfhX>E-q$NY~Fa2 z87&5OJD%P!m?QuPs(cK)I;5p$l{b5{mjk`Z3MwFApO77K*Ir%W{G-(rR?2Cp-nkEx z7tUR8N_cmZsF!-VSJ#z;{bcSy|EKp<4{;U94=!7E5-g$g@syRk*;DKVEGVQz974rJ zW7frCx-ThM^~(PFaHxc&OPl8kneT8TESuZmOqZt(B#(Fr&{~$ZJjAg)`KGfk7pm0W8887tNAS#!>P^m&mai3S8Z*Ug*ST=T9QcVb&Ne;9@9aGi$bW_u>d zLwOL9ema6xI!X?P$#-*3p7c$V`5BmnpIXevMze=qG(x(9aFnLZJBqyReA&16^qK+{ zL%kO5xrpwWzp8$?O)ZwYPQEsM`-0bqE6YnpGF=oQcpJLDKy4{;isNEW*B@ea!PE3X zBE(?wV1h4+)lny}i73%=e3ndw-- zo2Iy+`PI$%mBl17kJg_V*EwC|hV{SB-@gh)gMwdD=eM`y{q9s>B(s0`DFY7HNTg9} zWp?rN!*rs0a^-%`J_WcEKxg6+xDEYfpQi*};+YtAy7Ul$h=qWOrMh7AN6u0So-c_u z>z4zrKdmo51nr#Q$!(4t9#%>82QDsYZMiLkt30R(F;c8+3aMH>&YqUIwuv^lems$d zwxCQ(Wfu{o$%*fvDzPk|%W(fK=ZP0Zf@;;BomWce%YB%8b z{>GmLX>|gh760gx%Onk?PdW`ZfvwWPcd!sq-VKeJa4+Q>=+V_WFwa=XF$Xkr0v7@w_fy_6RudP(UUL{AvqPr zm(6pPm6?6o z5s2T|GH6|l_9`5NLgU`cq%-U;PD?K~2p@E6lgND-m=e=-EmVGm@*wYb{;M)lMG^|o zjZre@n;UgPpzmZ2#xHBe-0UL$5I z;g#IJG*eP`%nV+C9;ymA(4$Mz#x;iMqGsN<6oy3aNm+H-!ouboEDHwg&PYY zrB{E_nmeJy&^s9$E1Y+_W!gpO2!a-AoVZE9ikOL1cqKtsLmrPVMI=U*uuf1Rz~_tv zW%^(IjG-hV2VL8?X*F$%tM5vp4t{R(|GI=%ncI5pa{m+tz5|aqH=pX?ItzdEjGA98 zUEivk;;Oqc^CtY}O6O^23)uZIRq3twXdL%>xh8J`f>Wn_&5JIH=3u?r~OWeWvi4q`_+JK5kdpW!wavcz0tGP6bY;QvRl4uK!2* zS7@mXM(U=_Nq3c9R5%#MLKUYL696ji(y3;?|HSY55ykb9SK%Dv5E}$QRI&8b}V7UEdjOT^>C3HEfKQ z209oo64q57_KF-oDv1Kd3a0(>kyB8B&Zv|hy#>!yosy^g1hoq@PM_n)6l}a?(O0Bm1t_Bc(ea^9|ad<-FDqv@*`)-vDXaSyH zoNoC{$&Db4f8xMP+^7EZ3nfWft!uU7TE3s+uCvB=iazI~8s}bg5nB;zcCOhTvHL1h z^YXfYjNZ9N&F6)x+h6}Zi=c6#^@)6w4e8R#P@GccujHHu#PS{DCPTt{mdC<>ca-oi zsCA7Mv^*)`LC2{yomnvj=m+Mbi`3lW<|=Fvk<(m@dd_Vh@(SRY`{+Z4m2*NXs@y!8 zf8G&3)nY~=C|s743L*Wu1ANW9GZuuPqS>r7PVG|T*Yo-$X04l0ftK{&KZuBG$muo0 z?jTZYYuYv+;ejcXX3Ru!^ysOHQB$MGf8w6Qb;gm|n|Dk!Kf9Xk`?yO#mty< zG(QeY6+ZBh5!U29MDNj~M4T@j$}v`^wk@{IMyDbt*;4Fg)DprfY1(^P%16vs#)#iI zA8}RaohJ?o}t7d`>1i4;ML}I z&Q@LKxHi^C{QeITh&2Qg+YDQCQ2QcPnR4^<)$$=UqVQ|K)BRag;;Y8g?B;cp&=`c_qy*k-cWWWLd@+J3&VvWSru zU11N)RD~={0Pn5;WT)5pbyz zz37iX#TRv9l;+brE37|8_Wv+>yCUx#f?ONndS37dtv7wF2_Ba!1e;vnVO4;!GNU$y z!X&xwevuoNLqOxB=YOk#VVOKvp~y8yf*=&+2Q=P*fzFl`vFZYUzdNu-cb6au4(KBJ z_eTyobP&a_9PNw%2UeNa7Rswe?OjA$K>CyG5%549{+p8_3sVgd9(7H22dsfLIxj5!E2lD z5lp$(a?dUN7Ekb3imH@o;mI|;+D6Tw0igK!jF-+D8dgT|87eXOxqFr~_1Rg*SivIG zoMUg)WBWZVOZn*OG*RKpN3GN8(f9E>w0xm?F;L!RXYSelnMCr|FB89KtHs1Z4Zt*Y z269El9~$<}tr*Mhk_ee?^L1l(8!8;^ULjaqg_yFZ&szsAYB1eSF_}T3#i3 zy?vuwk!!3g+kYe4K^E?deD?I=Fb($&d`{B0Wtj3N#axXtr;E;F_N2ffy{AkfdhM6Q z!e;z+t@Cu;Xqf2^A_hL-;KT>K)Gw6)VR-&I__J->fXclaj&Vm|$YurJ8R)f;F4of zQ)iq%CiJVL@zKUF?515$Z5q1?wqvnTlc!z~&7c#%3Gu=im7hPyLwX&EUIU$9n2>tD zXm_%G^$RH;k`)*pIxHCWWHF*>aQi2EYP1saq18s!UIC@BvJ;dK62S`ERiMYzPtyR? zgAMwwCN|XbWftT2MACfnjxW+(y*-Y_TfeSunSuO0pNj1B3mq=(h5^@=Eb^1xMIcHB zeM~fVr>$!wwSbv$kWiBOHaX7-OLBIpb$?cZ;txX(PsagU&|d6V5}^Dfw>1;q6H;7p z1r~=5U8LYFQ#h~6$bf3iucynCm0JPjvwR`#pn zJiqnjZf1xXQV=mb2oZen~4z9;`hbj}VAbn(}(iVe?zX z)fV(lJeon#cSqu;dhp$_3G`%Cy0?CHz0zTzY+Z+sJ7Wf96`>r)@`HUfyi)t&!-svX z@kHS0Hrmyn7cv!`TofO4pB02R>D+DF=+|+lN#u)3YDrL`obSi{>vsfF`DXa=V}e5Y zVPiV$uUBN$C+dCfwYS$?V2Nj7ZXjE~RROb!E+m!Q{yG1a#tzV1&}i=rEWw*qU42_j zi+D9fi@%XAarj-{{o`R+7L-j(e>fx3v|P`(U?PXKgxyD{&6y{=^d{75Py#U5w5irq zxb`j4?jM7XK<`PA8j#jO`Lo~N;DATYU8QEQ;Uj^m91 zn}$t+*W1~N+q41HxNKxqF92$BpQMtnZ0oQyhF2a9?c-3~cDygWv*j++pMK&VwcHwM zznWr@mScY%%?Y>(Ed_TroD8n(i*9)Tw5R>>N+5mi4zKENR$Rog@8uu&9^bkw9HcIk z!GMGPrVWqcZdrJAk6Y1yh4z{Lsd%J?kxa|2gd@D+g8QyKt4mtqX!csq>y&*{Q&s1* zr=_{23kx~<@mfp}M0a2tCDC7uIC}Nk)0U?{q&C`d%25tWHuDBLDMC8Y5Xoe=ah$v#1~~2D}X~d z!esNiKc4@7h>H`Rmb$&fB}Au7MjHbi_S_NhNp_#xg4aq`8<*p zP+l#%kgX6LYbd}FHsX!1UH@Y$LapAmW(5-L08T!+>x-;E-0`4*pIDFXDEO__Cv7AoB*d@Q5+aI|<hW?SpN8#PpOF?j(qaZX;YrjJj zv9NE}jf7Oq$B04baHzi;ozj=-YYN(k0^=_3Xj3|_%MR8e${wZJ;r=|UIXphL8&(#7 z30+Z|r3H|9-n2wLh zXIbx%j>;-yHh||iYga)(+kn|kSHan|Dp5WdY++g0g)R~?M`zKU&L+RQ? zNy}l%iguZ9j*Kj^i3XIiqsqxcjzFPqTEEn-cynF)cyx`4NXUxiU#Gk#8IwZBeSY5e zx%K8%nwM#QEdQ&mrR=$x8Aa@5rzgn4iSes$nKc?yotw}3opq**PzOQ$rSmod6BWb$ zX(y_Nx_o(z6RaUrBMxI%jSRDvxSq zD0rcw;-{LBdm5NFG$Cy#n5$%S5Tnph*h%-TsF>v|2f|Vi%_V|(2{7or-zVA^ZO}i$ zI$dMG@tTZ7_+#e}+1!LQor-)|$#RL6!C=o^3v)kglbT@dyGu#tI7?FfuY$|3!An}* zwD(^*H=^sH^ejxgyb1jYEaVMCnL;l0$U8)pp^-bxT=aa}H2C$dZ~VYELjWGKE&|_y zO!Uxx5zarAdGTm)lmpA)QevY;oB|oZ)f_1#>kvf&VdIPjbhIJYKK2mEh#g@CK%%vaKe=)fXcOz84*geDS5QPXK- zj#Fr5p9~pP=*s1Uuhd`NAfS?F2e(PGw3JetoSeU+CuHDk_Bo5Pggj@d@IPr~&h~>b z1qUfZ+%_JxcOEJWUO+O)A?@H$pJ;&?+!_|0yZ|g`AAUEQnZNbt$P4qjd0^D&k$7k2 z&DH2tM_q%*d7CG|OH@yGz7GZ*{~lsQEc+{=&r$ox!S6oj!mLI|n;a#Y38Dh)Vj}(P zlMmmF9I1fR)h>>6K(C|FQeU7FV{MbO`a{fm*dpKe{LmdU+3rW_WPn=8S63GWn6 zWM+SaUFe%c#y>Rf{30^Y zOtbm%JLgnJK|3{`NtVOLeA`eWP;<9zT5rij(a_b`ndMthCM}re$)X7 zrPLSnNt|&(Ne0*`6o<`(;jH^8j{y1E)?7YIuX)#eot<$%Th+Q9$&LAn3c4eA_K z9m`W^8(P01LN@nggNAq&|5{Wsg$lHf(KT3QBD@lD>p{OdpA4<5H_v&65-tr`_cGnT z={V3?3{Q3j8Gg`ysP)=bp=~3%xKg!saX@maC-&2vduB$ZNS|Ea(sUl90MaS3;E>ML zNZ)JUboQhKQ4xaUrg}L6i@%&L-TfiLT`zcXE z;Xkm$V!m#?*egPL3veH?saVqM&91U9QHrrQ)DF5&aVbxuSqmG^TO*lzOs$(;6XM)D5x6~%^m;7uS^ zO}<%trmB-0YF(iy0T(73?^I-Xb-zw|S2(*)zwP&`kZJw7lccB(OYS-@&{Ri2m~yZ& z@3a_ivhU+e?IJi2yWxYjbqLQ2_}O^5Mfpw*_)<(Sl&m#(KAQW0;sd#er?>8#8rvs) zZxVYJxQmsl{@j+i&w2jnf5oGkI_*aTWETSoKe_T{qXmvi*x23;*k~Rv{~jua>iLf( zBMwh{;^T(uUsI(Tuw{P8E|t%S7QZylsX9DlxH&tzH~FTFN4sSk>7jSWk1BM}HLBFE z{9<`=2Ok!7w-G&?U%3C#Q6y4#d_5w+aI89wJUU3e_|}qBqJ>OF)r^9?#VCdL_V%Hx zSvm3${H=8pWA|eHg8-(lm4^e?t!&81?=-Y?Xs_n!BKIK*iYM8hjzu-{i6de-byE~66GW~q}znW zUya9yMtpq#=|F(;i|XylC_($E7n%&QQc@64l$s7$4Pi{4*c40^$t23(J7x0|uK0>Q z`dj)u?Rbdq=fwsDk8&XZXn;Nd`M7P~FVXVwh-dzOEV%B&bGIs>7`2G1Q2M9y%Dpt0 zNz+6|Dd7X23nQDWs|$7Ns6watZ#}NO@{w9a>8Bz92|c7DprenUor zG6;_gAZDwW4WPn9(@7AXVkt3LEW9yeX%W;PA}esxq1T_22Hh2#P7F07WWEWJdws_N za$wov2?*;;Q~ndLE=1GNpokj)xzn<{HymUs^hR*!ynyO0qRGa^y?)p4y3&;0VDphD zhg+djx6j0H3wgkmWRp%k4!}a2{tHKt6)zu@#JyNEP%m`kBJP>G3+UEk8g{q-$vs;N z(=oIAeP@}^)i4%v8*(A?IrY?>#{h)aZc+1TlijEo$m}x8GNBax1P&Hw9`5gZWwXm7 z3v+Yu``J9q?nAFe7rEhBm{ze*QPne%e>-fbZQD9-Wv}VVjM4hewQYc~$ZIz&+GM5| zvb5L_S%@L1T&Xbjo;=B0t?9Vo;eIe5{hZ#}0#%pMP}T{#XLYHf0r;_y71e-LzHr$` zm{R%;zBm_A5!Y+kKC!>wI9~JQVwTqbx`Q9oW(GiVjJLE9UCbHw*~&8eNG$fJ9Oh>F zemr;;J6}a2KMWW5)=OudWyILXQW=r|#ybF595r)xCPOT^e$MJ0V8n>NMOjI9(`~B3 zwgtj)TG4rhW=YsO+52w1D6S>U=*ec3l?-yVPFNfFVh}VT9y?>my~iH2CMP9T$d0l) zrX+WY*broN?cczep6dK8;XqE& zZ1hTxQjj<6B+`K7o~Cal znrYGzP7*ADki}t%N z#NP>A;DIctozfTqhgE)K_Y7^SQuc)hIq6p_5;5eG)YDDgKD%QGuFS8xY!!3en@?3H zBC}qE#S$e5a9MxuIp$ne_|U`O)wiKEEW-@fPV^%w9!_Bvn*%l-^$%oQW?Dzz@81*K z`tEffFZudzyyV_2A#EA{9Y2Q|^&q3c1u`Pc6AL9A7S2BAH6?|ZDkfUq~0vtv&aBv5$eAeu3weAGGGK1*KgCS{WOO8y{z3dkoqo>V!aVD&X|(-C!%*A zx|osvin)sn{@S;aZ!U7JZJT!~WL1mDZ?q(7Z%TzHINS-E8`8*;2}_MXbWmPNJ0d-2 zV5f_NNdd$4961zEn{Xh2QF95{AefhjFdn>xXy2_s|McE8XBfT4U)dOJsSx2%N%T_2x0}4Ir~f3d)k{&^00c)|n`l=|TGGuQ9c z6S9|Q{Mbl(dJyXTxVjD#<%67M303-Y*W|gjP=Xe!v0Q?$1P<*Jg3L#M$gQS5sFx#6 z$Yh#{l|$`YFY_#jMJ^t;iM3{%b5QXxB8a5K?;xDV1MC~LA@qgi%TInCTx_PZfPWhe zG7A6M-ZRM3MCBI@0$(I>?2V^xiB6kDQ~UB3utKNhr(@fD772N`&n(ZoG(Vc7(2XkV zz1UYJ^=PG1OA^us_P(+k3 z9vJto+BB>>UChcOyr?{od-l;;26T3txiOC*PDX}Av+`m+`F9`YhaAh1-Dh)GKM{>W zD{9*3Hw1rk40_PJxCC{pZv6YBFcjz{iW^0BLNs(gfdlw%WKmf|&M8{owWhhA<0DbG ziCD#?RaDnW1s=-*kSGh3QcyvO((3^2vtm$9EIAk&9KXN&YaS>VuPPAneXTkcND&LU zi$vW|j3UMm;#i|WOCAmL&GXS@J$0ewi6bkRbln=4K8$Kwgy+2Z}7dNP*=CMq& zr&41P^(ybP^CSMUy+?9F^3%Y?oM|O9K1+=?XV%(a#)(rcbjd(fS$P-h`3Fle>Y8-2 zhOo1dcb)0uzjW2jur(By6G$q?eq>p<9JF+v~JZo-xdlYg@R?n2-V5 zN=a3NAWDy3GdSl(M8O76_of7jO2*reto^Kt9zz_+i11$Y;XHcj69HrqIdL3+gK0$o zc-h;4?R&`V`p^4?G(egyl8=@;^ZNaG5?NeK;$&=D#PcC#dA2t5- z{%Z=0-2b}0op;{JHNH3ntFKoOfSz|3D)l?JvqyDr>eHsUNkUdeM_D1vdikPf07*^r`kBnI?md`B7>j>*S@G2x>*Q;_fyR933$Ts&?E{&Q zKNAk}bA0jq$?v-HH_a`WNNNY(ARHElm(Oq<)jLrczSPi$Y6FDORAkwPRVlA||yE_C=aVS=#xRkcIyC=9O z6nB^4?jgwy{l2~T*!$dj#~Ekb%fDeISdDmpoYH>p=ilQ5M~LNWztWo4XS<6RTv?~sFz;Eav5nO$u|ab`pP1k2fRlnn+Je%% zpNE*0iS?UWn!qcu`4nzeq&25!PCAyz!P~AVy5EbTizg#)$78)l-2jvb-BDDp%Y_+a z2GIl5;q!hxif!t09ZE81Nx|jhA1_R6Yhe_xU;!InRnC5vV$f-&ynT|Us9-y`meqE? zR}_tYdfY#H+jn|FiCk(|t2s8l%9T2C$A_q&J_-zcLxxs^Dp5Nwbuv2yF#k4?_K=`H zGp%o!U1cPsr4%#&QO=KNXUkHe>IwbMGm1H964)BF+Qo4{4k~+l2zQD+i42Td3q$5> z65Zbq0a$~t*&29HW}PAxabGkpHpyO;$1qz;!MEZpH*taKOuHJ~UMD_ps-5^NZ$+I- zJ--n(MAs264i`5D3eqF-Ac(a{yV~+-W{;iXy6z*trSYV$$ozV#l8wkfcDXvS)YIPvi#5cVch&l)E#}d8aoZ(b z)KqGhX>+n*rk*{p!w%?RKGK)_0DYfg@OB2_kSgT#au1~|I}i6wH*;dN?-$5i?C&@{ zaZ@}wdLJcWG^*0hK>Et;03vydOkrwl!s#6izT3GI3os7(8c764>A?RzThs%9#0 zJ~7s6VyAmFrnx6oGMJv}e%`M)6TM&>n=T*Ao9ZL(jL1+H&>LdqNhdzpADfp8X66HI34*>_C$0|;_^zOHjqDKNx3h6&1!R`gkcMrzI&f)NVwdxg-Yf_&qz*=HR=_>j7 zLHX*w*B$F+95UT3Mf$A=?131f<-#7?3?E!rk=d(ho;X^>*=q$VEL10dl2=>keaN8B zR$9linhAAKz19QFXeh+$3~dPk`40MIv};eL=vvQIcfCk!${B-eLk{-mL?h+a3#!}) z@Em=&8RtSbA~(iGs#n5^?nIYsv6GF9eZ^nH#;%)00U+|ny z6vX9x9lR>qIcN0vbRb&D9ILKC1x~&5sYDnw^_)1a+;n}gN*T2YAmaq4!H?jC@$Vm? zcew8{R9P<_XclSg9@xorN&tASyKtq$^ZjjWZmtlarQi(6$b~5o*+1s~jfa=f+qp?j7LQ>vN){I6>k^|=B zM#%j-Mo231FZw~{o{KK2pJfQv=WpguirpSgFP*bUQGb%j9ga@jxkDV(-PIjZO5Zd~ z$1Qs^3VpQ^*!Nx9YyeJuGlZ)i`fo_-Znh{6^ZAKsNKjj>1Ir00hP)bH-a-B`4vvp=Gj!@Dq_$KFgX~6z;Ut2 z>@T3Jr9+Mdo6O`IQjHOIgJ~Js-fbcrxCZTC0X2Ht@Y^$4(UP4fyn#(M)Gpt$Q$Kh$ zSy+hmY{IO>4;m3$urDz)I9F#Q#3Frz0bgcHEdY(lkVK4U>JN=X+KPKP;CDY3%jE;U zX7YQkH3anM0R6iMY3CL4#aC5$%vR*oi0V9F@!ZwLlmiZ7VV=w~4^46QyH-GLX_p8= zPkTK%%Z5PaJ$;9GcgZW3U9N!iwv2qY_NA2D{331YOPU-8u#+f3e( z`0C_54a2n@3sfbn-(;*TH$={Tz0{G=#Sn$*9VVSu74YfpQWkZ`qqx|gy)x5$mILp{ z!~+JIT>xj}z0G(5UbHDf0|4(1mxvpB;mr)8I*RKR@p9`ey{`vk^^nn4mvOnL?y?Ji zmV0)(v5qN=VoQ0}PF=}gi$6U2@uPEOW+r_cIaGI(y?pe-dk{>4*cf4A#s0XrV2XZ% zM9E-&bif(({W^D}(k|U`Em!-pwND|PaQEFms&Gdf#zIvgjf!BVgBgYNUx1r{jKd;s z85#Mfls2)YKr?cG*wb@dGnE%yMeP_X8rot+Z0~yyQ*Krk3uay`iR1ajToPe+JHTUI zj*Q-q7nFMFBmgCqcDLW7X+jp9^zck7DgEO&ncu z8Z2U=`fe^Px`CQ0UV2L=7dX{(k+YJK25fEC`}w)Gp*ivueriB8D!WzDz-_z+O0PZi zr)Q*+U(2XU$>NYPyR3Mt-L%O;*K|Q;YyNrC8_%y&lvs>+oqOxhPBHFGo|tAdD|R55 zqQ>L_M>5x10!y3flYeMj%yjnsqTLRBx5+m32JcsR%c3<-Wn;JieaEAp{##~L`x~|U zFL`dn`W4s@@G;2lu)*(BTr^UpjtI#>XB-!XG>ZRxluE6`gk)#y^^<>XT33P8XH~^e zs`VD1>_@gm=9~0*#9JEuBs3+AYA=`}yZe-q6UU6H#Rsjynx#cKVB+Ir(H6mzGn0lHVjPEs;Cj#4POc};{3 z)ofDxn~XDePZdz&K+D@5&v`$`ZHj=qWA_7ZDG2yrxbKYK;%+Xgsl03t#Fvo*nEEq9 zDlr0El3&jEzU)_)Uz@Bwq3=5-1y>`+3yiy-(&|9vqVB%3| zH}ha{q(1^1YJK2wejq`@T6tPvAqZ-78_hC5^-EsjOO2@?+PPeV)mrOMELx*Wnx8#B zPLbLBIO%tHn6Mj^F0&EZ1W;|uRM?&$SOZEKEz@X|bOD_OWEX6Ud9Z85J+IykTuu}9 z9FIKs${4d@Rx;CQ`_z}DEn*w-lDvU!po?VRoaw-HdM@r}J;g||RyYs!Luuevx^wt# zcaH?vyH$F!dSOxnI?9A&}&2w7p2gx0~fkPlzf1TyvPTPNtR^?T3~#6+s9|gx-UZ zUwSRNoOSB%gd}#@COzTLn^lNh?st{lQ%Soq2oqo8 zaINxo=}K5+V8EJt{qUSo{>l2(JHY5!`p3JQS^oOg3yP0f;2$Q|Vg#Ry0>o(Fwe}u5 zO}n1Y+ojI?@wZ{WYgYTjUte>PXQ$J~^=KFCnRW>lI3K;ft)(9)c4$I9AS?t>3bnCN zk>{O*KFZ~0~Ob06p3A9RHZk=aFjc2JDn z1&_5{>AyxZ;o!x8Oxt1)JH_5yTyL{QiL4T-oYr-`tljnD%f$toZ;p9KTT8##6HH#; zKH{8B{;C#bx3f@S0Sn`nIb;yW#Z3<(HbB^M#TLLUu)FRgW8Q?~i*4EfLoj(w7kb z1hHQd0xQ+^P19y$fU2{DcxAW)*Oau8a}PDkYtcx$fqOo_w=0JW>q%99K}nJC6WKu~ zu6V)BUu+NAM4d-)Q5djUxN<{@4}hX41F+$rpvKr$FBPc z^uTrMqy(D`CZ(}t5;Ar8W=K=2FuozTZsH~9gdjzggsA((L|&mUhH98lw5|#_G~GvR zSwcNx_Jji%7m&JBlCzOW|MMEG_l`Iz+4ypT({P>r9db{1nwMFGGtlAmf?WFg`gv>6 z>iC+ixF#wgjRR=0XYtT_Cu?BU0$j-`kW{}I?snIzkygJKkinq-4c!}l{r_7^;JT;) zn_N+EmWGQR%!NMJvk(2A6Q0*Wd+zIsLz07trLD+@jDW8SREHjWtCL6h@Xj^n@ zT-mxZn!PvNmUQX$x?biaPq6tt0}g24J+brSN?CMV?I)S8a)r>_4^Sw|FF(8EB%@*Z zC(c?ZDVcdm`DIz6mRhriP3JHhu*!WXqt?DEI8P}#fl@Gm?!cDDXh^;IVCznBlHqGo z5_+v;)a1om1@OUYIVK0^O*ENEq42jEBuiJ`VT+#RLgYrhG%#1_P=6lxLXcA&Y)9CO zb3EVP1YtKqd~u)${m8$`x@|w#S{u}>g&Yp60$2I=@S9%JGre50d~l&)>#?nZ2o(8a zs|^eqbagr?;zo(`1cm$cFn{dQM$6;&wW~w2ND53F!k+#4!J#q&4)oMAdJFmED(VXp z34x;gzcq?TueT$6XcTOfgJ0i{ld^Fs89(gwQ~BU+Pc1L-BVbARg&FC*C(GI^mj}kz z=f*SrdOFC%@H>HBF>z_6xQfyRg3S>(PchCeBK3k8ZY2Yikz(O%bbJ|_&t)-IfS?4d z*mDE-ogPndukAPZKa6@OGt!B;pm5%^%lzE$sOwikvhCm#H*sEi6xvZCbYVNA?cqf< zPiQq(4UL?4{!Pn_QxmJE=u6{7<=K`X4g~k_lAbBzXAO->d3O33$d|OHd>Hg^VMs{% z88QA*fm~Nw5~_S-HKV8yAwZkzrf*|?s6G6{P86^t#LO|To>7=`nSq`lk0og^89kUY zkY|N`BFOu0bi;z#Y|JTQ1q*E5o|< z&%zyMVqonk5r9zL)Hp8+CYQ(L8}w!JOb@Q~-@(%C9ze!I6Z8G8PdHNm^h5Gz%VrbT zN?!I}6$x28JV9KiCgs}_=_rIi;^>j#`#F4iH`S7U5<2*|0C$E&P+KIgA=h+%)PF6sHTjdnBs!W_g6Tj<}wr?1{_d8vK5^kz?Y zsoS2qXZSN_twad{uI9XwjwSw_;Vo6xlzz{c4S+Yd>j8I+_`pzpGOwVmw*JA4T`lb=z_R4oJ%%%bfcvh?n%d=8#9qx?cDdtalmG zv=YRfFE2}PGiOVLSC?;r=h5sv-%0G;n%xhejmz&&V8g#e8IVd>y*D-SWA+UzU$}|b z($T+M$kI{j*^FNIjXMiy&b-;P*yRpSbF7tBTbz+9T#fbTWsr(n@VQXJxrN zmoAEZ@rDtaf0pOOZ@`R$MtP|LvZ=tjK;adtPa%=+Hg z#;-I|oSKLxl{&_!?j}e?2Kh6UzwFcA4Y|{W z2Ej;kR9K|F-eEhLe##%ZhOv#Ws6Y8yBnV?U*{A&*e>&mU9*0z&w}|e~S&XqpY#ub! zkWTza?Ki%of^WDA(XhwFU{-9YP@#9n5FURb8kI?k*}Y&;oV$5h0^X4yp31P+Xm}iZ zO(Sy_FZL;lz8eq`4Un3%%-UoIl?{}PobEG;c@&ea5c_MK|ZI&$6sWw-dh+)G%0%IW4jeY#!&cz0yEFvqrO zs1{$$E{6PbGEJFAnTJFGv|o((87@r{6aEX+F;^SxmKjdbT!kz`=`&y+>*+CtdJPtV z7JloORj=S4b?vsbo;A_^Y3$rAAw{zlWtw(r0VqOyDSgm);<$gk$A(1%kxm=t$4Q1o zXoI$E#e)g_@&nJN?jO2+M&Z|wNp+L^(_V>>eC99d(am2**=%al6a61TFQmn~N)*fF zeoxb!8s5I)x0k{a5bjJh_@=L%MkeEBiIqv8ig?X(cSW6=@G+K@9F0AQy+uQO>^-)j z&q(?K_WS8!PC;VMwPslC{N|_&Hef&D4}sdI&AwTTD@shof;fG)PhWdmBrk?>mO*Bd;9M<$}kOb5kAyC%KU0 zQE9KXpuJb%O^dDn(vnd(jE)F5{cA}L6tnLDT2t6!0SSVz|V z{qBBvh=y!QPW4f4RD7Y0-Txf48V_CZ+qF9P^zzl4Vi1S(pe2opW{ARftrGL^!PxaD z6=b3Q!O`f7g+66T7F(x(JFNEy{B>C8=m&8BuMX>juH8T=JZ^FDwi4Uxx~ak1RAQ1^ zvOixZ$E~p=>pZ%6YnJup;JS7rSJ(RwiO#F#q{%XUuPGZtn|+s|^{iFr`dt)mel|BmlEm?iQYab~Oacsx{i6g^T8 z2g~vq?v>K$i#vO7*nWihN_p?`2Pyc3`ZBVz5cm>zZY3{c*qk`@Bd}v0dnmV@fx+AS z(4ZYE_=Gz^aco@ROtBh#pSY1?fl7euo`vO z4 zMB@tJz8Ew(QK=#~LR+P&U7&4ietQ#3V6)}H$cGx4$-!C~hHSJsMy7DRLnt7w8N51e zI(IlU|CSb}ETOFbG=ty7z)x;kUACAw141cCXEuMm%Bi#m5lcZq^8#&X46azfvHn>+ zv0fVM1LW4Jq`WLu7QK)z zEhB5fjt%KuY{HwdCLHbOSd^wNIb&rBh8v@r;JRb$ckx*Af(4w6GX@@UmP1BbRoq@! zZ=D+BR%*Wwqt;(q#-Ye}a2OR9h~*2;z@{JS@Cdm5!*U9wyR2egW#3#)hM0>a$0p6* zT}(YvUeHRMYCAHMU03iExU6>Dv>HZwJmF~Y>tSp#e2Z^q6PG3f!IdKW)^x-r?S&w! z*Pa_|TGqfTHh5^aD=Z8_eJNTdFqR*aq@!8*+0Vb=(j5m2pXM>UT>U@=04FNx3HHeN z6V505wbQ_m_V6%yr>3vA$<=oR5nhk)`3f^NxS-|DfNUYG$F)PM7&N@TLdpY$e|94k zNX@I#-*te(A$^Xp6M3Xk+rDAN$1XA^hp(m+y?muJa6EiQNc6BAr(r9RZyCI4HCDvh zwKcpo2IQc3JZq#R*2&5&v7$t^g=KkQV=>pg#X(xc9Z!Z%8}L5|c@EA+aXQ*vow1==X1?{S^Ob~cK8SXq z#a-HE$C2_f1>aL!&Ef0JgNI8$6>}|qH;J*c*{6BYyAkNv_?;|Ex*N`~2P!uhGDdhc zkjU^L2-kfLhlLy-D4`@?ti3#+=VoBA5_S6Nqc6YMDwUnbQpc#w+iD`yXPOm9L@h}E zCy@)~VgL@UEo_#}j>odV_m%Q$+Ik|s_%?5~0*ptL`wlDDk8R(`3UOS%m56};a96V*)E_=2 zm2mbV%u_q6Q7sJ=`syf!&2PDGRBBlFEn0Z9Nru6S3{fA2u6U3&dF?vgM`1}`7K^DF zuPvd!dhMmQ0ZY8eNZwc@BkRt)WY}o41yHw^Lbm4d#WCB?85h@5h`b=%cx6tI#SJlW z`q5~*Fg>h>pfY4aOnSJlhgwgQH_If*VVX5|<6>VTJ&hdX%@i_6I% zTLtL;XIjZjK%THQ9HXRI$HfXm~rC^WIVKKHjRxdIX;1 zDzdx@X2fpzwn35V>o;fyl!c<>TYkTxoyU+8Ndh)qiZ-5{o$_eOLa~H7nV&AT6)wU6 z*@ahJ@@0I$g z{LIT-NEuNcTy;+e-lJzc$5MPluU7du+`IPE{4kx6eDw0yJ$SAA7U^=bD@PWwQDz)x zpr*jtQHxi?lXWs=ImQdpS_2~e-wV?a(k>XI1BY?_X@8~0{Vs+fvWwl!(1Cd61(3JB zHk`Vqz<*%aDg2q8UI(~kk}W@aOg`NcUL^L&;RK%#C+d;B$fAchBv>MGHX33=;AF(pBLt zBd6u|(vzzlGOG`JFQg!(jpX!px;XeH!97*qgRu$Mtv_B}i&MhE=z4zcx=cT9IX~Xy z#*weA-BGFt9Ni03a_j4n`0xGpFxYs>5=S}blrR^P)pRO^Y&p(?mC=15HmBE-^qE6c4ZPyEln+7Fl0!@);akl($(wbEK{v02JR zW#8v>?PYw~6KV>#8$l3CQ8#6OKUzGMiQcY?9*trZ@ISTfY^gIbj>o~6p_1-65XnEC z@1{>X-4u(i(PV8sVa97c1f-Wy4;FibKP4b!$0h?y>));D@1hV-1yYdRAvsH|lSH!C z-LvkXbCocBns<;yQG-LIc5T7>XP`^oNSCs~$^%y5GHl6CDmZr(lRWX-kI>(Pt~RDe?$d^~~RiqbSnqcRy83r@Wq)8vH|N@ap)> z3nH<=ziPt+ogk;xB|^u6t0Iw)jKXK5PXKm}IaWCP$|FSJ)S^`Ux%5%QZJwq0$$Do4 zY(wpUyTUCc?WuKb5@GoF(!;6aaPRZ3a5NY&@q1c|?cBA-;y>GJ&4#rGz3tXFv5znf zc7ThV0!?h}rvZmPt4I=QSFLv?C08dWlaI6-usn08BStORU9Fy0xK*9WLhb+6F8ucl zD^;AFUfy*Y{SiCW;BZi|&i8ATDCrpE-Dgjnr&wu`XJti3IJ+8C7wpa1_k9p^9@Yxp zhx;U}D7cdxXLr1Z^D2#~9AP%eedoY_Z&`Z(hmIF>&Ub0gm#PG(nlM(48ds!J{cRXX ze`2jDoBg~sLI%ntaJ1aNC4)LCn(tTK5aKd>_3ZaixKdxB({suH2)=O$1f;ZI;t7oS zd1?_-5M#cy%#y-h&3MEs-TVz-v>K^qrm^MVu)0t6%vgE`FvG+?v{K-|a@gYZ;EhR$ zPQV8#YYOXnyD2euysflmzcy&AryI^MIk%b^;ryk^_GM1+_=Ll`Iz@&-cxRGF+t=~} z^tbOHKzB+^n@uD$rqy2xS&n6ag$@uTFNRM;FpK4q5Q{Nz?E%HJmAeOCDTTMkz%J!y zC<$d%c5P6XY;8QtjDJ3L$kvT#?>moG=|ovsl~5QUlj8avI#frQHr*#jTNB~j*r^;$ zo$gV94%P8EnwTsd@3_FqqES&^bb-R!lyu6b&CAl+a`koIXnX(JY)P|*sT@zq@`X|a+j~=qV^e5GEsJ6 z38Q#gKrxu@Ed9|pQ?fI@j?47}*Wlfmx5u;WGZs@vb8}eh4vVPjl>b;W1@DigF8O?z z7x&>>L8pMk6@V+Ae&WAg_DLk@TYVmPh=?|E_B#{?<1 z_I&6Y9`^QbaZAi&m5HQdwOcOD-Kjh<4w`4Y;lWJ3BAJGv#oc_CZA~o4ZT-uiVVbL! z{)rgo=@%{2LxWt^`=ZuUHJdlF!FY+UQeXKh_)k0M9oDHBw_(psLJe43Je2{7~-S)hsR%ctU#z zq0Qb?vsSw~$xfqEqva#2g*kcAdt#r>|8=*;uSE;Q;FKC&uQJg+wEcOLicYY)U{93p+IG7``om;^K56xb@S9&O%uhXh-0HkNWRIrt(1H8NK%bsO%_3Y>8gPlh=n^% zU+w#n?>i)Ce($_peUGW*WQ2lFW4q-L6 z%Hh?A8L{A{dS4u{T0r?72fMml9#an;Fe^J=w|*H#r7~FcZfz$Cqrb>1^bDQogZskD zT>awRA4Z91o{xJ=2+d`rC+@69r5m}2J=Fe@s?ooX$$^R8vJ8T%2{SjH7lFLMwlw7z zpxa8Fx@NnqZ;$`<5h9_npEE^P4d(>m(xK?xpnk>AJvQ|LepX@Ime;HWSO)+8%Zx#HT8+64(v>E$^;0!d%yqUNosD49w8ML-3I?qPZl zR^>0NuGR_DWDX9cL-J5DC(iQu$4h+lch%E(W1$^FSwD0yAMErQ?*}e?PATULbaf;7 zkg=?4_oS5<9Snl+tIWGtMY=H2?~yFYMU~I#R#sy!urIPVQPT(-S~jy5ZVGn_&#b{pa@Giu#`NAmC!ua@mpvb20unZWNk2%o7O--Uw^lv2Y?!#G9ymO0+^|F{Y*4f$4A0{UJiS|BdVwWlB3ct zaj4LdVRdgS{mbOHBE{p0(6GRjbsAL?>>@Mt&_$+O*;LO{cUPM)s`?=~%MwJk2kU(rRJ>ATPYdDzru~o}=q68}|QQMZX^j z{%@yJqTl6jaAoz4U>GIrONIA=!ryH`TF=ORMHkC@g(*5d`@@Vxw1TL%0>|U7W8}dA zOT?ltp5|d#6}5?htA*C5`%h#KLSH#;1qUx5jB{K}C6IR@dPW*+M>UGs3kjYUe*NC! zlOUnpi#sPK_qtAba2NULcm0?5dj^4M^nstg;2{5(>>{j5 z-&o0WJ--^sW!W@XTuZd{L|hce!BIoZ;QIJ1e>6(3>Cne1*9|lOOd(a1IPk5o0r!z#zGdViiv~%H9dW%6Ft&oMvZWZ__$yjI6 z-bpC)wi%1H))RZec0zV1g0XMgF<_(*5^?Z$34lj|JKsGh+aDl)WiHl4D4f_o1g&%& zIWn}TJB2YO4*xb|+Sl)hjWps#)#Qj#z+NrK=-G{L&*>G`Z@o?CkxGU)EsLG|B8bvI z%@5?q8JP~{_b_F@V-;MW)9`(qHo(WUzu4W8H$HO>Pbp1r2~L0sdL{@%jQ3;+2Mb+hD-cZKV{Hw959pOjRcnhS*LhGuq#Cveca0HwCAn zRcYUb>L}Y;S;cIZgzB|+$)RBDonpGt%@hB8Bt3W;CEgPEovCVYr9DMUV0TDE--d{d z4_)Vfl*hc_h1W^pfV4GuuSeo32`khBD-ui`I9W4CaSCxp2m?W{S(o0fY_4E!C95nvzpPP>cn{Sp$Jx@W3oL+aI4wzx zsp;4MXSz+Iz=75>(52p4Byerr?lR4NiMsM$87`H#@>9Gn}#*ROMW>z%1pP~ z*%;zN1Od8_IEa7va5Xm5%BHmobz?R1T!|d1ya2v{%YIwD%WzZew|#Kf;`>?~@2+uP zuw&9V6(=HCIhTxDe{8_dQCRxFQWDz=c0^IBIP1zm3CY{d?~NfE}6 zx7<^}Yi4YofY{^ghebO=B@tEEWPW-Ea!0;SzvLP`Kb261Fkeu(WNcNh&cjkKhFsOF zk=()7@J*92!iyo@lDTm`uiG6w0?=&Eql0|c6S49UF&H)7;#CaJZ=me+44Le zE%Aj5dU5;%6|c74nK847`RWL+U(4oD5rGJaB~AFVi(S?7rc(?7p4RkKYOuwz+`&mU zZ_xBnn!-bv6y7wQ+0+fJrsk*wuhsJvkw;J^y+L0+J)K$S{J66_@Y_qYoTa8_cRkDV z+uIsxi`_(?>VuU5b7q1ufU5D<#ajhRp*S~Rsg6H;0h@bjA{k6w+i2RhqL+giNFvldI1M zbjQX=0kxYGM9QKV-W) zbo`kcZb1P2wd|=wrTBmi$v0s;Hps%F7H3 z|Jdn|7Ro)R&id}9clY2JiW04rEajrxD3&oS2s9Jg1Nmo%>cyE7M*m#h1dJjeloR*| z0}VOlU8?*NOOzd{2p-py7%L*gI<0b6ZCp~>UPQKVW=?*Lc|YznN&PKX0MP2O4NivG zu4M4Xbw4O-T|`_Y+G1pzFiqSEmreS@#`(m+-N*AOSF`>IIRN>OzNW;^i*Yf-QDOy1 zhV&1!DEv|{xK%>E{UB9BV%k=wR#v}!z>k5^(cz{e1GIE}eDy?R#}5_fr9~ZM)bMNy z?8bU+grR}n~x0A>dg-$wJbY%HcAaya%XR)IZ`&UQ2rFxL!v$nqNWL%fV66R@*U7c zq1$1Zdq6J@xLo9PlXjUTLucUx_r>W6xao2^CL-&E@(ide=T}XRse=9Iu(*$6sX+kL z1-06Nj=S$CE8w7o7UQV|(7t52u+Vylc8$5R`BH_+l-3jT$a$Q^)2wG=%?~Y^yO=S{ z9WHqT&*9i?UfzrLehbwLE6X+~WTFdWLQ{+0XD(bYoSHF$F1}4wgEbao>B#1k^jXa- zpK{q=n{YP9(JiX!oE{oDGYd6^`m)gTVqb?ujD7YV5ZXejdSyCKWK|fOQg4dbV0#wG zkz4jl!9XZuQ^v5TaruhQNhBpsC+@2CV{P*e*{=V^i}pF&k{M&K!-}}eJ0L))8goEzonL5dJti^`TRNE zqqcGNkjTg1=~+-Ir(J3hkBrEz*%^hsVL-@NfoSH^hd*n~5Fs$K(%th^3qylP1XYxtuw|<*9e~SYy8#J3);sL=i_cbj>4?mH^Cxyd#gHgwFhExapC^yIUi+ab@ zy&b6=5{&R0^=WVYJ8Q;ZCW}iSU#{7nUnWsG8-^4O^G#RxrQ(!;0kH|7JJ6sFr6FcJ4Zf&d5E!9?UaCOh2RrUEpvgrEmb`l5ADeP*C#rhwgM8Hbk>9mg=kzCt zhvJWBD#zY`@ao2qJ3#qT;iMR;jR#tpW#}%P3=R7*2~W;{Z1{-LA_B8~YlEA;8a||Y z+aHlhhTi$xC}#lLXJ zh?r4NUIGYdY;}_wMC4IlgYJ8ZQ~DC;7CsV#j~eM!K*AUkD2`s z0j2XUx#_Q2kiYrC4|GFwi?b@$z}DOic(ZWp zpfn@xE6vwK;B%FGX|UdiJfYKWKnw&~(ObciAO6lyBQ8_fzP_AxFV?!e)p-!4e?`yK zlX#fV9{U?>8it%5qBUZPIp641O)+14W!^wT;G26k7-RHYXg4+bl>=c_covtos^=&4 ziX}-qJ>R=p>Yjxess_U>D;Jq`CZXUUpQS4M+XKLw8{Pgl|2vu%pz#{XvP|K<=EwCt>1jgxL$c{Wh<(CYx%J%b zR&JA1)?0_-?s1L-iwfT&6vc3TH8)rI-*_^QKsrQd4#W3$&?dkVytBpkgLzXV!m+`# zPsD`ZOg`3l79`2mr1h9fmH#b(sn_aJescS>1`!6m2SGJZeF>5fl7}F;adN-+5VXtZ*Ii76p5wES1ssuS=SQ_K<9R0p&&^Jwf0f!1 zM}ubf#Hv$xrfX*MK`(EPs5v6PmbU2F{A=7(muJXm4W3{!7RyR3YX9!P!Z{u#o3U?) z^bsHx;ntL8&&<<(KG|71Gd*Gg0QH&c?q21Y{65$)J!!n4S;|oy7k9v^urxVZZ4FH` zZuX{rW1rUTwDe8FFOMDfP%cNFoAukTQUr2(pOyT(oH!haiezk%dR>z%bu2v*C0th4 zjXLL=KaJH>(eKM$OcQjP`F=6GnA3d8lr&`akd{cm%tM+Bb5Iy_pV8WEC3zX_xsl@pZ9Q2a?)fIU= z^4aXDFpZ4w<{pmZzOqEtbl<9^ zhA9<04-nP)74jVv;<4WF=O7m84r-!gzhX~-C2>45G2WIcKA67)=1b@11uW{kScusosH!q zFQx-Mi2^*dlgl61(P~7P#CRll=CrWZ=7gMvf4*d|+4bY%9lSPe%(HVrikZH^DBfcv zI

w`od7g+8mi~J1KB<7DEbE2x-XgN46Gn9{H&)#vPPw%RZvY z_@qSDI?7Pi!!8o6^|X&=p|66_Pi}ai-VQB>l(57^WP{Q%rzgKac&co@ksbOwG}qVM zTLd)nIYi5D8g**g;x1x1AtWwPE_dkyF*boC%bu~H!KhM58P!PrcKG(yw!5SFp57GK zoPudJKG-MATKZJn)~ehBc{N_#`%N=mLjgTW;e^Q6S0FKeQU6yG-N0jYWx=-lB)SLV z(^Wl?mD%5n$H&$bGjpZOPju7%5%0e1Wy+AYZNZs9%~}r%cX*q6f1bevXBdnBY?w8q zeIj%bEf88Eqkjv>Wv@Pj*LPlQX~*8@c6W~bp)sR}Rpy9lTh^a+*=lQf+IY=I5ZrJ^6}LXXMLO8RBFanNH=NX_t{R zh!htfn3RxwqN+p!%SyS@J3sE<_8L*=k{-CkIDf z3zhn>Qwd}#8w_8XCReY8atwdEW08Y?`u}VQdp}2&jQC3p_}|Y)M<4UAX>U9O^Aw(y z(+s}79sdI2!Sb>Na=qWDsdlK#zL@m0ar}0hopEotPQ}&K(a?FhR(A33*H2*=o+VGow$?^ z1QKF@Q12kY13%tYzqyXjQiVL@EL)I%C2z-lxs6-s&&yfEAV;dH+ zG7=0FqUc#mN_&ynJ+IpJE7PZ_U-`cr?_DWnH=s z(P#cLDqK!=s{elf+@LNGAF6)6MWU{KuY7__oB_4J7-=!(x*uy-+Lcyyr$6&8j#RXd z1YQ&<3MOm+{8`l#`=}@O1+8rH^SC7f(ekT#1n}~bAaCmM3Rc81}T5~<% zLELnShuHjg8nTl9_CLvo1b+&jppO?My3F!p zr#9Q!E8q3xH~JU$N6#in5&!tgqd(^d7kdJkea-X_+hiRgdUcNggZYO4tGVwEYU=y; z4IrW*V4*08fQSeYP-#jRMB0}wy^9C|Ly;yW1W`aynlz<@2`%&zYKRR{kQM?60fH1E zlpqiSBqVvk-@P;U&U1k})+9lKs)I~L{;2@=|H`^3t;i-3^q+&eC zt@`92#+u;DSl5;k;G82|Un_IQUIPBmu-oPqEI4gI(}uEs-Lgz((5i2y3r%Z3@!i&; zCpaT{&A%t0ft0=w&kL#KO^kNa`j;HAgOQtfAB+@TRwEBcTYHil3u{Ke%Ce1G;6`!K z)MzjEV03=?v+9U`Bgr_Q0}~p2Nz|)`_ut2o!18zN(xXp^T9yUb{kh zx^jxC7H@YyV3D&N7oZQ;qi+!8|EAqG&tA(ybuN&w)F*rF2U0BHDNWs|UEYH7q^3#j zPW$gXU01B*I9U@88XHJFP=aG5ZH?v6%UU~eIyTtmJc^@l+YFf%NSkPVWb}XG7=iEG z9HiWGq-+ICS7FFm(Q--9zSz$R82Pom)49vOfW+w8KmRfk=7~ACfG?i$PG7BiMM~x$ zokj?JByTg%{E?yeE#<4)aW(+zJP{dw)a9uY9?TE;-L)FE6GcG93+0FV$S^!$2?Lp> zni3FNQq#drPm~t!|b!Hma@YpXK{P>w4Zmy)z}a=hK$ z-=Hq5e9Vtm4gP1yTB0^JjJnd`4~QBeep>sAw~#PAMi|040}fT+Bvg~trfV9q1u;`1 zQ{;7ABFp2)epRtDa37u!7S*cu3dJ>4TyyH3BOtjZu68f#1A+$b5DLo-r`dR#KT-&% z3e1)B@r&NzAGlF(ceh6eF-Lh>Do@VwV1Kq=-V-`fE^%o1Hw~U|sK)DnwyH7clyX{x z9FQcRw@~<40cNjdP$-w_vhNbH#0COoHO-!uZaJk6+W&Tlwv7ORG82k_dFJ$W^Oa{X52G$(v?SCutGt+osTD(ys~3;;AIuVvgdd3Y)g$U1p~u z+3hT?S;TdmBj9FzA^-7JxPP{RT8~W-Zs0ViUDmiER5$ALWYGH3BBs)f@cR^p;MvVF zKd08F(hta`4ns2q_L$ydY%!uN06>iLH-51=I}2iSY{WBuJkzn(^^?<+bHyQ^db9<9 zShiW}MWBGgCWD@fkwmILc+oU>lfMh83|%;k zVE_P!_}@Psoxgv7K`S6H4-=5zHhZ0V@+z26Q}p!4v(KYF9cAzimL};V%&DAzZA!n* z`KMRb%s7mlyUEk)%|$LQ$97@u+{3%v9Eb(8k;;IK_uuLcvWT2Q%L8Tp=6Ai{s`72& zPnXLwE&4;?Mcr-1z=bF-K)CEQzv56v%(i1Ymv-)5HKv zEA{u7c&7dL;?x@*NTaXy1Rwv|%2U@ha1YOZ%NQ`sn2|51$$Tav0l~J15F25-5}J>C zcL}_2z=YV^hMIMjCNNWWZA7ZGOcHmlbyT9<1%{SY8=5zxl51+QE-@DdbY+h2D;AQz`6f-6T2kja%c5|A7(-)3s zQ_f2|L(76kS{odkH(bT@sSOJ|)p^qSLM09C<58D1!X`g@P`q62TgaKUEZ^)dYf$P) z1LKw}JQY7uP`?<8XHsloVYuUc}*DWS%s^t?Yy#u&n%AK znTaASq{G7}EXUI@=cEkM1OUp>UaSA4X+|2i_a!gYycb?o;V9B%8gGp9#_Y8rg!+j~ z%`dObhB~@~r++XEA`YTJ#01OTM6+dKm_$_!W4}k>h)bQ=pE_DpeJ~zCm}eMuNWguG zY9u{W2zbM)ePGf)4P9#2z9316>)TDaATx2%q(Dr=pPjal4kMsRP=(Epx|k>+y=Mvt z+4uU3rgSSIh9egba!oKa>SZ-Ui)+a5&>_|nwN6xB%`IX5ECW#(I^kY)FXw*T7U_?! z3fK9IsO=K|ed5+R{^^E7|2DMcrmN-#b_6cQ1#rwVB)C)rDew($7iK+lxGox59QUS= zr!!cr4nazddr={9wJX}l!SA+v`HpnRvxVmIUmiSH>5%xD2k7iyNIzcO?h_9WUVR<^OE4a>Q;_WKw> z;6WFC(&dp>Po4$j;{}b|LcTqlbY4tVzRhe{8fCY!v%x%K+l8RWb=-^RN=JRFYpUWF z>@ra$#^KQWbDUDuX8$DR*gXn>%{_bHTYA}}uoBHc(py+UdJL`;nS*9P9U?W}l;zA0 zEnfw|{77hLT0`)T?PybdSCzCsb^d5%Ga!JBhZ+AitnJSj5V;c406Mq>DltjFdhL=e z%>khOO6>1Q_-~hz5((AZ;T=40UCkX}d2dwJHCvJ+o=auqZ|<6GiksN&sR)Dt+jNuT zULWW%RwoC+s`ngMgKUx+U^g?uVw}x^mbAuhj-p2#sog&UtMgA&@IWmbO255w0ZU2% z6g@oj@^r3%wh&0|agP37ZuW?fk*d4Xwz)uxqlB^esjk(tRdt2x&XnCRs#QX=&QB7c zz0)%N6iW(;jgVP^Q42FP4m04okX_=ahhfQk$&}lB`wB(aJ_g&7fFfon`)z4y6>087 z+z}*Tfd?a^TA9fjx(?J5(l1wdpNDYUAiyW-uv7XKN?&-d=%3NI>#~5nCnfyHw_*PH z=JNp|N-gVGGfL4?lKEoXhE0Vd>q{U^WdPy#Hm}^ZIdJ5B30%n@i9#tqV@AWXeLGsiXDP4MpEFFtMK6S40?mwEAy-YJjUx85Egy7$x=5h88fPEikm03Ga~gl~ zQ_7JlCaq%M?(v#20pLgCLc5Tk@Y55lx{o0#LfRgO)8f#qY)#5GVze3L2r(mK%`rm# zEzFnC>Zyp!EE+KPP0Xit%tlH}Y-b@~STgC;pl}65l+fk{GaUc9Idx^Hc~>eq^%EC- zQ31}L3ok0b%%>QA?=r$88MB4(bjGFWTc$aWGvZ!!y%8zJj2SlmHnblj#&W=pPjMgf zw)h*AM@kdvy`7enuMNZ35*8Cl_!0EXCwOE*mZg7YS2JXwxBfm&>fa$$5;Juh^B$T# zLo=ex@>g8bHfjh6An;>qpEmH+!r3}D?BqJ74af?oG;gh zIKvWAD5nt~AuG)0edI0TbnJ9|CmG zcj;r}(<#nnLmx^G(a<{tB)Ai>4kq{kz?@7mW(`~)os(%ZX5y!}n5($e-0vd1Dd%F^1hc2ue;5W3^X#zCe+Kj>)xr&@(l0~a zBE!Y6Se=Mj#DQOnFypeSY#*8(OEzg+;t{8B4*efzAWg|w2&WsN*!3tZY4U=0?qT-V zq>A^f8gI`N;p9Cw{AZaj=`~?g`BO}v%+i;W(tCB>@a1@$2^T`~BF0MumQoeK>$Ap0 zJm8_dj`jj&v1=NLzEb5=N2i!Bd(B)3d!lSeLl09qx00Pds-N?K9gRaV9x*FTHt&|d zU{Ks2_q5a|RSF(~U?4w&t)uD??o8NrJk)kBGx`3YzY6QP0dJ%lK#ye>;ABh&vqCeB zipdrl7|FFMQOE<{t{$HBhK7ayN~s=hHC<53Q7t%Iz0^-R$B zJAyweQ&aA*r__0z1+Ak(Pawc((Vqu{vJ2{E1n=k{Y>w zwNs#D-iC+s@;*FjS}Kt@+2>DaDBlC+C&CGwOw6*nLi5bzi+CFfQ8f%6ZBE0TVG@2>FUs$w}NxXSks_ha8blcKWOYZ8&kiCCqrq z{zCx2F|K+j%pP2eFK?vW2T%H3_CKxxwcZAIRj zs9c3oQ0PMQr*JF!FC6=LfJ(swAW_X$K}&VWRdFdZYxK8?i#9d($3@^61fTQzRb@2v zz1q(}JHXFWiS_zIHFm>k*|w@CkI2wmTHY1-J);{>1s>cLA=AqNIV^{B_~;Cz3YV+e@~__ak|x$DCJ0Wfs!U z18L)QDjL+yAf1p_!fBz9)`<-P!SC3gBUH^H0NK}Cx0y3YIP@ogVfArVwn$@P0Nompe;+^Lr zAD;eoj+Z6q*OIaJttiY>U$}pIkmMSJgO3#ju6=Mze{KEdWqe^hsgC{#D~c zbCT`*nrwD#DN5~*5NKqJm4Nt%P}TZu@TcHJL+z_7XBgiSb2kmR{e)$?HF+M<#*O)w zY?;B&XzL!cIRYqRKQw`AAw4K}>=eC3eLOJ$?`$ ziEW0cATW%)CFtot&k(S%syb0O4x4*dA=$F)q&;~G4P3qz8UujXYaBME&bSUc!-Yfhdzb~vMRLVcj)1I>d1}{0w4vkHQ*;trV}>q{TB8K z()S|#nns!d>$cZ+m42PH9UE(gOq_Xc1#=O&=Yk9om{b*Y4BSBaFgMCw>zqsJ0sh5^GV8-* zhp2axICql!?Jd)p4{r`p@ybYk(dls}Kph<_{fm8k=&iHtPk2K_qng<5#c#$%hP`c-v3Gp?+}{@V2hMLPxOw)BZF;) z^sp9~7(>hKV$0wXz6XU}k`tDpl}$89(9S(j*xf$zaHg2ZzFGytTUy;oCQr`9`I7UV zpyN%)h(()<54Z-%k)fN14q)RoN$xi4pRS-=d_SySB}yWZ->=OkX2nl~;&uYbPgf%s zV)SJO>ON_?awezUPa&DHK`&QFXy&Vaay-^CRePe)MC@*hO^kf1vZqRrm$S_(RfZL~wH+$@vjv|M4g_XKN7*Gdw&>xFA`$9X<*4V1YnBz%YtlC+ zkkeHT;&vpsdUJ0#MJh&&VJUrHndxE@xe7di+}d?uYT1|y&NWI<`U4UbS<|#&2nuQ-jr73HaXqW) z)#%rftPV_jW|rbU)$U?ZdDvTDIM;$f6HN{$2ou15#>mG;5BV%pMl*QOGmgHCX|Dx4 zrdgJ~hfDaSMVMuj;xB;*C(+4e2d^P+9H1dQyqMhnTO_wid*j+&p(lBYp)dH?Z0%zV zGH+CUb8XNy(i}(n;%1blKk4PHd!gcDVuUEZ-%AHkn3rePs@LWFIT^vLx+Eqx4;lx# zq{UVZ&YZ?W-?!7r07a!kF`d0l+{OG-`G48~vae=_E{ysM6E!i%TO2n1*-1iN9Qdd% zMu`)?yIWri)J;1z_FI)u4gJZa-ovZYXfk}>;tz(hF_A5XxA<)Z(4OoJ3CyO4tacvw z*O!@%=2$3Q5Q#cNV{u#RAaCD?ZVv@jZaAh^Yd!4Tx$f#fGS0QhkUxerzYozMIxzGG zFPL#T4FYEC4lVrd_SV;TiQLJL{)A#U8+q`{Cmj?|*!>b7{?1VL@1uX}tWhllc01m7 zCS@w_zGB<>Hs7Brpe4H#X^^ODVuZX_S8@M}xn4IIcoo`tSU>ysU5%_~)%?VI_r;D9 z`T~E%)_2Rdj=i)ylxRITyB_`5Khwz#U2)@(4nPjaA@F)L9oLT_cOLfm?32hob?2WU zulq&t!D>w7BPTvEnk%buGs+c5vb1kv?u4JIDA%K+JBkqGP zvrIV#`YDN_l=b@Ux+(xm_34f){z<=Sh7Kr;-bwduS-v}x<8`Jm*~S11<$t{O-;3(> ztJ7DH@yW*ZSmQ6Xr!dYPo1%+)=R5SEGXMarrLQc7H&sqH+;Jro&gV5!?+dec9Wy`a zxEqNV=O%b=v>3N_^+{L#B6q(DE6TVwu=TNn!?jBIhQrE()re{uImrZSK(#Y4boH;* zsP_L{HB=knBoIM4?>e~31yFotvsZhWSsnSD(S!1{q5?z z;89VXj)@J6x_+rgDVzj#$LO*q$sTm{WTdjQScs;LYD6c=1n&5>U2US%bqPMRx@190WlKI-6agbJ|?Wip*Sib z82jCF%M9FpPv(1*p3MTs7o%T`9?bK~jJG%5WXVmV+ryqI&WmEswHVWgEn;;;&{90V zgk(~^_9^j2J8}9bG#6TKLNCL-*x90 z!qjm-!0ZvhV3GGV?)Bi><=S3O8ovNw3@yif(|ARBDskbG^o?H8BcZZs$SCRRoQEce zTdxW?lSzJ+ifcD2daiM?zOVW@nAtFH$3ib|T9W{N9r@AtEvA)-ksE#WR0oK&-Q1H87og>^l<{bQzC5Cjau@*Im*bAO?K?VUMlvej5a_j z*b|rZ#{uR*kk-% z7tUj|SWDB9scBFzK9K(Ut|Fn0dMZZXHnRmFWJFJBH-=>DPD|5YmUZwb}E4f%h=3jF6x?7yj_HdP?J z$&^MC+BsJ9@ZC7j>~_*X0Z_AA4O$bT1EgDe|YSCMx}s$FGU7_6H@N1y-WXfM~|Z|csafw zD+(xQJ5=pCb%I0WE?Z8^r=X#d7*m?!pBAl=VJS(_2iKY*qIHVT;#iIm(Oi-~cZ1th z`rhq_F*<6BUeHdNz1ia?`#-^}+2u{vu-LJmQh)>pRv@p**m`qe_ugdklNMIqrWO) zQwtt1Lc3NJi$o9QglP`t#F~ekRj^@8Q8V>OxCET7OxS_=Y?F>3E<$=gv=}FkvM~te zG|@sxYoxJyFV4Okyxp)fy$#Aysy0vPka`Iecd(Tu!mm3!)6cP=qnI6}IHX3FXT}Ck zN$CdfOV_AgcxsEdEI;zzOfbme;^aGRyq@yE)#}~&ynGSc-4v^o!Ge)Us7v`&Vh&~W-DD_UL+`kM^l{(f2U7$g(xP$1 z26Df*;^#-l?TpQD)2h*r%tQi1&154N^!M9wSP1JZGeLJalU*wp1}yP?OQDo*&xafs z3-A2gAxt_uji|B+1-q(@EvwL{7lHburSp0-uj$ZIxU>5l z%SE`xR%3D_Y);UmUCP3Dq43uZGn5p%G^`rzTV%AKi%_l5>sGLLW`Y_&a*4p;Wx zpXVYAG8Q3|H+<98J*d(pW(_({S~7UyArgeuoVl3Qbjj=`GAa#$;%7^8mSgWpC|`YX zQg6>xu6@d=vmv2|Chp3sky^VFkBTqIsCre)lhr{~8!xzZj-tur7pJh=m@9$pr znUl}2Y*Gp@TqBivQmqvHCmq1}s6Y5Juj!-f(xgfcgNC{GjwU}(DaoYQ%WD|;hc4R%BW5JHiTYp=v(QMcJ@?-!UbdVSej(E zpUgd*?33L`u#fRGmerkV)k^a3A-9Cl)1p(q8Yjm>`zYycR3#a{8(9YLwl1%ZWla6y=L8 zKpS$BStpl20k_Xky*lsGft711*!;6K8AQ2id)s}s;n+z5GAAjcV3i0*!7}cVr+l=>>H~o(I(D&+T417Atayul^1PXGvmk4 zDs)~}g$ply`2Z-vw>pC;n;&28&|x4W53U+|O`WXP)IS3JVpZb2ePgE|g(LNo?Pw1@ zZFjaHYL;&+qzzXUy*8dwj}vefQU@|F`lheVmujAJ%1B#(tvoLal{6VC?3H66CAB?f zL@N=4l_Zp*dFz0EC~Tm<#CK4_mz3?g_ySXszp3#A7=n1b1*D1W7j!z_D~c7tWhi?U zk44qHgl8t;;&z9>seJ{u2UP#2qwijzSQXOG`=#r3D@`S!vAb~v$1RICf;)ibPrIZ} zb;M#f%dgW*+AkNJWKU2LlZ^BY&+58GJ#zCrGqS-Ol&MN zcSlYkP_>W7u(dj*zTeAs+I4p|$IWbA&smb2X_~ihuc%*k$WI}brPn~b_G zEt0+PscyCz{QD~KE5fl+F-ct)|+EBo+ zS`4#z={YBApga5`uDdv21P=1v`(!b!3JTUwQuRe#Q1dTS{(a1JA@a`{ir0oZTfNf8 zcb)JL_u4tJ!DN8sbU^-Tgq-M_*;IaQtEp7sZ|m=KW{UGWNzK%(q5)ckUdpp){IgWy z3Wp#^3z4&Hj^?n_c)}C^v_y!R7*8LzHTmJ%H@?BJFxskQ z$l`eWLdB7gMotaNnw;uJ>fT zM8y-|opHwx;jEu@7DC$=OjoKiU^zIw6X%Kxx^STaKbjdY{U3Gl*!(hjZ3}bkt)Xbm z4teX{!6BrqZgqg&LG2AlobRL7lGE#=r#)4mUI?Eg2^Sal{h*qv0?$h}UTDdoMZ3;IuJlo_&^*x-WS-->Wh67f{&- zJSyeYz0%Ibw(yw4=L75*duKr#V{)>$J7Uma$F88Xr{~e|mIy!Bl+Y9FD%DH|VqrSJ zc-#zM6s~rlC7ioc!}GLSxe)q))wf%Em{Q zwU=^wO4`7ke7U1NV$!Ol8#-ZAv8VD>d`07O06uU5(x7h~dT%o5A@U*0vS@zegxX%R z{!@3Mo5cs8JXb#sOti@y3*0~(N4nJ5$di4r(sFI8cR{IfWpN`nds0Hb;SAaQZW*pZ zciYGdnS)%br5|lmEL(Ai&U0MN)sMRLJ7%axYI2=+-+Kz)2Wm}}*Un56O!-_*Jl=>H<*d5HkFyUI=oRcpT4YzaO8f4vN@>j+SW&r{q~vLT-JS6 ze^d4JdRGVJ!ScE*oI2R00?eK>H64;x>GqkmC{BFIYwqTz#PS95!rU^iOsNs!bYJ*n zRjVKM=$`LxFRRFt=s|>tF}R>*Ylme~M;8mix6AG9;k0S1{z_{&ks?#tvxS_{)*b{4 z*o?5-m?0FHH4yHbf&785>YNMcKCf}d@cT!y|JT#~(9kxS0hK2zgF~;;aBqyWK5&t& z7QDHSXr?8gWR4Td-=3mjD}w6OaRMv32}{b3#nVF6BTf3u#f8kxX(4%NWU=z#59}0l z9Xk~+N&Wghtg{s{pr&9hXZErS4Qc!h1`%i4GNOV+X_PdcL>Vn^*Ebe0XPoh3$9va+ z`{i?UP6;&SPmcFW@_tn2h5~N}Gg9I*<%DKhT>L;2Bj$*s0NZlM+aXU*>O84pIC37P z7EMdflt`kf31p|R(xWD4tNk`_Z#{(j_Vfhp(5wo5=8xb8h(_Oh(-Zke59yMU2$5R+e4uqyzm-=8Gi|}bS@UpyCW`AQwafg^N`i0}Aq~nb zj6W=0j^#;HFdOL^@Qvjb1n!V?N&hsGdl0b|3`~#}@9@RQ_co0A?|h5;|+5<*e&a@;l>~pFi<*?s&(2x(Ej&L#R~2ujDO_b8T;_ zdu#x6Zf5w4e-sJMouPNdiz^3OsBVUd@Go_Qm&`>0iJYO-jq5I( zL2!2!B0W$@)e1+zs1EPM-+bbfBk<@4M z069k$S47ve(}yh`SjuA^EcLt1&*%V9lgc_0sSPgJ?}zJnq>u zYxH8+Q?%>~(e<4XkbA5s_q5XGVT5JvYRpN?dSXrwritELvm)Y-el>Hvoy^?bgyB^h znt8NhL;g(&z$IhJ|1PX zJDm<)=FSElJno?H-shkl_(1C~C|@*PLY-W~hlSQ?($G3dG~=q0%6-l+jm) z3sbC0HryYaQC&64l>tt_DOQPYcV6Y{^?I=Ay?8z)K6w`!bV^Cn!ZtZOQR`>XB9oZW zR?}m0I*~J{Wl@1i1(O)P^qLoz<25W>YqHp{ph(iDvs&}xblYJSnDnOW=E}%)^&EJA zvaY>}9ERHzSfzeP?ELJNQ=O+IuM8__6Q}NjsSj(ry23gHE`^S?LcrFGI`?Zs8UD|R zu35$D(fqZi<|VLg#xb$#7d&Zi%bGVfh6Ph#zPgK2GLeaj+mkzqkcL-Z3(l6j(5~G= z3V6>S=p;g$#Fd=$xB#OP06_m$YFl&rX4_YMjn}lP#@Wv8Kis_Ybu{1=>~0u*@*ZvO zHE+wZsOW_#DCSLzRfrYXZ`9tYN|fI9vGkc>oO2gLPJ8C{=|x+GhH^L0c+IYvQirwP zvS8i#nOoDP4oD6_Q8jZIZzY|hcYW6;elbsft9tuF9in;5L|7(%wUt%L%@W4=bl>U# zQh*G~xxi%W{x(n4{Ty7ZcFAJN*(o}A7;|4X;wzu{?g9>7kZ8<&)>I^{>L$i28|ps z?o#@z`Tf9VU$?tK8$wL=1av;+1(c-_?3EA6RPX2$EKK6=Kdm4CH?fxgW7TrFM*ctO a84sW`6;H=ED-;ojVj1e0-l@@Xi~U~+PQZZx diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg b/docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg deleted file mode 100644 index ee277657..00000000 --- a/docs/v1/resources/figs/embedded-plus-two-remote-controllers.svg +++ /dev/null @@ -1,311 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRPC Server - - - - - - - - Instrumentation - - - - - - - - Platform Drivers - - - - - - P4 Target - - - - - - - - gRPC Client - - - - - - P4 EmbeddedController - - - - - - - - Entities - - - - - - - - Config - - - - - - - - - - - - - - P4Runtime - - - - - - P4 Pipeline - - - - - - - - - - - - - - - gRPC Client - - - - - - P4 RemoteController #2 - - - - - - - - - - - - - - P4Runtime - - - - - - - - Entities - - - - - - - - - - - - - - - - - - - - - - - gRPC Client - - - - - - P4 RemoteController #1 - - - - - - - - - - - - - - - - Entities - - - - - - - - \ No newline at end of file diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.png b/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.png deleted file mode 100644 index 12f6a822459eff87ff4f9f5e71e87fe469d9d639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69904 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 -H7Nqck5%Cv$%ab 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

ohNEi)?k1AX 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�e;Tgm+0ra~iL5)3dj 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 E15W^U1ONa4 diff --git a/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg b/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg deleted file mode 100644 index cdd754e9..00000000 --- a/docs/v1/resources/figs/embedded-plus-two-remote-ha-controllers.svg +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRPC Server - - - - - - - - Instrumentation - - - - - - - - Platform Drivers - - - - - - P4 Target - - - - - - - - gRPC Client - - - - - - P4 EmbeddedController - - - - - - - - Entities - - - - - - - - Config - - - - - - - - - - - - - - P4Runtime - - - - - - P4 Pipeline - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRPC Client - - - - - - P4 RemoteController #2 - - - - - - - - - - - - - - P4Runtime - - - - - - - - Entities - - - - - - - - - - - - - - - - - - - - - - - gRPC Client - - - - - - P4 RemoteController #1 - - - - - - - - - - - - - - Primary (Active) - - - - - - Backup (Standby) - - - - - - - - \ No newline at end of file diff --git a/docs/v1/resources/figs/error-report.png b/docs/v1/resources/figs/error-report.png deleted file mode 100644 index 7df72db92f733e53540128942c5c093451ff5ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58359 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

o<_ia({CI?8 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�ii7+` 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 diff --git a/docs/v1/resources/figs/error-report.svg b/docs/v1/resources/figs/error-report.svg deleted file mode 100644 index ba62cd05..00000000 --- a/docs/v1/resources/figs/error-report.svg +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - StatusCode error_code_; // canonical error codestring error_message_;string binary_error_details_; // serialized google.rpc.Status - - - - - - - - - - - - - google.rpc.Status - - - - - - int32 error_code; // canonical error codestring message;repeated Any details; // P4Error - - - - - - - - - - - - - int32 canonical_codestring message;string space;int32 code; // vendor-specific codeAny details; // reserved - - - - - - - - - - - - - - p4.Error - - - - - - p4.Error - - - - - - - - - - - - - - - - - - - - - - - - - - - int32 canonical_codestring message;string space;int32 code; // vendor-specific codeAny details; // reserved - - - - - - - - - - - - grpc::Status - - - - - - - - \ No newline at end of file diff --git a/docs/v1/resources/figs/psa-metadata-translation.png b/docs/v1/resources/figs/psa-metadata-translation.png deleted file mode 100644 index aaee5392ec0f58d18e4449508d9ee1600c5354a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40826 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≪ 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°Rw@UqG0d2%J6D0{dc&@{Hc0an02k_xbIDqFo# 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 diff --git a/docs/v1/resources/figs/psa-metadata-translation.svg b/docs/v1/resources/figs/psa-metadata-translation.svg deleted file mode 100644 index a83eb292..00000000 --- a/docs/v1/resources/figs/psa-metadata-translation.svg +++ /dev/null @@ -1,767 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Config 1 - - - - - - - - P4RTServer 1 - - - - - - - - Device 1(9-bit ports) - - - - - - Switch 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 9-bit ports over I/F - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Config 2 - - - - - - - - P4RTServer 2 - - - - - - - - Device 2(10-bit ports) - - - - - - Switch 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - 10-bit ports over I/F - - - - - - - - Controller(P4RT Client) - - - - - - - - - - - - - - - - - - - - - - 32-bit ports over I/F - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/v1/resources/figs/reference-architecture.png b/docs/v1/resources/figs/reference-architecture.png deleted file mode 100644 index 02e48e7b0761901c54a810fcb173354c693a1a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73961 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%0D!w5@r)HDN5(d2Xx2fBT^{H>E8Kx*lJVKI))z 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 diff --git a/docs/v1/resources/figs/reference-architecture.svg b/docs/v1/resources/figs/reference-architecture.svg deleted file mode 100644 index aecd4475..00000000 --- a/docs/v1/resources/figs/reference-architecture.svg +++ /dev/null @@ -1,16689 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <date/time> - - - - - - <footer> - - - - - - <number> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRPC Server - - - - - - - - Instrumentation - - - - - - - - Platform Drivers - - - - - - - - P4Info - - - - - - - - P4Blob - - - - - - - - gRPC Client - - - - - - P4 Primary Controller - - - - - - - - - - - - - - - gRPC Client - - - - - - Optional – P4 Backup Controller(s) - - - - - - - - Entities - - - - - - - - Config - - - - - - - - - - - - - P4 Runtime Configuration - - - - - - - - - - P4 SourceCode - - - - - - - - - - - - - - - - - - - - - - - - - - p4info.proto - - - - - - - - - - p4runtime.proto - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - P4 RuntimeInterface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/v1/resources/figs/single-embedded-controller.png b/docs/v1/resources/figs/single-embedded-controller.png deleted file mode 100644 index 4c1ec5140feedd532b933b78c61c28223354e6d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30763 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 y1A7fX%+>CW8hk{7_OJWx|EjUOG`ok diff --git a/docs/v1/resources/figs/single-embedded-controller.svg b/docs/v1/resources/figs/single-embedded-controller.svg deleted file mode 100644 index f9583cf8..00000000 --- a/docs/v1/resources/figs/single-embedded-controller.svg +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRPC Server - - - - - - - - Instrumentation - - - - - - - - Platform Drivers - - - - - - P4 Target - - - - - - - - gRPC Client - - - - - - P4 EmbeddedController - - - - - - - - Entities - - - - - - - - Config - - - - - - - - - - - - - - P4Runtime - - - - - - P4 Pipeline - - - - - - - - \ No newline at end of file diff --git a/docs/v1/resources/figs/single-remote-controller.png b/docs/v1/resources/figs/single-remote-controller.png deleted file mode 100644 index b38fa6cc8eed6d584c85fe4b4827907649a9273a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30948 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gRPC Server - - - - - - - - Instrumentation - - - - - - - - Platform Drivers - - - - - - P4 Pipeline - - - - - - P4 Target - - - - - - - - gRPC Client - - - - - - P4 RemoteController - - - - - - - - Entities - - - - - - - - Config - - - - - - - - - - - - - - P4Runtime - - - - - - - - \ No newline at end of file From c0e0239ec3ba64189888011521a769239779b890 Mon Sep 17 00:00:00 2001 From: Dscano Date: Mon, 23 Dec 2024 17:07:32 +0000 Subject: [PATCH 19/35] fix workflows yml Signed-off-by: Dscano --- .github/workflows/spec.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index b6e11d4e..4223064e 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -11,7 +11,7 @@ on: - '*-dev' jobs: - asciidoc -lint: + asciidoc-lint: runs-on: [ubuntu-latest] steps: - uses: actions/checkout@v3 From 25118c65abebeea78b8426e9ebaea8f13ae4524d Mon Sep 17 00:00:00 2001 From: Dscano Date: Tue, 24 Dec 2024 12:57:16 +0000 Subject: [PATCH 20/35] fix Dockerfile.asciidoc Signed-off-by: Dscano --- docs/tools/Dockerfile.asciidoc | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/docs/tools/Dockerfile.asciidoc b/docs/tools/Dockerfile.asciidoc index 7d6da482..b45aed5c 100644 --- a/docs/tools/Dockerfile.asciidoc +++ b/docs/tools/Dockerfile.asciidoc @@ -3,17 +3,27 @@ LABEL maintainer="P4 API Working Group " LABEL description="Dockerfile used for building the asciidoc specification" RUN apt-get update && \ - apt-get install -y cmake flex bison libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgdk-pixbuf-2.0-dev + apt-get install -y cmake flex bison libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgdk-pixbuf-2.0-dev git -RUN gem install asciidoctor \ - gem install asciidoctor-pdf \ - gem install asciidoctor-mathematical \ - gem install asciidoctor-bibtex\ - gem install asciidoctor-lists\ +RUN gem install asciidoctor && \ + echo 'gem: --no-document' > /etc/gemrc && \ + gem install nokogiri && \ + gem install rghost && \ + gem install asciidoctor-diagram && \ + gem install asciidoctor-plantuml && \ + gem install asciidoctor-pdf --version 2.3.18 && \ + gem install asciidoctor-pdf-cjk && \ + gem install asciidoctor-lists --version 1.1.2 && \ + gem install coderay pygments.rb thread_safe && \ + gem install slim && \ + gem install concurrent-ruby && \ + gem install haml tilt && \ + gem install asciidoctor-mathematical && \ + gem install asciidoctor-bibtex &&\ git clone https://github.com/rouge-ruby/rouge &&\ - cd rouge \ - git log -n 1 | cat \ - gem build rouge.gemspec \ + cd rouge && \ + git log -n 1 | cat && \ + gem build rouge.gemspec && \ gem install rouge VOLUME ["/usr/src/p4-spec"] From 71bc2928f9c1656a1ea1d62e252489cd3eba8ae6 Mon Sep 17 00:00:00 2001 From: Dscano Date: Tue, 24 Dec 2024 14:55:16 +0000 Subject: [PATCH 21/35] Fix the Dockerfile.asciidoc by adding the time. Correct typos in README.md. Signed-off-by: Dscano --- docs/tools/Dockerfile.asciidoc | 6 +++--- docs/tools/README.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/tools/Dockerfile.asciidoc b/docs/tools/Dockerfile.asciidoc index b45aed5c..026d8e95 100644 --- a/docs/tools/Dockerfile.asciidoc +++ b/docs/tools/Dockerfile.asciidoc @@ -3,7 +3,7 @@ LABEL maintainer="P4 API Working Group " LABEL description="Dockerfile used for building the asciidoc specification" RUN apt-get update && \ - apt-get install -y cmake flex bison libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgdk-pixbuf-2.0-dev git + apt-get install -y cmake flex bison libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgdk-pixbuf-2.0-dev time RUN gem install asciidoctor && \ echo 'gem: --no-document' > /etc/gemrc && \ @@ -11,7 +11,7 @@ RUN gem install asciidoctor && \ gem install rghost && \ gem install asciidoctor-diagram && \ gem install asciidoctor-plantuml && \ - gem install asciidoctor-pdf --version 2.3.18 && \ + gem install asciidoctor-pdf --version 2.3.19 && \ gem install asciidoctor-pdf-cjk && \ gem install asciidoctor-lists --version 1.1.2 && \ gem install coderay pygments.rb thread_safe && \ @@ -27,4 +27,4 @@ RUN gem install asciidoctor && \ gem install rouge VOLUME ["/usr/src/p4-spec"] -WORKDIR /usr/src/p4-spec +WORKDIR /usr/src/p4-spec \ No newline at end of file diff --git a/docs/tools/README.md b/docs/tools/README.md index c50c48e5..893b2488 100644 --- a/docs/tools/README.md +++ b/docs/tools/README.md @@ -10,8 +10,8 @@ image themselves. If you are a maintainer and you need to upload a new version of the Docker image to to dockerhub, you will need the following commands: ```bash docker build -t p4rt-asciidoc -f Dockerfile.asciidoc . -docker tag p4rt-asciidoc p4lang/p4rt-asciidoc :latest -docker push p4lang/p4rt-asciidoc :latest +docker tag p4rt-asciidoc p4lang/p4rt-asciidoc:latest +docker push p4lang/p4rt-asciidoc:latest ``` Note that you need to have write permissions to the p4lang dockerhub repository From c2355be4b74a20fa761bc94c6351c92ef642ffdd Mon Sep 17 00:00:00 2001 From: Dscano Date: Tue, 24 Dec 2024 15:34:26 +0000 Subject: [PATCH 22/35] Address issue 528, used correct markup for em-dashes Signed-off-by: Dscano --- docs/v1/P4Runtime-Spec.adoc | 82 ++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index 399813d4..fcad86fd 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -233,7 +233,7 @@ may refer to one or more controllers. The P4Runtime API defines the messages and semantics of the interface between the client(s) and the server. The API is specified by the p4runtime.proto Protobuf file, which is available on GitHub as part of the standard -cite:[P4RuntimeRepo]. It may be compiled via protoc --- the Protobuf compiler --- +cite:[P4RuntimeRepo]. It may be compiled via protoc — the Protobuf compiler — to produce both client and server implementation stubs in a variety of languages. It is the responsibility of target implementers to instrument the server. @@ -289,7 +289,7 @@ device config and P4Info metadata. These comprise the `ForwardingPipelineConfig` message. A P4Runtime controller chooses a configuration appropriate to a particular target and installs it via a `SetForwardingPipelineConfig` RPC. Metadata in the P4Info describes both the overall program itself -(`PkgInfo`) as well as all entity instances derived from the P4 program --- +(`PkgInfo`) as well as all entity instances derived from the P4 program — tables and extern instances. Each entity instance has an associated numeric ID assigned by the P4 compiler which serves as a concise "handle" used in API calls. @@ -513,7 +513,7 @@ follows: primary independently for each (`device_id`, `role`) pair. The primary is the client that has the highest `election_id` that the device has ever received for the same (`device_id`, `role`) values. A connection between a controller - instance and a device id --- which involves a persistent `StreamChannel` --- + instance and a device id — which involves a persistent `StreamChannel` — can be referred to as a P4Runtime client. + Note that the P4Runtime server does not assign a `role` or `election_id` to any controller. It is up to an arbitration mechanism outside of the server to @@ -2254,7 +2254,7 @@ types (32-bit and 64-bit words). The P4 language does not put any limit on the size of integer values, whether unsigned (`bit`) or signed (`int`), and it is up to the P4 programmer to choose the appropriate sizes. Because of this flexibility, P4Runtime represents P4 integer values as binary strings, using the -`bytes` Protobuf type. The correct bitwidth --- as per the P4 program --- of +`bytes` Protobuf type. The correct bitwidth — as per the P4 program — of each integer variable exposed through P4Runtime is specified in the P4Info message. @@ -2539,8 +2539,8 @@ case (P4~16~ `bit` type). Just like its P4Info counterpart - `P4DataTypeSpec` -, `P4Data` uses a Protobuf `oneof` to represent all possible values. -We define a canonical representation for `P4Data` messages --- therefore -guaranteeing read-write symmetry --- by introducing the following requirements: +We define a canonical representation for `P4Data` messages — therefore +guaranteeing read-write symmetry — by introducing the following requirements: * The order of `members` in `P4StructLike` and the order of `bitstrings` in `P4Header` must match the order in the corresponding p4info.proto type @@ -2665,7 +2665,7 @@ update { P4~16~ supports 2 different classes of enumeration types: without underlying type (safe enum) and with underlying type (serializable enum or "unsafe" enum) -cite:[P4Enums]. For `enum` types with no underlying type --- as well as `error` --- +cite:[P4Enums]. For `enum` types with no underlying type — as well as `error` — there is no integer value associated with each symbolic member entry (whether assigned automatically by the compiler or directly in the P4 source). We therefore use a human-readable string in `P4Data` to represent `enum` and @@ -2678,7 +2678,7 @@ underlying type need to have a corresponding name. `P4TypeInfo` includes the mapping between entry name and entry value. When providing serializable enum values through `P4Data`, one must use the assigned integer value (`enum_value` bytestring field). P4Runtime does not provide a way for the client to use the -name --- even when the enum member has one --- instead of the value, as it makes +name — even when the enum member has one — instead of the value, as it makes it easier for the server to respect the xref:sec-read-write-symmetry[read-write symmetry] principle. @@ -2730,14 +2730,14 @@ the following fields: ** `translated_type`, if and only if the P4 `type` declaration was annotated with `@p4runtime_translation`. It is of type `P4NewTypeTranslation`, - which itself has two fields --- `uri` and either `sdn_string` or - `sdn_bitwidth` ---, which map to the two input parameters to the + which itself has two fields — `uri` and either `sdn_string` or + `sdn_bitwidth` —, which map to the two input parameters to the annotation. * `annotations`, a repeated field of strings, each one representing a P4 annotation associated to the type declaration. -For example, an architecture --- in this case PSA --- may introduce a new type +For example, an architecture — in this case PSA — may introduce a new type for port numbers: [source,p4] @@ -3183,8 +3183,8 @@ The `Action` Protobuf message has the following fields: xref:sec-bytestrings[Bytestrings]. The P4Runtime client must provide a valid value for each parameter of the P4 action; we do not support default values for action parameters. The server must return an `INVALID_ARGUMENT` error code - if a parameter id is missing, if an extra parameter --- id not found in the - P4Info --- was provided by the client, if a parameter value is missing, or if + if a parameter id is missing, if an extra parameter — id not found in the + P4Info — was provided by the client, if a parameter value is missing, or if the value provided for one of the parameters does not conform to the xref:sec-bytestrings[Bytestrings] format. @@ -3196,8 +3196,8 @@ P4Runtime server must return a `NOT_FOUND` error code. ==== Default Entry According to the P4 specification, the default entry for a table is always set. -It can be set at compile-time by the P4 programmer --- or defaults to `NoAction` -(which is a no-op) otherwise --- and assuming it is not declared as `const`, can +It can be set at compile-time by the P4 programmer — or defaults to `NoAction` +(which is a no-op) otherwise — and assuming it is not declared as `const`, can be modified by the P4Runtime client. Because the default entry is always set, we do not allow `INSERT` and `DELETE` updates on the default entry and the P4Runtime server must return an `INVALID_ARGUMENT` error code if the client @@ -3220,8 +3220,8 @@ Apart from the above restrictions, the default entry is treated like a regular entry, including with regards to xref:sec-direct-resources[direct resources]. In this P4Runtime release, we have decided to restrict the default entry for -indirect tables --- tables with an ActionProfile or ActionSelector -`implementation` property --- to a constant `NoAction` action entry, with the +indirect tables — tables with an ActionProfile or ActionSelector +`implementation` property — to a constant `NoAction` action entry, with the hope that it would simplify the implementation of the P4Runtime service. [#sec-constant-tables] @@ -3330,8 +3330,8 @@ the field to act as a wildcard. This default value is zero for scalar fields such as `priority` and "unset" for message fields such as `match`. The following fields may be used to select and filter results: -* `table_id`: If default (0), entries from all tables --- including constant - tables --- will be selected and no other filter can be used. Otherwise only +* `table_id`: If default (0), entries from all tables — including constant + tables — will be selected and no other filter can be used. Otherwise only the specified table will be considered. * `match`: If default (unset), all entries from the specified table will be considered. Otherwise, results will be filtered based on the provided match @@ -3459,8 +3459,8 @@ This issue also exists for tables with `TERNARY`, `RANGE`, and `OPTIONAL` matches. However, in this case the priority is also taken into account for wildcard reads, and because a priority of 0 is not valid, in practice only the entries with the same priority as the "don't care" entry will be returned to the -client. If the client uses distinct priority values for all entries --- which is -strongly recommended to achieve xref:sec-table-entry[deterministic behavior] ---, +client. If the client uses distinct priority values for all entries — which is +strongly recommended to achieve xref:sec-table-entry[deterministic behavior] —, then there is no ambiguity because the wildcard read will actually return a single entry (the "don't care" entry) as long as the `priority` field is set to the correct value. @@ -3575,8 +3575,8 @@ P4Runtime supports idle timeout for table entries. When adding a table entry, the client can specify a Time-To-Live (TTL) value. If at any time during its lifetime, the data plane entry is not "hit" (i.e. not selected by any packet lookup) for a lapse of time greater or equal to its TTL, the P4Runtime should, -with best effort, generate a stream notification --- using the -`IdleTimeoutNotification` message --- to the primary client, which can then take +with best effort, generate a stream notification — using the +`IdleTimeoutNotification` message — to the primary client, which can then take action, such as remove the idle table entry. Two fields of the `TableEntry` Protobuf message are used to implement idle @@ -4054,8 +4054,8 @@ all members of a group are down. PSA defines Counters as a mechanism for keeping statistics of bytes and packets. Statistics may be updated as a result of an action associated with a table entry, or a direct invocation such as from a P4 control. The `CounterData` -P4Runtime message can be used for all three types of PSA counters --- `PACKETS`, -`BYTES` and `PACKETS_AND_BYTES` --- and consists of the following fields: +P4Runtime message can be used for all three types of PSA counters — `PACKETS`, +`BYTES` and `PACKETS_AND_BYTES` — and consists of the following fields: * `byte_count` is an `int64`, corresponding to the number of octets. * `packet_count` is an `int64`, corresponding to the number of packets. @@ -4179,19 +4179,19 @@ Color Marker* (srTCM) or a simplified version of it that we call *Single Rate Two Color Marker*. The type of a table's meter is set by the `MeterSpec.Type` as described in the xref:sec-meter-directmeter[Meter & DirectMeter section]. -The trTCM meters an arbitrary packet stream using two configured rates --- +The trTCM meters an arbitrary packet stream using two configured rates — the Peak Information Rate (PIR) and Committed Information Rate (CIR), and their -associated burst sizes --- and "marks" its packets as GREEN, YELLOW or RED based +associated burst sizes — and "marks" its packets as GREEN, YELLOW or RED based on the observed rate. -The srTCM meters an arbitrary packet stream using a single configured rate --- -the Committed Information Rate (CIR) and its associated burst size --- as well +The srTCM meters an arbitrary packet stream using a single configured rate — +the Committed Information Rate (CIR) and its associated burst size — as well as the Excess Burst Size (EBS) and "marks" its packets as GREEN, YELLOW or RED based on the observed rate. The *Single Rate Two Color Marker* meters an arbitary packet stream using a -single configured rate --- the Committed Information Rate (CIR) and its -associated burst size --- and "marks" its packets as GREEN or RED based on the +single configured rate — the Committed Information Rate (CIR) and its +associated burst size — and "marks" its packets as GREEN or RED based on the observed rate. `MeterEntry` & `DirectMeterEntry` have an additional field `counter_data` that @@ -4801,8 +4801,8 @@ if they are not duplicate. ** `max_timeout_ns`: the maximum server buffering delay in nanoseconds for an outstanding digest message. - ** `max_list_size`: the maximum digest list size --- in number of digest - messages --- sent by the server to the client as a single `DigestList` + ** `max_list_size`: the maximum digest list size — in number of digest + messages — sent by the server to the client as a single `DigestList` Protobuf message. ** `ack_timeout_ns`: the timeout in nanoseconds that a server must wait for a digest list acknowledgement from the client before new digest messages can @@ -6094,8 +6094,8 @@ type bit<32> PortIdInHeader_t; ---- The first argument to the `@p4runtime_translation` annotation is a URI that -indicates to the P4Runtime server which numerical mapping --- provided by the -out-of-band switch configuration mechanism --- to use to translate between the +indicates to the P4Runtime server which numerical mapping — provided by the +out-of-band switch configuration mechanism — to use to translate between the SDN value and the data plane value. The second argument is the bitwidth of the SDN representation of the translated entity (32-bit in the case of ports). @@ -6123,8 +6123,8 @@ enum SdnPort { } ---- -The switch config will map `SDN_PORT_RECIRCULATE` and `SDN_PORT_CPU` --- as well -as any SDN port number corresponding to a "regular" front-panel port --- to the +The switch config will map `SDN_PORT_RECIRCULATE` and `SDN_PORT_CPU` — as well +as any SDN port number corresponding to a "regular" front-panel port — to the corresponding device-specific values, in order to enable the P4Runtime server to perform the translation. @@ -6157,7 +6157,7 @@ packet-out metadata (`egress_port`) value of width 32-bit from the given set of SDN port values in the switch config. The server will then translate the SDN port value into the device-specific port value from the mapping provided in the out-of-band switch configuration (the mapping can be identified using the -translation URI --- first argument to the `@p4runtime_translation` +translation URI — first argument to the `@p4runtime_translation` annotation). Any subsequent reference to the `egress_port` field in the data plane will use the translated value. `PortIdInHeader_t` is used in the header definition instead of `PortId_t` to guarantee byte-aligned headers in @@ -6781,7 +6781,7 @@ return grpc::CreateCustomChannel(address, credentials, arguments); ==== gRPC Server Maximum Receive Message Size At the time of writing, the default maximum receive message size in gRPC is 4MB ---- while the default maximum send message size is unlimited. This can be a +— while the default maximum send message size is unlimited. This can be a problem for the `SetForwardingPipelineConfig` RPC, since for some targets the binary `p4_device_config` can exceed 4MB, in which case by default the P4Runtime server would return an `INVALID_ARGUMENT` error. To a lesser extent, this may @@ -6805,8 +6805,8 @@ builder.BuildAndStart(); ---- On the client side, we recommend that P4Runtime clients do not use `Write` -batches larger than the default maximum receive message size (4MB) --- in case -the server did not deem necessary to increase the default value ---, unless the +batches larger than the default maximum receive message size (4MB) — in case +the server did not deem necessary to increase the default value —, unless the clients are aware that the server is using a larger maximum receive message size. The gRPC server running the P4Runtime service must not set the maximum receive message size to a value smaller than the default (4MB). From 02f0f217019d22c5b435206c3ed0947e6c740c3c Mon Sep 17 00:00:00 2001 From: Dscano Date: Tue, 24 Dec 2024 15:43:42 +0000 Subject: [PATCH 23/35] Address issue 529, fix incorrect markup for creating links in Asciidoc output Signed-off-by: Dscano --- docs/v1/P4Runtime-Spec.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index fcad86fd..ab3879c7 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -5833,7 +5833,7 @@ xref:sec-default-valued-fields[the section on default-valued fields]. === Digest Messages -See the [DigestEntry](#sec-digestentry) section. +See <<#sec-digestentry>>. [#sec-table-idle-timeout-notification] === Table Idle Timeout Notification From 37a06b1f8d675d2a362b7572d26ea005fc7d959a Mon Sep 17 00:00:00 2001 From: Dscano Date: Tue, 24 Dec 2024 19:23:38 +0000 Subject: [PATCH 24/35] Proposal issue 525, Some odd syntax highlighting in some code blocks Signed-off-by: Dscano --- docs/v1/P4Runtime-Spec.adoc | 100 +++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 48 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index ab3879c7..04feb557 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -1693,7 +1693,7 @@ controller_packet_metadata { preamble { id: 2868916615 name: "packet_out" - annotations: "@controller_header(\"packet_out\")" + annotations: "@controller_header(\"packet_out"\)" } metadata { id: 1 @@ -1711,7 +1711,7 @@ controller_packet_metadata { preamble { id: 2868941301 name: "packet_in" - annotations: "@controller_header(\"packet_in\")" + annotations: "@controller_header(\"packet_in"\)" } metadata { id: 1 @@ -2064,7 +2064,7 @@ entry.mutable_index(); [source,protobuf] ---- -counter_id: +counter_id: "id_value" index {} ---- @@ -2089,7 +2089,7 @@ entry.set_counter_id(); [source,protobuf] ---- -counter_id: +counter_id: "id_value" ---- * **Expected behavior**: All counter entries for the provided counter @@ -2603,7 +2603,8 @@ type_info { bitwidth: 4 } } - } # ... + } + ... headers { key: "ipv6_t" value { @@ -2614,7 +2615,8 @@ type_info { bitwidth: 4 } } - } # ... + } + ... header_unions { key: "ip_t" value { @@ -2652,7 +2654,8 @@ update { valid_header { is_valid: true bitstrings: "\x04" - bitstrings: # ... + bitstrings: + ... } } } @@ -2763,8 +2766,8 @@ messages: type_info { new_types { key: "PortId_String_t" - value { # P4NewTypeSpec - translated_type { # P4NewTypeTranslation + value { // P4NewTypeSpec + translated_type { // P4NewTypeTranslation uri: "p4.org/psa/v1/PortId_String_t" sdn_string: {} } @@ -2775,8 +2778,8 @@ type_info { type_info { new_types { key: "PortId_Bit32_t" - value { # P4NewTypeSpec - translated_type { # P4NewTypeTranslation + value { // P4NewTypeSpec + translated_type { // P4NewTypeTranslation uri: "p4.org/psa/v1/PortId_Bit32_t" sdn_bitwidth: 32 } @@ -2787,8 +2790,8 @@ type_info { type_info { new_types { key: "PortId_32_t" - value { # P4NewTypeSpec - translated_type { # P4NewTypeTranslation + value { // P4NewTypeSpec + translated_type { // P4NewTypeTranslation uri: "p4.org/psa/v1/PortId_32_t" sdn_bitwidth: 32 } @@ -2866,7 +2869,7 @@ tables { match_fields { id: 1 name: "meta.port1" - # notice that bitwidth is unset + // notice that bitwidth is unset match_type: EXACT type_name { name: "PortId_String_t" @@ -2881,7 +2884,7 @@ tables { name: "PortId_Bit32_t" } } - # ... + ... } ---- @@ -3039,16 +3042,16 @@ below, the `match` specifies only the `EXACT` field given by `field_id: 2`. device_id: 3 entities { table_entry { - table_id: 33554439 # Table t's ID. + table_id: 33554439 // Table t's ID. match { - # field_id 1 is not present to use the don't care ternary value. + // field_id 1 is not present to use the don't care ternary value. field_id: 2 exact { value: "\x20" } } action { - # Action selection goes here. + // Action selection goes here. } } } @@ -3423,9 +3426,9 @@ The following `WriteRequest` message can be used to add 2 entries: ---- device_id: 3 entities { - table_entry { # don't care entry + table_entry { // don't care entry table_id: 0x0212ab34 - # ... + ... } table entry { table_id: 0x0212ab34 @@ -3435,7 +3438,7 @@ entities { value: 0x0a000000 prefix_len: 8 } - # ... + ... } } ---- @@ -4562,7 +4565,7 @@ entity { packet_replication_engine_entry { clone_session_entry { session_id: 100 - replicas { port: "\xff\xff\xff\xfd" instance: 1 } # to CPU + replicas { port: "\xff\xff\xff\xfd" instance: 1 } // to CPU class_of_service: 2 packet_length_bytes: 4096 } @@ -4671,10 +4674,10 @@ value_sets { } match { id: 1 - bitwidth: + bitwidth: "ETH_TYPE_BITWIDTH_VALUE" match_type: EXACT } - size: + size: "MAX_TRILL_TYPES_VALUE" } ---- @@ -5292,28 +5295,28 @@ populate `grpc::Status` as follows: [source,protobuf] ---- -# Example of a grpc::Status returned for a Write RPC with a batch of 3 updates. -# The first and third updates encountered an error, while the second update -# succeeded. -code_ = 2 # UNKNOWN +Example of a grpc::Status returned for a Write RPC with a batch of 3 updates. +The first and third updates encountered an error, while the second update +succeeded. +code_ = 2 // UNKNOWN error_message_ = "Write failure." binary_error_details { - code: 2 # UNKNOWN + code: 2 // UNKNOWN message: "Write failure." details { - canonical_code: 8 # RESOURCE_EXHAUSTED + canonical_code: 8 // RESOURCE_EXHAUSTED message: "Table is full." space: "targetX-psa-vendorY" code: 500 # ERR_TABLE_FULL } details { - canonical_code: 0 # OK + canonical_code: 0 // OK } details { - canonical_code: 6 # ALREADY_EXISTS + canonical_code: 6 // ALREADY_EXISTS message: "Entity already exists." space: "targetX-psa-vendorY" - code: 600 # ERR_ENTITY_ALREADY_EXISTS + code: 600 // ERR_ENTITY_ALREADY_EXISTS } } ---- @@ -5396,12 +5399,12 @@ generate the following `ReadRequest`: [source,protobuf] ---- -device_id: +device_id: "DEVICE_ID" entities { - extern_entry { } # read all extern instances for all supported extern types - table_entry { } # read all table entries for all tables - action_profile_member { } # read all members for all action profiles - action_profile_group { } # read all groups for all action profiles + extern_entry { } // read all extern instances for all supported extern types + table_entry { } // read all table entries for all tables + action_profile_member { } // read all members for all action profiles + action_profile_group { } // read all groups for all action profiles ... } ---- @@ -5978,10 +5981,10 @@ client immediately. See section <<#sec-arbitration-updates>>. [source,protobuf] ---- error { - canonical_code: 3 # INVALID_ARGUMENT + canonical_code: 3 // INVALID_ARGUMENT message: "Unknown metadata field id 7." packet_out { - # copied from the PacketOut message received from the client + // copied from the PacketOut message received from the client packet_out { payload: ... metadata { @@ -5989,7 +5992,8 @@ error { name: "I_should_not_be_here" bitwidth: 32 } - # more metadata + // more metadata + ... } } ---- @@ -6002,13 +6006,13 @@ error { [source,protobuf] ---- error { - canonical_code: 3 # INVALID_ARGUMENT + canonical_code: 3 // INVALID_ARGUMENT message: "Packet exceeds the MTU for port." space: "targetX-psa-vendor1" - code: 123 # MTU_EXCEEDED + code: 123 // MTU_EXCEEDED packet_out { - # we do not set the packet_out field as it does not provide any - # extra information to the client + // we do not set the packet_out field as it does not provide any + // extra information to the client } } ---- @@ -6722,10 +6726,10 @@ entity { field_id: 1 exact { value: 0xac } } - # match for field_id 2 is missing => don't care match + // match for field_id 2 is missing => don't care match match { field_id: 3 - other { ... } # some serialized Any message (architecture-specific) + other { ... } // some serialized Any message (architecture-specific) } } members { @@ -6739,7 +6743,7 @@ entity { } match { field_id: 3 - other { ... } # some serialized Any message (architecture-specific) + other { ... } // some serialized Any message (architecture-specific) } } } From 4360049c94e0f25465ea5faa21832be16b967d33 Mon Sep 17 00:00:00 2001 From: Dscano Date: Tue, 24 Dec 2024 21:52:50 +0000 Subject: [PATCH 25/35] Fix trailing whitespace Signed-off-by: Dscano --- docs/v1/P4Runtime-Spec.adoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index 04feb557..e5bee05b 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -2654,8 +2654,7 @@ update { valid_header { is_valid: true bitstrings: "\x04" - bitstrings: - ... + bitstrings: ... } } } From f19f1b6100d78ac9f26644ed1985c6a3da37cfc1 Mon Sep 17 00:00:00 2001 From: Dscano Date: Tue, 24 Dec 2024 21:54:02 +0000 Subject: [PATCH 26/35] Fix trailing whitespace Signed-off-by: Dscano --- docs/v1/P4Runtime-Spec.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index e5bee05b..e56aec22 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -2603,7 +2603,7 @@ type_info { bitwidth: 4 } } - } + } ... headers { key: "ipv6_t" From 8c06ca7bd1901a8ca2d7186815ade9f63e064d84 Mon Sep 17 00:00:00 2001 From: Dscano Date: Wed, 25 Dec 2024 17:24:33 +0000 Subject: [PATCH 27/35] Proposal issue 524, fix PDF numbered lists Signed-off-by: Dscano --- docs/v1/P4Runtime-Spec.adoc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index e56aec22..c2a751b4 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -2046,8 +2046,7 @@ if (counter_entry->has_index()) { } ---- -. Reading a single counter entry at index 0 in the counter array with id -``: +. Reading a single counter entry at index 0 in the counter array with id ``: * Here is the C++ client code: [source,c++] @@ -2075,7 +2074,7 @@ index {} value. Scalar fields with default values are omitted from the textual representation of Protobuf messages. - +[start=2] . Reading all counter entries by leaving the `index` field unset * Here is the C++ client code: @@ -5306,7 +5305,7 @@ binary_error_details { canonical_code: 8 // RESOURCE_EXHAUSTED message: "Table is full." space: "targetX-psa-vendorY" - code: 500 # ERR_TABLE_FULL + code: 500 // ERR_TABLE_FULL } details { canonical_code: 0 // OK From 0ed60c435ed82adfde7aec6e5b67a10561b83f20 Mon Sep 17 00:00:00 2001 From: Dscano Date: Wed, 25 Dec 2024 18:48:42 +0000 Subject: [PATCH 28/35] Proposal issue 523, fix PDF to avoid breaking bullet items, titles and codes Signed-off-by: Dscano --- docs/v1/P4Runtime-Spec.adoc | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.adoc b/docs/v1/P4Runtime-Spec.adoc index c2a751b4..7d0ecf45 100755 --- a/docs/v1/P4Runtime-Spec.adoc +++ b/docs/v1/P4Runtime-Spec.adoc @@ -258,7 +258,7 @@ metadata. Furthermore, the controller can query the target for the [#fig-reference-architecture] image::reference-architecture.png[width=400,align="center"] - +<<< === P4Runtime Service Implementation The P4Runtime API is implemented by a program that runs a gRPC server which @@ -984,6 +984,7 @@ table t { The generated P4Info will contain: [source,protobuf] +[%unbreakable] ---- structured_annotations { name: "MixedExprList" @@ -1688,6 +1689,7 @@ header PacketIn_t { } ---- [source,protobuf] +[%unbreakable] ---- controller_packet_metadata { preamble { @@ -2001,6 +2003,7 @@ message to clearly identify cases where a cookie is not present. There is a subtle distinction between the treatment of default-valued scalar fields vs default-valued message fields in P4Runtime. +<<< ==== Set / Unset Scalar Fields In Protobuf version 3 (*proto3*), the default value of scalar fields is `0` for @@ -2501,6 +2504,8 @@ for named types, which is useful to identify well-known headers, such as IPv4 or IPv6. `P4TypeInfo` also includes the list of parser errors for the program, as a `P4ErrorTypeSpec` message. +[%unbreakable] +-- `P4DataTypeSpec` is meant to be used in P4Info, to specify the expected format of the P4-dependent values being exchanged between the P4Runtime client and server. Each `P4DataTypeSpec` message corresponds to a compile-time type in the @@ -2519,7 +2524,7 @@ compile-time type is represented as a Protobuf `oneof`, which can be: since they are the only sub-types allowed in headers and values with one of these types are represented similarly in P4Runtime (with the Protobuf `bytes` type). - +-- For all P4~16~ compound types (`tuple`, `struct`, `header`, and `header_union`), the order of `members` in the repeated field of the Protobuf type specification is guaranteed to be the same as the order of the members in the corresponding @@ -2561,7 +2566,6 @@ guaranteeing read-write symmetry — by introducing the following requiremen `P4HeaderUnionStackTypeSpec` message. ==== Example - Let's look at the Register example again: [source,p4] @@ -2635,6 +2639,7 @@ type_info { } } ---- + Here's a `p4.WriteRequest` to set the value of `register_ip[12]`: [source,protobuf] @@ -2755,11 +2760,12 @@ type bit<9> PortId_Bit32_t; @p4runtime_translation("p4.org/psa/v1/PortId_32_t", 32) type bit<9> PortId_32_t; ---- - +<<< In this case, the P4Info message would include the following `P4TypeInfo` messages: [source,protobuf] +[%unbreakable] ---- type_info { new_types { @@ -2819,6 +2825,8 @@ parameters and match fields, we include a `type_name` field in `p4.config.v1.Mat `p4.config.v1.Action.Param` and `p4.config.v1.ControllerPacketMetadata.Metadata`. In addition, the `bitwidth` field for all of these message types must abide by the following rule when `type_name` names a translated user-defined type: +[%unbreakable] +-- * If the *controller_type* is a fixed-width unsigned bitstring, the `bitwidth` field must be set to the bitwidth of the *controller_type*. This information is redundant with the one included in the `P4TypeInfo` entry for the @@ -2830,7 +2838,7 @@ the `bitwidth` field for all of these message types must abide by the following * Otherwise (i.e, if the *controller_type* is a string), the `bitwidth` must be "unset", which, in Protobuf version 3, is the same as setting the field to 0. - +-- For example, consider the following P4 snippet, which declares a P4 table matching on two expressions with translated user-defined types: @@ -3292,10 +3300,11 @@ Every P4 table falls into one of three categories: A preinitialized table is allowed to have a mix of some entries marked `const`, and other entries not marked `const`. - +[%unbreakable] +-- Entries not marked `const` may be modified or deleted, just as a client may do for any entry in a normal table. - +-- Entries marked `const` behave like entries in a constant table, i.e. only `MODIFY` operations on direct resources are allowed. @@ -4979,7 +4988,7 @@ value for the canonical error code based on best practices cite:[gRPCStatusCodes .P4Runtime Error Report Message Format. [#fig-p4prg] -image::error-report.png[] +image::error-report.png[width=400,align="center"] gRPC provides utility functions `ExtractErrorDetails()` and `SetErrorDetails()` cite:[gRPCErrorDetails] to easily convert between `grpc::Status` and @@ -5085,6 +5094,7 @@ The `Write` RPC updates one or more P4 entities on the target. The request is defined as follows: [source,protobuf] +[%unbreakable] ---- message WriteRequest { uint64 device_id = 1; @@ -6059,7 +6069,7 @@ translated types which are not declared as part of the PSA architecture. .P4Runtime Metadata Translation for the Portable Switch Architecture [#fig-psa-metadata-translation] -image::psa-metadata-translation.png[] +image::psa-metadata-translation.png[width=400,align="center"] <<#fig-psa-metadata-translation>> illustrates a motivating example, where a centralized controller is controlling two P4Runtime targets in a fabric. @@ -6364,6 +6374,7 @@ as the major version number for the P4Runtime version they "extend". For the remainder of this section, we will refer to these two files as *p4info-ext* and *p4runtime-ext* respectively. +<<< === Extending P4Runtime for Architecture-Specific Externs Each P4 architecture can define its own set of extern types. Controlling them at From ce784a1a89948619fbd3d381b7849a0090a2bd2b Mon Sep 17 00:00:00 2001 From: Dscano Date: Thu, 26 Dec 2024 11:41:50 +0000 Subject: [PATCH 29/35] Fix issue 522, removed negative indentation Signed-off-by: Dscano --- docs/v1/resources/theme/p4-stylesheet.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v1/resources/theme/p4-stylesheet.css b/docs/v1/resources/theme/p4-stylesheet.css index a29dbe7c..6277012b 100644 --- a/docs/v1/resources/theme/p4-stylesheet.css +++ b/docs/v1/resources/theme/p4-stylesheet.css @@ -632,7 +632,7 @@ h2 { color: #030303; border-bottom: 1px solid #dddddd; } #header, #content, #footnotes { max-width: 660px; padding-left: 0; padding-right: 0; } -#content ul li { padding-left: .7em; } +#content ul li { padding-left: 0; } .olist.procedure > ol { counter-reset: li; list-style: none; position: relative; } .olist.procedure > ol > li { position: relative; padding: 5px 0 5px 55px; margin-bottom: 5px; } From ba93b11063b4c057fd02dcb1ca5d6e5d40ff7a17 Mon Sep 17 00:00:00 2001 From: Dscano Date: Thu, 26 Dec 2024 13:35:15 +0000 Subject: [PATCH 30/35] Fix issue 527, rendering of inline code improved Signed-off-by: Dscano --- docs/v1/resources/theme/p4-stylesheet.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v1/resources/theme/p4-stylesheet.css b/docs/v1/resources/theme/p4-stylesheet.css index 6277012b..503a530a 100644 --- a/docs/v1/resources/theme/p4-stylesheet.css +++ b/docs/v1/resources/theme/p4-stylesheet.css @@ -47,7 +47,7 @@ hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } mark { background: #ff0; color: #000; } /** Correct font family set oddly in Safari 5 and Chrome. */ -code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } +code, kbd, pre, samp { font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-size:12px; } /** Improve readability of pre-formatted text in all browsers. */ pre { white-space: pre-wrap; } From a93198fe5c8891caac5abc985e4ee257ff5783c2 Mon Sep 17 00:00:00 2001 From: Dscano Date: Sat, 28 Dec 2024 12:41:10 +0000 Subject: [PATCH 31/35] Centered images and table captions in HTML Signed-off-by: Dscano --- docs/v1/resources/theme/p4-stylesheet.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/v1/resources/theme/p4-stylesheet.css b/docs/v1/resources/theme/p4-stylesheet.css index 503a530a..0ee77e01 100644 --- a/docs/v1/resources/theme/p4-stylesheet.css +++ b/docs/v1/resources/theme/p4-stylesheet.css @@ -347,9 +347,9 @@ kbd kbd:last-child { margin-right: 0; } .imageblock, .literalblock, .listingblock, .verseblock, .videoblock { margin-bottom: 1.33333em; } -.admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: center; font-weight: bold; } +.admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: center; font-weight: lighter;} -.tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; } +.tableblock > caption {caption-side: bottom; font-weight:lighter; white-space: nowrap; overflow: visible;} table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } From d9aea997b042bba6da8248e4256cebc49bf37906 Mon Sep 17 00:00:00 2001 From: Dscano Date: Mon, 30 Dec 2024 08:57:56 +0000 Subject: [PATCH 32/35] Add LibreOffice to the Dockerfile and include a new make command. Signed-off-by: Dscano --- .github/workflows/spec.yml | 2 +- docs/tools/Dockerfile.asciidoc | 3 ++- docs/v1/Makefile | 7 ++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index 4223064e..63912d5d 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -25,5 +25,5 @@ jobs: - uses: actions/checkout@v3 - name: Build spec run: | - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make ci ls docs/v1/build diff --git a/docs/tools/Dockerfile.asciidoc b/docs/tools/Dockerfile.asciidoc index 026d8e95..ce5df55b 100644 --- a/docs/tools/Dockerfile.asciidoc +++ b/docs/tools/Dockerfile.asciidoc @@ -5,7 +5,8 @@ LABEL description="Dockerfile used for building the asciidoc specification" RUN apt-get update && \ apt-get install -y cmake flex bison libglib2.0-dev libcairo2-dev libpango1.0-dev libxml2-dev libwebp-dev libzstd-dev libgdk-pixbuf-2.0-dev time -RUN gem install asciidoctor && \ +RUN apt-get install -y libreoffice && \ + gem install asciidoctor && \ echo 'gem: --no-document' > /etc/gemrc && \ gem install nokogiri && \ gem install rghost && \ diff --git a/docs/v1/Makefile b/docs/v1/Makefile index 8111e747..9f7e10c1 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -6,7 +6,6 @@ ROUGE_CSS=style all: ${SPEC}.pdf ${SPEC}.html build: - mkdir -p build ${SPEC}.pdf: ${SPEC}.adoc time asciidoctor-pdf -v \ @@ -23,5 +22,11 @@ ${SPEC}.html: ${SPEC}.adoc -r asciidoctor-lists \ -a rouge-css=$(ROUGE_CSS) $< +images: + soffice --convert-to png --outdir resources/figs resources/figs/*.odg > /dev/null 2>&1 + +ci: images all + + clean: /bin/rm -f ${SPEC}.pdf ${SPEC}.html \ No newline at end of file From 79ab44a4ab8e7a9b28ed4dbebd5536a4f00e65dc Mon Sep 17 00:00:00 2001 From: Dscano Date: Mon, 30 Dec 2024 11:07:57 +0000 Subject: [PATCH 33/35] Suggest a make command Signed-off-by: Dscano --- .github/workflows/spec.yml | 2 +- docs/v1/Makefile | 5 ++--- docs/v1/README.md | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index 63912d5d..579ab847 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -25,5 +25,5 @@ jobs: - uses: actions/checkout@v3 - name: Build spec run: | - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make ci + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc :latest make build_spec_with_images ls docs/v1/build diff --git a/docs/v1/Makefile b/docs/v1/Makefile index 9f7e10c1..c48b1c2c 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -25,8 +25,7 @@ ${SPEC}.html: ${SPEC}.adoc images: soffice --convert-to png --outdir resources/figs resources/figs/*.odg > /dev/null 2>&1 -ci: images all - - +build_spec_with_images: images all + clean: /bin/rm -f ${SPEC}.pdf ${SPEC}.html \ No newline at end of file diff --git a/docs/v1/README.md b/docs/v1/README.md index b9bf2f45..3db0f2e0 100644 --- a/docs/v1/README.md +++ b/docs/v1/README.md @@ -68,7 +68,7 @@ LibreOffice to be installed. The easiest way to render the AsciiDoc specification documentation is to use the `p4lang/p4rt-asciidoc:latest` Docker` image: - docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc:latest make + docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-asciidoc:latest make build_spec_with_images ### Linux ``` From 2fc304aa2750087ee50261a70b1e3b4dc8b10285 Mon Sep 17 00:00:00 2001 From: Dscano Date: Sun, 5 Jan 2025 18:19:09 +0000 Subject: [PATCH 34/35] Add to Makefile png and svg images generation Signed-off-by: Dscano --- docs/v1/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/v1/Makefile b/docs/v1/Makefile index c48b1c2c..9d7ba43e 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -23,6 +23,7 @@ ${SPEC}.html: ${SPEC}.adoc -a rouge-css=$(ROUGE_CSS) $< images: + soffice --convert-to svg --outdir resources/figs resources/figs/*.odg > /dev/null 2>&1 soffice --convert-to png --outdir resources/figs resources/figs/*.odg > /dev/null 2>&1 build_spec_with_images: images all From 8b9c162b606e68c06b15c518b4e788e8b367fac0 Mon Sep 17 00:00:00 2001 From: Dscano Date: Sun, 5 Jan 2025 18:23:24 +0000 Subject: [PATCH 35/35] Add images dependencies to Makefile Signed-off-by: Dscano --- docs/v1/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/v1/Makefile b/docs/v1/Makefile index 9d7ba43e..3856a62c 100644 --- a/docs/v1/Makefile +++ b/docs/v1/Makefile @@ -7,7 +7,7 @@ all: ${SPEC}.pdf ${SPEC}.html build: -${SPEC}.pdf: ${SPEC}.adoc +${SPEC}.pdf: ${SPEC}.adoc images time asciidoctor-pdf -v \ -a pdf-fontsdir=resources/fonts \ -r asciidoctor-mathematical \ @@ -15,7 +15,7 @@ ${SPEC}.pdf: ${SPEC}.adoc -r asciidoctor-lists \ -a rouge-style=$(ROUGE_STYLE) $< -${SPEC}.html: ${SPEC}.adoc +${SPEC}.html: ${SPEC}.adoc images time asciidoctor -v \ -r asciidoctor-mathematical \ -r asciidoctor-bibtex \

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