From b45b77be14470e2b4c17a9e9bbf95d30dc803f51 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Tue, 15 Oct 2024 11:43:12 -0700 Subject: [PATCH 01/20] Updated VSCode extention docs --- docs/assets/images/vs_code/error_message.png | Bin 0 -> 19870 bytes docs/assets/images/vs_code/lingo_packages.png | Bin 0 -> 31473 bytes .../assets/images/vs_code/local_libraries.png | Bin 0 -> 29032 bytes docs/tools/code-extension.mdx | 154 +++++++++++++++++- 4 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 docs/assets/images/vs_code/error_message.png create mode 100644 docs/assets/images/vs_code/lingo_packages.png create mode 100644 docs/assets/images/vs_code/local_libraries.png diff --git a/docs/assets/images/vs_code/error_message.png b/docs/assets/images/vs_code/error_message.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ed50fc0e9ee81330e9ec20d3ef57f375f57c50 GIT binary patch literal 19870 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 Eg2Wrw$N&HU literal 0 HcmV?d00001 diff --git a/docs/assets/images/vs_code/lingo_packages.png b/docs/assets/images/vs_code/lingo_packages.png new file mode 100644 index 0000000000000000000000000000000000000000..03c8d57d5c09e32f4a99a6a73685a70af9daf0fa GIT binary patch literal 31473 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 bz<5cw=s%MaC3~oR4gM*~smYc}o4)x!iA1%O literal 0 HcmV?d00001 diff --git a/docs/assets/images/vs_code/local_libraries.png b/docs/assets/images/vs_code/local_libraries.png new file mode 100644 index 0000000000000000000000000000000000000000..75fad3aeb56b8ce47d50eb1bc6b21f6bec0dbbcb GIT binary patch literal 29032 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 literal 0 HcmV?d00001 diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 1a6d6c94c..17d0f591f 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -3,7 +3,7 @@ title: VS Code Extension description: Visual Studio Code Extension for Lingua Franca. --- -The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-directed editing capability, compilation, and diagram synthesis for Lingua Franca programs. +The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-directed editing capability, compilation, diagram synthesis and a project explorer for Lingua Franca programs. ## Usage @@ -18,6 +18,22 @@ src/ src-gen/Foo ``` +Overall, we encourage you to open your project in VS Code using the following structure to fully leverage the features of the VS Code extension: + +```shell +├── root +│ ├── bin/ +│ ├── build/ # directory containing lingo packages +│ │ ├── lfc_include/ # Directory for storing reusable reactors +│ │ │ ├── lingo_library/ +│ ├── include/ +│ ├── src/ +│ │ ├── lib/ # Directory for storing reusable reactors +│ │ │ ├── Input.lf # Ex: reactor capturing external inputs (e.g., Microphone, Camera) +│ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) +└── └── Lingo.toml # Configuration file for Lingo Package Manager +``` + ### Rendering diagrams To show the diagram for the currently active Lingua Franca file, click on the diagrams icon at the upper right: @@ -31,8 +47,142 @@ To compile the `.lf` source, open the command palette (Ctrl + Sh You can also build and immediately afterwards run your code by opening the command palette (Ctrl + Shift + P) and then entering `Lingua Franca: Build and Run`. Running the code can also be done from the VS Code terminal by executing the generated file in `./bin`. +### Project Explorer + +The **Lingua Franca Project Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Project Explorer** displays a **Tree View** with the following structure: + +```shell +├── LF Project +│ ├── Lingo Packages +│ ├── Local Libraries +└── └── Source Files +``` + +- **Lingo Packages**: Lists libraries installed via the Lingo Package Manager, located in the `build/lfc_include` directory (if any). + +- **Local Libraries**: Displays locally defined libraries (e.g., reusable reactors), located in the `src/lib` directory. + +- **Source Files**: Contains the LF source files created by the developer, located in the `src` directory. + +The **Source Files** section is always present as it reflects the main LF files in the project. However, the **Lingo Packages** and **Local Libraries** sections appear only if the respective directories and files exist in the workspace. + +Hovering over the **LF Project** item reveals a terminal icon. Clicking this icon opens a terminal window at the project's root directory, allowing you to execute commands directly within that directory. + +#### Lingo Packages + +The **Lingo Packages** section lists libraries installed using the [Lingo Package Manager](https://github.com/lf-lang/lingo). Developers can use the Lingo Package Manager to retrieve and install LF programs from repositories such as the [Lingua Franca Community Organization](https://github.com/LF-Community). + +To install libraries: +1. Configure the `Lingo.toml` file with the desired libraries. +2. Run `lingo build` to download the specified dependencies. + +Once the libraries are installed, they will appear in the `{project_name}/build/lfc_include/` directory. The **Lingo Packages** section will then be structured as follows: + +```shell +├── LF Project +│ ├── Lingo Packages +│ │ ├── lingo_library/ +│ │ │ ├── File_1.lf +│ │ │ │ ├── Rusable_Reactor_1.lf +│ │ │ │ ├── Rusable_Reactor_2.lf +│ │ │ ├── File_2.lf +│ │ │ │ ├── Rusable_Reactor_1.lf +│ │ │ │ ├── Rusable_Reactor_2.lf +... +``` + +In this structure: +- **LF Project**: Represents the root folder of the main project. +- **lingo_library**: Represents each library listed in `Lingo.toml`, which contains one or more LF programs featuring reusable reactors. + +The image below shows a visual representation of the **Lingo Packages** section. The **project** icon indicates the LF Project folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded libraries (e.g., the `edgeai` library in the example). The **code file** icon denotes an LF program within a library, and the **bracket** icon represents individual reactors inside the LF program. + +![Lingo Packages section](../assets/images/vs_code/lingo_packages.png) + +The hierarchy categorizes tree items into the following types: + +1. **`library-root`**: Refers to the root folder of each downloaded library. +2. **`file`**: Represents an LF program within the library. +3. **`reactor`**: Refers to individual reactors within the LF program. + +When focusing on the **Lingo Packages** section, an `edit` command becomes available. Clicking it opens the `Lingo.toml` file in the editor for configuration changes. The following actions are available for items in the **Lingo Packages** section: + +- For **file** items (from right to left): + - **Open in Split View**: Opens the file in a split editor view. + - **Go To File**: Navigates to the file in the editor. + +- For **reactor** items (from right to left): + - **Import Selected Reactor**: Imports the selected reactor into the active LF program. + - **Go To File**: Opens the file where the reactor is defined. + - **Open in Split View**: Opens the file in a split editor view (accessible by right-clicking the item). + +> **Note**: The **Import Selected Reactor** option is available only if an LF program is open in the editor. + +#### Local Libraries + +The **Local Libraries** section lists LF programs created by the developer, located in the `{project_name}/src/lib/` directory. These programs serve as local libraries, containing reusable reactors. The directory structure follows this format: + +```shell +├── LF Project +... +│ ├── Local Libraries +│ │ ├── File_1.lf +│ │ │ ├── Rusable_Reactor_1.lf +│ │ │ ├── Rusable_Reactor_2.lf +│ │ ├── File_2.lf +│ │ │ │ ├── Rusable_Reactor_1.lf +│ │ │ │ ├── Rusable_Reactor_2.lf +... +``` + +The image below illustrates the **Local Libraries** section. In this depiction, the **"project"** icon represents the LF project folder, while the **"code file"** icon represents the LF program, and the **"bracket"** icon denotes individual reactors within the LF program. + +![Local Libraries section](../assets/images/vs_code/local_libraries.png) + +The hierarchy categorizes tree items into two types: + +1. **`file`**: Represents the LF program. +2. **`reactor`**: Represents a reactor within the LF program. + +Actions for **Local Libraries** are similar to those in the [**Lingo Packages**](#lingo-packages) section: + +- For **file** items (from right to left): + - **Open in Split View**: Opens the file in a split editor view. + - **Go To File**: Navigates to the file in the editor. + +- For **reactor** items (from right to left): + - **Import Selected Reactor**: Imports the selected reactor into the active LF program. + - **Go To File**: Opens the file where the reactor is defined. + - **Open in Split View**: Opens the file in a split editor view (accessible by right-clicking the item). + +> **Note**: The **Import Selected Reactor** option is available only if an LF program is open in the editor. + +#### Source Files + +The **Source Files** section lists all LF programs in the `{project_name}/src/` directory. This section provides direct access to the main source files of the project. The hierarchy for this view is straightforward: + +```shell +├── LF Project +... +│ ├── Local Libraries +│ │ ├── File_1.lf +│ │ ├── File_1.lf +│ │ ├── File_1.lf +... +``` + +Clicking on any of the files will open the corresponding LF program in the editor, allowing developers to quickly navigate to and edit the source code of their project. + +#### Correctness of Project Structure + +If the project structure deviates from the expected format, an error message will appear: + +![Project structure error](../assets/images/vs_code/error_message.png) + +To avoid errors, follow the [project structure guidelines](#creating-a-new-file). + ## Notes ### For Python Users -Users who edit LF programs with a Python target will benefit the most from Python linting by installing Pylint 2.12.2 or later. +Users who edit LF programs with a Python target will benefit the most from Python linting by installing Pylint 2.12.2 or later. \ No newline at end of file From 8106587b43594933d10268dfce90476aade5951e Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Wed, 16 Oct 2024 11:55:08 -0700 Subject: [PATCH 02/20] Update documentation to reflect latest changes --- docs/assets/images/vs_code/error_message.png | Bin 19870 -> 0 bytes docs/assets/images/vs_code/error_message.svg | 3 ++ docs/assets/images/vs_code/lingo_packages.png | Bin 31473 -> 0 bytes docs/assets/images/vs_code/lingo_packages.svg | 3 ++ .../assets/images/vs_code/local_libraries.png | Bin 29032 -> 0 bytes .../assets/images/vs_code/local_libraries.svg | 3 ++ docs/tools/code-extension.mdx | 44 +++++++++--------- 7 files changed, 31 insertions(+), 22 deletions(-) delete mode 100644 docs/assets/images/vs_code/error_message.png create mode 100644 docs/assets/images/vs_code/error_message.svg delete mode 100644 docs/assets/images/vs_code/lingo_packages.png create mode 100644 docs/assets/images/vs_code/lingo_packages.svg delete mode 100644 docs/assets/images/vs_code/local_libraries.png create mode 100644 docs/assets/images/vs_code/local_libraries.svg diff --git a/docs/assets/images/vs_code/error_message.png b/docs/assets/images/vs_code/error_message.png deleted file mode 100644 index f4ed50fc0e9ee81330e9ec20d3ef57f375f57c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19870 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 Eg2Wrw$N&HU diff --git a/docs/assets/images/vs_code/error_message.svg b/docs/assets/images/vs_code/error_message.svg new file mode 100644 index 000000000..37c7ad6e7 --- /dev/null +++ b/docs/assets/images/vs_code/error_message.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/assets/images/vs_code/lingo_packages.png b/docs/assets/images/vs_code/lingo_packages.png deleted file mode 100644 index 03c8d57d5c09e32f4a99a6a73685a70af9daf0fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31473 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 bz<5cw=s%MaC3~oR4gM*~smYc}o4)x!iA1%O diff --git a/docs/assets/images/vs_code/lingo_packages.svg b/docs/assets/images/vs_code/lingo_packages.svg new file mode 100644 index 000000000..00a20ac23 --- /dev/null +++ b/docs/assets/images/vs_code/lingo_packages.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/assets/images/vs_code/local_libraries.png b/docs/assets/images/vs_code/local_libraries.png deleted file mode 100644 index 75fad3aeb56b8ce47d50eb1bc6b21f6bec0dbbcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29032 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 diff --git a/docs/assets/images/vs_code/local_libraries.svg b/docs/assets/images/vs_code/local_libraries.svg new file mode 100644 index 000000000..ae32ee825 --- /dev/null +++ b/docs/assets/images/vs_code/local_libraries.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 17d0f591f..a6e526d50 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -3,7 +3,7 @@ title: VS Code Extension description: Visual Studio Code Extension for Lingua Franca. --- -The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-directed editing capability, compilation, diagram synthesis and a project explorer for Lingua Franca programs. +The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-directed editing capability, compilation, diagram synthesis and a packages explorer for Lingua Franca programs. ## Usage @@ -23,9 +23,9 @@ Overall, we encourage you to open your project in VS Code using the following st ```shell ├── root │ ├── bin/ -│ ├── build/ # directory containing lingo packages +│ ├── build/ # directory containing packages installed by Lingo Package Manager │ │ ├── lfc_include/ # Directory for storing reusable reactors -│ │ │ ├── lingo_library/ +│ │ │ ├── installed_library/ │ ├── include/ │ ├── src/ │ │ ├── lib/ # Directory for storing reusable reactors @@ -47,41 +47,41 @@ To compile the `.lf` source, open the command palette (Ctrl + Sh You can also build and immediately afterwards run your code by opening the command palette (Ctrl + Shift + P) and then entering `Lingua Franca: Build and Run`. Running the code can also be done from the VS Code terminal by executing the generated file in `./bin`. -### Project Explorer +### Packages Explorer -The **Lingua Franca Project Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Project Explorer** displays a **Tree View** with the following structure: +The **Lingua Franca Packages Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Packages Explorer** displays a **Tree View** with the following structure: ```shell ├── LF Project -│ ├── Lingo Packages +│ ├── Installed Packages │ ├── Local Libraries └── └── Source Files ``` -- **Lingo Packages**: Lists libraries installed via the Lingo Package Manager, located in the `build/lfc_include` directory (if any). +- [**Installed Packages**](#installed-packages): Lists libraries installed via the Lingo Package Manager, located in the `build/lfc_include` directory (if any). -- **Local Libraries**: Displays locally defined libraries (e.g., reusable reactors), located in the `src/lib` directory. +- [**Local Libraries**](#local-libraries): Displays locally defined libraries (e.g., reusable reactors), located in the `src/lib` directory. -- **Source Files**: Contains the LF source files created by the developer, located in the `src` directory. +- [**Source Files**](#source-files): Contains the LF source files created by the developer, located in the `src` directory. -The **Source Files** section is always present as it reflects the main LF files in the project. However, the **Lingo Packages** and **Local Libraries** sections appear only if the respective directories and files exist in the workspace. +The **Source Files** section is always present as it reflects the main LF files in the project. However, the **Installed Packages** and **Local Libraries** sections appear only if the respective directories and files exist in the workspace. Hovering over the **LF Project** item reveals a terminal icon. Clicking this icon opens a terminal window at the project's root directory, allowing you to execute commands directly within that directory. -#### Lingo Packages +#### Installed Packages -The **Lingo Packages** section lists libraries installed using the [Lingo Package Manager](https://github.com/lf-lang/lingo). Developers can use the Lingo Package Manager to retrieve and install LF programs from repositories such as the [Lingua Franca Community Organization](https://github.com/LF-Community). +The **Installed Packages** section lists libraries installed using the [Lingo Package Manager](https://github.com/lf-lang/lingo). Developers can use the Lingo Package Manager to retrieve and install LF programs from repositories such as the [Lingua Franca Community Organization](https://github.com/LF-Community). To install libraries: 1. Configure the `Lingo.toml` file with the desired libraries. 2. Run `lingo build` to download the specified dependencies. -Once the libraries are installed, they will appear in the `{project_name}/build/lfc_include/` directory. The **Lingo Packages** section will then be structured as follows: +Once the libraries are installed, they will appear in the `{project_name}/build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: ```shell ├── LF Project -│ ├── Lingo Packages -│ │ ├── lingo_library/ +│ ├── Installed Packages +│ │ ├── installed_library/ │ │ │ ├── File_1.lf │ │ │ │ ├── Rusable_Reactor_1.lf │ │ │ │ ├── Rusable_Reactor_2.lf @@ -93,11 +93,11 @@ Once the libraries are installed, they will appear in the `{project_name}/build/ In this structure: - **LF Project**: Represents the root folder of the main project. -- **lingo_library**: Represents each library listed in `Lingo.toml`, which contains one or more LF programs featuring reusable reactors. +- **installed_library**: Represents each library listed in `Lingo.toml`, which contains one or more LF programs featuring reusable reactors. -The image below shows a visual representation of the **Lingo Packages** section. The **project** icon indicates the LF Project folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded libraries (e.g., the `edgeai` library in the example). The **code file** icon denotes an LF program within a library, and the **bracket** icon represents individual reactors inside the LF program. +The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Project folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded libraries (e.g., the `edgeai` library in the example). The **code file** icon denotes an LF program within a library, and the **bracket** icon represents individual reactors inside the LF program. -![Lingo Packages section](../assets/images/vs_code/lingo_packages.png) +![Installed Packages section](../assets/images/vs_code/lingo_packages.svg) The hierarchy categorizes tree items into the following types: @@ -105,7 +105,7 @@ The hierarchy categorizes tree items into the following types: 2. **`file`**: Represents an LF program within the library. 3. **`reactor`**: Refers to individual reactors within the LF program. -When focusing on the **Lingo Packages** section, an `edit` command becomes available. Clicking it opens the `Lingo.toml` file in the editor for configuration changes. The following actions are available for items in the **Lingo Packages** section: +When focusing on the **Installed Packages** section, an `edit` command becomes available. Clicking it opens the `Lingo.toml` file in the editor for configuration changes. The following actions are available for items in the **Installed Packages** section: - For **file** items (from right to left): - **Open in Split View**: Opens the file in a split editor view. @@ -137,14 +137,14 @@ The **Local Libraries** section lists LF programs created by the developer, loca The image below illustrates the **Local Libraries** section. In this depiction, the **"project"** icon represents the LF project folder, while the **"code file"** icon represents the LF program, and the **"bracket"** icon denotes individual reactors within the LF program. -![Local Libraries section](../assets/images/vs_code/local_libraries.png) +![Local Libraries section](../assets/images/vs_code/local_libraries.svg) The hierarchy categorizes tree items into two types: 1. **`file`**: Represents the LF program. 2. **`reactor`**: Represents a reactor within the LF program. -Actions for **Local Libraries** are similar to those in the [**Lingo Packages**](#lingo-packages) section: +Actions for **Local Libraries** are similar to those in the [**Installed Packages**](#installed-packages) section: - For **file** items (from right to left): - **Open in Split View**: Opens the file in a split editor view. @@ -177,7 +177,7 @@ Clicking on any of the files will open the corresponding LF program in the edito If the project structure deviates from the expected format, an error message will appear: -![Project structure error](../assets/images/vs_code/error_message.png) +![Project structure error](../assets/images/vs_code/error_message.svg) To avoid errors, follow the [project structure guidelines](#creating-a-new-file). From 1be637206a9690cbc08f6cbdabadea522a4cce93 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Thu, 17 Oct 2024 09:49:45 -0700 Subject: [PATCH 03/20] =?UTF-8?q?Remove=20unnecessary=20=E2=80=98shell?= =?UTF-8?q?=E2=80=99=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/tools/code-extension.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index a6e526d50..12a39891c 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -20,7 +20,7 @@ src-gen/Foo Overall, we encourage you to open your project in VS Code using the following structure to fully leverage the features of the VS Code extension: -```shell +``` ├── root │ ├── bin/ │ ├── build/ # directory containing packages installed by Lingo Package Manager @@ -51,7 +51,7 @@ Running the code can also be done from the VS Code terminal by executing the gen The **Lingua Franca Packages Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Packages Explorer** displays a **Tree View** with the following structure: -```shell +``` ├── LF Project │ ├── Installed Packages │ ├── Local Libraries @@ -78,7 +78,7 @@ To install libraries: Once the libraries are installed, they will appear in the `{project_name}/build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: -```shell +``` ├── LF Project │ ├── Installed Packages │ │ ├── installed_library/ @@ -122,7 +122,7 @@ When focusing on the **Installed Packages** section, an `edit` command becomes a The **Local Libraries** section lists LF programs created by the developer, located in the `{project_name}/src/lib/` directory. These programs serve as local libraries, containing reusable reactors. The directory structure follows this format: -```shell +``` ├── LF Project ... │ ├── Local Libraries @@ -161,7 +161,7 @@ Actions for **Local Libraries** are similar to those in the [**Installed Package The **Source Files** section lists all LF programs in the `{project_name}/src/` directory. This section provides direct access to the main source files of the project. The hierarchy for this view is straightforward: -```shell +``` ├── LF Project ... │ ├── Local Libraries From b3c04e072667e4cd9e14c6d101ff9b8a2d8b38c8 Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Mon, 21 Oct 2024 19:56:13 +0200 Subject: [PATCH 04/20] Update docs/tools/code-extension.mdx Co-authored-by: Marten Lohstroh --- docs/tools/code-extension.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 12a39891c..7c0a332c4 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -3,7 +3,7 @@ title: VS Code Extension description: Visual Studio Code Extension for Lingua Franca. --- -The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-directed editing capability, compilation, diagram synthesis and a packages explorer for Lingua Franca programs. +The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-directed editing capability, compilation, diagram synthesis and a package explorer for Lingua Franca programs. ## Usage From d212ef3316dc4440044e3cc4aff517c80e7e96ef Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Mon, 21 Oct 2024 19:56:36 +0200 Subject: [PATCH 05/20] Update docs/tools/code-extension.mdx Co-authored-by: Marten Lohstroh --- docs/tools/code-extension.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 7c0a332c4..59d09ed58 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -49,7 +49,7 @@ Running the code can also be done from the VS Code terminal by executing the gen ### Packages Explorer -The **Lingua Franca Packages Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Packages Explorer** displays a **Tree View** with the following structure: +The **Lingua Franca Package Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Package Explorer** displays a **Tree View** with the following structure: ``` ├── LF Project From e0572396402e5ded031e74a1d561dc4327c47b19 Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Mon, 21 Oct 2024 19:59:32 +0200 Subject: [PATCH 06/20] Update docs/tools/code-extension.mdx Co-authored-by: Marten Lohstroh --- docs/tools/code-extension.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 59d09ed58..4df98df29 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -116,7 +116,9 @@ When focusing on the **Installed Packages** section, an `edit` command becomes a - **Go To File**: Opens the file where the reactor is defined. - **Open in Split View**: Opens the file in a split editor view (accessible by right-clicking the item). -> **Note**: The **Import Selected Reactor** option is available only if an LF program is open in the editor. +:::note +The **Import Selected Reactor** option is available only if an LF program is open in the editor. +::: #### Local Libraries From ff2b7c8bcbb1500a56d02bd8cfa1650133e4a648 Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Mon, 21 Oct 2024 20:02:19 +0200 Subject: [PATCH 07/20] Update docs/tools/code-extension.mdx Co-authored-by: Marten Lohstroh --- docs/tools/code-extension.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 4df98df29..4e47874f6 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -18,7 +18,9 @@ src/ src-gen/Foo ``` -Overall, we encourage you to open your project in VS Code using the following structure to fully leverage the features of the VS Code extension: +:::note +We recommend selecting the root of your Lingua Franca package as your workspace in VS Code. This will enable the package explorer. +::: ``` ├── root From 74266585a2d7844779192f334e76551c7605d1e5 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Mon, 21 Oct 2024 11:33:47 -0700 Subject: [PATCH 08/20] Update documentation; PNGs instead of SVGs --- docs/assets/images/vs_code/error_message.svg | 3 --- docs/assets/images/vs_code/lingo_packages.svg | 3 --- .../assets/images/vs_code/local_libraries.svg | 3 --- docs/tools/code-extension.mdx | 26 ++++++++++--------- 4 files changed, 14 insertions(+), 21 deletions(-) delete mode 100644 docs/assets/images/vs_code/error_message.svg delete mode 100644 docs/assets/images/vs_code/lingo_packages.svg delete mode 100644 docs/assets/images/vs_code/local_libraries.svg diff --git a/docs/assets/images/vs_code/error_message.svg b/docs/assets/images/vs_code/error_message.svg deleted file mode 100644 index 37c7ad6e7..000000000 --- a/docs/assets/images/vs_code/error_message.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/docs/assets/images/vs_code/lingo_packages.svg b/docs/assets/images/vs_code/lingo_packages.svg deleted file mode 100644 index 00a20ac23..000000000 --- a/docs/assets/images/vs_code/lingo_packages.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/docs/assets/images/vs_code/local_libraries.svg b/docs/assets/images/vs_code/local_libraries.svg deleted file mode 100644 index ae32ee825..000000000 --- a/docs/assets/images/vs_code/local_libraries.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 4e47874f6..4ab08689c 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -3,6 +3,11 @@ title: VS Code Extension description: Visual Studio Code Extension for Lingua Franca. --- +import Image from '@theme/IdealImage'; +import lingo_packages from '../assets/images/vs_code/lingo_packages.png'; +import local_libraries from '../assets/images/vs_code/local_libraries.png'; +import error_message from '../assets/images/vs_code/error_message.png'; + The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-directed editing capability, compilation, diagram synthesis and a package explorer for Lingua Franca programs. ## Usage @@ -35,6 +40,9 @@ We recommend selecting the root of your Lingua Franca package as your workspace │ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) └── └── Lingo.toml # Configuration file for Lingo Package Manager ``` +If the project structure deviates from the expected format, an error message will appear: + + ### Rendering diagrams @@ -49,7 +57,7 @@ To compile the `.lf` source, open the command palette (Ctrl + Sh You can also build and immediately afterwards run your code by opening the command palette (Ctrl + Shift + P) and then entering `Lingua Franca: Build and Run`. Running the code can also be done from the VS Code terminal by executing the generated file in `./bin`. -### Packages Explorer +### Package Explorer The **Lingua Franca Package Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Package Explorer** displays a **Tree View** with the following structure: @@ -99,7 +107,7 @@ In this structure: The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Project folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded libraries (e.g., the `edgeai` library in the example). The **code file** icon denotes an LF program within a library, and the **bracket** icon represents individual reactors inside the LF program. -![Installed Packages section](../assets/images/vs_code/lingo_packages.svg) + The hierarchy categorizes tree items into the following types: @@ -141,7 +149,7 @@ The **Local Libraries** section lists LF programs created by the developer, loca The image below illustrates the **Local Libraries** section. In this depiction, the **"project"** icon represents the LF project folder, while the **"code file"** icon represents the LF program, and the **"bracket"** icon denotes individual reactors within the LF program. -![Local Libraries section](../assets/images/vs_code/local_libraries.svg) + The hierarchy categorizes tree items into two types: @@ -159,7 +167,9 @@ Actions for **Local Libraries** are similar to those in the [**Installed Package - **Go To File**: Opens the file where the reactor is defined. - **Open in Split View**: Opens the file in a split editor view (accessible by right-clicking the item). -> **Note**: The **Import Selected Reactor** option is available only if an LF program is open in the editor. +:::note +The **Import Selected Reactor** option is available only if an LF program is open in the editor. +::: #### Source Files @@ -177,14 +187,6 @@ The **Source Files** section lists all LF programs in the `{project_name}/src/` Clicking on any of the files will open the corresponding LF program in the editor, allowing developers to quickly navigate to and edit the source code of their project. -#### Correctness of Project Structure - -If the project structure deviates from the expected format, an error message will appear: - -![Project structure error](../assets/images/vs_code/error_message.svg) - -To avoid errors, follow the [project structure guidelines](#creating-a-new-file). - ## Notes ### For Python Users From 203e8b3b45893541b29bc49d981fdd6bb131b687 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Mon, 21 Oct 2024 11:34:07 -0700 Subject: [PATCH 09/20] Update documentation; PNGs instead of SVGs --- docs/assets/images/vs_code/error_message.png | Bin 0 -> 35264 bytes docs/assets/images/vs_code/lingo_packages.png | Bin 0 -> 48549 bytes docs/assets/images/vs_code/local_libraries.png | Bin 0 -> 46796 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/images/vs_code/error_message.png create mode 100644 docs/assets/images/vs_code/lingo_packages.png create mode 100644 docs/assets/images/vs_code/local_libraries.png diff --git a/docs/assets/images/vs_code/error_message.png b/docs/assets/images/vs_code/error_message.png new file mode 100644 index 0000000000000000000000000000000000000000..4056ed124e7b19d02148974a74e9a8d2e37423ec GIT binary patch literal 35264 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 S{&f`t5O})!xvXQF0)jaB-wSlq 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

