From 423dfdff6ca2e728a6b4003773c7849f36f9b63b Mon Sep 17 00:00:00 2001 From: Mixone-FinallyHere Date: Tue, 11 Mar 2025 09:02:35 +0100 Subject: [PATCH] merge --- .github/workflows/base-build-nightly.yaml | 57 + DS_Map/DSPRE.csproj | 12 +- DS_Map/Editors/LearnsetEditor.Designer.cs | 36 +- DS_Map/Editors/LearnsetEditor.cs | 32 +- DS_Map/Editors/PokemonEditor.Designer.cs | 24 +- DS_Map/Editors/PokemonEditor.resx | 1557 ++++++++++++++++ DS_Map/Editors/ScriptEditor.Designer.cs | 1423 ++++++--------- DS_Map/Editors/ScriptEditor.cs | 385 ++-- DS_Map/Main Window.Designer.cs | 242 ++- DS_Map/Main Window.cs | 70 +- DS_Map/Main Window.resx | 1600 ++++++++--------- DS_Map/PatchToolboxDialog.cs | 68 +- DS_Map/ROMFiles/LearnsetData.cs | 1 + DS_Map/ROMFiles/ScriptActionContainer.cs | 13 - DS_Map/ROMFiles/ScriptCommandContainer.cs | 25 - DS_Map/ROMFiles/ScriptFile.cs | 1194 +++++------- DS_Map/Resources/ScriptDatabase.cs | 12 +- DS_Map/RomInfo.cs | 2 +- .../LevelScriptTrigger.cs | 0 .../MapScreenLoadTrigger.cs | 0 DS_Map/{ROMFiles => Script}/ScriptAction.cs | 0 DS_Map/{ROMFiles => Script}/ScriptCommand.cs | 127 +- DS_Map/Script/ScriptCommandPosition.cs | 20 + DS_Map/Script/ScriptLabeledSection.cs | 21 + DS_Map/Script/ScriptParameter.cs | 45 + .../{ROMFiles => Script}/ScriptReference.cs | 0 .../VariableValueTrigger.cs | 0 README.md | 2 +- 28 files changed, 4007 insertions(+), 2961 deletions(-) create mode 100644 .github/workflows/base-build-nightly.yaml delete mode 100644 DS_Map/ROMFiles/ScriptActionContainer.cs delete mode 100644 DS_Map/ROMFiles/ScriptCommandContainer.cs rename DS_Map/{ROMFiles => Script}/LevelScriptTrigger.cs (100%) rename DS_Map/{ROMFiles => Script}/MapScreenLoadTrigger.cs (100%) rename DS_Map/{ROMFiles => Script}/ScriptAction.cs (100%) rename DS_Map/{ROMFiles => Script}/ScriptCommand.cs (77%) create mode 100644 DS_Map/Script/ScriptCommandPosition.cs create mode 100644 DS_Map/Script/ScriptLabeledSection.cs create mode 100644 DS_Map/Script/ScriptParameter.cs rename DS_Map/{ROMFiles => Script}/ScriptReference.cs (100%) rename DS_Map/{ROMFiles => Script}/VariableValueTrigger.cs (100%) diff --git a/.github/workflows/base-build-nightly.yaml b/.github/workflows/base-build-nightly.yaml new file mode 100644 index 0000000..5f63397 --- /dev/null +++ b/.github/workflows/base-build-nightly.yaml @@ -0,0 +1,57 @@ +name: DSPRE Canary Build + +on: + push: + branches: + - main # Trigger only on pushes to the main branch + +permissions: + contents: write + +env: + SOLUTION_FILE_PATH: DS_Map.sln + BUILD_CONFIGURATION: Release + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v2 + + - name: Add MSBuild to PATH + uses: microsoft/setup-msbuild@v1.0.2 + + - name: Restore NuGet packages + working-directory: ${{env.GITHUB_WORKSPACE}} + run: nuget restore ${{env.SOLUTION_FILE_PATH}} + + - name: Build DSPRE + working-directory: ${{env.GITHUB_WORKSPACE}} + run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}} + + - name: Zip Release Files + run: Compress-Archive -Path ${{env.GITHUB_WORKSPACE}}DS_Map\bin\Release -DestinationPath DSPRE-canary.zip + + - name: Fetch tags + run: git fetch --prune --unshallow --tags + + - name: Delete previous release + run: | + gh release delete --yes canary + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Get current date + id: date + run: echo "::set-output name=date::$(date +'%Y-%m-%d')" + + - name: Create new release + uses: softprops/action-gh-release@v2 + with: + tag_name: canary + name: DSPRE Canary Build ${{ steps.date.outputs.date }} + files: DSPRE-canary.zip + token: ${{ secrets.GITHUB_TOKEN }} + prerelease: true + generate_release_notes: true diff --git a/DS_Map/DSPRE.csproj b/DS_Map/DSPRE.csproj index 20c9c83..83544d6 100644 --- a/DS_Map/DSPRE.csproj +++ b/DS_Map/DSPRE.csproj @@ -279,12 +279,11 @@ - - - - - - + + + + + @@ -301,6 +300,7 @@ BuildingEditor.cs + Form diff --git a/DS_Map/Editors/LearnsetEditor.Designer.cs b/DS_Map/Editors/LearnsetEditor.Designer.cs index ed87fc6..6aaf865 100644 --- a/DS_Map/Editors/LearnsetEditor.Designer.cs +++ b/DS_Map/Editors/LearnsetEditor.Designer.cs @@ -42,6 +42,7 @@ this.moveInputComboBox = new DSPRE.InputComboBox(); this.statusLabel = new System.Windows.Forms.Label(); this.pokemonNameInputComboBox = new DSPRE.InputComboBox(); + this.entryCountLabel = new System.Windows.Forms.Label(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pokemonPictureBox)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.monNumberNumericUpDown)).BeginInit(); @@ -162,6 +163,7 @@ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tableLayoutPanel3.Controls.Add(this.entryCountLabel, 0, 5); this.tableLayoutPanel3.Controls.Add(this.descriptorLabel, 0, 1); this.tableLayoutPanel3.Controls.Add(this.addMoveButton, 0, 4); this.tableLayoutPanel3.Controls.Add(this.deleteMoveButton, 2, 4); @@ -179,9 +181,9 @@ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 34.50088F)); this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 65.49912F)); this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 165F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 38F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 11F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 144F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F)); this.tableLayoutPanel3.Size = new System.Drawing.Size(226, 357); this.tableLayoutPanel3.TabIndex = 0; // @@ -202,10 +204,10 @@ this.addMoveButton.Enabled = false; this.addMoveButton.Image = global::DSPRE.Properties.Resources.addIcon; this.addMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.addMoveButton.Location = new System.Drawing.Point(4, 307); + this.addMoveButton.Location = new System.Drawing.Point(4, 286); this.addMoveButton.Margin = new System.Windows.Forms.Padding(2); this.addMoveButton.Name = "addMoveButton"; - this.addMoveButton.Size = new System.Drawing.Size(70, 34); + this.addMoveButton.Size = new System.Drawing.Size(70, 40); this.addMoveButton.TabIndex = 1; this.addMoveButton.Text = "Add"; this.addMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -218,10 +220,10 @@ this.deleteMoveButton.Enabled = false; this.deleteMoveButton.Image = global::DSPRE.Properties.Resources.deleteIcon; this.deleteMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.deleteMoveButton.Location = new System.Drawing.Point(152, 307); + this.deleteMoveButton.Location = new System.Drawing.Point(152, 286); this.deleteMoveButton.Margin = new System.Windows.Forms.Padding(2); this.deleteMoveButton.Name = "deleteMoveButton"; - this.deleteMoveButton.Size = new System.Drawing.Size(70, 34); + this.deleteMoveButton.Size = new System.Drawing.Size(70, 40); this.deleteMoveButton.TabIndex = 2; this.deleteMoveButton.Text = "Delete"; this.deleteMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -234,10 +236,10 @@ this.editMoveButton.Enabled = false; this.editMoveButton.Image = global::DSPRE.Properties.Resources.RenameIcon; this.editMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.editMoveButton.Location = new System.Drawing.Point(78, 307); + this.editMoveButton.Location = new System.Drawing.Point(78, 286); this.editMoveButton.Margin = new System.Windows.Forms.Padding(2); this.editMoveButton.Name = "editMoveButton"; - this.editMoveButton.Size = new System.Drawing.Size(70, 34); + this.editMoveButton.Size = new System.Drawing.Size(70, 40); this.editMoveButton.TabIndex = 3; this.editMoveButton.Text = "Edit"; this.editMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -285,7 +287,7 @@ this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.statusLabel.AutoSize = true; this.tableLayoutPanel3.SetColumnSpan(this.statusLabel, 3); - this.statusLabel.Location = new System.Drawing.Point(5, 282); + this.statusLabel.Location = new System.Drawing.Point(5, 261); this.statusLabel.Name = "statusLabel"; this.statusLabel.Padding = new System.Windows.Forms.Padding(1, 5, 1, 5); this.statusLabel.Size = new System.Drawing.Size(39, 23); @@ -304,6 +306,19 @@ this.pokemonNameInputComboBox.TabIndex = 31; this.pokemonNameInputComboBox.SelectedIndexChanged += new System.EventHandler(this.pokemonNameInputComboBox_SelectedIndexChanged); // + // entryCountLabel + // + this.entryCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.entryCountLabel.AutoSize = true; + this.tableLayoutPanel3.SetColumnSpan(this.entryCountLabel, 3); + this.entryCountLabel.Location = new System.Drawing.Point(5, 332); + this.entryCountLabel.Name = "entryCountLabel"; + this.entryCountLabel.Padding = new System.Windows.Forms.Padding(1, 5, 1, 5); + this.entryCountLabel.Size = new System.Drawing.Size(70, 23); + this.entryCountLabel.TabIndex = 9; + this.entryCountLabel.Text = "Entry Count: "; + this.entryCountLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // // LearnsetEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -349,5 +364,6 @@ private System.Windows.Forms.Label statusLabel; public InputComboBox pokemonNameInputComboBox; public System.Windows.Forms.NumericUpDown monNumberNumericUpDown; + private System.Windows.Forms.Label entryCountLabel; } } \ No newline at end of file diff --git a/DS_Map/Editors/LearnsetEditor.cs b/DS_Map/Editors/LearnsetEditor.cs index 52da789..817bd4e 100644 --- a/DS_Map/Editors/LearnsetEditor.cs +++ b/DS_Map/Editors/LearnsetEditor.cs @@ -2,11 +2,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Linq; -using System.Windows; +using System.Drawing; +using System.Text; using System.Windows.Forms; -using static ScintillaNET.Style; -using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox; using MessageBox = System.Windows.Forms.MessageBox; namespace DSPRE { @@ -30,8 +28,8 @@ namespace DSPRE { private int currentLoadedId = 0; private LearnsetData currentLoadedFile = null; - private static bool dirty = false; - private static readonly string formName = "Learnset Editor"; + private bool dirty = false; + private readonly string formName = "Learnset Editor"; public LearnsetEditor(string[] moveNames, Control parent, PokemonEditor pokeEditor) { this.moveNames = moveNames; @@ -117,6 +115,8 @@ namespace DSPRE { foreach (var elem in currentLoadedFile.list) { movesListBox.Items.Add(ElemToString(elem)); } + + UpdateEntryCountLabel(); movesListBox.EndUpdate(); } @@ -231,6 +231,8 @@ namespace DSPRE { if (count > 0) { movesListBox.SelectedIndex = Math.Max(0, sel - 1); } + + UpdateEntryCountLabel(); } UpdateByEditMode(); @@ -259,6 +261,7 @@ namespace DSPRE { newSelection = currentLoadedFile.list.FindIndex(x => x == newEntry); } + UpdateEntryCountLabel(); movesListBox.SelectedIndex = newSelection; editMode = false; movesListBox.Enabled = true; @@ -273,6 +276,7 @@ namespace DSPRE { moveInputComboBox.SelectedIndex = move; levelNumericUpDown.Value = level; } + UpdateByEditMode(); addMoveButton.Enabled = (editMode == false && CheckValidEntry()); setDirty(true); @@ -303,5 +307,21 @@ namespace DSPRE { editMoveButton.Enabled = true; deleteMoveButton.Enabled = true; } + + private void UpdateEntryCountLabel(){ + StringBuilder labelText = new StringBuilder("Entry Count: "); + labelText.Append(movesListBox.Items.Count); + + if (movesListBox.Items.Count > LearnsetData.VanillaLimit) { + labelText.Append("!"); + entryCountLabel.ForeColor = Color.FromArgb(210, 120, 0); + entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Bold); + } else { + entryCountLabel.ForeColor = Color.Black; + entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Regular); + } + + entryCountLabel.Text = labelText.ToString(); + } } } diff --git a/DS_Map/Editors/PokemonEditor.Designer.cs b/DS_Map/Editors/PokemonEditor.Designer.cs index 0f2940c..3cb3475 100644 --- a/DS_Map/Editors/PokemonEditor.Designer.cs +++ b/DS_Map/Editors/PokemonEditor.Designer.cs @@ -23,6 +23,7 @@ /// the contents of this method with the code editor. /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PokemonEditor)); this.tabControl = new System.Windows.Forms.TabControl(); this.personalPage = new System.Windows.Forms.TabPage(); this.learnsetPage = new System.Windows.Forms.TabPage(); @@ -65,7 +66,7 @@ this.learnsetPage.Location = new System.Drawing.Point(4, 22); this.learnsetPage.Name = "learnsetPage"; this.learnsetPage.Padding = new System.Windows.Forms.Padding(3); - this.learnsetPage.Size = new System.Drawing.Size(1024, 534); + this.learnsetPage.Size = new System.Drawing.Size(1024, 526); this.learnsetPage.TabIndex = 1; this.learnsetPage.Text = "Learnset Editor"; this.learnsetPage.UseVisualStyleBackColor = true; @@ -75,7 +76,7 @@ this.evoPage.Location = new System.Drawing.Point(4, 22); this.evoPage.Name = "evoPage"; this.evoPage.Padding = new System.Windows.Forms.Padding(3); - this.evoPage.Size = new System.Drawing.Size(1024, 534); + this.evoPage.Size = new System.Drawing.Size(1024, 526); this.evoPage.TabIndex = 2; this.evoPage.Text = "Evolution Editor"; this.evoPage.UseVisualStyleBackColor = true; @@ -86,24 +87,24 @@ this.syncChangesCheckbox.Dock = System.Windows.Forms.DockStyle.Bottom; this.syncChangesCheckbox.Location = new System.Drawing.Point(3, 3); this.syncChangesCheckbox.Name = "syncChangesCheckbox"; - this.syncChangesCheckbox.Size = new System.Drawing.Size(171, 17); + this.syncChangesCheckbox.Size = new System.Drawing.Size(177, 17); this.syncChangesCheckbox.TabIndex = 1; - this.syncChangesCheckbox.Text = "Synchronize Chosen Pokemon"; + this.syncChangesCheckbox.Text = "Synchronize Pokémon selection"; this.syncChangesCheckbox.UseVisualStyleBackColor = true; // // syncChangesLabel // this.syncChangesLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this.syncChangesLabel.AutoSize = true; - this.syncChangesLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.syncChangesLabel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.syncChangesLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.syncChangesLabel.ForeColor = System.Drawing.SystemColors.Highlight; - this.syncChangesLabel.Location = new System.Drawing.Point(177, 5); - this.syncChangesLabel.Margin = new System.Windows.Forms.Padding(0); + this.syncChangesLabel.Location = new System.Drawing.Point(186, 10); this.syncChangesLabel.Name = "syncChangesLabel"; - this.syncChangesLabel.Size = new System.Drawing.Size(472, 13); + this.syncChangesLabel.Size = new System.Drawing.Size(433, 13); this.syncChangesLabel.TabIndex = 2; - this.syncChangesLabel.Text = "When this CheckBox is marked, all changes in any tab will be synchronized accross" + - " the other tabs."; + this.syncChangesLabel.Text = "When this CheckBox is marked, mon selection will be synchronized accross all tabs" + + " below."; // // flowLayoutPanel1 // @@ -135,8 +136,9 @@ this.Controls.Add(this.flowLayoutPanel1); this.Controls.Add(this.tabControl); this.DoubleBuffered = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "PokemonEditor"; - this.Text = "PokemonEditor"; + this.Text = "Pokémon Editor"; this.tabControl.ResumeLayout(false); this.flowLayoutPanel1.ResumeLayout(false); this.flowLayoutPanel1.PerformLayout(); diff --git a/DS_Map/Editors/PokemonEditor.resx b/DS_Map/Editors/PokemonEditor.resx index 1af7de1..f6489bb 100644 --- a/DS_Map/Editors/PokemonEditor.resx +++ b/DS_Map/Editors/PokemonEditor.resx @@ -117,4 +117,1561 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAABAAEAlpYAAAEAIABwawEAFgAAACgAAACWAAAALAEAAAEAIAAAAAAAkF8BAMMOAADDDgAAAAAAAAAA + AAAAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA + mAAAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA + mAAAgJgGAICYEQCAmCYAgJhKAICYewCAmLEAgJjhAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmOEAgJixAICYewCAmEoAgJgmAICYEQCA + mAYAgJgwAICYOQCAmEoAgJhpAICYkgCAmL4AgJjmAICY/ACAmP8AgJj/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wCAmP8AgJj/AICY/ACAmOYAgJi+AICYkgCAmGkAgJhKAICYOQCA + mDAAgJhoAICYbwCAmHsAgJiSAICYrwCAmNAAgJjtAICY/QB/l/8Af5f/AH+X/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH+X/wB/l/8Af5f/AICY/QCAmO0AgJjQAICYrwCAmJIAgJh7AICYbwCA + mGgAgJimAICYqgCAmLEAgJi+AICY0ACAmOMAgJj0AICY/gB/l/8Af5f/AH+W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH+W/wB/l/8Af5f/AICY/gCAmPQAgJjjAICY0ACAmL4AgJixAICYqgCA + mKYAgJjcAICY3gCAmOEAgJjmAICY7QCAmPQAgJj7AICY/wCAmP8AgJj/AICY/wCAmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCAmf8AgJn/AICZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB + mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB + mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB + mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AICZ/wCAmf8AgJn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgJn/AICY/wCAmP8AgJj/AICY/wCAmPsAgJj0AICY7QCAmOYAgJjhAICY3gCA + mNwAgJj7AICY/ACAmPwAgJj8AICY/QCAmP4AgJj/AIGZ/wCCmv8Ag5z/AIWe/wCGn/8Ah5//AIeg/wCH + oP8Ah6D/AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH + n/8Ah5//AIef/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCH + oP8Bh6D/A4ig/wSIof8FiaH/Bomh/weJof8HiaH/B4mh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ + of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ + of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ + of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/B4mh/weJof8HiaH/Bomh/wWJof8EiKH/A4ig/wGH + oP8Ah6D/AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIef/wCH + n/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH + oP8Ah6D/AIeg/wCHn/8Ahp//AIWe/wCDnP8Agpr/AIGZ/wCAmP8AgJj+AICY/QCAmPwAgJj8AICY/ACA + mPsAgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIKa/wCFnv8AiaL/AI2n/wCQqv8Akaz/AJKs/wCR + rP8Akaz/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR + q/8Akav/AJGr/wCRq/8Akav/AJGr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wGR + q/8Dkqz/B5St/wuVrv8Ol6//EJiw/xGYsP8RmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY + sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY + sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY + sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xGYsP8RmLD/EJiw/w6Xr/8Lla7/B5St/wOS + rP8Bkav/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJGr/wCRq/8Akav/AJGr/wCR + q/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR + rP8Akaz/AJKs/wCRrP8AkKr/AI2n/wCJov8AhZ7/AIKa/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIOc/wCJov8AkKr/AJax/wCbt/8Anrr/AJ+7/wCe + u/8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe + uv8Anrr/AJ26/wCduv8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCcuf8AnLn/AJ25/wKd + uv8GoLv/DKK9/xOlv/8ZqMH/HarC/x6qwv8eqsL/HarC/xyqwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup + wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup + wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup + wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8cqsL/HarC/x6qwv8eqsL/HarC/xmowf8Tpb//DKK9/wag + u/8Cnbr/AJ25/wCcuf8AnLn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbr/AJ26/wCe + uv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe + uv8Anrv/AJ+7/wCeuv8Am7f/AJax/wCQqv8AiaL/AIOc/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH+W/wB/lv8AgJj/AIWe/wCNp/8AlrH/AJ+8/wCnxP8Aqsj/AKvK/wCr + yf8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq + yP8Aqsj/AKrI/wCqyP8Aqsj/AKnI/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnH/wCpx/8Aqcf/AKnH/wKq + yP8Ircr/EbHN/xu10P8judL/KbvU/yu81P8rvNT/KrzU/ym71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7 + 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7 + 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7 + 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8pu9T/KrzU/yu81P8rvNT/KbvU/yO50v8btdD/EbHN/wit + yv8Cqsj/AKnH/wCpx/8Aqcf/AKnH/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnI/wCqyP8Aqsj/AKrI/wCq + yP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq + yP8Aq8n/AKvK/wCqyP8Ap8T/AJ+8/wCWsf8Ajaf/AIWe/wCAmP8Af5b/AH+W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQqv8Am7f/AKfE/wCvzv8AtNP/ALXV/wC1 + 1P8AtNP/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz + 0/8As9P/ALTT/wG00/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8As9P/AbTT/wS1 + 1P8Mudb/Fr3Z/yLC3P8sxt//Msnh/zXK4v82y+L/Nsri/zXK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK + 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK + 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK + 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v81yuL/Nsri/zbL4v81yuL/Msnh/yzG3/8iwtz/Fr3Z/wy5 + 1v8EtdT/AbTT/wCz0/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8BtNP/ALTT/wCz + 0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wC0 + 0/8AtdT/ALXV/wC00/8Ar87/AKfE/wCbt/8AkKr/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALrb/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC4 + 2P8BuNj/ArnZ/wS62f8Gu9r/CLzb/wm82/8Kvdv/Cr3b/wq82/8JvNv/Cbzb/wi82/8HvNv/CLzb/wu9 + 3P8SwN7/HMTh/yfJ5P8wzeb/ONDo/zzS6f8/0+r/QdTq/0LU6v9D1er/Q9Xq/0PV6v9D1er/Q9Tq/0PU + 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU + 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU + 6v9D1Or/Q9Tq/0PV6v9D1er/Q9Xq/0PV6v9C1Or/QdTq/z/T6v880un/ONDo/zDN5v8nyeT/HMTh/xLA + 3v8Lvdz/CLzb/we82/8IvNv/Cbzb/wm82/8KvNv/Cr3b/wq92/8JvNv/CLzb/wa72v8Eutn/ArnZ/wG4 + 2P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALrb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCSrP8An7v/AKvK/wC11f8Autv/ALzd/wC8 + 3P8Au9v/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALna/wC5 + 2v8Butr/BLvb/wm93f8OwN7/EsHf/xTD4P8Vw+D/FsPg/xXD4P8Vw+D/FMPg/xPC4P8SwuD/E8Lg/xXD + 4f8axeL/Isnk/yrM5/8y0On/OdPr/0DV7P9G1+3/S9nt/0/b7f9R3O7/Utzu/1Lc7v9R3O7/UNvu/1Db + 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db + 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db + 7v9Q2+7/UNvu/1Hc7v9S3O7/Utzu/1Hc7v9P2+3/S9nt/0bX7f9A1ez/OdPr/zLQ6f8qzOf/Isnk/xrF + 4v8Vw+H/E8Lg/xLC4P8TwuD/FMPg/xXD4P8Vw+D/FsPg/xXD4P8Uw+D/EsHf/w7A3v8Jvd3/BLvb/wG6 + 2v8Audr/ALna/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC7 + 2/8AvNz/ALzd/wC62/8AtdX/AKvK/wCfu/8Akqz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrv/AKvJ/wC11P8Autr/ALzc/wC7 + 3P8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC52v8Audn/ALnZ/wC5 + 2f8Cutr/B7zb/w6/3v8Ww+D/Hcbi/yHI4/8jyOT/I8nk/yLI5P8iyOP/Icjj/yDH4/8fx+P/H8fj/yHI + 5P8kyeT/KMvm/y3N5/8z0On/OtPq/0PW7P9M2e3/Vd3u/1zf7/9g4e//YeHv/2Dh7/9f4O//XuDv/17g + 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g + 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g + 7/9e4O//XuDv/1/g7/9g4e//YeHv/2Dh7/9c3+//Vd3u/0zZ7f9D1uz/OtPq/zPQ6f8tzef/KMvm/yTJ + 5P8hyOT/H8fj/x/H4/8gx+P/Icjj/yLI4/8iyOT/I8nk/yPI5P8hyOP/Hcbi/xbD4P8Ov97/B7zb/wK6 + 2v8Audn/ALnZ/wC52f8Audr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC6 + 2v8Au9z/ALzc/wC62v8AtdT/AKvJ/wCeu/8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALvb/wC6 + 2v8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC42f8AuNj/ALjY/wC4 + 2P8Dudn/Crzb/xPB3v8exeH/J8nk/yzM5f8vzeb/L83m/y7M5v8tzOb/Lczm/y3M5f8szOX/Lczl/y3M + 5v8uzOb/MM3n/zLO5/820Oj/PNLp/0bW6v9S2uz/Xd/t/2fi7/9s5O//buXv/27l7/9t5O//bOTv/2zk + 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk + 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk + 7/9s5O//bOTv/23k7/9u5e//buXv/2zk7/9n4u//Xd/t/1La7P9G1ur/PNLp/zbQ6P8yzuf/MM3n/y7M + 5v8tzOb/Lczl/yzM5f8tzOX/Lczm/y3M5v8uzOb/L83m/y/N5v8szOX/J8nk/x7F4f8Twd7/Crzb/wO5 + 2f8AuNj/ALjY/wC42P8AuNn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC5 + 2f8Autr/ALvb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK5 + 2f8Gu9r/Dr7c/xnD3/8kyOL/Lszl/zTO5/83z+j/N9Do/zbP6P82z+f/Ns/n/zfP5/840Oj/OdDo/zrQ + 6P860Oj/OdDo/znQ6P880ej/QdPp/0vX6v9Y3Oz/ZeHu/2/l7/915/D/eOjw/3no8P956PD/eejw/3no + 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no + 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no + 8P956PD/eejw/3no8P956PD/eOjw/3Xn8P9v5e//ZeHu/1jc7P9L1+r/QdPp/zzR6P850Oj/OdDo/zrQ + 6P860Oj/OdDo/zjQ6P83z+f/Ns/n/zbP5/82z+j/N9Do/zfP6P80zuf/Lszl/yTI4v8Zw9//Dr7c/wa7 + 2v8Cudn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK42P8Dudn/Brra/wm8 + 2/8Pvtz/FsLe/yDG4f8qyuT/Ms3m/zfQ6P850en/OdHp/znQ6P850Oj/O9Hp/z7S6f9B0+n/RNXq/0fW + 6v9H1ur/RtXq/0XV6v9G1er/Stfq/1Pa6/9e3u3/aePu/3Pm7/966fD/f+vx/4Ps8v+F7fP/h+3z/4ju + 9P+J7vT/iO/0/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv + 9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/0/4nu + 9P+I7vT/h+3z/4Xt8/+D7PL/f+vx/3rp8P9z5u//aePu/17e7f9T2uv/Stfq/0bV6v9F1er/RtXq/0fW + 6v9H1ur/RNXq/0HT6f8+0un/O9Hp/znQ6P850Oj/OdHp/znR6f830Oj/Ms3m/yrK5P8gxuH/FsLe/w++ + 3P8JvNv/Brra/wO52f8CuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC31/8At9f/AbjY/wS52f8Iu9r/Db3c/xPA + 3f8Zw9//IMbh/yfJ4/8uzOX/NM7n/zfQ6P840On/ONDp/zjQ6P850Oj/PNLp/0PU6v9J1+v/UNnr/1Tb + 7P9W2+z/Vdvs/1Pa7P9T2uv/Vtvs/1ze7P9k4e3/bOTu/3Xn8P996vH/hO3y/4zv9P+S8fX/l/P3/5n0 + +P+Z9fn/mfb5/5j2+v+X9vv/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3 + +/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f2+/+Y9vr/mfb5/5n1 + +f+Z9Pj/l/P3/5Lx9f+M7/T/hO3y/33q8f915/D/bOTu/2Th7f9c3uz/Vtvs/1Pa6/9T2uz/Vdvs/1bb + 7P9U2+z/UNnr/0nX6/9D1Or/PNLp/znQ6P840Oj/ONDp/zjQ6f830Oj/NM7n/y7M5f8nyeP/IMbh/xnD + 3/8TwN3/Db3c/wi72v8Eudn/AbjY/wC31/8At9f/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALfY/wC31/8At9f/AbjY/wa62f8Nvdv/FcHe/x7F + 4P8lyOL/Ksrk/y7M5f8yzuf/Nc/n/zfQ6P830Oj/Ns/o/zbP6P840Oj/PtLp/0fW6v9R2ev/W93t/2Hg + 7f9k4e7/ZOHu/2Pg7f9i4O3/Y+Dt/2bh7v9q4+7/cOXv/3bn8P9+6vH/h+3z/5Lx9f+b9Pf/ovb4/6X4 + +v+m+fv/pfr8/6T6/P+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6 + /f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+k+vz/pfr8/6b5 + +/+l+Pr/ovb4/5v09/+S8fX/h+3z/37q8f925/D/cOXv/2rj7v9m4e7/Y+Dt/2Lg7f9j4O3/ZOHu/2Th + 7v9h4O3/W93t/1HZ6/9H1ur/PtLp/zjQ6P82z+j/Ns/o/zfQ6P830Oj/Nc/n/zLO5/8uzOX/Ksrk/yXI + 4v8exeD/FcHe/w292/8Gutn/AbjY/wC31/8At9f/ALfY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC32P8AuNj/ArnY/wi72v8Rv93/HMTg/yfJ + 4/8uzOX/M87n/zbP5/830Oj/ONDo/zjQ6P840Oj/N9Do/zfQ6P860ej/QdPp/0vX6v9Y3Oz/ZODu/2zk + 7/9w5e//ceXv/3Hl7/9w5e//cOXv/3Hl7/9y5u//defw/3jo8P9/6vH/iO3y/5Pw9P+d8vX/pfT2/6j1 + 9v+q9vb/qfX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j1 + 9v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qfX2/6r2 + 9v+o9fb/pfT2/53y9f+T8PT/iO3y/3/q8f946PD/defw/3Lm7/9x5e//cOXv/3Dl7/9x5e//ceXv/3Dl + 7/9s5O//ZODu/1jc7P9L1+r/QdPp/zrR6P830Oj/N9Do/zjQ6P840Oj/ONDo/zfQ6P82z+f/M87n/y7M + 5f8nyeP/HMTg/xG/3f8Iu9r/ArnY/wC42P8At9j/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8BuNj/AbjY/wG52P8Dudn/B7va/w6+3P8Xwt//I8fi/y3L + 5f81z+f/OdHo/zzS6f890un/PtLp/z/S6f8+0un/PdLp/z3S6f9A0+n/R9bq/1La6/9f3u3/a+Pu/3Tm + 7/956PD/e+nx/3zp8f996fH/ferx/33q8f996vH/ferx/3/q8f+C6vH/iOvx/4/r8P+V6+//muvt/53p + 6/+f5+j/oOXl/6Hj4/+h4uH/oeHg/6Hh4P+h4eD/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh + 4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4P+h4eD/oeHg/6Hi4f+h4+P/oOXl/5/n + 6P+d6ev/muvt/5Xr7/+P6/D/iOvx/4Lq8f9/6vH/ferx/33q8f996vH/ferx/33p8f986fH/e+nx/3no + 8P905u//a+Pu/1/e7f9S2uv/R9bq/0DT6f890un/PdLp/z7S6f8/0un/PtLp/z3S6f880un/OdHo/zXP + 5/8ty+X/I8fi/xfC3/8Ovtz/B7va/wO52f8Budj/AbjY/wG42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALfY/wC42P8CuNj/BLnZ/we72v8Lvdv/EL/d/xbC3v8fxeH/KMnk/zDN + 5v830Oj/PdLp/0LU6v9F1er/SNbq/0rX6v9K1+r/Sdbq/0nW6v9L1+r/UNnr/1nd7P9k4e3/buTv/3fo + 8P9+6vH/g+zy/4fu8/+L7/T/jfD1/47x9v+N8fb/jPH3/4vw9v+J7fP/hunw/4Pk6/+A3uX/f9jf/4DS + 1/+DzM//h8bH/4rBwP+Mvbv/jby5/427uP+NvLn/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428 + uv+NvLr/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428uf+Nu7j/jby5/4y9u/+KwcD/h8bH/4PM + z/+A0tf/f9jf/4De5f+D5Ov/hunw/4nt8/+L8Pb/jPH3/43x9v+O8fb/jfD1/4vv9P+H7vP/g+zy/37q + 8f936PD/buTv/2Th7f9Z3ez/UNnr/0vX6v9J1ur/Sdbq/0rX6v9K1+r/SNbq/0XV6v9C1Or/PdLp/zfQ + 6P8wzeb/KMnk/x/F4f8Wwt7/EL/d/wu92/8Hu9r/BLnZ/wK42P8AuNj/ALfY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8At9f/ALfX/wC32P8Dudj/CLva/w6+3P8Uwd7/G8Pg/yHG4f8nyeP/LMvl/zLO + 5/840Oj/P9Pp/0fW6v9O2Ov/VNvs/1jc7P9Z3Oz/WNzs/1fc7P9Y3Oz/XN7s/2Hg7f9p4u7/cOXv/3jo + 8P+A6/L/ie7z/5Hx9f+Y8/f/nPX4/573+v+f+fz/nfn8/5n2+v+Q8PX/gubt/3PZ4/9kzNj/W8DL/1q0 + vv9eqa//ZJ6g/2uVlP9vj4v/cYyI/3GMh/9xjYj/cI2J/3COif9wjon/cI6J/3COif9wjon/cI6J/3CO + if9wjon/cI6J/3COif9wjon/cI6J/3COif9wjon/cI2J/3GNiP9xjIf/cYyI/2+Pi/9rlZT/ZJ6g/16p + r/9atL7/W8DL/2TM2P9z2eP/gubt/5Dw9f+Z9vr/nfn8/5/5/P+e9/r/nPX4/5jz9/+R8fX/ie7z/4Dr + 8v946PD/cOXv/2ni7v9h4O3/XN7s/1jc7P9X3Oz/WNzs/1nc7P9Y3Oz/VNvs/07Y6/9H1ur/P9Pp/zjQ + 6P8yzuf/LMvl/yfJ4/8hxuH/G8Pg/xTB3v8Ovtz/CLva/wO52P8At9j/ALfX/wC31/8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8At9f/ALfX/wC42P8Eudn/DL3b/xXB3v8exeD/Jsjj/yvL5P8uzOb/Mc3m/zTO + 5/850ej/QtTp/0zY6/9X3Oz/YN/t/2bh7v9o4u7/Z+Lu/2bi7v9m4e7/aOLu/2vj7v9u5e//c+bv/3no + 8P+B6/L/jO/0/5fy9f+g9ff/pvf5/6r6+/+s/P3/qvz9/6P4+v+U7vL/fd7m/2HL1/9It8f/OKW1/zOU + ov84hI3/QnZ5/0xqaP9RYVz/VF1X/1RdVv9TXlf/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1Nf + Wf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NeV/9UXVb/VF1X/1FhXP9Mamj/QnZ5/ziE + jf8zlKL/OKW1/0i3x/9hy9f/fd7m/5Tu8v+j+Pr/qvz9/6z8/f+q+vv/pvf5/6D19/+X8vX/jO/0/4Hr + 8v956PD/c+bv/27l7/9r4+7/aOLu/2bh7v9m4u7/Z+Lu/2ji7v9m4e7/YN/t/1fc7P9M2Ov/QtTp/znR + 6P80zuf/Mc3m/y7M5v8ry+T/Jsjj/x7F4P8Vwd7/DL3b/wS52f8AuNj/ALfX/wC31/8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wK52P8Hu9r/EL/d/xvD4P8myOP/L8zl/zTO5/82z+f/Ns/o/zjQ + 6P890un/RtXq/1La6/9f3+3/auPu/3Hl7/905/D/defw/3Tn8P905vD/dOfw/3Xn8P925/D/eOjw/3zp + 8P+D6/H/jO3y/5bv8/+f8vT/pfP0/6r19f+t9vb/rPX1/6Xv8P+T4+b/ddDY/1K5xv8yobL/HYye/xd4 + iP8dZXD/KFVY/zNHRP86PTf/PTkx/z04MP88OTH/PDoz/zw7M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7 + M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7M/88OzP/PDoz/zw5Mf89ODD/PTkx/zo9N/8zR0T/KFVY/x1l + cP8XeIj/HYye/zKhsv9Sucb/ddDY/5Pj5v+l7/D/rPX1/6329v+q9fX/pfP0/5/y9P+W7/P/jO3y/4Pr + 8f986fD/eOjw/3bn8P915/D/dOfw/3Tm8P905/D/defw/3Tn8P9x5e//auPu/1/f7f9S2uv/RtXq/z3S + 6f840Oj/Ns/o/zbP5/80zuf/L8zl/ybI4/8bw+D/EL/d/we72v8Cudj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC5 + 2v8AuNn/AbjY/wG42P8Cudn/BLrZ/wi72v8Ovtz/FsLe/yHG4f8ry+T/NM7n/znQ6P880en/PdLp/0DT + 6f9F1er/Ttjr/1nc7P9l4e7/cOXv/3jo8P986fH/furx/4Dq8f+A6vH/gevy/4Hr8v+B7PL/gezz/4Pr + 8v+F6/H/ierw/43o7v+R5+v/leXo/5nk5v+e4uP/n9/e/5nX1/+Iysz/are9/0ihrP8oipn/EnWF/wxi + cP8RUFn/HD9C/ycyL/8tKSH/LyQb/zAjGv8vJBz/LiYe/y4mHv8uJh7/LiYe/y4mHv8uJh7/LiYe/y4m + Hv8uJh7/LiYe/y4mHv8uJh7/LiYe/y4mHv8uJh7/LiYe/y8kHP8wIxr/LyQb/y0pIf8nMi//HD9C/xFQ + Wf8MYnD/EnWF/yiKmf9Ioaz/are9/4jKzP+Z19f/n9/e/57i4/+Z5Ob/leXo/5Hn6/+N6O7/ierw/4Xr + 8f+D6/L/gezz/4Hs8v+B6/L/gevy/4Dq8f+A6vH/furx/3zp8f946PD/cOXv/2Xh7v9Z3Oz/Ttjr/0XV + 6v9A0+n/PdLp/zzR6f850Oj/NM7n/yvL5P8hxuH/FsLe/w6+3P8Iu9r/BLrZ/wK52f8BuNj/AbjY/wC4 + 2f8Audr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC5 + 2f8AuNj/AbjY/wS52f8Iu9r/DL3b/xG/3f8Xwt//H8Xh/yfJ4/8uzOb/Ns/n/zzR6f9B0+n/RdXq/0rX + 6v9Q2ev/WNzs/2Hf7f9q4+7/c+bv/3rp8P+A6/H/huzy/4rt8v+N7vP/kPD0/5Hx9v+R8/f/kPP4/47x + 9v+J7PP/g+bt/3ze5v921t7/dM7W/3jIzf9+wcT/grq6/4Cwr/9zo6P/XJOV/z+Bh/8lb3j/E11p/w5O + V/8RPkT/GDEx/yElIf8lHRb/JxoR/ycZEP8nGhH/JhsS/yYbE/8mGxP/JhsT/ycbE/8nGxP/JxsT/ycb + E/8nGxP/JxsT/ycbE/8nGxP/JhsT/yYbE/8mGxP/JhsS/ycaEf8nGRD/JxoR/yUdFv8hJSH/GDEx/xE+ + RP8OTlf/E11p/yVveP8/gYf/XJOV/3Ojo/+AsK//grq6/37BxP94yM3/dM7W/3bW3v983ub/g+bt/4ns + 8/+O8fb/kPP4/5Hz9/+R8fb/kPD0/43u8/+K7fL/huzy/4Dr8f966fD/c+bv/2rj7v9h3+3/WNzs/1DZ + 6/9K1+r/RdXq/0HT6f880en/Ns/n/y7M5v8nyeP/H8Xh/xfC3/8Rv93/DL3b/wi72v8Eudn/AbjY/wC4 + 2P8Audn/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC5 + 2f8AuNj/ArjY/we62v8Ovdz/FcHe/xzE4P8jx+L/KMnk/yzL5f8xzeb/Ns/o/z3S6f9F1er/Tdjr/1bb + 7P9d3u3/Y+Dt/2nj7v9u5e//dOfw/3vp8P+D6/H/i+7y/5Pw9P+Z8vX/nfT3/6D3+f+h+fz/n/n8/5n1 + +f+M7PL/et/o/2bQ2/9WwM3/TrK//1CmsP9XmqD/X4+P/2KDgf9bd3T/TGtq/zpfYP8oVFf/G0hN/xc+ + Qf8YMzP/HSkm/yEhG/8kGxP/JRkQ/yUYD/8lGRD/JRoR/yUaEf8lGhL/JRoS/yUaEv8lGhL/JRoS/yUa + Ev8lGhL/JRoS/yUaEv8lGhL/JRoS/yUaEv8lGhH/JRoR/yUZEP8lGA//JRkQ/yQbE/8hIRv/HSkm/xgz + M/8XPkH/G0hN/yhUV/86X2D/TGtq/1t3dP9ig4H/X4+P/1eaoP9QprD/TrK//1bAzf9m0Nv/et/o/4zs + 8v+Z9fn/n/n8/6H5/P+g9/n/nfT3/5ny9f+T8PT/i+7y/4Pr8f976fD/dOfw/27l7/9p4+7/Y+Dt/13e + 7f9W2+z/Tdjr/0XV6v890un/Ns/o/zHN5v8sy+X/KMnk/yPH4v8cxOD/FcHe/w693P8Hutr/ArjY/wC4 + 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC5 + 2f8AuNj/A7nZ/wq82/8TwN3/HsXg/yfJ4/8ty+X/MM3m/zLO5/80zuf/ONDo/0DT6f9K1+r/Vtvs/2Hf + 7f9p4u7/buTv/3Hm7/9z5u//dufw/3zp8f+F7PL/j+/z/5ry9f+i9Pb/p/b3/6v5+v+t+/v/qvn7/6Dz + 9v+M5uv/b9Pd/1G+zP84qbr/K5an/yuFkv8zdXz/PmZn/0VZVv9FT0n/P0dC/zZCPv8tPTr/Jzg2/yUz + Mf8lLir/Jyok/yomH/8rIxv/LCIZ/ywiGf8sIhr/KyIa/ysiGv8rIhr/LCIa/ywiGv8sIhr/LCMa/ywj + Gv8sIxr/LCMa/ywiGv8sIhr/LCIa/ysiGv8rIhr/KyIa/ywiGv8sIhn/LCIZ/ysjG/8qJh//Jyok/yUu + Kv8lMzH/Jzg2/y09Ov82Qj7/P0dC/0VPSf9FWVb/PmZn/zN1fP8rhZL/K5an/zipuv9Rvsz/b9Pd/4zm + 6/+g8/b/qvn7/637+/+r+fr/p/b3/6L09v+a8vX/j+/z/4Xs8v986fH/dufw/3Pm7/9x5u//buTv/2ni + 7v9h3+3/Vtvs/0rX6v9A0+n/ONDo/zTO5/8yzuf/MM3m/y3L5f8nyeP/HsXg/xPA3f8KvNv/A7nZ/wC4 + 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Cudn/Brva/w++3P8Zw9//Jcji/y7M5f81z+f/N9Do/zjQ6P850ej/PdLp/0XV6v9Q2ev/Xd7t/2ni + 7v9y5u//d+fw/3jo8P956PD/e+nw/4Dq8f+I7fP/k/D0/53z9v+l9fb/qvX2/6719f+u9PP/qu/v/57m + 5/+G1tv/ZcHK/0GpuP8kkqP/FH2P/xNqeP8cV1//KEhJ/zI7Nv82Myz/Ni8n/zQvJ/8yLyn/MTAq/zIx + K/81Miv/ODMs/zo0Lf88NS3/PTUt/z01Lf88NS3/PDUt/zw1Lf88NS3/PDQt/zw0Lf87NC3/OzQt/zs0 + Lf87NC3/OzQt/zs0Lf88NC3/PDQt/zw1Lf88NS3/PDUt/zw1Lf89NS3/PTUt/zw1Lf86NC3/ODMs/zUy + K/8yMSv/MTAq/zIvKf80Lyf/Ni8n/zYzLP8yOzb/KEhJ/xxXX/8Tanj/FH2P/ySSo/9Bqbj/ZcHK/4bW + 2/+e5uf/qu/v/6708/+u9fX/qvX2/6X19v+d8/b/k/D0/4jt8/+A6vH/e+nw/3no8P946PD/d+fw/3Lm + 7/9p4u7/Xd7t/1DZ6/9F1er/PdLp/znR6P840Oj/N9Do/zXP5/8uzOX/Jcji/xnD3/8Pvtz/Brva/wK5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anbr/AKrI/wC00/8Cudn/A7vb/wa8 + 2/8JvNv/Dr7c/xbC3v8gxuH/Ksrk/zPO5/850ej/PdLp/z/T6f9C1On/RtXq/07Y6/9Y3Oz/Y+Dt/27k + 7/935/D/fOnw/3/q8f+B6/H/g+vy/4jt8/+O8PX/lvP3/531+P+i9ff/pPHy/6Xr6/+j4uH/nNfW/4/J + yf94uLv/WaSr/ziPmv8deoj/Dmd1/wxUYP8TQ0n/HTQ0/ycpJP8tJBz/MCMb/zMmHv82KyT/OjEq/0A4 + Mf9IQDn/UElC/1dQSf9bVU7/XVdR/15XUf9dV1H/XFZQ/1xWUP9bVk//W1VP/1pVT/9ZVU7/WVRO/1lU + Tv9ZVE7/WVRO/1lVTv9aVU//W1VP/1tWT/9cVlD/XFZQ/11XUf9eV1H/XVdR/1tVTv9XUEn/UElC/0hA + Of9AODH/OjEq/zYrJP8zJh7/MCMb/y0kHP8nKST/HTQ0/xNDSf8MVGD/Dmd1/x16iP84j5r/WaSr/3i4 + u/+Pycn/nNfW/6Pi4f+l6+v/pPHy/6L19/+d9fj/lvP3/47w9f+I7fP/g+vy/4Hr8f9/6vH/fOnw/3fn + 8P9u5O//Y+Dt/1jc7P9O2Ov/RtXq/0LU6f8/0+n/PdLp/znR6P8zzuf/Ksrk/yDG4f8Wwt7/Dr7c/wm8 + 2/8GvNv/A7vb/wK52f8AtNP/AKrI/wCduv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbr/AKrI/wG00/8Eutn/CL3d/w2/ + 3v8Twd7/GcPf/yDG4f8nyeP/L8zl/zbP5/880un/QtTq/0fW6v9M2Ov/Utrr/1nc7P9h3+3/aePu/3Hm + 7/946PD/f+rx/4Ts8v+K7fL/ju7z/5Lw9P+W8/j/mff7/5v4/P+b9fj/mOvu/5Tc3P+OyMf/hLSx/3eh + nv9kkI//TH+C/zJvdf8eYGj/ElFa/xBCSP8UNDb/Gygm/yMgGv8oHhb/LiAY/zMmHv86Lyj/Qzo0/1BH + Qf9fWFL/b2lk/314c/+Hgn3/i4aC/4yHg/+LhoH/iYSA/4iEf/+Hg3//hYJ+/4SCff+DgX3/goF8/4KB + fP+CgXz/goF8/4OBff+Egn3/hYJ+/4eDf/+IhH//iYSA/4uGgf+Mh4P/i4aC/4eCff99eHP/b2lk/19Y + Uv9QR0H/Qzo0/zovKP8zJh7/LiAY/ygeFv8jIBr/Gygm/xQ0Nv8QQkj/ElFa/x5gaP8yb3X/TH+C/2SQ + j/93oZ7/hLSx/47Ix/+U3Nz/mOvu/5v1+P+b+Pz/mff7/5bz+P+S8PT/ju7z/4rt8v+E7PL/f+rx/3jo + 8P9x5u//aePu/2Hf7f9Z3Oz/Utrr/0zY6/9H1ur/QtTq/zzS6f82z+f/L8zl/yfJ4/8gxuH/GcPf/xPB + 3v8Nv97/CL3d/wS62f8BtNP/AKrI/wCduv8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbn/AKrI/wG00/8Gu9r/DcDe/xXD + 4P8exeH/JMji/yrK5P8uzOX/Ms7n/zfQ6P890un/RdXq/07Y6/9X3Oz/X9/t/2Xh7v9q4+7/b+Xv/3Pm + 7/956PD/gevx/4rt8v+S7/T/mfH1/5zz9v+c9vr/mvn9/5b4/f+Q8fb/iOHl/3/Iyv91qqn/aY2K/111 + cf9PZWH/P1lX/zBQUP8kSEr/HT9B/xo1Nv8cLCr/ICQf/yUgGf8qIRn/MCUe/zcuKP9BOTT/TkhE/2Fb + WP95dHH/kY2K/6ajoP+1sq//u7i2/726t/+7uLX/ubaz/7e1sv+1tLH/s7Ow/7Gyr/+vsa7/rrCu/62w + rf+tsK3/rrCu/6+xrv+xsq//s7Ow/7W0sf+3tbL/ubaz/7u4tf+9urf/u7i2/7Wyr/+mo6D/kY2K/3l0 + cf9hW1j/TkhE/0E5NP83Lij/MCUe/yohGf8lIBn/ICQf/xwsKv8aNTb/HT9B/yRISv8wUFD/P1lX/09l + Yf9ddXH/aY2K/3Wqqf9/yMr/iOHl/5Dx9v+W+P3/mvn9/5z2+v+c8/b/mfH1/5Lv9P+K7fL/gevx/3no + 8P9z5u//b+Xv/2rj7v9l4e7/X9/t/1fc7P9O2Ov/RdXq/z3S6f830Oj/Ms7n/y7M5f8qyuT/JMji/x7F + 4f8Vw+D/DcDe/wa72v8BtNP/AKrI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbn/AKnI/wK00/8IvNv/EsHf/xzG + 4v8nyeT/Lszl/zLN5v80zuf/Nc/n/zjQ6P8+0un/SNbq/1Tb7P9g3+3/auPu/3Dl7/9z5u//dOfw/3bn + 8P976fD/g+vy/47u8/+Z8fX/ofT2/6P09v+f9vn/mPb6/47y+P+D6O7/eNLX/2uytP9djYz/UGpm/0VP + Sf89QDr/NTk0/zA3Mv8sNjL/KTQw/ykvK/8pLCb/LCki/y8pIv81LSb/OjMt/0I9OP9NSkf/XVpZ/3Ry + cf+RkI//sK6t/8rJyP/c29r/5OPi/+bl4//k4+H/4eDf/9/f3v/d3tz/2tzb/9fb2v/V2tn/1NnY/9PZ + 2P/T2dj/1NnY/9Xa2f/X29r/2tzb/93e3P/f397/4eDf/+Tj4f/m5eP/5OPi/9zb2v/Kycj/sK6t/5GQ + j/90cnH/XVpZ/01KR/9CPTj/OjMt/zUtJv8vKSL/LCki/yksJv8pLyv/KTQw/yw2Mv8wNzL/NTk0/z1A + Ov9FT0n/UGpm/12NjP9rsrT/eNLX/4Po7v+O8vj/mPb6/5/2+f+j9Pb/ofT2/5nx9f+O7vP/g+vy/3vp + 8P925/D/dOfw/3Pm7/9w5e//auPu/2Df7f9U2+z/SNbq/z7S6f840Oj/Nc/n/zTO5/8yzeb/Lszl/yfJ + 5P8cxuL/EsHf/wi82/8CtNP/AKnI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8JvNv/FMPg/yHI + 4/8szOX/NM7n/zfQ6P830Oj/N9Do/zjQ6P8/0un/Stfq/1jc7P9m4e7/ceXv/3jo8P966fD/e+nw/3zp + 8f+A6vH/iO3z/5Lw9P+c8/b/o/T2/6Pz9f+c8fP/kezw/4Tk6f921dr/ab3B/1uanP9MdHL/QFBM/zc3 + MP8yKiP/MCcg/zEqIv8zLif/NTAq/zcyK/86NC3/Pjgx/0M9Nv9JQz3/T0pF/1dUUP9hYF7/cXFw/4iJ + if+mp6f/xsfH/+Li4v/09fT//P39//7//v/8/Pz/+fr5//f5+P/19/f/8vb2/+/19P/t9PP/6/Pz/+vz + 8//r8/P/6/Pz/+308//v9fT/8vb2//X39//3+fj/+fr5//z8/P/+//7//P39//T19P/i4uL/xsfH/6an + p/+IiYn/cXFw/2FgXv9XVFD/T0pF/0lDPf9DPTb/Pjgx/zo0Lf83Miv/NTAq/zMuJ/8xKiL/MCcg/zIq + I/83NzD/QFBM/0x0cv9bmpz/ab3B/3bV2v+E5On/kezw/5zx8/+j8/X/o/T2/5zz9v+S8PT/iO3z/4Dq + 8f986fH/e+nw/3rp8P946PD/ceXv/2bh7v9Y3Oz/Stfq/z/S6f840Oj/N9Do/zfQ6P830Oj/NM7n/yzM + 5f8hyOP/FMPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8Kvdv/FcPg/yPI + 5P8vzeb/N8/o/znR6f840On/N9Do/zjQ6P8+0un/Stfq/1nc7P9o4u7/dOfw/3zp8f+A6/H/g+vx/4Xs + 8v+I7fP/jvD1/5bz+P+c9vr/n/b5/5zx8/+T5+r/htre/3fKzv9otrn/Wp2f/01+ff9AXVn/Nj85/zAr + I/8tIhn/LyEZ/zMnH/85Lif/QDYv/0g/OP9SSUP/XFRO/2VfWf9taGP/c3Bs/3h3df+AgYD/jI6O/6Ci + ov+5u7z/1NXV/+vs7P/7+/v///////////////////////7////8////+v7///j+/v/2/v7/9f7+//X+ + /v/1/v7/9f7+//b+/v/4/v7/+v7///z////+//////////////////////////v7+//r7Oz/1NXV/7m7 + vP+goqL/jI6O/4CBgP94d3X/c3Bs/21oY/9lX1n/XFRO/1JJQ/9IPzj/QDYv/zkuJ/8zJx//LyEZ/y0i + Gf8wKyP/Nj85/0BdWf9Nfn3/Wp2f/2i2uf93ys7/htre/5Pn6v+c8fP/n/b5/5z2+v+W8/j/jvD1/4jt + 8/+F7PL/g+vx/4Dr8f986fH/dOfw/2ji7v9Z3Oz/Stfq/z7S6f840Oj/N9Do/zjQ6f850en/N8/o/y/N + 5v8jyOT/FcPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8Kvdv/FsPg/yPJ + 5P8vzeb/N9Do/znR6f840On/Ns/o/zfQ6P890un/Sdbq/1jc7P9n4u7/defw/37q8f+G7PL/i+7y/4/v + 8/+T8PT/lvP3/5n3+/+a+f3/mPb6/5Hs8P+G2t7/d8PG/2epq/9YkJD/THh3/0FfXP84R0L/MTMt/y4n + H/8uIhr/MSQd/zcsJf9ANjH/S0M+/1tTTv9tZ2L/gHp2/4+Lh/+al5P/n52b/6Giof+lqKf/rLCw/7q+ + vv/Mz9D/4OLi//Hy8v/8/Pz///////////////////////7////8////+v////n////3////9/////b/ + ///2////9/////f////5////+v////z////+//////////////////////////z8/P/x8vL/4OLi/8zP + 0P+6vr7/rLCw/6Wop/+hoqH/n52b/5qXk/+Pi4f/gHp2/21nYv9bU07/S0M+/0A2Mf83LCX/MSQd/y4i + Gv8uJx//MTMt/zhHQv9BX1z/THh3/1iQkP9nqav/d8PG/4ba3v+R7PD/mPb6/5r5/f+Z9/v/lvP3/5Pw + 9P+P7/P/i+7y/4bs8v9+6vH/defw/2fi7v9Y3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6f850en/N9Do/y/N + 5v8jyeT/FsPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8KvNv/FcPg/yLI + 5P8uzOb/Ns/o/znQ6P840Oj/Ns/o/zfQ6P890un/Sdbq/1fc7P9m4e7/dOfw/4Dq8f+K7fL/k/D0/5ry + 9f+d8/b/nfX4/5v4/P+W+P3/jvL4/4Tk6f93ys7/Z6mr/1eIh/9Jamf/P1RQ/zhDPf8yNS//MC0l/y8o + IP8yKCH/Ni0n/z43Mv9JRED/WVRR/3Braf+KhoT/pKGf/7q3tf/GxMP/ysrJ/8rMy//Jzc3/y9DQ/9LY + 2P/c4uL/5+3t//D29v/2/Pz/+f////r////5////+P7+//f+/v/3/f3/9v39//X8/P/0/Pz/8/z8//P8 + /P/z/Pz/8/z8//T8/P/1/Pz/9v39//f9/f/3/v7/+P7+//n////6////+f////b8/P/w9vb/5+3t/9zi + 4v/S2Nj/y9DQ/8nNzf/KzMv/ysrJ/8bEw/+6t7X/pKGf/4qGhP9wa2n/WVRR/0lEQP8+NzL/Ni0n/zIo + If8vKCD/MC0l/zI1L/84Qz3/P1RQ/0lqZ/9XiIf/Z6mr/3fKzv+E5On/jvL4/5b4/f+b+Pz/nfX4/53z + 9v+a8vX/k/D0/4rt8v+A6vH/dOfw/2bh7v9X3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6P850Oj/Ns/o/y7M + 5v8iyOT/FcPg/wq82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8JvNv/FcPg/yLI + 4/8tzOb/Ns/n/znQ6P850Oj/ONDo/zrR6P9A0+n/S9fq/1jc7P9m4e7/dObw/4Dq8f+N7vP/mfL1/6L0 + 9v+l9fb/ovX3/5v1+P+Q8fb/g+ju/3bV2v9otrn/WJCQ/0lqZ/8+S0b/Njgx/zEuJv8wKSL/MSoi/zQt + Jf85Miv/Pzo1/0lGQv9XVVP/amlo/4WEhP+kpKP/w8LC/9vb2v/o6ej/7O7t/+rt7f/l6+v/4+rq/+Xs + 7P/o7/D/7PPz/+/29v/x+Pn/8vn5//L6+v/y+fn/8vn5//L5+f/x+fn/8fn5//H5+f/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/x+fn/8fn5//H5+f/y+fn/8vn5//L5+f/y+vr/8vn5//H4+f/v9vb/7PPz/+jv + 8P/l7Oz/4+rq/+Xr6//q7e3/7O7t/+jp6P/b29r/w8LC/6Sko/+FhIT/amlo/1dVU/9JRkL/Pzo1/zky + K/80LSX/MSoi/zApIv8xLib/Njgx/z5LRv9Jamf/WJCQ/2i2uf921dr/g+ju/5Dx9v+b9fj/ovX3/6X1 + 9v+i9Pb/mfL1/43u8/+A6vH/dObw/2bh7v9Y3Oz/S9fq/0DT6f860ej/ONDo/znQ6P850Oj/Ns/n/y3M + 5v8iyOP/FcPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnH/wK00/8JvNv/FcPg/yHI + 4/8tzOb/Ns/n/zvR6f880un/PtLp/0HT6f9H1ur/UNnr/1ze7P9o4u7/dOfw/4Hr8v+Q8PT/nfT3/6f2 + 9/+q9fb/pPHy/5jr7v+I4eX/eNLX/2m9wf9anZ//THh3/z9UUP82ODH/MCkh/y4jG/8vJRz/Myoj/zkz + LP9CPDf/TElF/1pYVv9ra2r/f4CA/5ucnP+6u7v/19jY/+7v7//6/Pz//f////r////1+/v/8fj4//D4 + +P/v+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4/+/4 + +P/w+Pj/8fj4//X7+//6/////f////r8/P/u7+//19jY/7q7u/+bnJz/f4CA/2trav9aWFb/TElF/0I8 + N/85Myz/Myoj/y8lHP8uIxv/MCkh/zY4Mf8/VFD/THh3/1qdn/9pvcH/eNLX/4jh5f+Y6+7/pPHy/6r1 + 9v+n9vf/nfT3/5Dw9P+B6/L/dOfw/2ji7v9c3uz/UNnr/0fW6v9B0+n/PtLp/zzS6f870en/Ns/n/y3M + 5v8hyOP/FcPg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8AnLn/AKnH/wK00/8JvNv/FMLg/yHH + 4/8tzOX/N8/n/z7S6f9C1Or/R9bq/0vX6v9S2uv/Wd3s/2Hg7f9r4+7/defw/4Hr8v+R8fb/oPf5/6v5 + +v+u9fX/pevr/5Tc3P9/yMr/a7K0/1uanP9Nfn3/QV9c/zhDPf8xLib/LiMb/y4hGf8xJh//Ny8p/0A7 + Nv9NSkb/Xlxa/3FxcP+Fh4f/mp2d/7K0tf/LzM3/4uPj//P09P/9/v7///////3////5////9f39//T8 + /P/y+/v/8fr6//D5+f/w+Pj/7/j4/+/4+P/v+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4/+/4+P/v+Pj/7/j4//D4+P/w+fn/8fr6//L7 + +//0/Pz/9f39//n////9//////////3+/v/z9PT/4uPj/8vMzf+ytLX/mp2d/4WHh/9xcXD/Xlxa/01K + Rv9AOzb/Ny8p/zEmH/8uIRn/LiMb/zEuJv84Qz3/QV9c/01+ff9bmpz/a7K0/3/Iyv+U3Nz/pevr/671 + 9f+r+fr/oPf5/5Hx9v+B6/L/defw/2vj7v9h4O3/Wd3s/1La6/9L1+r/R9bq/0LU6v8+0un/N8/n/y3M + 5f8hx+P/FMLg/wm82/8CtNP/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8AnLn/AKnH/wKz0/8JvNv/FMLg/yDH + 4/8tzOX/ONDo/0HT6f9J1+v/Udnr/1jc7P9f3u3/ZOHt/2ni7v9u5e//dufw/4Hs8v+R8/f/ofn8/637 + +/+u9PP/o+Lh/47Ix/91qqn/XY2M/0x0cv9AXVn/OEdC/zI1L/8wKSL/LyUc/zEmH/82LSf/Pjgz/0pH + Q/9cWlj/cnNx/4uNjP+jpqb/t7y8/8rOz//b39//6u3t//X4+P/7/v7//f////v////3/v7/9f39//P8 + /P/y+/v/8fr6//D5+f/w+Pj/7/j4/+/4+P/v+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4/+/4+P/v+Pj/7/j4//D4+P/w+fn/8fr6//L7 + +//z/Pz/9f39//f+/v/7/////f////v+/v/1+Pj/6u3t/9vf3//Kzs//t7y8/6Ompv+LjYz/cnNx/1xa + WP9KR0P/Pjgz/zYtJ/8xJh//LyUc/zApIv8yNS//OEdC/0BdWf9MdHL/XY2M/3Wqqf+OyMf/o+Lh/670 + 8/+t+/v/ofn8/5Hz9/+B7PL/dufw/27l7/9p4u7/ZOHt/1/e7f9Y3Oz/Udnr/0nX6/9B0+n/ONDo/y3M + 5f8gx+P/FMLg/wm82/8Cs9P/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8Anbn/AKnH/wK00/8JvNv/E8Lg/yDH + 4/8tzOX/OdDo/0TV6v9Q2ev/W93t/2Tg7v9r4+7/buTv/3Dl7/9z5u//eOjw/4Hs8/+Q8/j/n/n8/6r5 + +/+q7+//nNfW/4S0sf9pjYr/UGpm/0BQTP82Pzn/MTMt/zAtJf8xKiL/Myoj/zcvKf8+ODP/SUVC/1hW + VP9tbWz/iIqJ/6Sop/++w8P/0djY/9/l5f/o7u//7vT1//L4+f/1/Pz/9v39//X8/P/z+/v/8vr6//H5 + +f/x+fn/8Pn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pn5//H5 + +f/x+fn/8vr6//P7+//1/Pz/9v39//X8/P/y+Pn/7vT1/+ju7//f5eX/0djY/77Dw/+kqKf/iIqJ/21t + bP9YVlT/SUVC/z44M/83Lyn/Myoj/zEqIv8wLSX/MTMt/zY/Of9AUEz/UGpm/2mNiv+EtLH/nNfW/6rv + 7/+q+fv/n/n8/5Dz+P+B7PP/eOjw/3Pm7/9w5e//buTv/2vj7v9k4O7/W93t/1DZ6/9E1er/OdDo/y3M + 5f8gx+P/E8Lg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRq/8Anbr/AarI/wS11P8Lvdz/FcPh/yHI + 5P8tzOb/OtDo/0fW6v9U2+z/YeDt/2zk7/905u//d+jw/3jo8P956PD/fOnw/4Pr8v+O8fb/mfX5/6Dz + 9v+e5uf/j8nJ/3ehnv9ddXH/RU9J/zc3MP8wKyP/Licf/y8oIP80LSX/OTMs/0A7Nv9KR0P/WFZU/2lo + aP+AgYH/nKCg/7q/v//T2tr/5ezs/+719f/x+Pn/8fj4//D4+P/x+Pj/8fn5//H4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/x+Pj/8fn5//H4+P/w+Pj/8fj4//H4+f/u9fX/5ezs/9Pa2v+6v7//nKCg/4CB + gf9paGj/WFZU/0pHQ/9AOzb/OTMs/zQtJf8vKCD/Licf/zArI/83NzD/RU9J/111cf93oZ7/j8nJ/57m + 5/+g8/b/mfX5/47x9v+D6/L/fOnw/3no8P946PD/d+jw/3Tm7/9s5O//YeDt/1Tb7P9H1ur/OtDo/y3M + 5v8hyOT/FcPh/wu93P8EtdT/AarI/wCduv8Akav/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AYeg/wOSrP8EoLv/B63K/wy51v8SwN7/GsXi/yTJ + 5P8uzOb/OtDo/0fW6v9W2+z/ZOHu/3Dl7/956PD/furx/4Dr8v+B6/L/g+vx/4Xr8f+J7PP/jOzy/4zm + 6/+G1tv/eLi7/2SQj/9PZWH/PUA6/zIqI/8tIhn/LiIa/zIoIf85Miv/Qjw3/01KRv9cWlj/bW1s/4CB + gf+Wmpr/sbW2/8vR0f/g6Oj/7/f3//X9/f/1/f3/8/v7//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/x+fn/8fn5//L6+v/y+vr/8vr6//L6+v/y+vr/8vr6//L6 + +v/y+vr/8vr6//L6+v/y+vr/8vr6//L6+v/y+vr/8fn5//H5+f/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8/v7//X9/f/1/f3/7/f3/+Do6P/L0dH/sbW2/5aa + mv+AgYH/bW1s/1xaWP9NSkb/Qjw3/zkyK/8yKCH/LiIa/y0iGf8yKiP/PUA6/09lYf9kkI//eLi7/4bW + 2/+M5uv/jOzy/4ns8/+F6/H/g+vx/4Hr8v+A6/L/furx/3no8P9w5e//ZOHu/1bb7P9H1ur/OtDo/y7M + 5v8kyeT/GsXi/xLA3v8Mudb/B63K/wSgu/8Dkqz/AYeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/A4ig/waUrf8Lor3/EbHN/xa92f8cxOH/Isnk/yjL + 5v8wzef/OdDo/0bV6v9V2+z/ZOHu/3Hl7/976fH/g+zy/4nu8/+M7/T/jO3y/4nq8P+D5u3/et/o/2/T + 3f9lwcr/WaSr/0x/gv8/WVf/NTk0/zAnIP8vIRn/MSQd/zYtJ/8/OjX/TElF/15cWf9ycnH/iIqJ/5yg + oP+xtbb/xcvL/9jf3//o8PD/8vr6//b+/v/2/v7/8/v7//D5+f/w+Pj/7/j4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//L6+v/z+/v/9Pz8//T9/f/1/f3/9f7+//X+/v/2/v7/9v7///b+ + ///2/v//9v7///b+/v/1/v7/9f7+//X9/f/0/f3/9Pz8//P7+//y+vr/8fn5//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/7/j4//D4+P/w+fn/8/v7//b+/v/2/v7/8vr6/+jw8P/Y39//xcvL/7G1 + tv+coKD/iIqJ/3Jycf9eXFn/TElF/z86Nf82LSf/MSQd/y8hGf8wJyD/NTk0/z9ZV/9Mf4L/WaSr/2XB + yv9v093/et/o/4Pm7f+J6vD/jO3y/4zv9P+J7vP/g+zy/3vp8f9x5e//ZOHu/1Xb7P9G1er/OdDo/zDN + 5/8oy+b/Isnk/xzE4f8Wvdn/EbHN/wuivf8GlK3/A4ig/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/BIih/wuVrv8Spb//G7XQ/yLC3P8nyeT/Kszn/y3N + 5/8yzuf/OdDo/0XV6v9T2uz/Y+Dt/3Hl7/986fH/h+7z/5Hx9f+X8vX/lu/z/43o7v983ub/ZtDb/1G+ + zP9Bqbj/OI+a/zJvdf8wUFD/MDcy/zEqIv8zJx//Nywl/z43Mv9JRkL/WlhW/3Fxb/+LjYz/pKin/7q/ + v//L0dH/2N/f/+Tr6//s9PT/8vr6//T8/P/0/Pz/8vr6//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/7/j4//D4+P/w+Pj/8fn5//L6+v/z/Pz/9P39//X9/f/2/v7/9v7+//b////3////9/////f/ + ///3////9/////f////2////9v7+//b+/v/1/f3/9P39//P8/P/y+vr/8fn5//D4+P/w+Pj/7/j4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vr6//T8/P/0/Pz/8vr6/+z09P/k6+v/2N/f/8vR + 0f+6v7//pKin/4uNjP9xcW//WlhW/0lGQv8+NzL/Nywl/zMnH/8xKiL/MDcy/zBQUP8yb3X/OI+a/0Gp + uP9Rvsz/ZtDb/3ze5v+N6O7/lu/z/5fy9f+R8fX/h+7z/3zp8f9x5e//Y+Dt/1Pa7P9F1er/OdDo/zLO + 5/8tzef/Kszn/yfJ5P8iwtz/G7XQ/xKlv/8Lla7/BIih/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/BYmh/w6Xr/8ZqMH/I7nS/yzG3/8wzeb/MtDp/zPQ + 6f820Oj/PNHo/0bV6v9T2uv/YuDt/3Dl7/996fH/i+/0/5jz9/+g9ff/n/L0/5Hn6/921t7/VsDN/zip + uv8kkqP/HXqI/x5gaP8kSEr/LDYy/zMuJ/85Lif/QDYx/0lEQP9XVVP/a2tq/4WHh/+jpqb/vsPD/9Pa + 2v/g6Oj/6PDw/+z09P/u9vb/8Pj4//H5+f/x+fn/8fn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+fn/8fn5//H5+f/x+fn/8fn5//H5 + +f/x+fn/8fn5//H5+f/x+fn/8fn5//D5+f/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//H5+f/x+fn/8Pj4/+729v/s9PT/6PDw/+Do + 6P/T2tr/vsPD/6Ompv+Fh4f/a2tq/1dVU/9JRED/QDYx/zkuJ/8zLif/LDYy/yRISv8eYGj/HXqI/ySS + o/84qbr/VsDN/3bW3v+R5+v/n/L0/6D19/+Y8/f/i+/0/33p8f9w5e//YuDt/1Pa6/9G1er/PNHo/zbQ + 6P8z0On/MtDp/zDN5v8sxt//I7nS/xmowf8Ol6//BYmh/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8AgZn/Bomh/xCYsP8dqsL/KbvU/zLJ4f840Oj/OdPr/zrT + 6v880un/QdPp/0rX6v9W2+z/Y+Dt/3Dl7/996vH/jfD1/5z1+P+m9/n/pfP0/5Xl6P90ztb/TrK//yuW + p/8UfY//Dmd1/xJRWv8dP0H/KTQw/zUwKv9ANi//S0M+/1lUUf9qaWj/f4CA/5udnf+3vLz/0djY/+Xs + 7P/v9/f/8vr6//L6+v/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/x+fn/8fn5//H5+f/w+Pj/7vX1/+vy8v/o7+//5ezs/+Pq6v/h6Oj/4Ofn/+Dm5v/f5uX/3+Xl/9/l + 5P/f5eT/3+Xl/9/m5f/g5ub/4Ofn/+Ho6P/j6ur/5ezs/+jv7//r8vL/7vX1//D4+P/x+fn/8fn5//H5 + +f/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/y+vr/8vr6/+/3 + 9//l7Oz/0djY/7e8vP+bnZ3/f4CA/2ppaP9ZVFH/S0M+/0A2L/81MCr/KTQw/x0/Qf8SUVr/Dmd1/xR9 + j/8rlqf/TrK//3TO1v+V5ej/pfP0/6b3+f+c9fj/jfD1/33q8f9w5e//Y+Dt/1bb7P9K1+r/QdPp/zzS + 6f860+r/OdPr/zjQ6P8yyeH/KbvU/x2qwv8QmLD/Bomh/wCBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/B4mh/xGYsP8eqsL/K7zU/zXK4v880un/QNXs/0PW + 7P9G1ur/S9fq/1Pa6/9c3uz/ZuHu/3Hl7/996vH/jvH2/573+v+q+vv/qvX1/5nk5v94yM3/UKaw/yuF + kv8Tanj/DFRg/xBCSP8aNTb/KS8r/zcyK/9IPzj/W1NO/3Braf+FhIT/m5yc/7O2tv/Kz9D/3+Xl/+71 + 9f/1/f3/9v7+//T8/P/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//L5 + +f/0+/v/9v39//b9/f/0+vr/7fPz/+Pp6f/Z39//0NbW/8rPz//Fysr/wsfG/8DEw/++wsD/vcG//73A + vv+9wL7/vcG//77CwP/AxMP/wsfG/8XKyv/Kz8//0NbW/9nf3//j6en/7fPz//T6+v/2/f3/9v39//T7 + +//y+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/0/Pz/9v7+//X9 + /f/u9fX/3+Xl/8rP0P+ztrb/m5yc/4WEhP9wa2n/W1NO/0g/OP83Miv/KS8r/xo1Nv8QQkj/DFRg/xNq + eP8rhZL/UKaw/3jIzf+Z5Ob/qvX1/6r6+/+e9/r/jvH2/33q8f9x5e//ZuHu/1ze7P9T2uv/S9fq/0bW + 6v9D1uz/QNXs/zzS6f81yuL/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/B4mh/xGYsP8eqsL/K7zU/zbL4v8/0+r/Rtft/0zZ + 7f9S2uz/WNzs/17e7f9k4e3/auPu/3Lm7/996vH/jfH2/5/5/P+s/P3/rfb2/57i4/9+wcT/V5qg/zN1 + fP8cV1//E0NJ/xQ0Nv8cLCr/KSwm/zo0Lf9SSUP/bWdi/4qGhP+kpKP/uru7/8zP0P/b4OH/6O7v//H4 + +P/1/f3/9v7+//T8/P/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4/+/4+P/v+Pj/8Pj4//P6 + +v/4/f3//P////z+/v/3+Pj/6uzs/9nb2//Gycn/tbm5/6mtrf+hpKP/m56c/5iZlv+VlZL/kpKP/5GR + jf+RkY3/kpKP/5WVkv+YmZb/m56c/6Gko/+pra3/tbm5/8bJyf/Z29v/6uzs//f4+P/8/v7//P////j9 + /f/z+vr/8Pj4/+/4+P/v+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/0/Pz/9v7+//X9 + /f/x+Pj/6O7v/9vg4f/Mz9D/uru7/6Sko/+KhoT/bWdi/1JJQ/86NC3/KSwm/xwsKv8UNDb/E0NJ/xxX + X/8zdXz/V5qg/37BxP+e4uP/rfb2/6z8/f+f+fz/jfH2/33q8f9y5u//auPu/2Th7f9e3u3/WNzs/1La + 7P9M2e3/Rtft/z/T6v82y+L/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/B4mh/xCYsP8dqsL/KrzU/zbK4v9B1Or/S9nt/1Xd + 7v9d3+3/ZeHu/2nj7v9s5O7/cOXv/3Xn8P996vH/jPH3/535/P+q/P3/rPX1/5/f3v+Curr/X4+P/z5m + Z/8oSEn/HTQ0/xsoJv8gJB//LCki/z44Mf9cVE7/gHp2/6Shn//DwsL/19jY/+Pm5//q7+//7vT1//H4 + +P/z+/v/8/v7//L6+v/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4/+/4+P/v+Pj/8Pj4//T6 + +v/5/v7//f////3////19vb/4+Pk/8rLzP+wsbL/mJqa/4iJif98fXv/dHNw/25saP9qZ2L/Z2Ne/2Vi + XP9lYlz/Z2Ne/2pnYv9ubGj/dHNw/3x9e/+IiYn/mJqa/7Cxsv/Ky8z/4+Pk//X29v/9/////f////n+ + /v/0+vr/8Pj4/+/4+P/v+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/y+vr/8/v7//P7 + +//x+Pj/7vT1/+rv7//j5uf/19jY/8PCwv+koZ//gHp2/1xUTv8+ODH/LCki/yAkH/8bKCb/HTQ0/yhI + Sf8+Zmf/X4+P/4K6uv+f397/rPX1/6r8/f+d+fz/jPH3/33q8f915/D/cOXv/2zk7v9p4+7/ZeHu/13f + 7f9V3e7/S9nt/0HU6v82yuL/KrzU/x2qwv8QmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8cqsL/KbvU/zXK4v9C1Or/T9vt/1zf + 7/9n4u//b+Xv/3Pm7/915/D/dufw/3jo8P9/6vH/i/D2/5n2+v+j+Pr/pe/w/5nX1/+AsK//YoOB/0VZ + Vv8yOzb/Jykk/yMgGv8lIBn/Lyki/0M9Nv9lX1n/j4uH/7q3tf/b29r/7u/v//X4+f/1+vr/8vj5//D4 + +P/w+Pj/8Pn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fj4//P6 + +v/4/f3/+/7+//n7+//u7+//2NjY/7q7u/+am5v/fn9//2tqaf9dW1n/U1BM/01IQv9IQjv/RD02/0I7 + NP9COzT/RD02/0hCO/9NSEL/U1BM/11bWf9ramn/fn9//5qbm/+6u7v/2NjY/+7v7//5+/v/+/7+//j9 + /f/z+vr/8fj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pn5//D4 + +P/w+Pj/8vj5//X6+v/1+Pn/7u/v/9vb2v+6t7X/j4uH/2VfWf9DPTb/Lyki/yUgGf8jIBr/Jykk/zI7 + Nv9FWVb/YoOB/4Cwr/+Z19f/pe/w/6P4+v+Z9vr/i/D2/3/q8f946PD/dufw/3Xn8P9z5u//b+Xv/2fi + 7/9c3+//T9vt/0LU6v81yuL/KbvU/xyqwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Udzu/2Dh + 7/9s5O//defw/3rp8P996vH/furx/3/q8f+C6vH/ie3z/5Dw9f+U7vL/k+Pm/4jKzP9zo6P/W3d0/0VP + Sf82Myz/LSQc/ygeFv8qIRn/NS0m/0lDPf9taGP/mpaT/8bEw//o6ej/+vz8///////7////9fz8//H4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//L6+v/z+vr/8vn5//H3 + 9v/x9PT/7vDv/+bn5v/Y19b/wcC//6Oiof+Eg4L/aWhn/1ZUUv9IRUL/Pzo1/zgyK/8zLCT/Lycf/y0l + HP8tJRz/Lycf/zMsJP84Miv/Pzo1/0hFQv9WVFL/aWhn/4SDgv+joqH/wcC//9jX1v/m5+b/7vDv//H0 + 9P/x9/b/8vn5//P6+v/y+vr/8fn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/x+Pj/9fz8//v/////////+vz8/+jp6P/GxMP/mpaT/21oY/9JQz3/NS0m/yohGf8oHhb/LSQc/zYz + LP9FT0n/W3d0/3Ojo/+Iysz/k+Pm/5Tu8v+Q8PX/ie3z/4Lq8f9/6vH/furx/33q8f966fD/defw/2zk + 7/9g4e//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Utzu/2Hh + 7/9u5e//eOjw/3/r8f+E7fL/h+3z/4jt8v+I6/H/hunw/4Lm7f993ub/ddDY/2q3vf9ck5X/TGtq/z9H + Qv82Lyf/MCMb/y4gGP8wJh7/OjMt/09KRf9zb2v/npyZ/8rIx//s6+v//f7+///////8////9vz8//H4 + +P/w+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/v+Pj/7/j4//D4+P/x+fn/9Pz8//j+/v/5////9vv7/+/z + 8v/k5uX/19fV/8fFw/+0sq//npuY/4WCf/9saWf/V1RR/0dDP/87NjH/Miwm/ywlHv8nHxf/JBsT/yIZ + EP8iGRD/JBsT/ycfF/8sJR7/Miwm/zs2Mf9HQz//V1RR/2xpZ/+Fgn//npuY/7Syr//HxcP/19fV/+Tm + 5f/v8/L/9vv7//n////4/v7/9Pz8//H5+f/w+Pj/7/j4/+/4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4//D4 + +P/x+Pj/9vz8//z//////////f7+/+zr6//KyMf/npyZ/3Nva/9PSkX/OjMt/zAmHv8uIBj/MCMb/zYv + J/8/R0L/TGtq/1yTlf9qt73/ddDY/33e5v+C5u3/hunw/4jr8f+I7fL/h+3z/4Tt8v9/6/H/eOjw/27l + 7/9h4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Utzu/2Dh + 7/9u5e//eejw/4Ps8v+M7/T/kvH1/5Pw9P+P6/D/g+Tr/3PZ4/9hy9f/UrnG/0ihrP8/gYf/Ol9g/zZC + Pv80Lyf/MyYe/zMmHv83Lij/Qj04/1dTUP94d3T/oaGg/8rLyv/q7Oz/+v7+//7////7////9fz8//H4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/v+Pj/7/j4//D4+P/y+fn/9/39//z////+////+fn5/+rp + 6P/U0tD/ure0/6CcmP+KhYH/dnFt/2VgW/9VUEv/R0I9/zw3Mf8zLSf/LSYf/yggGf8kHBT/IhkQ/yEY + D/8hGA//IhkQ/yQcFP8oIBn/LSYf/zMtJ/88NzH/R0I9/1VQS/9lYFv/dnFt/4qFgf+gnJj/ure0/9TS + 0P/q6ej/+fn5//7////8////9/39//L5+f/w+Pj/7/j4/+/4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/x+Pj/9fz8//v////+////+v7+/+rs7P/Ky8r/oaGg/3h3dP9XU1D/Qj04/zcuKP8zJh7/MyYe/zQv + J/82Qj7/Ol9g/z+Bh/9Ioaz/UrnG/2HL1/9z2eP/g+Tr/4/r8P+T8PT/kvH1/4zv9P+D7PL/eejw/27l + 7/9g4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Udzu/1/g + 7/9t5O//eejw/4Xt8/+S8fX/m/T3/53y9f+V6+//gN7l/2TM2P9It8f/MqGy/yiKmf8lb3j/KFRX/y09 + Ov8yLyn/Nisk/zovKP9BOTT/TUpH/2FgXv+AgYD/paen/8nNzf/l6+v/9fv7//n////3////8/v7//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/v+Pj/7/j4//D4+P/z+vr/+P7+//7/////////9/f3/+Hg + 3//Bvrv/nJiU/3p1cP9hW1X/UUtF/0dBOv9BOjT/PDUv/zYwKf8yKyT/Lycg/ywkHP8qIhr/KSEY/ygg + F/8oIBf/KSEY/yoiGv8sJBz/Lycg/zIrJP82MCn/PDUv/0E6NP9HQTr/UUtF/2FbVf96dXD/nJiU/8G+ + u//h4N//9/f3///////+////+P7+//P6+v/w+Pj/7/j4/+/4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8/v7//f////5////9fv7/+Xr6//Jzc3/paen/4CBgP9hYF7/TUpH/0E5NP86Lyj/Nisk/zIv + Kf8tPTr/KFRX/yVveP8oipn/MqGy/0i3x/9kzNj/gN7l/5Xr7/+d8vX/m/T3/5Lx9f+F7fP/eejw/23k + 7/9f4O//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4ft8/+X8/f/ovb4/6X09v+a6+3/f9jf/1vAy/84pbX/HYye/xJ1hf8TXWn/G0hN/yc4 + Nv8xMCr/OjEq/0M6NP9OSET/XVpZ/3FxcP+Njo7/rLCw/8vQ0P/j6ur/8fj4//X9/f/1/f3/8vr6//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H4+P/y+fn/9vz8//n9/f/3+fn/7Ozs/9LQ + z/+sqaX/gn14/1xWUP9DPDX/Ny8o/zMsJP80LSX/Ni8n/zYvKP82Lyj/NzAp/zgxKf85Mir/OjIq/zoy + Kv86Mir/OjIq/zkyKv84MSn/NzAp/zYvKP82Lyj/Ni8n/zQtJf8zLCT/Ny8o/0M8Nf9cVlD/gn14/6yp + pf/S0M//7Ozs//f5+f/5/f3/9vz8//L5+f/x+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8vr6//X9/f/1/f3/8fj4/+Pq6v/L0ND/rLCw/42Ojv9xcXD/XVpZ/05IRP9DOjT/OjEq/zEw + Kv8nODb/G0hN/xNdaf8SdYX/HYye/ziltf9bwMv/f9jf/5rr7f+l9Pb/ovb4/5fz9/+H7fP/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4ju9P+Z9Pj/pfj6/6j19v+d6ev/gNLX/1q0vv8zlKL/F3iI/wxicP8OTlf/Fz5B/yUz + Mf8zMSv/QDgx/1BHQf9hW1j/dHJx/4iJif+go6P/ur6//9LY2P/l7Oz/8Pj4//T8/P/z/Pz/8fn5//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//L5+f/z+/v/9Pv7//P6+v/x9/b/7/Pz/+vt7P/i4uH/0tDP/7e0 + sf+Sjon/a2Vf/0lCO/80LCT/KyMb/ysjG/8vKCH/Ni8o/zs0Lv9COzX/SUM8/1BJQ/9VT0j/WFJL/1pT + Tf9aU03/WFJL/1VPSP9QSUP/SUM8/0I7Nf87NC7/Ni8o/y8oIf8rIxv/KyMb/zQsJP9JQjv/a2Vf/5KO + if+3tLH/0tDP/+Li4f/r7ez/7/Pz//H39v/z+vr/9Pv7//P7+//y+fn/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8fn5//P8/P/0/Pz/8Pj4/+Xs7P/S2Nj/ur6//6Cjo/+IiYn/dHJx/2FbWP9QR0H/QDgx/zMx + K/8lMzH/Fz5B/w5OV/8MYnD/F3iI/zOUov9atL7/gNLX/53p6/+o9fb/pfj6/5n0+P+I7vT/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4nu9P+Z9fn/pvn7/6r29v+f5+j/g8zP/16pr/84hI3/HWVw/xFQWf8RPkT/GDMz/yUu + Kv81Miv/SEA6/2BYU/95dHH/kZCP/6enp/+6vb3/zdHR/9zi4v/o8PD/7/j4//L7+//y+/v/8fn5//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//T7+//4/v7/+v////j9/f/x9PT/5Obl/9TU0//BwL3/rKml/5KO + if90bmn/Vk9I/z01Lf8tJR3/KCAZ/yojHP8yKyX/OzYw/0ZBO/9UT0r/ZF9a/3Nuaf9+eXT/hH97/4iD + fv+Ig37/hH97/355dP9zbmn/ZF9a/1RPSv9GQTv/OzYw/zIrJf8qIxz/KCAZ/y0lHf89NS3/Vk9I/3Ru + af+Sjon/rKml/8HAvf/U1NP/5Obl//H09P/4/f3/+v////j+/v/0+/v/8fn5//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8fn5//L7+//y+/v/7/j4/+jw8P/c4uL/zdHR/7q9vf+np6f/kZCP/3l0cf9gWFP/SEA6/zUy + K/8lLir/GDMz/xE+RP8RUFn/HWVw/ziEjf9eqa//g8zP/5/n6P+q9vb/pvn7/5n1+f+J7vT/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9P+Z9vn/pfr8/6n19v+g5eX/h8bH/2SeoP9Cdnn/KFVY/xw/Qv8YMTH/HSkm/ycq + JP84Myz/UElC/3BpZP+RjYr/sK+t/8bHx//W2Nj/4OTl/+ft7f/s8/P/8Pj4//H6+v/x+fn/8Pn5//D4 + +P/w+Pj/8Pj4/+/4+P/w+Pj/8fn5//b8/P/8//////////v8/P/u7ez/19XT/7q3tP+dmJX/gn14/2tl + X/9WT0j/RDw0/zYuJv8uJh7/LSUe/zErJP85NC//RUE9/1VRTv9rZ2T/g4B9/5qWk/+rqKX/tbGu/7m2 + s/+5trP/tbGu/6uopf+alpP/g4B9/2tnZP9VUU7/RUE9/zk0L/8xKyT/LSUe/y4mHv82Lib/RDw0/1ZP + SP9rZV//gn14/52Ylf+6t7T/19XT/+7t7P/7/Pz///////z////2/Pz/8fn5//D4+P/v+Pj/8Pj4//D4 + +P/w+Pj/8Pn5//H5+f/x+vr/8Pj4/+zz8//n7e3/4OTl/9bY2P/Gx8f/sK+t/5GNiv9waWT/UElC/zgz + LP8nKiT/HSkm/xgxMf8cP0L/KFVY/0J2ef9knqD/h8bH/6Dl5f+p9fb/pfr8/5n2+f+I7/T/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+Y9vr/pPr8/6j19v+h4+P/isHA/2uVlP9Mamj/M0dE/ycyL/8hJSH/ISEb/yom + H/86NC3/V1BJ/314c/+no6D/ysnI/+Li4v/t7/D/8fX1//D29v/v9vb/8Pj4//D5+f/w+fn/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//b9/f/8//////////n7+//m5+b/x8XD/6Cdmf96dXD/XFZQ/0lC + O/89NS3/Ni4m/zMrI/8zKyT/NS8o/zs2Mf9FQj7/VFFP/2dmZP+CgYD/oZ+e/728u//T0dD/393c/+Xk + 4v/l5OL/393c/9PR0P+9vLv/oZ+e/4KBgP9nZmT/VFFP/0VCPv87NjH/NS8o/zMrJP8zKyP/Ni4m/z01 + Lf9JQjv/XFZQ/3p1cP+gnZn/x8XD/+bn5v/5+/v///////z////2/f3/8fn5//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D5+f/w+fn/8Pj4/+/29v/w9vb/8fX1/+3v8P/i4uL/ysnI/6ejoP99eHP/V1BJ/zo0 + Lf8qJh//ISEb/yElIf8nMi//M0dE/0xqaP9rlZT/isHA/6Hj4/+o9fb/pPr8/5j2+v+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9vv/o/r9/6j19v+h4uH/jL27/2+Pi/9RYVz/Oj03/y0pIf8lHRb/JBwT/ysj + G/88NC3/W1VO/4aBff+0sa7/29vZ//P09P/8////+/////b8/P/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//T6+v/3/Pz/9/r6/+7v7//Y19b/tLKv/4qFgf9hW1X/Qzw1/zQs + JP8tJR3/LiYe/zMrJP84MSv/Pzo0/0lFQf9VU1H/ZmVk/3t8e/+YmZn/uLm5/9bX1v/s7e3/+fr5//// + ////////+fr5/+zt7f/W19b/uLm5/5iZmf97fHv/ZmVk/1VTUf9JRUH/Pzo0/zgxK/8zKyT/LiYe/y0l + Hf80LCT/Qzw1/2FbVf+KhYH/tLKv/9jX1v/u7+//9/r6//f8/P/0+vr/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/2/Pz/+/////z////z9PT/29vZ/7Sxrv+GgX3/W1VO/zw0 + Lf8rIxv/JBwT/yUdFv8tKSH/Oj03/1FhXP9vj4v/jL27/6Hi4f+o9fb/o/r9/5f2+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GMiP9UXVf/PTkx/y8kG/8nGhH/JRkQ/ywi + Gv88NS3/XFZQ/4mEgP+4tbP/4eDe//n6+f////////////r////1/Pz/8/v7//P7+//z+/v/8/v7//P7 + +//z/Pz/9Pz8//T8/f/z+/v/8fj4/+/19f/s8PH/5ejo/9jZ2f/BwL//npuY/3Zxbf9RS0T/Ny8o/ysj + G/8oIBn/LSUe/zUvKP8/OjT/S0dD/1pYVf9ra2n/fn9//5SWlv+usLD/ysvL/+Pk5P/29vb///////// + //////////////b29v/j5OT/ysvL/66wsP+Ulpb/fn9//2traf9aWFX/S0dD/z86NP81Lyj/LSUe/ygg + Gf8rIxv/Ny8o/1FLRP92cW3/npuY/8HAv//Y2dn/5ejo/+zw8f/v9fX/8fj4//P7+//0/P3/9Pz8//P8 + /P/z+/v/8/v7//P7+//z+/v/8/v7//X8/P/6///////////////5+vn/4eDe/7i1s/+JhID/XFZQ/zw1 + Lf8sIhr/JRkQ/ycaEf8vJBv/PTkx/1RdV/9xjIj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jbu4/3GMh/9UXVb/PTgw/zAjGv8nGRD/JRkQ/ywi + Gf88NS3/XFZQ/4mEgP+4tbL/4eDe//n6+v////////////3////4////9v////b////2////9v////b/ + ///3////+P////n////3////8fn5/+ju7//c4eH/zdDQ/7u7u/+joqH/hYJ//2RfW/9HQTr/Mywk/ysj + G/8qIxz/MSsk/zs2Mf9JRUH/WlhV/25ubP+Fh4b/m56e/7CztP/FyMj/2dzc/+vs7P/4+fn///////// + //////////////j5+f/r7Oz/2dzc/8XIyP+ws7T/m56e/4WHhv9ubmz/WlhV/0lFQf87NjH/MSsk/yoj + HP8rIxv/Mywk/0dBOv9kX1v/hYJ//6Oiof+7u7v/zdDQ/9zh4f/o7u//8fn5//f////5////+P////f/ + ///2////9v////b////2////9v////j////9///////////////5+vr/4eDe/7i1sv+JhID/XFZQ/zw1 + Lf8sIhn/JRkQ/ycZEP8wIxr/PTgw/1RdVv9xjIf/jbu4/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GNiP9TXlf/PDkx/y8kHP8nGhH/JRkQ/ywi + Gv88NS3/XFZQ/4iEgP+3tbL/4ODe//j6+v////////////z////3////9v////b+///2/v//9v7///b/ + ///3////+f////n////2////7fX1/93k5P/Jzs7/srW1/5ucnP+Eg4L/bGlm/1VQS/9BOjT/NC0l/y8o + If8yKyX/OTQv/0VCPv9VU1H/a2tp/4WHhv+go6P/uL29/8vQ0f/a4OD/5evs/+709P/1+/v/+v////z/ + ///8////+v////X7+//u9PT/5evs/9rg4P/L0NH/uL29/6Cjo/+Fh4b/a2tp/1VTUf9FQj7/OTQv/zIr + Jf8vKCH/NC0l/0E6NP9VUEv/bGlm/4SDgv+bnJz/srW1/8nOzv/d5OT/7fX1//b////5////+f////f/ + ///2////9v7///b+///2/v//9v////f////8///////////////4+vr/4ODe/7e1sv+IhID/XFZQ/zw1 + Lf8sIhr/JRkQ/ycaEf8vJBz/PDkx/1NeV/9xjYj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3CNif9TX1n/PDoz/y8mHv8nGxP/JRoS/ywi + Gv87NC3/WVRO/4KAfP+usK3/1NjX/+vy8f/0/Pz/9f39//L5+f/u9vb/7fX1/+319f/t9fX/7fX1/+31 + 9f/v9/f/8fn5//L6+v/u9vX/4urp/87U1P+0uLj/mJqa/35/fv9paGf/V1RR/0dCPf88NS//Ni8n/zYv + KP87NjD/RUE9/1RRT/9mZWT/fn9//5uenv+4vb3/0dfX/+Ho6P/q8fH/7vX1//D39//x+Pj/8/r6//T7 + +//0+/v/8/r6//H4+P/w9/f/7vX1/+rx8f/h6Oj/0dfX/7i9vf+bnp7/fn9//2ZlZP9UUU//RUE9/zs2 + MP82Lyj/Ni8n/zw1L/9HQj3/V1RR/2loZ/9+f37/mJqa/7S4uP/O1NT/4urp/+729f/y+vr/8fn5/+/3 + 9//t9fX/7fX1/+319f/t9fX/7fX1/+729v/y+fn/9f39//T8/P/r8vH/1NjX/66wrf+CgHz/WVRO/zs0 + Lf8sIhr/JRoS/ycbE/8vJh7/PDoz/1NfWf9wjYn/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8mHv8nHBT/JhsT/ywj + G/86Myv/VE9I/3h2cf+en5z/v8PB/9Ta2P/d4+L/3uTj/9vh4P/Y3t3/2N7d/9je3f/Y3t3/2N7d/9je + 3f/Z397/3OLh/9zi4f/Y3t3/zdLR/7i8u/+doJ//gYKB/2hoZv9WVFL/R0RA/z03Mv83MCn/Ni8o/zs0 + Lv9GQTv/VVFO/2dmZP97fHv/lJaW/7C0tP/L0NH/4ejo/+729v/z+/v/9Pz8//L6+v/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/y+vr/9Pz8//P7+//u9vb/4ejo/8vQ0f+wtLT/lJaW/3t8e/9nZmT/VVFO/0ZB + O/87NC7/Ni8o/zcwKf89NzL/R0RA/1ZUUv9oaGb/gYKB/52gn/+4vLv/zdLR/9je3f/c4uH/3OLh/9nf + 3v/Y3t3/2N7d/9je3f/Y3t3/2N7d/9je3f/b4eD/3uTj/93j4v/U2tj/v8PB/56fnP94dnH/VE9I/zoz + K/8sIxv/JhsT/yccFP8vJh7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8mHv8oHRX/Jx0U/y0k + G/84MCn/TEZA/2hlX/+GhYH/oKGe/7CzsP+3urj/uLu5/7a5tv+ztrT/s7a0/7O2tP+ztrT/s7a0/7O2 + tP+0t7X/trm3/7e6t/+0t7T/qqyq/5iamP+CgoD/ampn/1ZUUv9IRUH/PTg0/zUvKf8zLCX/Ni8o/0I7 + Nf9UT0r/a2dk/4KBgP+YmZn/r7Gy/8XKyv/a4OD/6vHx//P7+//2////9f7+//L7+//w+Pj/7/j4/+/3 + 9//v9/f/7/j4//D4+P/y+/v/9f7+//b////z+/v/6vHx/9rg4P/Fysr/r7Gy/5iZmf+CgYD/a2dk/1RP + Sv9COzX/Ni8o/zMsJf81Lyn/PTg0/0hFQf9WVFL/ampn/4KCgP+Ympj/qqyq/7S3tP+3urf/trm3/7S3 + tf+ztrT/s7a0/7O2tP+ztrT/s7a0/7O2tP+2ubb/uLu5/7e6uP+ws7D/oKGe/4aFgf9oZV//TEZA/zgw + Kf8tJBv/Jx0U/ygdFf8vJh7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8nH/8pHhb/KR4W/y0k + HP81Lib/Qzw1/1VRSv9pZmH/enl0/4WFgP+KioX/ioqG/4mJhP+Ih4P/iIeD/4iHg/+Ih4P/iIeD/4iH + g/+IiIP/iomF/4qKhf+Ih4P/gYB8/3V0b/9mY1//VlNO/0hEQP8+OTT/NjAq/zApI/8wKSH/NzAp/0lD + PP9kX1r/g4B9/6Gfnv+4ubn/y83O/9re3v/l6+z/7vX1//T8/P/1/v7/9Pz8//L6+v/w+Pj/7/j4/+/3 + 9//v9/f/7/j4//D4+P/y+vr/9Pz8//X+/v/0/Pz/7vX1/+Xr7P/a3t7/y83O/7i5uf+hn57/g4B9/2Rf + Wv9JQzz/NzAp/zApIf8wKSP/NjAq/z45NP9IRED/VlNO/2ZjX/91dG//gYB8/4iHg/+KioX/iomF/4iI + g/+Ih4P/iIeD/4iHg/+Ih4P/iIeD/4iHg/+JiYT/ioqG/4qKhf+FhYD/enl0/2lmYf9VUUr/Qzw1/zUu + Jv8tJBz/KR4W/ykeFv8vJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8nH/8qHxf/KyAY/y4l + Hf8zKyP/OjMr/0M9Nv9OSEL/V1JM/1xYUv9fW1X/X1tV/19aVP9eWlT/XlpT/15aU/9eWlP/XlpT/15a + U/9eWlT/X1tV/19bVf9eWlT/WlZQ/1RQSv9MR0H/RD84/z03Mf83MSv/MSoj/y0lHv8uJh//ODEp/1BJ + Q/9zbmn/mpaT/728u//W19b/5Obn/+vw8P/u9PT/8Pf3//L6+v/y+/v/8vr6//H5+f/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/x+fn/8vr6//L7+//y+vr/8Pf3/+709P/r8PD/5Obn/9bX1v+9vLv/mpaT/3Nu + af9QSUP/ODEp/y4mH/8tJR7/MSoj/zcxK/89NzH/RD84/0xHQf9UUEr/WlZQ/15aVP9fW1X/X1tV/15a + VP9eWlP/XlpT/15aU/9eWlP/XlpT/15aVP9fWlT/X1tV/19bVf9cWFL/V1JM/05IQv9DPTb/OjMr/zMr + I/8uJR3/KyAY/yofF/8vJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8rIBj/LCEZ/y4m + Hf8xKSH/Mysj/zYvJ/85Mir/PDUu/z43MP8/ODD/Pzgw/z44MP8+NzD/Pjcw/z43MP8+NzD/Pjcw/z43 + MP8+NzD/Pjgw/z44MP8+NzD/PTYv/zs0Lf85Miv/Ny8o/zUtJv8yKyP/LSYe/yoiGv8tJR3/OTIq/1VP + SP9+eXT/q6il/9PR0P/s7e3/9/r6//n9/f/1+/v/8fj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fj4//X7+//5/f3/9/r6/+zt7f/T0dD/q6il/355 + dP9VT0j/OTIq/y0lHf8qIhr/LSYe/zIrI/81LSb/Ny8o/zkyK/87NC3/PTYv/z43MP8+ODD/Pjgw/z43 + MP8+NzD/Pjcw/z43MP8+NzD/Pjcw/z43MP8+ODD/Pzgw/z84MP8+NzD/PDUu/zkyKv82Lyf/Mysj/zEp + If8uJh3/LCEZ/ysgGP8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m + Hv8wKCD/MCcf/y8nHv8vJh3/LyYd/y8mHP8vJRz/LiUc/y8lHP8vJRz/LyYc/y8mHP8vJhz/LyYc/y8m + HP8vJRz/LyUc/y4lHP8vJRz/LyYc/y8mHf8vJh3/MCce/zAnH/8vJx7/KyMa/ykgGP8sIxv/OTIq/1hR + Sv+Dfnn/s6+s/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+s/4N+ + ef9YUUr/OTIq/ywjG/8pIBj/KyMa/y8nHv8wJx//MCce/y8mHf8vJh3/LyYc/y8lHP8uJRz/LyUc/y8l + HP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8lHP8vJRz/LiUc/y8lHP8vJhz/LyYd/y8mHf8vJx7/MCcf/zAo + IP8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m + Hv8wJx//LyYd/y4kGv8sIhf/KyAU/ysfE/8qHxL/Kh8S/yofEv8qHxL/Kh8S/yofEv8qHxL/Kh8S/yof + Ev8qHxL/Kh8S/yofEv8qHxL/KyAT/ywhFf8tIhf/LiQZ/y8lG/8vJRv/KyIY/ykgFv8sIxv/OTIq/1hR + S/+Dfnn/s6+t/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+t/4N+ + ef9YUUv/OTIq/ywjG/8pIBb/KyIY/y8lG/8vJRv/LiQZ/y0iF/8sIRX/KyAT/yofEv8qHxL/Kh8S/yof + Ev8qHxL/Kh8S/yofEv8qHxL/Kh8S/yofEv8qHxL/Kh8S/yofEv8rHxP/KyAU/ywiF/8uJBr/LyYd/zAn + H/8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m + Hv8wKB//LyYd/y4lGv8uIxf/LSEU/ywgE/8sIBL/LCAS/ywgEv8sIBL/LCAT/ywgE/8sIBP/LCAT/ywg + E/8sIBL/LCAS/ywgEv8sIBL/LSET/y0iFf8uIxf/LyUZ/zAmG/8vJhv/LCIY/ykgFv8sIxv/OjIq/1hR + S/+Dfnn/s6+t/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+t/4N+ + ef9YUUv/OjIq/ywjG/8pIBb/LCIY/y8mG/8wJhv/LyUZ/y4jF/8tIhX/LSET/ywgEv8sIBL/LCAS/ywg + Ev8sIBP/LCAT/ywgE/8sIBP/LCAT/ywgEv8sIBL/LCAS/ywgEv8sIBP/LSEU/y4jF/8uJRr/LyYd/zAo + H/8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m + Hv8wKCD/MCgf/y8nHv8vJh3/LyYd/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8m + HP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHf8vJx3/MCce/zAnH/8vJx7/KyMa/ykgGP8sIxv/OjIq/1hR + Sv+Dfnn/s6+s/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+s/4N+ + ef9YUUr/OjIq/ywjG/8pIBj/KyMa/y8nHv8wJx//MCce/y8nHf8vJh3/LyYc/y8mHP8vJhz/LyYc/y8m + HP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYd/y8mHf8vJx7/MCgf/zAo + IP8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRj/LCIZ/y8m + Hf8wKCH/Lykj/y4qJ/8uKyr/LSwt/y0sL/8sLDD/LCww/ywsMP8sLC//LCwv/ywsL/8sLC//LCwv/yws + L/8sLC//LCww/ywsMP8sLC//LCwu/ywrLf8sKir/LCko/ywoJv8sJyP/KSMe/ycgGv8rJB3/OTEq/1VP + SP9+eXT/q6il/9PR0P/s7e3/9/r6//n9/f/1+/v/8fj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fj4//X7+//5/f3/9/r6/+zt7f/T0dD/q6il/355 + dP9VT0j/OTEq/yskHf8nIRr/KSMe/ywnI/8tKCb/LCko/ywqKv8sKy3/LCwu/ywsL/8sLDD/LCww/yws + L/8sLC//LCwv/ywsL/8sLC//LCwv/ywsL/8sLDD/LCww/ywsMP8tLC//LSwt/y4rKv8uKif/Lykj/zAo + If8vJh3/LCIZ/ywhGP8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIBf/LSEY/y8m + Hf8vKSP/Lisr/ysuNv8oMUH/JjRL/yU2Uf8kNlT/JDZU/yQ2U/8lNVL/JTVS/yU1Uv8lNVL/JTVS/yU1 + Uv8lNlL/JTZT/yU2U/8lNVL/JDRO/yMxSP8iLUD/Iio4/yInMf8jJSv/IiEj/yMgHv8pIx//NzAp/1BK + Q/90bmn/mpeT/728u//W19b/5Obn/+vw8P/u9PT/8Pf3//L6+v/y+/v/8vr6//H5+f/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/x+fn/8vr6//L7+//y+vr/8Pf3/+709P/r8PD/5Obn/9bX1v+9vLv/mpeT/3Ru + af9QSkP/NzAp/yokH/8lIR7/JCMk/yUnK/8lKTH/JCw4/yQvQf8kMkj/JTRO/yU1Uv8lNlP/JTZT/yU1 + Uv8lNVL/JTVS/yU1Uv8lNVL/JTVS/yU1Uv8kNlP/JDZU/yQ2VP8lNlH/JjRL/ygxQf8rLjb/Lisr/y8p + I/8vJh3/LSEY/ywgF/8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIBb/LSEW/y8l + HP8vKib/Ky41/yc0Sv8iOmD/HT9z/xtDfv8ZRIP/GUOD/xpDgf8aQn//GkJ//xpCf/8aQn//GkJ//xpC + f/8aQoD/GkOB/xpDgf8aQn//GT95/xg5bf8WMl3/FCtN/xQlP/8WIjX/GR8q/x4fI/8mIyH/NC4p/0pD + PP9mYFr/hIB9/6Ggnv+4ubn/y83O/9re3v/l6+z/7vX1//T8/P/1/v7/9Pz8//L6+v/w+Pj/7/j4/+/3 + 9//v9/f/7/j4//D4+P/y+vr/9Pz8//X+/v/0/Pz/7vX1/+Xr7P/a3t7/y83O/7i5uf+hoJ7/hIB9/2Vg + Wv9KQzz/NS8p/yglIv8hIiT/HiMr/xwnNv8aKkH/GS9O/xk1Xv8aO23/Gj95/xpCf/8aQoH/GkKB/xpC + gP8aQn//GkJ//xpCf/8aQn//GkJ//xpCf/8aQ4H/GUOD/xlEg/8bQ37/HT9z/yI6YP8nNEr/Ky41/y8q + Jv8vJRz/LSEW/ywgFv8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnHv8sIBX/LSAU/y8l + G/8uKij/KTE//yI5Xv8aQn//FEqb/xBPrf8OUbT/DlG0/w9Qsf8PT6//D06u/w9Orv8PTq7/D06u/w9O + rv8PT6//D1Cx/w9Qsv8PTq//Dkql/w1ClP8KOH3/CS9m/wknUf8NIkH/EyA0/xogKv8lJCX/Mi0o/0M8 + Nf9XUEr/bGhk/4OBgP+YmZn/r7Gy/8XKyv/a4OD/6vHx//P7+//2////9f7+//L7+//w+Pj/7/j4/+/3 + 9//v9/f/7/j4//D4+P/y+/v/9f7+//b////z+/v/6vHx/9rg4P/Fysr/r7Gy/5iZmf+DgYD/bGhk/1ZQ + Sv9CPDX/Mi0o/yclJf8eIyr/GCQ1/xMnQ/8QLFL/DjNn/w47fv8PRJT/D0ul/w9Or/8PULL/D0+x/w9P + r/8PTq7/D06u/w9Orv8PTq7/D06u/w9Pr/8PULH/DlG0/w5RtP8QT63/FEqb/xpCf/8iOV7/KTE//y4q + KP8vJRv/LSAU/ywgFf8wJx7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnHv8tHxT/LiAT/y8l + G/8uKyv/JzJH/x49bv8USJf/DFG7/wdX0f8FWtv/BVrc/wVa2f8GWdb/BlnW/wZZ1v8GWdb/BlnW/wZZ + 1v8GWdf/Blra/wZb2v8GWdb/BlXL/wZNtv8GQpv/Bjd//wkvZv8NKVL/FCZA/xwlMv8mJir/MCwo/zw1 + Lv9JQjv/V1NO/2hmZP97fHv/lJaW/7C0tP/L0NH/4ejo/+729v/z+/v/9Pz8//L6+v/w+Pj/8Pj4//D4 + +P/w+Pj/8Pj4//D4+P/y+vr/9Pz8//P7+//u9vb/4ejo/8vQ0f+wtLT/lJaW/3t8e/9oZmT/V1NO/0lC + O/88NS7/MCso/yUmKf8bJDL/EiVA/wsoUf8HLWX/BTZ//wVBm/8FTLb/BlXL/wZZ1v8GW9r/Blra/wZZ + 1/8GWdb/BlnW/wZZ1v8GWdb/BlnW/wZZ1v8FWtn/BVrc/wVa2/8HV9H/DFG7/xRIl/8ePW7/JzJH/y4r + K/8vJRv/LiAT/y0fFP8wJx7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3CNif9TX1n/PDoz/zAnHv8tHxP/LiAS/y8l + Gv8tKyz/JjJK/xw9df8RSKL/CFLK/wJY4/8AXO7/AF7x/wBe7/8BX+3/AV/t/wFf7f8BX+3/AV/t/wFf + 7f8AYO//AGDx/wBg8v8AX+7/Alzi/wdXzv8MULT/EkiX/xhBff8dO2b/IjRR/yYvPf8qKy//MCsn/zcw + KP8+NzD/SEM+/1RST/9mZWT/fn9//5uenv+4vb3/0dfX/+Ho6P/q8fH/7vX1//D39//x+Pj/8/r6//T7 + +//0+/v/8/r6//H4+P/w9/f/7vX1/+rx8f/h6Oj/0dfX/7i9vf+bnp7/fn9//2ZlZP9VUk//SUM+/0A5 + MP84MCj/Lyon/yQnLv8aJTv/DyZN/wcqYv8CL3n/ADmU/wBFsf8AUcz/AVri/wFf7v8BYfL/AWHx/wFg + 7/8BX+3/AV/t/wFf7f8BX+3/AV/t/wFf7f8AXu//AF7x/wBc7v8CWOP/CFLK/xFIov8cPXX/JjJK/y0r + LP8vJRr/LiAS/y0fE/8wJx7/PDoz/1NfWf9wjYn/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GNiP9TXlf/PDkx/zEmHP8tHhL/Lh8R/zAl + Gv8tKiz/JjFK/xs5df8QQqL/B0vK/wFS5P8AV/H/AFv2/wBe9v8AYPX/AGL2/wBi9/8AYvf/AGL3/wBi + 9v8AYfj/AGD5/wBg+v8AX/f/Bl/t/xJh3f8hYsn/MGOx/ztgmf8/WYH/PU1l/zc+Sv8yMTT/Lyol/zEp + If81LSX/PDYv/0ZCP/9VU1H/a2tp/4WHhv+go6P/uL29/8vQ0f/a4OD/5evs/+709P/1+/v/+v////z/ + ///8////+v////X7+//u9PT/5evs/9rg4P/L0NH/uL29/6Cjo/+FhoX/a2pp/1VTUf9HQz//Pzkw/zoy + Jv82LSL/Lyol/yUnMf8aJ0X/EChc/wcsdv8BMo7/ADyo/wBIwv8AVNr/AF3s/wBi9/8AZPv/AGP6/wBi + +P8AYvf/AGL3/wBi9/8AYvf/AGL2/wBg9f8AXvb/AFv2/wBX8f8BUuT/B0vK/xBCov8bOXX/JjFK/y0q + LP8wJRr/Lh8R/y0eEv8xJhz/PDkx/1NeV/9xjYj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jbu4/3GMh/9UXVb/PTgw/zElG/8uHhH/Lx8R/zAl + Gv8tKiv/Ji5I/xszcP8QOpv/B0DB/wFH2/8ATen/AFTw/wBa8/8AX/X/AGL3/wBj+P8AY/j/AGL3/wBi + 9/8AYPj/AF75/wBd+f8AXvf/C2Hx/yBr5/88eNv/VoLL/2eGt/9qfp7/YGp9/05RWf88Ojr/MCok/ywk + G/8tJRz/Mywl/zw3Mf9JRUH/WlhV/25ubP+Fh4b/m56e/7CztP/FyMj/2dzc/+vs7P/4+fn///////// + //////////////j5+f/r7Oz/2dzc/8XIyP+ws7T/m56e/4WHhv9ubmz/WVdV/0lFQf8+OTL/OTEm/zct + Hv80Kh3/Lykk/yYoNf8bKE//ECpt/wcui/8BNKT/AD66/wBJz/8AVeH/AF3v/wBi9/8AZPr/AGP6/wBi + +P8AYvf/AGL3/wBj+P8AY/j/AGL3/wBf9f8AWvP/AFTw/wBN6f8BR9v/B0DB/xA6m/8bM3D/Ji5I/y0q + K/8wJRr/Lx8R/y4eEf8xJRv/PTgw/1RdVv9xjIf/jbu4/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GMiP9UXVf/PTkx/zElHP8uHxL/LiAS/zAl + Gv8tKSr/JitE/xstaP8QMI//BzWy/wE7y/8AQ9v/AEzl/wBW6/8AXfD/AGHz/wBi9f8AYvX/AGH0/wBh + 8/8AX/T/AF30/wBc9P8AXvP/D2bw/y537v9Wjur/e6Hi/5Sr1P+Worr/hImV/2dna/9KRUT/NC4o/ywk + G/8qIhn/Lice/zYvKP8/OjT/S0dD/1pYVf9ra2n/fn9//5SWlv+usLD/ysvL/+Pk5P/29vb///////// + //////////////b29v/j5OT/ysvL/66wsP+Ulpb/fn9//2traf9ZWFX/S0dD/z86NP84MSn/NSwg/zQq + G/8zKRz/Likm/yYpPf8bK1z/EC1//wcyoP8BOLj/AEHL/wBL2v8AVeX/AF3u/wBh8/8AYvX/AGL1/wBh + 9P8AYfP/AGH0/wBi9P8AYvX/AGHz/wBd8P8AVuv/AEzl/wBD2/8BO8v/BzWy/xAwj/8bLWj/JitE/y0p + Kv8wJRr/LiAS/y4fEv8xJRz/PTkx/1RdV/9xjIj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g + 7/9s5O//eejw/4jv9f+X9vv/o/r9/6j19v+h4uH/jL27/2+Pi/9RYVz/Oj03/y8qIv8sIxf/LSMW/y8m + HP8tKCn/JihA/xwoYP8RKYP/Byyj/wEyu/8AO83/AEba/wBS5P8AW+v/AGDw/wBi8v8AYfL/AGHx/wBg + 8P8AYPD/AF/w/wBf8f8GZPH/GW/w/z+G8/9uovX/mrz0/7fI6v+5wNL/o6Ss/4B9f/9bVlT/QDo0/zMr + JP8uJh3/LyYe/zMrJP84MSv/Pzo0/0lFQf9VU1H/ZmVk/3t8e/+YmZn/uLm5/9bX1v/s7e3/+fr5//// + ////////+fr5/+zt7f/W19b/uLm5/5iZmf97fHv/ZmVk/1VTUf9JRUH/Pzo0/zgxK/8zKyT/MSgf/zEo + Hv8vKCP/LCox/yQrSv8aLmz/DzKR/wY2sv8BPMn/AETY/wBN4v8AVuj/AFzt/wBg8P8AYfL/AGHx/wBg + 8f8AYPD/AGHx/wBi8v8AYvL/AGDw/wBb6/8AUuT/AEba/wA7zf8BMrv/Byyj/xEpg/8cKGD/JihA/y0o + Kf8vJhz/LSMW/ywjF/8vKiL/Oj03/1FhXP9vj4v/jL27/6Hi4f+o9fb/o/r9/5f2+/+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/13g + 7/9r5O//eOjw/4fv9f+X9vr/pPr8/6j19v+h4+P/isHA/2uVlP9Mamj/M0dE/ygzL/8mKiL/Kigd/y0p + IP8tKSn/Jic8/xwmWP8RJXf/ByiV/wEtrf8AN8H/AETR/wBQ3/8AWun/AGDw/wBh8v8AYfL/AGDx/wJh + 8P8GZPD/C2fx/xNs8f8hdPL/N4Lz/1ya+P+Jtf3/sc7+/8za9v/O0+L/ubnA/5iVl/90b2//WFJP/0dA + Ov88NS3/Ni4m/zQsI/80LCT/NzAp/z04Mv9HQz//VVJP/2hmZP+DgYD/oaCe/728u//T0dD/393c/+Xj + 4v/l4+L/393c/9PR0P+9vLv/oaCe/4OBgP9oZmT/VVJP/0dDP/8+OTL/ODEp/zMrJP8vKCL/LSYk/ysn + Kv8qKTX/JixG/x8vYP8WMoH/DTek/wU8wv8BQtb/AEni/wBR6f8AWOz/AF3u/wBg8P8AYfH/AGHx/wBg + 8P8AYPD/AGHx/wBi8v8AYvL/AGDw/wBa6f8AUN//AETR/wA3wf8BLa3/ByiV/xEld/8cJlj/Jic8/y0p + Kf8tKSD/Kigd/yYqIv8oMy//M0dE/0xqaP9rlZT/isHA/6Hj4/+o9fb/pPr8/5j2+v+I7/X/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9C1Or/T9vt/1zg + 7/9p5O//dujw/4bu9P+X9vn/pPn7/6n19v+g5eX/h8bH/2WeoP9Cdnn/KFVY/x1AQv8dNTL/JC8o/yss + Jf8sKSn/JiY4/xwkT/8RJGr/ByaF/wEsnf8ANrP/AEPI/wBQ2v8AWuf/AGDw/wBh8/8AYPP/AGDx/wVj + 8P8RavH/IXTy/zWB8/9Lj/T/ZJ72/4Sz+v+myf//xdv//9jk+//Z3+z/ysvS/7Gvs/+VkpP/fHd2/2hi + Xv9WTkf/Rj40/zsxJv80Kx//Myof/zYuJf89NzD/SEM+/1dTTv9saGT/hIB9/5qXk/+rqKX/tbGu/7m2 + s/+5trP/tbGu/6uopf+al5P/hIB9/2xoZP9XU07/SUM+/z85MP85MSb/NSwg/zEoH/8tJiT/KSYv/yUo + Pv8iK1H/HS5m/xczf/8QOJv/Cj63/wREz/8BSt//AE/o/wBV7f8AWu7/AF7v/wBg8P8AYfH/AGHw/wBg + 8P8AYPD/AGHx/wBi8/8AYvP/AGDw/wBa5/8AUNr/AEPI/wA2s/8BLJ3/ByaF/xEkav8cJE//JiY4/ywp + Kf8rLCX/JC8o/x01Mv8dQEL/KFVY/0J2ef9knqD/h8bH/6Dl5f+p9fb/pfr8/5n2+f+I7/T/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zXK4v9C1Or/Ttvt/1vg + 7/9o4+//defw/4Xu9P+X9fj/pPn7/6n29v+f5+j/g8zP/16pr/84hI3/HWVw/xJQWf8VQkT/Hjc0/ygw + K/8rKin/JiYz/x0kRf8RJFz/ByZ1/wEsjP8ANqX/AEO9/wBQ1P8AWub/AF/w/wBg8/8AX/P/AF/x/wdl + 8P8ccfL/OYPz/1mX9f95q/f/k7z5/6zL/P/C2f//0+T//93o/f/e5fP/1trk/8jJ0f+2tbr/op+i/4yH + h/9ya2f/WFBI/0M5Lv82LB//MSca/zIpHf83Lyb/Pzgw/0lCO/9WUEr/ZWBa/3Ruaf9+eXT/hH97/4eC + fv+Hgn7/hH97/355dP90bmn/ZWBa/1ZQSv9JQjv/QDkw/zoyJv83LR7/NCob/zEoHv8rJyr/JSg+/x8q + V/8ZLnL/EzKK/w43oP8KPrb/BkbK/wJM2v8AUub/AFbs/wBa7/8AXO//AF/v/wBg8P8AYfD/AGDw/wBg + 8P8AYPD/AGHx/wBi8/8AYvT/AGDw/wBa5v8AUNT/AEO9/wA2pf8BLIz/ByZ1/xEkXP8dJEX/JiYz/ysq + Kf8oMCv/Hjc0/xVCRP8SUFn/HWVw/ziEjf9eqa//g8zP/5/n6P+q9vb/pvn7/5n1+f+J7vT/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9C1Or/UNvu/13g + 7/9q5O//d+jw/4fu8/+Y9Pj/pfj6/6j19v+d6ev/gNLX/1q0vv80lKL/F3iI/w1icP8RUFf/HEFB/yc1 + Mf8rLCr/JiYu/x0jO/8RJE7/Bydl/wEtfP8AN5b/AESz/wBQzv8AWuT/AF/w/wBf9P8AXvT/AF/x/wpm + 8f8ld/L/S4/0/3Wp9/+cwfn/uNL7/8re/f/V5f7/3On+/97q/f/f6Pj/3eTz/9fd6//N0d7/vsDL/6am + rf+GhIb/ZWBe/0hBO/82LST/LiUb/y4lHP8yKiH/NzAo/zw1Lv9CPDX/SkM8/1BKQ/9VT0j/WFJL/1pT + Tf9aU03/WFJL/1VPSP9QSkP/SkM8/0I8Nf88NS7/ODAo/zYtIv80Kh3/Mykc/y8oI/8qKTX/IitR/xku + cv8RMZL/Cjar/wY9v/8ERc7/Ak3a/wFU4/8AWer/AFzu/wBe8P8AX/D/AF/w/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGHy/wBi9P8AYvT/AGDw/wBa5P8AUM7/AESz/wA3lv8BLXz/Bydl/xEkTv8dIzv/JiYu/yss + Kv8nNTH/HEFB/xFQV/8NYnD/F3iI/zOUov9atL7/gNLX/53p6/+o9fb/pfj6/5n0+P+I7vT/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/w+YsP8bqcL/KLvU/zbK4v9E1er/U9zu/2Ph + 7/9y5fD/gOnx/43u9P+b9Pf/pff5/6b19v+a6+3/f9jf/1u/y/83pbX/HYye/xN1hf8WX2n/H0tN/yg5 + Nv8sLSr/JyYq/x4jMv8UJEL/CihW/wQtbP8BN4n/AESq/wBRyf8AW+L/AF/w/wBf9f8AXfT/AF7y/wpm + 8f8oefL/UpP1/4Cv9/+oyfr/xNr7/9Tk/P/c6f3/3ur9/97q/P/e6fz/3un9/9vm/P/T3vb/xM/m/6y0 + yf+KkKD/Z2h0/0dGTP8yLzL/KSUm/ygjIv8rJiT/Lion/zArKP8yLSj/NS8p/zcwKf85MSr/OjIq/zoy + Kv86Mir/OjIq/zkxKv83MCn/NS8p/zItKP8wKyj/Lyon/y8qJf8vKST/Likm/ywqMf8mLEb/HS5m/xMy + iv8KNqv/BDzF/wFC1v8ASuD/AFPm/wBZ6v8AXu7/AGDw/wBg8f8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGHy/wBi9P8AYvX/AGDw/wBb4v8AUcn/AESq/wE3if8ELWz/CihW/xQkQv8eIzL/JyYq/ywt + Kv8oOTb/H0tN/xZfaf8TdYX/HYye/ziltf9bwMv/f9jf/5rr7f+l9Pb/ovb4/5fz9/+H7fP/eejw/2zk + 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8AgZn/Bomh/w6XsP8ZqcL/JrvT/zTK4v9G1er/Wt3v/2/j + 8f+C6PL/kOzz/5rw9f+h9Pf/o/X4/6Dz9f+U6+//ft3l/2PM1/9Ht8f/MqGy/yiKmf8ncHj/KlVX/y4+ + Ov8uLSn/KSQk/yEhKf8YIzb/ECdI/wsuX/8HOH7/BESj/wJRxv8BW+L/AGDx/wBg9/8AXvX/AF/y/wlm + 8f8kdvL/SY30/3Gm9v+Xvvn/ss/6/8Xb+//T4/z/2+j9/97q/f/e6v7/2Oj//8/i///B2P//r8fz/5at + 2f94i7T/WGaL/zxGZv8qMEv/ISY8/x8jNP8hJDH/JCYu/yUmKf8nJST/KSQg/yokHf8sIxr/LSMY/y0j + F/8tIxf/LSMY/ywjGv8qJB3/KSQg/yclJP8lJin/JScu/yUnMf8mKDX/Jik9/yQrSv8fL2D/FzN//w83 + oP8HPb//AkLW/wBJ4/8AUOr/AFft/wBd7v8AYPD/AGLx/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGHy/wBi9v8AYvf/AGHx/wFb4v8CUcb/BESj/wc4fv8LLl//ECdI/xgjNv8hISn/KSQk/y4t + Kf8uPjr/KlVX/ydweP8oipn/MqGy/0i3x/9kzNj/gN7l/5Xr7/+d8vX/m/T3/5Lx9f+F7fP/eejw/23k + 7/9f4O//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6V/wB+lf8AgZn/Bomh/w2XsP8WqMH/I7rT/zLJ4f9H1er/Yt7w/37m + 8v+W6/T/pu/1/6vy9v+o9Pf/ofP2/5fw9P+M6/D/f+Pq/2/Z4/9fy9f/UrnG/0ihrP9Bgof/O2Bg/zdC + Pv8xLSf/KyIf/yUfIP8fISr/GSc6/xQuUf8POHP/CkWc/wVSxP8CXOP/AGH0/wBh+f8AYPf/AGDz/wdk + 8f8acPH/NIDz/1KT9f9wpvb/i7b4/6XH+f++1vv/0eL8/9zp/f/b6P7/zeH//7fV//+exP//hrD2/2+Y + 4v9We8X/P16k/yxEhf8eMm3/Fyhc/xYlT/8XJUT/GSU7/xskMf8eIij/IiEg/yYgGf8pHxT/Kh4R/yse + D/8rHg//Kh4R/ykfFP8mIBn/IiEg/x4iKP8bJDH/GiU7/xonRf8aKFD/Gytd/xoubP8WMoH/ETib/ws+ + tv8FRc7/AUrg/wBQ6v8AVu7/AFvw/wBe8P8AYfH/AGLx/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGHz/wBj+P8AY/n/AGH0/wJc4/8FUsT/CkWc/w84c/8ULlH/GSc6/x8hKv8lHyD/KyIf/zEt + J/83Qj7/O2Bg/0GCh/9Ioaz/UrnG/2HL1/9z2eP/g+Tr/4/r8P+T8PT/kvH1/4zv9P+D7PL/eejw/27l + 7/9g4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6V/wB+lf8AgZn/BYmh/wyXsP8VqMH/IrrT/zPK4f9M1uv/beDx/5Dp + 9P+t7/b/vfP4/731+P+x9Pf/oPH2/5Du8/+G6vD/gejv/37l7f963ub/dNDY/2q3vf9dlJX/Tmxq/z9I + Qv80Lif/LSIb/ykeGf8mISD/Iicv/x0uRv8XOGn/D0WV/wlSwP8DXOL/AGH0/wBi+v8AYfj/AGDz/wRj + 8f8OafH/HHLx/y588/9DifT/W5n1/32u9/+ixfn/wtn7/9Xl/P/T5P3/vNf+/5rC/v90qvv/VpP0/0B+ + 5v8waNP/I1O8/xlBpv8SNJL/Dix//wwobf8NJ1z/DyZN/xMkP/8YIzP/HyIn/yYiHv8rIRf/LSET/y8h + Ef8vIRH/LSET/yshF/8mIh7/HyIn/xgjM/8TJD//DyZN/w4oXf8PKm7/Dy1//w8ykf8NN6T/Cj63/wZG + yv8DTdr/AVPm/wBX7f8AW/D/AF3w/wBf8P8AYfH/AGHx/wBh8f8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGHz/wBj+P8AY/r/AGL0/wNc4v8JUsD/D0WV/xc4af8dLkb/Iicv/yYhIP8pHhn/LSIb/zQu + J/8/SEL/TWxq/1yTlf9qt73/ddDY/33e5v+C5u3/hunw/4jr8f+I7fL/h+3z/4Tt8v9/6/H/eOjw/27l + 7/9h4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/w6XsP8YqcL/JrvU/zrL4v9W2Oz/e+Py/6Ls + 9v/B8vj/0fb6/833+f+69Pj/ovD1/47s8/+F6/H/hu3z/43v9f+T7vL/k+Pm/4jKzP90pKP/XHh0/0VP + Sf81Miz/LSQc/ysgFv8rIhr/Kicm/yYtPP8eN2D/FUSM/wtQuP8EWtz/AGDv/wBh9v8AYfb/AGDy/wJh + 8P8EY/D/B2Xw/w5o8f8acPL/MH7z/1aW9f+Fs/j/r836/8jc/P/F2/z/p8n7/3yu+f9Okfb/K3jw/xhm + 6P8PV93/C0rR/wk/wv8HN7L/BTGf/wQti/8FK3X/Byli/wsoUv8TJ0P/HCc2/yUnLP8sJyT/MCcf/zEn + HP8xJxz/MCcf/ywnJP8lJyz/HCc2/xMnQ/8LKFL/Bypi/wUsdv8FLov/BjKg/wY2sv8FPML/BETP/wNM + 2v8BVOP/AFnq/wBd7v8AXvD/AF/w/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGHy/wBi9v8AYvb/AGDv/wRa3P8LULj/FUSM/x43YP8mLTz/Kicm/ysiGv8rIBb/LSQc/zUy + LP9FT0n/XHh0/3Sko/+Iysz/k+Pm/5Tu8v+Q8PX/ie3z/4Lq8f9/6vH/furx/33q8f966fD/defw/2zk + 7/9g4e//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/CImh/xOZsP8iq8P/NL7V/0rP5P9n3O7/jOb0/7Hv + +P/P9fr/3vj7/9j4+v/D9fj/qvH1/5Xt8/+M7PP/kfH2/5v3+/+k+Pr/pe/w/5jX1/9/sK//YYOB/0VZ + Vv8yOzb/Kisk/yklGv8sJRr/Ligi/yotNP8iNVb/GECA/w1Mq/8FVc7/AFvj/wBe7f8AX+//AF/v/wBg + 7/8AX/D/AF7w/wBe8P8DYvD/Fm7x/zuF8/9rovb/lr35/7DO+v+tzPr/j7r5/2Ke9/8zgfT/EWnv/wFa + 6/8AT+b/AEff/wBC1v8BPMn/ADi4/wA0o/8AMY3/ATB5/wYuaP8OLln/GC5N/yEuQv8oLjr/LC41/y4u + M/8uLjP/LC41/yguOv8hLkL/GC5N/w4uWf8GLmj/ATB5/wAyjf8ANKP/ADi4/wE8yf8BQtb/AUrf/wBS + 5v8AWer/AF7u/wBg8P8AYfH/AGHx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBg + 8P8AYO//AF/v/wBf7/8AXu3/AFvj/wVVzv8NTKv/GECA/yI1Vv8qLTT/Ligi/ywlGv8pJRr/Kisk/zI7 + Nv9FWVb/YoOB/4Cwr/+Z19f/pe/w/6P4+v+Z9vr/i/D2/3/q8f946PD/dufw/3Xn8P9z5u//b+Xv/2fi + 7/9c3+//T9vt/0LU6v81yuL/KbvU/xyqwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Afpb/AHyU/wB8lP8Bf5f/DImg/x6asP80rsT/TcTX/2fV5/+D4vH/ouv3/8Hy + +v/Z9/v/5Pn8/9/5+//O9vn/uPL3/6Xv9f+e8PX/ofX5/6n7/f+v/f7/rfX1/53e3v9/ubn/XY6P/z1m + Z/8oSEn/ITY0/yMtJv8pKiD/Lioi/ywsL/8kMkv/GTpw/w5El/8FTLj/AFLN/wBX2/8AW+T/AF7q/wBg + 7v8AX/H/AFzx/wBa8f8AXPD/DmXx/y158v9TkfX/dqj3/4y2+P+Jtfj/cKX3/0yO9f8mdfL/C2Lw/wBW + 7f8AT+v/AEvo/wBH4v8ARNj/AEDK/wA+uP8AO6b/ADqV/wQ4hv8LOHr/Ezhv/xo4Zv8gOGD/Izhb/yQ4 + Wf8kOFn/Izhb/yA4YP8aOGb/Ezhv/ws4ev8EOIb/ADqV/wA7pv8APbj/AEDK/wBE2P8ASeL/AE/o/wBW + 7P8AXO7/AGDw/wBi8f8AYvH/AGHx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYfH/AGHy/wBh + 8f8AYO7/AF7q/wBb5P8AV9v/AFLN/wVMuP8ORJf/GTpw/yQyS/8sLC//Lioi/ykqIP8jLSb/ITY0/yhI + Sf8+Zmf/X4+P/4K6uv+f397/rPX1/6r8/f+d+fz/jPH3/33q8f915/D/cOXv/2zk7v9p4+7/ZeHu/13f + 7f9V3e7/S9nt/0HU6v82yuL/KrzU/x2qwv8QmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Afpb/AHuU/wB6k/8Bfpb/EYig/yqbsf9Ks8b/a8rb/4nd6/+j6vX/u/H6/9D2 + /P/f+Pz/5/r8/+P5/P/Y9/r/yfX5/7zz9/+18/f/tfj7/7f9/v+3/v7/r/b2/5rh4v95wMP/U5qf/zF0 + fP8cWF//FkVJ/xs4Nv8kMSr/LC0m/ywsLf8lLkH/GjNe/w46f/8FQZz/AEiz/wBPxv8AVtb/AFvj/wBf + 7f8AYPL/AF7z/wBc8v8AXPD/CmLw/x9v8f85gfP/UZH1/2Cb9f9emvX/TY/1/zR+8/8abfH/B2Dw/wBY + 7v8AU+3/AFHs/wBP6P8ATeL/AEvY/wBJzP8AR7//AEaz/wNFqf8HRaD/DUWY/xJFkv8WRY3/GEWK/xlF + if8ZRYn/GEWK/xZFjf8SRZL/DUWY/wdFoP8DRan/AEaz/wBHv/8ASMz/AEvY/wBN4v8AUen/AFXt/wBa + 7/8AXvD/AGDx/wBh8f8AYfH/AGHx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYfL/AGLz/wBi + 8v8AYO3/AFvj/wBV1v8AT8b/AEiz/wVBnP8OOn//GjNe/yUuQf8sLC3/LC0m/yQxKv8bODb/FkVJ/xxY + X/8zdXz/V5qg/37BxP+e4uP/rfb2/6z8/f+f+fz/jfH2/33q8f9y5u//auPu/2Th7f9e3u3/WNzs/1La + 7P9M2e3/Rtft/z/T6v82y+L/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Afpb/AHuU/wB6k/8Cfpf/FYqh/zefs/9guMn/idLe/6zl7//D8fj/0/f8/975 + /f/k+fz/5/n8/+b5/P/h+fv/2vj7/9P3+v/M9/r/yfr8/8X9/v+9/f3/r/X2/5bj5f9zx83/TKWv/ymF + kv8Tanj/DlZg/xVFSf8gOTb/KjAr/ysrK/8kKjf/GixN/w4wZv8FNoD/AD2X/wBGr/8AUMf/AFjc/wBe + 6/8AYfL/AGD0/wBf8/8AXvH/BWHw/xFp8f8fcvL/LHvy/zSA8/8zf/P/Knny/xxx8v8OZ/H/BGDw/wBc + 7/8AWe//AFju/wBX7P8AVuj/AFTj/wBT3P8AUtX/AFLP/wJRyf8EUcT/B1HA/wpRvf8MUbr/DVG5/w1R + uP8NUbj/DVG5/wxRuv8KUb3/B1HA/wRRxP8CUcn/AFLP/wBS1f8AU9z/AFTj/wBW6P8AWOz/AFru/wBc + 7/8AX/D/AGDw/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYfP/AGL0/wBi + 8v8AX+v/AFjc/wBPx/8ARq//AD2X/wU2gP8OMGb/GixN/yQqN/8rKyv/KjAr/yA5Nv8VRUn/DlZg/xNq + eP8rhZL/UKaw/3jHzf+Z5Ob/qvX1/6r6+/+e9/r/jvH2/33q8f9x5e//ZuHu/1ze7P9T2uv/S9fq/0bW + 6v9D1uz/QNXs/zzS6f81yuL/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB/l/8HhJv/H5Cm/0WmuP90v83/otni/8fs8v/b9/v/5fv+/+f7 + /v/n+v3/5/n8/+j6/P/o+vz/6Pr8/+X6/P/f+vz/2fz9/9D+/v/E/Pz/svX2/5fl6f9zztb/TLK//yqW + p/8UfY//D2d1/xVTWv8gQUH/KTQw/ysqKv8kJi//GiY9/w8pUf8GLmf/ATR+/wA+m/8ASrn/AFTU/wBc + 5/8AYPH/AGH0/wBg8/8AYPH/AmHw/wZj8P8KZvH/D2nx/xJr8f8Ra/H/Dmnx/wpm8f8FY/D/AWHw/wBf + 8P8AXu//AF3v/wBd7v8AXO3/AFzr/wBc6f8AW+b/AFvk/wFb4/8BW+H/Alvg/wNb3/8EW97/BFvd/wVb + 3f8FW93/BFvd/wRb3v8DW9//Alvg/wFb4f8BW+P/AFvk/wBb5v8AXOn/AFzr/wBc7f8AXe7/AF7v/wBf + 7/8AX/D/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYfP/AGH0/wBg + 8f8AXOf/AFTU/wBKuf8APpv/ATR+/wYuZ/8PKVH/GiY9/yQmL/8rKir/KTQw/yBBQf8VU1r/D2d1/xR9 + j/8rlqf/TrK//3TO1v+V5ej/pfP0/6b3+f+c9fj/jfD1/33q8f9w5e//Y+Dt/1bb7P9K1+r/QdPp/zzS + 6f860+r/OdPr/zjQ6P8yyeH/KbvU/x2qwv8QmLD/Bomh/wCBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA + mP8Afpf/AH+X/wOBmf8Fgpr/CYSb/xGIn/8gkKX/Op2w/2Cxwf+MydT/tt/m/9fw9f/o+fz/7fz//+z8 + /v/p+v3/6Pn8/+r6/P/s+v3/7vv9/+78/f/q/P3/4/39/9r+/v/M/Pz/uvb3/6Hp7f9/19//WsHO/zqp + uv8lkqT/HXqI/x9haP8mSUr/LDYy/yspJ/8lIyf/HSIw/xMkQP8LKVP/Bi9s/wQ5i/8CRK3/AU/N/wBX + 4/8AXO//AF7z/wBf8v8AX/D/AF/w/wBf8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBg8f8AYPH/AGDx/wBg + 8f8AYPH/AGDx/wBg8f8AYPH/AGDx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYPH/AGDx/wBg8f8AX/P/AF70/wBc + 7/8AV+P/AU/M/wJErf8EOYv/Bi9r/wspU/8TJED/HCIw/yUjJ/8rKSf/LDYy/ydKSv8gYWj/HnqI/ySS + o/84qbr/VsDN/3bW3v+R5+v/n/L0/6D19/+Y8/f/i+/0/33p8f9w5e//YuDt/1Pa6/9G1er/PNHo/zbQ + 6P8z0On/MtDp/zDN5v8sxt//I7nS/xmowf8Ol6//BYmh/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8Ae5T/AH2V/waAmP8Rhp3/H42j/zGXq/9Ho7T/YbHA/4LCzv+l1N3/xubs/97z9v/r+vz/7/z+/+z7 + /v/p+v3/6Pn8/+r6/P/u+/3/8fz9//H8/f/v/f3/6f3+/+L+/v/W/Pz/x/j4/7Hu8v+U4un/dNLd/1e/ + zf9Cqrj/No+a/zJwdf8wUVD/Lzcy/ywnIv8mHx7/IB4k/xkhMf8UJ0T/Dyxc/wo1fv8GP6P/A0nG/wFQ + 4P8AVe3/AFjy/wBa8v8AW/D/AFzw/wBc8P8AXPD/AFzw/wBb8P8AXPD/AF3w/wBe8P8AX/D/AGDw/wBg + 8P8AYfD/AGHx/wBh8f8AYfH/AGLy/wBi8/8AYvT/AGL1/wBi9f8AYvb/AGL2/wBi9/8AYvf/AGL3/wBi + 9/8AYvf/AGL3/wBi9/8AYvf/AGL2/wBi9v8AYvX/AGL1/wBi9P8AYvP/AGLy/wBh8f8AYfH/AGHx/wBh + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGHx/wBh8v8AYfP/AGHz/wBf8/8AXfT/AFr0/wBW + 7v8BUOD/A0jG/wY/o/8KNX7/Dyxc/xQnRP8ZITH/IB4k/yYfHv8sJyL/MDcy/zJRUP80cHX/OY+a/0Gp + uP9Rvsz/ZtDb/3ze5v+N6O7/lu/z/5fy9f+R8fX/h+7z/3zp8f9x5e//Y+Dt/1Pa7P9F1er/OdDo/zLO + 5/8tzef/Kszn/yfJ5P8iwtz/G7XQ/xKlv/8Lla7/BIih/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AeJH/AHuU/wqBmf8di6H/N5ms/1Wpuf90ucb/jsfR/6fU3f++4ef/0uzx/+H0+P/p+fz/6/r9/+r6 + /f/o+fz/6Pn8/+r6/P/t+/3/8Pz9//H8/f/w/P3/7f3+/+j9/v/g/P3/1Pn6/8P09v+t7fL/k+Pr/3vV + 3v9mwcv/VqSr/0l/gf8+WVf/NTk0/y0lH/8oHRj/JB0b/yEhJv8dJjf/GCtP/xIycv8MOpr/BkG//wJI + 2v8ATen/AFLv/wBW8P8AWe//AFvw/wBc8P8AXPD/AFzw/wBc8P8AXPD/AF3w/wBe8P8AX/D/AGDw/wBg + 8P8AYfD/AGHw/wBh8f8AYfH/AGHy/wBh8/8AYvP/AGL0/wBi9f8AYvX/AGL1/wBi9v8AYvb/AGL2/wBi + 9v8AYvb/AGL2/wBi9v8AYvb/AGL1/wBi9f8AYvX/AGL0/wBi8/8AYfP/AGHy/wBh8f8AYfH/AGHw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPH/AGHy/wBi8/8AYvT/AGH0/wBe9P8AWvT/AFXx/wBP + 6v8CSNr/BkG//ww5mv8SMnL/GCtP/x0mN/8hISb/JB0b/ygdGP8tJR//NTk0/0BaV/9NgIL/WaSr/2XB + yv9v093/et/o/4Pm7f+J6vD/jO3y/4zv9P+J7vP/g+zy/3vp8f9x5e//ZOHu/1Xb7P9G1er/OdDo/zDN + 5/8oy+b/Isnk/xzE4f8Wvdn/EbHN/wuivf8GlK3/A4ig/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AeZL/AH2W/w6FnP8pk6f/TqW2/3e6x/+dztf/t9zi/8jl6v/T7PD/2/H1/+D1+f/l+Pv/5/n8/+f5 + /P/n+fz/5/n8/+n6/P/s+/3/7vv9/+/8/f/v/P3/7v39/+39/f/p/P3/4fv7/9X4+v/F9vn/svL2/57p + 7f+K19v/dri6/2GPj/9NZWH/PEA6/zAqI/8rIBj/KR8X/ygjH/8mJy7/IStF/xkvZ/8QNY7/CDq0/wJA + 0P8AR+H/AE3p/wBU7P8AWe7/AF3v/wBf8f8AX/H/AF/w/wBf8P8AX/D/AF/w/wBf8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBh8f8AYfH/AGHx/wBh8v8AYfL/AGHy/wBh8v8AYfL/AGHy/wBh + 8v8AYfL/AGHy/wBh8v8AYfL/AGHy/wBh8v8AYfL/AGHx/wBh8f8AYfH/AGDx/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGHx/wBi8v8AYvL/AGDx/wBc7/8AVu7/AE/q/wBH + 4f8CQdD/CDq0/xA1jv8ZL2f/IStF/yYnLv8oIx//KR8X/ysgGP8wKiP/PUA6/09lYf9lkI//eLi7/4bW + 2/+M5uv/jOzy/4ns8/+F6/H/g+vx/4Hr8v+A6/L/furx/3no8P9w5e//ZOHu/1bb7P9H1ur/OtDo/y7M + 5v8kyeT/GsXi/xLA3v8Mudb/B63K/wSgu/8Dkqz/AYeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8CgZn/C4Wc/x2Oo/88nrD/ZbLA/5PJ0v+73eP/1Oru/9/x9P/i9Pf/4fX4/+H1+f/i9/r/5Pj7/+X4 + /P/m+fz/5/n8/+n6/P/r+vz/7Pv9/+77/f/u/P3/7/z9//D8/f/u/P3/6vz8/+L7/f/X/f7/yv3+/7r3 + +P+n5+j/kMnJ/3agnv9cdXH/RU9J/zY3MP8wKiH/LiYb/y4nHv8tKSj/Jyo7/x4sWv8UMH//DDSj/wY7 + wP8EQ9L/Bk3e/wlY5f8LYer/DGbv/wpn8f8HZvH/BGPx/wFh8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYO//AGDu/wBg7f8AX+v/AFzn/wBX4/8AUOD/AEja/wJB + 0P8FOr//DDWk/xUwgP8fLVv/Jyo7/y0pKP8uJx7/LiYb/zAqIf82NzD/RU9J/111cf94oZ7/j8nJ/57m + 5/+g8/b/mfX5/47x9v+D6/L/fOnw/3no8P946PD/d+jw/3Tm7/9s5O//YeDt/1Tb7P9H1ur/OtDo/y3M + 5v8hyOT/FcPh/wu93P8EtdT/AarI/wCduv8Akav/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8olKj/MZir/0Cgsv9crr3/gsDM/6rV3P/O5+r/4vHz/+n2+P/p9/n/5fb5/+L2+v/i9vr/4/f7/+T4 + +//m+Pz/5/n8/+n6/P/q+vz/6/v9/+z7/f/u+/3/7/z9//H8/f/x/P3/7/z9/+r9/v/k////2////8/+ + /v++8vH/ptjW/4m0sv9sjYr/Umpm/0BRS/84QDj/NDUp/zMuIv8wKiT/Kicw/yEmSf8XKGj/EC2I/w01 + o/8QQbj/GVLK/yJj2f8qceX/K3jt/yR28f8acPL/D2jx/wVi8P8AX/D/AF7x/wBf8f8AYPH/AGHy/wBh + 8v8AYfH/AGHx/wBh8f8AYfH/AGHw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGHw/wBh8f8AYfH/AGHx/wBh + 8f8AYfL/AGHy/wBh8v8AYfP/AGHz/wBh8v8AX+//AF7q/wBb4/8AWNz/AFTU/wFPzP8DSMb/BUG//wg6 + tP8MNaT/EjCK/xorav8jKEr/Kygx/zAqJP8zLiL/NTUp/zhAOP9AUUv/UGpm/2mNiv+EtLH/nNfW/6rv + 7/+q+fv/n/n8/5Dz+P+B7PP/eOjw/3Pm7/9w5e//buTv/2vj7v9k4O7/W93t/1DZ6/9E1er/OdDo/y3M + 5f8gx+P/E8Lg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP9gsL7/ZrPB/3G4xf+Gws3/odDY/77f5P/Y7O//5vP1/+v3+P/p9/n/5fb6/+L2+v/i9vr/4/f7/+T4 + +//m+Pz/5/n8/+j5/P/p+vz/6vr8/+v7/f/s+/3/7vv9//D7/f/x/P3/8Pz9/+79/v/s////6P///9// + ///R9/f/uuTj/5zJyP99q6r/YY2M/010cv9CXlj/O0lA/zY4Lf8xKyP/KiMm/yEfNP8ZIEv/FCVk/xUv + ff8gQZb/Mlqw/0Z0yf9TiN3/VZDr/0mM8v80f/P/HXDy/wpj8f8AXfH/AFzy/wBd8/8AYPT/AGH0/wBi + 9P8AYvT/AGLz/wBi8v8AYvL/AGHx/wBh8f8AYfD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBh8P8AYfH/AGHx/wBi8v8AYvL/AGLz/wBi + 8/8AYvT/AGL0/wBi9v8AY/j/AGP4/wBi9v8AX+//AFvk/wBV1v8AT8f/AUq5/wNErf8HP6P/Czma/xA1 + jv8VMID/Gitq/yAmUP8mIzj/LCQn/zIrI/83OC3/PElA/0JdWP9NdHL/XY2M/3Sqqf+OyMf/o+Lh/670 + 8/+t+/v/ofn8/5Hz9/+B7PL/dufw/27l7/9p4u7/ZOHt/1/e7f9Y3Oz/Udnr/0nX6/9B0+n/ONDo/y3M + 5f8gx+P/FMLg/wm82/8Cs9P/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP+Xy9T/m83W/6HQ2P+t1t3/vd7j/87m6v/d7vD/5fP0/+f19//m9vj/4/b5/+L2+v/i9vr/4/f7/+T4 + +//m+Pz/5/n8/+j5/P/o+vz/6fr8/+n6/P/q+vz/7Pv9/+77/f/v+/3/8Pz9//D9/v/w////7////+r/ + ///e+vr/ye7u/6zd3v+Oycv/cbK1/1ybnP9Nfn3/QmBb/zpEPP8zLif/KyEg/yMbJP8dGzH/GyFD/yEt + Wf8zRHX/UGWW/2yHuf+Bodb/g6vq/3Cj8v9QkPT/LXny/xBm8f8BXfH/AFvy/wBc8/8AX/T/AGH0/wBi + 9P8AYvT/AGLz/wBi8v8AYvL/AGHx/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBh8f8AYfH/AGHx/wBi8v8AYvL/AGLz/wBi + 9P8AYvT/AGL1/wBi9/8AY/n/AGP6/wBi9v8AXu3/AFfb/wBPxv8ARq//AT6b/wU5i/8LNX7/EjJy/xkv + Z/8fLVv/IyhK/yYjOP8pICj/LSMh/zMvJ/86RDz/Q2Bb/05+ff9bmpz/a7K0/3/Iyv+U29z/pevr/671 + 9f+r+fr/oPf5/5Hx9v+B6/L/defw/2vj7v9h4O3/Wd3s/1La6/9L1+r/R9bq/0LU6v8+0un/N8/n/y3M + 5f8hx+P/FMLg/wm82/8CtNP/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP++3+T/v9/l/8Ph5v/I4+j/z+fr/9fr7v/e7vH/4vHz/+Pz9f/i9Pf/4vX4/+H2+f/i9/r/4/f7/+X4 + +//m+Pz/5/n8/+f5/P/o+fz/6Pn8/+j5/P/p+vz/6vr8/+z7/f/u+/3/7/z9//D9/f/y/v7/8v///+/+ + /v/l+/v/0fX2/7fu8P+b4+f/gNPY/2q9wf9ZnZ//S3h2/z9UT/82ODL/Ligj/ygfHv8lHiP/JyUv/zEz + Qv9KTV7/bXOF/5Garf+puNH/q8Po/5K48v9ooPX/O4Ty/xVt8P8BYfD/AFzw/wBc8P8AXvD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBh8f8AYfT/AGL0/wBg7/8AW+P/AFLN/wBIs/8APZf/ATR+/wYva/8OLFz/GCtP/yEr + Rf8nKjv/Kygx/ywkJ/8tIyH/MCkj/zY4Mv9AVVD/TXh2/1udn/9pvcH/eNLX/4jh5f+Y6+7/pPHy/6r1 + 9v+n9vf/nfT3/5Dw9P+B6/L/dOfw/2ji7v9c3uz/UNnr/0fW6v9B0+n/PtLp/zzS6f870en/Ns/n/y3M + 5v8hyOP/FcPg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP/E4ub/xeLn/8jj6P/M5ur/0ujs/9jr7v/e7vH/4fHz/+Ly9f/i9Pf/4fX4/+H2+f/i9/r/4/f7/+X4 + +//m+Pz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/6vr8/+z7/f/t+/3/7vz9/+/8/f/v/f3/7/39/+v8 + /f/h+vz/0fn7/7v3+/+j8/j/i+ju/3jV2v9mtbn/VY+Q/0hpZ/8+TEb/ODo0/zQxK/81MCr/OzYx/0hE + Qf9iXlz/h4OC/6yqq//FyM//xtPm/63I8f+DsPT/VJPy/yx67/8Ua+3/CWPq/wRf5/8CXeT/AVvj/wBa + 4/8AWeX/AFrn/wBa6f8AW+v/AFzs/wBd7v8AXu//AF/w/wBg8P8AYPH/AGDx/wBg8P8AYPD/AGDw/wBg + 8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBg8f8AYPD/AF/w/wBe7/8AXe7/AFzs/wBb6/8AWun/AFrn/wBa + 5v8AWuT/AFvi/wFb4v8CXOP/A1zi/wRa3P8FVc7/BEy4/wNBnP8ENoD/Bi5n/wspU/8UJ0T/HSY3/yYn + Lv8tKSj/MCok/zIrI/8zLyf/Njgy/z1LRv9Jamf/WJCQ/2i2uf921dr/g+ju/5Dx9v+b9fj/ovX3/6X1 + 9v+i9Pb/mfL1/43u8/+A6vH/dObw/2bh7v9Y3Oz/S9fq/0DT6f860ej/ONDo/znQ6P850Oj/Ns/n/y3M + 5v8iyOP/FcPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP+m0tr/qNTb/67X3v+32+H/xOHm/9Ho7P/d7vH/5PL0/+b09v/l9fj/4/X5/+L2+v/i9/r/4/f7/+X4 + +//m+fz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/6/r8/+77/f/w/P3/8Pz9/+78/f/q+/z/5Pr8/9z5 + +//S+Pr/xfn8/7b6/v+m+f7/lfP4/4Xk6f90ycz/Yqep/1OGhf9Ja2n/RlxX/0dUTf9OUkr/WVdO/2hj + Wf+BeW//oZmP/8C6s//V09H/1tzl/8HT7/+ev/L/dabw/1GP7P84fuf/JW/f/xdi1v8MWM7/BFHK/wBN + y/8ATND/AE3X/wBP3v8AUuT/AFXo/wBY7P8AXO//AF/y/wBh9P8AYvT/AGL0/wBh9P8AYfT/AGH0/wBh + 9P8AYfT/AGH0/wBh9P8AYfT/AGL0/wBi9P8AYfT/AF/y/wBc7/8AWOz/AFXo/wBS5P8AUN//AFDa/wBQ + 1P8AUM7/AVHJ/wNRxv8GUsT/CVLA/wtQuP8NTKv/DUSX/w06f/8NMGb/DylR/xMkQP8ZITH/ISEm/ygj + H/8uJx7/My4i/zc4Lf86RDz/QFVQ/0lqZ/9XiIf/Z6mr/3bKzv+E5On/jvL4/5b4/f+b+Pz/nfX4/53z + 9v+a8vX/k/D0/4rt8v+A6vH/dOfw/2bh7v9X3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6P850Oj/Ns/o/y7M + 5v8iyOT/FcPg/wq82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP9yucX/d7vI/4HAzP+TydP/qtXc/8Th5v/a7e//5vP1/+r2+P/o9/n/5fb5/+L2+v/i9/r/4/f7/+X4 + +//m+fz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/7Pr9//D8/f/z/f3/8v39/+z8/f/h+vv/1Pf6/8b1 + +P+69Pj/svX5/6v4/P+l+f7/nfb7/5Ls8P+C2Nz/cb/C/2GmqP9YkpP/WIaF/2CAff9tf3n/fYJ6/46K + gf+impH/ubGn/8/IwP/d2tb/3uDl/9Db7P+4zu//m7zt/36o6f9kleD/SX/S/y9owf8YU7L/CESr/wA9 + rP8APLb/AD7C/wBC0P8ARtr/AEzi/wBS6f8AWe//AF70/wBi9/8AY/j/AGP4/wBi+P8AYvf/AGL3/wBi + 9/8AYvf/AGL3/wBi9/8AYvj/AGP4/wBj+P8AYvf/AF70/wBZ7/8AUun/AEzi/wBG2v8ARNH/AEPI/wBD + vf8ARLP/AkSq/wVEo/8LRZz/EEWV/xVEjP8YQID/GTpw/xkzXv8ZLE3/GiY9/x0iMP8gHiT/JB0b/ykf + F/8uJhv/NTUp/zxJQP9DYFv/TXh2/1iQkP9nqav/d8PG/4ba3v+R7PD/mPb6/5r5/f+Z9/v/lvP3/5Pw + 9P+P7/P/i+7y/4bs8v9+6vH/defw/2fi7v9Y3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6f850en/N9Do/y/N + 5v8jyeT/FsPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP85nK//QKCy/0+nuP9ptML/i8XP/7HY3//S6ez/5PL0/+r3+P/p9/r/5ff6/+L2+v/i9/r/4/f7/+X4 + +//m+fz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/7Pr9//H8/f/z/f3/8Pz9/+b7/P/V+Pr/wfT4/67x + 9v+h8PX/nfH2/570+P+h9vr/ovb5/53x8/+Q5ef/f9XZ/3HGyf9pubz/bbK0/3qurv+Mrav/oa6r/7Kz + rv/Bu7b/z8jC/9rV0P/h39z/4uLk/9zh6f/Q2+z/wNHr/6vC5f+Qrdn/bZDF/0dwrf8lUpn/CzyO/wAx + kP8ALpz/ADCt/wA1v/8AO83/AELY/wBM4v8AVev/AF3x/wBh9v8AY/f/AGP3/wBi9/8AYvb/AGL2/wBi + 9v8AYvb/AGL2/wBi9v8AYvf/AGP3/wBj9/8AYfb/AF3x/wBV6/8AS+L/AELY/wA7zf8AN8H/ADaz/wA2 + pf8AN5b/AjeJ/wg4fv8POHP/Fzhp/x43YP8iNVb/JDJL/yQuQf8kKjf/JCYv/yUjJ/8mHx7/KB0Y/ysg + GP8wKiH/OEA4/0JdWP9Ofn3/W52f/2i2uf92ys7/htre/5Pn6v+c8fP/n/b5/5z2+v+W8/j/jvD1/4jt + 8/+F7PL/g+vx/4Dr8f986fH/dOfw/2ji7v9Z3Oz/Stfq/z7S6f840Oj/N9Do/zjQ6f850en/N8/o/y/N + 5v8jyOT/FcPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8LhZz/FIqg/yaTp/9EorP/bbbD/5rN1f/C4eb/2u3w/+Pz9f/l9fj/4/X5/+H1+f/i9/r/4/f7/+X4 + +//m+Pz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/6vr8/+37/f/t+/3/5/r8/9r4+//F9fj/rvH2/5nt + 9P+M7PL/i+3z/5Lw9P+c8/b/o/T2/6Pz9f+a7vD/jOfq/4Hf5P972d7/gtXa/5PT1/+p0tT/v9PT/9DU + 0//a19X/4NvZ/+Pf3v/k4+L/4+Tl/+Tl6P/i5er/3OHp/87W4/+0wdX/jKG9/157ov8zV4r/Ej18/wIu + ff8AKYn/ACma/wAtrf8BMrv/ATrI/wFF1P8BUN7/AVnm/wFe6/8BYO3/AWDt/wFf7P8BX+v/AV/r/wFf + 6/8BX+v/AV/r/wFf6/8BX+z/AWDt/wFg7f8BXuv/AVnm/wFQ3v8BRdT/ATrI/wEyu/8BLa3/ACyd/wAs + jP8BLXz/BC1s/wsuX/8ULlH/HS5G/yYtPP8qLTT/LCwv/ywsLf8rKyv/Kyoq/yspJ/8sJyL/LSUf/zAq + I/82NzD/QFFL/010cv9bmpz/ab3B/3bV2v+E5On/kezw/5zx8/+j8/X/o/T2/5zz9v+S8PT/iO3z/4Dq + 8f986fH/e+nw/3rp8P946PD/ceXv/2bh7v9Y3Oz/Stfq/z/S6f840Oj/N9Do/zfQ6P830Oj/NM7n/yzM + 5f8hyOP/FMPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8Ae5T/AH+X/w+Hnv8slqr/VKm5/3+/y/+o09v/weHm/9Dp7v/Y7/P/3fL2/+D1+f/j9/v/5fj7/+X4 + /P/m+Pz/5vn8/+f5/P/o+fz/6Pn8/+j5/P/m+fz/5Pn8/+H4+//c9/v/0/b6/8Xz+P+y8Pb/nO30/4rr + 8v+A6vH/gevx/4ru8/+W8fT/oPT2/6T09v+f8/b/mPH1/5Hu9P+Q7PL/mevw/6rq7v+/6ez/1Onq/+Lp + 6P/p6Of/6ujn/+nn5v/m5+b/5ufm/+np5//s6+n/6+ro/+Li4v/Lz9T/prC+/3qMpP9PaYz/Lk59/xs8 + e/8RMoH/DC2M/wormf8ILaT/BjOv/wY+uv8GScT/B1LM/wdX0f8HWdP/B1nT/wdY0v8HWNL/B1jS/wdY + 0v8HWNL/B1jS/wdY0v8HWNL/B1nT/wdZ0/8HV9H/B1LM/wdJxf8HP7v/BzSw/wcso/8HKJX/BiaF/wYm + df8HJ2X/CihW/xAnSP8ZJzr/Iicv/yonJv8uKCL/Lioi/ywtJv8qMCv/KTQw/yw2Mv8wNzL/NTk0/z1A + Ov9FT0n/UGpm/12NjP9rsrT/eNLX/4Po7v+O8vj/mPb6/5/2+f+j9Pb/ofT2/5nx9f+O7vP/g+vy/3vp + 8P925/D/dOfw/3Pm7/9w5e//auPu/2Df7f9U2+z/SNbq/z7S6f840Oj/Nc/n/zTO5/8yzeb/Lszl/yfJ + 5P8cxuL/EsHf/wi82/8CtNP/AKnI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AeJH/AHuU/wuCmv8hjqP/P52v/2Cuvf+BwMv/m87X/7Ha4f/E5Or/1O3y/+D0+P/n+Pv/6fn8/+j5 + /P/m+Pz/5vj7/+f5/P/q+vz/7Pr9/+v6/f/m+fz/3ff7/9D0+f/C8fj/tO72/6bs9f+Y6vP/iuny/4Dp + 8f976fD/ferx/4Xs8v+P7/P/mPH1/5/z9v+h9Pj/ovX5/6T2+/+p9vv/s/b7/8L2+v/T9vj/4vX2/+30 + 9P/w8vH/7u/v/+rt7P/n6ur/5eno/+nq6P/t7ej/7+zn/+rn4v/Z2Nf/vcDG/5uksv95iJ7/XG+Q/0Zb + h/80SYP/JjqB/xswgv8TLIX/Dy6L/w42lP8PQJ3/EEik/xBMqP8QTqr/EE6q/xBNqf8QTan/EE2p/xBN + qf8QTan/EE2p/xBNqf8QTan/EE6q/xBOqv8QTKj/EEik/xBBnv8QOJb/EDCN/xEpg/8QJXf/ECRq/xAk + XP8RJE7/FCRC/xgjNv8fISr/JiEg/ysiGv8sJRr/KSog/yQxKv8gOTb/IEFB/ydKSv8yUVD/QFpX/09l + Yf9ddXH/aY2K/3Sqqf9/yMr/iOHl/5Dx9v+W+P3/mvn9/5z2+v+c8/b/mfH1/5Lv9P+K7fL/gevx/3no + 8P9z5u//b+Xv/2rj7v9l4e7/X9/t/1fc7P9O2Ov/RdXq/z3S6f830Oj/Ms7n/y7M5f8qyuT/JMji/x7F + 4f8Vw+D/DcDe/wa72v8BtNP/AKrI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AepP/AHyV/weAmP8Uh57/JpGm/zydr/9Vqrr/b7jF/43H0v+s2OD/yOft/97y9v/p+fz/7Pr9/+n6 + /f/m+Pv/5fj7/+j5/P/s+vz/7/v9/+37/f/k+fz/0vT6/7rv9/+j6fT/j+Xy/4Pk8f985PD/eeXw/3jn + 8P956PD/e+rx/4Dr8f+G7fL/ju7z/5bw9f+g8/f/q/b6/7f4/P/C+v7/zfv+/9j7/v/j+/z/7Pr7//H5 + +f/x9vb/7vPz/+rw8P/m7e3/5Ovr/+br6v/q7On/7Ovn/+rn4//g3tv/0NDR/7u+xf+kq7j/jZaq/3V/ + m/9bZon/Q015/y44a/8fLGT/GSpk/xcuaf8ZNnD/Gz12/xtAef8bQXr/G0F6/xtAef8bQHn/G0B5/xtA + ef8bQHn/G0B5/xtAef8bQHn/G0F6/xtBev8bQHn/Gz12/xs4cv8bMm3/Gy1n/xwoYP8cJlj/HCRP/xwk + Rf8dIzv/HiMy/yEhKf8lHyD/KR4Z/ysgFv8pJRr/Iy0m/xs4Nv8VRUn/FVNa/yBhaP80cHX/TYCC/2WQ + j/94oZ7/hLSx/47Ix/+U29z/mOvu/5v1+P+b+Pz/mff7/5bz+P+S8PT/ju7z/4rt8v+E7PL/f+rx/3jo + 8P9x5u//aePu/2Hf7f9Z3Oz/Utrr/0zY6/9H1ur/QtTq/zzS6f82z+f/L8zl/yfJ4/8gxuH/GcPf/xPB + 3v8Nv97/CL3d/wS62f8BtNP/AKrI/wCduv8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AfZb/AH6X/wSBmP8Jg5v/D4ed/xqNov8slqn/RaO0/2i2xP+Sy9b/ueDn/9bv9P/m+Pv/6vr9/+j5 + /f/k+Pv/4/f7/+b4+//r+fz/7fr8/+n6/P/c9/v/wvH4/6Pp9P+E4vH/bN3u/2Lc7f9j3e3/aeHu/3Hl + 7/936PD/eunw/3vq8f9+6vH/g+vy/43t8/+d8PX/sfT4/8T4+//V+v3/4fz9/+n9/f/u/P3/8fz8//L6 + +v/x+Pj/7fb2/+ny8//l8PH/4+3u/+Ts7P/m6+r/6Onn/+fm5P/j4eD/3Nzd/9TV2P/HytD/tbrD/5yh + rf98gJD/W15x/z5AVv8rLUX/IidA/yAoQf8jLUb/JTJL/yY0TP8mNE3/JjRN/yY0Tf8mNEz/JjRM/yY0 + TP8mNEz/JjRM/yY0TP8mNE3/JjRN/yY0Tf8mNEz/JjNL/yYwSf8mLUf/JitE/yYoQP8mJzz/JiY4/yYm + M/8mJi7/JyYq/ykkJP8rIh//LSIb/y0kHP8qKyT/ITY0/xZFSf8OVmD/D2d1/x56iP85j5r/WaSr/3i4 + u/+Pycn/nNfW/6Pi4f+l6+v/pPHy/6L19/+d9fj/lvP3/47w9f+I7fP/g+vy/4Hr8f9/6vH/fOnw/3fn + 8P9u5O//Y+Dt/1jc7P9O2Ov/RtXq/0LU6f8/0+n/PdLp/znR6P8zzuf/Ksrk/yDG4f8Wwt7/Dr7c/wm8 + 2/8GvNv/A7vb/wK52f8AtNP/AKrI/wCduv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wGAmP8AgJj/AH+X/wOBmf8Nh53/JJOo/0qnuf93wM3/o9jh/8Xq8f/Z9Pn/4fj8/+P4 + /P/h9/v/4Pb6/+L3+v/k9/v/4vf7/9v2+v/L8vj/ruv1/4vj8f9p2+7/Utbr/0rW6v9P2ev/W93s/2ni + 7v9y5u//dufw/3bo8P936PD/e+nw/4br8v+Z7vT/sfL2/8n2+f/d+vv/6fz8//D9/f/y/f3/8/39//L8 + /P/w+vr/7fj4/+n19v/l8vT/4/Dx/+Pt7v/l7Oz/5unp/+bn5v/k5eT/4uTl/97i5P/W3N//x87R/66z + t/+Mj5L/aGdq/0hFRv8zLi//KSUl/ycjJP8qJyj/LSor/y0rLP8tKyz/LSss/y0rLP8tKyz/LSss/y0r + LP8tKyz/LSss/y0rLP8tKyz/LSss/y0rLP8tKyz/LSss/y0qK/8tKSr/LSkq/y0oKf8tKSn/LCkp/ysq + Kf8rLCr/LC0q/y4tKf8xLSf/NC4n/zUyLP8yOzb/KEhJ/xxYX/8Tanj/FH2P/ySSo/9Bqbj/ZcHK/4bW + 2/+e5uf/qu/v/6708/+u9fX/qvX2/6X19v+d8/b/k/D0/4jt8/+A6vH/e+nw/3no8P946PD/d+fw/3Lm + 7/9p4u7/Xd7t/1DZ6/9F1er/PdLp/znR6P840Oj/N9Do/zXP5/8uzOX/Jcji/xnD3/8Pvtz/Brva/wK5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Afpb/AHyU/wB7lP8Cf5j/FYuh/zWesv9dtsf/hc7c/6fh7P+97PX/zfL5/9f1 + +v/d9fr/3vX6/9z1+f/W8/n/zPH3/77t9f+r6fP/kOPx/3Lc7v9W1uv/Q9Pp/z7T6f9E1er/Udrr/1/f + 7f9p4u7/buTv/2/l7/9x5u//dufw/4Lq8f+U7fP/q/H2/8L1+P/V+Pr/4vv8/+r8/f/v/f7/8v7+//P9 + /v/y/P3/7/r7/+v3+f/o9fb/5vP0/+fx8v/p7/D/6u3t/+nr6v/k6Oj/3ubn/9Tj5f/H297/tszO/56x + sv+AjYv/YWVg/0ZDOv80LCL/LCEW/yofFP8tIhf/LyQa/y8lGv8vJRr/LyUa/y8lGv8vJRr/LyUa/y8l + Gv8vJRr/LyUa/y8lGv8vJRr/LyUa/y8lGv8vJRr/LyUa/zAlGv8wJRr/MCUa/y8mHP8tKSD/Kywl/ygw + K/8nNTH/KDk2/y4+Ov83Qj7/P0hC/0VPSf9FWVb/PmZn/zN1fP8rhZL/K5an/zipuv9Rvsz/b9Pd/4zm + 6/+g8/b/qvn7/637+/+r+fr/p/b3/6L09v+a8vX/j+/z/4Xs8v986fH/dufw/3Pm7/9x5u//buTv/2ni + 7v9h3+3/Vtvs/0rX6v9A0+n/ONDo/zTO5/8yzuf/MM3m/y3L5f8nyeP/HsXg/xPA3f8KvNv/A7nZ/wC4 + 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Afpb/AHuU/wB6k/8BfZb/D4ef/yaYr/9CrsL/YMPW/33V5f+W4u//sOv1/8fx + +P/X9Pn/3fX5/9Xz+P/D7vb/rOjy/5Xi7/+A3e3/a9nr/1fV6v9H0un/PNHo/znR6P8/1On/SNfq/1Tb + 7P9d3u3/Y+Dt/2ji7v9t5e//dOfw/3/p8f+O7PL/n+/0/7Hy9v/B9fj/z/j6/9v6+//m/P3/7v3+//P+ + /v/1/f7/8/z8/+/6+//s+Pn/6vb3/+z19v/w9fX/8fPz/+3w7//i6ur/0ePm/7va3/+jzdP/jLvB/3eg + pP9hfn7/TVtV/z08Mv8xJxr/LB0P/ysbDf8sHQ//LiAS/y4gEv8uIBL/LiAS/y4gEv8uIBL/LiAS/y4g + Ev8uIBL/LiAS/y4gEv8uIBL/LiAS/y4gEv8uIBL/LiAS/y4gEf8vHxH/LiAS/y0jFv8qKB3/JC8o/x43 + NP8cQUH/H0tN/ypVV/87YGD/TWxq/1x4dP9ig4H/X4+P/1eaoP9QprD/TrK//1bAzf9m0Nv/et/o/4zs + 8v+Z9fn/n/n8/6H5/P+g9/n/nfT3/5ny9f+T8PT/i+7y/4Pr8f976fD/dOfw/27l7/9p4+7/Y+Dt/13e + 7f9W2+z/Tdjr/0XV6v890un/Ns/o/zHN5v8sy+X/KMnk/yPH4v8cxOD/FcHe/w693P8Hutr/ArjY/wC4 + 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Afpb/AHyV/wB8lP8Bfpf/CYaf/xWVrf8lpr7/OLnQ/0/J3/9s1un/kOLw/7Tr + 9f/O8fj/2PP5/8rw9/+t6PL/id7t/2jV6P9S0Ob/Rc7l/z3O5v86z+f/ONDo/znR6P880un/QtTq/0nX + 6v9Q2ev/WNzs/2Df7f9p4+7/c+bv/33p8P+G6/L/kO3z/5vv9P+n8fX/tfP3/8b2+f/X+fv/5vz9//H9 + /v/1/f7/9f39//L7/P/w+vv/7/n6//L6+v/2+vr/9/n5//D19f/e6+3/wN7j/5vN1v93usX/W6Sw/0mL + lP89bXH/NlBO/zI2L/8uJRr/LB0Q/ysbDv8sHRD/LR8T/y0fE/8tHxP/LR8T/y0fE/8tHxP/LR8T/y0f + E/8tHxP/LR8T/y0fE/8tHxP/LR8T/y0fE/8tHxP/LR8T/y0fEv8uHhH/Lh8S/ywjF/8mKiL/HTUy/xVC + RP8RUFf/Fl9p/ydweP9Bgof/XJOV/3Sko/+AsK//grq6/37BxP94x83/dM7W/3bW3v983ub/g+bt/4ns + 8/+O8fb/kPP4/5Hz9/+R8fb/kPD0/43u8/+K7fL/huzy/4Dr8f966fD/c+bv/2rj7v9h3+3/WNzs/1DZ + 6/9K1+r/RdXq/0HT6f880en/Ns/n/y7M5v8nyeP/H8Xh/xfC3/8Rv93/DL3b/wi72v8Eudn/AbjY/wC4 + 2P8Audn/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB9lf8AgJj/BIef/weSrP8Mobv/FrDL/ye+2f9Fy+P/cNnr/53l + 8v/A7fb/zPD3/7vr9P+U4e7/Z9Tn/z/K4v8qxd//JMTg/yfH4v8vy+X/Nc/n/zjQ6P860en/PNLp/z/T + 6f9F1er/Tdjr/1nc7P9l4e7/cOXv/3jo8P996fH/gerx/4Xr8f+N7PL/m+70/7Dy9v/G9fn/2/n7/+v8 + /f/y/f3/9f39//T9/f/y/Pz/8vz8//b9/f/5//7/+f79/+/4+f/X7O//r9rh/4DDz/9Tq7v/M5Ok/yR7 + iv8iY2z/JkxO/y04NP8wKyP/MCUb/zAjGf8wJRv/MCce/zAnHv8wJx7/MCce/zAnHv8wJx7/MCce/zAn + Hv8wJx7/MCce/zAnHv8wJx7/MCce/zAnHv8wJx7/MCce/zEmHP8xJRv/MSUc/y8qIv8oMy//HUBC/xJQ + Wf8NYnD/E3WF/yiKmf9Ioaz/are9/4jKzP+Z19f/n9/e/57i4/+Z5Ob/leXo/5Hn6/+N6O7/ierw/4Xr + 8f+D6/L/gezz/4Hs8v+B6/L/gevy/4Dq8f+A6vH/furx/3zp8f946PD/cOXv/2Xh7v9Z3Oz/Ttjr/0XV + 6v9A0+n/PdLp/zzR6f850Oj/NM7n/yvL5P8hxuH/FsLe/w6+3P8Iu9r/BLrZ/wK52f8BuNj/AbjY/wC4 + 2f8Audr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCQq/8Anbn/AKrI/w231f8pxN//VtLn/4Xe + 7v+q5/L/t+r0/6Tl8f972ur/S8zj/yPC3f8Pvdv/Db7c/xbC3/8kyOL/L8zl/zTO5/82z+f/Ns/o/zjQ + 6P890un/RtXq/1La6/9f3+3/auPu/3Hl7/9z5u//cubv/3Pm7/945/D/hunx/5zt9P+18vf/zfb5/9/5 + +//q+/z/7/z9//L9/f/y/f3/8/39//X////3////8////+f6+//N7fD/o9nh/3LBzv9FqLn/JpGk/xt8 + jP8eaXP/KFda/zRIRf86PTf/PDkx/z04L/88OTH/PDoz/zw7M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7 + M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7M/88OzP/PDoz/zw5Mf89ODD/PTkx/zo9N/8zR0T/KFVY/x1l + cP8XeIj/HYye/zKhsv9Sucb/ddDY/5Pj5v+l7/D/rPX1/6329v+q9fX/pfP0/5/y9P+W7/P/jO3y/4Pr + 8f986fD/eOjw/3bn8P915/D/dOfw/3Tm8P905/D/defw/3Tn8P9x5e//auPu/1/f7f9S2uv/RtXq/z3S + 6f840Oj/Ns/o/zbP5/80zuf/L8zl/ybI4/8bw+D/EL/d/we72v8Cudj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCPq/8Am7j/AKjH/wa00/8dv9z/Qsvk/2nW + 6f+I3u3/k+Du/4Pc7P9h0ub/Ocbg/xe92/8Hudn/B7ra/w++3f8bxOD/Jsjj/yvL5P8uzOb/Mc3m/zTO + 5/850ej/QtTp/0zY6/9X3Oz/YN/t/2bh7v9m4u7/Y+Ht/2Lh7f9n4u7/c+Tv/4jo8v+h7fT/ufL3/8z2 + +f/a+fv/5fv8/+39/f/y/v7/8/7+//L////t////5P3+/9X4+v+97fH/mtzk/3LI1P9Ps8L/NqCw/y+Q + nv80gYr/P3R3/0ppZ/9RYVz/VF5X/1RdVv9UXlf/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1Nf + Wf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NeV/9UXVb/VF1X/1FhXP9Mamj/QnZ5/ziE + jf8zlKL/OKW1/0i3x/9hy9f/fd7m/5Tu8v+j+Pr/qvz9/6z8/f+q+vv/pvf5/6D19/+X8vX/jO/0/4Hr + 8v956PD/c+bv/27l7/9r4+7/aOLu/2bh7v9m4u7/Z+Lu/2ji7v9m4e7/YN/t/1fc7P9M2Ov/QtTp/znR + 6P80zuf/Mc3m/y7M5v8ry+T/Jsjj/x7F4P8Vwd7/DL3b/wS52f8AuNj/ALfX/wC31/8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8Am7n/AKfH/wSz0v8UvNr/LsXg/0rN + 5f9f0uf/Z9Tn/1zR5v9EyuL/KMHd/xC72f8FuNj/BLnZ/wq82/8TwN3/G8Pg/yHG4f8nyeP/LMvl/zLO + 5/840Oj/P9Pp/0fW6v9O2Ov/VNvs/1jc7P9X3Oz/VNzs/1Tb7P9X3Oz/Y9/t/3Xj7/+K6fL/oe70/7Xy + 9//H9vn/2Pn7/+b8/P/w/f7/8v7+/+z+/v/g/P7/0Pn8/770+P+r7PH/k+Ho/3vT3f9mxtH/WLnF/1Sv + uP9ZpKv/YZue/2qUk/9vj4v/cY2I/3GMh/9xjYj/cI2J/3COif9wjon/cI6J/3COif9wjon/cI6J/3CO + if9wjon/cI6J/3COif9wjon/cI6J/3COif9wjon/cI2J/3GNiP9xjIf/cYyI/2+Pi/9rlZT/ZJ6g/16p + r/9atL7/W8DL/2TM2P9z2eP/gubt/5Dw9f+Z9vr/nfn8/5/5/P+e9/r/nPX4/5jz9/+R8fX/ie7z/4Dr + 8v946PD/cOXv/2ni7v9h4O3/XN7s/1jc7P9X3Oz/WNzs/1nc7P9Y3Oz/VNvs/07Y6/9H1ur/P9Pp/zjQ + 6P8yzuf/LMvl/yfJ4/8hxuH/G8Pg/xTB3v8Ovtz/CLva/wO52P8At9j/ALfX/wC31/8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8AnLn/AKnH/wKz0/8Lutr/GsDe/ynF + 4P82x+H/Osjh/zTG4P8mwt3/Fr3b/wm52f8DuNj/ArjY/wW62f8KvNv/EL/c/xbC3v8fxeH/KMnk/zDN + 5v830Oj/PdLp/0LU6v9F1er/SNbq/0rX6v9J1+r/R9bq/0fW6v9K1+r/VNrr/2Pe7f915O//ieny/5zu + 9P+x8vb/x/b5/9z6+//p/P3/7Pz9/+L7/P/P+Pv/ufT4/6bw9f+Y6/H/jubt/4bg5/+A2uH/fdTb/33P + 1P+Ayc3/hcTF/4nAv/+Mvbv/jby5/427uf+NvLn/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428 + uv+NvLr/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428uf+Nu7j/jby5/4y9u/+KwcD/h8bH/4PM + z/+A0tf/f9jf/4De5f+D5Ov/hunw/4nt8/+L8Pb/jPH3/43x9v+O8fb/jfD1/4vv9P+H7vP/g+zy/37q + 8f936PD/buTv/2Th7f9Z3ez/UNnr/0vX6v9J1ur/Sdbq/0rX6v9K1+r/SNbq/0XV6v9C1Or/PdLp/zfQ + 6P8wzeb/KMnk/x/F4f8Wwt7/EL/d/wu92/8Hu9r/BLnZ/wK42P8AuNj/ALfY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbr/AKrI/wG00/8Eudn/Cr3c/w++ + 3P8Uvtz/Fb7b/xO92/8OvNr/CLrZ/wO52P8BuNj/ALjY/wG42P8Dudn/B7va/w6+3P8Xwt//I8fi/y3L + 5f81z+f/OdHo/zzS6f890un/PtLp/z/S6f8+0un/PdLp/z3S6f9A0+n/SNbq/1Ta6/9i3+3/c+Tv/4Xp + 8f+b7vT/tfL3/8z2+f/d+fv/4Pn7/9T3+v+99Pj/pfD1/5Hs8/+J6/H/ierw/47q7/+V6+7/murt/53p + 6/+f5+j/oOXl/6Dj4/+h4uH/oeHg/6Hh4P+h4eD/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh + 4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4P+h4eD/oeHg/6Hi4f+h4+P/oOXl/5/n + 6P+d6ev/muvt/5Xr7/+P6/D/iOvx/4Lq8f9/6vH/ferx/33q8f996vH/ferx/33p8f986fH/e+nx/3no + 8P905u//a+Pu/1/e7f9S2uv/R9bq/0DT6f890un/PdLp/z7S6f8/0un/PtLp/z3S6f880un/OdHo/zXP + 5/8ty+X/I8fi/xfC3/8Ovtz/B7va/wO52f8Budj/AbjY/wG42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wG6 + 2v8Budn/AbjY/wG42P8BuNj/ALjY/wC42P8AuNj/ALjY/wC32P8AuNj/ArnY/wi72v8Rv93/HMTg/yfJ + 4/8uzOX/M87n/zbP5/830Oj/ONDo/zjQ6P840Oj/N9Do/zfQ6P860ej/QNPp/0nX6v9V2+z/YuDt/3Ll + 7/+H6fL/n+30/7bx9//H9Pj/y/T5/8Dz+P+r7/X/lOzz/4Tq8f+A6vH/hezy/5Dv8/+c8vX/pfT2/6j1 + 9v+q9vb/qfX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j1 + 9v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qfX2/6r2 + 9v+o9fb/pfT2/53y9f+T8PT/iO3y/3/q8f946PD/defw/3Lm7/9x5e//cOXv/3Dl7/9x5e//ceXv/3Dl + 7/9s5O//ZODu/1jc7P9L1+r/QdPp/zrR6P830Oj/N9Do/zjQ6P840Oj/ONDo/zfQ6P82z+f/M87n/y7M + 5f8nyeP/HMTg/xG/3f8Iu9r/ArnY/wC42P8At9j/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC4 + 2f8At9j/ALbX/wC21/8At9f/ALfY/wC42P8AuNj/ALjY/wC31/8At9f/AbjY/wa62f8Nvdv/FcHe/x7F + 4P8lyOL/Ksrk/y7M5f8yzuf/Nc/n/zfQ6P830Oj/Ns/o/zbP6P840Oj/PdLp/0PV6v9M2ev/Vtzs/2Lg + 7f9y4+//hubx/5jp8/+m6/X/q+31/6Ts9P+W6/P/h+nx/33p8f986vH/g+3y/47w9P+Z9Pf/ovb4/6X4 + +v+m+fv/pfr8/6T6/P+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6 + /f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+k+vz/pfr8/6b5 + +/+l+Pr/ovb4/5v09/+S8fX/h+3z/37q8f925/D/cOXv/2rj7v9m4e7/Y+Dt/2Lg7f9j4O3/ZOHu/2Th + 7v9h4O3/W93t/1HZ6/9H1ur/PtLp/zjQ6P82z+j/Ns/o/zfQ6P830Oj/Nc/n/zLO5/8uzOX/Ksrk/yXI + 4v8exeD/FcHe/w292/8Gutn/AbjY/wC31/8At9f/ALfY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC4 + 2f8At9j/ALbX/wC21/8At9f/ALfY/wC42P8AuNj/ALjY/wC32P8At9f/AbjY/wS52f8Iu9r/Db3c/xPA + 3f8Zw9//IMbh/yfJ4/8uzOX/NM7n/zfQ6P840On/ONDp/zjQ6P850Oj/PNLp/0DU6f9F1ur/TNjr/1Tb + 7P9e3e3/at/u/3fg7/+A4vD/huTx/4Xl8f+B5vH/fOfw/3no8P976vH/gezy/4nv9P+R8fX/lvP3/5n0 + +P+Z9fn/mfb5/5j2+v+X9vv/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3 + +/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f2+/+Y9vr/mfb5/5n1 + +f+Z9Pj/l/P3/5Lx9f+M7/T/hO3y/33q8f915/D/bOTu/2Th7f9c3uz/Vtvs/1Pa6/9T2uz/Vdvs/1bb + 7P9U2+z/UNnr/0nX6/9D1Or/PNLp/znQ6P840Oj/ONDp/zjQ6f830Oj/NM7n/y7M5f8nyeP/IMbh/xnD + 3/8TwN3/Db3c/wi72v8Eudn/AbjY/wC31/8At9f/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC5 + 2v8AuNj/ALfY/wC32P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK42P8Dudn/Brra/wm8 + 2/8Pvtz/FsLe/yDG4f8qyuT/Ms3m/zfQ6P850en/OdHp/znQ6P850Oj/OtHo/zzS6f8/0+n/Q9Tq/0fW + 6v9M1uv/Udfr/1fY7P9d2ez/Ytvt/2je7v9t4e7/ceTv/3bn8P966fD/furx/4Ls8v+F7fP/h+3z/4ju + 9P+J7vT/iO/0/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv + 9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/0/4nu + 9P+I7vT/h+3z/4Xt8/+D7PL/f+vx/3rp8P9z5u//aePu/17e7f9T2uv/Stfq/0bV6v9F1er/RtXq/0fW + 6v9H1ur/RNXq/0HT6f8+0un/O9Hp/znQ6P850Oj/OdHp/znR6f830Oj/Ms3m/yrK5P8gxuH/FsLe/w++ + 3P8JvNv/Brra/wO52f8CuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK5 + 2f8Gu9r/Dr7c/xnD3/8kyOL/Lszl/zTO5/83z+j/N9Do/zbP6P82z+f/Ns/n/zfP5/830Oj/OdDo/zrR + 6P870ej/PdHo/z/R6f9C0un/SNXq/1HY6/9c3ez/Z+Hu/3Dl7/915/D/eOjw/3no8P956PD/eejw/3no + 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no + 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no + 8P956PD/eejw/3no8P956PD/eOjw/3Xn8P9v5e//ZeHu/1jc7P9L1+r/QdPp/zzR6P850Oj/OdDo/zrQ + 6P860Oj/OdDo/zjQ6P83z+f/Ns/n/zbP5/82z+j/N9Do/zfP6P80zuf/Lszl/yTI4v8Zw9//Dr7c/wa7 + 2v8Cudn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALvb/wC6 + 2v8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC42f8AuNj/ALjY/wC4 + 2P8Dudn/Crzb/xPB3v8exeH/J8nk/yzM5f8vzeb/L83m/y7M5v8tzOb/Lczm/y3M5f8tzOX/Lczl/y3M + 5v8uzOb/L83n/zHO5/81z+j/O9Lp/0XW6v9R2uz/Xd/t/2fi7/9s5O//buXv/27l7/9t5O//bOTv/2zk + 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk + 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk + 7/9s5O//bOTv/23k7/9u5e//buXv/2zk7/9n4u//Xd/t/1La7P9G1ur/PNLp/zbQ6P8yzuf/MM3n/y7M + 5v8tzOb/Lczl/yzM5f8tzOX/Lczm/y3M5v8uzOb/L83m/y/N5v8szOX/J8nk/x7F4f8Twd7/Crzb/wO5 + 2f8AuNj/ALjY/wC42P8AuNn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC5 + 2f8Autr/ALvb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrv/AKvJ/wC11P8Autr/ALzc/wC7 + 3P8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC52v8Audn/ALnZ/wC5 + 2f8Cutr/B7zb/w6/3v8Ww+D/Hcbi/yHI4/8jyOT/I8nk/yLI5P8iyOP/Icjj/yDI4/8gx+P/H8fj/yDI + 5P8jyeT/Jsvm/yrN5/8wz+n/NtLq/z/V6/9K2ez/U9zu/1vf7/9g4e//YeHv/2Dh7/9f4O//XuDv/17g + 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g + 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g + 7/9e4O//XuDv/1/g7/9g4e//YeHv/2Dh7/9c3+//Vd3u/0zZ7f9D1uz/OtPq/zPQ6f8tzef/KMvm/yTJ + 5P8hyOT/H8fj/x/H4/8gx+P/Icjj/yLI4/8iyOT/I8nk/yPI5P8hyOP/Hcbi/xbD4P8Ov97/B7zb/wK6 + 2v8Audn/ALnZ/wC52f8Audr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC6 + 2v8Au9z/ALzc/wC62v8AtdT/AKvJ/wCeu/8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCSrP8An7v/AKvK/wC11f8Autv/ALzd/wC8 + 3P8Au9v/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALna/wC5 + 2v8Butr/BLvb/wm93f8OwN7/EsHf/xTD4P8Vw+D/FsPg/xXD4P8Vw+D/FMPg/xPC4P8TwuD/E8Lg/xXD + 4f8axeL/IMjk/yjM5v8wz+n/N9Lq/z7V6/9E1+z/Stnt/0/b7f9R3O7/Utzu/1Lc7v9R3O7/UNvu/1Db + 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db + 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db + 7v9Q2+7/UNvu/1Hc7v9S3O7/Utzu/1Hc7v9P2+3/S9nt/0bX7f9A1ez/OdPr/zLQ6f8qzOf/Isnk/xrF + 4v8Vw+H/E8Lg/xLC4P8TwuD/FMPg/xXD4P8Vw+D/FsPg/xXD4P8Uw+D/EsHf/w7A3v8Jvd3/BLvb/wG6 + 2v8Audr/ALna/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC7 + 2/8AvNz/ALzd/wC62/8AtdX/AKvK/wCfu/8Akqz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALrb/wC6 + 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC4 + 2P8BuNj/ArnZ/wS62f8Gu9r/CLzb/wm82/8Kvdv/Cr3b/wq82/8JvNv/Cbzb/wi82/8HvNv/CLzb/wu9 + 3P8SwN7/HMTh/ybJ5P8wzeb/N9Do/zvS6f8/0+r/QdTq/0LU6v9D1er/Q9Xq/0PV6v9D1er/Q9Tq/0PU + 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU + 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU + 6v9D1Or/Q9Tq/0PV6v9D1er/Q9Xq/0PV6v9C1Or/QdTq/z/T6v880un/ONDo/zDN5v8nyeT/HMTh/xLA + 3v8Lvdz/CLzb/we82/8IvNv/Cbzb/wm82/8KvNv/Cr3b/wq92/8JvNv/CLzb/wa72v8Eutn/ArnZ/wG4 + 2P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5 + 2f8Autr/ALrb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQqv8Am7f/AKfE/wCvzv8AtNP/ALXV/wC1 + 1P8AtNP/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz + 0/8As9P/ALTT/wG00/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8As9P/AbTT/wS1 + 1P8Mudb/Fr3Z/yLC3P8sxt//Msnh/zXK4v82y+L/Nsri/zXK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK + 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK + 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK + 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v81yuL/Nsri/zbL4v81yuL/Msnh/yzG3/8iwtz/Fr3Z/wy5 + 1v8EtdT/AbTT/wCz0/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8BtNP/ALTT/wCz + 0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wC0 + 0/8AtdT/ALXV/wC00/8Ar87/AKfE/wCbt/8AkKr/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8Af5f/AH+W/wB/lv8AgJj/AIWe/wCNp/8AlrH/AJ+8/wCnxP8Aqsj/AKvK/wCr + yf8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq + yP8Aqsj/AKrI/wCqyP8Aqsj/AKnI/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnH/wCpx/8Aqcf/AKnH/wKq + yP8Ircr/EbHN/xu10P8judL/KbvU/yu81P8rvNT/KrzU/ym71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7 + 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7 + 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7 + 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8pu9T/KrzU/yu81P8rvNT/KbvU/yO50v8btdD/EbHN/wit + yv8Cqsj/AKnH/wCpx/8Aqcf/AKnH/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnI/wCqyP8Aqsj/AKrI/wCq + yP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq + yP8Aq8n/AKvK/wCqyP8Ap8T/AJ+8/wCWsf8Ajaf/AIWe/wCAmP8Af5b/AH+W/wB/l/8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIOc/wCJov8AkKr/AJax/wCbt/8Anrr/AJ+7/wCe + u/8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe + uv8Anrr/AJ26/wCduv8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCcuf8AnLn/AJ25/wKd + uv8GoLv/DKK9/xOlv/8ZqMH/HarC/x6qwv8eqsL/HarC/xyqwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup + wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup + wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup + wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8cqsL/HarC/x6qwv8eqsL/HarC/xmowf8Tpb//DKK9/wag + u/8Cnbr/AJ25/wCcuf8AnLn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbr/AJ26/wCe + uv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe + uv8Anrv/AJ+7/wCeuv8Am7f/AJax/wCQqv8AiaL/AIOc/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIKa/wCFnv8AiaL/AI2n/wCQqv8Akaz/AJKs/wCR + rP8Akaz/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR + q/8Akav/AJGr/wCRq/8Akav/AJGr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wGR + q/8Dkqz/B5St/wuVrv8Ol6//EJiw/xGYsP8RmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY + sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY + sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY + sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xGYsP8RmLD/EJiw/w6Xr/8Lla7/B5St/wOS + rP8Bkav/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJGr/wCRq/8Akav/AJGr/wCR + q/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR + rP8Akaz/AJKs/wCRrP8AkKr/AI2n/wCJov8AhZ7/AIKa/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA + mP8AgJj7AICY/ACAmPwAgJj8AICY/QCAmP4AgJj/AIGZ/wCCmv8Ag5z/AIWe/wCGn/8Ah5//AIeg/wCH + oP8Ah6D/AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH + n/8Ah5//AIef/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCH + oP8Bh6D/A4ig/wSIof8FiaH/Bomh/weJof8HiaH/B4mh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ + of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ + of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ + of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/B4mh/weJof8HiaH/Bomh/wWJof8EiKH/A4ig/wGH + oP8Ah6D/AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIef/wCH + n/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH + oP8Ah6D/AIeg/wCHn/8Ahp//AIWe/wCDnP8Agpr/AIGZ/wCAmP8AgJj+AICY/QCAmPwAgJj8AICY/ACA + mPsAgJjcAICY3gCAmOEAgJjmAICY7QCAmPQAgJj7AICY/wCAmP8AgJj/AICY/wCAmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCAmf8AgJn/AICZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB + mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB + mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB + mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AICZ/wCAmf8AgJn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB + mf8AgZn/AIGZ/wCBmf8AgJn/AICY/wCAmP8AgJj/AICY/wCAmPsAgJj0AICY7QCAmOYAgJjhAICY3gCA + mNwAgJimAICYqgCAmLEAgJi+AICY0ACAmOMAgJj0AICY/gB/l/8Af5f/AH+W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH+W/wB/l/8Af5f/AICY/gCAmPQAgJjjAICY0ACAmL4AgJixAICYqgCA + mKYAgJhoAICYbwCAmHsAgJiSAICYrwCAmNAAgJjtAICY/QB/l/8Af5f/AH+X/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9 + lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+ + lv8Afpb/AH6W/wB+lv8Afpb/AH+X/wB/l/8Af5f/AICY/QCAmO0AgJjQAICYrwCAmJIAgJh7AICYbwCA + mGgAgJgwAICYOQCAmEoAgJhpAICYkgCAmL4AgJjmAICY/ACAmP8AgJj/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/ + l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wCAmP8AgJj/AICY/ACAmOYAgJi+AICYkgCAmGkAgJhKAICYOQCA + mDAAgJgGAICYEQCAmCYAgJhKAICYewCAmLEAgJjhAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmOEAgJixAICYewCAmEoAgJgmAICYEQCA + mAYAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA + mAAAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA + mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA + mADAAAAAAAAAAAAAAAAAAAAAAAAMAMAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAwAwAAAAAAAAAAAAAAAAAAAAAAA + DAA= + + \ No newline at end of file diff --git a/DS_Map/Editors/ScriptEditor.Designer.cs b/DS_Map/Editors/ScriptEditor.Designer.cs index 9d00b3a..2c0a62c 100644 --- a/DS_Map/Editors/ScriptEditor.Designer.cs +++ b/DS_Map/Editors/ScriptEditor.Designer.cs @@ -28,826 +28,593 @@ namespace DSPRE.Editors /// the contents of this method with the code editor. /// private void InitializeComponent() { - this.selectScriptFileComboBox = new System.Windows.Forms.ComboBox(); - this.label5 = new System.Windows.Forms.Label(); - this.scriptEditorTabControl = new System.Windows.Forms.TabControl(); - this.scriptsTabPage = new System.Windows.Forms.TabPage(); - this.PanelSearchScripts = new System.Windows.Forms.Panel(); - this.BtnNextFindScript = new System.Windows.Forms.Button(); - this.BtnPrevFindScript = new System.Windows.Forms.Button(); - this.BtnCloseFindScript = new System.Windows.Forms.Button(); - this.panelFindScriptTextBox = new System.Windows.Forms.TextBox(); - this.scintillaScriptsPanel = new System.Windows.Forms.Panel(); - this.functionsTabPage = new System.Windows.Forms.TabPage(); - this.PanelSearchFunctions = new System.Windows.Forms.Panel(); - this.BtnNextFindFunc = new System.Windows.Forms.Button(); - this.BtnPrevFindFunc = new System.Windows.Forms.Button(); - this.BtnCloseFindFunc = new System.Windows.Forms.Button(); - this.panelFindFunctionTextBox = new System.Windows.Forms.TextBox(); - this.scintillaFunctionsPanel = new System.Windows.Forms.Panel(); - this.actionsTabPage = new System.Windows.Forms.TabPage(); - this.PanelSearchActions = new System.Windows.Forms.Panel(); - this.BtnNextFindActions = new System.Windows.Forms.Button(); - this.BtnPrevFindActions = new System.Windows.Forms.Button(); - this.BtnCloseFindActions = new System.Windows.Forms.Button(); - this.panelFindActionTextBox = new System.Windows.Forms.TextBox(); - this.scintillaActionsPanel = new System.Windows.Forms.Panel(); - this.addScriptFileButton = new System.Windows.Forms.Button(); - this.removeScriptFileButton = new System.Windows.Forms.Button(); - this.saveScriptFileButton = new System.Windows.Forms.Button(); - this.exportScriptFileButton = new System.Windows.Forms.Button(); - this.importScriptFileButton = new System.Windows.Forms.Button(); - this.groupBox8 = new System.Windows.Forms.GroupBox(); - this.searchInScriptsButton = new System.Windows.Forms.Button(); - this.searchOnlyCurrentScriptCheckBox = new System.Windows.Forms.CheckBox(); - this.scrollToBlockStartcheckBox = new System.Windows.Forms.CheckBox(); - this.scriptSearchCaseSensitiveCheckBox = new System.Windows.Forms.CheckBox(); - this.searchInScriptsTextBox = new System.Windows.Forms.TextBox(); - this.label31 = new System.Windows.Forms.Label(); - this.searchProgressBar = new System.Windows.Forms.ProgressBar(); - this.label30 = new System.Windows.Forms.Label(); - this.label29 = new System.Windows.Forms.Label(); - this.searchInScriptsResultListBox = new System.Windows.Forms.ListBox(); - this.groupBox24 = new System.Windows.Forms.GroupBox(); - this.ScriptNavigatorTabControl = new System.Windows.Forms.TabControl(); - this.ScriptsNavTab = new System.Windows.Forms.TabPage(); - this.scriptsNavListbox = new System.Windows.Forms.ListBox(); - this.FunctionsNavTab = new System.Windows.Forms.TabPage(); - this.functionsNavListbox = new System.Windows.Forms.ListBox(); - this.ActionsNavTab = new System.Windows.Forms.TabPage(); - this.actionsNavListbox = new System.Windows.Forms.ListBox(); - this.openFindScriptEditorButton = new System.Windows.Forms.Button(); - this.expandScriptTextButton = new System.Windows.Forms.Button(); - this.compressScriptTextButton = new System.Windows.Forms.Button(); - this.scriptEditorWordWrapCheckbox = new System.Windows.Forms.CheckBox(); - this.scriptEditorWhitespacesCheckbox = new System.Windows.Forms.CheckBox(); - this.groupBox26 = new System.Windows.Forms.GroupBox(); - this.scriptEditorNumberFormatNoPreference = new System.Windows.Forms.RadioButton(); - this.scriptEditorNumberFormatDecimal = new System.Windows.Forms.RadioButton(); - this.scriptEditorNumberFormatHex = new System.Windows.Forms.RadioButton(); - this.viewLevelScriptButton = new System.Windows.Forms.Button(); - this.locateCurrentScriptFile = new System.Windows.Forms.Button(); - this.scriptEditorTabControl.SuspendLayout(); - this.scriptsTabPage.SuspendLayout(); - this.PanelSearchScripts.SuspendLayout(); - this.functionsTabPage.SuspendLayout(); - this.PanelSearchFunctions.SuspendLayout(); - this.actionsTabPage.SuspendLayout(); - this.PanelSearchActions.SuspendLayout(); - this.groupBox8.SuspendLayout(); - this.groupBox24.SuspendLayout(); - this.ScriptNavigatorTabControl.SuspendLayout(); - this.ScriptsNavTab.SuspendLayout(); - this.FunctionsNavTab.SuspendLayout(); - this.ActionsNavTab.SuspendLayout(); - this.groupBox26.SuspendLayout(); - this.SuspendLayout(); - // - // selectScriptFileComboBox - // - this.selectScriptFileComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.selectScriptFileComboBox.FormattingEnabled = true; - this.selectScriptFileComboBox.Location = new System.Drawing.Point(7, 24); - this.selectScriptFileComboBox.Name = "selectScriptFileComboBox"; - this.selectScriptFileComboBox.Size = new System.Drawing.Size(152, 21); - this.selectScriptFileComboBox.TabIndex = 0; - this.selectScriptFileComboBox.SelectedIndexChanged += new System.EventHandler(this.selectScriptFileComboBox_SelectedIndexChanged); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(5, 8); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(53, 13); - this.label5.TabIndex = 1; - this.label5.Text = "Script File"; - // - // scriptEditorTabControl - // - this.scriptEditorTabControl.Controls.Add(this.scriptsTabPage); - this.scriptEditorTabControl.Controls.Add(this.functionsTabPage); - this.scriptEditorTabControl.Controls.Add(this.actionsTabPage); - this.scriptEditorTabControl.Location = new System.Drawing.Point(481, 22); - this.scriptEditorTabControl.Name = "scriptEditorTabControl"; - this.scriptEditorTabControl.SelectedIndex = 0; - this.scriptEditorTabControl.Size = new System.Drawing.Size(692, 591); - this.scriptEditorTabControl.TabIndex = 18; - this.scriptEditorTabControl.SelectedIndexChanged += new System.EventHandler(this.scriptEditorTabControl_TabIndexChanged); - // - // scriptsTabPage - // - this.scriptsTabPage.Controls.Add(this.PanelSearchScripts); - this.scriptsTabPage.Controls.Add(this.scintillaScriptsPanel); - this.scriptsTabPage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.scriptsTabPage.Location = new System.Drawing.Point(4, 22); - this.scriptsTabPage.Name = "scriptsTabPage"; - this.scriptsTabPage.Padding = new System.Windows.Forms.Padding(3); - this.scriptsTabPage.Size = new System.Drawing.Size(684, 565); - this.scriptsTabPage.TabIndex = 0; - this.scriptsTabPage.Text = "Scripts"; - this.scriptsTabPage.UseVisualStyleBackColor = true; - // - // PanelSearchScripts - // - this.PanelSearchScripts.BackColor = System.Drawing.Color.White; - this.PanelSearchScripts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PanelSearchScripts.Controls.Add(this.BtnNextFindScript); - this.PanelSearchScripts.Controls.Add(this.BtnPrevFindScript); - this.PanelSearchScripts.Controls.Add(this.BtnCloseFindScript); - this.PanelSearchScripts.Controls.Add(this.panelFindScriptTextBox); - this.PanelSearchScripts.Location = new System.Drawing.Point(386, 3); - this.PanelSearchScripts.Name = "PanelSearchScripts"; - this.PanelSearchScripts.Size = new System.Drawing.Size(292, 40); - this.PanelSearchScripts.TabIndex = 14; - this.PanelSearchScripts.Visible = false; - // - // BtnNextFindScript - // - this.BtnNextFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnNextFindScript.ForeColor = System.Drawing.Color.White; - this.BtnNextFindScript.Image = global::DSPRE.Properties.Resources.arrowdown; - this.BtnNextFindScript.Location = new System.Drawing.Point(233, 4); - this.BtnNextFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnNextFindScript.Name = "BtnNextFindScript"; - this.BtnNextFindScript.Size = new System.Drawing.Size(25, 30); - this.BtnNextFindScript.TabIndex = 32; - this.BtnNextFindScript.Tag = "Find next (Enter)"; - this.BtnNextFindScript.UseVisualStyleBackColor = true; - this.BtnNextFindScript.Click += new System.EventHandler(this.BtnNextFindScript_Click); - // - // BtnPrevFindScript - // - this.BtnPrevFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnPrevFindScript.ForeColor = System.Drawing.Color.White; - this.BtnPrevFindScript.Image = global::DSPRE.Properties.Resources.arrowup; - this.BtnPrevFindScript.Location = new System.Drawing.Point(205, 4); - this.BtnPrevFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnPrevFindScript.Name = "BtnPrevFindScript"; - this.BtnPrevFindScript.Size = new System.Drawing.Size(25, 30); - this.BtnPrevFindScript.TabIndex = 31; - this.BtnPrevFindScript.Tag = "Find previous (Shift+Enter)"; - this.BtnPrevFindScript.UseVisualStyleBackColor = true; - this.BtnPrevFindScript.Click += new System.EventHandler(this.BtnPrevFindScript_Click); - // - // BtnCloseFindScript - // - this.BtnCloseFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnCloseFindScript.ForeColor = System.Drawing.Color.White; - this.BtnCloseFindScript.Image = global::DSPRE.Properties.Resources.Cross; - this.BtnCloseFindScript.Location = new System.Drawing.Point(261, 4); - this.BtnCloseFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnCloseFindScript.Name = "BtnCloseFindScript"; - this.BtnCloseFindScript.Size = new System.Drawing.Size(25, 30); - this.BtnCloseFindScript.TabIndex = 33; - this.BtnCloseFindScript.Tag = "Close (Esc)"; - this.BtnCloseFindScript.UseVisualStyleBackColor = true; - this.BtnCloseFindScript.Click += new System.EventHandler(this.BtnCloseFindScript_Click); - // - // panelFindScriptTextBox - // - this.panelFindScriptTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.panelFindScriptTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.panelFindScriptTextBox.Location = new System.Drawing.Point(10, 6); - this.panelFindScriptTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.panelFindScriptTextBox.Name = "panelFindScriptTextBox"; - this.panelFindScriptTextBox.Size = new System.Drawing.Size(189, 25); - this.panelFindScriptTextBox.TabIndex = 30; - this.panelFindScriptTextBox.TextChanged += new System.EventHandler(this.panelFindScriptTextBox_TextChanged); - this.panelFindScriptTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.scriptTxtFind_KeyDown); - // - // scintillaScriptsPanel - // - this.scintillaScriptsPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.scintillaScriptsPanel.Location = new System.Drawing.Point(3, 3); - this.scintillaScriptsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.scintillaScriptsPanel.Name = "scintillaScriptsPanel"; - this.scintillaScriptsPanel.Size = new System.Drawing.Size(678, 559); - this.scintillaScriptsPanel.TabIndex = 19; - // - // functionsTabPage - // - this.functionsTabPage.Controls.Add(this.PanelSearchFunctions); - this.functionsTabPage.Controls.Add(this.scintillaFunctionsPanel); - this.functionsTabPage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.functionsTabPage.Location = new System.Drawing.Point(4, 22); - this.functionsTabPage.Name = "functionsTabPage"; - this.functionsTabPage.Padding = new System.Windows.Forms.Padding(3); - this.functionsTabPage.Size = new System.Drawing.Size(684, 565); - this.functionsTabPage.TabIndex = 1; - this.functionsTabPage.Text = "Functions"; - this.functionsTabPage.UseVisualStyleBackColor = true; - // - // PanelSearchFunctions - // - this.PanelSearchFunctions.BackColor = System.Drawing.Color.White; - this.PanelSearchFunctions.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PanelSearchFunctions.Controls.Add(this.BtnNextFindFunc); - this.PanelSearchFunctions.Controls.Add(this.BtnPrevFindFunc); - this.PanelSearchFunctions.Controls.Add(this.BtnCloseFindFunc); - this.PanelSearchFunctions.Controls.Add(this.panelFindFunctionTextBox); - this.PanelSearchFunctions.Location = new System.Drawing.Point(386, 3); - this.PanelSearchFunctions.Name = "PanelSearchFunctions"; - this.PanelSearchFunctions.Size = new System.Drawing.Size(292, 40); - this.PanelSearchFunctions.TabIndex = 16; - this.PanelSearchFunctions.Visible = false; - // - // BtnNextFindFunc - // - this.BtnNextFindFunc.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnNextFindFunc.ForeColor = System.Drawing.Color.White; - this.BtnNextFindFunc.Image = global::DSPRE.Properties.Resources.arrowdown; - this.BtnNextFindFunc.Location = new System.Drawing.Point(233, 4); - this.BtnNextFindFunc.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnNextFindFunc.Name = "BtnNextFindFunc"; - this.BtnNextFindFunc.Size = new System.Drawing.Size(25, 30); - this.BtnNextFindFunc.TabIndex = 36; - this.BtnNextFindFunc.Tag = "Find next (Enter)"; - this.BtnNextFindFunc.UseVisualStyleBackColor = true; - this.BtnNextFindFunc.Click += new System.EventHandler(this.BtnNextFindFunc_Click); - // - // BtnPrevFindFunc - // - this.BtnPrevFindFunc.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnPrevFindFunc.ForeColor = System.Drawing.Color.White; - this.BtnPrevFindFunc.Image = global::DSPRE.Properties.Resources.arrowup; - this.BtnPrevFindFunc.Location = new System.Drawing.Point(205, 4); - this.BtnPrevFindFunc.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnPrevFindFunc.Name = "BtnPrevFindFunc"; - this.BtnPrevFindFunc.Size = new System.Drawing.Size(25, 30); - this.BtnPrevFindFunc.TabIndex = 35; - this.BtnPrevFindFunc.Tag = "Find previous (Shift+Enter)"; - this.BtnPrevFindFunc.UseVisualStyleBackColor = true; - this.BtnPrevFindFunc.Click += new System.EventHandler(this.BtnPrevFindFunc_Click); - // - // BtnCloseFindFunc - // - this.BtnCloseFindFunc.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnCloseFindFunc.ForeColor = System.Drawing.Color.White; - this.BtnCloseFindFunc.Image = global::DSPRE.Properties.Resources.Cross; - this.BtnCloseFindFunc.Location = new System.Drawing.Point(261, 4); - this.BtnCloseFindFunc.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnCloseFindFunc.Name = "BtnCloseFindFunc"; - this.BtnCloseFindFunc.Size = new System.Drawing.Size(25, 30); - this.BtnCloseFindFunc.TabIndex = 37; - this.BtnCloseFindFunc.Tag = "Close (Esc)"; - this.BtnCloseFindFunc.UseVisualStyleBackColor = true; - this.BtnCloseFindFunc.Click += new System.EventHandler(this.BtnCloseFindFunc_Click); - // - // panelFindFunctionTextBox - // - this.panelFindFunctionTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.panelFindFunctionTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.panelFindFunctionTextBox.Location = new System.Drawing.Point(10, 6); - this.panelFindFunctionTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.panelFindFunctionTextBox.Name = "panelFindFunctionTextBox"; - this.panelFindFunctionTextBox.Size = new System.Drawing.Size(189, 25); - this.panelFindFunctionTextBox.TabIndex = 34; - this.panelFindFunctionTextBox.TextChanged += new System.EventHandler(this.panelFindFunctionTextBox_TextChanged); - this.panelFindFunctionTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.functionTxtFind_KeyDown); - // - // scintillaFunctionsPanel - // - this.scintillaFunctionsPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.scintillaFunctionsPanel.Location = new System.Drawing.Point(3, 3); - this.scintillaFunctionsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.scintillaFunctionsPanel.Name = "scintillaFunctionsPanel"; - this.scintillaFunctionsPanel.Size = new System.Drawing.Size(678, 559); - this.scintillaFunctionsPanel.TabIndex = 20; - // - // actionsTabPage - // - this.actionsTabPage.Controls.Add(this.PanelSearchActions); - this.actionsTabPage.Controls.Add(this.scintillaActionsPanel); - this.actionsTabPage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.actionsTabPage.Location = new System.Drawing.Point(4, 22); - this.actionsTabPage.Name = "actionsTabPage"; - this.actionsTabPage.Padding = new System.Windows.Forms.Padding(3); - this.actionsTabPage.Size = new System.Drawing.Size(684, 565); - this.actionsTabPage.TabIndex = 2; - this.actionsTabPage.Text = "Actions"; - this.actionsTabPage.UseVisualStyleBackColor = true; - // - // PanelSearchActions - // - this.PanelSearchActions.BackColor = System.Drawing.Color.White; - this.PanelSearchActions.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PanelSearchActions.Controls.Add(this.BtnNextFindActions); - this.PanelSearchActions.Controls.Add(this.BtnPrevFindActions); - this.PanelSearchActions.Controls.Add(this.BtnCloseFindActions); - this.PanelSearchActions.Controls.Add(this.panelFindActionTextBox); - this.PanelSearchActions.Location = new System.Drawing.Point(386, 3); - this.PanelSearchActions.Name = "PanelSearchActions"; - this.PanelSearchActions.Size = new System.Drawing.Size(292, 40); - this.PanelSearchActions.TabIndex = 16; - this.PanelSearchActions.Visible = false; - // - // BtnNextFindActions - // - this.BtnNextFindActions.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnNextFindActions.ForeColor = System.Drawing.Color.White; - this.BtnNextFindActions.Image = global::DSPRE.Properties.Resources.arrowdown; - this.BtnNextFindActions.Location = new System.Drawing.Point(233, 4); - this.BtnNextFindActions.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnNextFindActions.Name = "BtnNextFindActions"; - this.BtnNextFindActions.Size = new System.Drawing.Size(25, 30); - this.BtnNextFindActions.TabIndex = 40; - this.BtnNextFindActions.Tag = "Find next (Enter)"; - this.BtnNextFindActions.UseVisualStyleBackColor = true; - this.BtnNextFindActions.Click += new System.EventHandler(this.BtnNextFindActions_Click); - // - // BtnPrevFindActions - // - this.BtnPrevFindActions.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnPrevFindActions.ForeColor = System.Drawing.Color.White; - this.BtnPrevFindActions.Image = global::DSPRE.Properties.Resources.arrowup; - this.BtnPrevFindActions.Location = new System.Drawing.Point(205, 4); - this.BtnPrevFindActions.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnPrevFindActions.Name = "BtnPrevFindActions"; - this.BtnPrevFindActions.Size = new System.Drawing.Size(25, 30); - this.BtnPrevFindActions.TabIndex = 39; - this.BtnPrevFindActions.Tag = "Find previous (Shift+Enter)"; - this.BtnPrevFindActions.UseVisualStyleBackColor = true; - this.BtnPrevFindActions.Click += new System.EventHandler(this.BtnPrevFindActions_Click); - // - // BtnCloseFindActions - // - this.BtnCloseFindActions.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.BtnCloseFindActions.ForeColor = System.Drawing.Color.White; - this.BtnCloseFindActions.Image = global::DSPRE.Properties.Resources.Cross; - this.BtnCloseFindActions.Location = new System.Drawing.Point(261, 4); - this.BtnCloseFindActions.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.BtnCloseFindActions.Name = "BtnCloseFindActions"; - this.BtnCloseFindActions.Size = new System.Drawing.Size(25, 30); - this.BtnCloseFindActions.TabIndex = 41; - this.BtnCloseFindActions.Tag = "Close (Esc)"; - this.BtnCloseFindActions.UseVisualStyleBackColor = true; - this.BtnCloseFindActions.Click += new System.EventHandler(this.BtnCloseFindActions_Click); - // - // panelFindActionTextBox - // - this.panelFindActionTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.panelFindActionTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.panelFindActionTextBox.Location = new System.Drawing.Point(10, 6); - this.panelFindActionTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.panelFindActionTextBox.Name = "panelFindActionTextBox"; - this.panelFindActionTextBox.Size = new System.Drawing.Size(189, 25); - this.panelFindActionTextBox.TabIndex = 38; - this.panelFindActionTextBox.TextChanged += new System.EventHandler(this.panelFindActionTextBox_TextChanged); - this.panelFindActionTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.actionTxtFind_KeyDown); - // - // scintillaActionsPanel - // - this.scintillaActionsPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.scintillaActionsPanel.Location = new System.Drawing.Point(3, 3); - this.scintillaActionsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.scintillaActionsPanel.Name = "scintillaActionsPanel"; - this.scintillaActionsPanel.Size = new System.Drawing.Size(678, 559); - this.scintillaActionsPanel.TabIndex = 21; - // - // addScriptFileButton - // - this.addScriptFileButton.Image = global::DSPRE.Properties.Resources.addIcon; - this.addScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.addScriptFileButton.Location = new System.Drawing.Point(369, 667); - this.addScriptFileButton.Name = "addScriptFileButton"; - this.addScriptFileButton.Size = new System.Drawing.Size(106, 25); - this.addScriptFileButton.TabIndex = 4; - this.addScriptFileButton.Text = "Add Script File"; - this.addScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.addScriptFileButton.UseVisualStyleBackColor = true; - this.addScriptFileButton.Click += new System.EventHandler(this.addScriptFileButton_Click); - // - // removeScriptFileButton - // - this.removeScriptFileButton.Image = global::DSPRE.Properties.Resources.deleteIcon; - this.removeScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.removeScriptFileButton.Location = new System.Drawing.Point(369, 694); - this.removeScriptFileButton.Name = "removeScriptFileButton"; - this.removeScriptFileButton.Size = new System.Drawing.Size(106, 25); - this.removeScriptFileButton.TabIndex = 5; - this.removeScriptFileButton.Text = "Remove Last"; - this.removeScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.removeScriptFileButton.UseVisualStyleBackColor = true; - this.removeScriptFileButton.Click += new System.EventHandler(this.removeScriptFileButton_Click); - // - // saveScriptFileButton - // - this.saveScriptFileButton.Image = global::DSPRE.Properties.Resources.saveButton; - this.saveScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.saveScriptFileButton.Location = new System.Drawing.Point(6, 50); - this.saveScriptFileButton.Name = "saveScriptFileButton"; - this.saveScriptFileButton.Size = new System.Drawing.Size(154, 23); - this.saveScriptFileButton.TabIndex = 1; - this.saveScriptFileButton.Text = "&Save Current File"; - this.saveScriptFileButton.UseVisualStyleBackColor = true; - this.saveScriptFileButton.Click += new System.EventHandler(this.saveScriptFileButton_Click); - // - // exportScriptFileButton - // - this.exportScriptFileButton.Image = global::DSPRE.Properties.Resources.exportArrow; - this.exportScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.exportScriptFileButton.Location = new System.Drawing.Point(294, 667); - this.exportScriptFileButton.Name = "exportScriptFileButton"; - this.exportScriptFileButton.Size = new System.Drawing.Size(70, 52); - this.exportScriptFileButton.TabIndex = 3; - this.exportScriptFileButton.Text = "&Export \r\nFile"; - this.exportScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.exportScriptFileButton.UseVisualStyleBackColor = true; - this.exportScriptFileButton.Click += new System.EventHandler(this.exportScriptFileButton_Click); - // - // importScriptFileButton - // - this.importScriptFileButton.Image = global::DSPRE.Properties.Resources.importArrow; - this.importScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.importScriptFileButton.Location = new System.Drawing.Point(219, 667); - this.importScriptFileButton.Name = "importScriptFileButton"; - this.importScriptFileButton.Size = new System.Drawing.Size(70, 52); - this.importScriptFileButton.TabIndex = 2; - this.importScriptFileButton.Text = "&Import\r\nFile"; - this.importScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.importScriptFileButton.UseVisualStyleBackColor = true; - this.importScriptFileButton.Click += new System.EventHandler(this.importScriptFileButton_Click); - // - // groupBox8 - // - this.groupBox8.Controls.Add(this.searchInScriptsButton); - this.groupBox8.Controls.Add(this.searchOnlyCurrentScriptCheckBox); - this.groupBox8.Controls.Add(this.scrollToBlockStartcheckBox); - this.groupBox8.Controls.Add(this.scriptSearchCaseSensitiveCheckBox); - this.groupBox8.Controls.Add(this.searchInScriptsTextBox); - this.groupBox8.Controls.Add(this.label31); - this.groupBox8.Controls.Add(this.searchProgressBar); - this.groupBox8.Controls.Add(this.label30); - this.groupBox8.Controls.Add(this.label29); - this.groupBox8.Controls.Add(this.searchInScriptsResultListBox); - this.groupBox8.Location = new System.Drawing.Point(2, 315); - this.groupBox8.Name = "groupBox8"; - this.groupBox8.Size = new System.Drawing.Size(472, 298); - this.groupBox8.TabIndex = 18; - this.groupBox8.TabStop = false; - this.groupBox8.Text = "Search for commands:"; - // - // searchInScriptsButton - // - this.searchInScriptsButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon; - this.searchInScriptsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.searchInScriptsButton.Location = new System.Drawing.Point(272, 27); - this.searchInScriptsButton.Name = "searchInScriptsButton"; - this.searchInScriptsButton.Size = new System.Drawing.Size(69, 36); - this.searchInScriptsButton.TabIndex = 13; - this.searchInScriptsButton.Text = "Search"; - this.searchInScriptsButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.searchInScriptsButton.UseVisualStyleBackColor = true; - this.searchInScriptsButton.Click += new System.EventHandler(this.searchInScriptsButton_Click); - // - // searchOnlyCurrentScriptCheckBox - // - this.searchOnlyCurrentScriptCheckBox.AutoSize = true; - this.searchOnlyCurrentScriptCheckBox.Location = new System.Drawing.Point(347, 15); - this.searchOnlyCurrentScriptCheckBox.Name = "searchOnlyCurrentScriptCheckBox"; - this.searchOnlyCurrentScriptCheckBox.Size = new System.Drawing.Size(84, 17); - this.searchOnlyCurrentScriptCheckBox.TabIndex = 14; - this.searchOnlyCurrentScriptCheckBox.Text = "Only Current"; - this.searchOnlyCurrentScriptCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.searchOnlyCurrentScriptCheckBox.UseVisualStyleBackColor = true; - // - // scrollToBlockStartcheckBox - // - this.scrollToBlockStartcheckBox.AutoSize = true; - this.scrollToBlockStartcheckBox.Location = new System.Drawing.Point(347, 61); - this.scrollToBlockStartcheckBox.Name = "scrollToBlockStartcheckBox"; - this.scrollToBlockStartcheckBox.Size = new System.Drawing.Size(116, 17); - this.scrollToBlockStartcheckBox.TabIndex = 16; - this.scrollToBlockStartcheckBox.Text = "Scroll to block start"; - this.scrollToBlockStartcheckBox.UseVisualStyleBackColor = true; - // - // scriptSearchCaseSensitiveCheckBox - // - this.scriptSearchCaseSensitiveCheckBox.AutoSize = true; - this.scriptSearchCaseSensitiveCheckBox.Location = new System.Drawing.Point(347, 38); - this.scriptSearchCaseSensitiveCheckBox.Name = "scriptSearchCaseSensitiveCheckBox"; - this.scriptSearchCaseSensitiveCheckBox.Size = new System.Drawing.Size(83, 17); - this.scriptSearchCaseSensitiveCheckBox.TabIndex = 15; - this.scriptSearchCaseSensitiveCheckBox.Text = "Match Case"; - this.scriptSearchCaseSensitiveCheckBox.UseVisualStyleBackColor = true; - // - // searchInScriptsTextBox - // - this.searchInScriptsTextBox.Location = new System.Drawing.Point(11, 36); - this.searchInScriptsTextBox.Name = "searchInScriptsTextBox"; - this.searchInScriptsTextBox.Size = new System.Drawing.Size(255, 20); - this.searchInScriptsTextBox.TabIndex = 12; - this.searchInScriptsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsTextBox_KeyDown); - // - // label31 - // - this.label31.AutoSize = true; - this.label31.Location = new System.Drawing.Point(11, 261); - this.label31.Name = "label31"; - this.label31.Size = new System.Drawing.Size(48, 13); - this.label31.TabIndex = 37; - this.label31.Text = "Progress"; - // - // searchProgressBar - // - this.searchProgressBar.Location = new System.Drawing.Point(11, 277); - this.searchProgressBar.Name = "searchProgressBar"; - this.searchProgressBar.Size = new System.Drawing.Size(452, 14); - this.searchProgressBar.TabIndex = 36; - // - // label30 - // - this.label30.AutoSize = true; - this.label30.Location = new System.Drawing.Point(11, 68); - this.label30.Name = "label30"; - this.label30.Size = new System.Drawing.Size(42, 13); - this.label30.TabIndex = 35; - this.label30.Text = "Results"; - // - // label29 - // - this.label29.AutoSize = true; - this.label29.Location = new System.Drawing.Point(11, 20); - this.label29.Name = "label29"; - this.label29.Size = new System.Drawing.Size(77, 13); - this.label29.TabIndex = 33; - this.label29.Text = "Line to search:"; - // - // searchInScriptsResultListBox - // - this.searchInScriptsResultListBox.Location = new System.Drawing.Point(11, 84); - this.searchInScriptsResultListBox.Name = "searchInScriptsResultListBox"; - this.searchInScriptsResultListBox.Size = new System.Drawing.Size(452, 173); - this.searchInScriptsResultListBox.TabIndex = 17; - this.searchInScriptsResultListBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsResultListBox_KeyDown); - this.searchInScriptsResultListBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.searchInScripts_GoToEntryResult); - // - // groupBox24 - // - this.groupBox24.Controls.Add(this.ScriptNavigatorTabControl); - this.groupBox24.Location = new System.Drawing.Point(3, 75); - this.groupBox24.Name = "groupBox24"; - this.groupBox24.Size = new System.Drawing.Size(472, 234); - this.groupBox24.TabIndex = 42; - this.groupBox24.TabStop = false; - this.groupBox24.Text = "Navigator"; - // - // ScriptNavigatorTabControl - // - this.ScriptNavigatorTabControl.Controls.Add(this.ScriptsNavTab); - this.ScriptNavigatorTabControl.Controls.Add(this.FunctionsNavTab); - this.ScriptNavigatorTabControl.Controls.Add(this.ActionsNavTab); - this.ScriptNavigatorTabControl.Location = new System.Drawing.Point(6, 16); - this.ScriptNavigatorTabControl.Name = "ScriptNavigatorTabControl"; - this.ScriptNavigatorTabControl.SelectedIndex = 0; - this.ScriptNavigatorTabControl.Size = new System.Drawing.Size(456, 209); - this.ScriptNavigatorTabControl.TabIndex = 8; - // - // ScriptsNavTab - // - this.ScriptsNavTab.Controls.Add(this.scriptsNavListbox); - this.ScriptsNavTab.Location = new System.Drawing.Point(4, 22); - this.ScriptsNavTab.Name = "ScriptsNavTab"; - this.ScriptsNavTab.Padding = new System.Windows.Forms.Padding(3); - this.ScriptsNavTab.Size = new System.Drawing.Size(448, 183); - this.ScriptsNavTab.TabIndex = 0; - this.ScriptsNavTab.Text = "Scripts"; - this.ScriptsNavTab.UseVisualStyleBackColor = true; - // - // scriptsNavListbox - // - this.scriptsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.scriptsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.scriptsNavListbox.ItemHeight = 15; - this.scriptsNavListbox.Location = new System.Drawing.Point(3, 3); - this.scriptsNavListbox.Name = "scriptsNavListbox"; - this.scriptsNavListbox.Size = new System.Drawing.Size(442, 177); - this.scriptsNavListbox.TabIndex = 9; - this.scriptsNavListbox.SelectedIndexChanged += new System.EventHandler(this.scriptsNavListbox_SelectedIndexChanged); - // - // FunctionsNavTab - // - this.FunctionsNavTab.Controls.Add(this.functionsNavListbox); - this.FunctionsNavTab.Location = new System.Drawing.Point(4, 22); - this.FunctionsNavTab.Name = "FunctionsNavTab"; - this.FunctionsNavTab.Padding = new System.Windows.Forms.Padding(3); - this.FunctionsNavTab.Size = new System.Drawing.Size(448, 183); - this.FunctionsNavTab.TabIndex = 1; - this.FunctionsNavTab.Text = "Functions"; - this.FunctionsNavTab.UseVisualStyleBackColor = true; - // - // functionsNavListbox - // - this.functionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.functionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.functionsNavListbox.ItemHeight = 15; - this.functionsNavListbox.Location = new System.Drawing.Point(3, 3); - this.functionsNavListbox.Name = "functionsNavListbox"; - this.functionsNavListbox.Size = new System.Drawing.Size(442, 177); - this.functionsNavListbox.TabIndex = 10; - this.functionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.functionsNavListbox_SelectedIndexChanged); - // - // ActionsNavTab - // - this.ActionsNavTab.Controls.Add(this.actionsNavListbox); - this.ActionsNavTab.Location = new System.Drawing.Point(4, 22); - this.ActionsNavTab.Name = "ActionsNavTab"; - this.ActionsNavTab.Padding = new System.Windows.Forms.Padding(3); - this.ActionsNavTab.Size = new System.Drawing.Size(448, 183); - this.ActionsNavTab.TabIndex = 2; - this.ActionsNavTab.Text = "Actions"; - this.ActionsNavTab.UseVisualStyleBackColor = true; - // - // actionsNavListbox - // - this.actionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.actionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.actionsNavListbox.ItemHeight = 15; - this.actionsNavListbox.Location = new System.Drawing.Point(3, 3); - this.actionsNavListbox.Name = "actionsNavListbox"; - this.actionsNavListbox.Size = new System.Drawing.Size(442, 177); - this.actionsNavListbox.TabIndex = 11; - this.actionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.actionsNavListbox_SelectedIndexChanged); - // - // openFindScriptEditorButton - // - this.openFindScriptEditorButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon; - this.openFindScriptEditorButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.openFindScriptEditorButton.Location = new System.Drawing.Point(1079, 11); - this.openFindScriptEditorButton.Name = "openFindScriptEditorButton"; - this.openFindScriptEditorButton.Size = new System.Drawing.Size(24, 24); - this.openFindScriptEditorButton.TabIndex = 27; - this.openFindScriptEditorButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.openFindScriptEditorButton.UseVisualStyleBackColor = true; - this.openFindScriptEditorButton.Click += new System.EventHandler(this.openFindScriptEditorButton_Click); - // - // expandScriptTextButton - // - this.expandScriptTextButton.Image = global::DSPRE.Properties.Resources.expandArrow; - this.expandScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.expandScriptTextButton.Location = new System.Drawing.Point(1107, 11); - this.expandScriptTextButton.Name = "expandScriptTextButton"; - this.expandScriptTextButton.Size = new System.Drawing.Size(24, 24); - this.expandScriptTextButton.TabIndex = 28; - this.expandScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.expandScriptTextButton.UseVisualStyleBackColor = true; - this.expandScriptTextButton.Click += new System.EventHandler(this.ScriptEditorExpandButton_Click); - // - // compressScriptTextButton - // - this.compressScriptTextButton.Image = global::DSPRE.Properties.Resources.compressArrow; - this.compressScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.compressScriptTextButton.Location = new System.Drawing.Point(1135, 11); - this.compressScriptTextButton.Name = "compressScriptTextButton"; - this.compressScriptTextButton.Size = new System.Drawing.Size(24, 24); - this.compressScriptTextButton.TabIndex = 29; - this.compressScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.compressScriptTextButton.UseVisualStyleBackColor = true; - this.compressScriptTextButton.Click += new System.EventHandler(this.ScriptEditorCollapseButton_Click); - // - // scriptEditorWordWrapCheckbox - // - this.scriptEditorWordWrapCheckbox.Appearance = System.Windows.Forms.Appearance.Button; - this.scriptEditorWordWrapCheckbox.AutoSize = true; - this.scriptEditorWordWrapCheckbox.Checked = true; - this.scriptEditorWordWrapCheckbox.CheckState = System.Windows.Forms.CheckState.Checked; - this.scriptEditorWordWrapCheckbox.Location = new System.Drawing.Point(907, 12); - this.scriptEditorWordWrapCheckbox.Name = "scriptEditorWordWrapCheckbox"; - this.scriptEditorWordWrapCheckbox.Size = new System.Drawing.Size(72, 23); - this.scriptEditorWordWrapCheckbox.TabIndex = 25; - this.scriptEditorWordWrapCheckbox.Text = "Word Wrap"; - this.scriptEditorWordWrapCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.scriptEditorWordWrapCheckbox.UseVisualStyleBackColor = true; - this.scriptEditorWordWrapCheckbox.CheckedChanged += new System.EventHandler(this.scriptEditorWordWrapCheckbox_CheckedChanged); - // - // scriptEditorWhitespacesCheckbox - // - this.scriptEditorWhitespacesCheckbox.Appearance = System.Windows.Forms.Appearance.Button; - this.scriptEditorWhitespacesCheckbox.AutoSize = true; - this.scriptEditorWhitespacesCheckbox.Location = new System.Drawing.Point(981, 12); - this.scriptEditorWhitespacesCheckbox.Name = "scriptEditorWhitespacesCheckbox"; - this.scriptEditorWhitespacesCheckbox.Size = new System.Drawing.Size(79, 23); - this.scriptEditorWhitespacesCheckbox.TabIndex = 26; - this.scriptEditorWhitespacesCheckbox.Text = "Whitespaces"; - this.scriptEditorWhitespacesCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.scriptEditorWhitespacesCheckbox.UseVisualStyleBackColor = true; - this.scriptEditorWhitespacesCheckbox.CheckedChanged += new System.EventHandler(this.viewWhiteSpacesButton_Click); - // - // groupBox26 - // - this.groupBox26.Controls.Add(this.scriptEditorNumberFormatNoPreference); - this.groupBox26.Controls.Add(this.scriptEditorNumberFormatDecimal); - this.groupBox26.Controls.Add(this.scriptEditorNumberFormatHex); - this.groupBox26.Location = new System.Drawing.Point(700, 4); - this.groupBox26.Name = "groupBox26"; - this.groupBox26.Size = new System.Drawing.Size(190, 36); - this.groupBox26.TabIndex = 50; - this.groupBox26.TabStop = false; - this.groupBox26.Text = "Number Format Preference"; - // - // scriptEditorNumberFormatNoPreference - // - this.scriptEditorNumberFormatNoPreference.AutoSize = true; - this.scriptEditorNumberFormatNoPreference.Checked = true; - this.scriptEditorNumberFormatNoPreference.Location = new System.Drawing.Point(11, 14); - this.scriptEditorNumberFormatNoPreference.Name = "scriptEditorNumberFormatNoPreference"; - this.scriptEditorNumberFormatNoPreference.Size = new System.Drawing.Size(47, 17); - this.scriptEditorNumberFormatNoPreference.TabIndex = 22; - this.scriptEditorNumberFormatNoPreference.TabStop = true; - this.scriptEditorNumberFormatNoPreference.Text = "Auto"; - this.scriptEditorNumberFormatNoPreference.UseVisualStyleBackColor = true; - this.scriptEditorNumberFormatNoPreference.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatNoPref); - // - // scriptEditorNumberFormatDecimal - // - this.scriptEditorNumberFormatDecimal.AutoSize = true; - this.scriptEditorNumberFormatDecimal.Location = new System.Drawing.Point(121, 14); - this.scriptEditorNumberFormatDecimal.Name = "scriptEditorNumberFormatDecimal"; - this.scriptEditorNumberFormatDecimal.Size = new System.Drawing.Size(63, 17); - this.scriptEditorNumberFormatDecimal.TabIndex = 24; - this.scriptEditorNumberFormatDecimal.Text = "Decimal"; - this.scriptEditorNumberFormatDecimal.UseVisualStyleBackColor = true; - this.scriptEditorNumberFormatDecimal.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatDec); - // - // scriptEditorNumberFormatHex - // - this.scriptEditorNumberFormatHex.AutoSize = true; - this.scriptEditorNumberFormatHex.Location = new System.Drawing.Point(68, 14); - this.scriptEditorNumberFormatHex.Name = "scriptEditorNumberFormatHex"; - this.scriptEditorNumberFormatHex.Size = new System.Drawing.Size(44, 17); - this.scriptEditorNumberFormatHex.TabIndex = 23; - this.scriptEditorNumberFormatHex.Text = "Hex"; - this.scriptEditorNumberFormatHex.UseVisualStyleBackColor = true; - this.scriptEditorNumberFormatHex.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatHex); - // - // viewLevelScriptButton - // - this.viewLevelScriptButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.viewLevelScriptButton.Location = new System.Drawing.Point(481, 681); - this.viewLevelScriptButton.Name = "viewLevelScriptButton"; - this.viewLevelScriptButton.Size = new System.Drawing.Size(91, 25); - this.viewLevelScriptButton.TabIndex = 6; - this.viewLevelScriptButton.Text = "View level script"; - this.viewLevelScriptButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.viewLevelScriptButton.UseVisualStyleBackColor = true; - this.viewLevelScriptButton.Click += new System.EventHandler(this.viewLevelScriptButton_Click); - // - // locateCurrentScriptFile - // - this.locateCurrentScriptFile.Image = global::DSPRE.Properties.Resources.open_file; - this.locateCurrentScriptFile.Location = new System.Drawing.Point(423, 29); - this.locateCurrentScriptFile.Name = "locateCurrentScriptFile"; - this.locateCurrentScriptFile.Size = new System.Drawing.Size(42, 40); - this.locateCurrentScriptFile.TabIndex = 7; - this.locateCurrentScriptFile.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.locateCurrentScriptFile.UseVisualStyleBackColor = true; - this.locateCurrentScriptFile.Click += new System.EventHandler(this.locateCurrentScriptFile_Click); - // - // ScriptEditor - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.locateCurrentScriptFile); - this.Controls.Add(this.groupBox24); - this.Controls.Add(this.viewLevelScriptButton); - this.Controls.Add(this.selectScriptFileComboBox); - this.Controls.Add(this.groupBox26); - this.Controls.Add(this.label5); - this.Controls.Add(this.scriptEditorWhitespacesCheckbox); - this.Controls.Add(this.scriptEditorWordWrapCheckbox); - this.Controls.Add(this.addScriptFileButton); - this.Controls.Add(this.compressScriptTextButton); - this.Controls.Add(this.removeScriptFileButton); - this.Controls.Add(this.expandScriptTextButton); - this.Controls.Add(this.saveScriptFileButton); - this.Controls.Add(this.openFindScriptEditorButton); - this.Controls.Add(this.exportScriptFileButton); - this.Controls.Add(this.importScriptFileButton); - this.Controls.Add(this.groupBox8); - this.Controls.Add(this.scriptEditorTabControl); - this.Name = "ScriptEditor"; - this.Size = new System.Drawing.Size(1177, 735); - this.scriptEditorTabControl.ResumeLayout(false); - this.scriptsTabPage.ResumeLayout(false); - this.PanelSearchScripts.ResumeLayout(false); - this.PanelSearchScripts.PerformLayout(); - this.functionsTabPage.ResumeLayout(false); - this.PanelSearchFunctions.ResumeLayout(false); - this.PanelSearchFunctions.PerformLayout(); - this.actionsTabPage.ResumeLayout(false); - this.PanelSearchActions.ResumeLayout(false); - this.PanelSearchActions.PerformLayout(); - this.groupBox8.ResumeLayout(false); - this.groupBox8.PerformLayout(); - this.groupBox24.ResumeLayout(false); - this.ScriptNavigatorTabControl.ResumeLayout(false); - this.ScriptsNavTab.ResumeLayout(false); - this.FunctionsNavTab.ResumeLayout(false); - this.ActionsNavTab.ResumeLayout(false); - this.groupBox26.ResumeLayout(false); - this.groupBox26.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); + this.selectScriptFileComboBox = new System.Windows.Forms.ComboBox(); + this.label5 = new System.Windows.Forms.Label(); + this.PanelSearchScripts = new System.Windows.Forms.Panel(); + this.BtnNextFindScript = new System.Windows.Forms.Button(); + this.BtnPrevFindScript = new System.Windows.Forms.Button(); + this.BtnCloseFindScript = new System.Windows.Forms.Button(); + this.panelFindScriptTextBox = new System.Windows.Forms.TextBox(); + this.scintillaScriptsPanel = new System.Windows.Forms.Panel(); + this.addScriptFileButton = new System.Windows.Forms.Button(); + this.removeScriptFileButton = new System.Windows.Forms.Button(); + this.saveScriptFileButton = new System.Windows.Forms.Button(); + this.exportScriptFileButton = new System.Windows.Forms.Button(); + this.importScriptFileButton = new System.Windows.Forms.Button(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.searchInScriptsButton = new System.Windows.Forms.Button(); + this.searchOnlyCurrentScriptCheckBox = new System.Windows.Forms.CheckBox(); + this.scrollToBlockStartcheckBox = new System.Windows.Forms.CheckBox(); + this.scriptSearchCaseSensitiveCheckBox = new System.Windows.Forms.CheckBox(); + this.searchInScriptsTextBox = new System.Windows.Forms.TextBox(); + this.label31 = new System.Windows.Forms.Label(); + this.searchProgressBar = new System.Windows.Forms.ProgressBar(); + this.label30 = new System.Windows.Forms.Label(); + this.label29 = new System.Windows.Forms.Label(); + this.searchInScriptsResultListBox = new System.Windows.Forms.ListBox(); + this.groupBox24 = new System.Windows.Forms.GroupBox(); + this.ScriptNavigatorTabControl = new System.Windows.Forms.TabControl(); + this.ScriptsNavTab = new System.Windows.Forms.TabPage(); + this.scriptsNavListbox = new System.Windows.Forms.ListBox(); + this.FunctionsNavTab = new System.Windows.Forms.TabPage(); + this.functionsNavListbox = new System.Windows.Forms.ListBox(); + this.ActionsNavTab = new System.Windows.Forms.TabPage(); + this.actionsNavListbox = new System.Windows.Forms.ListBox(); + this.openFindScriptEditorButton = new System.Windows.Forms.Button(); + this.expandScriptTextButton = new System.Windows.Forms.Button(); + this.compressScriptTextButton = new System.Windows.Forms.Button(); + this.scriptEditorWordWrapCheckbox = new System.Windows.Forms.CheckBox(); + this.scriptEditorWhitespacesCheckbox = new System.Windows.Forms.CheckBox(); + this.groupBox26 = new System.Windows.Forms.GroupBox(); + this.scriptEditorNumberFormatNoPreference = new System.Windows.Forms.RadioButton(); + this.scriptEditorNumberFormatDecimal = new System.Windows.Forms.RadioButton(); + this.scriptEditorNumberFormatHex = new System.Windows.Forms.RadioButton(); + this.viewLevelScriptButton = new System.Windows.Forms.Button(); + this.locateCurrentScriptFile = new System.Windows.Forms.Button(); + this.PanelSearchScripts.SuspendLayout(); + this.scintillaScriptsPanel.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.groupBox24.SuspendLayout(); + this.ScriptNavigatorTabControl.SuspendLayout(); + this.ScriptsNavTab.SuspendLayout(); + this.FunctionsNavTab.SuspendLayout(); + this.ActionsNavTab.SuspendLayout(); + this.groupBox26.SuspendLayout(); + this.SuspendLayout(); + // + // selectScriptFileComboBox + // + this.selectScriptFileComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.selectScriptFileComboBox.FormattingEnabled = true; + this.selectScriptFileComboBox.Location = new System.Drawing.Point(7, 24); + this.selectScriptFileComboBox.Name = "selectScriptFileComboBox"; + this.selectScriptFileComboBox.Size = new System.Drawing.Size(152, 21); + this.selectScriptFileComboBox.TabIndex = 0; + this.selectScriptFileComboBox.SelectedIndexChanged += new System.EventHandler(this.selectScriptFileComboBox_SelectedIndexChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 8); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(53, 13); + this.label5.TabIndex = 1; + this.label5.Text = "Script File"; + // + // PanelSearchScripts + // + this.PanelSearchScripts.BackColor = System.Drawing.Color.White; + this.PanelSearchScripts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.PanelSearchScripts.Controls.Add(this.BtnNextFindScript); + this.PanelSearchScripts.Controls.Add(this.BtnPrevFindScript); + this.PanelSearchScripts.Controls.Add(this.BtnCloseFindScript); + this.PanelSearchScripts.Controls.Add(this.panelFindScriptTextBox); + this.PanelSearchScripts.Location = new System.Drawing.Point(383, 3); + this.PanelSearchScripts.Name = "PanelSearchScripts"; + this.PanelSearchScripts.Size = new System.Drawing.Size(292, 40); + this.PanelSearchScripts.TabIndex = 14; + this.PanelSearchScripts.Visible = false; + // + // BtnNextFindScript + // + this.BtnNextFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnNextFindScript.ForeColor = System.Drawing.Color.White; + this.BtnNextFindScript.Image = global::DSPRE.Properties.Resources.arrowdown; + this.BtnNextFindScript.Location = new System.Drawing.Point(233, 4); + this.BtnNextFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.BtnNextFindScript.Name = "BtnNextFindScript"; + this.BtnNextFindScript.Size = new System.Drawing.Size(25, 30); + this.BtnNextFindScript.TabIndex = 32; + this.BtnNextFindScript.Tag = "Find next (Enter)"; + this.BtnNextFindScript.UseVisualStyleBackColor = true; + this.BtnNextFindScript.Click += new System.EventHandler(this.BtnNextFindScript_Click); + // + // BtnPrevFindScript + // + this.BtnPrevFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnPrevFindScript.ForeColor = System.Drawing.Color.White; + this.BtnPrevFindScript.Image = global::DSPRE.Properties.Resources.arrowup; + this.BtnPrevFindScript.Location = new System.Drawing.Point(205, 4); + this.BtnPrevFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.BtnPrevFindScript.Name = "BtnPrevFindScript"; + this.BtnPrevFindScript.Size = new System.Drawing.Size(25, 30); + this.BtnPrevFindScript.TabIndex = 31; + this.BtnPrevFindScript.Tag = "Find previous (Shift+Enter)"; + this.BtnPrevFindScript.UseVisualStyleBackColor = true; + this.BtnPrevFindScript.Click += new System.EventHandler(this.BtnPrevFindScript_Click); + // + // BtnCloseFindScript + // + this.BtnCloseFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnCloseFindScript.ForeColor = System.Drawing.Color.White; + this.BtnCloseFindScript.Image = global::DSPRE.Properties.Resources.Cross; + this.BtnCloseFindScript.Location = new System.Drawing.Point(261, 4); + this.BtnCloseFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.BtnCloseFindScript.Name = "BtnCloseFindScript"; + this.BtnCloseFindScript.Size = new System.Drawing.Size(25, 30); + this.BtnCloseFindScript.TabIndex = 33; + this.BtnCloseFindScript.Tag = "Close (Esc)"; + this.BtnCloseFindScript.UseVisualStyleBackColor = true; + this.BtnCloseFindScript.Click += new System.EventHandler(this.BtnCloseFindScript_Click); + // + // panelFindScriptTextBox + // + this.panelFindScriptTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.panelFindScriptTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.panelFindScriptTextBox.Location = new System.Drawing.Point(10, 6); + this.panelFindScriptTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.panelFindScriptTextBox.Name = "panelFindScriptTextBox"; + this.panelFindScriptTextBox.Size = new System.Drawing.Size(189, 25); + this.panelFindScriptTextBox.TabIndex = 30; + this.panelFindScriptTextBox.TextChanged += new System.EventHandler(this.panelFindScriptTextBox_TextChanged); + this.panelFindScriptTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.scriptTxtFind_KeyDown); + // + // scintillaScriptsPanel + // + this.scintillaScriptsPanel.Controls.Add(this.PanelSearchScripts); + this.scintillaScriptsPanel.Location = new System.Drawing.Point(483, 50); + this.scintillaScriptsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.scintillaScriptsPanel.Name = "scintillaScriptsPanel"; + this.scintillaScriptsPanel.Size = new System.Drawing.Size(678, 559); + this.scintillaScriptsPanel.TabIndex = 19; + // + // addScriptFileButton + // + this.addScriptFileButton.Image = global::DSPRE.Properties.Resources.addIcon; + this.addScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.addScriptFileButton.Location = new System.Drawing.Point(369, 667); + this.addScriptFileButton.Name = "addScriptFileButton"; + this.addScriptFileButton.Size = new System.Drawing.Size(106, 25); + this.addScriptFileButton.TabIndex = 4; + this.addScriptFileButton.Text = "Add Script File"; + this.addScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.addScriptFileButton.UseVisualStyleBackColor = true; + this.addScriptFileButton.Click += new System.EventHandler(this.addScriptFileButton_Click); + // + // removeScriptFileButton + // + this.removeScriptFileButton.Image = global::DSPRE.Properties.Resources.deleteIcon; + this.removeScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.removeScriptFileButton.Location = new System.Drawing.Point(369, 694); + this.removeScriptFileButton.Name = "removeScriptFileButton"; + this.removeScriptFileButton.Size = new System.Drawing.Size(106, 25); + this.removeScriptFileButton.TabIndex = 5; + this.removeScriptFileButton.Text = "Remove Last"; + this.removeScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.removeScriptFileButton.UseVisualStyleBackColor = true; + this.removeScriptFileButton.Click += new System.EventHandler(this.removeScriptFileButton_Click); + // + // saveScriptFileButton + // + this.saveScriptFileButton.Image = global::DSPRE.Properties.Resources.saveButton; + this.saveScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.saveScriptFileButton.Location = new System.Drawing.Point(6, 50); + this.saveScriptFileButton.Name = "saveScriptFileButton"; + this.saveScriptFileButton.Size = new System.Drawing.Size(154, 23); + this.saveScriptFileButton.TabIndex = 1; + this.saveScriptFileButton.Text = "&Save Current File"; + this.saveScriptFileButton.UseVisualStyleBackColor = true; + this.saveScriptFileButton.Click += new System.EventHandler(this.saveScriptFileButton_Click); + // + // exportScriptFileButton + // + this.exportScriptFileButton.Image = global::DSPRE.Properties.Resources.exportArrow; + this.exportScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.exportScriptFileButton.Location = new System.Drawing.Point(294, 667); + this.exportScriptFileButton.Name = "exportScriptFileButton"; + this.exportScriptFileButton.Size = new System.Drawing.Size(70, 52); + this.exportScriptFileButton.TabIndex = 3; + this.exportScriptFileButton.Text = "&Export \r\nFile"; + this.exportScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.exportScriptFileButton.UseVisualStyleBackColor = true; + this.exportScriptFileButton.Click += new System.EventHandler(this.exportScriptFileButton_Click); + // + // importScriptFileButton + // + this.importScriptFileButton.Image = global::DSPRE.Properties.Resources.importArrow; + this.importScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.importScriptFileButton.Location = new System.Drawing.Point(219, 667); + this.importScriptFileButton.Name = "importScriptFileButton"; + this.importScriptFileButton.Size = new System.Drawing.Size(70, 52); + this.importScriptFileButton.TabIndex = 2; + this.importScriptFileButton.Text = "&Import\r\nFile"; + this.importScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.importScriptFileButton.UseVisualStyleBackColor = true; + this.importScriptFileButton.Click += new System.EventHandler(this.importScriptFileButton_Click); + // + // groupBox8 + // + this.groupBox8.Controls.Add(this.searchInScriptsButton); + this.groupBox8.Controls.Add(this.searchOnlyCurrentScriptCheckBox); + this.groupBox8.Controls.Add(this.scrollToBlockStartcheckBox); + this.groupBox8.Controls.Add(this.scriptSearchCaseSensitiveCheckBox); + this.groupBox8.Controls.Add(this.searchInScriptsTextBox); + this.groupBox8.Controls.Add(this.label31); + this.groupBox8.Controls.Add(this.searchProgressBar); + this.groupBox8.Controls.Add(this.label30); + this.groupBox8.Controls.Add(this.label29); + this.groupBox8.Controls.Add(this.searchInScriptsResultListBox); + this.groupBox8.Location = new System.Drawing.Point(2, 315); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(472, 298); + this.groupBox8.TabIndex = 18; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "Search for commands:"; + // + // searchInScriptsButton + // + this.searchInScriptsButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon; + this.searchInScriptsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.searchInScriptsButton.Location = new System.Drawing.Point(272, 27); + this.searchInScriptsButton.Name = "searchInScriptsButton"; + this.searchInScriptsButton.Size = new System.Drawing.Size(69, 36); + this.searchInScriptsButton.TabIndex = 13; + this.searchInScriptsButton.Text = "Search"; + this.searchInScriptsButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.searchInScriptsButton.UseVisualStyleBackColor = true; + this.searchInScriptsButton.Click += new System.EventHandler(this.searchInScriptsButton_Click); + // + // searchOnlyCurrentScriptCheckBox + // + this.searchOnlyCurrentScriptCheckBox.AutoSize = true; + this.searchOnlyCurrentScriptCheckBox.Location = new System.Drawing.Point(347, 15); + this.searchOnlyCurrentScriptCheckBox.Name = "searchOnlyCurrentScriptCheckBox"; + this.searchOnlyCurrentScriptCheckBox.Size = new System.Drawing.Size(84, 17); + this.searchOnlyCurrentScriptCheckBox.TabIndex = 14; + this.searchOnlyCurrentScriptCheckBox.Text = "Only Current"; + this.searchOnlyCurrentScriptCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.searchOnlyCurrentScriptCheckBox.UseVisualStyleBackColor = true; + // + // scrollToBlockStartcheckBox + // + this.scrollToBlockStartcheckBox.AutoSize = true; + this.scrollToBlockStartcheckBox.Location = new System.Drawing.Point(347, 61); + this.scrollToBlockStartcheckBox.Name = "scrollToBlockStartcheckBox"; + this.scrollToBlockStartcheckBox.Size = new System.Drawing.Size(116, 17); + this.scrollToBlockStartcheckBox.TabIndex = 16; + this.scrollToBlockStartcheckBox.Text = "Scroll to block start"; + this.scrollToBlockStartcheckBox.UseVisualStyleBackColor = true; + // + // scriptSearchCaseSensitiveCheckBox + // + this.scriptSearchCaseSensitiveCheckBox.AutoSize = true; + this.scriptSearchCaseSensitiveCheckBox.Location = new System.Drawing.Point(347, 38); + this.scriptSearchCaseSensitiveCheckBox.Name = "scriptSearchCaseSensitiveCheckBox"; + this.scriptSearchCaseSensitiveCheckBox.Size = new System.Drawing.Size(83, 17); + this.scriptSearchCaseSensitiveCheckBox.TabIndex = 15; + this.scriptSearchCaseSensitiveCheckBox.Text = "Match Case"; + this.scriptSearchCaseSensitiveCheckBox.UseVisualStyleBackColor = true; + // + // searchInScriptsTextBox + // + this.searchInScriptsTextBox.Location = new System.Drawing.Point(11, 36); + this.searchInScriptsTextBox.Name = "searchInScriptsTextBox"; + this.searchInScriptsTextBox.Size = new System.Drawing.Size(255, 20); + this.searchInScriptsTextBox.TabIndex = 12; + this.searchInScriptsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsTextBox_KeyDown); + // + // label31 + // + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(11, 261); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(48, 13); + this.label31.TabIndex = 37; + this.label31.Text = "Progress"; + // + // searchProgressBar + // + this.searchProgressBar.Location = new System.Drawing.Point(11, 277); + this.searchProgressBar.Name = "searchProgressBar"; + this.searchProgressBar.Size = new System.Drawing.Size(452, 14); + this.searchProgressBar.TabIndex = 36; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.Location = new System.Drawing.Point(11, 68); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(42, 13); + this.label30.TabIndex = 35; + this.label30.Text = "Results"; + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Location = new System.Drawing.Point(11, 20); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(77, 13); + this.label29.TabIndex = 33; + this.label29.Text = "Line to search:"; + // + // searchInScriptsResultListBox + // + this.searchInScriptsResultListBox.Location = new System.Drawing.Point(11, 84); + this.searchInScriptsResultListBox.Name = "searchInScriptsResultListBox"; + this.searchInScriptsResultListBox.Size = new System.Drawing.Size(452, 173); + this.searchInScriptsResultListBox.TabIndex = 17; + this.searchInScriptsResultListBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsResultListBox_KeyDown); + this.searchInScriptsResultListBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.searchInScripts_GoToEntryResult); + // + // groupBox24 + // + this.groupBox24.Controls.Add(this.ScriptNavigatorTabControl); + this.groupBox24.Location = new System.Drawing.Point(3, 75); + this.groupBox24.Name = "groupBox24"; + this.groupBox24.Size = new System.Drawing.Size(472, 234); + this.groupBox24.TabIndex = 42; + this.groupBox24.TabStop = false; + this.groupBox24.Text = "Navigator"; + // + // ScriptNavigatorTabControl + // + this.ScriptNavigatorTabControl.Controls.Add(this.ScriptsNavTab); + this.ScriptNavigatorTabControl.Controls.Add(this.FunctionsNavTab); + this.ScriptNavigatorTabControl.Controls.Add(this.ActionsNavTab); + this.ScriptNavigatorTabControl.Location = new System.Drawing.Point(6, 16); + this.ScriptNavigatorTabControl.Name = "ScriptNavigatorTabControl"; + this.ScriptNavigatorTabControl.SelectedIndex = 0; + this.ScriptNavigatorTabControl.Size = new System.Drawing.Size(456, 209); + this.ScriptNavigatorTabControl.TabIndex = 8; + // + // ScriptsNavTab + // + this.ScriptsNavTab.Controls.Add(this.scriptsNavListbox); + this.ScriptsNavTab.Location = new System.Drawing.Point(4, 22); + this.ScriptsNavTab.Name = "ScriptsNavTab"; + this.ScriptsNavTab.Padding = new System.Windows.Forms.Padding(3); + this.ScriptsNavTab.Size = new System.Drawing.Size(448, 183); + this.ScriptsNavTab.TabIndex = 0; + this.ScriptsNavTab.Text = "Scripts"; + this.ScriptsNavTab.UseVisualStyleBackColor = true; + // + // scriptsNavListbox + // + this.scriptsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.scriptsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.scriptsNavListbox.ItemHeight = 15; + this.scriptsNavListbox.Location = new System.Drawing.Point(3, 3); + this.scriptsNavListbox.Name = "scriptsNavListbox"; + this.scriptsNavListbox.Size = new System.Drawing.Size(442, 177); + this.scriptsNavListbox.TabIndex = 9; + this.scriptsNavListbox.SelectedIndexChanged += new System.EventHandler(this.scriptsNavListbox_SelectedIndexChanged); + // + // FunctionsNavTab + // + this.FunctionsNavTab.Controls.Add(this.functionsNavListbox); + this.FunctionsNavTab.Location = new System.Drawing.Point(4, 22); + this.FunctionsNavTab.Name = "FunctionsNavTab"; + this.FunctionsNavTab.Padding = new System.Windows.Forms.Padding(3); + this.FunctionsNavTab.Size = new System.Drawing.Size(448, 183); + this.FunctionsNavTab.TabIndex = 1; + this.FunctionsNavTab.Text = "Functions"; + this.FunctionsNavTab.UseVisualStyleBackColor = true; + // + // functionsNavListbox + // + this.functionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.functionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.functionsNavListbox.ItemHeight = 15; + this.functionsNavListbox.Location = new System.Drawing.Point(3, 3); + this.functionsNavListbox.Name = "functionsNavListbox"; + this.functionsNavListbox.Size = new System.Drawing.Size(442, 177); + this.functionsNavListbox.TabIndex = 10; + this.functionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.functionsNavListbox_SelectedIndexChanged); + // + // ActionsNavTab + // + this.ActionsNavTab.Controls.Add(this.actionsNavListbox); + this.ActionsNavTab.Location = new System.Drawing.Point(4, 22); + this.ActionsNavTab.Name = "ActionsNavTab"; + this.ActionsNavTab.Padding = new System.Windows.Forms.Padding(3); + this.ActionsNavTab.Size = new System.Drawing.Size(448, 183); + this.ActionsNavTab.TabIndex = 2; + this.ActionsNavTab.Text = "Actions"; + this.ActionsNavTab.UseVisualStyleBackColor = true; + // + // actionsNavListbox + // + this.actionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.actionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.actionsNavListbox.ItemHeight = 15; + this.actionsNavListbox.Location = new System.Drawing.Point(3, 3); + this.actionsNavListbox.Name = "actionsNavListbox"; + this.actionsNavListbox.Size = new System.Drawing.Size(442, 177); + this.actionsNavListbox.TabIndex = 11; + this.actionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.actionsNavListbox_SelectedIndexChanged); + // + // openFindScriptEditorButton + // + this.openFindScriptEditorButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon; + this.openFindScriptEditorButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.openFindScriptEditorButton.Location = new System.Drawing.Point(1079, 11); + this.openFindScriptEditorButton.Name = "openFindScriptEditorButton"; + this.openFindScriptEditorButton.Size = new System.Drawing.Size(24, 24); + this.openFindScriptEditorButton.TabIndex = 27; + this.openFindScriptEditorButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.openFindScriptEditorButton.UseVisualStyleBackColor = true; + this.openFindScriptEditorButton.Click += new System.EventHandler(this.openFindScriptEditorButton_Click); + // + // expandScriptTextButton + // + this.expandScriptTextButton.Image = global::DSPRE.Properties.Resources.expandArrow; + this.expandScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.expandScriptTextButton.Location = new System.Drawing.Point(1107, 11); + this.expandScriptTextButton.Name = "expandScriptTextButton"; + this.expandScriptTextButton.Size = new System.Drawing.Size(24, 24); + this.expandScriptTextButton.TabIndex = 28; + this.expandScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.expandScriptTextButton.UseVisualStyleBackColor = true; + this.expandScriptTextButton.Click += new System.EventHandler(this.ScriptEditorExpandButton_Click); + // + // compressScriptTextButton + // + this.compressScriptTextButton.Image = global::DSPRE.Properties.Resources.compressArrow; + this.compressScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.compressScriptTextButton.Location = new System.Drawing.Point(1135, 11); + this.compressScriptTextButton.Name = "compressScriptTextButton"; + this.compressScriptTextButton.Size = new System.Drawing.Size(24, 24); + this.compressScriptTextButton.TabIndex = 29; + this.compressScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.compressScriptTextButton.UseVisualStyleBackColor = true; + this.compressScriptTextButton.Click += new System.EventHandler(this.ScriptEditorCollapseButton_Click); + // + // scriptEditorWordWrapCheckbox + // + this.scriptEditorWordWrapCheckbox.Appearance = System.Windows.Forms.Appearance.Button; + this.scriptEditorWordWrapCheckbox.AutoSize = true; + this.scriptEditorWordWrapCheckbox.Checked = true; + this.scriptEditorWordWrapCheckbox.CheckState = System.Windows.Forms.CheckState.Checked; + this.scriptEditorWordWrapCheckbox.Location = new System.Drawing.Point(907, 12); + this.scriptEditorWordWrapCheckbox.Name = "scriptEditorWordWrapCheckbox"; + this.scriptEditorWordWrapCheckbox.Size = new System.Drawing.Size(72, 23); + this.scriptEditorWordWrapCheckbox.TabIndex = 25; + this.scriptEditorWordWrapCheckbox.Text = "Word Wrap"; + this.scriptEditorWordWrapCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.scriptEditorWordWrapCheckbox.UseVisualStyleBackColor = true; + this.scriptEditorWordWrapCheckbox.CheckedChanged += new System.EventHandler(this.scriptEditorWordWrapCheckbox_CheckedChanged); + // + // scriptEditorWhitespacesCheckbox + // + this.scriptEditorWhitespacesCheckbox.Appearance = System.Windows.Forms.Appearance.Button; + this.scriptEditorWhitespacesCheckbox.AutoSize = true; + this.scriptEditorWhitespacesCheckbox.Location = new System.Drawing.Point(981, 12); + this.scriptEditorWhitespacesCheckbox.Name = "scriptEditorWhitespacesCheckbox"; + this.scriptEditorWhitespacesCheckbox.Size = new System.Drawing.Size(79, 23); + this.scriptEditorWhitespacesCheckbox.TabIndex = 26; + this.scriptEditorWhitespacesCheckbox.Text = "Whitespaces"; + this.scriptEditorWhitespacesCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.scriptEditorWhitespacesCheckbox.UseVisualStyleBackColor = true; + this.scriptEditorWhitespacesCheckbox.CheckedChanged += new System.EventHandler(this.viewWhiteSpacesButton_Click); + // + // groupBox26 + // + this.groupBox26.Controls.Add(this.scriptEditorNumberFormatNoPreference); + this.groupBox26.Controls.Add(this.scriptEditorNumberFormatDecimal); + this.groupBox26.Controls.Add(this.scriptEditorNumberFormatHex); + this.groupBox26.Location = new System.Drawing.Point(700, 4); + this.groupBox26.Name = "groupBox26"; + this.groupBox26.Size = new System.Drawing.Size(190, 36); + this.groupBox26.TabIndex = 50; + this.groupBox26.TabStop = false; + this.groupBox26.Text = "Number Format Preference"; + // + // scriptEditorNumberFormatNoPreference + // + this.scriptEditorNumberFormatNoPreference.AutoSize = true; + this.scriptEditorNumberFormatNoPreference.Checked = true; + this.scriptEditorNumberFormatNoPreference.Location = new System.Drawing.Point(11, 14); + this.scriptEditorNumberFormatNoPreference.Name = "scriptEditorNumberFormatNoPreference"; + this.scriptEditorNumberFormatNoPreference.Size = new System.Drawing.Size(47, 17); + this.scriptEditorNumberFormatNoPreference.TabIndex = 22; + this.scriptEditorNumberFormatNoPreference.TabStop = true; + this.scriptEditorNumberFormatNoPreference.Text = "Auto"; + this.scriptEditorNumberFormatNoPreference.UseVisualStyleBackColor = true; + this.scriptEditorNumberFormatNoPreference.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatNoPref); + // + // scriptEditorNumberFormatDecimal + // + this.scriptEditorNumberFormatDecimal.AutoSize = true; + this.scriptEditorNumberFormatDecimal.Location = new System.Drawing.Point(121, 14); + this.scriptEditorNumberFormatDecimal.Name = "scriptEditorNumberFormatDecimal"; + this.scriptEditorNumberFormatDecimal.Size = new System.Drawing.Size(63, 17); + this.scriptEditorNumberFormatDecimal.TabIndex = 24; + this.scriptEditorNumberFormatDecimal.Text = "Decimal"; + this.scriptEditorNumberFormatDecimal.UseVisualStyleBackColor = true; + this.scriptEditorNumberFormatDecimal.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatDec); + // + // scriptEditorNumberFormatHex + // + this.scriptEditorNumberFormatHex.AutoSize = true; + this.scriptEditorNumberFormatHex.Location = new System.Drawing.Point(68, 14); + this.scriptEditorNumberFormatHex.Name = "scriptEditorNumberFormatHex"; + this.scriptEditorNumberFormatHex.Size = new System.Drawing.Size(44, 17); + this.scriptEditorNumberFormatHex.TabIndex = 23; + this.scriptEditorNumberFormatHex.Text = "Hex"; + this.scriptEditorNumberFormatHex.UseVisualStyleBackColor = true; + this.scriptEditorNumberFormatHex.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatHex); + // + // viewLevelScriptButton + // + this.viewLevelScriptButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.viewLevelScriptButton.Location = new System.Drawing.Point(481, 681); + this.viewLevelScriptButton.Name = "viewLevelScriptButton"; + this.viewLevelScriptButton.Size = new System.Drawing.Size(91, 25); + this.viewLevelScriptButton.TabIndex = 6; + this.viewLevelScriptButton.Text = "View level script"; + this.viewLevelScriptButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.viewLevelScriptButton.UseVisualStyleBackColor = true; + this.viewLevelScriptButton.Click += new System.EventHandler(this.viewLevelScriptButton_Click); + // + // locateCurrentScriptFile + // + this.locateCurrentScriptFile.Image = global::DSPRE.Properties.Resources.open_file; + this.locateCurrentScriptFile.Location = new System.Drawing.Point(423, 29); + this.locateCurrentScriptFile.Name = "locateCurrentScriptFile"; + this.locateCurrentScriptFile.Size = new System.Drawing.Size(42, 40); + this.locateCurrentScriptFile.TabIndex = 7; + this.locateCurrentScriptFile.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.locateCurrentScriptFile.UseVisualStyleBackColor = true; + this.locateCurrentScriptFile.Click += new System.EventHandler(this.locateCurrentScriptFile_Click); + // + // ScriptEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.scintillaScriptsPanel); + this.Controls.Add(this.locateCurrentScriptFile); + this.Controls.Add(this.groupBox24); + this.Controls.Add(this.viewLevelScriptButton); + this.Controls.Add(this.selectScriptFileComboBox); + this.Controls.Add(this.groupBox26); + this.Controls.Add(this.label5); + this.Controls.Add(this.scriptEditorWhitespacesCheckbox); + this.Controls.Add(this.scriptEditorWordWrapCheckbox); + this.Controls.Add(this.addScriptFileButton); + this.Controls.Add(this.compressScriptTextButton); + this.Controls.Add(this.removeScriptFileButton); + this.Controls.Add(this.expandScriptTextButton); + this.Controls.Add(this.saveScriptFileButton); + this.Controls.Add(this.openFindScriptEditorButton); + this.Controls.Add(this.exportScriptFileButton); + this.Controls.Add(this.importScriptFileButton); + this.Controls.Add(this.groupBox8); + this.Name = "ScriptEditor"; + this.Size = new System.Drawing.Size(1177, 735); + this.PanelSearchScripts.ResumeLayout(false); + this.PanelSearchScripts.PerformLayout(); + this.scintillaScriptsPanel.ResumeLayout(false); + this.groupBox8.ResumeLayout(false); + this.groupBox8.PerformLayout(); + this.groupBox24.ResumeLayout(false); + this.ScriptNavigatorTabControl.ResumeLayout(false); + this.ScriptsNavTab.ResumeLayout(false); + this.FunctionsNavTab.ResumeLayout(false); + this.ActionsNavTab.ResumeLayout(false); + this.groupBox26.ResumeLayout(false); + this.groupBox26.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -857,28 +624,12 @@ namespace DSPRE.Editors public System.Windows.Forms.ComboBox selectScriptFileComboBox; private System.Windows.Forms.Label label5; - public System.Windows.Forms.TabControl scriptEditorTabControl; - private System.Windows.Forms.TabPage scriptsTabPage; private System.Windows.Forms.Panel PanelSearchScripts; private System.Windows.Forms.Button BtnNextFindScript; private System.Windows.Forms.Button BtnPrevFindScript; private System.Windows.Forms.Button BtnCloseFindScript; private System.Windows.Forms.TextBox panelFindScriptTextBox; private System.Windows.Forms.Panel scintillaScriptsPanel; - private System.Windows.Forms.TabPage functionsTabPage; - private System.Windows.Forms.Panel PanelSearchFunctions; - private System.Windows.Forms.Button BtnNextFindFunc; - private System.Windows.Forms.Button BtnPrevFindFunc; - private System.Windows.Forms.Button BtnCloseFindFunc; - private System.Windows.Forms.TextBox panelFindFunctionTextBox; - private System.Windows.Forms.Panel scintillaFunctionsPanel; - private System.Windows.Forms.TabPage actionsTabPage; - private System.Windows.Forms.Panel PanelSearchActions; - private System.Windows.Forms.Button BtnNextFindActions; - private System.Windows.Forms.Button BtnPrevFindActions; - private System.Windows.Forms.Button BtnCloseFindActions; - private System.Windows.Forms.TextBox panelFindActionTextBox; - private System.Windows.Forms.Panel scintillaActionsPanel; private System.Windows.Forms.Button addScriptFileButton; private System.Windows.Forms.Button removeScriptFileButton; private System.Windows.Forms.Button saveScriptFileButton; diff --git a/DS_Map/Editors/ScriptEditor.cs b/DS_Map/Editors/ScriptEditor.cs index 9e1a3d0..77e3326 100644 --- a/DS_Map/Editors/ScriptEditor.cs +++ b/DS_Map/Editors/ScriptEditor.cs @@ -13,14 +13,8 @@ using System.Globalization; namespace DSPRE.Editors { public partial class ScriptEditor : UserControl { public bool scriptEditorIsReady { get; set; } = false; - private Scintilla ScriptTextArea; - private Scintilla FunctionTextArea; - private Scintilla ActionTextArea; private SearchManager scriptSearchManager; - private SearchManager functionSearchManager; - private SearchManager actionSearchManager; - private Scintilla currentScintillaEditor; - private SearchManager currentSearchManager; + private Scintilla ScriptTextArea; private bool scriptsDirty = false; private bool functionsDirty = false; private bool actionsDirty = false; @@ -118,7 +112,6 @@ namespace DSPRE.Editors { public void OpenScriptEditor(MainProgram parent, int scriptFileID) { SetupScriptEditor(parent); - scriptEditorTabControl.SelectedIndex = 0; selectScriptFileComboBox.SelectedIndex = scriptFileID; EditorPanels.mainTabControl.SelectedTab = EditorPanels.scriptEditorTabPage; } @@ -132,9 +125,6 @@ namespace DSPRE.Editors { secondaryKeyWords = String.Join(" ", RomInfo.ScriptComparisonOperatorsDict.Values) + " " + String.Join(" ", ScriptDatabase.specialOverworlds.Values) + " " + String.Join(" ", ScriptDatabase.overworldDirections.Values) + - " " + ScriptFile.ContainerTypes.Script.ToString() + - " " + ScriptFile.ContainerTypes.Function.ToString() + - " " + ScriptFile.ContainerTypes.Action.ToString() + " " + Event.EventType.Overworld + " " + Overworld.MovementCodeKW; secondaryKeyWords += " " + secondaryKeyWords.ToUpper() + " " + secondaryKeyWords.ToLower(); @@ -145,52 +135,25 @@ namespace DSPRE.Editors { scintillaScriptsPanel.Controls.Clear(); scintillaScriptsPanel.Controls.Add(ScriptTextArea); - FunctionTextArea = new Scintilla(); - functionSearchManager = new SearchManager(EditorPanels.MainProgram, FunctionTextArea, panelFindFunctionTextBox, PanelSearchFunctions); - scintillaFunctionsPanel.Controls.Clear(); - scintillaFunctionsPanel.Controls.Add(FunctionTextArea); - - ActionTextArea = new Scintilla(); - actionSearchManager = new SearchManager(EditorPanels.MainProgram, ActionTextArea, panelFindActionTextBox, PanelSearchActions); - scintillaActionsPanel.Controls.Clear(); - scintillaActionsPanel.Controls.Add(ActionTextArea); - - currentScintillaEditor = ScriptTextArea; - currentSearchManager = scriptSearchManager; - // BASIC CONFIG ScriptTextArea.TextChanged += (OnTextChangedScript); - FunctionTextArea.TextChanged += (OnTextChangedFunction); - ActionTextArea.TextChanged += (OnTextChangedAction); // INITIAL VIEW CONFIG InitialViewConfig(ScriptTextArea); - InitialViewConfig(FunctionTextArea); - InitialViewConfig(ActionTextArea); InitSyntaxColoring(ScriptTextArea); - InitSyntaxColoring(FunctionTextArea); - InitSyntaxColoring(ActionTextArea); // NUMBER MARGIN InitNumberMargin(ScriptTextArea, ScriptTextArea_MarginClick); - InitNumberMargin(FunctionTextArea, FunctionTextArea_MarginClick); - InitNumberMargin(ActionTextArea, ActionTextArea_MarginClick); // BOOKMARK MARGIN InitBookmarkMargin(ScriptTextArea); - InitBookmarkMargin(FunctionTextArea); - InitBookmarkMargin(ActionTextArea); // CODE FOLDING MARGIN InitCodeFolding(ScriptTextArea); - InitCodeFolding(FunctionTextArea); - InitCodeFolding(ActionTextArea); // INIT HOTKEYS InitHotkeys(ScriptTextArea, scriptSearchManager); - InitHotkeys(FunctionTextArea, functionSearchManager); - InitHotkeys(ActionTextArea, actionSearchManager); // INIT TOOLTIPS DWELLING /* @@ -202,6 +165,8 @@ namespace DSPRE.Editors { FunctionTextArea.DwellEnd += TextArea_DwellEnd; FunctionTextArea.DwellStart += TextArea_DwellStart; */ + + // Style for prefixed words (label_*, script_*) } private void populate_selectScriptFileComboBox(int selectedIndex = 0) { @@ -227,7 +192,6 @@ namespace DSPRE.Editors { } private void InitSyntaxColoring(Scintilla textArea) { - // Configure the default style textArea.StyleResetDefault(); textArea.Styles[Style.Default].Font = "Consolas"; textArea.Styles[Style.Default].Size = 12; @@ -235,20 +199,74 @@ namespace DSPRE.Editors { textArea.Styles[Style.Default].ForeColor = Color.FromArgb(0xFFFFFF); textArea.StyleClearAll(); - // Configure the lexer styles - textArea.Styles[Style.Python.Identifier].ForeColor = Color.FromArgb(0xD0DAE2); - textArea.Styles[Style.Python.CommentLine].ForeColor = Color.FromArgb(0x40BF57); - textArea.Styles[Style.Python.Number].ForeColor = Color.FromArgb(0xFFFF00); - textArea.Styles[Style.Python.String].ForeColor = Color.FromArgb(0xFF00FF); - textArea.Styles[Style.Python.Character].ForeColor = Color.FromArgb(0xE95454); - textArea.Styles[Style.Python.Operator].ForeColor = Color.FromArgb(0xFFFF00); - textArea.Styles[Style.Python.Word].ForeColor = Color.FromArgb(0x48A8EE); - textArea.Styles[Style.Python.Word2].ForeColor = Color.FromArgb(0xF98906); + // Configure Assembly lexer styles + textArea.Styles[Style.Asm.Identifier].ForeColor = Color.FromArgb(0xD0DAE2); + textArea.Styles[Style.Asm.Number].ForeColor = Color.FromArgb(0xFFFF00); + textArea.Styles[Style.Asm.String].ForeColor = Color.FromArgb(0xFF00FF); + textArea.Styles[Style.Asm.Character].ForeColor = Color.FromArgb(0xE95454); + textArea.Styles[Style.Asm.Operator].ForeColor = Color.FromArgb(0xFFFF00); + textArea.Styles[Style.Asm.Comment].ForeColor = Color.FromArgb(0x40BF57); - textArea.Lexer = Lexer.Python; + // For command keywords - use CpuInstruction style + textArea.Styles[Style.Asm.CpuInstruction].ForeColor = Color.FromArgb(0x48A8EE); - textArea.SetKeywords(0, cmdKeyWords); - textArea.SetKeywords(1, secondaryKeyWords); + // For secondary keywords - use Directive style + textArea.Styles[Style.Asm.Directive].ForeColor = Color.FromArgb(0xF98906); + + // Configure indicators for prefix highlighting + textArea.Indicators[0].Style = IndicatorStyle.TextFore; + textArea.Indicators[0].ForeColor = Color.FromArgb(0x8A2BE2); // Purple for label_* + textArea.Indicators[0].Under = false; // Draw over the lexer's styling + + textArea.Indicators[1].Style = IndicatorStyle.TextFore; + textArea.Indicators[1].ForeColor = Color.FromArgb(0x00CED1); // Cyan for script_* + textArea.Indicators[1].Under = false; // Draw over the lexer's styling + + // Set the lexer and keywords + textArea.Lexer = Lexer.Asm; + textArea.SetKeywords(0, cmdKeyWords); // CPU Instructions index + textArea.SetKeywords(3, secondaryKeyWords); // Directives index + + // Apply the highlighting + textArea.TextChanged += (sender, e) => HighlightPrefixedWords(textArea); + + // Initial highlighting + HighlightPrefixedWords(textArea); + } + + private void HighlightPrefixedWords(Scintilla textArea) { + // Clear existing indicators + textArea.IndicatorCurrent = 0; + textArea.IndicatorClearRange(0, textArea.TextLength); + textArea.IndicatorCurrent = 1; + textArea.IndicatorClearRange(0, textArea.TextLength); + + // Process each line individually + for (int i = 0; i < textArea.Lines.Count; i++) { + string lineText = textArea.Lines[i].Text; + int linePos = textArea.Lines[i].Position; + + // Trim for detection but use original text for positions + string trimmedLine = lineText.Trim(); + + // Handle script_ lines + if (trimmedLine.Contains("script_") && trimmedLine.EndsWith(":")) { + int startPos = linePos + lineText.IndexOf("script_"); + int endPos = linePos + lineText.IndexOf(":", lineText.IndexOf("script_")) + 1; + + textArea.IndicatorCurrent = 1; + textArea.IndicatorFillRange(startPos, endPos - startPos); + } + + // Handle label_ lines + if (trimmedLine.Contains("label_") && trimmedLine.EndsWith(":")) { + int startPos = linePos + lineText.IndexOf("label_"); + int endPos = linePos + lineText.IndexOf(":", lineText.IndexOf("label_")) + 1; + + textArea.IndicatorCurrent = 0; + textArea.IndicatorFillRange(startPos, endPos - startPos); + } + } } private void InitNumberMargin(Scintilla textArea, EventHandler textArea_MarginClick) { @@ -372,10 +390,8 @@ namespace DSPRE.Editors { private void ScriptEditorSetClean() { Helpers.DisableHandlers(); - scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s"; - functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s"; - actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s"; - scriptsDirty = functionsDirty = actionsDirty = false; + //scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s"; + scriptsDirty = false; Helpers.EnableHandlers(); } @@ -383,33 +399,13 @@ namespace DSPRE.Editors { private void OnTextChangedScript(object sender, EventArgs e) { ScriptTextArea.Margins[NUMBER_MARGIN].Width = ScriptTextArea.Lines.Count.ToString().Length * 13; scriptsDirty = true; - scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s" + "*"; - } - - private void OnTextChangedFunction(object sender, EventArgs e) { - FunctionTextArea.Margins[NUMBER_MARGIN].Width = FunctionTextArea.Lines.Count.ToString().Length * 13; - functionsDirty = true; - functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s" + "*"; - } - - private void OnTextChangedAction(object sender, EventArgs e) { - ActionTextArea.Margins[NUMBER_MARGIN].Width = ActionTextArea.Lines.Count.ToString().Length * 13; - actionsDirty = true; - actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s" + "*"; + //scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s" + "*"; } private void ScriptTextArea_MarginClick(object sender, MarginClickEventArgs e) { MarginClick(ScriptTextArea, e); } - private void FunctionTextArea_MarginClick(object sender, MarginClickEventArgs e) { - MarginClick(FunctionTextArea, e); - } - - private void ActionTextArea_MarginClick(object sender, MarginClickEventArgs e) { - MarginClick(ActionTextArea, e); - } - private void MarginClick(Scintilla textArea, MarginClickEventArgs e) { if (e.Margin == BOOKMARK_MARGIN) { // Do we have a marker for this line? @@ -480,12 +476,12 @@ namespace DSPRE.Editors { return false; } + // Keep all the code that handles unsaved changes if (scriptsDirty || functionsDirty || actionsDirty) { DialogResult d = MessageBox.Show("There are unsaved changes in this Script File.\nDo you wish to discard them?", "Unsaved work", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (!d.Equals(DialogResult.Yes)) { Helpers.DisableHandlers(); - // selectScriptFileComboBox.SelectedItem = currentScriptFile; selectScriptFileComboBox.SelectedIndex = (int)currentScriptFile.fileID; Helpers.EnableHandlers(); return false; @@ -495,18 +491,13 @@ namespace DSPRE.Editors { Helpers.DisableHandlers(); ScriptFile lastScriptFile = currentScriptFile; - // currentScriptFile = (ScriptFile)selectScriptFileComboBox.SelectedItem; - currentScriptFile = new ScriptFile(selectScriptFileComboBox.SelectedIndex); // Load script file + // Load the script file using our new label-based constructor + currentScriptFile = new ScriptFile(selectScriptFileComboBox.SelectedIndex); + // Clear only the script text area and nav listbox ScriptTextArea.ClearAll(); - FunctionTextArea.ClearAll(); - ActionTextArea.ClearAll(); - scriptsNavListbox.Items.Clear(); - functionsNavListbox.Items.Clear(); - actionsNavListbox.Items.Clear(); - //prevent buttons from flickering when the combobox selection changes bool typeChanged = true; if (lastScriptFile != null) { typeChanged = lastScriptFile.isLevelScript != currentScriptFile.isLevelScript; @@ -545,9 +536,7 @@ namespace DSPRE.Editors { } if (!currentScriptFile.isLevelScript) { - displayScriptFile(ScriptFile.ContainerTypes.Script, currentScriptFile.allScripts, scriptsNavListbox, ScriptTextArea); - displayScriptFile(ScriptFile.ContainerTypes.Function, currentScriptFile.allFunctions, functionsNavListbox, FunctionTextArea); - displayScriptFileActions(ScriptFile.ContainerTypes.Action, currentScriptFile.allActions, actionsNavListbox, ActionTextArea); + displayScriptFile(scriptsNavListbox, ScriptTextArea); } ScriptEditorSetClean(); @@ -558,84 +547,35 @@ namespace DSPRE.Editors { return true; } - static void displayScriptFile(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) { - string buffer = ""; - /* Add commands */ - for (int i = 0; i < commandList.Count; i++) { - ScriptCommandContainer scriptCommandContainer = commandList[i]; - - /* Write header */ - string header = containerType + " " + (i + 1); - buffer += header + ':' + Environment.NewLine; - navListBox.Items.Add(header); - - /* If current command is identical to another, print UseScript instead of commands */ - if (scriptCommandContainer.usedScriptID < 0) { - for (int j = 0; j < scriptCommandContainer.commands.Count; j++) { - ScriptCommand command = scriptCommandContainer.commands[j]; - if (!ScriptDatabase.endCodes.Contains(command.id)) { - buffer += '\t'; - } - - buffer += command.name + Environment.NewLine; - } - } else { - buffer += '\t' + "UseScript_#" + scriptCommandContainer.usedScriptID + Environment.NewLine; - } - - textArea.AppendText(buffer + Environment.NewLine); - buffer = ""; + private void displayScriptFile(ListBox navListBox, Scintilla textArea) { + if (currentScriptFile.CommandSequence == null || currentScriptFile.CommandSequence.Count == 0) { + return; } - } - static void displayScriptFileActions(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) { - /* Add movements */ - string buffer = ""; - for (int i = 0; i < commandList.Count; i++) { - ScriptActionContainer currentCommand = commandList[i]; - - string header = containerType + " " + (i + 1); - buffer += header + ':' + Environment.NewLine; - navListBox.Items.Add(header); - - for (int j = 0; j < currentCommand.commands.Count; j++) { - ScriptAction command = currentCommand.commands[j]; - if (!ScriptDatabase.movementEndCodes.Contains(command.id)) { - buffer += '\t'; - } - - buffer += command.name + Environment.NewLine; + // First add all labels to the nav listbox + HashSet addedLabels = new HashSet(); + foreach (var cmdPos in currentScriptFile.CommandSequence) { + if (!string.IsNullOrEmpty(cmdPos.Label) && !addedLabels.Contains(cmdPos.Label)) { + navListBox.Items.Add(cmdPos.Label); + addedLabels.Add(cmdPos.Label); } - - textArea.AppendText(buffer + Environment.NewLine); - buffer = ""; } + + // Generate the script text + string scriptText = currentScriptFile.ToText(); + textArea.Text = scriptText; } private void scriptEditorZoomInButton_Click(object sender, EventArgs e) { - ZoomIn(currentScintillaEditor); + ZoomIn(ScriptTextArea); } private void scriptEditorZoomOutButton_Click(object sender, EventArgs e) { - ZoomOut(currentScintillaEditor); + ZoomOut(ScriptTextArea); } private void scriptEditorZoomResetButton_Click(object sender, EventArgs e) { - ZoomDefault(currentScintillaEditor); - } - - private void scriptEditorTabControl_TabIndexChanged(object sender, EventArgs e) { - if (scriptEditorTabControl.SelectedTab == scriptsTabPage) { - currentSearchManager = scriptSearchManager; - currentScintillaEditor = ScriptTextArea; - } else if (scriptEditorTabControl.SelectedTab == functionsTabPage) { - currentSearchManager = functionSearchManager; - currentScintillaEditor = FunctionTextArea; - } else { - //Actions - currentSearchManager = actionSearchManager; - currentScintillaEditor = ActionTextArea; - } + ZoomDefault(ScriptTextArea); } private void removeScriptFileButton_Click(object sender, EventArgs e) { @@ -660,18 +600,20 @@ namespace DSPRE.Editors { /* Add new event file to event folder */ int fileID = selectScriptFileComboBox.Items.Count; - ScriptFile scriptFile = new ScriptFile( - scriptLines: new Scintilla { Text = "Script 1:\nEnd" }.Lines.ToStringsList(trim: true), - functionLines: null, - actionLines: null, - fileID - ); + // Create a simple script with one labeled section + List scriptLines = new List { + "script_0:", + "\tEnd" + }; - //check if ScriptFile instance was created successfully + // Use the new constructor that just takes script lines + ScriptFile scriptFile = new ScriptFile(scriptLines, fileID); + + // Check if ScriptFile instance was created successfully if (scriptFile.SaveToFileDefaultDir(fileID, showSuccessMessage: false)) { /* Update ComboBox and select new file */ - selectScriptFileComboBox.Items.Add(scriptFile); - selectScriptFileComboBox.SelectedItem = scriptFile; + selectScriptFileComboBox.Items.Add($"Script File {fileID}"); + selectScriptFileComboBox.SelectedIndex = selectScriptFileComboBox.Items.Count - 1; } } @@ -679,19 +621,13 @@ namespace DSPRE.Editors { /* Create new ScriptFile object using the values in the script editor */ int fileID = currentScriptFile.fileID; + // We only need the script text area now, not function or action areas ScriptFile userEdited = new ScriptFile( - scriptLines: ScriptTextArea.Lines.ToStringsList(trim: true), - functionLines: FunctionTextArea.Lines.ToStringsList(trim: true), - actionLines: ActionTextArea.Lines.ToStringsList(trim: true), - fileID + ScriptTextArea.Lines.ToStringsList(trim: true), + fileID ); - if (userEdited.hasNoScripts) { - MessageBox.Show("This " + nameof(ScriptFile) + " couldn't be saved. A minimum of one script is required.", "Can't save", MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } - - //check if ScriptFile instance was created successfully + // Check if ScriptFile instance was created successfully if (userEdited.SaveToFileDefaultDir(fileID)) { currentScriptFile = userEdited; ScriptEditorSetClean(); @@ -779,98 +715,54 @@ namespace DSPRE.Editors { scriptSearchManager.CloseSearch(); } - private void BtnNextFindFunc_Click(object sender, EventArgs e) { - findNext(functionSearchManager); - } - - private void BtnPrevFindFunc_Click(object sender, EventArgs e) { - findNext(functionSearchManager); - } - - private void panelFindFunctionTextBox_TextChanged(object sender, EventArgs e) { - findNext(functionSearchManager); - } - - private void functionTxtFind_KeyDown(object sender, KeyEventArgs e) { - TxtFindKeyDown(functionSearchManager, e); - } - - private void BtnCloseFindFunc_Click(object sender, EventArgs e) { - functionSearchManager.CloseSearch(); - } - - private void BtnNextFindActions_Click(object sender, EventArgs e) { - findNext(actionSearchManager); - } - - private void BtnPrevFindActions_Click(object sender, EventArgs e) { - findNext(actionSearchManager); - } - - private void panelFindActionTextBox_TextChanged(object sender, EventArgs e) { - findNext(actionSearchManager); - } - - private void actionTxtFind_KeyDown(object sender, KeyEventArgs e) { - TxtFindKeyDown(actionSearchManager, e); - } - - private void BtnCloseFindActions_Click(object sender, EventArgs e) { - actionSearchManager.CloseSearch(); - } void scrollResultToTop(SearchManager searchManager) { int resultStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding; searchManager.textAreaScintilla.FirstVisibleLine = resultStart; } - private void NavigatorGoTo(ListBox listBox, TabPage tabPage, SearchManager searchManager, ScriptFile.ContainerTypes containerType) { + private void NavigatorGoTo(ListBox listBox, ScriptFile.ContainerTypes containerType) { if (listBox.SelectedIndex < 0) { return; } - scriptEditorTabControl.SelectedTab = tabPage; int commandNumber = listBox.SelectedIndex + 1; string CommandBlockOpen = $"{containerType} {commandNumber}:"; - searchManager.Find(true, false, CommandBlockOpen); + scriptSearchManager.Find(true, false, CommandBlockOpen); - scrollResultToTop(searchManager); + scrollResultToTop(scriptSearchManager); } private void scriptsNavListbox_SelectedIndexChanged(object sender, EventArgs e) { - NavigatorGoTo((ListBox)sender, scriptsTabPage, scriptSearchManager, ScriptFile.ContainerTypes.Script); + NavigatorGoTo((ListBox)sender, ScriptFile.ContainerTypes.Script); } private void functionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) { - NavigatorGoTo((ListBox)sender, functionsTabPage, functionSearchManager, ScriptFile.ContainerTypes.Function); + //NavigatorGoTo((ListBox)sender, functionsTabPage, functionSearchManager, ScriptFile.ContainerTypes.Function); } private void actionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) { - NavigatorGoTo((ListBox)sender, actionsTabPage, actionSearchManager, ScriptFile.ContainerTypes.Action); + //NavigatorGoTo((ListBox)sender, actionsTabPage, actionSearchManager, ScriptFile.ContainerTypes.Action); } private void openFindScriptEditorButton_Click(object sender, EventArgs e) { - currentSearchManager.OpenSearch(); + scriptSearchManager.OpenSearch(); } private void ScriptEditorExpandButton_Click(object sender, EventArgs e) { - currentScintillaEditor.FoldAll(FoldAction.Expand); + ScriptTextArea.FoldAll(FoldAction.Expand); } private void ScriptEditorCollapseButton_Click(object sender, EventArgs e) { - currentScintillaEditor.FoldAll(FoldAction.Contract); + ScriptTextArea.FoldAll(FoldAction.Contract); } private void scriptEditorWordWrapCheckbox_CheckedChanged(object sender, EventArgs e) { ScriptTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None; - FunctionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None; - ActionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None; } private void viewWhiteSpacesButton_Click(object sender, EventArgs e) { ScriptTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible; - FunctionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible; - ActionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible; } private void searchInScriptsTextBox_KeyDown(object sender, KeyEventArgs e) { @@ -925,17 +817,20 @@ namespace DSPRE.Editors { List scriptsToSearch = getScriptsToSearch(); string searchString = searchInScriptsTextBox.Text; - Func searchCriteriaCS = (string s) => s.IndexOf(searchString, StringComparison.InvariantCulture) >= 0; - Func searchCriteriaCI = (string s) => s.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) >= 0; - Func searchCriteria = scriptSearchCaseSensitiveCheckBox.Checked ? searchCriteriaCS : searchCriteriaCI; + bool searchCriteriaCS(string s) => s.IndexOf(searchString, StringComparison.InvariantCulture) >= 0; + bool searchCriteriaCI(string s) => s.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) >= 0; + + Func searchCriteria; + if (scriptSearchCaseSensitiveCheckBox.Checked) { + searchCriteria = searchCriteriaCS; + } else { + searchCriteria = searchCriteriaCI; + } List results = new List(); foreach (ScriptFile scriptFile in scriptsToSearch) { - List scriptResults = SearchInScripts(scriptFile, scriptFile.allScripts, searchCriteria); - List functionResults = SearchInScripts(scriptFile, scriptFile.allFunctions, searchCriteria); - // List actionResults = SearchInScripts(scriptFile, scriptFile.allActions, searchCriteria); + List scriptResults = SearchInScripts(scriptFile, searchCriteria); results.AddRange(scriptResults); - results.AddRange(functionResults); // results.AddRange(actionResults); } @@ -948,21 +843,9 @@ namespace DSPRE.Editors { bw.RunWorkerAsync(); } - private List SearchInScripts(ScriptFile scriptFile, List commandContainers, Func criteria) { + private List SearchInScripts(ScriptFile scriptFile, Func criteria) { List results = new List(); - for (int j = 0; j < commandContainers.Count; j++) { - if (commandContainers[j].commands is null) { - continue; - } - - ScriptCommandContainer scriptCommandContainer = commandContainers[j]; - foreach (ScriptCommand scriptCommand in scriptCommandContainer.commands) { - if (criteria(scriptCommand.name)) { - results.Add(new ScriptEditorSearchResult(scriptFile, scriptCommandContainer.containerType, j + 1, scriptCommand)); - } - } - } return results; } @@ -987,19 +870,11 @@ namespace DSPRE.Editors { selectScriptFileComboBox.SelectedIndex = scriptFile.fileID; if (containerType == ScriptFile.ContainerTypes.Script) { - displaySearchResult(scriptsTabPage, scriptSearchManager, searchResult); - } else if (containerType == ScriptFile.ContainerTypes.Function) { - displaySearchResult(functionsTabPage, functionSearchManager, searchResult); - } else if (containerType == ScriptFile.ContainerTypes.Action) { - displaySearchResult(actionsTabPage, actionSearchManager, searchResult); + displaySearchResult(scriptSearchManager, searchResult); } } - private void displaySearchResult(TabPage tabPage, SearchManager searchManager, ScriptEditorSearchResult searchResult) { - if (scriptEditorTabControl.SelectedTab != tabPage) { - scriptEditorTabControl.SelectedTab = tabPage; - } - + private void displaySearchResult(SearchManager searchManager, ScriptEditorSearchResult searchResult) { searchManager.Find(true, false, searchResult.CommandBlockOpen); int blockStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding; diff --git a/DS_Map/Main Window.Designer.cs b/DS_Map/Main Window.Designer.cs index a6bd6a0..e812202 100644 --- a/DS_Map/Main Window.Designer.cs +++ b/DS_Map/Main Window.Designer.cs @@ -30,22 +30,22 @@ { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainProgram)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle22 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle23 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle24 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle25 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle26 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle27 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle28 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle29 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle30 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle31 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle32 = new System.Windows.Forms.DataGridViewCellStyle(); this.mainTabControl = new System.Windows.Forms.TabControl(); this.headerEditorTabPage = new System.Windows.Forms.TabPage(); this.removeLastHeaderBTN = new System.Windows.Forms.Button(); @@ -856,7 +856,6 @@ this.weatherMapEditor = new System.Windows.Forms.ToolStripButton(); this.versionLabel = new System.Windows.Forms.Label(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - this.exportScriptDatabaseJSONToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.mainTabControl.SuspendLayout(); this.headerEditorTabPage.SuspendLayout(); this.worldmapCoordsGroupBox.SuspendLayout(); @@ -2590,7 +2589,7 @@ // this.resetColorTableButton.Image = global::DSPRE.Properties.Resources.resetColorTable; this.resetColorTableButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.resetColorTableButton.Location = new System.Drawing.Point(11, 446); + this.resetColorTableButton.Location = new System.Drawing.Point(11, 451); this.resetColorTableButton.Name = "resetColorTableButton"; this.resetColorTableButton.Size = new System.Drawing.Size(117, 32); this.resetColorTableButton.TabIndex = 31; @@ -2603,7 +2602,7 @@ // this.importColorTableButton.Image = global::DSPRE.Properties.Resources.loadColorTable; this.importColorTableButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.importColorTableButton.Location = new System.Drawing.Point(11, 479); + this.importColorTableButton.Location = new System.Drawing.Point(11, 484); this.importColorTableButton.Name = "importColorTableButton"; this.importColorTableButton.Size = new System.Drawing.Size(117, 32); this.importColorTableButton.TabIndex = 30; @@ -2668,7 +2667,7 @@ // this.removeHeightsButton.Image = ((System.Drawing.Image)(resources.GetObject("removeHeightsButton.Image"))); this.removeHeightsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.removeHeightsButton.Location = new System.Drawing.Point(11, 402); + this.removeHeightsButton.Location = new System.Drawing.Point(11, 403); this.removeHeightsButton.Name = "removeHeightsButton"; this.removeHeightsButton.Size = new System.Drawing.Size(117, 35); this.removeHeightsButton.TabIndex = 26; @@ -2694,7 +2693,7 @@ // this.addHeightsButton.Image = ((System.Drawing.Image)(resources.GetObject("addHeightsButton.Image"))); this.addHeightsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.addHeightsButton.Location = new System.Drawing.Point(11, 366); + this.addHeightsButton.Location = new System.Drawing.Point(11, 367); this.addHeightsButton.Name = "addHeightsButton"; this.addHeightsButton.Size = new System.Drawing.Size(117, 35); this.addHeightsButton.TabIndex = 24; @@ -2771,40 +2770,40 @@ this.headersGridView.AllowUserToResizeColumns = false; this.headersGridView.AllowUserToResizeRows = false; this.headersGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.Info; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.headersGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle17.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + dataGridViewCellStyle17.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle17.ForeColor = System.Drawing.SystemColors.Info; + dataGridViewCellStyle17.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle17.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle17.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.headersGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle17; this.headersGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle2.Format = "D4"; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.headersGridView.DefaultCellStyle = dataGridViewCellStyle2; + dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle18.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle18.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle18.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle18.Format = "D4"; + dataGridViewCellStyle18.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle18.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle18.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.headersGridView.DefaultCellStyle = dataGridViewCellStyle18; this.headersGridView.Location = new System.Drawing.Point(0, 0); this.headersGridView.MultiSelect = false; this.headersGridView.Name = "headersGridView"; - dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); - dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.headersGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle19.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle19.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); + dataGridViewCellStyle19.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle19.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle19.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.headersGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle19; this.headersGridView.RowHeadersWidth = 50; this.headersGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle4.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.headersGridView.RowsDefaultCellStyle = dataGridViewCellStyle4; + dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle20.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.headersGridView.RowsDefaultCellStyle = dataGridViewCellStyle20; this.headersGridView.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; this.headersGridView.RowTemplate.Height = 18; this.headersGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False; @@ -2833,43 +2832,43 @@ this.heightsGridView.AllowUserToDeleteRows = false; this.heightsGridView.AllowUserToResizeColumns = false; this.heightsGridView.AllowUserToResizeRows = false; - dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.heightsGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.heightsGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle21; this.heightsGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); - dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.heightsGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle6; + dataGridViewCellStyle22.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle22.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle22.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); + dataGridViewCellStyle22.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle22.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle22.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle22.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.heightsGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle22; this.heightsGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle7.Font = new System.Drawing.Font("Tahoma", 8.25F); - dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle7.Format = "D2"; - dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.heightsGridView.DefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle23.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle23.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle23.Font = new System.Drawing.Font("Tahoma", 8.25F); + dataGridViewCellStyle23.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle23.Format = "D2"; + dataGridViewCellStyle23.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle23.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle23.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.heightsGridView.DefaultCellStyle = dataGridViewCellStyle23; this.heightsGridView.Location = new System.Drawing.Point(0, 0); this.heightsGridView.MultiSelect = false; this.heightsGridView.Name = "heightsGridView"; - dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); - dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.heightsGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle8; + dataGridViewCellStyle24.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle24.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle24.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); + dataGridViewCellStyle24.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle24.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle24.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle24.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.heightsGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle24; this.heightsGridView.RowHeadersWidth = 50; this.heightsGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle9.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.heightsGridView.RowsDefaultCellStyle = dataGridViewCellStyle9; + dataGridViewCellStyle25.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle25.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.heightsGridView.RowsDefaultCellStyle = dataGridViewCellStyle25; this.heightsGridView.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; this.heightsGridView.RowTemplate.Height = 18; this.heightsGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False; @@ -2896,43 +2895,43 @@ this.mapFilesGridView.AllowUserToDeleteRows = false; this.mapFilesGridView.AllowUserToResizeColumns = false; this.mapFilesGridView.AllowUserToResizeRows = false; - dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.mapFilesGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle10; + dataGridViewCellStyle26.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.mapFilesGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle26; this.mapFilesGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); - dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.mapFilesGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11; + dataGridViewCellStyle27.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle27.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle27.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); + dataGridViewCellStyle27.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle27.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle27.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle27.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.mapFilesGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle27; this.mapFilesGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle12.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle12.Format = "D4"; - dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.mapFilesGridView.DefaultCellStyle = dataGridViewCellStyle12; + dataGridViewCellStyle28.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle28.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle28.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle28.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle28.Format = "D4"; + dataGridViewCellStyle28.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle28.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle28.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.mapFilesGridView.DefaultCellStyle = dataGridViewCellStyle28; this.mapFilesGridView.Location = new System.Drawing.Point(0, 0); this.mapFilesGridView.MultiSelect = false; this.mapFilesGridView.Name = "mapFilesGridView"; - dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle13.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); - dataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.mapFilesGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle13; + dataGridViewCellStyle29.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle29.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle29.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); + dataGridViewCellStyle29.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle29.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle29.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle29.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.mapFilesGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle29; this.mapFilesGridView.RowHeadersWidth = 50; this.mapFilesGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle14.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.mapFilesGridView.RowsDefaultCellStyle = dataGridViewCellStyle14; + dataGridViewCellStyle30.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle30.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.mapFilesGridView.RowsDefaultCellStyle = dataGridViewCellStyle30; this.mapFilesGridView.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; this.mapFilesGridView.RowTemplate.Height = 18; this.mapFilesGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False; @@ -7397,8 +7396,8 @@ this.textEditorDataGridView.Location = new System.Drawing.Point(12, 77); this.textEditorDataGridView.Name = "textEditorDataGridView"; this.textEditorDataGridView.RowHeadersWidth = 68; - dataGridViewCellStyle15.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textEditorDataGridView.RowsDefaultCellStyle = dataGridViewCellStyle15; + dataGridViewCellStyle31.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textEditorDataGridView.RowsDefaultCellStyle = dataGridViewCellStyle31; this.textEditorDataGridView.Size = new System.Drawing.Size(873, 500); this.textEditorDataGridView.TabIndex = 24; this.textEditorDataGridView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.textEditorDataGridView_CellValueChanged); @@ -7502,9 +7501,9 @@ this.cameraEditorDataGridView.CausesValidation = false; this.cameraEditorDataGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised; this.cameraEditorDataGridView.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; - dataGridViewCellStyle16.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.cameraEditorDataGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle16; + dataGridViewCellStyle32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle32.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.cameraEditorDataGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle32; this.cameraEditorDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.cameraEditorDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.DistanceGVCol, @@ -10270,7 +10269,7 @@ this.nSBMDUtilityToolStripMenuItem, this.exportScriptDatabaseJSONToolStripMenuItem}); this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Size = new System.Drawing.Size(46, 20); + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(47, 20); this.aboutToolStripMenuItem.Text = "Tools"; // // romToolboxToolStripMenuItem @@ -10430,7 +10429,7 @@ this.texturizeNSBMDToolStripMenuItem.Image = global::DSPRE.Properties.Resources.addTextureToNSBMD; this.texturizeNSBMDToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; this.texturizeNSBMDToolStripMenuItem.Name = "texturizeNSBMDToolStripMenuItem"; - this.texturizeNSBMDToolStripMenuItem.Size = new System.Drawing.Size(251, 38); + this.texturizeNSBMDToolStripMenuItem.Size = new System.Drawing.Size(250, 38); this.texturizeNSBMDToolStripMenuItem.Text = "Add/Replace NSBMD textures"; this.texturizeNSBMDToolStripMenuItem.Click += new System.EventHandler(this.nsbmdAddTexButton_Click); // @@ -10439,7 +10438,7 @@ this.untexturizeToolStripMenuItem.Image = global::DSPRE.Properties.Resources.removeTextureNSBMD; this.untexturizeToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; this.untexturizeToolStripMenuItem.Name = "untexturizeToolStripMenuItem"; - this.untexturizeToolStripMenuItem.Size = new System.Drawing.Size(251, 38); + this.untexturizeToolStripMenuItem.Size = new System.Drawing.Size(250, 38); this.untexturizeToolStripMenuItem.Text = "Remove textures from NSBMD"; this.untexturizeToolStripMenuItem.Click += new System.EventHandler(this.nsbmdRemoveTexButton_Click); // @@ -10448,7 +10447,7 @@ this.extractNSBTXFromNSBMDToolStripMenuItem.Image = global::DSPRE.Properties.Resources.saveTextureFromNSBMD; this.extractNSBTXFromNSBMDToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; this.extractNSBTXFromNSBMDToolStripMenuItem.Name = "extractNSBTXFromNSBMDToolStripMenuItem"; - this.extractNSBTXFromNSBMDToolStripMenuItem.Size = new System.Drawing.Size(251, 38); + this.extractNSBTXFromNSBMDToolStripMenuItem.Size = new System.Drawing.Size(250, 38); this.extractNSBTXFromNSBMDToolStripMenuItem.Text = "Save textures from NSBMD"; this.extractNSBTXFromNSBMDToolStripMenuItem.Click += new System.EventHandler(this.nsbmdExportTexButton_Click); // @@ -10920,13 +10919,6 @@ this.versionLabel.Text = "ROM:"; this.versionLabel.Visible = false; // - // exportScriptDatabaseJSONToolStripMenuItem - // - this.exportScriptDatabaseJSONToolStripMenuItem.Name = "exportScriptDatabaseJSONToolStripMenuItem"; - this.exportScriptDatabaseJSONToolStripMenuItem.Size = new System.Drawing.Size(220, 22); - this.exportScriptDatabaseJSONToolStripMenuItem.Text = "Export ScriptDatabase JSON"; - this.exportScriptDatabaseJSONToolStripMenuItem.Click += new System.EventHandler(this.exportScriptDatabaseJSONToolStripMenuItem_Click); - // // MainProgram // this.AllowDrop = true; diff --git a/DS_Map/Main Window.cs b/DS_Map/Main Window.cs index e824e85..388671b 100644 --- a/DS_Map/Main Window.cs +++ b/DS_Map/Main Window.cs @@ -1028,19 +1028,6 @@ namespace DSPRE { return; } - // Creating a dictionary linking events to headers to fetch header data for Event Editor - if (PatchToolboxDialog.flag_DynamicHeadersPatchApplied || PatchToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) { - for (ushort i = 0; i < internalNames.Count; i++) { - MapHeader h = MapHeader.LoadFromFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + i.ToString("D4"), i, 0); - eventToHeader[h.eventFileID] = i; - } - } else { - for (ushort i = 0; i < internalNames.Count; i++) { - MapHeader h = MapHeader.LoadFromARM9(i); - eventToHeader[h.eventFileID] = i; - } - } - /*Add list of options to each control */ currentTextArchive = new TextArchive(RomInfo.locationNamesTextNumber); @@ -5507,12 +5494,12 @@ namespace DSPRE { } else { ScriptFile itemScript = new ScriptFile(RomInfo.itemScriptFileNumber); owItemComboBox.Items.Clear(); - foreach (ScriptCommandContainer cont in itemScript.allScripts) { - if (cont.commands.Count > 4) { - continue; - } - owItemComboBox.Items.Add(BitConverter.ToUInt16(cont.commands[1].cmdParams[1], 0) + "x " + itemNames[BitConverter.ToUInt16(cont.commands[0].cmdParams[1], 0)]); - } + //foreach (ScriptCommandContainer cont in itemScript.allScripts) { + // if (cont.commands.Count > 4) { + // continue; + // } + // owItemComboBox.Items.Add(BitConverter.ToUInt16(cont.commands[1].Parameters[1].RawData, 0) + "x " + itemNames[BitConverter.ToUInt16(cont.commands[0].Parameters[1].RawData, 0)]); + //} } /* Add ow movement list to box */ @@ -5542,6 +5529,19 @@ namespace DSPRE { eventMatrixUpDown.Maximum = romInfo.GetMatrixCount() - 1; eventAreaDataUpDown.Maximum = romInfo.GetAreaDataCount() - 1; + // Creating a dictionary linking events to headers to fetch header data for Event Editor + if (PatchToolboxDialog.flag_DynamicHeadersPatchApplied || PatchToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) { + for (ushort i = 0; i < internalNames.Count; i++) { + MapHeader h = MapHeader.LoadFromFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + i.ToString("D4"), i, 0); + eventToHeader[h.eventFileID] = i; + } + } else { + for (ushort i = 0; i < internalNames.Count; i++) { + MapHeader h = MapHeader.LoadFromARM9(i); + eventToHeader[h.eventFileID] = i; + } + } + Helpers.EnableHandlers(); selectEventComboBox.SelectedIndex = 0; @@ -5752,10 +5752,15 @@ namespace DSPRE { if (Helpers.HandlersDisabled) { return; } - Helpers.DisableHandlers(); + ChangeLoadedEventFile(selectEventComboBox.SelectedIndex, 0); + } + + private void ChangeLoadedEventFile(int evfile, ushort mapHeader) { + Helpers.DisableHandlers(); + /* Load events data into EventFile class instance */ - currentEvFile = new EventFile(selectEventComboBox.SelectedIndex); + currentEvFile = new EventFile(evfile); /* Update ListBoxes */ FillSpawnablesBox(); @@ -5763,7 +5768,7 @@ namespace DSPRE { FillTriggersBox(); FillWarpsBox(); - if (eventToHeader.TryGetValue((ushort)selectEventComboBox.SelectedIndex, out ushort mapHeader)) { + if (mapHeader > 0 || eventToHeader.TryGetValue((ushort)selectEventComboBox.SelectedIndex, out mapHeader)) { MapHeader h; if (PatchToolboxDialog.flag_DynamicHeadersPatchApplied || PatchToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) { h = MapHeader.LoadFromFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + mapHeader.ToString("D4"), mapHeader, 0); @@ -5788,6 +5793,7 @@ namespace DSPRE { CenterEventViewOnEntities(); } + private void showEventsCheckBoxes_CheckedChanged(object sender, EventArgs e) { if (Helpers.HandlersDisabled) { return; @@ -6655,20 +6661,26 @@ namespace DSPRE { if (new EventFile(destHeader.eventFileID).warps.Count < destAnchor + 1) { DialogResult d = MessageBox.Show("The selected warp's destination anchor doesn't exist.\n" + "Do you want to open the destination map anyway?", "Warp is not connected", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - if (d == DialogResult.No) - return; - else { + if (d == DialogResult.Yes) { eventMatrixUpDown.Value = destHeader.matrixID; eventAreaDataUpDown.Value = destHeader.areaDataID; + + Helpers.DisableHandlers(); selectEventComboBox.SelectedIndex = destHeader.eventFileID; + ChangeLoadedEventFile(destHeader.eventFileID, destHeaderID); + CenterEventViewOnEntities(); - return; } + return; } eventMatrixUpDown.Value = destHeader.matrixID; eventAreaDataUpDown.Value = destHeader.areaDataID; + + Helpers.DisableHandlers(); selectEventComboBox.SelectedIndex = destHeader.eventFileID; + ChangeLoadedEventFile(destHeader.eventFileID, destHeaderID); + warpsListBox.SelectedIndex = destAnchor; centerEventViewOnSelectedEvent_Click(sender, e); @@ -9945,17 +9957,17 @@ namespace DSPRE { string[] abilityNames = RomInfo.GetAbilityNames(); string[] moveNames = RomInfo.GetAttackNames(); - Helpers.statusLabelMessage("Setting up Pokemon Data Editor..."); + Helpers.statusLabelMessage("Setting up Pokémon Data Editor..."); Update(); DSUtils.TryUnpackNarcs(new List { DirNames.personalPokeData, DirNames.learnsets, DirNames.evolutions, DirNames.monIcons }); RomInfo.SetMonIconsPalTableAddress(); PokemonEditor pde = new PokemonEditor(itemNames, abilityNames, moveNames); - pde.ShowDialog(); - Helpers.statusLabelMessage(); Update(); + + pde.ShowDialog(); } private void overlayEditorToolStripMenuItem_Click(object sender, EventArgs e) { diff --git a/DS_Map/Main Window.resx b/DS_Map/Main Window.resx index 102933f..31fbb5d 100644 --- a/DS_Map/Main Window.resx +++ b/DS_Map/Main Window.resx @@ -118,834 +118,49 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - 533, 20 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN - fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9 - hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC - 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w - 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2 - gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i - 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU - IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm - Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei - zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT - 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg - CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8 - SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu - VRmTF6ps3wAAAABJRU5ErkJggg== - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG - hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg== + vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl + gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG - hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg== + vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl + gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG - hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg== + vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl + gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt - YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr - Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG - GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM - x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt - YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr - Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG - GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM - x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG - hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG - GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM - x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt - YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr - Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG - hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG - GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM - x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt - YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr - Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG - hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG - hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV - gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS - AAAAAElFTkSuQmCC - - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt - YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr - Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG - GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM - x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa - 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN - 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E - x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ - xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3 - uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC - X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt - YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr - Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG - GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM - x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa - 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN - 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E - x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ - xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3 - uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC - X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE - RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a - J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk - C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx - HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo - B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp - jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv - p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS - SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH - 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa - 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN - 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E - x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ - xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3 - uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC - X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE - RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a - J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk - C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx - HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo - B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp - jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv - p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS - SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH - 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa - 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN - 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E - x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ - xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3 - uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC - X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE - RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a - J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk - C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx - HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo - B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp - jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv - p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS - SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH - 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa - 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN - 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E - x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ - xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3 - uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC - X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE - RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a - J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk - C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx - HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo - B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp - jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv - p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS - SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH - 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII= + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC @@ -1036,6 +251,786 @@ AQUBgAEBAa8BywEAAQEBQAEFAYABAQGgAQsBAAH9AUABBQGAAQEBoAF7ARgBxQFAAQUBwAEDAaABiwEk Ae0BQAEFAcABAwGgAbMBJAHNAUABBQHgAQcBoAGnARgB7QFAAQUB8AEPAb8BzwEAAf0BfwH9AfwBPwGA AR8BAAEBAQABAQL/Cw== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + 533, 20 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa + eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8 + OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab + 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd + 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk + 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg + hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI + i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh + LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs + hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru + WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ + WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF + unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO + bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA + AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg + jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8 + 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO + bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA + AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg + jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8 + 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl + gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg + jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8 + 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO + bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA + AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl + gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg + jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8 + 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO + bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA + AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl + gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl + gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA + HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF + TkSuQmCC + + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO + bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA + AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg + jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8 + 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD + ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP + 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN + YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7 + n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5 + 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z + 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO + bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA + AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg + jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8 + 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD + ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP + 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN + YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7 + n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5 + 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z + 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ + E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp + Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU + iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu + M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp + WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc + XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr + NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP + gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6 + zeXfJelqUKnUyCAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD + ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP + 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN + YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7 + n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5 + 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z + 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ + E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp + Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU + iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu + M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp + WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc + XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr + NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP + gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6 + zeXfJelqUKnUyCAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD + ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP + 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN + YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7 + n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5 + 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z + 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ + E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp + Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU + iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu + M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp + WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc + XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr + NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP + gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6 + zeXfJelqUKnUyCAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD + ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP + 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN + YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7 + n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5 + 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z + 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ + E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp + Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU + iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu + M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp + WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc + XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr + NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP + gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6 + zeXfJelqUKnUyCAAAAAASUVORK5CYII= @@ -1047,8 +1042,11 @@ 386, 19 + + 533, 20 + - 100 + 57 diff --git a/DS_Map/PatchToolboxDialog.cs b/DS_Map/PatchToolboxDialog.cs index 3749d5e..c96b456 100644 --- a/DS_Map/PatchToolboxDialog.cs +++ b/DS_Map/PatchToolboxDialog.cs @@ -258,18 +258,18 @@ namespace DSPRE public static bool CheckScriptsStandardizedItemNumbers() { ScriptFile itemScript = new ScriptFile(RomInfo.itemScriptFileNumber); - if (itemScript.allScripts.Count - 1 < new TextArchive(RomInfo.itemNamesTextNumber).messages.Count) - { - return false; - } + //if (itemScript.allScripts.Count - 1 < new TextArchive(RomInfo.itemNamesTextNumber).messages.Count) + //{ + // return false; + //} - for (ushort i = 0; i < itemScript.allScripts.Count - 1; i++) - { - if (BitConverter.ToUInt16(itemScript.allScripts[i].commands[0].cmdParams[1], 0) != i || BitConverter.ToUInt16(itemScript.allScripts[i].commands[1].cmdParams[1], 0) != 1) - { - return false; - } - } + //for (ushort i = 0; i < itemScript.allScripts.Count - 1; i++) + //{ + // if (BitConverter.ToUInt16(itemScript.allScripts[i].commands[0].Parameters[1].RawData, 0) != i || BitConverter.ToUInt16(itemScript.allScripts[i].commands[1].Parameters[1].RawData, 0) != 1) + // { + // return false; + // } + //} return true; } @@ -590,12 +590,12 @@ namespace DSPRE ScriptFile itemScriptFile = new ScriptFile(RomInfo.itemScriptFileNumber); // Create map for: script no. -> vanilla item - int[] vanillaItemsArray = new int[itemScriptFile.allScripts.Count - 1]; - - for (int i = 0; i < itemScriptFile.allScripts.Count - 1; i++) - { - vanillaItemsArray[i] = BitConverter.ToInt16(itemScriptFile.allScripts[i].commands[0].cmdParams[1], 0); - }; + //int[] vanillaItemsArray = new int[itemScriptFile.allScripts.Count - 1]; + // + //for (int i = 0; i < itemScriptFile.allScripts.Count - 1; i++) + //{ + // vanillaItemsArray[i] = BitConverter.ToInt16(itemScriptFile.allScripts[i].commands[0].Parameters[1].RawData, 0); + //}; // Parse all event files and fix instances of ground items according to the new order int cnt = Filesystem.GetEventFileCount(); @@ -617,7 +617,7 @@ namespace DSPRE if (isItem) { int itemScriptID = eventFile.overworlds[j].scriptNumber - (itemScrMin - 1); - eventFile.overworlds[j].scriptNumber = (ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1]); + //eventFile.overworlds[j].scriptNumber = (ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1]); dirty = true; } } @@ -644,29 +644,29 @@ namespace DSPRE using (DSUtils.EasyWriter ewr = new DSUtils.EasyWriter(ow9path, ow9offs)) { - ewr.Write((ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1])); + //ewr.Write((ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1])); } } // Sort scripts in the Script File according to item indices int itemCount = new TextArchive(RomInfo.itemNamesTextNumber).messages.Count; - ScriptCommandContainer executeGive = new ScriptCommandContainer((uint)itemCount + 1, itemScriptFile.allScripts[itemScriptFile.allScripts.Count - 1]); + //ScriptCommandContainer executeGive = new ScriptCommandContainer((uint)itemCount + 1, itemScriptFile.allScripts[itemScriptFile.allScripts.Count - 1]); - itemScriptFile.allScripts.Clear(); + //itemScriptFile.allScripts.Clear(); - for (ushort i = 0; i < itemCount; i++) - { - List cmdList = new List { - new ScriptCommand("SetVar 0x8008 " + i), - new ScriptCommand("SetVar 0x8009 0x1"), - new ScriptCommand("Jump Function_#1") - }; - - itemScriptFile.allScripts.Add(new ScriptCommandContainer((ushort)(i + 1), ScriptFile.ContainerTypes.Script, commandList: cmdList)); - } - - itemScriptFile.allScripts.Add(executeGive); - itemScriptFile.allFunctions[0].usedScriptID = itemCount + 1; + //for (ushort i = 0; i < itemCount; i++) + //{ + // List cmdList = new List { + // new ScriptCommand("SetVar 0x8008 " + i), + // new ScriptCommand("SetVar 0x8009 0x1"), + // new ScriptCommand("Jump Function_#1") + // }; + // + // itemScriptFile.allScripts.Add(new ScriptCommandContainer((ushort)(i + 1), ScriptFile.ContainerTypes.Script, commandList: cmdList)); + //} + // + //itemScriptFile.allScripts.Add(executeGive); + //itemScriptFile.allFunctions[0].usedScriptID = itemCount + 1; itemScriptFile.SaveToFileDefaultDir(RomInfo.itemScriptFileNumber, showSuccessMessage: false); MessageBox.Show("Operation successful.", "Process completed.", MessageBoxButtons.OK, MessageBoxIcon.Information); diff --git a/DS_Map/ROMFiles/LearnsetData.cs b/DS_Map/ROMFiles/LearnsetData.cs index ade3efb..ca44fdc 100644 --- a/DS_Map/ROMFiles/LearnsetData.cs +++ b/DS_Map/ROMFiles/LearnsetData.cs @@ -8,6 +8,7 @@ namespace DSPRE { internal class LearnsetData : RomFile { public static readonly int bitsMove = 9; public static readonly int bitsLevel = 7; + public static readonly int VanillaLimit = 20; public readonly UniqueList<(byte level, ushort move)> list; diff --git a/DS_Map/ROMFiles/ScriptActionContainer.cs b/DS_Map/ROMFiles/ScriptActionContainer.cs deleted file mode 100644 index a004d56..0000000 --- a/DS_Map/ROMFiles/ScriptActionContainer.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections.Generic; - -namespace DSPRE.ROMFiles { - public class ScriptActionContainer { - public List commands; - public uint manualUserID; - - public ScriptActionContainer(uint actionNumber, List commands = null) { - manualUserID = actionNumber; - this.commands = commands; - } - } -} diff --git a/DS_Map/ROMFiles/ScriptCommandContainer.cs b/DS_Map/ROMFiles/ScriptCommandContainer.cs deleted file mode 100644 index 5654980..0000000 --- a/DS_Map/ROMFiles/ScriptCommandContainer.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; - -namespace DSPRE.ROMFiles { - public class ScriptCommandContainer { - public List commands; - public uint manualUserID; - public int usedScriptID; //useScript ID referenced by this Script/Function - public ScriptFile.ContainerTypes containerType; - internal static readonly string functionStart; - - public ScriptCommandContainer(uint scriptNumber, ScriptFile.ContainerTypes containerType, int usedScriptID = -1, List commandList = null) { - manualUserID = scriptNumber; - this.usedScriptID = usedScriptID; - this.containerType = containerType; - commands = commandList; - } - - public ScriptCommandContainer(uint newID, ScriptCommandContainer toCopy) { - manualUserID = newID; - usedScriptID = toCopy.usedScriptID; - containerType = toCopy.containerType; - commands = new List(toCopy.commands); //command parameters need to be copied recursively - } - } -} diff --git a/DS_Map/ROMFiles/ScriptFile.cs b/DS_Map/ROMFiles/ScriptFile.cs index 6040972..f037539 100644 --- a/DS_Map/ROMFiles/ScriptFile.cs +++ b/DS_Map/ROMFiles/ScriptFile.cs @@ -1,8 +1,8 @@ -using DSPRE.Resources; using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; using System.Windows.Forms; using static DSPRE.RomInfo; @@ -11,11 +11,12 @@ namespace DSPRE.ROMFiles { /// Class to store script file data in Pokémon NDS games /// public class ScriptFile : RomFile { - //this enum doesn't really make much sense now but it will, once scripts can be called and jumped to + public List CommandSequence { get; set; } = new List(); + public Dictionary OffsetToLabelMap { get; set; } = new Dictionary(); public enum ContainerTypes { - Function, Action, - Script + Script, + Label }; public struct ContainerReference { @@ -23,31 +24,32 @@ namespace DSPRE.ROMFiles { public uint offsetInFile; } - public List allScripts = new List(); - public List allFunctions = new List(); - public List allActions = new List(); public int fileID = -1; public bool isLevelScript = new bool(); - public bool hasNoScripts { get { return fileID == int.MaxValue; } } + public bool HasNoScripts { get { return fileID == int.MaxValue; } } public static readonly char[] specialChars = { 'x', 'X', '#', '.', '_' }; - public ScriptFile(Stream fs, bool readFunctions = true, bool readActions = true) { - List scriptOffsets = new List(); - List functionOffsets = new List(); - List movementOffsets = new List(); + public ScriptFile(Stream fs) { + // Initialize collections + CommandSequence = new List(); + OffsetToLabelMap = new Dictionary(); using (BinaryReader br = new BinaryReader(fs)) { - /* Read script offsets from the header */ - isLevelScript = true; // Is Level Script as long as magic number FD13 doesn't exist + // Read header to find entry points + List entryPointOffsets = new List(); + isLevelScript = true; // Is Level Script until proved otherwise + try { + int entryPointIndex = 0; while (true) { + long headerPos = br.BaseStream.Position; uint checker = br.ReadUInt16(); br.BaseStream.Position -= 0x2; uint value = br.ReadUInt32(); - if (value == 0 && scriptOffsets.Count == 0) { + if (value == 0 && entryPointOffsets.Count == 0) { isLevelScript = true; break; } @@ -58,12 +60,17 @@ namespace DSPRE.ROMFiles { break; } - int offsetFromStart = (int)(value + br.BaseStream.Position); // Don't change order of addition - scriptOffsets.Add(offsetFromStart); + int offsetFromStart = (int)(value + headerPos + 4); + entryPointOffsets.Add(offsetFromStart); + + // Create entry point label + string entryLabel = $"script_{entryPointIndex}"; + OffsetToLabelMap[offsetFromStart] = entryLabel; + entryPointIndex++; } } catch (EndOfStreamException) { if (!isLevelScript) { - MessageBox.Show("Script File couldn't be read correctly.", "Unexpected EOF", MessageBoxButtons.OK, MessageBoxIcon.Error); // Now this may appear in a few level scripts that don't have a 4-byte aligned "00 00 00 00" + MessageBox.Show("Script File couldn't be read correctly.", "Unexpected EOF", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -71,90 +78,56 @@ namespace DSPRE.ROMFiles { return; } - /* Read scripts */ - for (uint current = 0; current < scriptOffsets.Count; current++) { - int index = scriptOffsets.FindIndex(x => x == scriptOffsets[(int)current]); // Check for UseScript + // Skip the 0xFD13 marker + br.ReadUInt16(); - if (index == current) { - br.BaseStream.Position = scriptOffsets[(int)current]; + // Process commands until end of file + while (br.BaseStream.Position < br.BaseStream.Length) { + int currentOffset = (int)br.BaseStream.Position; - List cmdList = new List(); - bool endScript = new bool(); - while (!endScript) { - ScriptCommand cmd = ReadCommand(br, ref functionOffsets, ref movementOffsets); - if (cmd.cmdParams is null) { - return; - } + // Sometimes we might hit padding bytes - try to detect and skip + if (br.BaseStream.Position + 2 <= br.BaseStream.Length) { + byte[] peekBytes = br.ReadBytes(2); + br.BaseStream.Position -= 2; - cmdList.Add(cmd); - - if (ScriptDatabase.endCodes.Contains((ushort)cmd.id)) { - endScript = true; - } - } - - allScripts.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Script, commandList: cmdList)); - } else { - allScripts.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Script, usedScriptID: index + 1)); - } - } - - /* Read functions */ - if (readFunctions) { - for (uint current = 0; current < functionOffsets.Count; current++) { - br.BaseStream.Position = functionOffsets[(int)current]; - int posInList = scriptOffsets.IndexOf(functionOffsets[(int)current]); // Check for UseScript - - if (posInList == -1) { - List cmdList = new List(); - bool endFunction = new bool(); - while (!endFunction) { - ScriptCommand command = ReadCommand(br, ref functionOffsets, ref movementOffsets); - if (command.cmdParams is null) { - return; - } - - cmdList.Add(command); - if (ScriptDatabase.endCodes.Contains((ushort)command.id)) { - endFunction = true; - } - } - - allFunctions.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Function, commandList: cmdList)); - } else { - allFunctions.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Function, usedScriptID: posInList + 1)); + // Check if these look like padding + if (peekBytes[0] == 0 && peekBytes[1] == 0) { + // Skip padding byte + br.ReadByte(); + continue; } } - } - if (readActions) { - /* Read movements */ - for (uint current = 0; current < movementOffsets.Count; current++) { - br.BaseStream.Position = movementOffsets[(int)current]; - - List cmdList = new List(); - bool endMovement = new bool(); - while (!endMovement) { - ushort id = br.ReadUInt16(); - if (id == 0xFE) { - endMovement = true; - cmdList.Add(new ScriptAction(id, 0)); - } else { - cmdList.Add(new ScriptAction(id, br.ReadUInt16())); - } - } - - allActions.Add(new ScriptActionContainer(current + 1, commands: cmdList)); + ScriptCommand cmd = ReadCommand(br); + if (cmd == null || cmd.id == null) { + break; // End of file or error } + + // Check if this is an entry point or jump target + bool isEntryPoint = false; + int entryPointIndex = -1; + string label = null; + + if (OffsetToLabelMap.TryGetValue(currentOffset, out string existingLabel)) { + label = existingLabel; + isEntryPoint = existingLabel.StartsWith("script_"); + if (isEntryPoint) { + entryPointIndex = int.Parse(existingLabel.Substring("script_".Length)); + } + } + + // Add to command sequence + CommandSequence.Add(new ScriptCommandPosition( + cmd, currentOffset, label, isEntryPoint, entryPointIndex)); } } } - public ScriptFile(int fileID, bool readFunctions = true, bool readActions = true) : this(getFileStream(fileID), readFunctions, readActions) { + public ScriptFile(int fileID) : this(getFileStream(fileID)) { this.fileID = fileID; } - static FileStream getFileStream(int fileID) { + public static FileStream getFileStream(int fileID) { string path = Filesystem.GetScriptPath(fileID); return new FileStream(path, FileMode.OpenOrCreate); } @@ -164,732 +137,441 @@ namespace DSPRE.ROMFiles { return $"{prefix}Script File " + this.fileID; } - public ScriptFile(List scripts, List functions, List movements, int fileID = -1) { - allScripts = scripts; - allFunctions = functions; - allActions = movements; - isLevelScript = false; - } - - public ScriptFile(IEnumerable scriptLines, IEnumerable functionLines, IEnumerable actionLines, int fileID = -1) { - //TODO: give user the possibility to jump to/call a script - //once it's done, this Predicate below will be the only one needed, since there will be no distinction between - //a script and a function - bool functionEndCondition(List<(int linenum, string text)> source, int x, ushort? id) { - return source[x].text.TrimEnd().IgnoreCaseEquals(RomInfo.ScriptCommandNamesDict[0x0002]) //End - || source[x].text.IndexOf(RomInfo.ScriptCommandNamesDict[0x0016] + ' ' + ContainerTypes.Function.ToString(), StringComparison.InvariantCultureIgnoreCase) >= 0 //Jump Function_# - || source[x].text.TrimEnd().IgnoreCaseEquals(RomInfo.ScriptCommandNamesDict[0x001B]) - || ScriptDatabase.endCodes.Contains(id); - } //Return - - bool scriptEndCondition(List<(int linenum, string text)> source, int x, ushort? id) { - return source[x].text.TrimEnd().IgnoreCaseEquals(RomInfo.ScriptCommandNamesDict[0x0002]) //End - || source[x].text.IndexOf(RomInfo.ScriptCommandNamesDict[0x0016] + ' ' + ContainerTypes.Function.ToString()) >= 0 //Jump Function_# - || ScriptDatabase.endCodes.Contains(id); - } - - allScripts = ReadCommandsFromLines(scriptLines.ToList(), ContainerTypes.Script, scriptEndCondition); //Jump + whitespace - if (allScripts is null) { - return; - } - - if (allScripts.Count <= 0) { - this.fileID = int.MaxValue; - return; - } - - if (functionLines != null) { - allFunctions = ReadCommandsFromLines(functionLines.ToList(), ContainerTypes.Function, functionEndCondition); //Jump + whitespace - if (allFunctions is null) { - return; - } - } - - if (actionLines != null) { - allActions = ReadActionsFromLines(actionLines.ToList()); - if (allActions is null) { - return; - } - } - + public ScriptFile(IEnumerable lines, int fileID = -1) { + CommandSequence = new List(); + OffsetToLabelMap = new Dictionary(); this.fileID = fileID; + + int currentOffset = 0; + string currentLabel = null; + int entryPointIndex = 0; + bool isCurrentLabelEntryPoint = false; // Track this instead + + // Parse each line + foreach (var line in lines) { + string trimmedLine = line.Trim(); + + // Skip empty lines + if (string.IsNullOrWhiteSpace(trimmedLine)) { + continue; + } + + // Check if this is a label + if (trimmedLine.EndsWith(":")) { + currentLabel = trimmedLine.Substring(0, trimmedLine.Length - 1); + + // Track if it's an entry point + isCurrentLabelEntryPoint = currentLabel.StartsWith("script_"); + if (isCurrentLabelEntryPoint) { + if (int.TryParse(currentLabel.Substring("script_".Length), out int index)) { + entryPointIndex = index; + } + } + + continue; + } + + // Parse the command + ScriptCommand cmd = new ScriptCommand(trimmedLine); + if (cmd.id == null) { + continue; // Skip invalid commands + } + + // Calculate the size of this command for offset tracking + int cmdSize = 2; // Command ID (2 bytes) + foreach (var param in cmd.Parameters) { + cmdSize += param.RawData.Length; + } + + // Use the tracked entry point flag + int epIndex = isCurrentLabelEntryPoint ? entryPointIndex : -1; + + CommandSequence.Add(new ScriptCommandPosition( + cmd, currentOffset, currentLabel, isCurrentLabelEntryPoint, epIndex)); + + // Map the offset to the label for jump targets + if (currentLabel != null) { + OffsetToLabelMap[currentOffset] = currentLabel; + currentLabel = null; // Reset label + isCurrentLabelEntryPoint = false; // Reset entry point flag + } + + // Update offset for next command + currentOffset += cmdSize; + } } - private ScriptCommand ReadCommand(BinaryReader dataReader, ref List functionOffsets, ref List actionOffsets) { - ushort id = dataReader.ReadUInt16(); - List parameterList = new List(); + private ScriptCommand ReadCommand(BinaryReader br) { + // Check if we've reached the end of the file + if (br.BaseStream.Position >= br.BaseStream.Length) { + return null; + } - /* How to read parameters for different commands for DPPt*/ - switch (RomInfo.gameFamily) { - case GameFamilies.DP: - case GameFamilies.Plat: - switch (id) { - case 0x16: //Jump - case 0x1A: //Call - ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets); - break; - case 0x17: //JumpIfObjID - case 0x18: //JumpIfBgID - case 0x19: //JumpIfPlayerDir - case 0x1C: //JumpIf - case 0x1D: //CallIf - //in the case of JumpIf and CallIf, the first param is a comparisonOperator - //for JumpIfPlayerDir it's a directionID - //for JumpIfObjID, it's an EventID - parameterList.Add(new byte[] { dataReader.ReadByte() }); - ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets); - break; - case 0x5E: // Movement - parameterList.Add(BitConverter.GetBytes(dataReader.ReadUInt16())); - ProcessRelativeJump(dataReader, ref parameterList, ref actionOffsets); - break; - case 0x1CF: - case 0x1D0: - case 0x1D1: { - byte parameter1 = dataReader.ReadByte(); - parameterList.Add(new byte[] { parameter1 }); - if (parameter1 == 0x2) { - parameterList.Add(dataReader.ReadBytes(2)); //Read additional u16 if first param read is 2 - } - } - break; - case 0x21D: { - ushort parameter1 = dataReader.ReadUInt16(); - parameterList.Add(BitConverter.GetBytes(parameter1)); + try { + ushort id = br.ReadUInt16(); + List parameters = new List(); - switch (parameter1) { - case 0: - case 1: - case 2: - case 3: - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 4: - case 5: - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 6: - break; - } - } - break; - case 0x235: { - short parameter1 = dataReader.ReadInt16(); - parameterList.Add(BitConverter.GetBytes(parameter1)); + // Track the original position for jump calculations + long commandStartPos = br.BaseStream.Position - 2; - switch (parameter1) { - case 0x1: - case 0x3: - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 0x4: - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 0x0: - case 0x6: - parameterList.Add(dataReader.ReadBytes(2)); - break; - default: - break; - } - } - break; - case 0x23E: { - short parameter1 = dataReader.ReadInt16(); - parameterList.Add(BitConverter.GetBytes(parameter1)); + switch (gameFamily) { + case GameFamilies.Plat: + switch (id) { + case 0x16: // Jump + case 0x1A: // Call + ProcessRelativeJumpLinear(br, parameters); + break; - switch (parameter1) { - case 0x1: - case 0x3: - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 0x5: - case 0x6: - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - break; - default: - break; + case 0x17: // JumpIfObjID + case 0x18: // JumpIfEventID + case 0x19: // JumpIfPlayerDir + case 0x1C: // JumpIf + case 0x1D: // CallIf + // First parameter (condition) + parameters.Add(new ScriptParameter(new byte[] { br.ReadByte() })); + // Then jump target + ProcessRelativeJumpLinear(br, parameters); + break; + + case 0x5E: // Movement + parameters.Add(new ScriptParameter(BitConverter.GetBytes(br.ReadUInt16()))); + ProcessRelativeJumpLinear(br, parameters); + break; + + case 0x1CF: + case 0x1D0: + case 0x1D1: { + byte parameter1 = br.ReadByte(); + parameters.Add(new ScriptParameter(new byte[] { parameter1 })); + if (parameter1 == 0x2) { + parameters.Add(new ScriptParameter(br.ReadBytes(2))); //Read additional u16 if first param read is 2 + } } - } - break; - case 0x2C4: { - byte parameter1 = dataReader.ReadByte(); - parameterList.Add(new byte[] { parameter1 }); - if (parameter1 == 0 || parameter1 == 1) { - parameterList.Add(dataReader.ReadBytes(2)); + break; + case 0x21D: { + ushort parameter1 = br.ReadUInt16(); + parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1))); + + switch (parameter1) { + case 0: + case 1: + case 2: + case 3: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 4: + case 5: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 6: + break; + } } - } - break; - case 0x2C5: { + break; + case 0x235: { + short parameter1 = br.ReadInt16(); + parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1))); + + switch (parameter1) { + case 0x1: + case 0x3: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 0x4: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 0x0: + case 0x6: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + default: + break; + } + } + break; + case 0x23E: { + short parameter1 = br.ReadInt16(); + parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1))); + + switch (parameter1) { + case 0x1: + case 0x3: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 0x5: + case 0x6: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + default: + break; + } + } + break; + case 0x2C4: { + byte parameter1 = br.ReadByte(); + parameters.Add(new ScriptParameter(new byte[] { parameter1 })); + if (parameter1 == 0 || parameter1 == 1) { + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + } + } + break; + case 0x2C5: { + if (RomInfo.gameVersion == GameVersions.Platinum) { + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + } else { + goto default; + } + } + break; + case 0x2C6: + case 0x2C9: + case 0x2CA: + case 0x2CD: if (RomInfo.gameVersion == GameVersions.Platinum) { - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); + break; } else { goto default; } - } - break; - case 0x2C6: - case 0x2C9: - case 0x2CA: - case 0x2CD: - if (RomInfo.gameVersion == GameVersions.Platinum) { + case 0x2CF: + if (RomInfo.gameVersion == GameVersions.Platinum) { + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + } else { + goto default; + } + break; - } else { - goto default; - } - case 0x2CF: - if (RomInfo.gameVersion == GameVersions.Platinum) { - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - } else { - goto default; - } + default: + // Standard command handling + if (RomInfo.ScriptCommandParametersDict.TryGetValue(id, out byte[] paramSizes)) { + foreach (int size in paramSizes) { + parameters.Add(new ScriptParameter(br.ReadBytes(size))); + } + } + break; + } + break; + case GameFamilies.HGSS: + switch (id) { + case 0x16: //Jump + case 0x1A: //Call + ProcessRelativeJumpLinear(br, parameters); + break; + + case 0x17: //JumpIfObjID + case 0x18: //JumpIfBgID + case 0x19: //JumpIfPlayerDir + case 0x1C: //JumpIf + case 0x1D: //CallIf + parameters.Add(new ScriptParameter(new byte[] { br.ReadByte() })); //in the case of JumpIf and CallIf, the first param is a comparisonOperator + ProcessRelativeJumpLinear(br, parameters); + break; + + case 0x5E: // Movement + parameters.Add(new ScriptParameter(BitConverter.GetBytes(br.ReadUInt16()))); //in the case of Movement, the first param is an overworld ID + ProcessRelativeJumpLinear(br, parameters); + break; + + case 0x190: + case 0x191: + case 0x192: { + byte parameter1 = br.ReadByte(); + parameters.Add(new ScriptParameter(new byte[] { parameter1 })); + if (parameter1 == 0x2) { + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + } + } + break; + + case 0x1D1: // Number of parameters differ depending on the first parameter value + { + short parameter1 = br.ReadInt16(); + parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1))); + switch (parameter1) { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 0x4: + case 0x5: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 0x6: + break; + case 0x7: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + default: + break; + } + } + break; + + case 0x1E9: // Number of parameters differ depending on the first parameter value + { + short parameter1 = br.ReadInt16(); + parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1))); + switch (parameter1) { + case 0x0: + break; + case 0x1: + case 0x2: + case 0x3: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 0x4: + break; + case 0x5: + case 0x6: + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + parameters.Add(new ScriptParameter(br.ReadBytes(2))); + break; + case 0x7: + case 0x8: + break; + default: + break; + } + } break; - default: - addParametersToList(ref parameterList, id, dataReader); - break; - } + + default: + // For standard commands, read parameters based on definition + if (RomInfo.ScriptCommandParametersDict.TryGetValue(id, out byte[] paramSizes)) { + foreach (int size in paramSizes) { + parameters.Add(new ScriptParameter(br.ReadBytes(size))); + } + } + break; + } break; - case GameFamilies.HGSS: - switch (id) { - case 0x16: //Jump - case 0x1A: //Call - ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets); - break; - case 0x17: //JumpIfObjID - case 0x18: //JumpIfBgID - case 0x19: //JumpIfPlayerDir - case 0x1C: //JumpIf - case 0x1D: //CallIf - parameterList.Add(new byte[] { dataReader.ReadByte() }); //in the case of JumpIf and CallIf, the first param is a comparisonOperator - ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets); - break; - case 0x5E: // Movement - parameterList.Add(BitConverter.GetBytes(dataReader.ReadUInt16())); //in the case of Movement, the first param is an overworld ID - ProcessRelativeJump(dataReader, ref parameterList, ref actionOffsets); - break; - case 0x190: - case 0x191: - case 0x192: { - byte parameter1 = dataReader.ReadByte(); - parameterList.Add(new byte[] { parameter1 }); - if (parameter1 == 0x2) { - parameterList.Add(dataReader.ReadBytes(2)); - } - } - break; - case 0x1D1: // Number of parameters differ depending on the first parameter value - { - short parameter1 = dataReader.ReadInt16(); - parameterList.Add(BitConverter.GetBytes(parameter1)); - switch (parameter1) { - case 0x0: - case 0x1: - case 0x2: - case 0x3: - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 0x4: - case 0x5: - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 0x6: - break; - case 0x7: - parameterList.Add(dataReader.ReadBytes(2)); - break; - default: - break; - } - } - break; - case 0x1E9: // Number of parameters differ depending on the first parameter value - { - short parameter1 = dataReader.ReadInt16(); - parameterList.Add(BitConverter.GetBytes(parameter1)); - switch (parameter1) { - case 0x0: - break; - case 0x1: - case 0x2: - case 0x3: - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 0x4: - break; - case 0x5: - case 0x6: - parameterList.Add(dataReader.ReadBytes(2)); - parameterList.Add(dataReader.ReadBytes(2)); - break; - case 0x7: - case 0x8: - break; - default: - break; - } - } - break; - default: - addParametersToList(ref parameterList, id, dataReader); - break; - } - - break; - } - - return new ScriptCommand(id, parameterList); - } - - private void ProcessRelativeJump(BinaryReader dataReader, ref List parameterList, ref List offsetsList) { - int relativeOffset = dataReader.ReadInt32(); - int offsetFromScriptFileStart = (int)(relativeOffset + dataReader.BaseStream.Position); - - if (!offsetsList.Contains(offsetFromScriptFileStart)) { - offsetsList.Add(offsetFromScriptFileStart); - } - - int functionNumber = offsetsList.IndexOf(offsetFromScriptFileStart); - if (functionNumber < 0) { - throw new InvalidOperationException(); - } - - parameterList.Add(BitConverter.GetBytes(functionNumber + 1)); - } - - private void addParametersToList(ref List parameterList, ushort id, BinaryReader dataReader) { - Console.WriteLine("Loaded command id: " + id.ToString("X4")); - try { - foreach (int bytesToRead in RomInfo.ScriptCommandParametersDict[id]) { - parameterList.Add(dataReader.ReadBytes(bytesToRead)); } - } catch (NullReferenceException) { - MessageBox.Show("Script command " + id + "can't be handled for now." + - Environment.NewLine + "Reference offset 0x" + dataReader.BaseStream.Position.ToString("X"), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - parameterList = null; - return; - } catch { - MessageBox.Show("Error: ID Read - " + id + - Environment.NewLine + "Reference offset 0x" + dataReader.BaseStream.Position.ToString("X"), "Unrecognized script command", MessageBoxButtons.OK, MessageBoxIcon.Error); - parameterList = null; - return; - } - } - private void AddReference(ref List references, ushort commandID, List parameterList, int pos, ScriptCommandContainer cont) { - if (ScriptDatabase.commandsWithRelativeJump.TryGetValue(commandID, out int parameterWithRelativeJump)) { - uint invokedID = BitConverter.ToUInt32(parameterList[parameterWithRelativeJump], 0); // Jump, Call - - if (commandID == 0x005E) - references.Add(new ScriptReference(cont.containerType, cont.manualUserID, ContainerTypes.Action, invokedID, pos - 4)); - else { - references.Add(new ScriptReference(cont.containerType, cont.manualUserID, ContainerTypes.Function, invokedID, pos - 4)); - } - } - } - - private List ReadCommandsFromLines(List linelist, ContainerTypes containerType, Func, int, ushort?, bool> endConditions) { - List<(int linenum, string text)> lineSource = new List<(int linenum, string text)>(); - - for (int l = 0; l < linelist.Count; l++) { - string cur = linelist[l]; - if (!string.IsNullOrWhiteSpace(cur)) { - lineSource.Add((l, cur)); - } - } - - List ls = new List(); - int i = 0; - - try { - uint scriptNumber = 0; - - while (i < lineSource.Count) { - if (scriptNumber == 0) { - int positionOfScriptNumber; - int positionOfScriptKeyword = lineSource[i].text.IndexOf(containerType.ToString(), StringComparison.InvariantCultureIgnoreCase); - - if (positionOfScriptKeyword > 0) { - MessageBox.Show("Unrecognized container keyword: \"" + lineSource[i] + '"', "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return null; - } else if (positionOfScriptKeyword < 0) { - i++; - continue; - } else { - if ((positionOfScriptNumber = lineSource[i].text.IndexOfFirstNumber()) < positionOfScriptKeyword) { - MessageBox.Show("Unspecified Script/Function label.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return null; - } - } - - scriptNumber = uint.Parse(lineSource[i++].text.Substring(positionOfScriptNumber).Split()[0].Replace(":", "")); - } - - if (lineSource[i].text.IndexOf("UseScript", StringComparison.InvariantCultureIgnoreCase) >= 0) { - int useScriptNumber = short.Parse(lineSource[i].text.Substring(1 + lineSource[i].text.IndexOf('#'))); - ls.Add(new ScriptCommandContainer(scriptNumber, containerType, useScriptNumber)); - i++; - } else { - /* Read script commands */ - List cmdList = new List(); - ScriptCommand lastRead; - - do { - lastRead = new ScriptCommand(lineSource[i].text, lineSource[i].linenum + 1); - if (lastRead.id is null) { - return null; - } - - cmdList.Add(lastRead); - } - while (!endConditions(lineSource, i++, lastRead.id)); - - ls.Add(new ScriptCommandContainer(scriptNumber, containerType, commandList: cmdList)); - } - - scriptNumber = 0; - } - } catch (ArgumentOutOfRangeException) { - MessageBox.Show($"Unexpectedly reached end of lines.\n\n" + - $"Last line index: {lineSource[i].linenum}.\n" + - $"Managed to parse {ls.Count} Command Containers.", "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return new ScriptCommand(id, parameters); + } catch (Exception ex) { + Console.WriteLine($"Error reading command at offset {br.BaseStream.Position}: {ex.Message}"); return null; } - - return ls; } - private List ReadActionsFromLines(List linelist) { - List<(int linenum, string text)> lineSource = new List<(int linenum, string text)>(); + private void ProcessRelativeJumpLinear(BinaryReader br, List parameters) { + // Read the relative offset + int relativeOffset = br.ReadInt32(); - for (int l = 0; l < linelist.Count; l++) { - string cur = linelist[l]; - if (!string.IsNullOrWhiteSpace(cur)) { - lineSource.Add((l, cur)); - } + // Calculate absolute target + int targetOffset = (int)(relativeOffset + br.BaseStream.Position); + + // Add to label map if not already there + if (!OffsetToLabelMap.ContainsKey(targetOffset)) { + string labelName = $"label_0x{targetOffset:X}"; + OffsetToLabelMap[targetOffset] = labelName; } - List ls = new List(); - int i = 0; + // Create jump parameter + string targetLabel = OffsetToLabelMap[targetOffset]; + ScriptParameter jumpParam = new ScriptParameter(relativeOffset, targetLabel) { + Type = ScriptParameter.ParameterType.RelativeJump + }; + parameters.Add(jumpParam); + } - try { - uint actionNumber = 0; + // Convert to text - outputs commands in the order they appear in the binary + public string ToText() { + StringBuilder sb = new StringBuilder(); - while (i < lineSource.Count) { - if (actionNumber == 0) { - int positionOfActionNumber; - int positionOfActionKeyword = lineSource[i].text.IndexOf(ContainerTypes.Action.ToString(), StringComparison.InvariantCultureIgnoreCase); - - if (positionOfActionKeyword > 0) { - MessageBox.Show("Unrecognized container keyword: \"" + lineSource[i] + '"', "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return null; - } else if (positionOfActionKeyword < 0) { - i++; - continue; - } else { - if ((positionOfActionNumber = lineSource[i].text.IndexOfFirstNumber()) < positionOfActionKeyword) { - MessageBox.Show("Unspecified Action label.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return null; - } - } - - actionNumber = uint.Parse(lineSource[i].text.Substring(positionOfActionNumber).Split()[0].Replace(":", "")); - i++; - } - - List cmdList = new List(); - /* Read script actions */ - do { - ScriptAction toAdd = new ScriptAction(lineSource[i].text, lineSource[i].linenum + 1); - if (toAdd.id is null) { - return null; - } - - cmdList.Add(toAdd); - } - while (!lineSource[i++].text.IgnoreCaseEquals(RomInfo.ScriptActionNamesDict[0x00FE])); - - ls.Add(new ScriptActionContainer(actionNumber, commands: cmdList)); - actionNumber = 0; + foreach (var cmdPos in CommandSequence) { + // If this command needs a label, output it + if (!string.IsNullOrEmpty(cmdPos.Label)) { + sb.AppendLine($"\n{cmdPos.Label}:"); } - } catch (ArgumentOutOfRangeException) { - MessageBox.Show($"Unexpectedly reached end of lines.\n\n" + - $"Last line index: {i}.\n" + - $"Managed to parse {ls.Count} Command Containers.", "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return null; + + // Output the command (indented if not an entry point) + string indent = "\t"; + sb.AppendLine($"{indent}{cmdPos.Command.name}"); } - return ls; + return sb.ToString(); } public override byte[] ToByteArray() { MemoryStream newData = new MemoryStream(); using (BinaryWriter writer = new BinaryWriter(newData)) { - List scriptOffsets = new List(); //uint OFFSET, int Function/Script/Action ID - List functionOffsets = new List(); - List actionOffsets = new List(); + // First, find all entry points and their positions in the command sequence + var entryPoints = CommandSequence + .Where(c => c.IsEntryPoint) + .OrderBy(c => c.EntryPointIndex) + .ToList(); - List refList = new List(); + // Allocate space for header + long headerStart = writer.BaseStream.Position; + writer.BaseStream.Position += entryPoints.Count * 4; + writer.Write((ushort)0xFD13); // End of header marker - /* Allocate enough space for script pointers, which we do not know yet */ - try { - writer.BaseStream.Position += allScripts.Count * 0x4; - writer.Write((ushort)0xFD13); // Signal the end of header section - List useScriptCallers = new List(); + // Keep track of command offsets in the new file + Dictionary oldOffsetToNewOffset = new Dictionary(); - /* Write scripts */ - foreach (ScriptCommandContainer currentScript in allScripts) { - if (currentScript.usedScriptID == -1) { - scriptOffsets.Add(new ContainerReference() { - ID = currentScript.manualUserID, - offsetInFile = (uint)writer.BaseStream.Position - } - ); + // Write all commands sequentially + foreach (var cmdPos in CommandSequence) { + // Record the position of this command + oldOffsetToNewOffset[cmdPos.Offset] = writer.BaseStream.Position; - foreach (ScriptCommand currentCmd in currentScript.commands) { - writer.Write((ushort)currentCmd.id); - //System.Diagnostics.Debug.Write(BitConverter.ToString(BitConverter.GetBytes(commandID)) + " "); + // Write the command + writer.Write((ushort)cmdPos.Command.id); - List parameterList = currentCmd.cmdParams; - foreach (byte[] b in parameterList) { - writer.Write(b); - //System.Diagnostics.Debug.WriteLine(BitConverter.ToString(parameterList[k]) + " "); + // Write parameters, handling jumps specially + foreach (var param in cmdPos.Command.Parameters) { + if (param.Type == ScriptParameter.ParameterType.RelativeJump) { + // For jump targets, we need to recalculate the relative offset + // based on the new positions of commands + + // Find the target offset in the original file + int targetOffset = -1; + foreach (var kvp in OffsetToLabelMap) { + if (kvp.Value == param.TargetLabel) { + targetOffset = kvp.Key; + break; } - - /* If command calls a function/movement, store reference position */ - AddReference(ref refList, (ushort)currentCmd.id, parameterList, (int)writer.BaseStream.Position, currentScript); - } - } else { - useScriptCallers.Add(currentScript); - } - } - - int scriptsCount = scriptOffsets.Count; - foreach (ScriptCommandContainer caller in useScriptCallers) { - for (int i = 0; i < scriptsCount; i++) { - ContainerReference scriptReference = scriptOffsets[i]; - - if (scriptReference.ID == caller.usedScriptID) { - scriptOffsets.Add(new ContainerReference() { - ID = caller.manualUserID, - offsetInFile = scriptReference.offsetInFile - }); // If script has UseScript, copy offset - } - } - } - - /* Write functions */ - foreach (ScriptCommandContainer currentFunction in allFunctions) { - if (currentFunction.usedScriptID == -1) { - functionOffsets.Add(new ContainerReference() { - ID = currentFunction.manualUserID, - offsetInFile = (uint)writer.BaseStream.Position - } - ); - - foreach (ScriptCommand currentCmd in currentFunction.commands) { - writer.Write((ushort)currentCmd.id); - //System.Diagnostics.Debug.Write(BitConverter.ToString(BitConverter.GetBytes(commandID)) + " "); - - List parameterList = currentCmd.cmdParams; - foreach (byte[] b in parameterList) { - writer.Write(b); - //System.Diagnostics.Debug.Write(BitConverter.ToString(parameterList[k]) + " "); - } - - /* If command calls a function/movement, store reference position */ - - AddReference(ref refList, (ushort)currentCmd.id, parameterList, (int)writer.BaseStream.Position, currentFunction); - } - } else { - int functionUsescript = currentFunction.usedScriptID - 1; - if (functionUsescript >= scriptOffsets.Count) { - MessageBox.Show($"Function #{currentFunction.manualUserID} refers to Script {currentFunction.usedScriptID}, which does not exist.\n" + - $"This Script File can't be saved.", "Can't resolve UseScript reference", MessageBoxButtons.OK, MessageBoxIcon.Error); - return null; } - functionOffsets.Add(new ContainerReference() { - ID = currentFunction.manualUserID, - offsetInFile = scriptOffsets[currentFunction.usedScriptID - 1].offsetInFile - }); - } - } - - // Movements must be halfword-aligned - if (writer.BaseStream.Position % 2 == 1) { //Check if the writer's head is on an odd byte - writer.Write((byte)0x00); //Add padding - } - - /* Write movements */ - foreach (ScriptActionContainer currentAction in allActions) { - actionOffsets.Add(new ContainerReference() { - ID = currentAction.manualUserID, - offsetInFile = (uint)writer.BaseStream.Position - }); - - foreach (ScriptAction currentCmd in currentAction.commands) { - writer.Write((ushort)currentCmd.id); - writer.Write((ushort)currentCmd.repetitionCount); - } - } - - /* Write script offsets to header */ - writer.BaseStream.Position = 0x0; - - scriptOffsets = scriptOffsets.OrderBy(x => x.ID).ToList(); //Write script offsets to header in the correct order - for (int i = 0; i < scriptOffsets.Count; i++) { - writer.Write(scriptOffsets[i].offsetInFile - (uint)writer.BaseStream.Position - 0x4); - } - - SortedSet undeclaredFuncs = new SortedSet(); - SortedSet undeclaredActions = new SortedSet(); - - SortedSet uninvokedFuncs = new SortedSet(allFunctions.Select(x => x.manualUserID).ToArray()); - SortedSet unreferencedActions = new SortedSet(allActions.Select(x => x.manualUserID).ToArray()); - - //refList = refList.OrderBy(x => x.invokedID).ToList(); //Sorting is not necessary, after all... - - for (int i = 0; i < refList.Count; i++) { - writer.BaseStream.Position = refList[i].invokedAt; //place seek head on parameter that is supposed to store the jump address - ContainerReference result; - - if (refList[i].typeOfInvoked is ContainerTypes.Action) { //isApplyMovement - result = actionOffsets.Find(entry => entry.ID == refList[i].invokedID); - - if (result.Equals(default(ContainerReference))) { - undeclaredActions.Add(refList[i].invokedID); - } else { - int relativeOffset = (int)(result.offsetInFile - refList[i].invokedAt - 4); + if (targetOffset != -1 && oldOffsetToNewOffset.TryGetValue(targetOffset, out long newTargetOffset)) { + // Calculate new relative offset + int relativeOffset = (int)(newTargetOffset - (writer.BaseStream.Position + 4)); writer.Write(relativeOffset); - unreferencedActions.Remove(refList[i].invokedID); + } else { + // Fallback - write original offset + writer.Write(param.TargetOffset); } } else { - result = functionOffsets.Find(entry => entry.ID == refList[i].invokedID); - - if (result.Equals(default(ContainerReference))) { - undeclaredFuncs.Add(refList[i].invokedID); - } else { - int relativeOffset = (int)(result.offsetInFile - refList[i].invokedAt - 4); - writer.Write(relativeOffset); - - if (FunctionIsInvoked(refList, uninvokedFuncs, refList[i].invokedID, 0)) { - uninvokedFuncs.Remove(refList[i].invokedID); - } - - //if (refList[i].callerType != containerTypes.Function || - // (refList[i].callerType == refList[i].invokedType && refList[i].callerID == refList[i].invokedID) || - // !uninvokedFuncs.Contains(refList[i].callerID)) { //remove reference if caller is a script, or if caller calls itself, or if caller is a function that's been invoked already - // uninvokedFuncs.Remove(refList[i].invokedID); - //} - } + // Regular parameter + writer.Write(param.RawData); } } + } - //Error check - string errorMsg = ""; - if (undeclaredFuncs.Count > 0) { - string[] errorFunctionsUndeclared = undeclaredFuncs.ToArray().Select(x => x.ToString()).ToArray(); - errorMsg += "These Functions have been invoked but not declared: " + Environment.NewLine + string.Join(separator: ",", errorFunctionsUndeclared); - errorMsg += Environment.NewLine; + // Update header with entry point offsets + writer.BaseStream.Position = headerStart; + foreach (var entryPoint in entryPoints) { + if (oldOffsetToNewOffset.TryGetValue(entryPoint.Offset, out long newOffset)) { + uint relativeOffset = (uint)(newOffset - (headerStart + 4)); + writer.Write(relativeOffset); } - - if (undeclaredActions.Count > 0) { - string[] errorActionsUndeclared = undeclaredActions.ToArray().Select(x => x.ToString()).ToArray(); - errorMsg += "These Actions have been referenced but not declared: " + Environment.NewLine + string.Join(separator: ",", errorActionsUndeclared); - errorMsg += Environment.NewLine; - } - - if (!string.IsNullOrEmpty(errorMsg)) { - MessageBox.Show(errorMsg + Environment.NewLine + "This Script File has not been overwritten since it can not be saved.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); - errorMsg = ""; - return null; - } - - if (uninvokedFuncs.Count > 0) { - string[] orphanedFunctions = uninvokedFuncs.ToArray().Select(x => x.ToString()).ToArray(); - errorMsg += "Unused Function IDs detected: " + Environment.NewLine + string.Join(", ", orphanedFunctions); - errorMsg += Environment.NewLine; - errorMsg += "\nIn order for a Function to be saved, it must be invoked by a Script or by another used Function."; - errorMsg += Environment.NewLine; - errorMsg += Environment.NewLine; - } - - if (unreferencedActions.Count > 0) { - string[] orphanedActions = unreferencedActions.ToArray().Select(x => x.ToString()).ToArray(); - errorMsg += "Unused Action IDs detected: " + Environment.NewLine + string.Join(", ", orphanedActions); - errorMsg += Environment.NewLine; - errorMsg += "\nIn order for an Action to be saved, it must be called by a Script or by a used Function."; - errorMsg += Environment.NewLine; - errorMsg += Environment.NewLine; - } - - if (!string.IsNullOrEmpty(errorMsg)) { - MessageBox.Show(errorMsg + Environment.NewLine + "Remember that every unused Function or Action is always lost upon reloading the Script File.", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Information); - errorMsg = ""; - } - } catch (NullReferenceException nre) { - Console.WriteLine(nre); - return null; } } return newData.ToArray(); } - private bool FunctionIsInvoked(List refList, SortedSet uninvokedFuncsSet, uint funcID, int callCount = 0, uint? excludedCaller = null) { - if (callCount >= 30) { - MessageBox.Show("Something went very wrong saving this Script File!" + - "\nIt is recommended that you backup its code somewhere, to avoid losing progress.", - "Fatal error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return false; - } - - Console.WriteLine("Checking calls of function " + funcID + (excludedCaller == null ? "" : " excluding Function " + excludedCaller + " as the caller.")); - - if (!uninvokedFuncsSet.Contains(funcID)) { - Console.WriteLine("Function " + funcID + " has already been invoked before. Nothing to check."); - return true; //Abort - } - - if (refList is null || refList.Count <= 0) { - return false; - } - - //Find the first instance of funcID being called, excluding calls coming from an excludedCaller - //if excludedCaller is null, there's nothing to exclude: a normal search is performed. - ScriptReference sr = refList.Find(x => x.invokedID == funcID && (excludedCaller == null || x.callerID != excludedCaller)); - - if (sr is null) { - Console.WriteLine("No reference found!!!"); - return false; - } - - if (sr.typeOfCaller is ContainerTypes.Script) { - Console.WriteLine("Function " + funcID + " is directly called by Script " + sr.callerID); - return true; - } - - if (sr.typeOfCaller is ContainerTypes.Function) { - if (FunctionIsInvoked(refList, uninvokedFuncsSet, sr.callerID, ++callCount, excludedCaller: sr.invokedID)) { //check if caller function is invoked as well - Console.WriteLine("Function " + funcID + " is called by Function " + sr.callerID); - return true; - } - } - - Console.WriteLine("Function " + funcID + " is unused"); - return false; - } - public bool SaveToFileDefaultDir(int IDtoReplace, bool showSuccessMessage = true) { return SaveToFileDefaultDir(RomInfo.DirNames.scripts, IDtoReplace, showSuccessMessage); } diff --git a/DS_Map/Resources/ScriptDatabase.cs b/DS_Map/Resources/ScriptDatabase.cs index 8b2fb8f..94e179b 100644 --- a/DS_Map/Resources/ScriptDatabase.cs +++ b/DS_Map/Resources/ScriptDatabase.cs @@ -505,7 +505,7 @@ namespace DSPRE.Resources { [0x0182] = "SetBerryMulch", [0x0183] = "SetBerrySpecies", [0x0184] = "WateringAnimation", - [0x0185] = "TakeBerries", + [0x0185] = "HarvestBerries", [0x0186] = "SetOWDefaultPosition", [0x0187] = "SetOWPosition", [0x0188] = "SetOWDefaultMovement", @@ -636,6 +636,7 @@ namespace DSPRE.Resources { [0x0246] = "CheckVersion", [0x0247] = "FirstPokemonInParty", + [0x0248] = "GetPartyPokemonTypes", [0x024E] = "GetLottoNumber", [0x024F] = "CheckWinLotto", @@ -1681,11 +1682,11 @@ namespace DSPRE.Resources { [0x0336] = new byte[] { 2 }, //International release exclusive - [0x0337] = new byte[1] { 0 }, + [0x0337] = new byte[] { 2, 2 }, [0x0338] = new byte[1] { 0 }, [0x0339] = new byte[1] { 0 }, [0x033A] = new byte[] { 1 }, - [0x033B] = new byte[1] { 0 }, + [0x033B] = new byte[] { 1 }, [0x033C] = new byte[] { 1, 2 }, [0x033D] = new byte[] { 1, 2 }, [0x033E] = new byte[] { 1, 2 }, @@ -2068,6 +2069,7 @@ namespace DSPRE.Resources { [0x01EF] = "CheckVersion", [0x01F0] = "FirstPokemonInParty", + [0x01F1] = "GetPartyPokemonTypes", [0x01F7] = "GetLottoNumber", [0x01F8] = "CheckWinLotto", @@ -2129,6 +2131,10 @@ namespace DSPRE.Resources { [0x026A] = "CheckAlbumPhoto", [0x026E] = "GetOWDirection", + [0x026F] = "HarvestApricorn", + [0x0270] = "GetApricornColor", + [0x0271] = "GiveApricorn", + [0x0272] = "TextApricorn", [0x0289] = "ScratchOffScreen", [0x028A] = "ReleaseScriptApp", diff --git a/DS_Map/RomInfo.cs b/DS_Map/RomInfo.cs index 68d0ff7..e843810 100644 --- a/DS_Map/RomInfo.cs +++ b/DS_Map/RomInfo.cs @@ -905,6 +905,7 @@ namespace DSPRE { case GameLanguages.English: case GameLanguages.Italian: + case GameLanguages.French: monIconPalTableAddress = BitConverter.ToUInt32(ARM9.ReadBytes(0x74408, 4), 0); break; @@ -919,7 +920,6 @@ namespace DSPRE } break; - case GameLanguages.French: case GameLanguages.Spanish: if (gameVersion == GameVersions.HeartGold) { diff --git a/DS_Map/ROMFiles/LevelScriptTrigger.cs b/DS_Map/Script/LevelScriptTrigger.cs similarity index 100% rename from DS_Map/ROMFiles/LevelScriptTrigger.cs rename to DS_Map/Script/LevelScriptTrigger.cs diff --git a/DS_Map/ROMFiles/MapScreenLoadTrigger.cs b/DS_Map/Script/MapScreenLoadTrigger.cs similarity index 100% rename from DS_Map/ROMFiles/MapScreenLoadTrigger.cs rename to DS_Map/Script/MapScreenLoadTrigger.cs diff --git a/DS_Map/ROMFiles/ScriptAction.cs b/DS_Map/Script/ScriptAction.cs similarity index 100% rename from DS_Map/ROMFiles/ScriptAction.cs rename to DS_Map/Script/ScriptAction.cs diff --git a/DS_Map/ROMFiles/ScriptCommand.cs b/DS_Map/Script/ScriptCommand.cs similarity index 77% rename from DS_Map/ROMFiles/ScriptCommand.cs rename to DS_Map/Script/ScriptCommand.cs index 57d5394..a21a23f 100644 --- a/DS_Map/ROMFiles/ScriptCommand.cs +++ b/DS_Map/Script/ScriptCommand.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Text; using System.Windows.Forms; namespace DSPRE.ROMFiles { @@ -16,15 +17,17 @@ namespace DSPRE.ROMFiles { OW_DIRECTION, FUNCTION_ID, ACTION_ID, - CMD_NUMBER + CMD_NUMBER, + LABEL_REF }; public ushort? id; - public List cmdParams; + public List Parameters { get; set; } = new List(); public string name; - public ScriptCommand(ushort id, List parametersList) { - if (parametersList is null) { + // CHANGE: Update the constructor to use ScriptParameter + public ScriptCommand(ushort id, List parameters) { + if (parameters is null) { this.id = null; return; } @@ -36,47 +39,48 @@ namespace DSPRE.ROMFiles { switch (id) { case 0x0016: // Jump case 0x001A: // Call - name += $" {FormatNumber(parametersList[0], ParamTypeEnum.FUNCTION_ID)}"; + name += $" {FormatParameter(parameters[0], ParamTypeEnum.FUNCTION_ID)}"; break; case 0x0017: // JumpIfObjID case 0x0018: // JumpIfEventID - name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1])}"; + name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1])}"; break; case 0x0019: // JumpIfPlayerDir - name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_DIRECTION)} {FormatNumber(parametersList[1], ParamTypeEnum.FUNCTION_ID)}"; + name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_DIRECTION)} {FormatParameter(parameters[1], ParamTypeEnum.FUNCTION_ID)}"; break; case 0x001C: // JumpIf case 0x001D: // CallIf { - string number = FormatNumber(parametersList[1], ParamTypeEnum.FUNCTION_ID); + string number = FormatParameter(parameters[1], ParamTypeEnum.FUNCTION_ID); - if (RomInfo.ScriptComparisonOperatorsDict.TryGetValue(parametersList[0][0], out string v)) { + // Access the byte value from the parameter's raw data + if (RomInfo.ScriptComparisonOperatorsDict.TryGetValue(parameters[0].RawData[0], out string v)) { name += $" {v} {number}"; } else { - name += $" {parametersList[0][0]} {number}"; + name += $" {parameters[0].RawData[0]} {number}"; } break; } case 0x005E: // Movement - name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1], ParamTypeEnum.ACTION_ID)}"; + name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1], ParamTypeEnum.ACTION_ID)}"; break; case 0x006A: // GetOverworldPosition - name += FormatCmd_Overworld_TwoParams(parametersList); + name += FormatCmd_Overworld_TwoParams(parameters); break; case 0x0062: // Lock case 0x0063: // Release case 0x0064: // AddOW case 0x0065: // RemoveOW - name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)}"; + name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)}"; break; case 0x006D: // SetOverworldMovement - name += FormatCmd_Overworld_Move(parametersList); + name += FormatCmd_Overworld_Move(parameters); break; case 0x00B0: // Warp [HGSS] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) { - name += FormatCmd_Warp(parametersList); + name += FormatCmd_Warp(parameters); } else { goto default; } @@ -84,7 +88,7 @@ namespace DSPRE.ROMFiles { break; case 0x0152: // SetOverworldDefaultPosition [HGSS] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) { - name += FormatCmd_Overworld_TwoParams(parametersList); + name += FormatCmd_Overworld_TwoParams(parameters); } else { goto default; } @@ -92,7 +96,7 @@ namespace DSPRE.ROMFiles { break; case 0x0153: // SetOverworldPosition [HGSS] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) { - name += FormatCmd_Overworld_3Coords_Dir(parametersList); + name += FormatCmd_Overworld_3Coords_Dir(parameters); } else { goto default; } @@ -100,7 +104,7 @@ namespace DSPRE.ROMFiles { break; case 0x0154: // SetOverworldDefaultMovement [HGSS] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) { - name += FormatCmd_Overworld_Move(parametersList); + name += FormatCmd_Overworld_Move(parameters); } else { goto default; } @@ -108,7 +112,7 @@ namespace DSPRE.ROMFiles { break; case 0x0155: // SetOverworldDefaultDirection [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) { - name += FormatCmd_Overworld_Dir(parametersList); + name += FormatCmd_Overworld_Dir(parameters); } else { goto default; } @@ -116,7 +120,7 @@ namespace DSPRE.ROMFiles { break; case 0x0158: // SetOverworldDirection [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) { - name += FormatCmd_Overworld_Dir(parametersList); + name += FormatCmd_Overworld_Dir(parameters); } else { goto default; } @@ -125,7 +129,7 @@ namespace DSPRE.ROMFiles { case 0x00BE: // Warp [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) { - name += FormatCmd_Warp(parametersList); + name += FormatCmd_Warp(parameters); } else { goto default; } @@ -133,7 +137,7 @@ namespace DSPRE.ROMFiles { break; case 0x0186: // SetOverworldDefaultPosition [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) { - name += FormatCmd_Overworld_TwoParams(parametersList); + name += FormatCmd_Overworld_TwoParams(parameters); } else { goto default; } @@ -141,7 +145,7 @@ namespace DSPRE.ROMFiles { break; case 0x0187: // SetOverworldPosition [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) { - name += FormatCmd_Overworld_3Coords_Dir(parametersList); + name += FormatCmd_Overworld_3Coords_Dir(parameters); } else { goto default; } @@ -149,7 +153,7 @@ namespace DSPRE.ROMFiles { break; case 0x0188: // SetOverworldDefaultMovement [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) { - name += FormatCmd_Overworld_Move(parametersList); + name += FormatCmd_Overworld_Move(parameters); } else { goto default; } @@ -157,7 +161,7 @@ namespace DSPRE.ROMFiles { break; case 0x0189: // SetOverworldDefaultDirection [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) { - name += FormatCmd_Overworld_Dir(parametersList); + name += FormatCmd_Overworld_Dir(parameters); } else { goto default; } @@ -165,47 +169,47 @@ namespace DSPRE.ROMFiles { break; case 0x018C: // SetOverworldDirection [DPPt] if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) { - name += FormatCmd_Overworld_Dir(parametersList); + name += FormatCmd_Overworld_Dir(parameters); } else { goto default; } break; + default: - for (int i = 0; i < parametersList.Count; i++) { - name += $" {FormatNumber(parametersList[i])}"; + for (int i = 0; i < parameters.Count; i++) { + name += $" {FormatParameter(parameters[i])}"; } break; } this.id = id; - this.cmdParams = parametersList; + this.Parameters = parameters; } - private string FormatCmd_Warp(List parametersList) { - return $" {FormatNumber(parametersList[0])} {FormatNumber(parametersList[1])} {FormatNumber(parametersList[2])} {FormatNumber(parametersList[3])} {FormatNumber(parametersList[4], ParamTypeEnum.OW_DIRECTION)}"; + private string FormatCmd_Warp(List parameters) { + return $" {FormatParameter(parameters[0])} {FormatParameter(parameters[1])} {FormatParameter(parameters[2])} {FormatParameter(parameters[3])} {FormatParameter(parameters[4], ParamTypeEnum.OW_DIRECTION)}"; } - private string FormatCmd_Overworld_TwoParams(List parametersList) { - return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1])} {FormatNumber(parametersList[2])}"; + private string FormatCmd_Overworld_TwoParams(List parameters) { + return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1])} {FormatParameter(parameters[2])}"; } - private string FormatCmd_Overworld_Move(List parametersList) { - return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1], ParamTypeEnum.OW_MOVEMENT_TYPE)}"; + private string FormatCmd_Overworld_Move(List parameters) { + return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1], ParamTypeEnum.OW_MOVEMENT_TYPE)}"; } - private string FormatCmd_Overworld_3Coords_Dir(List parametersList) { - return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1])} {FormatNumber(parametersList[2])} {FormatNumber(parametersList[3])} {FormatNumber(parametersList[4], ParamTypeEnum.OW_DIRECTION)}"; + private string FormatCmd_Overworld_3Coords_Dir(List parameters) { + return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1])} {FormatParameter(parameters[2])} {FormatParameter(parameters[3])} {FormatParameter(parameters[4], ParamTypeEnum.OW_DIRECTION)}"; } - private string FormatCmd_Overworld_Dir(List parametersList) { - return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1], ParamTypeEnum.OW_DIRECTION)}"; + private string FormatCmd_Overworld_Dir(List parameters) { + return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1], ParamTypeEnum.OW_DIRECTION)}"; } - public ScriptCommand(string wholeLine, int lineNumber = 0) { name = wholeLine; - cmdParams = new List(); + Parameters = new List(); string[] nameParts = wholeLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Separate command code from parameters /* Get command id, which is always first in the description */ @@ -229,9 +233,8 @@ namespace DSPRE.ROMFiles { return; } } - /* Read parameters from remainder of the description */ - //Console.WriteLine("ID = " + ((ushort)id).ToString("X4")); + /* Read parameters from remainder of the description */ byte[] parametersSizeArr = RomInfo.ScriptCommandParametersDict[(ushort)id]; int paramLength = 0; @@ -241,7 +244,7 @@ namespace DSPRE.ROMFiles { int firstParamValue = int.Parse(nameParts[1].PurgeSpecial(ScriptFile.specialChars), nameParts[1].GetNumberStyle()); byte firstParamSize = parametersSizeArr[1]; - cmdParams.Add(firstParamValue.ToByteArrayChooseSize(firstParamSize)); + Parameters.Add(new ScriptParameter(firstParamValue.ToByteArrayChooseSize(firstParamSize))); paramsProcessed++; int i = 2; @@ -303,7 +306,8 @@ namespace DSPRE.ROMFiles { Console.WriteLine($"Parameter #{i}: {nameParts[i + 1]}"); if (RomInfo.ScriptComparisonOperatorsReverseDict.TryGetValue(nameParts[i + 1].ToLower(), out cmdID)) { //Check succeeds when command is like "asdfg LESS" or "asdfg DIFFERENT" - cmdParams.Add(new byte[] { (byte)cmdID }); + // Create parameter with byte array + Parameters.Add(new ScriptParameter(new byte[] { (byte)cmdID })); } else { //Not a comparison /* Convert strings of parameters to the correct datatypes */ NumberStyles numStyle = nameParts[i + 1].GetNumberStyle(); @@ -312,6 +316,16 @@ namespace DSPRE.ROMFiles { int result = 0; try { + // Check if this is a label reference + if (nameParts[i + 1].StartsWith("label") || nameParts[i + 1].StartsWith("script")) { + // This is a label reference + ScriptParameter labelParam = new ScriptParameter(0, nameParts[i + 1]) { + Type = ScriptParameter.ParameterType.RelativeJump + }; + Parameters.Add(labelParam); + continue; + } + result = int.Parse(nameParts[i + 1], numStyle); } catch { if (string.IsNullOrWhiteSpace(nameParts[i + 1])) { @@ -338,7 +352,8 @@ namespace DSPRE.ROMFiles { } try { - cmdParams.Add(result.ToByteArrayChooseSize(parametersSizeArr[i])); + byte[] paramData = result.ToByteArrayChooseSize(parametersSizeArr[i]); + Parameters.Add(new ScriptParameter(paramData)); } catch (OverflowException) { MessageBox.Show($"Argument {nameParts[i + 1]} at line {lineNumber} is not in the range [0, {Math.Pow(2, 8 * parametersSizeArr[i]) - 1}].", "Argument error", MessageBoxButtons.OK, MessageBoxIcon.Error); id = null; @@ -354,6 +369,10 @@ namespace DSPRE.ROMFiles { } private string FormatNumber(byte[] par, ParamTypeEnum paramType = ParamTypeEnum.INTEGER) { + if (paramType == ParamTypeEnum.LABEL_REF && par.Length > 0) { + return FormatLabelReference(Encoding.ASCII.GetString(par)); + } + //number acquisition uint num; if (par.Length == 0) { @@ -390,9 +409,6 @@ namespace DSPRE.ROMFiles { case ParamTypeEnum.CMD_NUMBER: return "CMD_" + prefix + num.ToString(formatOverride + '3'); - case ParamTypeEnum.FUNCTION_ID: - return ScriptFile.ContainerTypes.Function.ToString() + "#" + num; - case ParamTypeEnum.ACTION_ID: return ScriptFile.ContainerTypes.Action.ToString() + "#" + num; @@ -440,8 +456,21 @@ namespace DSPRE.ROMFiles { return outp; } + private string FormatParameter(ScriptParameter param, ParamTypeEnum paramType = ParamTypeEnum.INTEGER) { + // For jump-to-label parameters, return the label name + if (param.Type == ScriptParameter.ParameterType.RelativeJump && !string.IsNullOrEmpty(param.TargetLabel)) { + return param.TargetLabel; + } + + // Otherwise handle the numeric value + return FormatNumber(param.RawData, paramType); + } public override string ToString() { return name + " (" + ((ushort)id).ToString("X") + ")"; } + + private string FormatLabelReference(string labelName) { + return labelName; + } } } diff --git a/DS_Map/Script/ScriptCommandPosition.cs b/DS_Map/Script/ScriptCommandPosition.cs new file mode 100644 index 0000000..953a310 --- /dev/null +++ b/DS_Map/Script/ScriptCommandPosition.cs @@ -0,0 +1,20 @@ +// ScriptCommandPosition.cs +using System; + +namespace DSPRE.ROMFiles { + public class ScriptCommandPosition { + public ScriptCommand Command { get; set; } + public int Offset { get; set; } + public string Label { get; set; } // null if no label needed + public bool IsEntryPoint { get; set; } + public int EntryPointIndex { get; set; } // -1 if not an entry point + + public ScriptCommandPosition(ScriptCommand cmd, int offset, string label = null, bool isEntryPoint = false, int entryPointIndex = -1) { + Command = cmd; + Offset = offset; + Label = label; + IsEntryPoint = isEntryPoint; + EntryPointIndex = entryPointIndex; + } + } +} \ No newline at end of file diff --git a/DS_Map/Script/ScriptLabeledSection.cs b/DS_Map/Script/ScriptLabeledSection.cs new file mode 100644 index 0000000..3336f3b --- /dev/null +++ b/DS_Map/Script/ScriptLabeledSection.cs @@ -0,0 +1,21 @@ +// Create this as a new file: ScriptLabeledSection.cs +using System; +using System.Collections.Generic; + +namespace DSPRE.ROMFiles { + public class ScriptLabeledSection { + public string LabelName { get; set; } + public List Commands { get; set; } + public uint OffsetInFile { get; set; } + public bool IsReferenced { get; set; } = false; + + public ScriptLabeledSection(string labelName, List commands = null) { + LabelName = labelName; + Commands = commands ?? new List(); + } + + public override string ToString() { + return LabelName; + } + } +} \ No newline at end of file diff --git a/DS_Map/Script/ScriptParameter.cs b/DS_Map/Script/ScriptParameter.cs new file mode 100644 index 0000000..d6dd6ee --- /dev/null +++ b/DS_Map/Script/ScriptParameter.cs @@ -0,0 +1,45 @@ +using System; + +public class ScriptParameter { + public enum ParameterType { + Integer, + RelativeJump, + Byte, + Variable + } + + public ParameterType Type { get; set; } = ParameterType.Integer; + public byte[] RawData { get; set; } + public string TargetLabel { get; set; } // For RelativeJump type + public int TargetOffset { get; set; } // For RelativeJump type + + // Constructor for regular parameters + public ScriptParameter(byte[] data) { + Type = ParameterType.Integer; + RawData = data; + } + + // Constructor for relative jumps + public ScriptParameter(int targetOffset, string targetLabel) { + Type = ParameterType.RelativeJump; + TargetOffset = targetOffset; + TargetLabel = targetLabel; + // Store raw bytes only for display purposes + RawData = BitConverter.GetBytes(targetOffset); + } + + // Get display representation + public string GetFormattedValue() { + if (Type == ParameterType.RelativeJump && !string.IsNullOrEmpty(TargetLabel)) { + return TargetLabel; + } + + // Default formatting for other types + if (RawData.Length == 0) return ""; + if (RawData.Length == 1) return RawData[0].ToString("X2"); + if (RawData.Length == 2) return BitConverter.ToUInt16(RawData, 0).ToString("X4"); + if (RawData.Length == 4) return BitConverter.ToUInt32(RawData, 0).ToString("X8"); + + return BitConverter.ToString(RawData); + } +} \ No newline at end of file diff --git a/DS_Map/ROMFiles/ScriptReference.cs b/DS_Map/Script/ScriptReference.cs similarity index 100% rename from DS_Map/ROMFiles/ScriptReference.cs rename to DS_Map/Script/ScriptReference.cs diff --git a/DS_Map/ROMFiles/VariableValueTrigger.cs b/DS_Map/Script/VariableValueTrigger.cs similarity index 100% rename from DS_Map/ROMFiles/VariableValueTrigger.cs rename to DS_Map/Script/VariableValueTrigger.cs diff --git a/README.md b/README.md index f23e712..b53548d 100644 --- a/README.md +++ b/README.md @@ -147,4 +147,4 @@ Edit base stats, Learnable TMs, EVs yield, and more. Edit the moves that a given Pokemon can learn by leveling up. ### New Evolutions Editor: -Edit evolution methods and levels for all Pokemon. +Edit evolution methods and levels for all Pokemon. \ No newline at end of file