9kfzLHoe4#l*PZ5#bOWh_* zlr;vmisTPOB7qnJgjk4?0+317JOEoPLV>RPdE4 z#90SSKeRg@Y@EW?UZXI4(#F$TA#lgXmCP{Ygx8zSAhe?l{{VaSQr(GtSs+drH0uI) ztJU~lrgD1&|2VuqUD|R@9U{kof^w0lRjM0_bV#X`$fjgLSn@Uz*!`Q$2fy5GSGnsS zGYtHlj{gF4M5XYh4Cb>xGMxMLyyJ7I+xu}BeK?4P5HK8tk?4Oorlj5Jo-NuRroS}R z|4c<>K*NcOkf&OnDDEX>8KeL`={A$o%ROQ&)80OdBjj+o(VEr;yjzJbLaoSol=Xlv z&rG&*im8QKAW)bcPgz#f#&-R;T&<_hZM&*i4=a>lg!ht{sD-@3Cb?YKlnkC2GmLYCgSJYb1N5kUXRs6iI$Ul*~d#*kU+qftiRFbsS-(>lE>91 z#m0@R2LA{UeHCLRf`6!Wc`{!asY`M{ytI`&p#dwj5Dtegkp{JDZM6ZhgI^YyyOp1x zSzSEgs>rW*M{Zga>8(PsMqlYpSJN~wY0PW` zupzl%U83ZW#BWA{?C^i@q?t;0>E)7)w1UlT#p`O zeLR_w7(UAXrJJlG?g1o2+ws$cRMZqm$>k8^{j;F)noUR#&_8N#rp6*xcd;1tQA2F! zi*nOHNQEGAipmAye&ybvrb-!&_dsZA9B?d8| z3s=7EY0u+qzF6Hvj4#Mh-c5gqKtizyXpw6*G#~346vA9wob+NUcJt9Iqae|NVa5grKymAGQtsfsOqP z6wpUr4kjNf>^_vR8U0_6OwX6AdE={V78c7FhVt+@?M)vTfO(Kn;cH?pa<9`i^(O1{ z!RWKL^82CF|oRYo=61L{PWH?@gR&F z!X+3MwD%B_V3mku1Oufk_RPUk()@O9uRf&$-YGN~f1extfg{4NWMGGj)RMkC0D^_@1KCU$eEH8Q$c;*dGRh1mNIi^8RA%DYM|?)?MN?8i1&zYnwwP;IVv6v`itf9JSab z=j)kk%__r zKg$?SYhDOzIkA2x7MOh6!+A&dwMwj6V0NPHh2pzOe}LDU5@@0Zrx>jm%xOP z4_J3C`>xD?^-giiWBY&}FpVG78-9c6Sq$W`G_cmmrQKxD1MqCBRVn=c4-;ye5=pyy zqNbQmAKz=n|N2tk>7Bx*JZEYY$Yb9vff}fekk4V|@3)NqXj4lUpK%a0el;WevU%W4 zW@&{Ku-=fTQvmi3Y;dey2`G92``8O-1m0!)Xx&+zNCWxJCQ{iE!7X-wfds>WAPEE- zf+<3_Sy~o*IKVTIHyye9ui(OPhK!Uiq>ahpNFODrAHJ3~eH?$)p%2R>XtrGX8BGNM z{i7$uFv*D&+SWiz;E1H*Nz*0!!qH;A6`0940dZ=@XH@-hX#yE40V zoTZz`VVnrfPJ!bZ^+0q6-fF2LWw$0sSEt7}!xsb&n)v+gh!)KC^?pWht=+J#kE|Fu z;PG@$GXWRXyb}Sj_2_Gd$2G&zgT^Tv^1{}|j{iG7 zZ9AUHZwuH|Y)6^EDSkbdRu6q_V&ZgKjT-bK_2(=8A`3OIxru>CtC5(DeT)JG{4-?3 zYCLvpI?X@~+SJCCactU9%)E5-3<1B6hX%(futPM?(=-ErE5rYx>MWz;=z?{PGX!^c z2?Td{cPBt_cXxLP!7UKnEf74oySuvtclXnL_nvjvUGoc8(=$wW*WOk2zE4%7B7!mX z8?-vHL5zECwEM1JPhgkOjw42~8T_m@8#4p*7HArBw9A1HoP$w#PPcE5w}!kzG#XowyM!~ngz3ZmaDu5BhOa8Kjn&FaK)KQKN$afHsYQ7Zr&7$)X|P|fYp0T))wi=IQG%1!e`lrbk%|tEi zPWAe`%TB6qgFj%kx!biEw-W|`Dbepn{WgNG(+rjZ%SBw{bvx0zmM!p*)6Dlo$$S9c z4`pxMTGDln!cWAQse^`OR+S)7d2=sp%Ob1^&7h z57Ui^9Bm-vZB|iaVMFruF7wk=W8T}G<#~5K>GUaO&VA752s9jMGtN=VBb@&BM$aTp zu4z^iDMo(AuulyT=1SLNa2>q0$E~$Y*bT0R2Lbp>a9LCrMan_1wQ<$3R}ky^s+82>2D;5mGS+%lUy;}F`P!MiAe5#bNJ`#0pO zs|~q6AHZyjov!<+D^2!qv2lWt6=>a&mBF|m6Dq&st}(>2ph*6m}9sCxKE!ymQC_=dW zH$SvB2xkECMCN3%y2J%Vxv>2DaHo=eG68#}6UO!J1-fgRZx5PP66o9V3~$o4;X3!w zBNIByxjFG?12Kl?g7a%4W3VpGcfjH)`7YB#z-_7d16<8e8nGbnI0mXN)( zlOvt)uqW2q>#;JFYd2i}Yb%SKI$Xx8s<$L#rFVfdVw!!0#vT*wXTx`094IS4wf}3x zXCO&mGL{hiY1wISc!*4DM*`8bspV_7fJo^rWpLzVgJF;4QUFIEK_J>BLEPh=!$z4DR}@yQyQ!dFjgFL)=10#s@;x&@1Os^JYv_|EvaaVyR$lO z$@PD4jh?O%hu8k=N0_;zc}3Wy+U4)K0C%pJ>UHq$dr#zg$BjtgL z*?g4mSoEO@cdsmkqH4TZS|W}FFK#^$kfjQz%fIVxF(zx0={#4kr250MVjM}v9%1?s zAzPt`|Ck<7PfN16sw4LY*4eD}8?ay+|4Xlu=Y_Y!vlUMZ10)L7pX4?d`EsC7SL;_{ZrYT$qIaz$vuq>%H2)nx*9t+TcwLC`C#4=UbW~k)yDY`0=N^R6VTutPGUxv zH|iGSi)?m3C2RZnSP4BSO|KsevykO-I<1xPZalnz(OTF3w4iVLE{4+8)Fd}fz)h{( zEym_}WzyU`GW+^;S4jKyk5o#J+!fNWfdMPYPHI1=LdN2a0J>j?nF(P^T_WJl4NmKN z+Z|HvSN(_OJT5%0Uj=L{z4y&T9uh`beP0?wA6{hJ;lhw`$rO=RN9_~YY?QJ&UfRDO z223c2yPaC>DGE;Q(PCxt&WNUZS*Rg^O=dJ*Tc8Gi7qK2KGc@;m|M{l-#9K&{p-u_? z4s$!%1(#BBw$}Wq_PO;D9t!Lx#J(~rst}BwAq>OdzOK){oCgdKLen4KxWLfn+uPHR zW~OMyMP=D!1S+Jjk6oW4iC(%xe zb8{>Uo$8C(_Q)vAiFlI~DXf~w>$+>$4;t!tj1}}4L{r6)7lw)5k_Gb~lrx@JhUQL= zvhTv?3rzSd%b;k8bFKJ(?~l;t%9s~Wee=4z35aKcPjze%K3i)zJKmhWT`K583uZILn}j6^Nqi&Nk$D@UizO2aheJb#BF8 zwFnM_dWuqcK-6#eRy?4JrdX)k68u=R_GK{5#|jAWG9Lk64bqTE)Z5EQSHYTu??VY- z;Il8Ici~fED{zh9UVin|I4|U3-N|Gj$J~S_C%p9UM;8%IgJtE>)IdE&H`bT02GuIiGb#S{r-|Lp}`7sGw#e42?fL6(NKwNAAKOirrJ)489?#bY+c z$4eu{Gh~%8>lVn-kNdVe9q5r&^=sxc(fRvJ$jqTWO!}E^Wua13Y)AOKZgLhi-}b~; zMd;(dLF#c@&><{-IslyvS!X5sdA!Cr9<2A_CsFH0<|sPJ#M46dMG#(*Lg>YnB0SOP zE(gsB{fS!iHqccG3ivq)nUW9K?WC^2vZ^F)MEe2*H-X=EqCzn#|KD@-H2~#QLkm-& z)DuL_iYAB8n8lZ$~yexHwKQi!j=y09`(m@u?|>+LEK!=7k?fTb&T0G&~qAbVs9d!SaQC0YEZ|2YClIz{`&0FbZY4A(RCb z05VgbFKvWy>?k$Q@H^r*i&e@|aI9nzi=PCzB@Np;m*Oie+?q$Z4il~2RBxqiO&)T8 zDQ&_FYPUEyEGO&tM#AvYEGAbKAfB*nW@|zS_M<3*G-K2>_3B_bahRqe;S~)PP&A21 z7u)TkIPGLPdFUbkS8C^w>fEUg%{|bST6y#XeD)blJ(VUh<*99{H`+5OT@)VDW zrUcPOh2snyu7@6D@Cx&N!BfgadbR&yTQ9PAyV>Q7Yxi=uqD?BK)8a;mZ^nCR5m4Qo zBdq0pf2K>S0f>TeeFqj#0Xi3a{=x2$zLUYz4+uL5W15n7hkOdDI36l0Z-yqPe$mX6&Q?A-N@;8djbvq8{@O1k0+|n;|nE!+w-I_+`yU;I%kxJ6uq^y!PVr%*)D z;})2xgTeOHUd$33Bzo%GF?X?CaNN1hxc?jbE==8fq8lRfZPZboz|*Uo@1gIL@vGM@ zHGH@??dW)gcK26E2dT3@c%9SbI#i-WUb!u>D*`#pU>DdB9y4%6s62WSWPyps9_1AW zk(e>n>X_YVTo;R!^lU*Nk-cz^qQ)UKmDK{cQ$5+s?LLcJ#*WGTQ7Nd>3B!X6r%&Lh z2vFlc(Nj%|m?T?+_`F^sGF9ngn%7!f^BtpRAr-`axU++upI)LZ%ufmic|_d&uPRIjNYA z)qWp*_7oBXv&V~oAgni{%F^?F!rLt6s@?%%LEV@F<!=B;vZlDqko$OYos?Vj)k?-V4512#7($W1+|})M3iW zXt$Pw#~sLR#sxTLB4D<<_B(J|uwh8B8ElgL>V@GnTjl!8MQukQAPERPHZwp1A-abLXt9$z z684gEh!4Fvj)zPoXQOCOS9`L5*&H(wAGYuE6Yj?k%U%B6zaou@n+HP=5J0hFzccer zPel1LXcvH3edhBv<|~tpgCWCJkc&{BQvziS7@K=GDV6H{o;%*FnI+LhgjO-M$^O6~ z(1jPP8Kn9(xo_YtLIt#?@zB;Cfzv!)s`H9s$j0%|WUg1mX01*+>WNT)Mx#hFl;e4L zwkf25{oEJVOBbDX%!}vFa%TddDo!Y6wL{n}MnV@maOBfAFFK+yV3~f`V)C_JUWSFV z>b5Fd;~aaue!||*ghwz|b#Y|0?!=T3_+8A3@U#by?wA*>&HPqBc0WAEc5C!6$0`$W z*<*f4mu53)yH=}h1$yNiKg;9S(ViadtWO45)86%Kxe#hYQX!_2N7A&09aha1asT1j z{4F<#+WZ9*+~0ZDD|VZr+QFQ}N#jUFt94$c_4g(XMEJ_2l*M&<^Vl9(TzAu)O4~4c zvR|%#Kq44pXQBYTEHt)pZ?cRE)f=hqjJ7D@xHg=JkIn~wAi zHNfqNqtL+T8P$|H=edjLq_0F#d>e9sqYl6FDA#ZBf$rPYgX`t`Fd`J*6I(pTWTLrM zf(Ms?h5EegGTW{-$d`?bQg^HNKFU%tc$UsM#xr}z6vW#yzsI8emrg@-v}oGXRXAlYf^ z4)hU9mPYuim$O|XbuvY~!|nvDAwV#6X^#A)A7BQbQ5nNyw^$E?R;!o697+`Q7f^oj z@MC-H3n-K)(6QKlaJ)+G8Ow#@9{~#cvkb8NC!=ApaPJmLjP`mkJ1)ig{<=M3Ey4D` z?k!mcn03Ze*Ws}l2NQFYx`Mj3oB*2>5>;K;kdvN6$=@rqYOMG+ln6N42hD;n6QrA! z8;wLX(YT*}bunW}UZ{c;8-HL2JB|iJLc$RXiH<=O(F)E($9Xd98<^2Q1jqTB%X@MD z>~SkN$YnnCOM|mC>iZ!-K?LO-(7T`9^P?qpMKAHh{9lB|=AOk&Gv?lK+Ke3$4xX3d zY=_~FL^&S~x6GXXyHGhSm6q z?NJm^r%BJ1Eq0(fu8Xxk@p#Y6bted17lF)&0GGaYJtNC$z`e=lCTR$D+nJQ(Kbgm@ z_(U9*aFeZd<;fYG}>T=EPg`O2(67Z8AFgMf(4nBL#JW59{Tmc zL8c)a%1z8c8mewNl=CL3b}||cWgfc0AlOmW_5K7r2b4rKPdGASQkLZ2pAo2pu@^|F z@MyMPd@&p0*}zGYpA7m5of#2X>b3o_WttHiun6RxC?+WQLfllp5agjsP?E)`L%0c^ z(Yz!HhCQzr8aX#yvYthWD=>o-fj-C${^An zT9}^j5rPo(%j?N+2E;u{f(cJ73$WM61r57n=%MEZAK~|`$cZWf99Uj2xyF?Tk0JD_Ye~g} zzQlbDUS&S7z7rV(ra3fjHn6<0=|Y)s3!AW;^GT(ccspA4FJGxzNz$Q928lff9TRCb zPNWN1EWELEX6j%@@ggv43I4$x+g5;^f3#)KqQ1oqa1e)~l1`uOUiZiKEQKBzYeP-~ zLSe>L10IO!agOXYHa+gzvEsQ3_Dy)i1JZEDy5AF9tU!)XH!*(D|J_Q?QWCa($!3>s zwgki+1%|BM+_ zd7%cJRyEnAqA*<&50C0`uQjG4A0R4sLTK}T0=&T(GMo@qWA z!&m`lq=rhe4>;6lS~S<~W(U#!H~<uRc*EDX-7HIjW3Q^dDyVqG5gMluXTwyzn)x1W@}L&5gXAQCx%)V%;uSTwsI7MZj;-asUu-Iewj9njlCTOObq z1_a|`2O4C?Im$@|A80Yj&^Z$e5+T@$807k=mVFY1_YQhs*?jGkhZN}oQmiW(4JsA> zH#vzrQVY}z>;v0svG(+(U!yg4YdkSX93m*bk}(AANZ=R9VAI3Nw9)JMo>TpRc;V3S zdoImBJ|Ls?JIM@KA0cdVJ3uHL%~YzQD#yy~qzKo^j50gZ?h8wV?_LPBlS_O0&&|Rz@6I=3QCbJ- zz)Cpn&lveV0rz;6=&&@{z8YuSuZ?|GOGi~mKm;4WteC+i9c0ox(_jrdJ{c^Va{IJW z{AZFp?0eCuF|)(URX7f1xFL8LD$X;K5d%NY>Yt7`82}NOs8=ta-hgH@)9~AqnE!Ks zMGx**Fk^@~5aX{B;-IV=`wamE+E+ycOjq(vbNr(3^~sN;b>Hv!yzf?zP!O;W!T$WU zm{KvKArmF3<;fMu_)9oo;Ih9rQ)bjg{*foGBOJr<)B@U`VHO z;ATFZ+I#t|{3@jplR!q(_^qh`;C^p%3K-DhKNNb}MhzhZSU=WLE(G|Xj5WVTm25fc z=@z@QZ`P7ZTKsyYI%uzB4*y3S+34x}q=Mr(m-7uv9Vj02l)WTA@rVIku6j~28bq-{ zW|z|?-Ci0EOCHhER+r5ETz5IG(u5m8@vHkGx3ru8UAhLdDC^^NEO4q@HUGfZ_8f=w zdr_>g*~f^n#ee}2k5SS(+;VRxXcKg)W$*$LQK0JYUUS5Ussm}rVPQ^d|Ib=~`~|zs z`<~--Q(Lri>q-p_rA+oT0~cIpZgy&gMQ1=@(4SO(@08i-WIm9_Js5#X{9hCUkPiM` zN~5D3G$9Kyr@d_96Rn69$tcX}nYy7V&?=UmO@w4>rj=&>W|8COd&~ODZ3TV5*wI7> zAhI~LD0^G4T&Uav>GWEq4hk=Rtb1c6HiB7Cg_j~?AVEG>EiWdBc5LBnRsy7^pH90~ zIhRy0;)@~z^r&AyKJ~4K`#u`;0(?~*uPIB)xVczYV zcr*2*rG`OLaP%XckCeaJPWT^xyXVB2lIR}$JD>%T3_}o_p*ft)B_9K{2986jlyDx% z5k|rZgl~9U4gnWa;OwyADUc2dQSSgziO%wg*2uckyq19JAAn2%wN4WzX8;BBLfRD7 z8Y-#8sJFDg{eZ+bZ4(s&ytS5G)gjGvyZ1W+n%5UPNhw$`kf!C$_9?fSVXMa_xkLoJ3SqAa%{N>c1>+B1^H9#?b<9F>E ztqnPkHwj}~f!u~Y^wF42cn@rToX3lZGd|#PZk~J{Ng)xiuuF(4J$N|EbX%+W%_w=^ zc8YhQg{)hd@l5L*Yrp7i)cG#3+QMMhTa5R|u`e9b07kW*E; z<_aZKMq;0NM^ZFxWWA0qSiT^3zKND#F#kxa2nhKsa-o@kd)T~OCFyOY@u$(}2wBGLjvQxy!aQ1U zMbvFH0sjX!F`P&Q+-YY=cy??Jgc;|EV4%$auLp@T4S1b!#aIm(A^H{owkBLjD?rQx zfoOc65JXsv?ZVe%d_Mj?#5odbN`bS0!~`>G*~gA5hsi)RI$vq{@C;f^WIVQrfIhGy z(V>g29_UmPqux4##T}FM|EI654FWiaR4+vOcki6Zt zE7dY&BG{_aZ}YO8w4!Ms`}<`+jV$!zvNHW!`D?G`IK(|Ox#8?rIBH6NlFcpP5&MSI zFsgNjGBBzb2q=-@#u!r5QPQg{XQ)OUIW;s>lr8`X4a*Bi`MW{{K&`+{fh6?{G;)?K zi$cmle8mbG{Pd+N{Ofthr;Gxec!SMX(##qk^J&>D*htZuj@P2rl1}O9U zE0j>Yma`jth3wKWzOTAR6NcZc4B)m@9~tW3NA<3vkV{Njr!j+LHvER1(qKIcLOKUa z@df#fHO2tUc1MgrIAH|Yt{dov+r!tvazK;IhVxx$cROAzR^pyvHHQupUin1qQbaAD zT3N&jP{L3uWN5~aQhmz$P;=F5n@O4kM&tWqhfzMj&zD>ZM>M;L?9L0NA}+5n-%RC8 z9s+VQ2?7E4*`hE)e6I;|xjk@n!eHF^lcAeKeaF?r!#kuUdC`#4I?FYGtHlbj&k|gS zAxk-;tYH!qWe=CZ?mfz?arSmkaab?$-;N)kIFV6KE9|82*N|zC^5W?LmX|RBB;I#82+x> z=U5uOt4;15Uh_%`vbn<|2{FWwrf>y-cZ;dly(Iqcx4H-yyB?pX#87RA=m($YM9@#7 zdb=-|>pQ*N(?1@7!Dh35Yw2o3MxX%46j!sf9ian-DFakQ1h>iG?UeF=g>M%Jsk)J zylxH*e+Mj&u_D z-|P=f;V;hn&mPf$)hk7`*SBwhE6MGAoxY7bWgImGwD8`8EGT0@N>>UfBfei}=L5B8 z$B0G^IsbW~lAJ3HPaRjjQ|-IriU8V>idio7~FlJ@%w?Qs6$1uv7eLdTQFm6w9*s0-%Y42LFp*E=h3wnCyuR%**TqcUIdY6i z2TlDBs1c2mmwI`)q^wXajlF)s1FQ|saEQECfgve zszE@IpKiSWISGPAQ8Vrg0@5NCu2;Y3Q_f`d_psoP`$TBM^=vgQEuz20Mh_?kOZO>C zcPkrJ`|saidU>6rc2E=<=L=xxA>pJ%f?CV~$&%VC?K4RwE~^mxIung(WS zF!Eaf{QllfQ8k>ToFku$O;X6BdE6zGe~3NEQ7!hXjg|#F{{jtzO4$HTqeSy5%rYtt zm)J0XPLcKUN)ol$OQ!X&8LPZ+`yI#>oQU!?nqoPtjBm`GUXp;(#G(WMSEo8g{Ju($ z(mnMqx-}Rc^6P8e#z?V-M~lXOBEJ!v+#x@z;IHP7ZR2a$>zT&#zCC6ezys9^^HypT zPvKp(!K`|tU;DP);MT+NO#`Z}*x4d@aWz2F6;tvaW%pAO*e{&MFT3PMlm#*=u7v*U z7SLXVEN4=oI2fQFSDmSAUSsomylILr;;e%a0d9GGHY`>mey`nm&j~wjq4199#1Bj` za^-5x7j!{&v`E~~8ld2QHm%#ExkEsEQqyXyJ~+Z_;69wn47p%MDkW6ZSD!njyU|=<3B%#AfjuzBJPfAxZBom z0a?qcs4=)vZ$vzT5*|rM<#J}b8j<#bZw$_LU#8^YW~6*lwToVOUlmu7gTp{9aq(FC zdz?>z6&b(fGz9@;VOm^20v?+tmWLYX(l$tpY|Iy2|C2Ww6M+Gf@4l(tILIq%svqYX2>2 ze(85Rnw9Rd!l2gKFH^Lk=hXbK3*xDuSZAjemt+s7P^kDq>e)i)g>a_49ZD3HGV(S zg>UE4Yi%rO5Ec*f0V6d09R(<7o)wQ&^npn;4M(}^Jbst$abMKGFh2mr%As6J!3$Sr0F!I1Y48}ZQEY7IuLVTHe`LM*sn9l5CKm1xNz*{#ukpOIriec0^$bfV! z#Cx9wVbooa?h1%(57KNY9Jb4&5<244eVvK-JF&DC4ix=Ew_y{&dPgUDwL1i7EahGh z;m=;K6;q%!J-Jr9P!Qfn2U~O!&{~Um6M3NZN4Ld{0OAbCrbuSH7hLM7X|`~Bv_q&R zjek~j#?G1F0`^EmOoy_;wcO?P*!#b|#msKr+lfLboH=X_FuUWdNuQgmEU_L&$C_kR z6ltLtG+ynVn>BzqAGZDp88O6@h=&ia@Obv4VV=uk@q6A9@GT7Dfs%zKcj2dOXa1jW zVG@S0@J+#&8AxIgfg~1q&{h14+i{Ey#Y-V}sXL`Crtl{JdwJC2O_IlOmizmqO@cAhrK{0j`kdV87a@1@ndfj&~>lUlZn4iw2aNAFm5D_8i`W|L@N)N;z|T zH2(MR8Q9{u9F4xH7S+WcVceQ97+7%ZciV+bekoXo)951ttKZ*v&1qS3_SbqD|Lesly)`< zIFs4D8~hr%*ES!_<^b|D4wLrIDG4$C6~4;5jX_W|P}c!K{t{1DBQ&JlMS;E`xojXQ zrP}=t@N`K@$M1>#UxWcx+54$3vdpMYIutb2t{X#j@h*_<)TcUhTNagv;iCIx`@&4G^@zJl!1$-C58lT516Gzsm zsbI6riVFHa@{4*JZa^3zxG%G(`Nknx^H)*c8h}!LU6=`irtk+~!&2#-_EUzzjJyGI zS$w#Rcu&TG-ZzU%s?cc$(k6qk&}Q`7Y{h^H>jzGO#y_B`;zP(Qj#C4)7U^~$)YQ_2 zepyZz#9OEFd&dX{O4__{yf@3hLaM8l6k5ToW@O5a{4_eAx4qiwZ8z$RygX{V6(2{) zM4K&8g5~?JTCDT0e4oSo4o*&aKvD7XQ+KRbCtv^&9GaSn|2dH*JdrI}3~YKpNRujc)!!9L zRSGdGdI3a{a~r4W+z#N1L4y)$Yip}lJy?gwq8pTHiY{RAiOsFm%n<^=#JMEwbKQCl zEo=iwXJ5V;b0Pb|;)S8$h6-5%q0hA5kU+@48Z;8jH-1H29Eu)Uon}kvq7X5tSeH$Oa-iM=q819jx}P-Tm}>y;6v?(!-#)7 z9jG-PP|zA=hh&6Dsu4kpDGg(EPNa(7lZ4FcL|Z?A3&!Kwf-RAjI?je&K4dx&(`!HZ zi^g_zK2!YnKvskhCyZDFupJc`2c>>d`))q=YwypRot<6Cap2%FASQc3JXeC9zw6y@ zs;sQ6b35g+K@;7FF$&=$@oQvyX#{S~KDy^2ktAh;pJY{J}l@TCP#C zDC>k`BtiHTh6GtI_vhO^ayj{a(m0-=7!D6%+zU`%J_MeSW`N&l5Jw@6M#^#m#=QmW zdV9pK+ms{F>UH}I5Z74Uz=GsofH`7SdKR2#sWCDwlV^rKVb8Swzy;6<(JSH|Ble%o z*RHo3dY!dpyUGPdt~g~jo=?6lAn+6b1^AR_BpY^TM{dd(#J2(JJfHyVUG77h8OEfDh)t2Ab(l~d>@$g7daCDdcqKs6;L|_Wfv8NCpGcGI3cq@VOS5jmcx@^ z;9`)s=5aqI#xJsJOoqrpLW$o1Q~IMUVI!;!h)T@q(m0F96>s4&*?U}P+muneZm_E4 z%-`GF+cLWWytgu*v7yVmw?2oTWExn+ryFeFt@^}k2*tv3(JLXdERw&dFRpC-zQ%Ci z<70~=0mh0@)m-^RjBg(1`2BVTvPenR3}SsZ3j^Io2j!~31w`aMU`&>FHP|^YjKgSx zmDzioV_TeLyvQ(t{u>98Udj&X{+FPiFz4{=BupXLVZ=Cm@;broxyC)R8$wkiC@(lw z+s(Ow8BnY$9T1As{xse38&k z#|nWv4#-ist!G8@=|}D64|WE1#fMvZ%`WkmvgCxAgSdndq|Cqswlv3DZ2#{0xImV+bO8^f#9X*w;85Tg|9yeO!ku+fcaC3K--=VDVl!K6HaP# z^?W`T3I_3vs@Lu_lnq;viPH#pjl^MO#!UeYfc>N! zP)I)iTWhRs^4nooTia_Z)eFgm=v)Ls+h?QN3kTG%bL|d5c-w}Bp)o0mAY~16Szi|r zK?C_)>|GcS#gp@T7iUto55*9o598w^8E0bpGy!yS+4r{=-IR2u)>R<#Rhhf73)z2X zM2_f8HGJ*~M|MG`-9#m$2w+6EqZlMs3_%U+tWslriJKZCIXnF4rZ2+#;AElM`3#Ub zs0Yx>9b5U!?RbsiFQ!q*q!TErZ6u>y&)0pYg*y|+5)xjP`dY3LkgVE|*W* zRGJkONae$xJ)ny(J7^4a#C+Z}cKr?qFat3qln+v|oc5y(9rX01J`s{`FIot0FFa&f zkkiy%Pm#OZDXM!~F6?bx2CcNIJ%7EAv6gJP;1k|p+79>|MNDOenFBcxVF)Z(H4?~1 z3xKUQE(Q+gXkhC0xXawKlj)|hLaxO>#Hk_451Tk z*m6Q_z4M51=T5JkC15u=a72MOPAPlzTK#I;3gi7ic%jKdJHbqLL zVud83WGcT@3|huWQo{`m5D_9p0SAdi2RN6heu2V(08SME2ciz*0H;tFBh5ik0*OIE zMCOn~xVkF*ceDWn@S{AKG^R3$8aN&`Fo5hJLP$4L^}mBt0|Lk_(1ldQ|2vbA7)cI@ zhfL|~zS@5WQvp9NL&d3~{-5_n1&K+Oxmz%>0VFatGcnfYhBxX*k5<-}G6Yknna_Wa zUHmTXYGc)5Ki=q5;Dy*`@okR&nx7of-j&k#c7LU!$j8II+whz1E8j1(hwe)$)W$N8 z8}}8QnCH4*8+?tYp6(gPKD+MTO{B4=tM8gcuoV^Bq1{1jyAUh=#fCRoPn#&Q+A!<+r(2b|Dd_Lz8!3tB%)&g6!c>CF(_@O3W z*pNxck9V&1dhKqYtuEREhjqI{+(M1cTdQ3hr z2hUcag;6b(ZaByrIZfttm{4N8`p(}qX;l1@Q%YMD%_J)?D=<%!EeW!OImgSpRT`g0 zfKqAmVvj%T<%nB-dA!C+L?YvbQ)h|$Qow(UsHgY(bQ_u~qylWaa)D%{N_&Y``Sj}M z#)y07lCFxcG#a5Q14_+vmAMtpq9aoibfmI-n8fJJ>V@r`6U zrM*3S7dD+y-|sPA*l&9JZt)gosmkoMMba;CFSnGKR!XQGhX|vUW^t|MUThl8>4&Cn zFUIrfUner-PiboM*f=UlaOhMhmVh5FfNP6CmXKEigk}m<`^WSwZ4MuD91*|E;(!Kp zg84qDK=e#Yl8AZC9B6Jz=ZOY>2D;xwq>56!BE0xD(V7onR)$=kDcGiR<lGYT#>_w`uak+b9 zoPFN=v4Q9NU}J*;o2FnPliwz*iG&$;egc?_3xWgq4$@ftf?ne+`vxV@je#MH{O*-a zd+S4iN3kL#2*C3jG{5{~5}Hpj1iUH;$|y*)TiPEJwc>Z-`UKM}071=7NgK>X!6L7|&{KeQ6LLFIpzCR4S)Wrqbu2e2 zA)mn>0p|Hyj}>ZUMGWm0rl=qXT}@9YLhzWbNDiFaPGd<}Nd7GVmK-6)cNc7cstRNg z^x@2RR>iE3ggk?B5g{BLY&Bc9J)7Uj*`P9yQCq`E20J8UvzlMYC8BcV(pZkhdyr~V zqvc)JI9`!EF&9EK*+p=OT00>T$kC#Rn7XGpU6_VHmI0wuv^qE8hbcq)t_UW@yMn)U z57ooc!#-(2wlI7wbfr+!!Y#MZ2bZ2*LC_~lG4V`DQYhsm2Gj_-{x7LphTYfGev6t` zpdT1QA%wK8ohZT3(w(yN2-TKjn`^f~Z9D=48Epz{HXO$R$gfJe!SI2iHH;Wx{Qy{zd$ymx75XLh zpqYTKJF8mxQXabT{6UTe9qn8GJ+>CbW+=75rZPMP1B*dtFw0Sm26@7_KML2$&mcNR z)tZw>*yDu6qQb7XaSGS%_)f4rW`ggN1HU|fnym5PNj`z2qkuMr(;Y??l_?aap_0gAA#1n> zM_wsCb-bm%vlJGDAklo^H;x~e3*WunO+JZ5<)rFUOiXGe>LAmfxEJiZEtUA#D$IWe zt0~6kC{eW3(*L)WFPTJdt)V?Uqxk2_McMXCNhy779aLtMmGINu9xZ>1L+n*UshGF- zc=0Ozm&u9>1`JMMSWx-5jPcQjpP%kaq_cf}4wssElm6&p^6;5JKeoe{d_%>_>5Ih5 zjl}#iIlVW+UApII&^NjqLxD=sV(`Y5;44?pQ*S+WK3A?vJKoykb1Km0tsHi9SPJ<$ zKcrv#n$PGU5P_I`I2$QKquBXSMXg1{*6V$X-*@kNTlS!@nNn(Usl`5f%0}Q+(|O(4 zDeORPo`BosfvLg}5!v(;xU~ovoEnK)L^i!nU2459k@R)kOUTCd%Om{3n>#Lq>I$JD zRCIW_R2CDZ03m-fBKr8(TJP*lp@-N+3I@7G`ND8c(!Y?{hf|m3a{n-gOt+~nYl3-+ zp3y0!q%5b4_H2ecR0y;Ze}Q4BL>l)+4&mBoQ>f$Q3I7rM&zy?C!P&x5% zOBZbeo-9k&&!HrT;v;3EFl6l@<$MXl?dxQ(vBP9zM+j+%w{9`>lS>~kn$f4zZr?6$ z2g1&M`fOgVTH~p_k0t!~Qte^?Sh@vv!2rcxm)!7bOxw+II>FX#e6TgzuT}TFNDBxr zQ$%AI2$Vz%p>FwzPeYQ_!7&(zPs~QWN!}5!jX#I|=%KdzO^qry0)Tp-_zz7I1U*)S zrNOaZY`G6`+cOv`sFT<)ESR|Bjx~We!ZX|rMoh%4c{@=pF3N0i zi+|o3P;0eNMitO*IU`=~Tk;25Q^j5WkETR+`whVkGPUj*$*xitO9a99{#ms|K(a1Q z08cjXzghsd?f=3+Ak0oNO0!z>}%D?4Z?&aj~N3DM3EnCM$y+zz#)P$Z5>g z6n?R&CtZ`cs3#^vxI532xoDA~sOS24F4wrGuYRq_JmSA11N#g`lw%obT`f*Gape$#{1R$Vot&Fq__f5u+U_oZ->uyoraf(P8r`-dvU z{CZwW@9nK)VY^AQ2s>1Kc( z1=~`!m_UK-95?!wbyIqOEM0Q;tj?)_eT3DM%Rz=qWi)p#3Y*W|o@&}EO}iRFUsxvLbLJBG#($^hf`>@RMXy^+5ao)64*?{ zQjDYv{8Hk4org%ULf{4g%_G25TZpvV3_kQPmjYRfa#q5`woWd)q_sg zxh*8R$lHIHR%`Z7EvxL3og1+bLdmkV)%8s*oiu!@)l#)hrFk1%zyfckSgQ~*ix-C^sge=1+F}WK$DwsYi#Gi&M9Rm+Nc12Y~TBgR7B#svgVv zl$UWgJW3k;)Vd7kWfTW)RD<$qc|0V51(;U>rq&Qu>ygZwS~rp1(b@C3J(~#~Fj*SN zlvS-1r(v$N-`}oUS-D-!VZScdDzu467NYbP6#Cxj@n`fa%&uRviOJ%>pCCZz0Ic6i1PXT2@O4|(Js9NC{8${@Wa7` z_DLzcrGuA|@)p`}C*5{xE>$|0mGY!qFN0&(MG-gXrxXgx9>FfUq+hKsd??+b=P@6& z^(7k@*Xzj`Go6$?9JWP8Hm5_i3WxJXc2o|hBE{WPyn{bQC%;j0yh6+;>nzEY6p4L< zit${ua*;)q4NVy#hcFzIgoaUAEHKb-lXoN(>o=yr7>={sqOi-iY&2N6L-|Ddm0T;Y z@QzmVG}S1)BqoFa37GV4WKg_I1DLH#yftxGD<__nc;LbPqVj`)WfA!a>bLUQ3djh= zuZT2jJ?d0uQt8_w{{PyyhNo_g26qpaK~uY3^i;BV_|A{%XWy+HPg@72Friu@=p3H_ z5+7tnEM0Hh|GK_pYDimP-I!~LPR%Oak9@+qD)@=VjWvc7(|9`2*gQ3td626wD1sjI z+GlfrG@XsxJx+WsW|u_d(nZ*kNk{x%h|Q*YZzNflQ$C#BNSZXV)qRCkM(KDprwt{Y zu~{)28XB5NRnG&2+V(QHM-qdgH=9q0(Am?w>UONGkr1rAUrW*=%~6onQ*(Tcdho0z z94*nVXuw+%l@CKEmZ!gglfH3T<1Re4L}Bb*m*hgIBhs}$&k^ol-savx8;F{8N>%@+ z|MqSBeTmCETa7tm}M?obB)3=q0@%NIP%5NFX|`Swx*7#@FXD zzOFWdwhvX+HZR_`UkZ;-SL32^2_ivSNjozZXR?ozxBbrTz?m+S(Q_do!~JKL!NP?? zG%su5Bh;^Vx#Rm26{AzV+TtVLWSve1om&JheO%8{tFPFr-~Dbte1Yvi&7k=`kTS9b z`lkps5&`;Sjh>}vWtNPTRO;Rq;0m>1I+vdWiBiS1+u}&@5gu|iEgk6;9Xe%jSG5~9 zLYBH2V!m1GLrc|vgYpZwl+6W(6+W@6*V*XISW`%Wy=LB8PwXxq)cdJnZ%2VGW7rDJ zXh*aAhF&BB`0*J8RYS~Sh=>azz~30T&(AF`!8)Z%J&pFW2>yX)U4Ywzei=OP}RFw=_)7GIT{t$Z&YK(jL6cH}o#hr}L|xk02hfRV&;n z|BJX9GNPoIvLVH**XnccB3RAu3LKFn+OE)X?i0roFRQvw)I^}UaL-QEfoxe-%BIcl zAt7&1t9#f9F?Y=i1pg#gcDe9s~tj^|l2#~4vk(4Xil#Vo#l=hs;O-$rfDGksmSuJpNl+7}1 zkPQv}n&asEqX5gUY3n=oA-_|y1Rl4~TR{<_tE=)UQRMTjBAkvj*<$#99{|J?#6DlF zYmtsUC|VA&rPO(?^BRy1#h|(6O~!#f$Ota08KCqiiq%%xlKf6Osg(_*QcQheAbe@o zGzQ;K|ITU{Y+kpsb^qN7YC`|)fSi|6;uA-O$JIgJw~Z zd@`K5d@GHXr6+ASDJN(<5pCOD%$tq&etm##3YD&3y9CB;^FH0%L{0Ri8LoTKJ47U5 zeM@Lg&FJNa?+wS89K^RO-6J;_`!wWdjwzPSZ2?!5$6#kx`QY$@TrtYjeZcwwb5!`G zjr^6duZr!lR@#j$m{XCp5b&U(Eb}P>MC6Qr2evyouhv;3ua%}A0&Ohc1=*$5l%c>SpVK=@wUG2*!Io+r;#utlT1(NVwo(Z9}-z~(c7*t zW1_|GfE>ekN+a4n2@0a5$Y0!8d5BagL6c%fFBBeg(|pKwYQSTc0|~Q1)(#1$Az|JD zNAJ@ah)?-+NCxognBlI{E6dfVC((S?7W+#_VqIJ@?b%RujNmSM@}f@9_UUSZ?_pE} z%bRj>27RTz)!s>Wvi{U2MeYHEcEQBP%e~~c2)3T@4paT#WVkqh=1xh~ojygtb$v@! zaA-I>YH$Fxlw5iQnw$S)nD>pbYO|2AY4G9{1%(Mi-Iw+S>(M~lPmJDaZ<9u-p6S1> z4P6vLCsLi8n^Sigx)B;y-+p_AW{x7+z5J8YcU-{0&$X*RS))=M_WiH4DBw4cuc%k2 zy^2?g87v+|<+ojSwEzqpVvKuE)QfAw%_ZU8zPqq)30Yr|W}UAW)dwDmBHyxBK$gm6 zKYDc6%kdkt#5N(d}xXe0xTsD(`E%)A;m`Iyu&EPRBrA@M$JB}IIE5`2V zyFbR&>D2Z$w9m$eB8A2g-5x*lj~mO(v|#keNL|;ipk-*4qMNqT+y0F-zL`Sfzu~Jd zsGcVk9wcSx(NrLm5lpDo@z!D>Q0A5v8lr_AnkniO!d`O_T4m;?LcrnVc^6lwN>&6x z#(>lAbs_vsZL?VYrrM=-C5^!M@OSkCM$4`CGJZ|=8AdDGy4Qfw4E!z61y54!Qpe(1 z%l$1#3)|Y1gN}gRQ|^;VP=oJ-(O0y!fLG!I@tK*XE4F}6_Mvhljt-;Dmx7{337PoZ z=j1^S3$tcRW#8BompeoUVIf_8#)LEc!bm@c_p7dI43QKhxYVPrp_lClJlK~ zP%p4~2c>(nn$7AWqu#lHGWq0hpJb+X5dt}^9AR2O%uKaBPL%7ywsxu&zXd5faGJri zC-&AIV%{5XeEw^^#cewQ;;ckqBf)%A(5LBSBMqbU4(!klqEP-_ z!gU*d^*tQl*29I?ipCJo&W;X}@G-gUXf)VP9Z{(X(*nH%T{Q7MAD#R_$rz2S3UHFV zGm5lnY}FR;ota7Njv{;h-Z6$)gxJjD@aI6Wx#?%YstgwMJAREyCl|-}+UYGfK808n z!hM(e%N=yS7!$WefGPDP5>`Ewe09)26-gFwrdi9R4 zYfDOKh1kgEeqf0Y{X{gJs{M7S@OVCYnLnv-P;ivv&+O5Q%b>sRFP~i~+ zQEkC+bBr4vMjw2W5g(HCl2)9DaJ8{oT-AoY0PQ*ZPOl6LZu-X{_M@B^;U>C{@%_zb|Qs;!fi@M9^a3^r?4)}If>$4`X(_ty>C@N);L;5N0@6cQ}DR|iy>y2IleAN_rwdEm99cHAtrNajd%&oQM z6`yAYZ#(VjEB|}UWQUU3|?}!VlPIoz2&&0+|IBSL671r z*2oeqU^wu4IZC!G{sr`gavn4Fc>yl+P!3%*xOnNIAl)P;pIvs)t#PG85y z=>pyXqyDUOMydCUUY!?zCkzYhsT}{7gX~hRaT5Z!61^f!D5Lp7)AiZSxpiWh1X6P9 zxl|=TTT5purdy)=UWI<^fn8?5<{iz=-3IqpgBspHL}K*W!f^p^)k{e=Tvg(SwcFgL zgRk#Yejl9^uxg8I^#2|BEGr#}2k2{P4)mK|jvuv{4*c7!-h7VV(f4b$j)RUU&+oM9 zRBDsBv={UVQWI1ayq~mOS*4pOaG7zBYl{P)1P9?s>C|CwY#pDcR!ePCNP8^L`akyD$`D!)na^ zIfr{yM)krd>KmMN_urHnod<~w%1T6Jq>Stq_yHO}Y!)Pd=pY`y9fLzgsN23VKR+K? z)ZNo_yl_xYDwT|HrjM_VW?G~O$7#q;UKSLah(-V2%M z4pUkRkKElY^7RsnwHz0Mp}3d6&fWM`@slnCp=2a6W6|g0PGD!OBoSHK>ebs`m<&O8 z9NYP(w7L%q^!t8A{FT097X&z}msujgkll%IY);a-XU|k=^@d*E4G2EF3CT4gP!gfw zF)dDF0$|I__kYBNT}hvR@+BRa(I1xlDZ;9cdd!T>XJoMb69w1BfV0UCdBSGlg5!&F zc9yYYA;aIkT@rG&k9#8qXL2eJ+_>-6z8&_B7oA-$nQXx)zJKt#E-(R0TO8OD;QA?t zKceH_yIHRJJ;Lq2xBBjEo15d?XALeMutsI;k@Q2&44{`u7HP~!|F|L#6?0?uoO0Qn zD5MTX8&7pu+Yrpia8v;7=BMB5X;p_W+GU}~5=0^IAHnM4CV~@Yz z7*+U2@6>EyU)^0NdObg>l>5W-u-IgAx4(xomj2xuo;G=TPsOoQVTn>bof7JGuh=kb zr7c%ZW^7HTqgeyuV&A zsmQdR%O3U0;KcoyxAzr!<05rqR7vstpA={7NVJ6|U#i}dStU0Mm0C%-5yvT)5C&x9 z5A(%To`qW5+cg%tqm)Z5NgN#OO<|$#5WLXb55?Qi;m%YjO@UeD-&%)p`ipYkIIIxQ zBh4%kU+7VKypPXD{~I!a-RUnV6I*uUq9zD0oTh99$V+a*rZ8OZu6nBWL1iG zB-q}Nc7JilwBGa zyY|^=m)F55nyY$70gCp_H{#|?w;q-<1X612qM%COa;alW%{=f|w)`1~u52_hGJ#bkm5{3Bi9AG2iHrZb#UMX36m85K8TL_+>g%2%3V@H-yKOpumVuLmzu+ zR1tySuP{K8fC43w2~OiOPdfUopgF?bg9rT_m=bQrDHQ0gRD?nH$0&|5I8Myxs*qSJ zp;Y4=b%4CJ&LeS9sZN9Qwq$=r>URUJy)c%}Ce)nNgf(R;vQOy7wQ`{1!4rE^T z_nV?Hsk#+Wsv*$}cjlb$PVV#wkss|Z{D@8Gc`pU_cV^T+5`BquMXWkpHGH10HT|F& zA6M7=s@oAleBIQ1miA$-@jD3=-^Y=LgdP=OU}VCtE?z;`?FW>=PJ|JuEa4aTR5?-) zDzpjGDM8qAnOI>N;&r#hA|?3ua5Tt`FGcX=_A#>C_kpk00CqgDWRoioMRZp&iyz{y^DjaNIIbij(zda zQ^Kt?^5oe#>82ns0M*irR1Z{Ey)Sl39WY!(yxKyI>{=~LCIs4;_D|Gqj z?IhiTc)exRczN!ZvktlLu|wxw8zs6&Ns9F`BN+;0B!URcj>y9q5TvZK<=blK8OKDW zC>6?fi^8GRRFRKaGd29+Rywn2Pysk^*+LQ~H+WunOrrQVp6AI~cvM3Gj_r5_5+m{1yVk% zOe`st!=(9l1E+5TBPYFAv_WI$51AODM(vS3mZ;C!s}ENn2q=}@f0~cMKG@IiB=}F^>eTx6ptkG*kZxd<7SDpQ^CJSaei*#EHK1b1nDoR@nWhDoIdDnW zrt&&F{gxLL@@3et(MWl9KN**YwB}-Mo5TZB5v(@)@h4&uWmmg5>icZusC8;BsT5Zx zTM`{)=7)`yGJ2~#&Y78il}zWpEFO*~ewmP7^AP4UhPop?)?aI-PE<7Jm>!xj$6X4#D7RK#x_?6FYdJN--pa)hM{7(3?t z`D2+7^AM}vlxl>VSJlD$)aF)cJgZi@5TpZiR8>A`kaX*5KTMcY6$rB4 zI9;EZ^$*Rsr3PUsJ4}CD(5SN^8f}D8YV!dx-(Ewf3F#sx-Of~BqcXBkEAY+yZW~-4 z?cbk@%I6<|+@<;0UxA@p={mq9Vd!l+ltwlNM~z+UTX_a93iA~?I)$i2Q0Q`%W|?L( z{)zGLDoef{>HCrA+Y61)E$GeT>)N?xLQDXmzZmdRCc@5T=#?@$ndU4uv> z0tR69Gga~mq^4Ilfc%a^WVWrdW%Z{r*O85hUjf%;nVgc_ac9EHnE_ob+J&+Vs}&C} zo~zSeD9q>xB+YIgtaYr;%cA5daaifP|R*00X0mH09D?#n=@7L_=ya`3O3K40P z?D*T73e|AKLrYYL$eyVtGc}tKE2%jDTq@I3tRh!yUdMI0i^{bvIpjGg!J5GL*(u&E z=T`$SCHS>V+y+vsBx)D<6^YmXfG{~K4zU1Yi9u~QQUnZmdH(@H=Pkxe`iF|P26#5T zy5*s%PjC5yiRZ-UZwP{2#40gv0jIXzV2=p6VZaP-pffZ2{hF=(sRGn0$fj$uQXK(p(b^Hrr`yc*?u-3l4P zV#MU`GVN>QQPM5d{Co*ly4l}aESuv}Nu`=!UttL3+W@7_-Ms*9k<2yFha$(rfBfp> zOd5!Yk#d@c0f65^AUz!48qJRmF)H9Xm!*1#2p6A{;}08F%3an1tuO*cCk+&pL{|um zs8!xUYz7OCMa|v>l`-9XOl!A8p_o{PP{0ILyLR}x{b$JRS{7{ix8B6O+4n=DHdv`5Ah#E*_d=-4I*0V?Z{5I5a@sNE6C7a z8@8OiV@uq-%RC{$&tsJ_YeQ5ejr;)vLwX@E1=R?_hBFw|9)(=?YiGPgEfqtB<%WbM zA$-N=?wsNz#boa^Ml?9`*#gv{{+XME4>k>M5au_7W(nj_4bwhV@7oCc1%W1i zN7gecqtC!=$iYIu4;8O>I5$OqOcl@6O1-?H+IhSB-5dr^2CuDPsPK(F*)vNJ9^jlV zoe0P6Yzny6i7^;gi>-&KSv(of5NaOuQ3V&2ccxZcpd$s~@8J$5BGIkp*cfQypJ7;f3G*h4zfqhARq0(Be6|EExG( zXeuhn9F8vRK!1b3C7-VOKi6ZACu(nw@sVc~!z%jNeLki{i?c7vp z8Cv?p^uBU=dLE;#RA!Ud6c+jmVyyaF?CZqUn_Z0M%R5w?K8oBN%|;Hf&6-Vl1X}VH zhTT^_n%-paHt+VhYEG}cL_ou5rgifBUVwXlPjwyTMB}~=N&_s8nS@%lpv)5@MFtli zlf&tYZ}l5Ex34;H>NMb&OClw1%ldllD$2@y&2#J9FP>-%$ukc%O{vHRfQ>w078V1! z*!sZ%JF`uyBoHPF2??d?HHK;7y8@BQbz>@K=$j_H)Bc4NYD?2mkQbw;R)giO?1Wi2 zTKbO(Z;mV_7$C#d1Ng#SxVB>j;SfMQbb?cSR)<%8Xy`sV^Gt{d7~3Q@sA!g4^v%qf z8q$(biOl0w(SBu14fNWXVA?ly58YA+LPkd0S)K%kFuJA8Ooj1av`xA)4j(VQAyylj z{tt3eP@HGAa+=@XGG*sVC(y`Z&VuzK)DCWu3kUFa|3JZ$70>mc)ccrI^Az4_!KoQ% zitBbF$8Gr29vg6Dm8uCx1)|9Be;l|m6p>DpX>kyU>h`!C@|3In>*`Yd#S6UU!q6+E zBMC-<#txa;0ZcVX<(%A=D7BVJ#j1>osehI>0QDmdrrX?dgpOJa{H-!{&*R#i5o!g*;gxuTH;Pm%;9%SW9QmPV#vR zhrk`gV#K~kuc1_-!M=gj!J-fyuymqqaR%y-i=9S=Yp^JC*jjsOG9%gK=60r%S*G?S zf)uNw1q2V}%~e?p8|1r`Mn650+u$Z(={}CF&`Ef3fu4rP1aa5IUeL}GW6^#a8ojkK zC|g^!DLgfQRCe0Iq8zR)$y(BXrsV8AkUo;tzjRE*Ef|)A%_E4e-l7Vr&K@bW1okjc z8zzU<&O9;LXM6=#9V1rT7D&`x#OF|1_+vXs_-oz|^Kvp2TcloIi|Xk-7Y!N~q>WbN z=Ev1Q#@+9jV^)6}Hb{PfkSS}cU36pk)FqSo%gK)ra{|#onhTwIcxBvn9D+WMvHUF( zD~RnvQwct{-JUobJe%4V=(=I&+qquH-{0X3ZSlI2`Wr!KWg&A%N{bdKE*6xK)8@K8 zW`@E+=m~?$>FG8R*68W(juwBhJs#?F3jpfc9|i1gb2KvOp9r}nC^vpT(vu5l;&7JZ zu3#{BK}E1urI4+}3B~m4${(DCK`e;`P^uc+dBsJk{f{IsnggQ!_iGS?x=ih>2d!X%mhXZXRyKg*8VW&7aa&k{0> zgs4h=U?G=O*t;t+pj>1+a2D%+fRQ3#4>of3Z&FR{!ZD~^4p>;wPi6s!;Zdn3i$ z7$mXnzxMA&{J)hV__M^4_D^T%(^;@g0b53C`KYM&_zxt84Tb?H-uPbo>Xb}0xnhD^ zW!^`X3&5!G@V-RxzTNvFtfpc%Df;hMA$V}m8buY^2jg3{^&vTdo#Z^pjuet+M^<9J z0zEcIF^A}rA0-l4v4&qh&nYqI@kXS~7K6K#8X#VP=J3v6ZJ&@4MgFFzEK_M14Qzq^4|F$c82one)h4PeM$;-D{Fcb z4ULDSU)VNiIVSeE9}>or);nW6J`La~jLp8OGL~ir){VeHH=8o5fbI;q?}#P537g@d zdj)JxCd)>F4`qq#zOLhf+?9a+GR&~TBHL+Q{5H~wevLU>rkJlmsqC0CU{-GdQ?87O zniNEI!nQt^5`H2^L69Mq@?o*5OD7WTdtou)N=s0}LBgC7z8WF#hXIx=O3C^5xSqxz zag`LVMsy~|k2NRG?i;WkF1MUrQ52zX_Nqr0L@c(BOFlai7kGf`FVI;eRY&Q}1%{Fi zrdb*~GLm+wEw`MJk7rw|0TKE@L5=eM<64h0B)9hED2&3x8-h;6OfAQV^y?pWM!b^-vMoUx5+`Ad+YSXX4(@sUyhoFxerB@} zzApoBP)Dm;r;!EnsgcjteCLwFOHOKI{&8M*_=J(O9sxpZh5!?L{R^HCTLjL1cdqme zOK?WjJ{Sj9MLO1GO6$15=U?8Gq6Dm>D&sE8)lL-F(d&rwaL>rfX1Wif4B4^HHhY4{ z<_cA%`t$23Uvyc+-xQA@CJFz5CnKtV)lQPapIzeOd@!%W^I4UgT6M%B#1gw!@F<`s zYEtbeMhkeH&)mjTl##DveQ(?vHR*+eZ6MnTe4=I;AxkwtkPt#4W7=S_!(Eb3GcDL0FvwAst(X0yTXfmSFz1dhF?uoBW9GR8VB?>A+_` zLkVJSvkmaH;2iw)I4|A1I6Erh9RL}%Rh z)8Cp|6Y&W)Ra~Bq5bVGwQQ9y4%s1eqRzXIH6fcN|B6)87EAlyzN=MN0=v`x|4L$)E zKKkI*W5cC^em%GZ?>4|C&>=Mn;Zs(OBhq*u3C*cUMvwYEmQ&*6#B!ZpYSN}_hp$19-iJ`6I5>+OVeQ}tJPY!;`-_; zwJu(Y1TjwD;;;e9*8`GW!@J83mW2iHl(+5}?E}fEYKsJ9+wBP=XY2E}=5qO=*K^uH zDKOSl$6l0kUrY9%9?8XiX zeygvnmsA|RAZkk3;(e5H@}um;gfCPwgE%FZ?=mZmE@l1iUl}m*trjHfmw)&%%Xt03 zFMpH`%&R1YT<_!rp@=K<^-je=;G2+vkQ+d^&{`FQ-n$gdt z`A1u084Hej<}P`hY$e4xi9^GdMCQ01Z|^nE{<&)EE`<-W3=AZ(Z$5jp0D~ZPAkQrU zbRFR8q@mm77H(;o>e1v=Kaf`Q0?~)ll7hl+w$cb*zr~AgKoiQ6PY3wN55?ta@l{@;)e6}eYeSyf9V{FX zpLv`!;mDD}As4BX<(vzm$y5e_r_#KU4aoQX()t29D3(VAi`4#jRoa&-1}3=}ftQsVhw2jX!HrGiK!GrC~v1{81tFPdd><#Ws|JtbVqD&^b@a z6_}rxyYq)>H?)An$4{hWHC2L3*6uIDyuqWCoJMxDaVPpHTcn&#rKhLYpTb50h~Og> zMo6p`b^oBjFuymD+B!8kmGRbPCgc9pPoK1cmQ%Ux==+BaPRDD6X*#4NGXxE)gPeo9 z5=2|hd5;<2{HJlbqI!oHztkL)ie6iI`#K;yy$K35w@ zgx?#tk;TQu2XaTE#^>7mG{umxDw7G`e>M4to8}!pf-UMXv4ZzQn!lE<*1xavFRB~~ z(qB{s7cAf%QT>r6+L(p6Dt}&-w?6+8g?}=t)of)y>;A&xdeI*(sKkkLt?RD~!hHgN z?R_t5r`nrT?_bBaVpIgcBft`;CEPs6kaxaoWGJvmryIJ z?-A#q1^rVV*~v-=k`tEJ20mOoATv>JkqS7fMGk3xlQmKwru)b6I^ z>^hkK9X1^{xd~`SP-dR|2HJdV0OLW7gH?Nud_CIs6 z8av8Zn)jwQ;1&#E9L-aU@%X|>Fsu{O+;W+erT-JibEFbz!`-{~(=&Jyl9#EBCvD3Y zy@5eYrbUFt8S%^aDlw!pU(j*X0N6Cd|CWIC1=8J*C7*m?Frx;7&~$xB zEu*Q8emLv1t3BEtk6kBu?e7e1S;oF7#4mZBUpAFqkqd$hzuMo6i&;QaD~^Okp46EJ zf?pzG#=*$6?gLDLRh`9;;x0jIN`g5imKd1FluQnL7jI1Jv%u7kt4aLPL4fJg%I@wo z!5w^T1Mn9~qK|IgYxKNi|7zIkFDxv){`jZLMD?rgcSeh$x58SYf>eD-nay>j{|PC@ zsNgiABW)O_?jT(GIOlY|PZB8T$K4%sf4u}m+n^{>+i&NI+&}K#gzmc%sjC71NK+wU za|Ik{0L9U6koG%o1&M0_JBLDmmqE^WDOnOo5s8zwc`QX@ zRCzGvRlUj8)l_Jn)VV?mbZ;g>vsi`dcncU;b0CB^fNq2Ch7fG^3&DNG*4TZKXa>}P z5<`qYOha}9%!*d>2?Z;;%rZ(m&fl-^?y_t^Xq1u|VeM{V1bbs3EfJV<_e@_T&)xb12StYc7$WYJw;U09q6K+K z<{(@-ap*fRdYQ<9!s~N(76GjR-7TaVHhwrmKvIyMf`Z~AtD*|CE<5zAkes&)@|`KN zHU^X?IRRn_l_nBWC=Al7kqHQl3=RSjnZ4w#Se`eS z)J_rJfB&p>$QH26ReqSOQ*0L)q4a+qeIy4gC`}6-z!3k`V`=QKCk4u~z`F;nvafJC z4Hfk>Ba{Pz^2n;+Ck>FnOw>_XU zwD{_l`hrAJ$^U z_!mij+kb*^tUiE|W0UYB=k^P7VYjx+0{&2{F?(-|D<>2bq2&iZ9_Warkfx=-mM_S> zXy;6)GB*HW-v<0tk+m4wQsFqsFUAq7Tn4NwbiXs3{36?m&!06?GyL)jzy7o#w-GbQ z0OG3*440DN={+y@l2r+KVbtFR61spZw|#wTQS18%n--l{rv3CV1R-lbgUTX&7&Ylx z@6vA_;Uo89`QP>|%x^M?znz5CZRmf>&6hMeTqs|!4~pxa%3UiD@LllTo~vLt08MSB z`BMvfx}f@xo9bhQKy8aojDn%6?bKoCT629#cte^RQ1o8~l>)UgCFiv6TcB&Xj~ttD6k%_?}^|=U8(h$=f5EC@7MTwi7b(@AaD@FrUp_89Ceofh}oYp&Jf0wBvF;4BFYHmj4+|@gAEnW|I?hExk zbyyIE07ATP@}Dcd>cfwfb8a^HKKdk3T?5VsZJ7h0qB{c}ALy{EG&R7ff(J(>^)$HW ziGh7j9$4dLjt6FHe>5UzAQ8q|p}Q6v;FUIJzWj(bJ8muN?Y1FrCi}AJPxvZs;S3cz z4vW!S!I!pZBK%(A5zZBC{R$IY>@RjB=m<#FLC0S7S(M=nvXvPKy6^D|k zrBRtx^MWk(0qrskf9;$7?3uLwtWz>`vJU$h4MPCwlzUE0OboRk_@>g!tH2uNq3=jD ze-G_JGidhuK^rLUjv3BAQtv0lxHCH3d!}&3*t06_Dp4wzSMR!?e(+Xz?tCd;6O#P)CkjRYfe1nr_q}V??~uO zDnM$$m=4&@O;g10!uz316(|8SgbCY_7o!`$Kh@KO(G%rRs#!)86022Hl_Q|&yyfd{ z0UmAFr^33`rX|Iz7=$nUYG}q$5h1Ywjs`zIJSKYgDrpo#u9C4Ui36rS!1?S!w)_js zo80Ph=`DkJ#T!C8NkS)g!Tydm;I6T8ICuEam-bs~eiy9T_Dszu9*Ur6)lk$6u)31k z^8wt&YAkZv0w|}hU$fV>T9^|ML};|!*-3n>?g$ctr~z!30yit0mLZHxD&hrv($TvS z^=>po<>vvf+v;3)HBZ`IqbMse+GRtv1P%#C8{R}JQZ*NT22(lkHy0(x7Iao^_O9x`WxcImQh*W{mB(T$HFFG%7F&5 zxhhk};BnNGO>goQb+n|?d|}#=^Sos*&^}&M`NBlDwY6luwSRA6o{5`@EIbYJi)zrf z2va7VE!=9JJ5k$_GiC8>Fk_t_GZTu-MFK$k>StwCOPaQUK<)w}$jaOu`)Tj`#j6V{kdc2DwayifSM z%u4TN-Q>a`VfE`#yb>ple=3b$=LPH3w&X)t$cc>^5C2|>_d?bY;W;Hda0N#IOp^SQ zO?U+eG`3dv!5CZsq6Sd51MkFl+#pC*bU}XaC@+E3?bg#WG<6?9Sf+2%f#MhCnuZ=7 z<9%nYk@xKdjfI7UYEs}H!@44sU@b6?6Q>w3HiCsPed|f}x6c+snz`K%?qr;eT6+g- z@$!XXat!>j3xtb2D^DM|;W;XTi7KTMiGaoLkLWjyTy|&EV#73vWi1)Xu?V^iTOHM) z8$+-aEf(%n))N*IacyS8LJDkLQE5;}ry<+ltx;JW`<1M9`%g+Hu1yKCLJ?$bQ~QUJ zJo)K}fARSL7D4SvIni|dsiVAaH2wi6cVoyw+maG&L@S?UwDp_7P!1L|RB%Q+(9lZ7 zofrQGs~pHXP>RYb{Qv!LrP@GtyG`4Nqw$nI`jmB<_|GWpk)9>s%*!#Nn%pB~Q zXP$Mhbt7C+UIH0`009gP3|UI@yD}IUxH<4qgM$ISn_(FL5?Dvv)k(Iy*ZtH#mlVy_3V^5Q+HjWb82Y>wbDRFAtt?tvPs&GM&8i zY^I-BWM*XKChRxzuoFD=;?SE^S_vlx%$3HW%*bO{H+Onft) zNW!9$#!60sK{{5r*&9yWcfDAfaJ@Z{!eaWtl_B6mAeYS(V)i@Z>u#ZVbdk|;#Qab= z<^i5Z3=wyrcq|E(4m|rihvnk0xYPv8rHc8LdgB9-V)3>Zl4vZcUP?A=PaN zB5s*pcgJFxl4t}PImGZU^hDe39>%{%)7cW~Y(G;FdVSwBI$STr4F^MuL52fk&tvfv zP8q)zJKadjW$%yYEUtIR@5gC!XMdqnP{lmkEmf#BSu9+M&ngJM$G$w0l8qWR$q{+o-UTiG8)p|@c=xtsZ^IA0_cofnEs zSeG4J#O-9J5`p!VR=dgk)_<$hE!B3T&2VTC#oG09gInFOpa0q?GX{^PAQ@w?NY2RR zoDo+3H-$)&q&R=2YB|GeGM!q&1+IQofmkGtv<{Jgw>x~LPAf{a-aE8d6kfm=v54=C z+D&oS^Tjd?PdEFf+n9dpN8ob3?l%LN&jcPxj5;abtXB+(yo^T6OZb)iOX;I{pevm7 zMWDax_jD<5*X<7C{|oh?&6J3Yr;tF|-)JzE`6`#e-sFDsg$2LsT|_x6L*h;LE3IrB z$ocLVy7kn5Lcr%`vAV54oKivYyR8iQv4VYA|Jc<>duBuJG$9Sqd6(~N%0~1V8DeYT z_R_4db7MH!#K7|%B{h%e?o*hJq|`71Hmz_VR6v7U<@Y5O(bLwqOkOXXZjU?hjvCC7 z*!@;hjEq6UoRq0_wz=P#DV;Xc>*aEp6rKw`<^-<4^r3vo%Y1&WH=WFD4WIp~&RnW* zY!c>PuGZ0rAQbF5*lcq!E<|db8dRTT)M)_)HkkgF_VxW*&f}-Wpwpl^Fc*-)f9Euj z!4XMRDwjF(i!>>F>@E5JI{)yM!{_DxV7scE68FyiVXv4d@1Ohgd;@9Hlqhcvy9aX) ze`C@lYHF$eKDmRiFl(%G;d?R4F~d@omMD(|+>XMxi4;b9)3LZ59ELOndUb|W_tgf| zL{7>cHm`?sa>JabyUjm?m>Q%R9-2G@S4w*m$@Is6bC;FFF@{acguB}_*e#?T_J;B` zYW1Yf>aCV-$BBJxgFQq7O-b-Ng;efOmt=TcPTBeQVLeBpPVSd9^yj9tJ81=4>sxI% zZ@=?b-@>UES34pM2az?CROsCu{Z{K_YDL6lvd5<>Lm!}$N-$Zu`FS_jGy-rI->*8z)bSazud1X)EaYqu3P1Df*rnLdnF2VA-g#H>*(77Y89$1 zbRg>$MGwSp=8C!3C8~q);=yPuH$HdQA=4PPSt@sM0la7N3@*j|1>&5na~ZCpQY7I8 z92e*u9r03WRa%WbYQ)r>dtPE#x$Lp_Z|Uq)8^qDr^eNr}21nogKD?W3*1yd$nKeqM zFi63o5XEV2==;4#gPI~0Xl1|F>a@ntsaMfDTy3;dtarGaVZ2ZRWo1X9)>^el(l9)h z>8wy97G7Tf*k8qM4*T;;IJ-PM{HFa(z5U(GH5L+UoKcOmpe5x@#DsQD4zVo@9(x3$I*OY2~)nB1=WRcA0kxd)%A-uVOreh@7%P^L_J z&6iib#yWjOvDTb;CCTpeloL$L6;I^8bG6Tgib_lMy}_QxlHi+&JHn{SZ{}Qq)B#}E&>cg_ z&e^Osh)t1u+#cMT4Vf=IT&$ZWmCK|~vnH(7>VKk@H>uqH%Ht~j@q*P>2a8G)EL-e!F!lVfbjC@Z;2~*h`OncoRdNxEseu=v9qEZI0tsqF?9dlW4;r zR!cQkv&H(@mLrh>(M-s9r2QYeN_(S4c;kC>{~&*!|LOdy0M4x6K7ZN%h&+|aiF&cw zIb-Yiw;5S7p~IS~aDc6CHORmjtGkzoyJ51=V>*kQR;$5eabr7IoF&g5KBxh-8C8A+ z00qp!!H2k7o7Mt#lD{C`A{Lt?+1AGMR=CoycO(f>z@>yKMKzT9zekGUg3Rywq#B!Vnb{5>j zArvB$!l0%FV|A8NQb-dn8gDF7nmNjJ4JPkfZV-xuU&LB=ABj72a(hTWpALaBGBXoP zJ~8gWXTmGWU^($j%@m;NgOItWN0P=~A(^HP%q8Xm4mVDkKR%?R@E@{~YX&{X~E0y0U zwPP|0PeoFGw7NzN6B`_j8mL44Gp^6EWO6Kn(YX};lH%=-hh;8j>TfPjrBgUYV%!~f zI<2N7b{~rhhO6T<=>%`hR04}dtQ&t&%@$8 zf5ASSp3e_h?g0&uB7|B0Prf5je*{{M8U|*vZIi4&a$)%qahr2;5@V;!W4iQfieh7z zTtuGV3u9e774t=!td^O|p$+J&z~ll)$?<~c>@ zVDl?+t9i94nb)J5e~M}Xm)1mdYp#wT`|6@&`q?@*?9_5LRE7_#NnMI&>3zS~!Of*3 zX_XO{wpDdpNOY#W{mTa8^S;)*`QGe_#U$Y6Nr#~eT*HUiG_~uQ6B3UHO}4^Ib0X$x zRjT`t3#U;-7@}*Yf#`$!4X6~k44Nfkh?0Gs?v5A_7Q4M3%S|WM3#?^@0~FzPqLz)S zaNaHN2YFr3DdU)$p3_qCIBoe7iT@SW_I`|1pjJ-2#_4Q22PZsiTJoGPQAy?8Cs8W! zNM|qyS*sCM$vIO!6$G11r3ts};0`GH@@#n;5*2^M&7nXg%(HH=e_otN4(tKI~3FMWKSS^;x-=zyc zK9CvR&Kn^*Q5g<|=6``am1!b2?k#8) zfXQ`s@rjw%sMHP-GIKnCa(LMt&85_y`yy7RIrl|8VXo_kSh!9%3N}8GVX;hdfxe$k zX&^1qc2wb;i~H3EGJZar{I$FXNq@yeWN0Cakn3v0p-5jNYaXX^U}k*w+i>{mrZ6Pz zYz4ErN;gll#cBjLYr@az(e;O$;S44l9_0wAbKBKhY}Eu0GI7unWlx|Dd_d8O`*7}X zi;$isd(w`y!CVOJB3r=)-oN7dPnIkH1R5C}MCch{JDf;?)#HYuCzb8~AcEDIqf_a2 zsR3V(uDiQe|LNpr-!)=!aJ`G+CJmN-o~6|Y1p~imz5dO{e4wqK-F-($d&n6ZGpzs< zN**sSm(`-c`(P@IC8*YR*|`Rva=~Ai1CUDSfyQhnPtj%Jcn=%G6Fd0;Tq8^G8fQDZQC&$EYSBM@pc? z@3&w0=#Z{PqcJx2p({CqEc1{lMP}CL!|>rCvU?hZdZ9Ws!f40STiMy=ZC}DN$<1!W zqJ%j3Yx9NpVm*h>=AkqgC^#!GBi{g%$rQDW2qgS@LZ$kQR`2KAk$UD!sB*8rrx3pp zoUm~9y);pw(+6U=wz|Dc2e4xW^UhF7Hd6cF>C`IbxBV27g?*ZO)B40dG_R0}*r+M$ z#Bt7QjE3qC-2P7M^0-|xG}F3U;KmTwixNpOAS1sq(x*eb!q7*<=dz{J=T z!}V7GF2J!&8_X)^9KHMF6HCXVFEI(#mvgeMqsy!wl}f8L02j2!q8JkU1&K1C&8mj*?=iQ(34|P+deTmi82p$T)+&Dn?A<(gmZ*w9 zlMyicMceAVJ>9^a6JAFvR;n|G603r)ZPQAp5@}E|DXHUJvYzk$Qq;MX*_P08vbU1Y zJAeQ60^jXztrd%&fxG|P)MK$=Da4YBUao7squ9Ke^;nm+;8dzbJ~L6xKh7CF_x$&E}n6$HezyjU(XCm-Fl0!K}-)I$Ll8SD+UTr>eJZH+JJ;$VWkPfFkmory5 z`J<^ow_=P9y{Uk|P$IQG_%Hr3(J$dv$l zWN^arqL>Lij0K~Qw|B(8K zQH4XeSSV$FHF;CLB&fnXxCdH3%xJ|29kZ8?=|7-VM`1l{y4+e_Foz4~Zazk%y%NkU z23B^{v)a7+SaDv678{c?GA5o+AjDK34c`i@K%4$mTg`!t*|3qOg;vpzTA}|`Yu(;S z`=24mWDG4|>Raxh02xBFr51&{&A$73y)N0y@m!(#PMe-3aoyI;P*kQTmO#>V)5#PmH-w0hFt`n3U_49YeaS^wmj!z5;+dFzI}b)UZyUq* z#?#Q@NZj1lYpHZb!xaB{^d8p>Z8HY?-+ll5(n8JyD=U2C?pzrOq{Tm%;}aA<>SU6N zEu&nvYW2EP1UP$!W*_CUxX?u%80ixm?k2v{F3d1fL0T$H=@VE?rZUqw+xEp0{lzYO z`UUn*Z~$O?0_c1uhd&IMW=0tfW!gyJF4@`$YX1c#kP~v+Vw4U#?u7UWpGpLc@61Ja zj+k!r+Apju^GnGhRH`7ZtfHwP4WCsQ+7#+-IU@%3Q-E z?W4#iDRlPrLZ9=n;@DdArJfRinkAbHah`ABPKpDqxgu z4*DcMf6%@31q6xgT^+x$`T@0YxQ{{e7&4^4w@XV(lcKChB;;1L;5$72I>-JSntrsK zaTi`U*1a@ZOqyHMo=?|Ebm?++_Dk{s_`A zFfD(z4Z+&$^8BY9SBB>c1@m&b=_RtO(rQag5$SUFr?GJp0b}Mo4@=r+vm+Ymzot$h zuZPXOpMPk(m-{hW=2syB(O~J^LaD;gLhdm5m=1|}vm(-N7pGKQhufB_!=jkaMp`bM zU1ec~0&s*bzSSC)gzuP9%|Qz_RW59j$Qi1Y{aP>Lqsc{Vx1+MYs@1x3>cR-CgjysT zER&cct;iGWTj>SK-tfuUp6c9JPPpI<|~5v?dz2*Qc06>9Wa z=a8Q6UH7WYLoJnIm&9ct7RVS6eruM`pIRU+nLi}1C-Y)|=)O!X50w`%>vhpW$!RKv z`!t%==&GVD{qaV5-J$4qK1sO800_Kswv~S#tbghQLHTRlUYwUwRcQKPc#?t67i)4Y zzzzQeFJs)eyXI7P9ET@;_Nvu`?Sb2k>{P5>YqFYey+8jj_H_TJAC_8G@{d@22eZ!E z`GP2%*Mm#?40-pe*xatHt#(Pc!wnsu>Ok`Pc7UrsWygYS<^8xIh(Hqg8oSN-zB44d zzcS^qbh>Y!rFpeB%E;+^G%TxIbAruzrZ2A-joRM5Y1tR<^_-7w(k7opOV68Y_~hJ= zm@G>S<8}Wa(e+b#4HTOu-kYo?D)wn`3cP^a+p+Urr}xlk6B6g3dExAE#xjxLdo2ZC zk4<1Ci7>NRnQY^V-DJa(@&1?k9X3#pW>?tzcujCJus3>wBQwKCUzyOLm~^`&_vB27 zNI}-otGsA>!P&g7?DJk{D4MJN@jd{`wgeaP2DT-!cRhO(T&Cs7cTM@L;Hny++xyl2PfW;e+(SXF9Dw$rRVAvaTw$yfJ+M1`yPU7s3U0%j{e*q-L zJ9*tlNF**IB%T1m&Zg1rVtEpaXegQn>%{2qRvOE4*sL<)`BH_S*uO9I!gy_*!Kwar`RcXtyd9^;v2hYmGY^4(0ufP~QGE`Fu{?%!1c1>bo zu2kQzkSmsMZA|S7YTlonnEADq___vzpjqn zm6W|M_<4I)+sn#R-f*uQpr;(T1w&@=c(q+xaLxn&(P!i1QrSl8dG??QOX4HpGZxnY z*Cx&5^{|PIRPHE3p&zT|EUEfntiM?l+=Ob>&$CaO8W5M6~sq|cxUVj!y+V_L; z#Hq+Rm6UOCGZ+LDvU2Ta%keDoi(=kiZ{2dif-lcbqmVCkUv^^W^j$(J2SQBCRibQ( zdxae4sdt5od!wyF9P51-3*cUHS~RKkdSuy4lXx&_qZ_BBb!5e-)<{q zxeS#40*Ex6p;6}~#c)3aAmM8!|f_-as97+h~&bq zlQvukf|XcUV1iPx1a`GR>7=~5sj8rS)=HP7W%xZ=R3F)S*^Hx?lp@KmsyfHX^5AEE?_YS*_hNUM`nVGjYxK(?7 zAurpfl5pF38^2dDDA@6v%}I}!kv;Jd!5{q*;tn7|Izl5qDyKaU@<7T70R74Lq);S- zGH^Z!@a0e^-=Pi|XQ1xX452}i-T9A)-(jIpE>bYrk*;2QiL-}~ec<`hAd!zNd`}x3 zi)(lOIHCJ*CszXdqTkcUS*zWe2g{edDNIuEn_Q=AQ#azsZEMEl>llH36(lFKpD1Ca zC+WjH55i#T&TElVQf_NVrz$(vPlZ2^846-Af0C)}kM7c0O%rm0GRT$w?u|qb(l^75 zt0rp0gauGgx%Zdjk`Bze?nD2o$!~lXPu^N@Wx|f$0)MG!f#ADunX5ecea5L?x~BR~I^|-6(dwVEW~`GLa9-h&KO~By70nL9wGbj~!resDO$Lq;I$yh#In@<{&pNms&*tP?rnvk9t2M4KgJ@ru!k{fv z$lVe-3-4M)HD~&X!4P!0G%11*2~juOV81({TCL5|{|7t?ZZx(n&R4d-L?{A3Z5)x_ z80h+q7G-qVnQ%x#?8(h6wl=oC#{>pOCt3PZuFYGAQF=6BG>>Q;m_Mfn}eur4iwLGQ0pH63d27eBw|VKjMl9ZU=#c|ZTbVD&pQnx z;)6VX3!n{fI~}132qlG69h(J+6oUBg-=6Q_PXM`gN_9mEX@As%Y77zMn>E+Veykv^ zN=cL>(kQ|1DnBz(@)y)%$gH6tVytj%`jVaf&o`$L+j|AU-=@W|o$*{~$Od1{yarHF!HX;wsEr66cXkwF9k~>v zP*8ec`iT6OUau#D#BDA&+7HHNe;4mo$AmHY;|a+dUTh782ax`7;yJepYFYXv@L+)) zESWl3%27anwLmZnbFt8>ps}S6xt3?cQ4s5+4M}1wTE8Tc)E4GX68Jwa01K^E5XSvp zywA~9+eyNFNq~%X;)!u}fPn>>Bx6(eji~oHPeP*LWyzwc%QcLFl)8aX@Ft{wczU8+r`k%PJR?sWL;^!G#5(TzLL9;M`q;R>4mT=+?s@cq zWW-~T_9QNYnjonC$D`YLm?Vi6OZX0$K$BTK31Swb;3yve$JAi%ur(qo3vxeR{q+Ru zx3x1Dm~>i_U{HvL*k$Z!ZPuEMvZ$n!;%M`TL;Mr4jF<9cm03;34ANJ?-!VoCS;m9v z_kqc%ey%po9M8^nbB$Fg5DbsDOCOkQ^huET_yGMhP6`)~J_-dDj9T2F4fGI0%nRqn zHIma`3rN2zEJBO$_XK3mz#rpKXr!@KSWzgz zq7WE^F-kr+mi_mSmV`+}Lp9Bw`i9W4SlpO5ZqFsC;G z-W?v3mdsiON;J&}B6?zfG`9M7rQNA?s>?7GZRAg}jK*5MaVZ{Rnz%vH=86Xv5=|_;MMz&?KXD3&)i>Mz_39BBLdMb3`OgnriNc5!2zRpU22iEIk+5b_};bw{ja zoHD5IB(r+CJ`d?E1-rD>2&hcja)*Vj!VCTq9Yg?;kL^q(5d86S=D$F|=VySQ?*1`* zTi;}JkE?3tE%T6^5%cX{4~^F5bg|r|3A_-SN+tyhW?-XT&@}hU#X%uD(+&XGGxm#y z?A}kHm-ol*=Y8vDE`!w`A6RVKxZLRa>fHlq($J@;L5ahwUb~~YIFUVKs9oDD6D~p3-1XKTL5H)?iQXdq7O)n0ZHP|Oax!|h7 zTLAUlZ-^U7+#!Kd>I(%m*cn(r=v%c^)(bV(x6uH}s zz>`rM@~SdG(I(%ixk_l)osv>7^Z;u&@t3Ntk(KBBc`=cM3|=Ok?-u#2i-E2YU|oU; zDYQGO0oyP+%k?>5VNo9k7YgjluI6`8&*AxtR93vVGN}{hArIOA&HRa$Nwq9*5w6mu z{(7@ZS!|`6tx*_O$5V3EJ=}H0uvQ=A_X8U zqZ>n>qD&*yCy^@t2KX^;b^BaiH@z-NytW5q_-O8wVgju#7!>5OJ z4o4EE9C9!Qu~-thS(l1owLa?bK0lz4Cb1j{e!i*nsp2&Y{fJV~s8Ed$J9|@8?M4Pi zK30lBQ>>W29RxTJV2LzbbQ}H%86e~7#@O>=;;=+ny^3!qfFrAO?;4Nk=Jl$H_~dcy z7$R%xl!URl(R9{LF(iQ`=qk(F*VPK<_jMH0>|-jIt1MJbN8gX0ZWv{5J1}I*k~Iz z@18CvomYN!86>p>GV#9eHrY$;jg5{mevP8?xTh+at}*XCii`1sVGA{zoffONha>Ia zfU)8Jgbn7tsFiP!gG-VZf!AkW7KwXWMc?LPJI@7DCIWSX5+ zZ7m74w>KMVE*WceWmU*I6&kt*wbBybTz0?&$$F*Gat>CV{*Ei^m4fBXRf2ho_ku%) z?Ax-`Vg|F@twvz5!IgWrHw5ks-j;dX;m)4o=_|ofJ9c?LBShncP#I`Y3H(8Cv7XCP zelDJeVI=VA6|8#S_?_j4cI@;NSQ5qmC5_FYAS!6&xWGFKhXIdEcWa z&+TTI+1al_-$q+(^21O_zDq#-sWuws6Ed+>a?aWCFz?F~J~|lrfaNqVr1q4s>VqV( ze_O(in)=6DZ9uC)gPa1xw-tt>ZexvMoV0Hv#5vYwhbc$;5(mT6Vy8g(&89$}cx}=V zAo)H^@Y#OybOrW9!d^?JgqY}wt+iX>`uzLHc{*!J_=T}a4gSg_uG|%UFfAS$sq^Vt zT;7S0+lY(NWDBt|ulAxQZzhVI+#3mn*4k#&ah2A zq#j&PiP(5@vhNuK0{nHJ&nz%towzjvqgAX(v%V?y#l7?`7lwwug} z^k)>A)~O_d^-@%jxiFbVV6jJ}ms>XSMgdF%zCSJYj7DqhioYETZ_;cIm8_6Pjkb9F z!{xdJz=4(WM|lN=K{VbQa+1$J0@9}yO3J&y`wJ|B3b>xdY-@~eQCO;7B@e-R7URVH zv_rsXF^lqCnIYs_+lgC;{VoKRNfB`r2;)`SVyOUH&S*bS+3j*;IOxU4#DLTmq<-_# zBYaL@{AD5FYXwswXscfl^OjM+g~8BX-^Y|ND4LH>Svw!?G9`f^pC0Pm-$I<1GeM~B}(&p92jEUAS4Y0#8yo1YQ*|3i+BYoR$ z<;wO-WYa~2SnTOTSLrko0tHW5O(zcMG6YBi39hw+rj={CY)Be5+U_y8uZog}8}LV4 zc*(+*0tLK-V33FKsfhwagnow@ax*MzPZbhtl0f%ZfM}adns7-V?4?EPYS4B+K0dmJ z=)n&sl2yEMzWk2Bp8N{%B2$L^LVJPw1Xd*RH0m>1Tn-`vk`5Tt{AwOtFjSx{?=QIk z5kM~a%S7lJWgZ`n$g;qC_Od{}jDoN3KNr*Vnc!anPzTX;VaSKp#*~mzGaAe6st~xL zM>02&zKH*;KiM`8qc(yUI+2BZw&iZVUW;`*9$!~ElU9SOIH6FmtyGYys^O}6D#-qX zHK;~@L5d_@GKUYpksaGeyDon~too_49;{WRbXp{-$1EB;5<;Pt*6ZaSf8I1Gf93!l zx=xtmAU^3wyW{waBw9D8<)Y@S1;6M0&K{%pLWHC)UC}3zW#1F+&~NukaniLdxKKte z_{yrK-!7UBk(kGh2WLOBTVnMXSr*tDmGLfdvR*7&Hc)4Ll)6OKX?wZ}v00z8>Wo&B_g-@G|jAvkXTWYZMEL=lXrLM`;@jfd%HX!@Q|=0Uw??uN_vqz1(i-;UJue0DnPX*jY~; zDmT(xKA-nnz&G4rwrKn@sDL@q9V>LwAZ|yKRO6z6yeaf3GAOemXk+E3HekmP++QT7 z9)ApH23Y1+dT_6C&k3O5#0z7fq)g(hL`j)8pYQ#XwO18LvOg5h=F1(MZWC zWrHBcVPEtF1qB~`|Ka+4JR?C!!mDhFhN0xkbveSQ`~j$-lyXN|Q=o8%1J?Au%S~}* zz=dbhj#twA%Ce7{5(BQRSo1^cxeTDOk%KBv*=A3Qo)}2S&IkcNV?SvfRa9GB%igfe ztgD&FfE&zd5IUiO?B%u}*>dm`;Ma34tBt)0UJgv$TfuMf`WGw#-FE0Z2u7j-K`{si z83i+FiKo?fThi_2H4efT7uiw7Oo+%{K{ZIBf*Wb{y3-cL!%j=yvBvzd@Qcl4Ofj6z zYzmKMF%TMYLK6N*m*EYK?=RSXQ4$*YAK$(i{TP8hU2RM~h~^On9W3XIO86d&OG5e^ zisJp}ur%c-CxG+M0hz$*M*~)L44R_kbamjaE^ZYKt0_q~`ei2qhUJsfNc7${E+r1y=DsS`usa*BD}_D6R?`q^7?oWt>-)uLdfpy< zB~i(tF`fW}?^iT900_Ypu{6yINFsJ^Q>5m9`_O3sPNk+WDHROePcrxZLLIiG#!03 z+*O9S1x4&GB{u%QlT2c}wi+43NOemY?<-9dr2xF)(ANmFb)Y6&t_LM>iGF8>QDW!84F)i#v%?J9KM6rjqN-P! zKi3glOQu4OM5${t-aGqB*;$;yAvR&eaJJrHRPz3;ncL5N&~njkwUz7r?9m#r_hMbb z>3OJUM-Vl`%Xhy$D91`A7xiR0I9;loBLzQLd%V)Q9TN4&Ud3lKi!+r6dcq_Jizs1w zP(lUUUIjTHw%L}EIg-b4Y_7iq8OgQ#D?Pp|B(Wyot-!Bp>Lb#<3TuGjW1ZNw&30<0 zW!@jt?Dp|pj~5!p@XJW~)AGru*oHDoV6Oq0Z#jFZEtaXxrd6ZiTwQnm zplrb}G8>P`Lh*3^G(rRP7!vlLXdsd?d$Lf9ywwWW+Yn4~(@y+eZL*WNeO}nNKBIN1 z77au$c~py~)$(s4-qitrbO;&I568_;H_Vrsv3Nnl`70KYSJN8yTZSKPb+c~$hY)yY zGRbsbvm9YjwI#=t1iYUEIH6o11D^h!Er+loLG3DD18N*CP(Yy|#(;uN=<);b*wD%) zuXegIyDn-8`+7aRef@yS1eClr=Hz7{SVhUqHTk{W{stHfc$hj{?2pJv_+|j>L%Qqv z3c1!k&#pTr)R|6;HTHJ!wGEtpxWOeX2YwL%4Chw$;Xn2lN@vP^-#x2Z3mt6$rl{!O z8KwgAz7dbQHUz2uW`ZFPW!X^{c_yNL!vO1tB3?+{M0wUtBXSs55lou?- zL&Euo5#U*)t0c4Qhlb-Mot*>>PgEzsos4@bh>=>pI#Ws~ zP}avy1023w7c19(sK*r(EYe)gMyHzs-pSA38H^;V=rpF%f@XI_U*~k1Eu{dGVbAGG zxv~pLjfnwq5VRl=CZ!%g#8S&;Fu?EVx*SfZ-5SuQVo0LqbOKA)@VGLp%!Gu<=T2wG z2L;r-Bv>@rM>J6S*MvPAi56 z1}dpQ5#Y;&SE85*Fx={J$&4XscE<-}>+OgE5?PTmSbRHV;ZWt2wzs#3lP5rkq@+P= zg7}+tTU%ORIKS5ei0#w;rWe9dax4H6mdXYwc?Y{{%i&I-UjS4%d~_BuG$jG>Y5a(9 zH7tQx1OH#E0boVl`To^Nbmm4y49??>udlE3$D7Cg4@KA6!!!Y(PCtfo(iczI)-HkhUPA*rtp<$o%V5{1-qZ+2f^p{ zV63d6l_9m7L*9=KMXs%YK5jHU!wJouVBnEoJ&Bj7Ne%7HuF(VHM+&-rx3J}6neevv zU38N&UC!Fkcw#27_>7De4JPAUTdn7%hgoQB1%7bGp?!9UUDG1hLIaY?c~n3=uZD{W zB7MI^j&K;#rdE&ts}?Jw3cy&&Js(A*xna-|x7Z5=+oOr@@q9k^=C(ISFrWn33+Q#V zZ9w405!%Rra_N#udv6}dGK$n{PyQqEo$>`ntOy@rO#8smDShAEgFEu)geh)&0=go-1PaBz#vuh$WguT&z42%YpTPUQ%8h$S zknLv2WKh_9m&e_;TzB7Qk@yJGlh@uHPb|eFdFx={jG(OyH21#{ycMkK8-z&#e+VIn^KISzRgKAM0-xLf z3dy0xBok?C?%`_Nj?nrMZndSlk=3a7>zbt8il8lw+jY zgRSn@F^)hcJo#Vt{3<1~$xpPT@49dVup5iJgJCj!*Ls8d*c<+7XK;n1oDfhiLpmrY zAZh=G#X%&$eRr>d$iUVVZshsBjB7@)Q$s$yEBfo$m>N_9M7W7Tx3Kx}O7G-5N^DeJ z+Ad_>a2T5Q`8a{kEdqai3ACxg5PsM5v@VuSi|2mGoG&4Vay3BAXTKFgWiT(3hDH9EfRWF1QJb|N z4h;OKg1<%@zZVXpZbvZ7C_d!`kV-rkbHV>+xAmjnA8e`BXxK4=fTQ9G-7P(i;(H8{ zR-Egv%D2SMMEOzp4492?=Fqk*KkY_#G6sVhudc3`C*4#@gm#4$almBI@G$!Br2Vs@ z^GE`pG&>5R`pN+YAhFlaN&NgDj(-wQ7+<_X6yBT~nkel)qPYb0j%Mkq*^+n?9LTR z{G>e~)5BH~1A7H+0lN_V}X-IHZx#@vO+6)>>>R$lR)^ z$5R+H^Zvf!C2rR03$k$G8C0nH8aWGH3&R4o(n5BNc@Updk3mU1r=ks;nQZD^9~`|o z{Q#M}3J?lWLURWY5hINb%|bIIur(kh&#KQR2!`?wm}&xp;MoQeiy!^I8#XrrUH9r=Jos83vpLU#3L0k}=?A z#s;~~W_ApH<&V?f>B){>0B$;LrX*i=++-p#!G4M>lJ(D%Z5VVN0rNzRfrr{zh3z%K zEVRiOo!FLDPr$Vq-4X5sPg($Ds8G=d{?zDBT7h*+rvd@-)4%|j z2QH6WEQmS@A}8_Y z*~x0|>V*m9n*g8n2BP5GokOGUx)i{LS^75Jq1J0}<*e&2)NV>O_BS_ICN2&&qNHU-XfsK6}&l!&++64o_ zSrAzdC393Yt!_9lK;0NERs840#R+hWl&2k=0Fo6fJ^vWUX}hoFM#mA)sM(O{+w21k}wy)aSP5$IKYsDD}+a-64Snn zhRZ)0L?w=}+R`V(;Z`iox_wam5vpT^Uzj`^NBY?zt;@ujOmd+x48vJu0?np`N8-iw zt&BW5b7RD?0f#Yzm+z<7fD*rdA=n>?q41g_VEd^vNT*5tCx}L|8B4DbgL}wdtmU?2 zs*T>%!35gOrj^;_F5H~1A|63Cj7`$aoG`K>58uj2e&#gDx~_D#C{KOt$AEz^15_17 z#cEr>B?9=?U^*Exn24DH8tr7?CHxVk?EMo<38YaB1$c?z0p{0vUOi)%iEq*TeW|<- zs=l6tnvne@ErV6~AmY46=-;Uq4B9(iszqabx}%vcc;vrE{wze)iPg+yC-%7+rZe0f zT4Xf?Z!{TaIEcyXc=@-iA7YO_RRjhW5P`T74*2~M8B@Lzu0mgtD0-x&|EM<#QPlel z7_5Kc2-8%W53BObenRx#0C8Le4m6ZZ6VhwPjusoF$Gio(xf+(O74sfGj!L;&PHyi&d?9M^{Bqpoa>4I#w+aHlr zb-Di&{@;TeBNXSeTr}Th(d&MZp&5o2aB3EfHO{@e(+V%Sc%=$;ybz zLt8R%+_(jz!Eg0>MHI3)FG`P>n~@=@SO~jygQs!S<|l&*5TSUGS`yCw41PE>8H|0~ zE}g+vT>LK`E0^0or#9Dkson99)T7}ubvhb`pqR4ohJx&wO9{!JKVKBkbL`55z6jJej!ZD#I?3lD_<9}o;;kk+&A`vyP>BB~f zb#@yEdz^uerC50EIk@KOpPU@TgDY^(&fEfuj2CFPQ4P2~iYK!9Y0&X{10K4?UpWXp z&J_NP|h>wAN(&buc1d&n|X+zoT3Qn!U;IanBP>2 z)CMMA1A`hA$x@d;DYl8Qnar*s)DB}SViQz1Hp{RG=u314X~z4|=>-7sZ$9q_XK5hh zRw+y9&d4s(>p`RsJCdSTzk(y6T~Qe0W=@_J7gumv;!vN*D5W)IZu>)Q+v|`|WZx zdG>jD-~3~Iob5JxdAyjwTIDiWHgV4J68`VH4XmFf|7QvDWZ$p=wrfe~TJF>PJk^{S zM@(Ud?_5y42_S^LkCzONvZsxDCPiuo^Mh5I6e~D498oQUuUq6?LrGsNB;lfK*F}=~ zS4F7LA1gsK67CapTwAB-Q)sUgg2kuV%2MWN-;P4gQy~I`IUGL!G=gNZ4{~>A-wcA} z;;ih5Or~s#@Km7mpi4r7-=9XCr2>x!C+SEP=_5jK@z)HO0s6!!=uw!@cc%mh>cM_K zha?@IcbW58o%!PLxuzpd+^3@kCw6WJ5}e%{1K-a63nzfra2y+SU^d4Y{hSFaKr|Rf zT3RHV#0o1aQMxbc+_@`IqNvWacuUp)=Z}t1G+fZ!4#WtWDdT4-Xl|@E-Rvo%6+!pa zzjCCXTB+35Hs5KN0!Q-@zkTKkcVhR5LOBmV)<&Hmw1bcd{-E>iTKm-PQXRoOLWVVo6{(xxhGcY# zHa(*iAiM~!eBt|G{uNr7C>jwRT?Vh&ew|!j6OsYkkqS4s4Z}AIq1%!K8Nw1WvWbD8 z3*>zP+r@sPK)1PRqfwMEI1I)EMG|eXL_yax&u9{(TR{{*HSsB{Z=FYA%+8E-o{-DN z<)C3z(bYv6;f;VG610z{vCD~ z7?`}&_&JeU9ZPji7ygxm(<7#vg?U}7&*0qnVHPX1=O;`%nDA#HZ;<;R+z6Z&oC^gR z5KYKsnsNlao&32GK{Xt`A?^(rEw7pB0fIeTJQ{(tEfY4mEf z_NT->4r^6m1)Sv!%Pfxr?cwMODIlFyhZBp7il4z{0$UT<3{S!rkk$}V1t<3Q7bY_{ z^E?t>b5t5HEY;yH~_%XaL>wPkeboBkVJ(4<5Lbo>{!+i$mk#qT_nQ zS0nJ@KZGGA$>v+Mmgn$u9KmGi>0a0?xH+oYk>+DArB&PvM=;w#)0|g^iXbb6q*j&R= z#pN6>Dc+n84=Zn`Nk^A!Qbp0hd9N{G)yX^Z_W-*8ogs2 zF3`+jto^U?0cPN9=O5T|opxR5^kn)`7p%M-h{2&+qrT!Sz95>cS|0<09eD&VWvrOL)Uh}vk|7j!bA6ixr?-97K^_kt~fqY7rPur zTa+a4J3rViH*jrj45L*nj8kXEt4f1x0D|LC5!M7w0g$7%_^HkXow=#!xlcm~v)C^Cc;6=uy^|~G9Shn|&5@a@NSOUi$NG07e$#r7~PQObT-Q~zgBiA8scv&RjBJ6}Y+M!z%BgT+){ z*I%QaddC8qTPds0gPeYh-A+M={e_6gqG0aY9XjZ9a~+>D2SkURp?T%G*{{$RDFM65 zGS+a^F1?HFz#wPWw-&#jBt7{)=KI$BQ%8F}vRcLTQFaR!@;gLmD`D3oZx)Z*-t4V) zGz26#02Gf&Q<2szdG}Q@0+=A>2`}K*nVipkhw^GHJYwefev0q(bAZX?PHVDN%uPCX;Yi=4t*suTO5~m z_6GE_)UeNUFk!KuXjpLn~z6Q9UO31i4arkC2zK-7_4jhIJlRd+fMbo_>aPXcbJwk%I z;KV9uv+ZduA+%z*1>yq8KeqooOW^U?R}K>|lue{8@$7HoBs_TWdlsgdR%^xK&TKx zV}Z89QQEc|pUAqVVg1(6cFon4ZejgB9)AEOqQCN)yAC-{U$82Mi^uh51cv}7cH*B- z-^a~AEMAE%uik;S`Ka>i=TXe*oQ#xEG}7@Eyzf@iA&7Ne4-6BxV_!M5QWDTa0P}KtSAuml$*g zmho9HY~sm+!^zG%4mot@H|-7t$UhgKKup|2TPs23$t$qjAz z1cl%PWduGwAm1XOg*bhWY7~P-p3FSyEX|#-rV{Q-W~)q({&6%J_92;;e9ll9m|;rY zY{mQ;p}N@kT?}<3t!l1*NQ{#^3(!ilAX@m>=t!VYeK$jHJGz$SM zFNVn6hk+FN9G<|E@7}Fwj~knz8sAhiH2ltB>p6)_)&#u~hM_y(KzzN|f56~8;Am6m4|<2t7E=3TR;wg2Llni%Mm@H@huVs^R@D7nSp zH+-^$4MiuEiz5*#Xg?an(8J&?_RWmY$GA?GH6w#y-FzE&B9F)3BIb6q@-qtV^RVYt z7(U(CFa{H5b%#5*!`}+LXrxT-30=m{UL*ko;y-p585}}46uLXBEdMqfBfM zpd!6$1484URAOJ*%eyYaG$#l#+pSJhAikHGRsOCBe>uX5H;@4(BeZDToOC`#Fj_*n zy^?&@wxxcm9dU<JEh#5c+NE_|r9=Axye-Q4n7t}u6{rNr; zgTM8Ugxh%cY8H@MdD%k`%FJ0s07CEg){7}H1Z*Y2s?9odX(Zk8QL}zf1)#EW{(738 zlq@WNe}8(NhIAso@p`ZHzyE%rh@?Ac|8RmuH6t67HGf&0AftLLV6DV9B@d3?*xLbK znG$9X^$XztGLs{k4`bV`1o*q2^V6Q4<-_?J1V3#ScHr%hyWdGO`00;QGS2U^zwZJi zgEZ^EodTz4tAc)CKF1#>*rKF_@2mOQ#d(RtkX5h^cVSSr*-j7jF(k;if^pj9jz1P` z$(iB8f4^qEJ_5o=P%xQts;C!BdYMt5)b!F;V1S{RA%O{Ud=U;cr)D*SQ|SF`g-S9OqWEW#4%?=zD%$Ua)kU!eQ@r zpQ-eRV_Fgw9&U)CH2`*yHVOfIwoKtq;L9l%?MttpWmJ^zS~33gljeKDRBpXro%Luq zM~tX2a7!oLI`58hO)mo7&jhlO_7r2%gN1_%NvjA#ntr8Su-9QQCptP9z4t5{Mf}B+ z&crv3LHpe^vUGI7#rWRGDlJDV*Ox&KGYn2&G&j19H=t=Lua0LsU%mRtu0zx5g+H`M zGQZ?-EH-}Bb@Jhw^YowMlJJYD803B&o?xB&;wi_&`4oF4izfU&SF-88d6%EBo+RhE zL90u~-wS#q7lk9lR!WS36jc@?EOZGFJm?Q2_X+Q#qakuE$73sRr~d*=A_Qq7igQ*2qBTV!4#$-!3$LisZK}Aec+~fFdj!IR{V1 zh{xYbNh_Wb!3`xuX4K$-5$R=Q1OY=vwU5t~dxmocGx>q-IquQ(n`qSYBH3NF*XlQs zTteTI{B|CZD0i#w_Yaeyk?oV|D%>t~r!!l=1g9fH4L9Yo^Fx}iZ5Pdd$nxi&H zS9JZK`VMfAP_yt)fFy-!CjNd~9s=GUR;eTT4MI#PflvzVCL1~v&^vlVEnN<{r-hb$ z0x+B#jeTwtC%S()*V=s)Se&HmGI14+|MGiZ+kA|}H8wYzw@v@lWBRLk-S5L|k{B_% z=?Db@qL4)15Q@TXFoYS%H7OA>O}5K2nLu`&k+=?C2`?x>cW_LRQ<~ z{#B=$Om2yUf$m|@?eMxmNCJf^ zpHY{~8F@{#tOs}?e^&pkUZS2FROG;j?P2e8ASq+kG&a9iaXf2nwEc;J4w1JZ(-c~~ ze;??-zmv4ri>{Za%Xt5gCX6~-&ubqL86d8)@$RemIu4PWrHcRUCcK?2GP1}sFks{Z zpUH=Ls7@qyvyuMQVC>!$H(=s`B+2KLxCi%(4efTNavvO)sx-weeR2(0I_v!iJL~I?f09sl1OM`cj22f-e zNCw_(GJUw)wf+t6t{Zb3l*$45jn`6;BN)C8mtnS~miARA{>6&={3C&c8{Y<^Tl1Bo z(Rmryih)g2+&eAO#nwmmwa3AC z=qKochHFMNC$iehk6s=vz8~`3hxtu#x)hP(fuA^a6?_uFvzZ=F1z5tPzs_Q(Wb{T# z6uOX~^FjC*gf?*GA)K`=5kx41WwGT=`t|{mYdo)b6l7u8NSv%i4V8K;Y)-9Rjurw- zGyY)naM!*g^oXuIGBA6%CKj+x3)l2aGsa5SXz+W28!);ou28Q;`k-oioeX=bf>uHy z&YM2e1A{bezgYKWpe`485+4X*!t%;VDUdR&c)6H?in-6ae`l*Qgp=lMu&NMB{(w}Y z5@_1(A?A)kH9^5bX;i!KPwJzPVhaHTvazzdF4G=4=ui)5yUgZx_!%W4K!AKlb3xm}`4tFbbmxI3wdbE{#jYfB|L4fWVxEKpJ?1FkKb#zQXm~iuC~GhX8{ibK@~q`*z_H|?lcng7(B}yh%v+d z;{!%A(MR&<1}in#7MEyW!k`=!wS#oeenOG6sE;Ob&6Z#2)lk`9Er`#CgOkqNsH zH(#?ZlMSIG*16Fhg-sJX$_Ld_L?R#}Sz4#tda(y>z`Rk~?Hh1{_DvYZQV`D#ENzy1 zJr2{vU!O4wx4C94a($`gi`Xsvm?SszMcRRT z50QkxuR^pR!7uh=<*(*9oiDogjiZ>^!7;4?m#b4yl}=Nw(7%^JfZd2*^6)i4?x?Q- zgWX{{Wi0wTKQ8u}Z6T@i$t}jkeNqqd6e%>i8JXvF(tWTIa;U-g!R-#N``P`7aej;J zGBu#^=-|Kv?Lx-^3x!GSqttQWMC?u9_m`7-`SL@n9%p1xIa2KZ{PmsKp*`BJXc~=7$Q?_61}dgSuf z{0TRkCiB}(zD(xjCRs;X!IcgrGYWiwHzZ>5Lx~KC$8s><2H6q>6JBucgtr#*0_?{htk_^b}o{y{$k{C9uA4+R6vG7jA5YY@N zl550&1{7^UY=<;N9##XOaUwSf93!dzYr*#k$`Yy@C7DbVDoxYHZbr0%rx5yS$&Bmi zw=J6QQpG#T*u!*9v^P2|d5GB5Ls<}NKOHLJP+-gtL@)!GAY0)vj>I9*09Ya7R&24^ zzDxeC2@d)y(y23(w@i_O!xLK{&8+=a!KxNLPkuuK#zKZDy@jw?}f+tZwV2FWtPr8E%oB=Mmx@;3;LT+RBzi(I`UDu|u#$n1aX_jj{s~auf7_3U{jV25HY!Gg5REx78v-?5TjUq) z5M6)jCFVdBofQvCtIu7e0MUmuCTu%?0opvWnR6q~jRYJ5DOee52%c(66#kaz1P&6j zYQ5xf7O(2w1~;^%?hOz>W?&Rvh!oL>#vRz7C{T*gz+$A1M)ox@Otduvgj){K-WrBx z6lB3a{fDF~iP1qj!o2Kq9UD03ak>9pgy2W@DU(zr9yY! zIV2scI4tUmjqmR4-*PY0X^e!x7_3R&&zJscQwk4OXqc?Y?E;!qjuusLKG-)Z=!n-k z_L7ONtCz@InN#u6c6(AnK)e9h8wyWkFGPXxtGWv}fQPpWN{$F&k${sx$!g_%C?#)F zb{&)LKszMr$mE2=ImycCIH2HRk3dKLiN))phu7T$ zeDPm1nuY@JJ%F_@v~?WA6pE06PqWM0L;r@#M|*eJqVwvo)>+koCI@!+%Y5%5dVj3TeN<(U*kRvmZ-O_a42bS{)z#!w&Fx?mvWd_C1>7$kJCVoytYYF znX^`{Z;-DKO@c|(hWDrk7dp_d4^kQE*1%_x$oZe2Q7yrvWjeqvPtQswcb;GpJZ?q6 z;g|5L?MxchBH+=T0@vFXnKxnm-@zWiaA0>Ww%Y27S|*1VNpy#O|NKC@4-BE)6}TX+ zM6cV#0HEV(z$;`P;_XEPqAee5^!4tylaz?epFqAyr|lYd>4!6o(TnePFvnyB7F7XY zpUi;#RfJ=u#uWf-3KT15X9C-(r2ENQF$^M>GO*Mffb$lN33yLo2S!`af#m)rct^s` z*Wnkh8LRW{VOp^e1ed3KS3dt|C_%r+1(`Hzh0k8V@dd^v^da;qZuLh1q@E1XOS?MH zNH_r}eKw!#2>r@68DOw|n$XhdY2o_x2WUIP02h8}s>0n%D&RqT<$ZTvtWH1#`r@HA z2UL3P9>a3Nle*D(tP;3GYOApmEi0?fg@0sy~yCs&Qj$5ATowU2U^ zR|xpmWem`^nCSBuU~q`gP3oa!)u8k_M!Sa*>aS=*Zl?9-TbJu2-cTE%<`Lw(BAJAs z6BQ>UQX!(ljnMr^V64SLzk9eV-nJI7E{XvYHTGe4^g4YOJy>h!IE#jx7$ITMb> zY7B$ue|wrRi`iuRdozh9PBLsFNBh$BN1E)ynj(CwCcWAMMfH25-jGYsrS7!XylWjN zILrTog3qSh;*g4N`m4ihXy?=3ZL0SdZ@kQX}!nbs$eg*G{hW z2>t`4P=LjWio|7>0%Bd#-tSN7D{a90uLc&pGJ~$p2JecH^KQ-?Tn=gQsE+mKV{)%9cdC3$TCG}$_4c*t$;Y!n z63>03Jm3T>1vDGU*RX*k_HNWNCE{v zw-Ylo=bDtnTDjf>I};5zm?4m2KTsI3E*{j=ABC&**AcYb?P@0+iO*ObR9-RSUJluE zd1(OjqB>O|c^BAeeDyAH?eBaI&HSryN3rgaEVyHJag0JA_A*aL9P}|e{1z8OQRIEToV`Xx+xfRDH zzal|ygnDm^8laYgD>S~nLybL-(wt*0Y6ibsQtUVognpE<7}wx3>o?HjTn#=+ zP5>hQ(zGY9+fj@9*F2IU`HUdjVtBLhuV26|sE_MX{+~8DJ$|fu+*E=sic8+4-{##= zDkGuodS{;pD_r9W`gAbbXR3S~4k4EDbw6F2hh2e5wO(CU;CH(OwKRSylR>8#Fov?l z2G?OT>Tvie>zoqa@>|hPO%{@{*hvTBLJ74c8}`Kgn16Y>9*5T7`y2PiVDT_?)P}8I z`i=G%O8NqF3WLnHGg7K-QUu=>zT7-@_{HtT?lIjs)r`*{ zdgbhKkMnj-Ts#Wxd3SbQJP`?qNWm@yLR-aLK6Ti&Ux9f)L%_p+L~TD^6yc`oEgnxT z(dcrZda%?OHTsozrqicJNFRR-%okB|yq!Khy?(m=Lw}5+=}CIb8RymS`getf)aNwN z%M>;`pa;1Q(bOYyjdSBI3)YzctCVoOAaOU?&DrwkluzqP4S4jR3n*(2I|chZp3!t} zHQU^2uXz+koz&lyw7aFMS88ycl&X~~8hs4~!Nt$ZhcdwXdQ81PnGaZ|({r(v%A07% z-S%l9-t-0U?FPo_o_##;TEPpa_-?dAFMInxP%VBI>?!>5A?>-55UY2o)wR;)WKI0l z{0t3u$-QR+PP(SmE(SkblF)WG`fh%US?mPxw(7Uz`rhB_CsZ~){BD4?uwfmoUqL$f z&R^5xyaBK#FPq|C%Hr0E3OP}fvevm3Vd3azguY^T>Izs&L9EzgOg1*@+K-u!PhU)Q z8D?kuTT-+)P4-|yZ8o#ouW6FAAfMcZH<^v54?Exqdbxy{KK#}dv@wO&><^_v2-+3< zkpL`G=4-C6xbdBl_c=@k5|$HPpMKQ+?J;Gy|3dO_)g2z+QCY)-JBXXeR9JYRL?M?W z(KKC*S%%o7Y2`Ao9o|mE?#%?AoH#_zs_T5VYF@YP?l5K|9-mA4#QVL0QpI*gI|+Sq z&ZZc=Gox@)SjsTz(_Z9>tod<_5qA6A*ygth#WD#i;UU(6``wg!ty#s|^(AbdXZHh2 z*%FOzae9s~i7-f2cx;ZXLG{W_YI@pPwJ>2nU=Mo_XM_B;3K`rdpzuYvd?2 zlw?%tZtHOYZZm9g_;Iil+j9ky&iG(w9;3Xl`z5Z0Ysqa!Az}`izCzzRK7n^|lA13g zn;`O>Ve;mepCA0ETumD)?m1ht?o#2`4Ru+$dx{5xmIUSA8K&J4ADXx$JlI- zoFF5gwCxc5NR7g+>F4{QWcPzA*fTz444l{IBu&6rJhPoC5IidgP1A1E$u4E(u?H^x z`ja{SU7b!6UZ>f==B8M4@sJekd_*-fKbEe~`K>26j0k=2(ths0Vwaw?jCY<~DfUf= z6PM8k*ZU~_a1$WU^F&V$Sn6BR3V+$#js40 z`YWxb)`+eM^*gX|DS|kzG0B@8c3aQGZ#g(Z8=s700L`Y=^T#s<^tB_!l(tB941u6A zH_bA6nv&36zp;U+DEBXL_1GAI+Utl%AObky<&vnCbWrTO0|GmpBd**Jf6r}squBP< z18sb{?A@i1fQ}f13tz}P0q^r+n#O9HOFrRve0HIkNpanWEZz&}HaNa2pq*-`8-d{N zniZEE*{)1kA+X?s1T+=CfJeBeV?6uW$Jz^-n8}4@`<>u zMq9>kso|ir$!?)m#lI%$F$(o8hwDtfKbPT53*579@&(&Dh74y)#&*Z1?=Y|)KoNS( zU;KpEKfw!-YfNlFy#0!)dkmX3RX8Z&QOx=IBX{Y)qs1<>jc#`z4=E4Tfb4n6s9-$e z94Si^tzq;K{YYl$y3O65HW)ksm$AQcqKOt2&vuXzi6w6=Y6He{j^VlW+Nf;XB@qR1Zt$mo7C6#$hJRQFn_3&F*n={ zxSmT(_q;d5q(2*kB3c*}$F}F^CUqPG^L?`BA#n_UqNlittu+k3>=rS8BK2^t>Iy_Y zv#4Iq)V z!l&yK{5g%Jb}W3U!G^`C4IlWiwTA}8?M!a7zzzCOoR-^fqGwlf7YQk{jE3+ zHenG_>o|yLEQ;&#b&G(&sEV@`)N$Ou>qDHaa69qUGw?kD;$$39(FM22_WjuR3zbi! zwDDcmR+z%Ft*MNTuDmcr|Gh8*43TJ9K%cJz0uT7g89b!) z(?h<2;egOj3JxC3J?U-i|L=K-NH?Yn0?!IOc&~194FA`I{X3E8vHs^dR3HpDI$wf0 z@=m$F>a_VUj4iQ(`#{tF^)#DgZ13mjzjXh2{yWk^4@1TQCY#Myhi>WAPJ8JF`^V)3 ztZXLVm#@Ok8j8fzm-=SwE}nHV?-ZP$ABJRky^oS96;maGoM5bPb5{JdB00(^?@kyg z4hNXSaW;z55`~V7m!%H3A>fm$qqx{~$cvzG=~VmK3MO+;m7LKWyu!y!xnWDQ;G=ex zbNuD#AEy40&3S6ljvZpa{+x!d1?`w*Gq-$Oc`r^|k(0uJzxHI_5h%3tan)y_%hg+C zH>j#sg*RP0HKNt{Sv}q5a-nK4Wd|c%0S3z@yl~;qT#?s=x$4%i_crxhS~tDB-)PfL zxkj&0>2RWc#g)f&ljs`jchJHb3PJp%PHC2Wpfy+&eL60Bi3ph)U6CIx`f*<>&l5u( z8A-0PK-Smvd^_%AXkAiyQ=`pYGW`Z>GZzI$NdAXFl1ty4x!BKBnyy6i0Vs5AnK_)+ zzvW?L;j-4?>&lCE;oMcjZ=|0xJIv$#>)yWCNJl_ROa(=`@?7hNI(t0o z@ywpB+U@zJ)fBvlENabn_mk#tUZzaExKDabg>8g7M5Mf`2q8`wD}lA-oZEEdTD1~7 zF1;ZUPGF0${JZM~V%1L+q?w7O0#S`_z!bR5bhJvlTS5}1f}<*wz*;n0F%~3s5hbBF z2`>OWoK;6UNO2lWum)T&RgBH6sRp=6mR3=awYe_3A8(Ygi#lYIzz$17)9Y?-o0HtS z)7_=%%zWMZ#Fs)vz;(rYK87A0B?9ORT!r9geJB-!Cs9SbY7)e3?RVm z!Fq?d20ljfQN|?GInPq~vxq<5yw?~N(5F-(7wtEoO?oSTDh4*5MLJ#0v_FctdMS%A zmv+apN<;W2xWcZL$;}$V*L~{SFiGLTmU4(v{o&@s{uiz5(ZbYU-_0+$3XrJktzdQ4 zrV-QC&JI!B{jrzB?Nl=Qco&@JQot_zl_x@9NmWJP*yB;rJmsxl$XWpbSaa&GRggstFD^NE8s+?Shd)!(`0 z%H}Ug-QL5MeM`nj8$jfS<_Twv?uK3eN&TivKioC5Yj7Sl~)Lc*Gt zuSojUgYOSV4QNbv9&-DtoQ&5E62Fbwu2mx#cpBbp1Yg=R+s>{!IuVaDE*73WGTcVWRwFi20E;%#$a-PeC&hC)eR=Qx*~6khC|c_wp%6S>B zgN+_>oaxgVf@v_Brjrp>Y9Znjsc5VhO29HkJ|1kJZq~>#(hw+l1ouBS!^mFgkJ;i3 zev@m$M>0(-=4lQzY%kI`m^ZNq@u2{rww7>PH0_aU0`IF3N48f;;VR2zzW=hC@Ss0 z2pd;yF$&L%T~>QM6c#Bwk6$i|RiV&K$$K#pWx*Km$5#Sg0zTuL_(9Dq0dIGooe}yW zp%7#9GBn)h-^a;}Tw3{Xo47a_H4WMud`q>x5NFCG$Yxvl{$HuGp+gqGfpD)Au=V%< zRw9sr8^e8P`Bc@Y{~ZA83#dRIDoc_U3^mtXP>j5mD^t>BiinwE@&aF-{+}=L-H$n1 zydLoStzjZxCxWl(TYuL`l2lXP{bOWIbNNeLARFc7L+Rde9}crKTBQG^P-j0^Q|GrO z_CvDtV5df1!;UUp&(EM$wrNz$>suCq^%bV7F(3ZSYP#KkcS!+=+U!^Sl>v4_Gls-T zEU%GG^|wU9Nf|oTpLFGkIrZV2NDd28@_HAkAhy$CF^@BJ(bdx~+~3 z>Rp59MX$Q5m$%t5GRSBA5X?y&_7YxeUX`U^U|JHu4+@LVWs{CIj7~pv5s8WLKu$Bh zDaEXD?2XqDMv!$a7D~ITyHr{q+?HW9f%1|;t5yUyBNR_GiF5w@pN>xX)>^8t zt}hJTpjOivAnO&IjSEHi><%mqmD#hkM$iZAUAb0%B1Ik#rZ+$kpXd+w7N+`?jkIeRoCjH4GC*fli21IRD^yY-%@c7FpYSF-lRZqt zh77|VVW|x-^!t!q;`ov0`?by%FG26ijS(SzPz3p+L|#kw~FatL0+b4x0~iB4AYyHv&5`>gYFRB$SdD+rx#XUR}gNgQ2)F z^Z2xv8wNO=6tU8|#-|%MzHMZrG6`C)KsklUj$EwYyHy>N?UAB@o+=ARDeyk}F3rj1 zGaY_5Tb^`&HIHmd83?Z+=e^l08I2NQGUFG0aV!2Y3KLqNHivV-bKlrw3Gb1MrB@D* zBD`F!^nQBrY|D9j$c|XN&22)znnFurIO|;Y^F7m?(itD(U#-qZ_^UEPt&B%d!HD)X z0*-@@2IDf?xKE7>#{!^#*^<(G+Y}P$??8cq(UY=l}?RMPC=*6G(zB9Mtr7ef4RA4^VeVM za8?!E?ch{NfNdC!qW%PV@Ui0K@ZZ>@d?H)QWRVtn0r4mF^P|_L|0};jU@R;g0;JK` zX73x4E3p&SCo?Is5L12MtGCBI=YNf1vVD!vW--XkL$bm>{U46q2~J2X_O^Q7vA23% z5vc8mlV;j3q2n7B7O$3!%}^`J$spEbNuqSmuwT|9s%>Ud*ukP%*5s)v?1_35f)%X< zjK@(jnBmTc-r|>Vh_Kz*93^*XMCiAwa9382U%kyiP|O<;g94kN*({@Iq{&bC18{so z^vk~l^ak7Wf)ATNl;bp->OUB%I*Yu&vt6S%N=a#0v`^SM8AVX}n7A!l{P~7vXM(ZK zcC61-w0zs!*8?vhAAKzHJ;*!P@lb_m=ZT0$S#NC`d4%?VMO?R8YyT;e#>0XxjZg4$ zhEJ`N|G!>eOiIs7*$3ER3PvF9wzI6L!eiEUn!p)HVTW`V}9o2vsRYU@*bJ zQu*OS6AHbd*vTOaUp_{Fz0&Y>j?+WYg}1e^w~xIDxFFOgQaWZdbQ- zqQ=I~%W1XtM~DIx4ilJ@4#2XmD9{|(`nBBjWZo+Q=%So)tH=gq$`Upt3AEc1{wm-7 zlOM=rmjX+pCX<`XAm)1tV2*Nyd|M;9F$Z^B&n$rt=Npd(2d3ZFq)U8qA=-CD9aiIw zOvD#5mM^;;15LmdvD|Jop3i`jCqj&VQM1PqwN8i-VAZFPBMo+EEgZhg~q=B5joxjda$DN zmBhI3{il%x65<0*g!{btuzCy}ATx=;6Qnq4kZauzG!F*~3Q)C3J-e+oz8;K75a_{< z&exKSHwKz)v*-wzy`96nu;n?S)$>l)_R3z7__|5cT#u zMNCFO0O;zVS)>5%kH46?%^`RaMKbiVDfGn^({tQbAFH!Jo*4MuX(!op(eb_*(#@>7 zCY0!bnJ>D-S+;IFa0u2*1xxzBW^C+~J5C4%}M-t8JC znuH-zVq~vgL&1**bAsQQD*1L%?TRDt6=af16`@{?LC?xB;$nF|I zd0y#^WLfY#ZPQXPo3c-BkyXYpv;!uNEa*U+4n$ALFIb$cb(~)>cQ76kFo0#b{Jaod zmunpiA!Src;IM4}bUhfF@H1=yqkJzX@QET$z&MBZ9vf6dTvK_kYea|XIT(^LL-Pp? zRzUdGS_wFld1|7ef5J#(8*HSul`)Be900bdIKwN2u_Kq`9K5$~X^N09oC0@E^_HaM zH$>WHRyLWmf940Vp5IGXKHY<8v@tN?W7Yo%r7z zc{~PYiyaAvVZQ#L!P(YN^^|X=V9fixYMiXLR4SIIw5g1s5!EUtpYe>hd%LTNqjhMKu_wsZFn47m~nnY?>@F!f~EcRP#sDq{yaF2zTi7e6?9NH%U9qr~dDsgoz37$w_@! zX8CFpD1Z6DCS zL%YcAF$g1(gMQO=ZMO!+X9@rKUlIk$XvkHk#($Q`)Eaoh;b+{6_#&{eykIVl2%f|o}g(_cavHYr5Hma`4;8}bkc zfgT#FB{DH zmRjagUUvPo&v6?~EcBR0w})vb%AFbi=D~dYD;)sceZ%Bp7kZr76fif;8@cJnj7h1t1@=(7> zOnvrhBN$z0Xn%VcyTam0G#pdL;ozTtm`JbKhH&}MK=|y>VA zy|ezR^82E-AX3tebSm9l(jeWSgecw3p*y9!^H72y-5?EubazTgci+wDd;f_$#^pDW zaU4h9v)5j0&iSlqesJ_Z5yGt}B6$5!?h6oZ;ewpt-n8iQ$ynfo!uMK9TpO=IdZwiRO3x?Sv6{?oVWXbI&iQT$Pa-Ox@0eOYXq^f>v<_$B~K%&8I z_~iGJT@qgxO`&c1WT)l+?ucekU#R>P?lDPx3-h~HDLoPAZj@xsLnMYxKnQ7^k^6}B z%({?hbrXB4v%ZC0&TH!BKV4E-f_c`lGCCPIXMvk7%_)-vqvPR!`;>orOY&8`9y`3X z@q$imjc4II&{l4?b_96!<#*XDMZQTQyt+GFN}>rN9}`EP)-r^4em_c(c^sX}!z8;^ z(7Ny4n=YZ+QqK=eu=K_Nj;=(tBBcRNy|H;Y>%v6@^(%iAf$_2tGxv-8R|bQ~3fISF zcDZ7jBTV&1HSV%?sW&~_NhJMjSEcY$=6Vl+=Hl#7ge-LO!nN4Km)!mQ=i_X6u^l$L z-#}o7kZE}sx0`XZR>-efDRQtU@3ea(dSG9#=~go<1byC&`>^%i|H9*nLVe^*qgkuV@bLZ%%d6_-DGzex-`9x|7@OjFO!;^0NzFT*(p`US{w) zSk`?q2JX-*sSABEqAMhy$7zXb6?>cY_@0XCzyOqzUoThOX55>%1#0RI`<*mAyYkzV zz6u*_FxiyRXJFnnehf$%6#k^ulUO%6!jW_nF3@(TG@#WSkzi$CQI>riN&M(sVQZki zVg%Yg`G*6GyNQ_jQbZSICZ7acU^2l4AD`CXcxm2W)Zoh zB47Fm16J=W=PpPg@0WdSV+tavVD93P^)n*|`g=Y&Kk>nplfnqDA8~DEi;SFZ4KVbC zjX zONNkN(SM)tjHW;Ex?8#`d@=L>t84vEjBU94E+{!l`!OfU2HuI=`jD}ftJC=bCuKt@ zAa172VD0GEFM%UBR2UX1IHy%k{L&!?`J_82^XV?5j8s?}>#Y)fOqFRe=j8Fk?5op} zfp%+bil`lew0`R>H_g_G({V5{8OUU)$7I((_=!oy$Q{WOak^A}ARq%eD`;Y{cpQzK z1+}o~s{qJ&MDhzh{YgUVMsEoC=IFZz`3`L28M zq;}YlG(rM_%(d)Uy%mNv?2Zd%&<`!3GcwoUJ1BGaTgKqKrwwJj2%=+-6+%RDdYrOC z&oa4cAf9W|Qv8QnQifNoJ3OG44;3Ph_$}V~eyic&`Fviau$#%mEr=5KxN%?OQTYz- zB-t|V8`fi2OT>Dq;|E(W8+7VwcB)6s@mdV`7YEgms86vTruY2_Hs{W9&e$g`2Cd$<7 z+nEQEaTYDI)oUQQXQl59SW^5?U_K@jB}Wmh<^=dZm3@24p3tgmd|5XXJOXy=CY%O+ z6JhGzRQYj_tfp?k)UTWL)Sv zEpuF+z2$!qNGg~|x&8)A_^vSe-0P?Is5Fl2v77wk9dwf9hh@+&OPMU!Q0qT6&Kzd@ z+WR}3{u2g?<&FC5M(F0#lz*rrn|8=~0lt1rZdb7MC&xZaC#N<{p`;))+t&OXMlx2a zh&+;SLpG02VNf;LigT&2H}=Pjd}rGyX44p+*AG`SvC>3bSnL=fC?s!o)q4muusUQR zub`RR!-;bI&fZJj-I)ga)Z4>Z6O%{vRJcF)2N}uzG}4}a22YMR1adT3yJ*W2%0DW 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 Date: Tue, 22 Oct 2024 11:59:32 -0700 Subject: [PATCH 10/20] Added 'Create New Project' section; uniformed the use of 'package' instead of 'project' --- docs/tools/code-extension.mdx | 79 +++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 4ab08689c..b7f10aba6 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -12,39 +12,66 @@ The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-dir ## Usage -### Creating a new file +### Creating a New Package -To create a new LF file, go to File > New File... and select `New Lingua Franca File`. When saving the file, save it in a directory called `src` to make sure that generated code is placed conveniently in an adjacent `src-gen` directory. For instance, for a file called `Foo.lf`, the directory structure after building should look something like this: +You can create a new LF package either manually by creating an LF file or by using the [Lingo Package Manager](https://github.com/lf-lang/lingo). + +#### Option 1: Manually Create an LF File +1. Go to File > New File... and select `New Lingua Franca File`. +2. Save the file in a directory called `src` to ensure that generated code is placed in a parallel `src-gen` directory. For example, if your file is called `Foo.lf`, the directory structure after building will look like this: ``` -bin/Foo -src/ -└ Foo.lf -src-gen/Foo +├── LF Package +│ ├── bin/ +│ │ └── Foo +│ ├── src/ +│ │ └── Foo.lf +│ ├── src-gen/ +│ │ ├── Foo/ +... ``` -:::note -We recommend selecting the root of your Lingua Franca package as your workspace in VS Code. This will enable the package explorer. -::: +Additionally, it's important to manually create the `Lingo.toml` file adjacent to the `src` folder in the root directory of the package.. This file serves as a configuration for the package, allowing you to specify the package name, version, and other metadata, including any dependencies you want to install. + +#### Option 2: Create an LF Package Using the Lingo Package Manager +1. After installing and configuring the Lingo Package Manager, create an empty folder with the desired name for the LF package. +2. Open the folder in VS Code. +3. Open the terminal in this folder and run the lingo init command. + +This will set up a new LF package with the following structure: + +``` +├── LF Package +│ ├── src/ +│ │ └── Main.lf +└── └── Lingo.toml # Configuration file for current package +``` + +### Opening an Existing LF package + +To open an existing LF package in VS Code, select the root directory of your Lingua Franca package as your workspace. + +The correct structure of the LF package should look like this: ``` ├── root │ ├── bin/ │ ├── build/ # directory containing packages installed by Lingo Package Manager │ │ ├── lfc_include/ # Directory for storing reusable reactors -│ │ │ ├── installed_library/ +│ │ └── └── installed_library/ │ ├── include/ │ ├── src/ │ │ ├── lib/ # Directory for storing reusable reactors │ │ │ ├── Input.lf # Ex: reactor capturing external inputs (e.g., Microphone, Camera) -│ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) +│ │ └── └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) └── └── Lingo.toml # Configuration file for Lingo Package Manager ``` -If the project structure deviates from the expected format, an error message will appear: + +To correctly enable the [Package Explorer](#package-explorer), we recommend opening VS Code with the true root of your Lingua Franca package as your workspace. If the package structure deviates from the expected format, an error message will appear when opening the Package Explorer: -### Rendering diagrams +### Rendering Diagrams To show the diagram for the currently active Lingua Franca file, click on the diagrams icon at the upper right: @@ -62,7 +89,7 @@ Running the code can also be done from the VS Code terminal by executing the gen The **Lingua Franca Package Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Package Explorer** displays a **Tree View** with the following structure: ``` -├── LF Project +├── LF Package │ ├── Installed Packages │ ├── Local Libraries └── └── Source Files @@ -74,9 +101,9 @@ The **Lingua Franca Package Explorer** can be accessed by clicking on the **LF i - [**Source Files**](#source-files): Contains the LF source files created by the developer, located in the `src` directory. -The **Source Files** section is always present as it reflects the main LF files in the project. However, the **Installed Packages** and **Local Libraries** sections appear only if the respective directories and files exist in the workspace. +The **Source Files** section is always present as it reflects the main LF files in the package. However, the **Installed Packages** and **Local Libraries** sections appear only if the respective directories and files exist in the workspace. -Hovering over the **LF Project** item reveals a terminal icon. Clicking this icon opens a terminal window at the project's root directory, allowing you to execute commands directly within that directory. +Hovering over the **LF Package** item reveals a terminal icon. Clicking this icon opens a terminal window at the package's root directory, allowing you to execute commands directly within that directory. #### Installed Packages @@ -86,10 +113,10 @@ To install libraries: 1. Configure the `Lingo.toml` file with the desired libraries. 2. Run `lingo build` to download the specified dependencies. -Once the libraries are installed, they will appear in the `{project_name}/build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: +Once the libraries are installed, they will appear in the `{package_name}/build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: ``` -├── LF Project +├── LF Package │ ├── Installed Packages │ │ ├── installed_library/ │ │ │ ├── File_1.lf @@ -102,10 +129,10 @@ Once the libraries are installed, they will appear in the `{project_name}/build/ ``` In this structure: -- **LF Project**: Represents the root folder of the main project. +- **LF Package**: Represents the root folder of the main package. - **installed_library**: Represents each library listed in `Lingo.toml`, which contains one or more LF programs featuring reusable reactors. -The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Project folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded libraries (e.g., the `edgeai` library in the example). The **code file** icon denotes an LF program within a library, and the **bracket** icon represents individual reactors inside the LF program. +The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Package folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded libraries (e.g., the `edgeai` library in the example). The **code file** icon denotes an LF program within a library, and the **bracket** icon represents individual reactors inside the LF program. @@ -132,10 +159,10 @@ The **Import Selected Reactor** option is available only if an LF program is ope #### Local Libraries -The **Local Libraries** section lists LF programs created by the developer, located in the `{project_name}/src/lib/` directory. These programs serve as local libraries, containing reusable reactors. The directory structure follows this format: +The **Local Libraries** section lists LF programs created by the developer, located in the `{package_name}/src/lib/` directory. These programs serve as local libraries, containing reusable reactors. The directory structure follows this format: ``` -├── LF Project +├── LF Package ... │ ├── Local Libraries │ │ ├── File_1.lf @@ -147,7 +174,7 @@ The **Local Libraries** section lists LF programs created by the developer, loca ... ``` -The image below illustrates the **Local Libraries** section. In this depiction, the **"project"** icon represents the LF project folder, while the **"code file"** icon represents the LF program, and the **"bracket"** icon denotes individual reactors within the LF program. +The image below illustrates the **Local Libraries** section. In this depiction, the **"project"** icon represents the LF package folder, while the **"code file"** icon represents the LF program, and the **"bracket"** icon denotes individual reactors within the LF program. @@ -173,10 +200,10 @@ The **Import Selected Reactor** option is available only if an LF program is ope #### Source Files -The **Source Files** section lists all LF programs in the `{project_name}/src/` directory. This section provides direct access to the main source files of the project. The hierarchy for this view is straightforward: +The **Source Files** section lists all LF programs in the `{package_name}/src/` directory. This section provides direct access to the main source files of the package. The hierarchy for this view is straightforward: ``` -├── LF Project +├── LF Package ... │ ├── Local Libraries │ │ ├── File_1.lf @@ -185,7 +212,7 @@ The **Source Files** section lists all LF programs in the `{project_name}/src/` ... ``` -Clicking on any of the files will open the corresponding LF program in the editor, allowing developers to quickly navigate to and edit the source code of their project. +Clicking on any of the files will open the corresponding LF program in the editor, allowing developers to quickly navigate to and edit the source code of their package. ## Notes From 7036389309aaf7e673e23198c99d12b916ac27a0 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Tue, 22 Oct 2024 18:48:42 -0700 Subject: [PATCH 11/20] Improved documentation --- docs/tools/code-extension.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index b7f10aba6..7653458b3 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -63,7 +63,8 @@ The correct structure of the LF package should look like this: │ ├── src/ │ │ ├── lib/ # Directory for storing reusable reactors │ │ │ ├── Input.lf # Ex: reactor capturing external inputs (e.g., Microphone, Camera) -│ │ └── └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) +│ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) +│ │ └── Main.lf # Ex: main source file └── └── Lingo.toml # Configuration file for Lingo Package Manager ``` @@ -111,7 +112,7 @@ The **Installed Packages** section lists libraries installed using the [Lingo Pa To install libraries: 1. Configure the `Lingo.toml` file with the desired libraries. -2. Run `lingo build` to download the specified dependencies. +2. Run lingo build in the terminal from the current directory to download the specified dependencies. Once the libraries are installed, they will appear in the `{package_name}/build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: From f6f16626b7561e53043c8b074ea6e046a48f8480 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Wed, 23 Oct 2024 10:38:50 -0700 Subject: [PATCH 12/20] Improved paths in the documentation --- docs/tools/code-extension.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 7653458b3..604217548 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -27,7 +27,7 @@ You can create a new LF package either manually by creating an LF file or by usi │ ├── src/ │ │ └── Foo.lf │ ├── src-gen/ -│ │ ├── Foo/ +│ │ └── Foo/ ... ``` @@ -96,11 +96,11 @@ The **Lingua Franca Package Explorer** can be accessed by clicking on the **LF i └── └── Source Files ``` -- [**Installed Packages**](#installed-packages): Lists libraries installed via the Lingo Package Manager, located in the `build/lfc_include` directory (if any). +- [**Installed Packages**](#installed-packages): Lists libraries installed via the Lingo Package Manager, located in the `./build/lfc_include` directory (if any). -- [**Local Libraries**](#local-libraries): Displays locally defined libraries (e.g., reusable reactors), located in the `src/lib` directory. +- [**Local Libraries**](#local-libraries): Displays locally defined libraries (e.g., reusable reactors), located in the `./src/lib` directory. -- [**Source Files**](#source-files): Contains the LF source files created by the developer, located in the `src` directory. +- [**Source Files**](#source-files): Contains the LF source files created by the developer, located in the `./src/` directory. The **Source Files** section is always present as it reflects the main LF files in the package. However, the **Installed Packages** and **Local Libraries** sections appear only if the respective directories and files exist in the workspace. @@ -114,7 +114,7 @@ To install libraries: 1. Configure the `Lingo.toml` file with the desired libraries. 2. Run lingo build in the terminal from the current directory to download the specified dependencies. -Once the libraries are installed, they will appear in the `{package_name}/build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: +Once the libraries are installed, they will appear in the `./build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: ``` ├── LF Package @@ -160,7 +160,7 @@ The **Import Selected Reactor** option is available only if an LF program is ope #### Local Libraries -The **Local Libraries** section lists LF programs created by the developer, located in the `{package_name}/src/lib/` directory. These programs serve as local libraries, containing reusable reactors. The directory structure follows this format: +The **Local Libraries** section lists LF programs created by the developer, located in the `./src/lib/` directory. These programs serve as local libraries, containing reusable reactors. The directory structure follows this format: ``` ├── LF Package @@ -201,15 +201,15 @@ The **Import Selected Reactor** option is available only if an LF program is ope #### Source Files -The **Source Files** section lists all LF programs in the `{package_name}/src/` directory. This section provides direct access to the main source files of the package. The hierarchy for this view is straightforward: +The **Source Files** section lists all LF programs in the `./src/` directory. This section provides direct access to the main source files of the package. The hierarchy for this view is straightforward: ``` ├── LF Package ... │ ├── Local Libraries │ │ ├── File_1.lf -│ │ ├── File_1.lf -│ │ ├── File_1.lf +│ │ ├── File_2.lf +│ │ ├── File_3.lf ... ``` From 5b63b6759e25675a6b73f4fc82ba4e9b37290f97 Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Mon, 28 Oct 2024 06:27:02 +0100 Subject: [PATCH 13/20] Apply suggestions from code review Co-authored-by: Marten Lohstroh --- docs/tools/code-extension.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 604217548..d2c47e639 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -21,7 +21,7 @@ You can create a new LF package either manually by creating an LF file or by usi 2. Save the file in a directory called `src` to ensure that generated code is placed in a parallel `src-gen` directory. For example, if your file is called `Foo.lf`, the directory structure after building will look like this: ``` -├── LF Package +├── . │ ├── bin/ │ │ └── Foo │ ├── src/ @@ -31,7 +31,7 @@ You can create a new LF package either manually by creating an LF file or by usi ... ``` -Additionally, it's important to manually create the `Lingo.toml` file adjacent to the `src` folder in the root directory of the package.. This file serves as a configuration for the package, allowing you to specify the package name, version, and other metadata, including any dependencies you want to install. +If you manually create the `Lingo.toml` file, place it adjacent to the `src` folder in the root directory of the package. This file serves as a configuration for the package, allowing you to specify the package name, version, and other metadata, including any dependencies you want to install. #### Option 2: Create an LF Package Using the Lingo Package Manager 1. After installing and configuring the Lingo Package Manager, create an empty folder with the desired name for the LF package. @@ -41,7 +41,7 @@ Additionally, it's important to manually create the `Lingo.toml` file adjacent t This will set up a new LF package with the following structure: ``` -├── LF Package +├── . │ ├── src/ │ │ └── Main.lf └── └── Lingo.toml # Configuration file for current package @@ -54,7 +54,7 @@ To open an existing LF package in VS Code, select the root directory of your Lin The correct structure of the LF package should look like this: ``` -├── root +├── . │ ├── bin/ │ ├── build/ # directory containing packages installed by Lingo Package Manager │ │ ├── lfc_include/ # Directory for storing reusable reactors @@ -68,7 +68,7 @@ The correct structure of the LF package should look like this: └── └── Lingo.toml # Configuration file for Lingo Package Manager ``` -To correctly enable the [Package Explorer](#package-explorer), we recommend opening VS Code with the true root of your Lingua Franca package as your workspace. If the package structure deviates from the expected format, an error message will appear when opening the Package Explorer: +To enable the [Package Explorer](#package-explorer), the workspace of your VS Code editor must be the root of a Lingua Franca package. If the workspace is not recognized as a valid Lingua Franca package, an error message will appear when opening the Package Explorer: @@ -90,7 +90,7 @@ Running the code can also be done from the VS Code terminal by executing the gen The **Lingua Franca Package Explorer** can be accessed by clicking on the **LF icon** in the activity bar on the left side of the screen. Once opened, the **Package Explorer** displays a **Tree View** with the following structure: ``` -├── LF Package +├── │ ├── Installed Packages │ ├── Local Libraries └── └── Source Files @@ -163,7 +163,7 @@ The **Import Selected Reactor** option is available only if an LF program is ope The **Local Libraries** section lists LF programs created by the developer, located in the `./src/lib/` directory. These programs serve as local libraries, containing reusable reactors. The directory structure follows this format: ``` -├── LF Package +├── ... │ ├── Local Libraries │ │ ├── File_1.lf @@ -204,7 +204,7 @@ The **Import Selected Reactor** option is available only if an LF program is ope The **Source Files** section lists all LF programs in the `./src/` directory. This section provides direct access to the main source files of the package. The hierarchy for this view is straightforward: ``` -├── LF Package +├── ... │ ├── Local Libraries │ │ ├── File_1.lf @@ -213,7 +213,7 @@ The **Source Files** section lists all LF programs in the `./src/` directory. Th ... ``` -Clicking on any of the files will open the corresponding LF program in the editor, allowing developers to quickly navigate to and edit the source code of their package. +Clicking on any of the files will open the corresponding LF program in the editor, providing a way to quickly navigate and edit the source code of a package. ## Notes From ed2eb0883fa659deaa7fdb9bce3c1d6785e407f6 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Mon, 28 Oct 2024 10:45:24 -0700 Subject: [PATCH 14/20] Improved documentation; Added Glossary page --- docs/glossary/glossary.mdx | 24 +++++++++++++ docs/sidebars.ts | 4 +++ docs/tools/code-extension.mdx | 64 +++++++++++++++++------------------ 3 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 docs/glossary/glossary.mdx diff --git a/docs/glossary/glossary.mdx b/docs/glossary/glossary.mdx new file mode 100644 index 000000000..7c2f902f2 --- /dev/null +++ b/docs/glossary/glossary.mdx @@ -0,0 +1,24 @@ +--- +title: Glossary +description: Glossary of terms used in the Lingua Franca documentation. +--- + +# Glossary + +Glossary of terms used in the Lingua Franca (LF) documentation. + +### LF File +A source file with the `.lf` extension, representing a Lingua Franca (LF) program. + +### Package +A collection of LF source files and directories, along with a `Lingo.toml` manifest file that defines the package configuration. Every package must include an `src/` directory containing the LF source files. +The **package root** is the top-level directory where both the `Lingo.toml` file and the `src/` directory reside, serving as the main directory for the package. + +### Project +Another term for a [package](#package). + +### Library File +An LF file containing one or more reactors intended for reuse, designed to be imported into multiple LF files. + +### Package Manager +A software tool that automates the installation, configuration, and management of packages. In the LF ecosystem, the `lingo` package manager is used to manage LF packages and dependencies. \ No newline at end of file diff --git a/docs/sidebars.ts b/docs/sidebars.ts index c558ad442..42ef82c92 100644 --- a/docs/sidebars.ts +++ b/docs/sidebars.ts @@ -237,6 +237,10 @@ const sidebars: SidebarsConfig = { "id": "developer/website-development" } ] + }, + { + "type": "doc", + "id": "glossary/glossary" } ] }; diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index d2c47e639..3062e991d 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -14,9 +14,23 @@ The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-dir ### Creating a New Package -You can create a new LF package either manually by creating an LF file or by using the [Lingo Package Manager](https://github.com/lf-lang/lingo). +You can create a new LF [package](../glossary/glossary.mdx#package) either manually by creating an LF file or by using the [Lingo Package Manager](https://github.com/lf-lang/lingo). -#### Option 1: Manually Create an LF File +#### Option 1: Create an LF Package Using the Lingo Package Manager +1. After [installing the Lingo Package Manager](https://www.lf-lang.org/docs/installation#lingo), create an empty directory with the desired name for your LF package. +2. Open the folder in VS Code. +3. Open the terminal in this folder and run the lingo init command. + +This will set up a new LF package with the following structure: + +``` +├── . +│ ├── src/ +│ │ └── Main.lf +└── └── Lingo.toml # Configuration file for current package +``` + +#### Option 2: Manually Create an [LF File](../glossary/glossary.mdx#lf-file) 1. Go to File > New File... and select `New Lingua Franca File`. 2. Save the file in a directory called `src` to ensure that generated code is placed in a parallel `src-gen` directory. For example, if your file is called `Foo.lf`, the directory structure after building will look like this: @@ -33,20 +47,6 @@ You can create a new LF package either manually by creating an LF file or by usi If you manually create the `Lingo.toml` file, place it adjacent to the `src` folder in the root directory of the package. This file serves as a configuration for the package, allowing you to specify the package name, version, and other metadata, including any dependencies you want to install. -#### Option 2: Create an LF Package Using the Lingo Package Manager -1. After installing and configuring the Lingo Package Manager, create an empty folder with the desired name for the LF package. -2. Open the folder in VS Code. -3. Open the terminal in this folder and run the lingo init command. - -This will set up a new LF package with the following structure: - -``` -├── . -│ ├── src/ -│ │ └── Main.lf -└── └── Lingo.toml # Configuration file for current package -``` - ### Opening an Existing LF package To open an existing LF package in VS Code, select the root directory of your Lingua Franca package as your workspace. @@ -58,7 +58,7 @@ The correct structure of the LF package should look like this: │ ├── bin/ │ ├── build/ # directory containing packages installed by Lingo Package Manager │ │ ├── lfc_include/ # Directory for storing reusable reactors -│ │ └── └── installed_library/ +│ │ └── └── installed_package/ │ ├── include/ │ ├── src/ │ │ ├── lib/ # Directory for storing reusable reactors @@ -96,30 +96,30 @@ The **Lingua Franca Package Explorer** can be accessed by clicking on the **LF i └── └── Source Files ``` -- [**Installed Packages**](#installed-packages): Lists libraries installed via the Lingo Package Manager, located in the `./build/lfc_include` directory (if any). +- [**Installed Packages**](#installed-packages): Lists packages installed via the Lingo Package Manager, located in the `./build/lfc_include` directory (if any). -- [**Local Libraries**](#local-libraries): Displays locally defined libraries (e.g., reusable reactors), located in the `./src/lib` directory. +- [**Local Libraries**](#local-libraries): Displays locally defined [library files](../glossary/glossary.mdx#library-file) (e.g., reusable reactors), located in the `./src/lib` directory. - [**Source Files**](#source-files): Contains the LF source files created by the developer, located in the `./src/` directory. The **Source Files** section is always present as it reflects the main LF files in the package. However, the **Installed Packages** and **Local Libraries** sections appear only if the respective directories and files exist in the workspace. -Hovering over the **LF Package** item reveals a terminal icon. Clicking this icon opens a terminal window at the package's root directory, allowing you to execute commands directly within that directory. +Hovering over the **\** item reveals a terminal icon. Clicking this icon opens a terminal window at the package's root directory, allowing you to execute commands directly within that directory. #### Installed Packages -The **Installed Packages** section lists libraries installed using the [Lingo Package Manager](https://github.com/lf-lang/lingo). Developers can use the Lingo Package Manager to retrieve and install LF programs from repositories such as the [Lingua Franca Community Organization](https://github.com/LF-Community). +The **Installed Packages** section lists packages installed using the [Lingo Package Manager](https://github.com/lf-lang/lingo). Developers can use the Lingo Package Manager to retrieve and install LF programs from repositories such as the [Lingua Franca Community Organization](https://github.com/LF-Community). -To install libraries: -1. Configure the `Lingo.toml` file with the desired libraries. +To install packages: +1. Configure the `Lingo.toml` file with the desired package. 2. Run lingo build in the terminal from the current directory to download the specified dependencies. -Once the libraries are installed, they will appear in the `./build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: +Once the packages are installed, they will appear in the `./build/lfc_include/` directory. The **Installed Packages** section will then be structured as follows: ``` -├── LF Package +├── │ ├── Installed Packages -│ │ ├── installed_library/ +│ │ ├── installed_package/ │ │ │ ├── File_1.lf │ │ │ │ ├── Rusable_Reactor_1.lf │ │ │ │ ├── Rusable_Reactor_2.lf @@ -130,17 +130,17 @@ Once the libraries are installed, they will appear in the `./build/lfc_include/` ``` In this structure: -- **LF Package**: Represents the root folder of the main package. -- **installed_library**: Represents each library listed in `Lingo.toml`, which contains one or more LF programs featuring reusable reactors. +- **\**: Represents the root folder of the main package. +- **installed_package**: Represents each package listed in `Lingo.toml`, which contains one or more LF projects featuring reusable reactors. -The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Package folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded libraries (e.g., the `edgeai` library in the example). The **code file** icon denotes an LF program within a library, and the **bracket** icon represents individual reactors inside the LF program. +The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Package folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded package (e.g., the `edgeai` package in the example). The **code file** icon denotes an LF program within a package, and the **bracket** icon represents individual reactors inside the LF program. The hierarchy categorizes tree items into the following types: -1. **`library-root`**: Refers to the root folder of each downloaded library. -2. **`file`**: Represents an LF program within the library. +1. **`package-root`**: Refers to the root folder of each downloaded package. +2. **`file`**: Represents an LF program within the package. 3. **`reactor`**: Refers to individual reactors within the LF program. When focusing on the **Installed Packages** section, an `edit` command becomes available. Clicking it opens the `Lingo.toml` file in the editor for configuration changes. The following actions are available for items in the **Installed Packages** section: @@ -206,7 +206,7 @@ The **Source Files** section lists all LF programs in the `./src/` directory. Th ``` ├── ... -│ ├── Local Libraries +│ ├── Source Files │ │ ├── File_1.lf │ │ ├── File_2.lf │ │ ├── File_3.lf From 6fa21f19229d1ced8713f357af6d34e67fbdf85f Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Mon, 28 Oct 2024 20:36:23 +0100 Subject: [PATCH 15/20] Apply suggestions from code review Co-authored-by: Marten Lohstroh --- docs/glossary/glossary.mdx | 8 +++++--- docs/tools/code-extension.mdx | 14 +++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/glossary/glossary.mdx b/docs/glossary/glossary.mdx index 7c2f902f2..db1745d8b 100644 --- a/docs/glossary/glossary.mdx +++ b/docs/glossary/glossary.mdx @@ -12,13 +12,15 @@ A source file with the `.lf` extension, representing a Lingua Franca (LF) progra ### Package A collection of LF source files and directories, along with a `Lingo.toml` manifest file that defines the package configuration. Every package must include an `src/` directory containing the LF source files. -The **package root** is the top-level directory where both the `Lingo.toml` file and the `src/` directory reside, serving as the main directory for the package. + +### Package Root +The **package root** is the top-level directory of a package where both the `Lingo.toml` file and the `src/` directory reside. ### Project -Another term for a [package](#package). +Another term for a [package](#package) that is under development. Each [LF file](#lf-file) is assumed to reside in a package, meaning it is located somewhere in the file system in a directory called `src`, in some directory that serves as the (package root)[#package-root]. ### Library File -An LF file containing one or more reactors intended for reuse, designed to be imported into multiple LF files. +An LF file containing one or more reactors intended for reuse, designed to be imported into other LF files. ### Package Manager A software tool that automates the installation, configuration, and management of packages. In the LF ecosystem, the `lingo` package manager is used to manage LF packages and dependencies. \ No newline at end of file diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 3062e991d..f583b9b1b 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -12,12 +12,12 @@ The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-dir ## Usage -### Creating a New Package +### Creating a New Project -You can create a new LF [package](../glossary/glossary.mdx#package) either manually by creating an LF file or by using the [Lingo Package Manager](https://github.com/lf-lang/lingo). +You can create a new LF [project](../glossary/glossary.mdx#project) either manually by creating an LF file or by using the [Lingo Package Manager](https://github.com/lf-lang/lingo). -#### Option 1: Create an LF Package Using the Lingo Package Manager -1. After [installing the Lingo Package Manager](https://www.lf-lang.org/docs/installation#lingo), create an empty directory with the desired name for your LF package. +#### Option 1: Create an Project Using the Lingo Package Manager +1. After [installing the Lingo Package Manager](https://www.lf-lang.org/docs/installation#lingo), create an empty directory to serve as the root of your new package. 2. Open the folder in VS Code. 3. Open the terminal in this folder and run the lingo init command. @@ -30,7 +30,7 @@ This will set up a new LF package with the following structure: └── └── Lingo.toml # Configuration file for current package ``` -#### Option 2: Manually Create an [LF File](../glossary/glossary.mdx#lf-file) +#### Option 2: Create a new [LF File](../glossary/glossary.mdx#lf-file) 1. Go to File > New File... and select `New Lingua Franca File`. 2. Save the file in a directory called `src` to ensure that generated code is placed in a parallel `src-gen` directory. For example, if your file is called `Foo.lf`, the directory structure after building will look like this: @@ -47,9 +47,9 @@ This will set up a new LF package with the following structure: If you manually create the `Lingo.toml` file, place it adjacent to the `src` folder in the root directory of the package. This file serves as a configuration for the package, allowing you to specify the package name, version, and other metadata, including any dependencies you want to install. -### Opening an Existing LF package +### Opening an Existing LF project -To open an existing LF package in VS Code, select the root directory of your Lingua Franca package as your workspace. +To open an existing LF project in VS Code, select the [package root](../glossary/glossary.mdx#package-root) as your workspace. The correct structure of the LF package should look like this: From 942770b1f8df91b74e34c64b0bc9a2185ac86f80 Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Mon, 28 Oct 2024 22:38:05 +0100 Subject: [PATCH 16/20] Update docs/tools/code-extension.mdx Co-authored-by: Marten Lohstroh --- docs/tools/code-extension.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index f583b9b1b..5d726f51f 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -131,7 +131,7 @@ Once the packages are installed, they will appear in the `./build/lfc_include/` In this structure: - **\**: Represents the root folder of the main package. -- **installed_package**: Represents each package listed in `Lingo.toml`, which contains one or more LF projects featuring reusable reactors. +- ****: Represents each package listed in `Lingo.toml`, which contains one or more LF projects featuring reusable reactors. The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Package folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded package (e.g., the `edgeai` package in the example). The **code file** icon denotes an LF program within a package, and the **bracket** icon represents individual reactors inside the LF program. From 0b893299b21b927e5d0d73a094b04b778fb4c3e0 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Mon, 28 Oct 2024 19:24:35 -0700 Subject: [PATCH 17/20] Improved documentation; Moved Project Structure to Glossary page --- docs/glossary/glossary.mdx | 42 ++++++++++++++++++++++++++++---- docs/tools/code-extension.mdx | 45 ++++++++++------------------------- 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/docs/glossary/glossary.mdx b/docs/glossary/glossary.mdx index db1745d8b..694530a69 100644 --- a/docs/glossary/glossary.mdx +++ b/docs/glossary/glossary.mdx @@ -10,17 +10,49 @@ Glossary of terms used in the Lingua Franca (LF) documentation. ### LF File A source file with the `.lf` extension, representing a Lingua Franca (LF) program. +### Library File +An LF file containing one or more reactors intended for reuse, designed to be imported into other LF files. + ### Package A collection of LF source files and directories, along with a `Lingo.toml` manifest file that defines the package configuration. Every package must include an `src/` directory containing the LF source files. +### Package Manager +A software tool that automates the installation, configuration, and management of packages. In the LF ecosystem, the `lingo` package manager is used to manage LF packages and dependencies. + ### Package Root The **package root** is the top-level directory of a package where both the `Lingo.toml` file and the `src/` directory reside. ### Project Another term for a [package](#package) that is under development. Each [LF file](#lf-file) is assumed to reside in a package, meaning it is located somewhere in the file system in a directory called `src`, in some directory that serves as the (package root)[#package-root]. -### Library File -An LF file containing one or more reactors intended for reuse, designed to be imported into other LF files. - -### Package Manager -A software tool that automates the installation, configuration, and management of packages. In the LF ecosystem, the `lingo` package manager is used to manage LF packages and dependencies. \ No newline at end of file +### Project Structure +The structure of an LF project should follow the directory layout below: + +``` +├── . +│ ├── bin/ # Directory for storing generated code +│ ├── build/ # Directory containing packages installed by the Lingo Package Manager +│ │ ├── lfc_include/ # Directory for storing reusable reactors +│ │ └── / # Directory containing the installed package +│ ├── include/ # Directory for storing header files +│ ├── src/ # Directory containing LF source files +│ │ ├── lib/ # Directory for storing reusable reactors +│ │ │ ├── Input.lf # Ex: reactor capturing external inputs (e.g., Microphone, Camera) +│ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) +│ │ └── Main.lf # Ex: main source file +└── └── Lingo.toml # Configuration file for Lingo Package Manager +``` + +- **Mandatory Directories and Files:** + - `src/`: This folder must contain at least one `.lf` source file. + - `Lingo.toml`: This is the required configuration file. + +- **Automatically Generated Directories:** + - `bin/`: This directory is created during the build process of source files. It is used to store generated code. + - `build/`: This folder is automatically generated when installing packages managed by the Lingo Package Manager. + - `include/`: This directory is autogenerated for header files. + +- **User-Created Directory:** + - `src/lib/`: This folder is for library files and should be created by the user as necessary. + +This directory structure is essential for enabling the Package Explorer feature in the [VS Code Extension](tools/code-extension.mdx#package-explorer), streamlining project management and development processes. \ No newline at end of file diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 5d726f51f..cbb8d7f9a 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -16,7 +16,7 @@ The Lingua Franca extension for Visual Studio Code (VS Code) provides syntax-dir You can create a new LF [project](../glossary/glossary.mdx#project) either manually by creating an LF file or by using the [Lingo Package Manager](https://github.com/lf-lang/lingo). -#### Option 1: Create an Project Using the Lingo Package Manager +#### Option 1: Create a Project Using the Lingo Package Manager 1. After [installing the Lingo Package Manager](https://www.lf-lang.org/docs/installation#lingo), create an empty directory to serve as the root of your new package. 2. Open the folder in VS Code. 3. Open the terminal in this folder and run the lingo init command. @@ -30,7 +30,7 @@ This will set up a new LF package with the following structure: └── └── Lingo.toml # Configuration file for current package ``` -#### Option 2: Create a new [LF File](../glossary/glossary.mdx#lf-file) +#### Option 2: Create a New [LF File](../glossary/glossary.mdx#lf-file) 1. Go to File > New File... and select `New Lingua Franca File`. 2. Save the file in a directory called `src` to ensure that generated code is placed in a parallel `src-gen` directory. For example, if your file is called `Foo.lf`, the directory structure after building will look like this: @@ -47,28 +47,9 @@ This will set up a new LF package with the following structure: If you manually create the `Lingo.toml` file, place it adjacent to the `src` folder in the root directory of the package. This file serves as a configuration for the package, allowing you to specify the package name, version, and other metadata, including any dependencies you want to install. -### Opening an Existing LF project +### Opening an Existing LF Project -To open an existing LF project in VS Code, select the [package root](../glossary/glossary.mdx#package-root) as your workspace. - -The correct structure of the LF package should look like this: - -``` -├── . -│ ├── bin/ -│ ├── build/ # directory containing packages installed by Lingo Package Manager -│ │ ├── lfc_include/ # Directory for storing reusable reactors -│ │ └── └── installed_package/ -│ ├── include/ -│ ├── src/ -│ │ ├── lib/ # Directory for storing reusable reactors -│ │ │ ├── Input.lf # Ex: reactor capturing external inputs (e.g., Microphone, Camera) -│ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) -│ │ └── Main.lf # Ex: main source file -└── └── Lingo.toml # Configuration file for Lingo Package Manager -``` - -To enable the [Package Explorer](#package-explorer), the workspace of your VS Code editor must be the root of a Lingua Franca package. If the workspace is not recognized as a valid Lingua Franca package, an error message will appear when opening the Package Explorer: +To open an existing LF project in VS Code, select the [package root](../glossary/glossary.mdx#package-root) as your workspace. Ensure that the selected project adheres to the correct [project structure](../glossary/glossary.mdx#project-structure) to enable the [Package Explorer](#package-explorer). If the workspace is not recognized as a valid Lingua Franca package, an error message will appear when you attempt to open the Package Explorer: @@ -119,7 +100,7 @@ Once the packages are installed, they will appear in the `./build/lfc_include/` ``` ├── │ ├── Installed Packages -│ │ ├── installed_package/ +│ │ ├── │ │ │ ├── File_1.lf │ │ │ │ ├── Rusable_Reactor_1.lf │ │ │ │ ├── Rusable_Reactor_2.lf @@ -131,7 +112,7 @@ Once the packages are installed, they will appear in the `./build/lfc_include/` In this structure: - **\**: Represents the root folder of the main package. -- ****: Represents each package listed in `Lingo.toml`, which contains one or more LF projects featuring reusable reactors. +- **\**: Represents each package listed in `Lingo.toml`, which contains one or more LF projects featuring reusable reactors. The image below shows a visual representation of the **Installed Packages** section. The **project** icon indicates the LF Package folder (e.g., `AudioClassification`), while the **root-folder** icon represents the downloaded package (e.g., the `edgeai` package in the example). The **code file** icon denotes an LF program within a package, and the **bracket** icon represents individual reactors inside the LF program. @@ -139,9 +120,9 @@ The image below shows a visual representation of the **Installed Packages** sect The hierarchy categorizes tree items into the following types: -1. **`package-root`**: Refers to the root folder of each downloaded package. -2. **`file`**: Represents an LF program within the package. -3. **`reactor`**: Refers to individual reactors within the LF program. +1. **package-root**: Refers to the root folder of each downloaded package. +2. **file**: Represents an LF file within the package. +3. **reactor**: Refers to individual reactors within the LF file. When focusing on the **Installed Packages** section, an `edit` command becomes available. Clicking it opens the `Lingo.toml` file in the editor for configuration changes. The following actions are available for items in the **Installed Packages** section: @@ -170,8 +151,8 @@ The **Local Libraries** section lists LF programs created by the developer, loca │ │ │ ├── Rusable_Reactor_1.lf │ │ │ ├── Rusable_Reactor_2.lf │ │ ├── File_2.lf -│ │ │ │ ├── Rusable_Reactor_1.lf -│ │ │ │ ├── Rusable_Reactor_2.lf +│ │ │ ├── Rusable_Reactor_1.lf +│ │ │ ├── Rusable_Reactor_2.lf ... ``` @@ -181,8 +162,8 @@ The image below illustrates the **Local Libraries** section. In this depiction, The hierarchy categorizes tree items into two types: -1. **`file`**: Represents the LF program. -2. **`reactor`**: Represents a reactor within the LF program. +1. **file**: Represents the LF file. +2. **reactor**: Represents a reactor within the LF file. Actions for **Local Libraries** are similar to those in the [**Installed Packages**](#installed-packages) section: From f42f9fcb27b7e1c587cbb22f08c635f331ec7f00 Mon Sep 17 00:00:00 2001 From: vinzbarbuto Date: Mon, 28 Oct 2024 23:08:13 -0700 Subject: [PATCH 18/20] Improved documentation --- docs/glossary/glossary.mdx | 12 +++++++----- docs/tools/code-extension.mdx | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/glossary/glossary.mdx b/docs/glossary/glossary.mdx index 694530a69..deb8c1412 100644 --- a/docs/glossary/glossary.mdx +++ b/docs/glossary/glossary.mdx @@ -30,7 +30,7 @@ The structure of an LF project should follow the directory layout below: ``` ├── . -│ ├── bin/ # Directory for storing generated code +│ ├── bin/ # Directory for storing binary executables │ ├── build/ # Directory containing packages installed by the Lingo Package Manager │ │ ├── lfc_include/ # Directory for storing reusable reactors │ │ └── / # Directory containing the installed package @@ -40,6 +40,7 @@ The structure of an LF project should follow the directory layout below: │ │ │ ├── Input.lf # Ex: reactor capturing external inputs (e.g., Microphone, Camera) │ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) │ │ └── Main.lf # Ex: main source file +│ ├── src-gen/ # Directory for storing generated code (or fed-gen if a federated program) └── └── Lingo.toml # Configuration file for Lingo Package Manager ``` @@ -48,10 +49,11 @@ The structure of an LF project should follow the directory layout below: - `Lingo.toml`: This is the required configuration file. - **Automatically Generated Directories:** - - `bin/`: This directory is created during the build process of source files. It is used to store generated code. - - `build/`: This folder is automatically generated when installing packages managed by the Lingo Package Manager. - - `include/`: This directory is autogenerated for header files. - + - `bin/`: Created during the build process to store binary executables. + - `build/`: Generated automatically when installing packages managed by the Lingo Package Manager. + - `include/`: Autogenerated to store header files. + - `src-gen/` (or `fed-gen` for federated programs): Autogenerated to store generated code. + - **User-Created Directory:** - `src/lib/`: This folder is for library files and should be created by the user as necessary. diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index cbb8d7f9a..93d10f7f3 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -120,7 +120,7 @@ The image below shows a visual representation of the **Installed Packages** sect The hierarchy categorizes tree items into the following types: -1. **package-root**: Refers to the root folder of each downloaded package. +1. **package root**: Refers to the root folder of each downloaded package. 2. **file**: Represents an LF file within the package. 3. **reactor**: Refers to individual reactors within the LF file. From e544f5387605e099843add76aa59adcb4137a9cf Mon Sep 17 00:00:00 2001 From: Vincenzo Barbuto <63100303+vinzbarbuto@users.noreply.github.com> Date: Tue, 29 Oct 2024 18:07:31 +0100 Subject: [PATCH 19/20] Update docs/glossary/glossary.mdx Co-authored-by: Marten Lohstroh --- docs/glossary/glossary.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/glossary/glossary.mdx b/docs/glossary/glossary.mdx index deb8c1412..031270352 100644 --- a/docs/glossary/glossary.mdx +++ b/docs/glossary/glossary.mdx @@ -40,7 +40,8 @@ The structure of an LF project should follow the directory layout below: │ │ │ ├── Input.lf # Ex: reactor capturing external inputs (e.g., Microphone, Camera) │ │ │ └── ComputerVision.lf # Ex: reactor performing computer vision tasks (e.g., object detection, face recognition) │ │ └── Main.lf # Ex: main source file -│ ├── src-gen/ # Directory for storing generated code (or fed-gen if a federated program) +│ ├── fed-gen/ # Directory for storing generated code for federated programs +│ ├── src-gen/ # Directory for storing generated code for single-process programs └── └── Lingo.toml # Configuration file for Lingo Package Manager ``` From d4ccc948ac231ee07f0f92fdcc8642a35c62b518 Mon Sep 17 00:00:00 2001 From: Marten Lohstroh Date: Tue, 29 Oct 2024 10:25:57 -0700 Subject: [PATCH 20/20] Update code-extension.mdx --- docs/tools/code-extension.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tools/code-extension.mdx b/docs/tools/code-extension.mdx index 93d10f7f3..3440ab7b3 100644 --- a/docs/tools/code-extension.mdx +++ b/docs/tools/code-extension.mdx @@ -89,7 +89,7 @@ Hovering over the **\** item reveals a terminal icon. Clicking th #### Installed Packages -The **Installed Packages** section lists packages installed using the [Lingo Package Manager](https://github.com/lf-lang/lingo). Developers can use the Lingo Package Manager to retrieve and install LF programs from repositories such as the [Lingua Franca Community Organization](https://github.com/LF-Community). +The **Installed Packages** section lists libraries installed using the [Lingo package manager](https://github.com/lf-lang/lingo). Developers can use the Lingo package manager to retrieve and install LF programs from arbitrary GitHub repositories. A collection of useful packages can be found in the [Lingua Franca Packages](https://github.com/lf-pkgs) GitHub organization. To install packages: 1. Configure the `Lingo.toml` file with the desired package. @@ -200,4 +200,4 @@ Clicking on any of the files will open the corresponding LF program in the edito ### For Python Users -Users who edit LF programs with a Python target will benefit the most from Python linting by installing Pylint 2.12.2 or later. \ No newline at end of file +Users who edit LF programs with a Python target will benefit the most from Python linting by installing Pylint 2.12.2 or later.