diff --git a/tests/functional/SkillFunctionalTests.sln b/tests/functional/ComponentsFunctionalTests.sln
similarity index 93%
rename from tests/functional/SkillFunctionalTests.sln
rename to tests/functional/ComponentsFunctionalTests.sln
index 5c48eeb48d..c8633abe69 100644
--- a/tests/functional/SkillFunctionalTests.sln
+++ b/tests/functional/ComponentsFunctionalTests.sln
@@ -1,9 +1,9 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29806.167
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31423.177
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkillFunctionalTests", "Tests\SkillFunctionalTests\SkillFunctionalTests.csproj", "{DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsFunctionalTests", "Tests\ComponentsFunctionalTests\ComponentsFunctionalTests.csproj", "{DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TranscriptTestRunner", "Libraries\TranscriptTestRunner\TranscriptTestRunner.csproj", "{65C3A2E0-FDC5-4132-9980-3BAE230E9F2E}"
EndProject
diff --git a/tests/functional/Libraries/TranscriptConverter/README.md b/tests/functional/Libraries/TranscriptConverter/README.md
new file mode 100644
index 0000000000..6e80bb16b0
--- /dev/null
+++ b/tests/functional/Libraries/TranscriptConverter/README.md
@@ -0,0 +1,18 @@
+# Transcript Converter
+
+## User Step-by-step Guide
+This step-by-step guide shows how to run the TranscriptConverter project to convert a transcript to a test script to be used in TranscriptTestRunner.
+
+## Generate a test script
+1- Create a transcript file, follow [these steps](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-debug-transcript?view=azure-bot-service-4.0#creatingstoring-a-bot-transcript-file).
+
+2- Build the TranscriptConverter project and navigate to its executable.
+
+3- The command to convert a transcript to a new test script can be executed like this:
+```PS
+btc convert "path-to-source-transcript"
+```
+You can convert a transcript to an existing test script like this:
+```PS
+btc convert "path-to-source-transcript" "path-to-target-test-script"
+```
diff --git a/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj
index aa4817caff..544dd18be4 100644
--- a/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj
+++ b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs b/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs
new file mode 100644
index 0000000000..9d18a41068
--- /dev/null
+++ b/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace ComponentsFunctionalTests.Common
+{
+ public enum HostBot
+ {
+ ///
+ /// Empty bot implemented using DotNet and Web App.
+ ///
+ EmptyBotDotNetWebApp,
+
+ ///
+ /// Empty bot implemented using JS and Web App.
+ ///
+ EmptyBotJSWebApp
+ }
+}
diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCase.cs
similarity index 83%
rename from tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs
rename to tests/functional/Tests/ComponentsFunctionalTests/Common/TestCase.cs
index 990135daca..505cbdda8f 100644
--- a/tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs
+++ b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCase.cs
@@ -4,7 +4,7 @@
using Microsoft.Bot.Connector;
using TranscriptTestRunner;
-namespace SkillFunctionalTests.Common
+namespace ComponentsFunctionalTests.Common
{
public class TestCase
{
@@ -16,8 +16,6 @@ public class TestCase
public HostBot HostBot { get; set; }
- public string TargetSkill { get; set; }
-
public string Script { get; set; }
}
}
diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCaseBuilder.cs
similarity index 53%
rename from tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs
rename to tests/functional/Tests/ComponentsFunctionalTests/Common/TestCaseBuilder.cs
index 16b422d5f7..0eb7f6c8cd 100644
--- a/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs
+++ b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCaseBuilder.cs
@@ -5,11 +5,11 @@
using System.Collections.Generic;
using TranscriptTestRunner;
-namespace SkillFunctionalTests.Common
+namespace ComponentsFunctionalTests.Common
{
public class TestCaseBuilder
{
- public IEnumerable BuildTestCases(List channelIds, List deliveryModes, List hostBots, List targetSkills, List scripts, Func shouldExclude = null)
+ public IEnumerable BuildTestCases(List channelIds, List deliveryModes, List hostBots, List scripts, Func shouldExclude = null)
{
var testCases = new List();
var count = 1;
@@ -21,23 +21,19 @@ public IEnumerable BuildTestCases(List channelIds, List TestCases()
{
var channelIds = new List { Channels.Directline };
- var deliverModes = new List
+ var deliveryModes = new List
{
- DeliveryModes.Normal,
- DeliveryModes.ExpectReplies
+ DeliveryModes.Normal
};
var hostBots = new List
{
- HostBot.WaterfallHostBotDotNet,
- HostBot.WaterfallHostBotJS,
- HostBot.WaterfallHostBotPython,
-
- // TODO: Enable this when the port to composer is ready
- //HostBot.ComposerHostBotDotNet
- };
-
- var targetSkills = new List
- {
- SkillBotNames.WaterfallSkillBotDotNet,
- SkillBotNames.WaterfallSkillBotJS,
- SkillBotNames.WaterfallSkillBotPython,
-
- // TODO: Enable this when the port to composer is ready
- //SkillBotNames.ComposerSkillBotDotNet
+ HostBot.EmptyBotDotNetWebApp,
+ HostBot.EmptyBotJSWebApp
};
- var scripts = new List
- {
- "MessageWithAttachment.json",
- };
+ var scripts = new List { "EmptyBot.json" };
var testCaseBuilder = new TestCaseBuilder();
- var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts);
+ var testCases = testCaseBuilder.BuildTestCases(channelIds, deliveryModes, hostBots, scripts);
foreach (var testCase in testCases)
{
yield return testCase;
@@ -77,12 +59,12 @@ public async Task RunTestCases(TestCaseDataObject testData)
Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented));
var options = TestClientOptions[testCase.HostBot];
+
var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger);
var testParams = new Dictionary
{
- { "DeliveryMode", testCase.DeliveryMode },
- { "TargetSkill", testCase.TargetSkill }
+ { "DeliveryMode", testCase.DeliveryMode }
};
await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams);
diff --git a/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.json b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.json
new file mode 100644
index 0000000000..075dac0f34
--- /dev/null
+++ b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.json
@@ -0,0 +1,61 @@
+{
+ "items": [
+ {
+ "type": "conversationUpdate",
+ "role": "user"
+ },
+ {
+ "type": "message",
+ "role": "bot",
+ "text": "Welcome to your bot.",
+ "assertions": [
+ "type == 'message'",
+ "from.role == 'bot'",
+ "recipient.role == 'user'",
+ "text == 'Welcome to your bot.'",
+ "speak == 'Welcome to your bot.'"
+ ]
+ },
+ {
+ "type": "trace",
+ "role": "bot",
+ "assertions": [
+ "type == 'trace'",
+ "from.role == 'bot'",
+ "recipient.role == 'user'",
+ "label == 'Bot State'",
+ "valueType == 'https://www.botframework.com/schemas/botState'",
+ "name == 'BotState'"
+ ]
+ },
+ {
+ "type": "message",
+ "role": "user",
+ "text": "test"
+ },
+ {
+ "type": "message",
+ "role": "bot",
+ "text": "Sorry, I didn't get that.",
+ "assertions": [
+ "type == 'message'",
+ "from.role == 'bot'",
+ "recipient.role == 'user'",
+ "text == 'Sorry, I didn\\'t get that.'",
+ "speak == 'Sorry, I didn\\'t get that.'"
+ ]
+ },
+ {
+ "type": "trace",
+ "role": "bot",
+ "assertions": [
+ "type == 'trace'",
+ "from.role == 'bot'",
+ "recipient.role == 'user'",
+ "label == 'Bot State'",
+ "valueType == 'https://www.botframework.com/schemas/botState'",
+ "name == 'BotState'"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.transcript b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.transcript
new file mode 100644
index 0000000000..32bbffd73f
--- /dev/null
+++ b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.transcript
@@ -0,0 +1,185 @@
+[
+ {
+ "type": "conversationUpdate",
+ "membersAdded": [
+ {
+ "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16",
+ "name": "Bot"
+ },
+ {
+ "id": "59656570-bd23-4940-8d6a-a7e31b382509",
+ "name": "User"
+ }
+ ],
+ "membersRemoved": [],
+ "channelId": "emulator",
+ "conversation": {
+ "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat"
+ },
+ "id": "2810c330-e0e2-11eb-8e13-71515b0ea9a4",
+ "localTimestamp": "2021-07-09T11:19:10-07:00",
+ "recipient": {
+ "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16",
+ "name": "Bot",
+ "role": "bot"
+ },
+ "timestamp": "2021-07-09T18:19:10.434Z",
+ "from": {
+ "id": "59656570-bd23-4940-8d6a-a7e31b382509",
+ "name": "User",
+ "role": "user"
+ },
+ "locale": "en-us",
+ "serviceUrl": "https://6e74437635f6.ngrok.io"
+ },
+ {
+ "type": "message",
+ "serviceUrl": "https://6e74437635f6.ngrok.io",
+ "channelId": "emulator",
+ "from": {
+ "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16",
+ "name": "Bot",
+ "role": "bot"
+ },
+ "conversation": {
+ "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat"
+ },
+ "recipient": {
+ "id": "59656570-bd23-4940-8d6a-a7e31b382509",
+ "role": "user"
+ },
+ "locale": "en-us",
+ "text": "Welcome to your bot.",
+ "speak": "Welcome to your bot. ",
+ "replyToId": "2810c330-e0e2-11eb-8e13-71515b0ea9a4",
+ "id": "2ace83a0-e0e2-11eb-8e13-71515b0ea9a4",
+ "localTimestamp": "2021-07-09T11:19:15-07:00",
+ "timestamp": "2021-07-09T18:19:15.034Z"
+ },
+ {
+ "type": "trace",
+ "serviceUrl": "https://6e74437635f6.ngrok.io",
+ "channelId": "emulator",
+ "from": {
+ "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16",
+ "name": "Bot",
+ "role": "bot"
+ },
+ "conversation": {
+ "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat"
+ },
+ "recipient": {
+ "id": "59656570-bd23-4940-8d6a-a7e31b382509",
+ "role": "user"
+ },
+ "locale": "en-us",
+ "replyToId": "2810c330-e0e2-11eb-8e13-71515b0ea9a4",
+ "label": "Bot State",
+ "valueType": "https://www.botframework.com/schemas/botState",
+ "value": {
+ "conversation": {
+ "DialogState": {
+ "dialogStack": []
+ }
+ },
+ "user": {}
+ },
+ "name": "BotState",
+ "id": "2aed2f30-e0e2-11eb-8e13-71515b0ea9a4",
+ "localTimestamp": "2021-07-09T11:19:15-07:00",
+ "timestamp": "2021-07-09T18:19:15.235Z"
+ },
+ {
+ "channelData": {
+ "clientActivityID": "1625854763493y3zek13sgka",
+ "clientTimestamp": "2021-07-09T18:19:23.493Z"
+ },
+ "text": "test",
+ "textFormat": "plain",
+ "type": "message",
+ "channelId": "emulator",
+ "from": {
+ "id": "59656570-bd23-4940-8d6a-a7e31b382509",
+ "name": "User",
+ "role": "user"
+ },
+ "locale": "en-us",
+ "timestamp": "2021-07-09T18:19:23.520Z",
+ "entities": [
+ {
+ "requiresBotState": true,
+ "supportsListening": true,
+ "supportsTts": true,
+ "type": "ClientCapabilities"
+ }
+ ],
+ "conversation": {
+ "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat"
+ },
+ "id": "2fdd6000-e0e2-11eb-8e13-71515b0ea9a4",
+ "localTimestamp": "2021-07-09T11:19:23-07:00",
+ "recipient": {
+ "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16",
+ "name": "Bot",
+ "role": "bot"
+ },
+ "serviceUrl": "https://6e74437635f6.ngrok.io"
+ },
+ {
+ "type": "message",
+ "serviceUrl": "https://6e74437635f6.ngrok.io",
+ "channelId": "emulator",
+ "from": {
+ "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16",
+ "name": "Bot",
+ "role": "bot"
+ },
+ "conversation": {
+ "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat"
+ },
+ "recipient": {
+ "id": "59656570-bd23-4940-8d6a-a7e31b382509",
+ "role": "user"
+ },
+ "locale": "en-us",
+ "text": "Sorry, I didn't get that.",
+ "speak": "Sorry, I didn't get that. ",
+ "replyToId": "2fdd6000-e0e2-11eb-8e13-71515b0ea9a4",
+ "id": "3025dab0-e0e2-11eb-8e13-71515b0ea9a4",
+ "localTimestamp": "2021-07-09T11:19:23-07:00",
+ "timestamp": "2021-07-09T18:19:23.995Z"
+ },
+ {
+ "type": "trace",
+ "serviceUrl": "https://6e74437635f6.ngrok.io",
+ "channelId": "emulator",
+ "from": {
+ "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16",
+ "name": "Bot",
+ "role": "bot"
+ },
+ "conversation": {
+ "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat"
+ },
+ "recipient": {
+ "id": "59656570-bd23-4940-8d6a-a7e31b382509",
+ "role": "user"
+ },
+ "locale": "en-us",
+ "replyToId": "2fdd6000-e0e2-11eb-8e13-71515b0ea9a4",
+ "label": "Bot State",
+ "valueType": "https://www.botframework.com/schemas/botState",
+ "value": {
+ "conversation": {
+ "DialogState": {
+ "dialogStack": []
+ }
+ },
+ "user": {}
+ },
+ "name": "BotState",
+ "id": "303f7d30-e0e2-11eb-8e13-71515b0ea9a4",
+ "localTimestamp": "2021-07-09T11:19:24-07:00",
+ "timestamp": "2021-07-09T18:19:24.163Z"
+ }
+]
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/README.md b/tests/functional/Tests/ComponentsFunctionalTests/README.md
similarity index 100%
rename from tests/functional/Tests/SkillFunctionalTests/README.md
rename to tests/functional/Tests/ComponentsFunctionalTests/README.md
diff --git a/tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs b/tests/functional/Tests/ComponentsFunctionalTests/ScriptTestBase.cs
similarity index 95%
rename from tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs
rename to tests/functional/Tests/ComponentsFunctionalTests/ScriptTestBase.cs
index 59ae89e379..1af1dac92c 100644
--- a/tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs
+++ b/tests/functional/Tests/ComponentsFunctionalTests/ScriptTestBase.cs
@@ -3,13 +3,13 @@
using System.Collections.Generic;
using System.IO;
+using ComponentsFunctionalTests.Common;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
-using SkillFunctionalTests.Common;
using TranscriptTestRunner.TestClients;
using Xunit.Abstractions;
-namespace SkillFunctionalTests
+namespace ComponentsFunctionalTests
{
public class ScriptTestBase
{
diff --git a/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json b/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json
new file mode 100644
index 0000000000..af1a042508
--- /dev/null
+++ b/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json
@@ -0,0 +1,21 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Debug",
+ "Microsoft": "Warning"
+ }
+ },
+
+ "TestRequestTimeout": 180,
+
+ "HostBotClientOptions": {
+ "EmptyBotDotNetWebApp": {
+ "BotId": "bfcfnemptybotdotnetwebapp",
+ "DirectLineSecret": ""
+ },
+ "EmptyBotJSWebApp": {
+ "BotId": "bfcfnemptybotjswebapp",
+ "DirectLineSecret": ""
+ }
+ }
+}
diff --git a/tests/functional/Tests/SkillFunctionalTests/xunit.runner.json b/tests/functional/Tests/ComponentsFunctionalTests/xunit.runner.json
similarity index 100%
rename from tests/functional/Tests/SkillFunctionalTests/xunit.runner.json
rename to tests/functional/Tests/ComponentsFunctionalTests/xunit.runner.json
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs b/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs
deleted file mode 100644
index 25391c6fa0..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading.Tasks;
-using Microsoft.Bot.Connector;
-using Microsoft.Bot.Schema;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using SkillFunctionalTests.Common;
-using TranscriptTestRunner;
-using TranscriptTestRunner.XUnit;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace SkillFunctionalTests.CardActions
-{
- [Trait("TestCategory", "CardActions")]
- public class CardActionsTests : ScriptTestBase
- {
- private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/CardActions/TestScripts";
-
- public CardActionsTests(ITestOutputHelper output)
- : base(output)
- {
- }
-
- public static IEnumerable TestCases()
- {
- var channelIds = new List { Channels.Directline };
-
- var deliverModes = new List
- {
- DeliveryModes.Normal,
- DeliveryModes.ExpectReplies
- };
-
- var hostBots = new List
- {
- HostBot.WaterfallHostBotDotNet,
- HostBot.WaterfallHostBotJS,
- HostBot.WaterfallHostBotPython,
-
- // TODO: Enable this when the port to composer is ready
- //HostBot.ComposerHostBotDotNet
- };
-
- var targetSkills = new List
- {
- SkillBotNames.WaterfallSkillBotDotNet,
- SkillBotNames.WaterfallSkillBotJS,
- SkillBotNames.WaterfallSkillBotPython,
-
- // TODO: Enable this when the port to composer is ready
- //SkillBotNames.ComposerSkillBotDotNet
- };
-
- var scripts = new List
- {
- "BotAction.json",
- "TaskModule.json",
- "SubmitAction.json",
- "Hero.json",
- "Thumbnail.json",
- "Receipt.json",
- "SignIn.json",
- "Carousel.json",
- "List.json",
- "O365.json",
- "Animation.json",
- "Audio.json",
- "Video.json"
- };
-
- var testCaseBuilder = new TestCaseBuilder();
-
- // This local function is used to exclude ExpectReplies, O365 and WaterfallSkillBotPython test cases
- static bool ShouldExclude(TestCase testCase)
- {
- if (testCase.Script == "O365.json")
- {
- // BUG: O365 fails with ExpectReplies for WaterfallSkillBotPython (remove when https://github.com/microsoft/BotFramework-FunctionalTests/issues/328 is fixed).
- if (testCase.TargetSkill == SkillBotNames.WaterfallSkillBotPython && testCase.DeliveryMode == DeliveryModes.ExpectReplies)
- {
- return true;
- }
- }
-
- return false;
- }
-
- var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts, ShouldExclude);
- foreach (var testCase in testCases)
- {
- yield return testCase;
- }
- }
-
- [Theory]
- [MemberData(nameof(TestCases))]
- public async Task RunTestCases(TestCaseDataObject testData)
- {
- var testCase = testData.GetObject();
- Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented));
-
- var options = TestClientOptions[testCase.HostBot];
- var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger);
-
- var testParams = new Dictionary
- {
- { "DeliveryMode", testCase.DeliveryMode },
- { "TargetSkill", testCase.TargetSkill }
- };
-
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "WaterfallGreeting.json"), testParams);
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams);
- }
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json
deleted file mode 100644
index 237082091f..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Animation"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.animation'",
- "attachments[0].content.title == 'Animation Card'",
- "attachments[0].content.autostart == True"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript
deleted file mode 100644
index a2c1586a72..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript
+++ /dev/null
@@ -1,165 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839814734xukiykq7r6",
- "clientTimestamp": "2021-01-28T13:16:54.734Z"
- },
- "text": "Animation",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:16:54.799Z",
- "conversation": {
- "id": "063c4460-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "1776d1f0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:16:54-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "063c4460-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.animation",
- "content": {
- "title": "Animation Card",
- "media": [
- {
- "url": "https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif"
- }
- ],
- "autostart": true
- }
- }
- ],
- "entities": [],
- "replyToId": "1776d1f0-616b-11eb-b46e-c3c3213a748e",
- "id": "183d0820-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:16:56-03:00",
- "timestamp": "2021-01-28T13:16:56.097Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "063c4460-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "1776d1f0-616b-11eb-b46e-c3c3213a748e",
- "id": "18699660-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:16:56-03:00",
- "timestamp": "2021-01-28T13:16:56.390Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118398192100re8kcctazwj",
- "clientTimestamp": "2021-01-28T13:16:59.210Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:16:59.271Z",
- "conversation": {
- "id": "063c4460-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "1a213170-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:16:59-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "063c4460-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "1a213170-616b-11eb-b46e-c3c3213a748e",
- "id": "1adc9230-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:17:00-03:00",
- "timestamp": "2021-01-28T13:17:00.498Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json
deleted file mode 100644
index 2f7f16a576..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Audio"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.audio'",
- "attachments[0].content.title == 'Audio Card'",
- "attachments[0].content.autoloop == True"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript
deleted file mode 100644
index 4b83bab546..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript
+++ /dev/null
@@ -1,165 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839872412avts1ortbzo",
- "clientTimestamp": "2021-01-28T13:17:52.412Z"
- },
- "text": "Audio",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "e0681749-455e-4df6-ac1d-cce532da5262",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:17:52.463Z",
- "conversation": {
- "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "39d5a5f0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:17:52-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "e0681749-455e-4df6-ac1d-cce532da5262",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.audio",
- "content": {
- "title": "Audio Card",
- "media": [
- {
- "url": "https://bffnwaterfallskillbotdotnet.azurewebsites.net/api/music"
- }
- ],
- "autoloop": true
- }
- }
- ],
- "entities": [],
- "replyToId": "39d5a5f0-616b-11eb-b46e-c3c3213a748e",
- "id": "3a6c1990-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:17:53-03:00",
- "timestamp": "2021-01-28T13:17:53.449Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "e0681749-455e-4df6-ac1d-cce532da5262",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "39d5a5f0-616b-11eb-b46e-c3c3213a748e",
- "id": "3a98f5f0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:17:53-03:00",
- "timestamp": "2021-01-28T13:17:53.743Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118398766380tfc3r379ha",
- "clientTimestamp": "2021-01-28T13:17:56.638Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "e0681749-455e-4df6-ac1d-cce532da5262",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:17:56.693Z",
- "conversation": {
- "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "3c5b3f60-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:17:56-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "e0681749-455e-4df6-ac1d-cce532da5262",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "3c5b3f60-616b-11eb-b46e-c3c3213a748e",
- "id": "3cfcfda0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:17:57-03:00",
- "timestamp": "2021-01-28T13:17:57.754Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json
deleted file mode 100644
index f3b7f58912..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "AdaptiveCardBotAction"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'TextBlock'",
- "attachments[0].content.body[0].text == 'Bot Builder actions'",
- "attachments[0].content.actions[0].type == 'Action.Submit'",
- "attachments[0].content.actions[0].data.msteams.type == 'imBack'",
- "attachments[0].content.actions[0].data.msteams.value == 'text'",
- "attachments[0].content.actions[0].title == 'imBack'",
- "attachments[0].content.actions[1].type == 'Action.Submit'",
- "attachments[0].content.actions[1].data.msteams.type == 'messageBack'",
- "attachments[0].content.actions[1].data.msteams.value.key == 'value'",
- "attachments[0].content.actions[1].title == 'message back'",
- "attachments[0].content.actions[2].type == 'Action.Submit'",
- "attachments[0].content.actions[2].data.msteams.type == 'messageBack'",
- "attachments[0].content.actions[2].data.msteams.text == 'text received by bots'",
- "attachments[0].content.actions[2].data.msteams.displayText == 'display text message back'",
- "attachments[0].content.actions[2].data.msteams.value.key == 'value'",
- "attachments[0].content.actions[2].title == 'message back local echo'",
- "attachments[0].content.actions[3].type == 'Action.Submit'",
- "attachments[0].content.actions[3].data.msteams.type == 'invoke'",
- "attachments[0].content.actions[3].data.msteams.value.key == 'value'",
- "attachments[0].content.actions[3].title == 'invoke'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript
deleted file mode 100644
index 089ea60de3..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript
+++ /dev/null
@@ -1,216 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611838440775fk6vbo5p5nw",
- "clientTimestamp": "2021-01-28T12:54:00.775Z"
- },
- "text": "AdaptiveCardBotAction",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T12:54:00.810Z",
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "id": "e480bca0-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:54:00-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "type": "AdaptiveCard",
- "version": "1.2",
- "body": [
- {
- "type": "TextBlock",
- "text": "Bot Builder actions"
- }
- ],
- "actions": [
- {
- "type": "Action.Submit",
- "data": {
- "msteams": {
- "type": "imBack",
- "value": "text"
- }
- },
- "title": "imBack"
- },
- {
- "type": "Action.Submit",
- "data": {
- "msteams": {
- "type": "messageBack",
- "value": {
- "key": "value"
- }
- }
- },
- "title": "message back"
- },
- {
- "type": "Action.Submit",
- "data": {
- "msteams": {
- "type": "messageBack",
- "text": "text received by bots",
- "displayText": "display text message back",
- "value": {
- "key": "value"
- }
- }
- },
- "title": "message back local echo"
- },
- {
- "type": "Action.Submit",
- "data": {
- "msteams": {
- "type": "invoke",
- "value": {
- "key": "value"
- }
- }
- },
- "title": "invoke"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "e480bca0-6167-11eb-b46e-c3c3213a748e",
- "id": "e59fc130-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:54:02-03:00",
- "timestamp": "2021-01-28T12:54:02.691Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "e480bca0-6167-11eb-b46e-c3c3213a748e",
- "id": "e5cb3e00-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:54:02-03:00",
- "timestamp": "2021-01-28T12:54:02.976Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611838581343cy25vk7jmo9",
- "clientTimestamp": "2021-01-28T12:56:21.344Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T12:56:21.384Z",
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "id": "384aa080-6168-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:56:21-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "384aa080-6168-11eb-b46e-c3c3213a748e",
- "id": "3948af90-6168-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:56:23-03:00",
- "timestamp": "2021-01-28T12:56:23.049Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json
deleted file mode 100644
index 1bf2d60fcd..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Carousel"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'carousel'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.hero'",
- "attachments[0].content.title == 'BotFramework Hero Card'",
- "attachments[0].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[0].content.buttons[0].type == 'openUrl'",
- "attachments[0].content.buttons[0].title == 'Get Started'",
- "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'",
- "attachments[1].contentType == 'application/vnd.microsoft.card.hero'",
- "attachments[1].content.title == 'BotFramework Hero Card'",
- "attachments[1].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[1].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[1].content.buttons[0].type == 'openUrl'",
- "attachments[1].content.buttons[0].title == 'Get Started'",
- "attachments[1].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'",
- "attachments[2].contentType == 'application/vnd.microsoft.card.hero'",
- "attachments[2].content.title == 'BotFramework Hero Card'",
- "attachments[2].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[2].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[2].content.buttons[0].type == 'openUrl'",
- "attachments[2].content.buttons[0].title == 'Get Started'",
- "attachments[2].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript
deleted file mode 100644
index 1a9de47a96..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript
+++ /dev/null
@@ -1,213 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839522508zaakfbpcfw",
- "clientTimestamp": "2021-01-28T13:12:02.508Z"
- },
- "text": "Carousel",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "43ff7934-8228-49a8-9925-6d469752f983",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:12:02.562Z",
- "conversation": {
- "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "6946fe20-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:02-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "43ff7934-8228-49a8-9925-6d469752f983",
- "role": "user"
- },
- "attachmentLayout": "carousel",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.hero",
- "content": {
- "title": "BotFramework Hero Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- },
- {
- "contentType": "application/vnd.microsoft.card.hero",
- "content": {
- "title": "BotFramework Hero Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- },
- {
- "contentType": "application/vnd.microsoft.card.hero",
- "content": {
- "title": "BotFramework Hero Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "6946fe20-616a-11eb-b46e-c3c3213a748e",
- "id": "69fedc70-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:03-03:00",
- "timestamp": "2021-01-28T13:12:03.767Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "43ff7934-8228-49a8-9925-6d469752f983",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "6946fe20-616a-11eb-b46e-c3c3213a748e",
- "id": "6a2af580-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:04-03:00",
- "timestamp": "2021-01-28T13:12:04.056Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839526614stj36f82vy",
- "clientTimestamp": "2021-01-28T13:12:06.614Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "43ff7934-8228-49a8-9925-6d469752f983",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:12:06.671Z",
- "conversation": {
- "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "6bb9f9f0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:06-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "43ff7934-8228-49a8-9925-6d469752f983",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "6bb9f9f0-616a-11eb-b46e-c3c3213a748e",
- "id": "6c559db0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:07-03:00",
- "timestamp": "2021-01-28T13:12:07.691Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json
deleted file mode 100644
index d913abad6a..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Hero"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.hero'",
- "attachments[0].content.title == 'BotFramework Hero Card'",
- "attachments[0].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[0].content.buttons[0].type == 'openUrl'",
- "attachments[0].content.buttons[0].title == 'Get Started'",
- "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript
deleted file mode 100644
index 9a95ed0474..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript
+++ /dev/null
@@ -1,173 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839251501nwivvhmw61i",
- "clientTimestamp": "2021-01-28T13:07:31.501Z"
- },
- "text": "Hero",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:07:31.554Z",
- "conversation": {
- "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat"
- },
- "id": "c7be7420-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:07:31-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.hero",
- "content": {
- "title": "BotFramework Hero Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "c7be7420-6169-11eb-b46e-c3c3213a748e",
- "id": "c87519f0-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:07:32-03:00",
- "timestamp": "2021-01-28T13:07:32.750Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "c7be7420-6169-11eb-b46e-c3c3213a748e",
- "id": "c8e67960-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:07:33-03:00",
- "timestamp": "2021-01-28T13:07:33.494Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839255359ffrgmvahfew",
- "clientTimestamp": "2021-01-28T13:07:35.359Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:07:35.435Z",
- "conversation": {
- "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat"
- },
- "id": "ca0ea5b0-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:07:35-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "ca0ea5b0-6169-11eb-b46e-c3c3213a748e",
- "id": "cab03ce0-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:07:36-03:00",
- "timestamp": "2021-01-28T13:07:36.494Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json
deleted file mode 100644
index d34f09b8de..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "List"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.hero'",
- "attachments[0].content.title == 'BotFramework Hero Card'",
- "attachments[0].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[0].content.buttons[0].type == 'openUrl'",
- "attachments[0].content.buttons[0].title == 'Get Started'",
- "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'",
- "attachments[1].contentType == 'application/vnd.microsoft.card.hero'",
- "attachments[1].content.title == 'BotFramework Hero Card'",
- "attachments[1].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[1].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[1].content.buttons[0].type == 'openUrl'",
- "attachments[1].content.buttons[0].title == 'Get Started'",
- "attachments[1].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'",
- "attachments[2].contentType == 'application/vnd.microsoft.card.hero'",
- "attachments[2].content.title == 'BotFramework Hero Card'",
- "attachments[2].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[2].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[2].content.buttons[0].type == 'openUrl'",
- "attachments[2].content.buttons[0].title == 'Get Started'",
- "attachments[2].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript
deleted file mode 100644
index ccad6421be..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript
+++ /dev/null
@@ -1,213 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839575098y19me2gcp5b",
- "clientTimestamp": "2021-01-28T13:12:55.098Z"
- },
- "text": "List",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "59cdcc89-e282-4417-9822-4d725675243b",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:12:55.143Z",
- "conversation": {
- "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "889e3770-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:55-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "59cdcc89-e282-4417-9822-4d725675243b",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.hero",
- "content": {
- "title": "BotFramework Hero Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- },
- {
- "contentType": "application/vnd.microsoft.card.hero",
- "content": {
- "title": "BotFramework Hero Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- },
- {
- "contentType": "application/vnd.microsoft.card.hero",
- "content": {
- "title": "BotFramework Hero Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "889e3770-616a-11eb-b46e-c3c3213a748e",
- "id": "89448990-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:56-03:00",
- "timestamp": "2021-01-28T13:12:56.233Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "59cdcc89-e282-4417-9822-4d725675243b",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "889e3770-616a-11eb-b46e-c3c3213a748e",
- "id": "8970a2a0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:56-03:00",
- "timestamp": "2021-01-28T13:12:56.522Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839578738d2iy2wsylg",
- "clientTimestamp": "2021-01-28T13:12:58.738Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "59cdcc89-e282-4417-9822-4d725675243b",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:12:58.788Z",
- "conversation": {
- "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "8aca6640-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:58-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "59cdcc89-e282-4417-9822-4d725675243b",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "8aca6640-616a-11eb-b46e-c3c3213a748e",
- "id": "8b62d5b0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:12:59-03:00",
- "timestamp": "2021-01-28T13:12:59.787Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json
deleted file mode 100644
index a36b000dfe..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json
+++ /dev/null
@@ -1,181 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "o365"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.teams.card.o365connector'",
- "attachments[0].content.title == 'card title'",
- "attachments[0].content.text == 'card text'",
- "attachments[0].content.summary == 'O365 card summary'",
- "attachments[0].content.themeColor == '#E67A9E'",
- "attachments[0].content.sections[0].title == '**section title**'",
- "attachments[0].content.sections[0].text == 'section text'",
- "attachments[0].content.sections[0].activityTitle == 'activity title'",
- "attachments[0].content.sections[0].activitySubtitle == 'activity subtitle'",
- "attachments[0].content.sections[0].activityText == 'activity text'",
- "attachments[0].content.sections[0].activityImage == 'http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg'",
- "attachments[0].content.sections[0].activityImageType == 'avatar'",
- "attachments[0].content.sections[0].markdown == True",
- "attachments[0].content.sections[0].facts[0].name == 'Fact name 1'",
- "attachments[0].content.sections[0].facts[0].value == 'Fact value 1'",
- "attachments[0].content.sections[0].facts[1].name == 'Fact name 2'",
- "attachments[0].content.sections[0].facts[1].value == 'Fact value 2'",
- "attachments[0].content.sections[0].images[0].image == 'http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg'",
- "attachments[0].content.sections[0].images[0].title == 'image 1'",
- "attachments[0].content.sections[0].images[1].image == 'http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg'",
- "attachments[0].content.sections[0].images[1].title == 'image 2'",
- "attachments[0].content.sections[0].images[2].image == 'http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg'",
- "attachments[0].content.sections[0].images[2].title == 'image 3'",
- "attachments[0].content.potentialAction[0].@type == 'ActionCard'",
- "attachments[0].content.potentialAction[0].inputs[0].@type == 'MultichoiceInput'",
- "attachments[0].content.potentialAction[0].inputs[0].choices[0].display == 'Choice 1'",
- "attachments[0].content.potentialAction[0].inputs[0].choices[1].display == 'Choice 2'",
- "attachments[0].content.potentialAction[0].inputs[0].choices[2].display == 'Choice 3'",
- "attachments[0].content.potentialAction[0].inputs[0].style == 'expanded'",
- "attachments[0].content.potentialAction[0].inputs[0].isMultiSelect == True",
- "attachments[0].content.potentialAction[0].inputs[0].id == 'list-1'",
- "attachments[0].content.potentialAction[0].inputs[0].isRequired == True",
- "attachments[0].content.potentialAction[0].inputs[0].title == 'Pick multiple options'",
- "attachments[0].content.potentialAction[0].inputs[1].@type == 'MultichoiceInput'",
- "attachments[0].content.potentialAction[0].inputs[1].choices[0].display == 'Choice 4'",
- "attachments[0].content.potentialAction[0].inputs[1].choices[1].display == 'Choice 5'",
- "attachments[0].content.potentialAction[0].inputs[1].choices[2].display == 'Choice 6'",
- "attachments[0].content.potentialAction[0].inputs[1].style == 'compact'",
- "attachments[0].content.potentialAction[0].inputs[1].isMultiSelect == True",
- "attachments[0].content.potentialAction[0].inputs[1].id == 'list-2'",
- "attachments[0].content.potentialAction[0].inputs[1].isRequired == True",
- "attachments[0].content.potentialAction[0].inputs[1].title == 'Pick multiple options'",
- "attachments[0].content.potentialAction[0].inputs[2].@type == 'MultichoiceInput'",
- "attachments[0].content.potentialAction[0].inputs[2].choices[0].display == 'Choice a'",
- "attachments[0].content.potentialAction[0].inputs[2].choices[0].value == 'a'",
- "attachments[0].content.potentialAction[0].inputs[2].choices[1].display == 'Choice b'",
- "attachments[0].content.potentialAction[0].inputs[2].choices[1].value == 'b'",
- "attachments[0].content.potentialAction[0].inputs[2].choices[2].display == 'Choice c'",
- "attachments[0].content.potentialAction[0].inputs[2].choices[2].value == 'c'",
- "attachments[0].content.potentialAction[0].inputs[2].style == 'expanded'",
- "attachments[0].content.potentialAction[0].inputs[2].isMultiSelect == False",
- "attachments[0].content.potentialAction[0].inputs[2].id == 'list-3'",
- "attachments[0].content.potentialAction[0].inputs[2].isRequired == False",
- "attachments[0].content.potentialAction[0].inputs[2].title == 'Pick an option'",
- "attachments[0].content.potentialAction[0].inputs[3].@type == 'MultichoiceInput'",
- "attachments[0].content.potentialAction[0].inputs[3].choices[0].display == 'Choice x'",
- "attachments[0].content.potentialAction[0].inputs[3].choices[0].value == 'x'",
- "attachments[0].content.potentialAction[0].inputs[3].choices[1].display == 'Choice y'",
- "attachments[0].content.potentialAction[0].inputs[3].choices[1].value == 'y'",
- "attachments[0].content.potentialAction[0].inputs[3].choices[2].display == 'Choice z'",
- "attachments[0].content.potentialAction[0].inputs[3].choices[2].value == 'z'",
- "attachments[0].content.potentialAction[0].inputs[3].style == 'compact'",
- "attachments[0].content.potentialAction[0].inputs[3].isMultiSelect == False",
- "attachments[0].content.potentialAction[0].inputs[3].id == 'list-4'",
- "attachments[0].content.potentialAction[0].inputs[3].isRequired == False",
- "attachments[0].content.potentialAction[0].inputs[3].title == 'Pick an option'",
- "attachments[0].content.potentialAction[0].actions[0].@type == 'HttpPOST'",
- "attachments[0].content.potentialAction[0].actions[0].name == 'Send'",
- "attachments[0].content.potentialAction[0].actions[0].@id == 'card-1-btn-1'",
- "attachments[0].content.potentialAction[0].name == 'Multiple Choice'",
- "attachments[0].content.potentialAction[0].@id == 'card-1'",
- "attachments[0].content.potentialAction[1].@type == 'ActionCard'",
- "attachments[0].content.potentialAction[1].inputs[0].@type == 'TextInput'",
- "attachments[0].content.potentialAction[1].inputs[0].isMultiline == True",
- "attachments[0].content.potentialAction[1].inputs[0].id == 'text-1'",
- "attachments[0].content.potentialAction[1].inputs[0].isRequired == False",
- "attachments[0].content.potentialAction[1].inputs[0].title == 'multiline, no maxLength'",
- "attachments[0].content.potentialAction[1].inputs[1].@type == 'TextInput'",
- "attachments[0].content.potentialAction[1].inputs[1].isMultiline == False",
- "attachments[0].content.potentialAction[1].inputs[1].id == 'text-2'",
- "attachments[0].content.potentialAction[1].inputs[1].isRequired == False",
- "attachments[0].content.potentialAction[1].inputs[1].title == 'single line, no maxLength'",
- "attachments[0].content.potentialAction[1].inputs[2].@type == 'TextInput'",
- "attachments[0].content.potentialAction[1].inputs[2].isMultiline == True",
- "attachments[0].content.potentialAction[1].inputs[2].id == 'text-3'",
- "attachments[0].content.potentialAction[1].inputs[2].isRequired == True",
- "attachments[0].content.potentialAction[1].inputs[2].title == 'multiline, max len = 10, isRequired'",
- "attachments[0].content.potentialAction[1].inputs[3].@type == 'TextInput'",
- "attachments[0].content.potentialAction[1].inputs[3].isMultiline == False",
- "attachments[0].content.potentialAction[1].inputs[3].id == 'text-4'",
- "attachments[0].content.potentialAction[1].inputs[3].isRequired == True",
- "attachments[0].content.potentialAction[1].inputs[3].title == 'single line, max len = 10, isRequired'",
- "attachments[0].content.potentialAction[1].actions[0].@type == 'HttpPOST'",
- "attachments[0].content.potentialAction[1].actions[0].name == 'Send'",
- "attachments[0].content.potentialAction[1].actions[0].@id == 'card-2-btn-1'",
- "attachments[0].content.potentialAction[1].name == 'Text Input'",
- "attachments[0].content.potentialAction[1].@id == 'card-2'",
- "attachments[0].content.potentialAction[2].@type == 'ActionCard'",
- "attachments[0].content.potentialAction[2].inputs[0].@type == 'DateInput'",
- "attachments[0].content.potentialAction[2].inputs[0].includeTime == True",
- "attachments[0].content.potentialAction[2].inputs[0].id == 'date-1'",
- "attachments[0].content.potentialAction[2].inputs[0].isRequired == True",
- "attachments[0].content.potentialAction[2].inputs[0].title == 'date with time'",
- "attachments[0].content.potentialAction[2].inputs[1].@type == 'DateInput'",
- "attachments[0].content.potentialAction[2].inputs[1].includeTime == False",
- "attachments[0].content.potentialAction[2].inputs[1].id == 'date-2'",
- "attachments[0].content.potentialAction[2].inputs[1].isRequired == False",
- "attachments[0].content.potentialAction[2].inputs[1].title == 'date only'",
- "attachments[0].content.potentialAction[2].actions[0].@type == 'HttpPOST'",
- "attachments[0].content.potentialAction[2].actions[0].name == 'Send'",
- "attachments[0].content.potentialAction[2].actions[0].@id == 'card-3-btn-1'",
- "attachments[0].content.potentialAction[2].name == 'Date Input'",
- "attachments[0].content.potentialAction[2].@id == 'card-3'",
- "attachments[0].content.potentialAction[3].@type == 'ViewAction'",
- "attachments[0].content.potentialAction[3].name == 'View Action'",
- "attachments[0].content.potentialAction[4].@type == 'OpenUri'",
- "attachments[0].content.potentialAction[4].targets[0].os == 'default'",
- "attachments[0].content.potentialAction[4].targets[0].uri == 'http://microsoft.com'",
- "attachments[0].content.potentialAction[4].targets[1].os == 'iOS'",
- "attachments[0].content.potentialAction[4].targets[1].uri == 'http://microsoft.com'",
- "attachments[0].content.potentialAction[4].targets[2].os == 'android'",
- "attachments[0].content.potentialAction[4].targets[2].uri == 'http://microsoft.com'",
- "attachments[0].content.potentialAction[4].targets[3].os == 'windows'",
- "attachments[0].content.potentialAction[4].targets[3].uri == 'http://microsoft.com'",
- "attachments[0].content.potentialAction[4].name == 'Open Uri'",
- "attachments[0].content.potentialAction[4].@id == 'open-uri'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript
deleted file mode 100644
index 35486a16ed..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript
+++ /dev/null
@@ -1,407 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "16097853343944p9zoiqzu9d",
- "clientTimestamp": "2021-01-04T18:35:34.394Z"
- },
- "text": "o365",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "9dbd973e-a896-4b91-9d00-e98bb8dec6a2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-04T18:35:34.423Z",
- "conversation": {
- "id": "9a3c8340-4ebb-11eb-9fc9-afbd749ec1ea|livechat"
- },
- "id": "a1bbea70-4ebb-11eb-8029-87a6e92fcaab",
- "localTimestamp": "2021-01-04T15:35:34-03:00",
- "recipient": {
- "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://0e141a8d6e98.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://0e141a8d6e98.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "9a3c8340-4ebb-11eb-9fc9-afbd749ec1ea|livechat"
- },
- "recipient": {
- "id": "9dbd973e-a896-4b91-9d00-e98bb8dec6a2",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.teams.card.o365connector",
- "content": {
- "title": "card title",
- "text": "card text",
- "summary": "O365 card summary",
- "themeColor": "#E67A9E",
- "sections": [
- {
- "title": "**section title**",
- "text": "section text",
- "activityTitle": "activity title",
- "activitySubtitle": "activity subtitle",
- "activityText": "activity text",
- "activityImage": "http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg",
- "activityImageType": "avatar",
- "markdown": true,
- "facts": [
- {
- "name": "Fact name 1",
- "value": "Fact value 1"
- },
- {
- "name": "Fact name 2",
- "value": "Fact value 2"
- }
- ],
- "images": [
- {
- "image": "http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg",
- "title": "image 1"
- },
- {
- "image": "http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg",
- "title": "image 2"
- },
- {
- "image": "http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg",
- "title": "image 3"
- }
- ]
- }
- ],
- "potentialAction": [
- {
- "@type": "ActionCard",
- "inputs": [
- {
- "@type": "MultichoiceInput",
- "choices": [
- {
- "display": "Choice 1",
- "value": "1"
- },
- {
- "display": "Choice 2",
- "value": "2"
- },
- {
- "display": "Choice 3",
- "value": "3"
- }
- ],
- "style": "expanded",
- "isMultiSelect": true,
- "id": "list-1",
- "isRequired": true,
- "title": "Pick multiple options"
- },
- {
- "@type": "MultichoiceInput",
- "choices": [
- {
- "display": "Choice 4",
- "value": "4"
- },
- {
- "display": "Choice 5",
- "value": "5"
- },
- {
- "display": "Choice 6",
- "value": "6"
- }
- ],
- "style": "compact",
- "isMultiSelect": true,
- "id": "list-2",
- "isRequired": true,
- "title": "Pick multiple options"
- },
- {
- "@type": "MultichoiceInput",
- "choices": [
- {
- "display": "Choice a",
- "value": "a"
- },
- {
- "display": "Choice b",
- "value": "b"
- },
- {
- "display": "Choice c",
- "value": "c"
- }
- ],
- "style": "expanded",
- "isMultiSelect": false,
- "id": "list-3",
- "isRequired": false,
- "title": "Pick an option"
- },
- {
- "@type": "MultichoiceInput",
- "choices": [
- {
- "display": "Choice x",
- "value": "x"
- },
- {
- "display": "Choice y",
- "value": "y"
- },
- {
- "display": "Choice z",
- "value": "z"
- }
- ],
- "style": "compact",
- "isMultiSelect": false,
- "id": "list-4",
- "isRequired": false,
- "title": "Pick an option"
- }
- ],
- "actions": [
- {
- "@type": "HttpPOST",
- "body": "{\"list1\":\"{{list-1.value}}\", \"list2\":\"{{list-2.value}}\", \"list3\":\"{{list-3.value}}\", \"list4\":\"{{list-4.value}}\"}",
- "name": "Send",
- "@id": "card-1-btn-1"
- }
- ],
- "name": "Multiple Choice",
- "@id": "card-1"
- },
- {
- "@type": "ActionCard",
- "inputs": [
- {
- "@type": "TextInput",
- "isMultiline": true,
- "id": "text-1",
- "isRequired": false,
- "title": "multiline, no maxLength"
- },
- {
- "@type": "TextInput",
- "isMultiline": false,
- "id": "text-2",
- "isRequired": false,
- "title": "single line, no maxLength"
- },
- {
- "@type": "TextInput",
- "isMultiline": true,
- "maxLength": 10,
- "id": "text-3",
- "isRequired": true,
- "title": "multiline, max len = 10, isRequired"
- },
- {
- "@type": "TextInput",
- "isMultiline": false,
- "maxLength": 10,
- "id": "text-4",
- "isRequired": true,
- "title": "single line, max len = 10, isRequired"
- }
- ],
- "actions": [
- {
- "@type": "HttpPOST",
- "body": "{\"text1\":\"{{text-1.value}}\", \"text2\":\"{{text-2.value}}\", \"text3\":\"{{text-3.value}}\", \"text4\":\"{{text-4.value}}\"}",
- "name": "Send",
- "@id": "card-2-btn-1"
- }
- ],
- "name": "Text Input",
- "@id": "card-2"
- },
- {
- "@type": "ActionCard",
- "inputs": [
- {
- "@type": "DateInput",
- "includeTime": true,
- "id": "date-1",
- "isRequired": true,
- "title": "date with time"
- },
- {
- "@type": "DateInput",
- "includeTime": false,
- "id": "date-2",
- "isRequired": false,
- "title": "date only"
- }
- ],
- "actions": [
- {
- "@type": "HttpPOST",
- "body": "{\"date1\":\"{{date-1.value}}\", \"date2\":\"{{date-2.value}}\"}",
- "name": "Send",
- "@id": "card-3-btn-1"
- }
- ],
- "name": "Date Input",
- "@id": "card-3"
- },
- {
- "@type": "ViewAction",
- "target": [
- "http://microsoft.com"
- ],
- "name": "View Action"
- },
- {
- "@type": "OpenUri",
- "targets": [
- {
- "os": "default",
- "uri": "http://microsoft.com"
- },
- {
- "os": "iOS",
- "uri": "http://microsoft.com"
- },
- {
- "os": "android",
- "uri": "http://microsoft.com"
- },
- {
- "os": "windows",
- "uri": "http://microsoft.com"
- }
- ],
- "name": "Open Uri",
- "@id": "open-uri"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "a1bbea70-4ebb-11eb-8029-87a6e92fcaab",
- "id": "a2567cc0-4ebb-11eb-8029-87a6e92fcaab",
- "localTimestamp": "2021-01-04T15:35:35-03:00",
- "timestamp": "2021-01-04T18:35:35.436Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://a3c0daa166e8.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "e6f62e00-5a57-11eb-856d-5fc1719d27ce",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "5cd758c0-5a5c-11eb-856d-5fc1719d27ce|livechat"
- },
- "recipient": {
- "id": "967d23e5-491c-4039-9edd-923a53617734",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "6511ab80-5a5c-11eb-9f42-afe5fddb4d6c",
- "id": "6603aca0-5a5c-11eb-9f42-afe5fddb4d6c",
- "localTimestamp": "2021-01-19T10:44:05-03:00",
- "timestamp": "2021-01-19T13:44:05.994Z"
- },
- {
- "channelData": {
- "clientActivityID": "1609785433694xe3les8ksd",
- "clientTimestamp": "2021-01-04T18:37:13.694Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "9bdd62a5-6bf7-4c0c-a7b6-e954be30f2f0",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-04T18:37:13.730Z",
- "conversation": {
- "id": "cee77be0-4ebb-11eb-9fc9-afbd749ec1ea|livechat"
- },
- "id": "dcecf620-4ebb-11eb-8029-87a6e92fcaab",
- "localTimestamp": "2021-01-04T15:37:13-03:00",
- "recipient": {
- "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://0e141a8d6e98.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://0e141a8d6e98.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "cee77be0-4ebb-11eb-9fc9-afbd749ec1ea|livechat"
- },
- "recipient": {
- "id": "9bdd62a5-6bf7-4c0c-a7b6-e954be30f2f0",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "dcecf620-4ebb-11eb-8029-87a6e92fcaab",
- "id": "ddb8aa90-4ebb-11eb-8029-87a6e92fcaab",
- "localTimestamp": "2021-01-04T15:37:15-03:00",
- "timestamp": "2021-01-04T18:37:15.065Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json
deleted file mode 100644
index 1709f44ccd..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Receipt"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.receipt'",
- "attachments[0].content.title == 'John Doe'",
- "attachments[0].content.facts[0].key == 'Order Number'",
- "attachments[0].content.facts[1].key == 'Payment Method'",
- "attachments[0].content.facts[1].value == 'VISA 5555-****'",
- "attachments[0].content.items[0].title == 'Data Transfer'",
- "attachments[0].content.items[0].image.url == 'https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png'",
- "attachments[0].content.items[0].price == '$ 38.45'",
- "attachments[0].content.items[1].title == 'App Service'",
- "attachments[0].content.items[1].image.url == 'https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png'",
- "attachments[0].content.items[1].price == '$ 45.00'",
- "attachments[0].content.total == '$ 90.95'",
- "attachments[0].content.tax == '$ 7.50'",
- "attachments[0].content.buttons[0].type == 'openUrl'",
- "attachments[0].content.buttons[0].title == 'More information'",
- "attachments[0].content.buttons[0].image == 'https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png'",
- "attachments[0].content.buttons[0].value == 'https://azure.microsoft.com/en-us/pricing/'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript
deleted file mode 100644
index e5205b5dc7..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript
+++ /dev/null
@@ -1,197 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839371599wsbxze20iv",
- "clientTimestamp": "2021-01-28T13:09:31.599Z"
- },
- "text": "Receipt",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "3eb35847-111c-4ec7-86de-a54438c4a976",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:09:31.650Z",
- "conversation": {
- "id": "06cce110-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "0f53a620-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:09:31-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "06cce110-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "3eb35847-111c-4ec7-86de-a54438c4a976",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.receipt",
- "content": {
- "title": "John Doe",
- "facts": [
- {
- "key": "Order Number",
- "value": "1234"
- },
- {
- "key": "Payment Method",
- "value": "VISA 5555-****"
- }
- ],
- "items": [
- {
- "title": "Data Transfer",
- "image": {
- "url": "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png"
- },
- "price": "$ 38.45",
- "quantity": "368"
- },
- {
- "title": "App Service",
- "image": {
- "url": "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png"
- },
- "price": "$ 45.00",
- "quantity": "720"
- }
- ],
- "total": "$ 90.95",
- "tax": "$ 7.50",
- "buttons": [
- {
- "type": "openUrl",
- "title": "More information",
- "image": "https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png",
- "value": "https://azure.microsoft.com/en-us/pricing/"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "0f53a620-616a-11eb-b46e-c3c3213a748e",
- "id": "0ff42be0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:09:32-03:00",
- "timestamp": "2021-01-28T13:09:32.702Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "06cce110-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "3eb35847-111c-4ec7-86de-a54438c4a976",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "0f53a620-616a-11eb-b46e-c3c3213a748e",
- "id": "101fcfc0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:09:32-03:00",
- "timestamp": "2021-01-28T13:09:32.988Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839374573ek608u3396m",
- "clientTimestamp": "2021-01-28T13:09:34.573Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "3eb35847-111c-4ec7-86de-a54438c4a976",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:09:34.793Z",
- "conversation": {
- "id": "06cce110-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "11333b90-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:09:34-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "06cce110-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "3eb35847-111c-4ec7-86de-a54438c4a976",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "11333b90-616a-11eb-b46e-c3c3213a748e",
- "id": "11ca2460-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:09:35-03:00",
- "timestamp": "2021-01-28T13:09:35.782Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json
deleted file mode 100644
index 74415aeb59..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Signin"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.signin'",
- "attachments[0].content.text == 'BotFramework Sign-in Card'",
- "attachments[0].content.buttons[0].type == 'signin'",
- "attachments[0].content.buttons[0].title == 'Sign-in'",
- "attachments[0].content.buttons[0].value == 'https://login.microsoftonline.com/'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript
deleted file mode 100644
index 93337e2ddc..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript
+++ /dev/null
@@ -1,166 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839446716rvo7eet9ri",
- "clientTimestamp": "2021-01-28T13:10:46.716Z"
- },
- "text": "Signin",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:10:46.812Z",
- "conversation": {
- "id": "32bac261-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "3c209cd0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:10:46-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "32bac261-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.signin",
- "content": {
- "text": "BotFramework Sign-in Card",
- "buttons": [
- {
- "type": "signin",
- "title": "Sign-in",
- "value": "https://login.microsoftonline.com/"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "3c209cd0-616a-11eb-b46e-c3c3213a748e",
- "id": "3cc47df0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:10:47-03:00",
- "timestamp": "2021-01-28T13:10:47.887Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "32bac261-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "3c209cd0-616a-11eb-b46e-c3c3213a748e",
- "id": "3cf0be10-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:10:48-03:00",
- "timestamp": "2021-01-28T13:10:48.177Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118394507003s21693ifj8",
- "clientTimestamp": "2021-01-28T13:10:50.700Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:10:50.748Z",
- "conversation": {
- "id": "32bac261-616a-11eb-881a-afe376da3863|livechat"
- },
- "id": "3e790bc0-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:10:50-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "32bac261-616a-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "3e790bc0-616a-11eb-b46e-c3c3213a748e",
- "id": "3f13c520-616a-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:10:51-03:00",
- "timestamp": "2021-01-28T13:10:51.762Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json
deleted file mode 100644
index 8509242e40..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "AdaptiveCardSubmitAction"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'TextBlock'",
- "attachments[0].content.body[0].text == 'Bot Builder actions'",
- "attachments[0].content.body[1].type == 'Input.Text'",
- "attachments[0].content.body[1].id == 'x'",
- "attachments[0].content.actions[0].type == 'Action.Submit'",
- "attachments[0].content.actions[0].data.key == 'value'",
- "attachments[0].content.actions[0].title == 'Action.Submit'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript
deleted file mode 100644
index 35ffbdf33c..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript
+++ /dev/null
@@ -1,179 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839977312o3qfq3addts",
- "clientTimestamp": "2021-01-28T13:19:37.312Z"
- },
- "text": "AdaptiveCardSumbitAction",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:19:37.385Z",
- "conversation": {
- "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "785f7990-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:19:37-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "type": "AdaptiveCard",
- "version": "1.2",
- "body": [
- {
- "type": "TextBlock",
- "text": "Bot Builder actions"
- },
- {
- "type": "Input.Text",
- "id": "x"
- }
- ],
- "actions": [
- {
- "type": "Action.Submit",
- "data": {
- "key": "value"
- },
- "title": "Action.Submit"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "785f7990-616b-11eb-b46e-c3c3213a748e",
- "id": "78f5ed30-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:19:38-03:00",
- "timestamp": "2021-01-28T13:19:38.371Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "785f7990-616b-11eb-b46e-c3c3213a748e",
- "id": "79227b70-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:19:38-03:00",
- "timestamp": "2021-01-28T13:19:38.663Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839981867xrs9cyi53o9",
- "clientTimestamp": "2021-01-28T13:19:41.867Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:19:41.920Z",
- "conversation": {
- "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "7b137600-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:19:41-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "7b137600-616b-11eb-b46e-c3c3213a748e",
- "id": "7bbb27b0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:19:43-03:00",
- "timestamp": "2021-01-28T13:19:43.019Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json
deleted file mode 100644
index d821b94cfd..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "AdaptiveCardTeamsTaskModule"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'TextBlock'",
- "attachments[0].content.body[0].text == 'Task Module Adaptive Card'",
- "attachments[0].content.actions[0].type == 'Action.Submit'",
- "attachments[0].content.actions[0].data.msteams.type == 'invoke'",
- "attachments[0].content.actions[0].title == 'Launch Task Module'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript
deleted file mode 100644
index 21df36d5ed..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript
+++ /dev/null
@@ -1,178 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "16118391929936yytoz4eh0g",
- "clientTimestamp": "2021-01-28T13:06:32.993Z"
- },
- "text": "AdaptiveCardTaskModule",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:06:33.044Z",
- "conversation": {
- "id": "9a706690-6169-11eb-881a-afe376da3863|livechat"
- },
- "id": "a4de8940-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:06:33-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "9a706690-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "type": "AdaptiveCard",
- "version": "1.2",
- "body": [
- {
- "type": "TextBlock",
- "text": "Task Module Adaptive Card"
- }
- ],
- "actions": [
- {
- "type": "Action.Submit",
- "data": {
- "msteams": {
- "type": "invoke",
- "value": "{\r\n \"hiddenKey\": \"hidden value from task module launcher\",\r\n \"type\": \"task/fetch\"\r\n}"
- }
- },
- "title": "Launch Task Module"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "a4de8940-6169-11eb-b46e-c3c3213a748e",
- "id": "a5a115f0-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:06:34-03:00",
- "timestamp": "2021-01-28T13:06:34.319Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "9a706690-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "a4de8940-6169-11eb-b46e-c3c3213a748e",
- "id": "a5cd07f0-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:06:34-03:00",
- "timestamp": "2021-01-28T13:06:34.607Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839197644k7d79gt7vgr",
- "clientTimestamp": "2021-01-28T13:06:37.644Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:06:37.717Z",
- "conversation": {
- "id": "9a706690-6169-11eb-881a-afe376da3863|livechat"
- },
- "id": "a7a79450-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:06:37-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "9a706690-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "a7a79450-6169-11eb-b46e-c3c3213a748e",
- "id": "a84e0d80-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:06:38-03:00",
- "timestamp": "2021-01-28T13:06:38.808Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json
deleted file mode 100644
index abf37c0aff..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Thumbnail"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'",
- "attachments[0].content.title == 'BotFramework Thumbnail Card'",
- "attachments[0].content.subtitle == 'Microsoft Bot Framework'",
- "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'",
- "attachments[0].content.buttons[0].type == 'openUrl'",
- "attachments[0].content.buttons[0].title == 'Get Started'",
- "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript
deleted file mode 100644
index dbae756d1d..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript
+++ /dev/null
@@ -1,173 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839317022nw5evtm02lt",
- "clientTimestamp": "2021-01-28T13:08:37.022Z"
- },
- "text": "Thumbnail",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:08:37.084Z",
- "conversation": {
- "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat"
- },
- "id": "eecd89c0-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:08:37-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.thumbnail",
- "content": {
- "title": "BotFramework Thumbnail Card",
- "subtitle": "Microsoft Bot Framework",
- "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
- "images": [
- {
- "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"
- }
- ],
- "buttons": [
- {
- "type": "openUrl",
- "title": "Get Started",
- "value": "https://docs.microsoft.com/bot-framework"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "eecd89c0-6169-11eb-b46e-c3c3213a748e",
- "id": "ef633a10-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:08:38-03:00",
- "timestamp": "2021-01-28T13:08:38.064Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "eecd89c0-6169-11eb-b46e-c3c3213a748e",
- "id": "ef8eb6e0-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:08:38-03:00",
- "timestamp": "2021-01-28T13:08:38.350Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839320481tz2ppzyepo9",
- "clientTimestamp": "2021-01-28T13:08:40.481Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:08:40.529Z",
- "conversation": {
- "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat"
- },
- "id": "f0db3410-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:08:40-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "f0db3410-6169-11eb-b46e-c3c3213a748e",
- "id": "f18e5770-6169-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:08:41-03:00",
- "timestamp": "2021-01-28T13:08:41.703Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json
deleted file mode 100644
index 2e96bb8001..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "user",
- "text": "Video"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.video'",
- "attachments[0].content.title == 'Video Card'",
- "attachments[0].content.media[0].url == 'https://www.youtube.com/watch?v=LvqzubPZjHE'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript
deleted file mode 100644
index 884aa68788..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript
+++ /dev/null
@@ -1,164 +0,0 @@
-[
- {
- "channelData": {
- "clientActivityID": "1611839916459etjxoqosqtr",
- "clientTimestamp": "2021-01-28T13:18:36.459Z"
- },
- "text": "Video",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:18:36.513Z",
- "conversation": {
- "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "54172510-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:18:36-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.video",
- "content": {
- "title": "Video Card",
- "media": [
- {
- "url": "https://www.youtube.com/watch?v=LvqzubPZjHE"
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "54172510-616b-11eb-b46e-c3c3213a748e",
- "id": "54b86e20-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:18:37-03:00",
- "timestamp": "2021-01-28T13:18:37.570Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "54172510-616b-11eb-b46e-c3c3213a748e",
- "id": "54e4d550-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:18:37-03:00",
- "timestamp": "2021-01-28T13:18:37.861Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611839921730zsw4gsfltfm",
- "clientTimestamp": "2021-01-28T13:18:41.731Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:18:41.787Z",
- "conversation": {
- "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "573be4b0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:18:41-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "573be4b0-616b-11eb-b46e-c3c3213a748e",
- "id": "57d31ba0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:18:42-03:00",
- "timestamp": "2021-01-28T13:18:42.778Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json
deleted file mode 100644
index af4438a1de..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json
+++ /dev/null
@@ -1,148 +0,0 @@
-{
- "items": [
- {
- "type": "conversationUpdate",
- "role": "user"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "speak == 'Welcome to the waterfall host bot'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'Image'",
- "attachments[0].content.body[0].size == 'stretch'",
- "attachments[0].content.body[1].type == 'TextBlock'",
- "attachments[0].content.body[1].spacing == 'Medium'",
- "attachments[0].content.body[1].size == 'Medium'",
- "attachments[0].content.body[1].weight == 'Bolder'",
- "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'",
- "attachments[0].content.body[1].wrap == True",
- "attachments[0].content.body[1].color == 'Accent'",
- "attachments[0].content.body[2].type == 'TextBlock'",
- "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'",
- "attachments[0].content.body[2].wrap == True"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What delivery mode would you like to use?'",
- "speak == 'What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${DeliveryMode}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What group of skills would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What group of skills would you like to use?'",
- "speak == 'What group of skills would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'",
- "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Waterfall"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "startsWith(text, 'What skill would you like to call?')",
- "speak == 'What skill would you like to call?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${TargetSkill}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'",
- "speak == 'Select an action to send to **${TargetSkill}**.'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Cards"
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Got ActivityType: event'",
- "name == 'ActivityRouterDialog.ProcessActivityAsync()'"
- ]
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Name: Cards. Value: '",
- "name == 'ActivityRouterDialog.OnEventActivityAsync()'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'What card do you want?'",
- "inputHint == 'expectingInput'"
- ]
- }
- ]
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript
deleted file mode 100644
index aae2fbe486..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript
+++ /dev/null
@@ -1,435 +0,0 @@
-[
- {
- "type": "conversationUpdate",
- "membersAdded": [
- {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot"
- },
- {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User"
- }
- ],
- "membersRemoved": [],
- "channelId": "emulator",
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "id": "d6088360-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:36-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "timestamp": "2021-01-28T12:53:36.534Z",
- "from": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "speak": "Welcome to the waterfall host bot",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
- "type": "AdaptiveCard",
- "version": "1.0",
- "body": [
- {
- "type": "Image",
- "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU",
- "size": "stretch"
- },
- {
- "type": "TextBlock",
- "spacing": "Medium",
- "size": "Medium",
- "weight": "Bolder",
- "text": "Welcome to the Skill Dialog Sample!",
- "wrap": true,
- "maxLines": 0,
- "color": "Accent"
- },
- {
- "type": "TextBlock",
- "size": "default",
- "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.",
- "wrap": true,
- "maxLines": 0
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "d6088360-6167-11eb-b46e-c3c3213a748e",
- "id": "d71ba110-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:38-03:00",
- "timestamp": "2021-01-28T12:53:38.337Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "text": "What delivery mode would you like to use?",
- "speak": "What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "d6088360-6167-11eb-b46e-c3c3213a748e",
- "id": "d75f60d0-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:38-03:00",
- "timestamp": "2021-01-28T12:53:38.781Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611838423833wj35v7pu64g",
- "clientTimestamp": "2021-01-28T12:53:43.833Z"
- },
- "text": "normal",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T12:53:43.851Z",
- "entities": [
- {
- "requiresBotState": true,
- "supportsListening": true,
- "supportsTts": true,
- "type": "ClientCapabilities"
- }
- ],
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "id": "da64ffb0-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:43-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "text": "What type of skill would you like to use?",
- "speak": "What type of skill would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "EchoSkill",
- "value": "EchoSkill"
- },
- {
- "type": "imBack",
- "title": "WaterfallSkill",
- "value": "WaterfallSkill"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "da64ffb0-6167-11eb-b46e-c3c3213a748e",
- "id": "db167560-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:45-03:00",
- "timestamp": "2021-01-28T12:53:45.014Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611838427337752w1bylwms",
- "clientTimestamp": "2021-01-28T12:53:47.337Z"
- },
- "text": "WaterfallSkill",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T12:53:47.402Z",
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "id": "dc82d6a0-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:47-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "text": "What skill would you like to call?",
- "speak": "What skill would you like to call?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "WaterfallSkillBotDotNet",
- "value": "WaterfallSkillBotDotNet"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "dc82d6a0-6167-11eb-b46e-c3c3213a748e",
- "id": "dd207630-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:48-03:00",
- "timestamp": "2021-01-28T12:53:48.435Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611838429939ntmad398ck7",
- "clientTimestamp": "2021-01-28T12:53:49.939Z"
- },
- "text": "WaterfallSkillBotDotNet",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T12:53:49.965Z",
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "id": "de0a12e0-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:49-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo",
- "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "de0a12e0-6167-11eb-b46e-c3c3213a748e",
- "id": "dea31e90-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:50-03:00",
- "timestamp": "2021-01-28T12:53:50.969Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118384346899i989qque7t",
- "clientTimestamp": "2021-01-28T12:53:54.689Z"
- },
- "text": "Cards",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T12:53:54.717Z",
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "id": "e0df04d0-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:54-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-28T12:53:55.817Z",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e",
- "label": "Got ActivityType: event",
- "name": "ActivityRouterDialog.ProcessActivityAsync()",
- "id": "e186dd90-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:55-03:00"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-28T12:53:56.114Z",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e",
- "label": "Name: Cards. Value: ",
- "name": "ActivityRouterDialog.OnEventActivityAsync()",
- "id": "e1b42f20-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:56-03:00"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e",
- "id": "e1e26b10-6167-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T09:53:56-03:00",
- "timestamp": "2021-01-28T12:53:56.417Z"
- },
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs b/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs
deleted file mode 100644
index d2aff8acd7..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace SkillFunctionalTests.Common
-{
- public enum HostBot
- {
- ///
- /// Simple host implemented using Composer and the dotnet runtime.
- ///
- SimpleHostBotComposerDotNet,
-
- ///
- /// Simple host implemented using dotnet 3.1.
- ///
- SimpleHostBotDotNet,
-
- ///
- /// Simple host implemented using dotnet 2.1.
- ///
- SimpleHostBotDotNet21,
-
- ///
- /// Simple host implemented using JS.
- ///
- SimpleHostBotJS,
-
- ///
- /// Simple host implemented using Python.
- ///
- SimpleHostBotPython,
-
- ///
- /// Host implemented using dotnet and waterfall dialogs.
- ///
- WaterfallHostBotDotNet,
-
- ///
- /// Host implemented using JS and waterfall dialogs.
- ///
- WaterfallHostBotJS,
-
- ///
- /// Host implemented using Python and waterfall dialogs.
- ///
- WaterfallHostBotPython,
-
- ///
- /// Host implemented for LegacyTests.
- ///
- EchoHostBot
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs b/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs
deleted file mode 100644
index 2b1422ca76..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace SkillFunctionalTests.Common
-{
- public static class SkillBotNames
- {
- public const string EchoSkillBotComposerDotNet = "EchoSkillBotComposerDotNet";
- public const string EchoSkillBotDotNet = "EchoSkillBotDotNet";
- public const string EchoSkillBotDotNet21 = "EchoSkillBotDotNet21";
- public const string EchoSkillBotDotNetV3 = "EchoSkillBotDotNetV3";
- public const string EchoSkillBotJS = "EchoSkillBotJS";
- public const string EchoSkillBotJSV3 = "EchoSkillBotJSV3";
- public const string EchoSkillBotPython = "EchoSkillBotPython";
-
- public const string WaterfallSkillBotDotNet = "WaterfallSkillBotDotNet";
- public const string WaterfallSkillBotJS = "WaterfallSkillBotJS";
- public const string WaterfallSkillBotPython = "WaterfallSkillBotPython";
-
- public const string EchoSkillBot = "EchoSkillBot";
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs b/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs
deleted file mode 100644
index 084da720be..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading.Tasks;
-using Microsoft.Bot.Connector;
-using Microsoft.Bot.Schema;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using SkillFunctionalTests.Common;
-using TranscriptTestRunner;
-using TranscriptTestRunner.XUnit;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace SkillFunctionalTests.FileUpload
-{
- [Trait("TestCategory", "FileUpload")]
- public class FileUploadTests : ScriptTestBase
- {
- private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/FileUpload/TestScripts";
-
- public FileUploadTests(ITestOutputHelper output)
- : base(output)
- {
- }
-
- public static IEnumerable TestCases()
- {
- var channelIds = new List { Channels.Directline };
-
- var deliverModes = new List
- {
- DeliveryModes.Normal,
- DeliveryModes.ExpectReplies
- };
-
- var hostBots = new List
- {
- HostBot.WaterfallHostBotDotNet,
- HostBot.WaterfallHostBotJS,
- HostBot.WaterfallHostBotPython
-
- // TODO: Enable these when the port to composer is ready
- //HostBotNames.ComposerHostBotDotNet
- };
-
- var targetSkills = new List
- {
- SkillBotNames.WaterfallSkillBotDotNet,
- SkillBotNames.WaterfallSkillBotJS,
- SkillBotNames.WaterfallSkillBotPython
-
- // TODO: Enable these when the port to composer is ready
- //SkillBotNames.ComposerSkillBotDotNet
- };
-
- var scripts = new List
- {
- "FileUpload1.json"
- };
-
- var testCaseBuilder = new TestCaseBuilder();
- var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts);
- foreach (var testCase in testCases)
- {
- yield return testCase;
- }
- }
-
- [Theory]
- [MemberData(nameof(TestCases))]
- public async Task RunTestCases(TestCaseDataObject testData)
- {
- const string fileName = "TestFile.txt";
- var testGuid = Guid.NewGuid().ToString();
- var testCase = testData.GetObject();
- Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented));
-
- var options = TestClientOptions[testCase.HostBot];
- var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger);
-
- // Execute the first part of the conversation.
- var testParams = new Dictionary
- {
- { "DeliveryMode", testCase.DeliveryMode },
- { "TargetSkill", testCase.TargetSkill },
- { "FileName", fileName },
- { "TestGuid", testGuid }
- };
-
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams);
-
- // Create or Update testFile.
- await using var stream = File.OpenWrite(Directory.GetCurrentDirectory() + $"/FileUpload/Media/{fileName}");
- await using var writer = new StreamWriter(stream);
- await writer.WriteLineAsync($"GUID:{testGuid}");
- writer.Close();
-
- // Upload file.
- await using var file = File.OpenRead(Directory.GetCurrentDirectory() + $"/FileUpload/Media/{fileName}");
- await runner.UploadAsync(file);
-
- // Execute the rest of the conversation.
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "FileUpload2.json"), testParams);
- }
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt b/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt
deleted file mode 100644
index af27ff4986..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a test file.
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json
deleted file mode 100644
index 45098d7133..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json
+++ /dev/null
@@ -1,148 +0,0 @@
-{
- "items": [
- {
- "type": "conversationUpdate",
- "role": "user"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "speak == 'Welcome to the waterfall host bot'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'Image'",
- "attachments[0].content.body[0].size == 'stretch'",
- "attachments[0].content.body[1].type == 'TextBlock'",
- "attachments[0].content.body[1].spacing == 'Medium'",
- "attachments[0].content.body[1].size == 'Medium'",
- "attachments[0].content.body[1].weight == 'Bolder'",
- "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'",
- "attachments[0].content.body[1].wrap == true",
- "attachments[0].content.body[1].color == 'Accent'",
- "attachments[0].content.body[2].type == 'TextBlock'",
- "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'",
- "attachments[0].content.body[2].wrap == true"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What delivery mode would you like to use?'",
- "speak == 'What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${DeliveryMode}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What group of skills would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What group of skills would you like to use?'",
- "speak == 'What group of skills would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'",
- "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Waterfall"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "startsWith(text, 'What skill would you like to call?')",
- "speak == 'What skill would you like to call?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${TargetSkill}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'",
- "speak == 'Select an action to send to **${TargetSkill}**.'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "FileUpload"
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Got ActivityType: event'",
- "name == 'ActivityRouterDialog.ProcessActivityAsync()'"
- ]
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Name: FileUpload. Value: '",
- "name == 'ActivityRouterDialog.OnEventActivityAsync()'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Please upload a file to continue.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Please upload a file to continue.'"
- ]
- }
- ]
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript
deleted file mode 100644
index cc5270a21e..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript
+++ /dev/null
@@ -1,434 +0,0 @@
-[
- {
- "type": "conversationUpdate",
- "membersAdded": [
- {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot"
- },
- {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "name": "User"
- }
- ],
- "membersRemoved": [],
- "channelId": "emulator",
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "id": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:14-03:00",
- "recipient": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "timestamp": "2021-01-27T19:28:14.862Z",
- "from": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "name": "User",
- "role": "user"
- },
- "locale": "en-US",
- "serviceUrl": "https://506512dd91f3.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "en-US",
- "speak": "Welcome to the waterfall host bot",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
- "type": "AdaptiveCard",
- "version": "1.0",
- "body": [
- {
- "type": "Image",
- "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU",
- "size": "stretch"
- },
- {
- "type": "TextBlock",
- "spacing": "Medium",
- "size": "Medium",
- "weight": "Bolder",
- "text": "Welcome to the Skill Dialog Sample!",
- "wrap": true,
- "maxLines": 0,
- "color": "Accent"
- },
- {
- "type": "TextBlock",
- "size": "default",
- "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.",
- "wrap": true,
- "maxLines": 0
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2",
- "id": "cdb9f9b0-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:16-03:00",
- "timestamp": "2021-01-27T19:28:16.075Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "locale": "en-US",
- "text": "What delivery mode would you like to use?",
- "speak": "What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2",
- "id": "cde04660-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:16-03:00",
- "timestamp": "2021-01-27T19:28:16.326Z"
- },
- {
- "channelData": {
- "clientActivityID": "16117756974587xlkqssva0r",
- "clientTimestamp": "2021-01-27T19:28:17.458Z"
- },
- "text": "normal",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "name": "User",
- "role": "user"
- },
- "locale": "en-US",
- "timestamp": "2021-01-27T19:28:17.472Z",
- "entities": [
- {
- "requiresBotState": true,
- "supportsListening": true,
- "supportsTts": true,
- "type": "ClientCapabilities"
- }
- ],
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "id": "ce8f2400-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:17-03:00",
- "recipient": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://506512dd91f3.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "locale": "en-US",
- "text": "What type of skill would you like to use?",
- "speak": "What type of skill would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "EchoSkill",
- "value": "EchoSkill"
- },
- {
- "type": "imBack",
- "title": "WaterfallSkill",
- "value": "WaterfallSkill"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "ce8f2400-60d5-11eb-9a74-bb9adba325d2",
- "id": "cf180310-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:18-03:00",
- "timestamp": "2021-01-27T19:28:18.369Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611775699426cx57468bwb6",
- "clientTimestamp": "2021-01-27T19:28:19.427Z"
- },
- "text": "WaterfallSkill",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "name": "User",
- "role": "user"
- },
- "locale": "en-US",
- "timestamp": "2021-01-27T19:28:19.441Z",
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "id": "cfbb9610-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:19-03:00",
- "recipient": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://506512dd91f3.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "locale": "en-US",
- "text": "What skill would you like to call?",
- "speak": "What skill would you like to call?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "WaterfallSkillBotDotNet",
- "value": "WaterfallSkillBotDotNet"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "cfbb9610-60d5-11eb-9a74-bb9adba325d2",
- "id": "d04363b0-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:20-03:00",
- "timestamp": "2021-01-27T19:28:20.331Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611775701238btqor6clvrg",
- "clientTimestamp": "2021-01-27T19:28:21.238Z"
- },
- "text": "WaterfallSkillBotDotNet",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "name": "User",
- "role": "user"
- },
- "locale": "en-US",
- "timestamp": "2021-01-27T19:28:21.255Z",
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "id": "d0d06170-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:21-03:00",
- "recipient": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://506512dd91f3.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "locale": "en-US",
- "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo",
- "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "d0d06170-60d5-11eb-9a74-bb9adba325d2",
- "id": "d15a7900-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:22-03:00",
- "timestamp": "2021-01-27T19:28:22.159Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611775705642g7ss96aqemf",
- "clientTimestamp": "2021-01-27T19:28:25.642Z"
- },
- "text": "FileUpload",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "name": "User",
- "role": "user"
- },
- "locale": "en-US",
- "timestamp": "2021-01-27T19:28:25.677Z",
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "id": "d3731fd0-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:25-03:00",
- "recipient": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://506512dd91f3.ngrok.io"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-27T19:28:26.806Z",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "locale": "en-US",
- "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2",
- "label": "Got ActivityType: event",
- "name": "ActivityRouterDialog.ProcessActivityAsync()",
- "id": "d41f6560-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:26-03:00"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-27T19:28:27.070Z",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "locale": "en-US",
- "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2",
- "label": "Name: FileUpload. Value: ",
- "name": "ActivityRouterDialog.OnEventActivityAsync()",
- "id": "d447ade0-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:27-03:00"
- },
- {
- "type": "message",
- "serviceUrl": "https://506512dd91f3.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat"
- },
- "recipient": {
- "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3",
- "role": "user"
- },
- "locale": "en-US",
- "text": "Please upload a file to continue.",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2",
- "id": "d46e6fc0-60d5-11eb-9a74-bb9adba325d2",
- "localTimestamp": "2021-01-27T16:28:27-03:00",
- "timestamp": "2021-01-27T19:28:27.324Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json
deleted file mode 100644
index 49696744d4..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "bot",
- "text": "Attachment \"${FileName}\" has been received.\r\nFile content: GUID:${TestGuid}\r\n\r\n",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "startsWith(text, 'Attachment \"${FileName}\" has been received.\r\nFile content: GUID:${TestGuid}')",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Do you want to upload another file?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Do you want to upload another file?'",
- "speak == 'Do you want to upload another file?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Yes'",
- "suggestedActions.actions[0].value == 'Yes'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'No'",
- "suggestedActions.actions[1].value == 'No'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "No"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript
deleted file mode 100644
index d785b4b3ff..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript
+++ /dev/null
@@ -1,138 +0,0 @@
-[
- {
- "type": "message",
- "serviceUrl": "https://7e981c20ff5a.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "19b99450-a209-11eb-9135-ffc715768685",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat"
- },
- "recipient": {
- "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f",
- "role": "user"
- },
- "locale": "",
- "text": "Attachment \"test2.txt\" has been received.\r\nFile content: GUID:1234\r\n",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "2df8af51-a209-11eb-8b44-53ccf8d65f4d",
- "id": "2ed3cd10-a209-11eb-8b44-53ccf8d65f4d",
- "localTimestamp": "2021-04-20T15:49:48-03:00",
- "timestamp": "2021-04-20T18:49:48.897Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://7e981c20ff5a.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "19b99450-a209-11eb-9135-ffc715768685",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat"
- },
- "recipient": {
- "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f",
- "role": "user"
- },
- "locale": "",
- "text": "Do you want to upload another file?",
- "speak": "Do you want to upload another file?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "Yes",
- "value": "Yes"
- },
- {
- "type": "imBack",
- "title": "No",
- "value": "No"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "2df8af51-a209-11eb-8b44-53ccf8d65f4d",
- "id": "2f160630-a209-11eb-8b44-53ccf8d65f4d",
- "localTimestamp": "2021-04-20T15:49:49-03:00",
- "timestamp": "2021-04-20T18:49:49.331Z"
- },
- {
- "channelData": {
- "clientActivityID": "1618944597322y3mgzbre63",
- "clientTimestamp": "2021-04-20T18:49:57.322Z"
- },
- "text": "No",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-04-20T18:49:57.359Z",
- "conversation": {
- "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat"
- },
- "id": "33defff0-a209-11eb-8b44-53ccf8d65f4d",
- "localTimestamp": "2021-04-20T15:49:57-03:00",
- "recipient": {
- "id": "19b99450-a209-11eb-9135-ffc715768685",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://7e981c20ff5a.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://7e981c20ff5a.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "19b99450-a209-11eb-9135-ffc715768685",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat"
- },
- "recipient": {
- "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "33defff0-a209-11eb-8b44-53ccf8d65f4d",
- "id": "34157940-a209-11eb-8b44-53ccf8d65f4d",
- "localTimestamp": "2021-04-20T15:49:57-03:00",
- "timestamp": "2021-04-20T18:49:57.716Z"
- }
-]
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json
deleted file mode 100644
index 3efa3c468d..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json
+++ /dev/null
@@ -1,281 +0,0 @@
-{
- "items": [
- {
- "type": "conversationUpdate",
- "role": "user"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "speak == 'Welcome to the waterfall host bot'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'Image'",
- "attachments[0].content.body[0].size == 'stretch'",
- "attachments[0].content.body[1].type == 'TextBlock'",
- "attachments[0].content.body[1].spacing == 'Medium'",
- "attachments[0].content.body[1].size == 'Medium'",
- "attachments[0].content.body[1].weight == 'Bolder'",
- "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'",
- "attachments[0].content.body[1].wrap == True",
- "attachments[0].content.body[1].color == 'Accent'",
- "attachments[0].content.body[2].type == 'TextBlock'",
- "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'",
- "attachments[0].content.body[2].wrap == True"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What delivery mode would you like to use?'",
- "speak == 'What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${DeliveryMode}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What group of skills would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What group of skills would you like to use?'",
- "speak == 'What group of skills would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'",
- "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Waterfall"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "startsWith(text, 'What skill would you like to call?')",
- "speak == 'What skill would you like to call?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${TargetSkill}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'",
- "speak == 'Select an action to send to **${TargetSkill}**.'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "MessageWithAttachment"
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Got ActivityType: event'",
- "name == 'ActivityRouterDialog.ProcessActivityAsync()'"
- ]
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Name: Attachment. Value: '",
- "name == 'ActivityRouterDialog.OnEventActivityAsync()'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What attachment type do you want?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What attachment type do you want?'",
- "speak == 'What attachment type do you want?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Inline'",
- "suggestedActions.actions[0].value == 'Inline'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'Internet'",
- "suggestedActions.actions[1].value == 'Internet'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Inline"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "This is an inline attachment.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'This is an inline attachment.'",
- "inputHint == 'ignoringInput'",
- "attachments[0].contentType == 'image/png'",
- "attachments[0].name == 'Files/architecture-resize.png'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Do you want another type of attachment?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Do you want another type of attachment?'",
- "speak == 'Do you want another type of attachment?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Yes'",
- "suggestedActions.actions[0].value == 'Yes'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'No'",
- "suggestedActions.actions[1].value == 'No'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Yes"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What attachment type do you want?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What attachment type do you want?'",
- "speak == 'What attachment type do you want?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Inline'",
- "suggestedActions.actions[0].value == 'Inline'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'Internet'",
- "suggestedActions.actions[1].value == 'Internet'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Internet"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "This is an attachment from a HTTP URL.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'This is an attachment from a HTTP URL.'",
- "inputHint == 'ignoringInput'",
- "attachments[0].contentType == 'image/png'",
- "endsWith(attachments[0].contentUrl, 'images/architecture-resize.png')",
- "attachments[0].name == 'Files/architecture-resize.png'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Do you want another type of attachment?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Do you want another type of attachment?'",
- "speak == 'Do you want another type of attachment?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Yes'",
- "suggestedActions.actions[0].value == 'Yes'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'No'",
- "suggestedActions.actions[1].value == 'No'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "No"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript
deleted file mode 100644
index 112a5cde62..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript
+++ /dev/null
@@ -1,789 +0,0 @@
-[
- {
- "type": "conversationUpdate",
- "membersAdded": [
- {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot"
- },
- {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User"
- }
- ],
- "membersRemoved": [],
- "channelId": "emulator",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "9496dfd0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:34-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "timestamp": "2021-01-28T13:27:34.221Z",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "speak": "Welcome to the waterfall host bot",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
- "type": "AdaptiveCard",
- "version": "1.0",
- "body": [
- {
- "type": "Image",
- "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU",
- "size": "stretch"
- },
- {
- "type": "TextBlock",
- "spacing": "Medium",
- "size": "Medium",
- "weight": "Bolder",
- "text": "Welcome to the Skill Dialog Sample!",
- "wrap": true,
- "maxLines": 0,
- "color": "Accent"
- },
- {
- "type": "TextBlock",
- "size": "default",
- "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.",
- "wrap": true,
- "maxLines": 0
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "9496dfd0-616c-11eb-b46e-c3c3213a748e",
- "id": "9544fa20-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:35-03:00",
- "timestamp": "2021-01-28T13:27:35.362Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "What delivery mode would you like to use?",
- "speak": "What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "9496dfd0-616c-11eb-b46e-c3c3213a748e",
- "id": "956e2d00-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:35-03:00",
- "timestamp": "2021-01-28T13:27:35.632Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611840456587v84hgz17ny8",
- "clientTimestamp": "2021-01-28T13:27:36.587Z"
- },
- "text": "normal",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:27:36.608Z",
- "entities": [
- {
- "requiresBotState": true,
- "supportsListening": true,
- "supportsTts": true,
- "type": "ClientCapabilities"
- }
- ],
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "96031a00-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:36-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "What type of skill would you like to use?",
- "speak": "What type of skill would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "EchoSkill",
- "value": "EchoSkill"
- },
- {
- "type": "imBack",
- "title": "WaterfallSkill",
- "value": "WaterfallSkill"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "96031a00-616c-11eb-b46e-c3c3213a748e",
- "id": "96980700-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:37-03:00",
- "timestamp": "2021-01-28T13:27:37.584Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118404585657p5vbek9bxa",
- "clientTimestamp": "2021-01-28T13:27:38.565Z"
- },
- "text": "WaterfallSkill",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:27:38.588Z",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "973139c0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:38-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "What skill would you like to call?",
- "speak": "What skill would you like to call?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "WaterfallSkillBotDotNet",
- "value": "WaterfallSkillBotDotNet"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "973139c0-616c-11eb-b46e-c3c3213a748e",
- "id": "97cf2770-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:39-03:00",
- "timestamp": "2021-01-28T13:27:39.623Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611840461032eejmg7hkwgc",
- "clientTimestamp": "2021-01-28T13:27:41.032Z"
- },
- "text": "WaterfallSkillBotDotNet",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:27:41.053Z",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "98a95ad0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:41-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo",
- "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "98a95ad0-616c-11eb-b46e-c3c3213a748e",
- "id": "993e6ee0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:42-03:00",
- "timestamp": "2021-01-28T13:27:42.029Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611840465174eu3jly2odgv",
- "clientTimestamp": "2021-01-28T13:27:45.174Z"
- },
- "text": "4",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:27:45.203Z",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "9b229830-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:45-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-28T13:27:46.200Z",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e",
- "label": "Got ActivityType: event",
- "name": "ActivityRouterDialog.ProcessActivityAsync()",
- "id": "9bbab980-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:46-03:00"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-28T13:27:46.485Z",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e",
- "label": "Name: MessageWithAttachment. Value: ",
- "name": "ActivityRouterDialog.OnEventActivityAsync()",
- "id": "9be63650-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:46-03:00"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "Inline",
- "value": "Inline"
- },
- {
- "type": "imBack",
- "title": "Internet",
- "value": "Internet"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e",
- "id": "9c10efd0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:27:46-03:00",
- "timestamp": "2021-01-28T13:27:46.765Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118405051429uurdklppdu",
- "clientTimestamp": "2021-01-28T13:28:25.142Z"
- },
- "text": "Inline",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:28:25.198Z",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "b2f958e0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:28:25-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "This is an inline attachment.",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "image/png",
- "contentUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAG2CAYAAAAnY0i0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAP+lSURBVHhe7J0HYBTFF8a/9E4Ivffee++9SlOkNxUBBRRRVPxbUKQoHUQEaSrSpEmT3nvvPRBKEtJ7z/3fN3cHRwg9QALz0yV3s7O7s3u7b96382bGyiBAo9FoNBqNRqPRaDSvHdamvxqNRqPRaDQajUajec3QglCj0Wg0Go1Go9FoXlO0INRoNBqNRqPRaDSa1xQtCDUajUaj0Wg0Go3mNUULQo1Go9FoNBqNRqN5TdGCUKPRaDQajUaj0WheU7Qg1Gg0Go1Go9FoNJrXFC0INRqNRqPRaDQajeY1RQtCjUaj0Wg0Go1Go3lN0YJQo9FoNBqNRqPRaF5TtCDUaDQajUaj0Wg0mtcULQg1Go1Go9FoNBqN5jVFC0KNRqPRaDQajUajeU3RglCj0Wg0Go1Go9FoXlO0INRoNBqNRqPRaDSa1xQtCDUajUaj0Wg0Go3mNUULQo1Go9FoNBqNRqN5TdGCUKPRaDQajUaj0WheU7Qg1Gg0Go1Go9FoNJrXFC0INRqNRqPRaDQajeY1RQtCjUaj0Wg0Go1Go3lN0YJQo9FoNBqNRqPRaF5TtCDUaDQajUaj0Wg0mtcULQg1Go1Go9FoNBqN5jVFC0KNRqPRaDQajUajeU3RgvA1IjY2FpcuXUJ4WJgp5dUgOjoaV65cQUREuCnl1cT39m14enqavmk0Go1Go9FoNM+OlUEwfdakAP8sXw5rQyLate9gSjGSKFd55cqVsBUJ3vqNNqbUF8uFy1fQq3s3DP6wH97u0sOUmvY5f/Ey3undE4M+6IuOnV+d80rKl1/9D7u3bca2HVthZe1gStVoXk8SxKhu2LABiQnxSExMhJWVFdJ7pEfB/PmRPUdOU67nS3xCIg4dPIgzZ04jPDwc2bJlRYXyFVCocGFTDs3jEhgcjH179+DSxUuwtrFBoYIFUadOLTg7u5pyPF/8g4Ixb+4cuLk4oW/ffqZUjSb14uPrK8/MPty6dVPZwNKlSqJc+fJwd09vyqGJjYvD3LnzEBhwG59++hlsbGxNazRJ0S2EKcy58xcxYcIE7Nm1zZRi5MjRY5g0cSKOHj1kSnnx2MmDkN7DAw6OjqaUZ4Mtc7/Pno3r115uq5Utzyt9etg7pMx5pVZcXVyVobeysjGlaDSvL7d8fTBu3DjMnPkbli9fjgULFuCH779H/wEDRKTtN+V6fOLEcVixciWOHztiSnk4AUGBGDNmLL4c/iX+XbUKx44fx7x58zFw0CAs+OsPU660Da/Hnl07Td+eH7f9A/D5l19i4oSJOHHiOA4fOoyxP/2k6swXRZAIwg0bNuLAvie/dzSaF832nbtE4HyKadOmYu/ePdi3bx++/+EHfDb0U1y/7mXK9XqxectWrF+7xvTNSExMLLZu3Y4dO7YjKirKlKpJDi0IU5iOHd+Cs2s6/PHHn6YUI4sWL4GzsyM6d+5qSkn78M3LhImTcOrUMVPKy4EtA68Vr9v5ajTJkBCfIJV9DFo0a4LffvtNHKNpGPLJp/J8WOMnERPRUZGmnI+HlbU1/l64GDu2bjKlPJhocTKmTZuOf1cuR6uWzTB58mT8+ut09bd2vfo4fvzl2sSU4o+/FmDlyn9M354fq1avwcWzZ9C9axfM/G0mpsu1/Gr4/5AjVy68qBimwgXy4ZepU/DtdyNMKRpN6uTE6TNi48YiJDgQX331JaZNnaaemc+/GI4EWe919Yox42vGmnXrMGf2LNM3I26uLhgzeiQmTZoKV9cXE22QVrH5VjB91qQAGT084OsfiE2bN6Fy+bLIliMnLnlew+QJ49GyRVO0at1W5QsLj1ChRseOHcPVq1fh6GCHdBbN/Gz+P3nqlDzwwciYKZMpFQgNDVXbuDg7wcnJGfEJCTh46BAyuKeDf0AQNm/ZguBgf+TKlce0xV2Cg0Owbu0a1K5ZHTny5MeO7dvEcTkOeztbZMiQ0ZTrLtdv3MD+fftx+vRp+Pr4wCNDBjg4GEMV/fz9cPbMWVm/D/ny5oGrmztCQ0JUS92DBBqjkw8fOYJDhw/B69o1ZM6cSfZ3t1UvKjoGRw4fwZEjh3D58hXYWtvIMT1Ma+8SEREhZd+BU6dPqu+ubm5YvXoVKpQri2LFS6o0Ehoajv0H9uPo0aO4dfOGnKMHHB2dTGuTJyY2TuU/sH8/fH19EBkZBR8596ioCDm3u2W55uWFXTt34tz58wjw90eOnDlgLQ5lUg4fPoxD8vucP38O6dO5q7JaEhUVjc2bN+PM6VMICAxATtmPlTi0ybFz1y51Hp06d8Hps+ewd88e3Pb1RY4cOWBjc3+r4YULF7FH8pw7d16+JSBTpszGFQJDmPcf2Ac3NxdEiXO7du1aRMi9lSNnzju/31G5zxiOcu2ap9wj9nCX31ajSS0Eh4Vh2dIlqFGtKsqVryD20AkFCxaAX2Ag9uzejTfffBPOzs6m3LQbkdglz9ApsauenlfgLs+ji4uLWhcSGobTZ07j8KGDsh9HsU1Z5Pn3RdasfGbut2ebxXb+OW8emjVtiGGfD4e7u7t6BjOIjaxdqyaqV68Je3t7U27Ivs+YQkvPKKGaSWw6wyLN+AUEiD09o57l6zduYvu2bVIveEq+jPfYLM+r1+DjfVOVjy2StP03rl9Dnjx577M/ifKQ75Xn94jYXPax9vBIL9fDeL6WXL7iqWzJebFljo6OyobT7rGs+/fvg72DPYoULgzvW97IIPswlzsuPl61SpyQcnBbZ7lulqFqXL9//wE5hwy45e2DrVI3UcBny5bNlOMufy9eioSYCLmWn8NBztfW1hb58+dDubLl7nv/dcXTE9u2b8flS5fEXscga5aspjV8SRmvxLiLizMCpL7bJscMDQlW+2Rdl1HKYie2zEy8lJHXJyE+VpWdtt5O6sOktu7ixUtyrnvFpl5Q+06XLp1pjZGr8rvs3r1HhQ5HR0fKOWY3rdFoUp5Ph32OyLAQfPPN16hRo7aK+nKwd0CBAvnRokUL5MyV645PEBEZKXZgL06cOCF+1SURRS5S79+9f8PFLtKPy5s3L277+SsbeeGC8XlOJzaSeIstPCbPSfbs2e/xNdgocPDAQXlmbGS/Rt8mOCQU+8TvOiZ+1M2bN8WGZrnHFt4QO+J5+TKyZMki5aJ/dhgZxW46iy0OFh9yj5SVPm6YnF8WsXOWx7vieVWes13K3vj73RY/N7fyV2jrzp49K/b7kDrf4sWL4fZtPyUG+bzTvibGx93jAxE/vwAckLKePHkS172uiw1wu8dGBgYGif97SuxyTnhe8xJ/ajcuyLGzZ892xxd+ldB9CJ8D12/eQreu3dCwQW18/fV3+GnCRKxftQKz5/yOvPkK4sSp05g6dSquixC0srZCgog/G6nM+7//Llq3aa/2kSBCb9Dgj0VEOGDkjz+pNHLoyDF8+/VX+HjwADRs3AKBQUHo0+cd1BKRd04qrcsiAjJkcMeffy2AUxLx43n1OgYN+gD16taWh+civMWxiBMBZG9vix49u6Njx86mnMDK1Wvw+8wZaj0fSIaH5s6VE8M+HYpiJUvj97nzsWzxInFCrNSbdT6QJYoXxrfffScP1L2ihwSL2Bjx/fc4LUaJ++P58WH9aewY5C9YGBcuXsbkyZOkkr9oesATlYDs1aMr3u7c7Y6zc+36dYweNRqXxGDZ2tkpZ6FGjZo4KM5Wn57d0Kb9W6Z8N/DV8C8RGOCvhDOFdPZsWfHN11+jQKHk+/cEBgVj9JjROCVlZKVPw2Jna6fKUqJEcRUelihlmvHbTKxdvVrEeDzk9JWTU7ZMaQwdOhTZc+RS+6KR/enncTiwdzccxVHlgD42Ntb4aNBANGjUROW5Ik7EyJEjceuGlwh8VwSJ+G/btiUGDvxYrU/Kj6PH4ND+PbJ9Y/z330YkyD6jxSGqXbMG/ifnZWvh6IybOAnbNm0S543elJX8flF4o1VLfDBwsFofKUK0c5fOqFW9Oi6Ig3VOnOR8+fLitxkzkGCwwqjRo3H44AH5LVn2OFX+b+S+q1mrjtpeo3nZXBXh1K1zJwzo+y66dO9pSgVGynOybeN6/LNsBdKJUCOHjhzFlClT4Ot9S9mfuLhYcXbc8O47fdCseSsVfvXT2NHyPIstk2ecgiROnq0Ff8yBe4a7gsPMtz/8gAN7dmHUyB9QtnwlU+r98DmbNXs21v67SmyVtdgxDu4Vh0oVyuOzYZ/BI4PxZd+adf9hxi9T0OqNNqpfZER4uHK28uTMgUliF9O5G19G/Tx+stjQw6hZuy6W/bNUvdiJkWeb9v9///v6Tti8jzhLo38cgzOnTyrRy7ApBwc7fDHsU1SpVlPlIfP+/BOL/14oNi5BzITYcrF1/Qf0Q668BZSt5ws7AxKVHbS1tcZPYh/zFSiMi+LQTZo4WRzHsypkPyEhUdbboGvnt9GlW3fZsxUCpG7q0qkTmjZtqsTrVXHmihUrjBkzZiobb8mYcROx7t8VGNDvPXTslHwUDX+X6bLt2n9Xqt+HhIdH4J0+3dGlq/H3Zz/AIYMHoUzZsjh6/CRuel0VsZwTPd95D6N/+FHs7wC0NL2UJfsOHpL69H/o27s72nfsgp69+6B44Xz4/MuvTTl4zSdgx7atKqTYIP/Zy7HfffcdvNGmnVr/z4pVmPv7TClfIhzleoVJXdOgQT18/vkXchmSf7mn0TwtEZFRqFe/Hpo2rI9vR4yQZ+FuvZ+UU2fOyTM7Bj6+YvesbdQLEAcHe7zbpxfatHtT5Tl+6gwGD/wAH/Tvj1X/roa/v5+yPRnSp8fw4Z+jnNi3/zZuxjf/G47xP49BjVp11XZk5559YlM+w8jv/oe6DRrjvNiFEd9+iyARYLQ7FHj5RWh+JdvmyZNPbTPvjwXyDK+Q/dTCurVrERwchG9F2NasU0/s8buICAsTn8lR0oPRqGFdfP7F/xAp/ufPP/+MAyJcCX1D+qS1a9XAF198gcjYRHTu+KYSnvSn+TdebPzXX32OylVrKQEdHuwn9uN3tT3ZsHkL5vw+C8GBAeIn2cq1iYOriMH/fT1cnTNZt2Ezfp02CR3efAvLl69AdFSUOm6BfHnwg9h+s7/3ykBBqEl5xo6fYGjRvKlh3do1hnbt3zRMGDdGpUfHxhreeruzpLU17Ny+1SCVjOHSlauGDz4cZBDH3nD08CGVLzEhwdDvgwGGLz77RH03I46NoXnz5oYN/61R30UQGtp36GCoU6eOYcjHgw3nz50z7Ny50yAPvlpviedVL0PLVq0NdevWNYwfN9YQ6O9vuOXja2jdpq2hdetWhitXLql8h4+fMFSrXsPw8UeDDF7XPFUZd+zaLcdtaej4VnvJkWCIjo4xnDp1ylC7dh3D3wvmGfwDAgy+vr5Sbqm2k2Hk6LGGGtWrGxYu+NMQFRFpuHnL29C3X3/Djm1b1Pqevd8xtGjRzLB+3Rp1PK7/dNgXsk01w9YtG1Qe8ukXXxpq1aplWLtmtSEiItywcfMWQ63atQzNmjU1rFy2ROUR58fQvWdvgzgnBnGIVNrpM+cMbdu1M3Tr2ll9T47fZs02NGnS2LBlo/F4x0+eMrR64w3DjyO/N4igVGlLl60w1Ktf3/D118MNYWEhhsioKMOqNWsNVapWNQwb9okhISFO5Rs7YaKhlvyemzf+p34LMeKG9+R8mzdrYrh27bLKM3nqL4Y6tWsaxCAZRHQazl+8ZNi8ZaOsSf4ajhozVv12HTu+adi1c7v8BtGGL//3tfz2dQ1r/11uymUw/CfXpErlyoY5s2eqPCLmDOMnTTaUL1/ecPLEEZUnIjLG8FbHt+T3q23o06en4dKlS4YDBw+odd/98KOhfr36hnWrV6nvPr63DYMGDzHUr1/X4OtzS6VpNC8bz+s3DHXq1TOM+2mMun/Pnj1r+H3OXEOjJk0MS5csNOUyGLxu3DR06dbN0KplC7GPp9UzcU22fbtzF0OjRg1UGuE+unXvafh59A8GH29vw/XrXsoOJ8e77/c3dBb7EhoSZEpJnnl//mWoVq2aYfq0KYagwEBDbEyMYdbsuYZaYq+/+d8XplwGw5r1/xmqVqsqZWxp+OuP+WID4w1/LvjbUKlyFcOM6VNMuQyGnydMUbae57J3726xS2GG0T+PM1QV+7Ns6d1z/uqbbw21a9U0HD92RNmfgIAgQ5fuPWS75oZwsVtk89bthnrynH/66RCDv99tQ2RkpGHchMkGEbnKZty4abxuw4Z+bAgOCjTclO/xYptZhw348ENDw4b1DTt3bDNERUUb/KQuGfDhYLFPdQwbN6xT+2fd1LRZczlGXcNXX31pOH/+nGHfvn1qXVLOnL9gaNy0qbLtP/wwQv2WSVm0bLmhfoN6hl+mTpZviYaw8HCxodPErpUz7N2zS+UJDAo2dO/R01CjRg3DR4MHGs7Jfg6KXfO57Wdo1+FNQ//331X5zIybMMnQVGz+jevXDKwxu8vvP3LEN8aVwt79Bw2VK1UyjPjuG3WNgoNDDBMmTTL8T86HHJG6sn6DhobRP35vCA8PU2lz5s031KxZyzB3zm/qu0aTkpy5eMVQsUIFw+zfZ5pSkidUng/auKZNmxhOHD+qntMbN28ZevR5x9BAfJhjRw+qfPRzmslzWrtObcPUKZOUX7V+w0ZDE3kee/XsovJcl+1atX7D8I3pvjfzszw/dWS7kKAAQ1x8gqH3O+/JNt0NF88bn98T4iO2EJv2/nvvqO9k/l8L1DbNmjUTO73YcOzYMYOfPFtTpk83tG7VynDxwjmVjz7bps1GXyxY7Nwo8SE3blgv/l2M+C+RhukzZhmqid1bv+5flcdX/JQhn3xi6C4+nq/3TfEhb8o5R6p1Qz751ND3nd7qM/ETe1hdntF3+vQ2nD1zWtnb4ydOGdq272Bo366t2DovlW/tf5uUvycC3PDPkkXqGV+2cpWhsvhXP48dpfK8SujXV8+Jvu/1RWwCMGXqNISHBkMqGpV+4NBhXL18Ef3efRe16tRTbzoL5s+Lzz7/DFa2dli3frXKxzeofKOc9E2qJBjXWYQxMWy0XOmSqnWuSNGikEr1nmZ2MwYDw4gSVJ+Xj4d8Co+MGZE9axYMHPyReuuxZ9cOlW/ZP//A2cletV7lzpNPlZGtUN1798I1rxvYs3unesuUO29exMbHqTBZNvkzBIAtnknx9r2Ng/v2onLlCni7c1c4OjshR/ZsmDH9F9SuWx/nLl7GqRPH0KN7NzRt1kIdj+uHD/8CDk4u2Lhho9qPr58/Thw7iob166J5i5aqab9Rg/oYOWqsOje5n1W+M+fP4cK5MxgwoB+Klyil0koUL4puPfuokINAf1+VlhSGwRYqWAD1GzVW38uUKglxyCS/vxp5jvz1198oUig/hn8xHK6u6eDk6IjWLZqjSfOWOHniNMSYISomDts2b1LXma2B/C0YfvHZsGGIiweOHz2q9hUTFwdrKxvVgsjftEihgmhQv5Gsuf8aEvGBYCPX9+efxqqWOoYsfDJkiApD9fS8rPKIYcM/S5eiXNlS6NX7XZXHzs4OH37wAQoWKYIN/xmvJW8r3jeFCubH9F+mo2DBgqhcqbIKHxWRjjdaNUOzlq1V3qxZMmPoZ58iNDQCZ06fVmkazUtHHne2YG/ask2e9f4YPHgwFi74C/GxMSoqgC37ZOu27fC5dRNffPGp2McS6pnIkyun2L3B8iDYYPW//6p8efPmUc+Ks4szsmbLZgxHShKGaSYmNh72dmJjH9ICFCPP4urVq1FGbHO/AR+qAb3s7O3ViMj1GzbCnj17ERQUYMws5+Ig9n/QwAGqhY2tbV06d0LpsuVww8sLCQlxxmxi4zzc3TDyhxGoVq0G3NxcMeyTIbCXc7px44bKc1ls3JGDB/Bun54oU7a8sj8ZMqTHIDnfqJh4iAOk8u3YtRPWcgqjfxyNjJkyq5DbIR8NlLroC3UdcubIocJD7cTWu6f3MIami23et/8gzood6NG9K2rVrgtHRwdkkrrki+GfS74M2LDRbGOs1Ft3hvSy9bJIkaIQ4arWJaV4kcKYMGEiqteoiS3ye/bt2xfDPhuKsNAQUw5g/eo1KCJ2qv8HA+WbFVxdXMSuDUCmzNmxe9cuYybBIL873+Czf3vRYsVQSexa1syZULVaNal/j8o191f52D2A4WclShRDzlx5VJ9UFfFC42hi8dIlKFyoAAYNGqiukbt7Onw0aBC++dbYz3CjnKudtQHDvvgKLi7G/km9enRHuQqVsGH9o/uiajRPSmxstPgNVipM82HQLt729ZFnehBKlymnntOcObJj+JfDYSt2aOWKlcaMsq8o8f96dOuEDz4cpPyqpo0bqSgEX18/lSWXbFetRg3sO3AQ165dVWl+4hcx3LJa1UpIJ8/9gcOHxY87jo8GD0KhIsVUntIlS+LNt7vg7PkL8L5ltE+ErZX9+7+nWt7Kli2rQjnDwiJVFJW9vTHKgT5bwwZGX8xd7Nznwz5Fo8ZNVeufs9iqzp3fVj6zn7/RhmYRP8XR2Vk9w1my5RAfMsedcHv6pfc810uWwkXs2idiO4sVL6HsLe30p2L7bty4pboDmbGVMg0ZPBDt3+yonvF2b7RG/oJFVDhsYkKsKdergRaEzwl3V2c0adZMCa2mTRsiY2Zj2NGZM+ek8syAIsWKqu9mMnpkUI59cLBpjkCLm/dRMJSlUqXy4hwYw6MejEFJjWJS+VrCytNGHICAwCD1nX0H8+fLC6ckw30XlzIniI8VHBSqvlNQ0JFhE/3D8PbxQXhEBGrVqG5KuZcTp07BI707Spcyijczbq6uyCCGIiQsQn0PCQuTBzAR5cqVVd/N5MmdW4lIhvOQ8xcuKadv5669+EXEDkPFfv31Vxzcu1cJx9AQ43kmJZ1bOmXk2GeO+AcG4sqly3CkGLS2Rbycp+9tbxQvWgz2ScJx2ccmJj5e9b256e0jzkU8bnnfVoNd8Pgc8GL5kiVKkLPPIWG4g7P85j179cTcObNx/txZlf4g6Ay6irOaO09eUwrgIoaRfV58bhv3GRIWimD5HWPE8Zvx63QVmsxlxvTpiJLryLh8hdxfsSJcK1UoJ87k3XPxun5ThX/d9PHFjBl3y/7P4sXKaAYGGisIjealI8aMz1vzJo0wf/4f6ln74Ycf1cuSH0eNwZLFC1S2q+LAeKRPj6JFSqjvZvKLAHRxdUOQye7FiyDgM2YWkg+DzgWfk4dx89Yt1Qe8ZKm7/ZrNsH9cWGQMoiOMA9/QdjmKg1JQxIcZ2mraRT/1PBsdD4od1hOFkoS9M3yeIZrEi46KnAen45kxY4Z6hqfL879x/XqxS3EiiAJVvuvXr4stKyymzU59N2PZF5HXgy+iLLl46aIqK6fXsCRrpkzwyJARYSHG+oGwH2GN6lXFiXt0f5uSxYth1I8jRWx9J85obew/eBj/+2o4IsRmhUVEqZB6httyVFmek7JrYqMSEuMQarZrctUYFlejehX12ZK6depKneaCbVu3qO+nz55V/THr16+nvvOaWUInmWGuBfIXuBOya4YiOzI6RjmFbnIP8TqbbS3rnKDAAIRHvlrz/WpSC1bK03mU/eHYAU4iAitVujekPWfO7OLTuCLE4jmNjYtBhXLlTN+MuKdzU+M1xEQbbVRteSbpX5w6eVx9P3nqDIID/FG3njGE9MzZ8+oF3cZNW5S9Mduds6dPKr8tIsJ4PGXDxI+pVfNu6Dpp0byp6n847PNhmCXP+JXLl0xrjDCM9eix45gzZy5mzZqF+fPmqRftlvaKXZeMDQP3PstJOXvuDHLlySV2+K69JUULF0SiiMewEOOzy70wJL5EiXvrDvY1ZDgsuwa9SmhB+BypWb2GEiY1a9QwpTD+O0zEl73qAJwUK9Wqd28lllQXWr7lsORB6cmRVMDxbRMMYmTk7k+QhSLWwUIkmOGDx+MYzdFdHnVkPsgUQg+a7oL9+/jQJV3PB9vGlsc0fqeoNBgS5GG8V/jS2FjCypjwbTy3ZbnZZzFfvtzo3ae3iMz7BzUgfOgDAoMx9JOhIqZ+xefDhuHyxXNiqFqo9dExMapfEVv0kmIt5eR1ZB+kkNAg5VTa2xsdLbPBYr/Ezp07oWIl41vyqmKoGRefP19B/LVgIQYNGoTVq01v7R6Acs4Md8+XjiRlfkxMtPoeERmt4u35hp+tF+r3YrnEyLVq3QoNGxr7L6ofm9dX9TG8Cx0rzuvGX9l87Qj7mfbp0wclS98rxjWalwlfvGTMlBFZs2ZVgyJUqVIJX/3vayX0tmzeqvJEiWi0FdHjIM6RJby/raxtlJ25B654BIwYYP/AcHGQHgTtKMvnlKwttVHPpOWzTAx8yWYBbW2cOGuWIpU2QL2Ms0DMN+LEPhGKUDqLFGE8Mz7D3D5jBg906dJZRU3EiDBk/3DLAVYeSJLLESZ2mNeNrbCW8DIa6zALJPFBg2QlB4VWndq1MPKHH9Ci1Rs4dPgodu3epfowR8VEqRZLHsdcFyUmxOGtDh3QqFFT0x54xnJMk92ypEyZksidJ48a/IVwwJ2MHu7iMCffapkgB4qNi5X62pY3iin1LrFSF/BasD43l4eL1EhyDjXR+QF9ITWaZ4F9++Lk+Q0Jvtt6nhzK15T7lgMqWcJblJFG6oMFCVLvW0LPgvOs8likYvkKyJwlO7ZuM9rVbTt2wsM9HSpW5MsXICAgQL2YZxQBMdudAvnyGv2ujMZGEWWTkhyblC1VEmPFHypcpBgWLlqiWisXL/xLreOLpXHjJ2Do0CHYu2eXOlZ4eNh9tlvt9f5d3wPnr+Vz6yDPrfKTLKC9NT7Dlvs1KDtuCa8Nr0ti/L12OK3z+JZa88Sw0uS9xZvHTLZsOVWnWQ4GYwlv+BhxMBwcjA+TutHl/7gk4o1vQBRJbnrL2/fBUPQZ7hNQIaHhst8EESxOYkCA9O7p4ed3f1glR+LjkeyTOFZJ36wmhaP52dk5wMvrminlXnLmzCliLxy+Pvcek6fKN+gcBZWkVy2gVrh21RiyYMZgJVdYymC+JAUKFES0XMt2bVqjf//++OCDD9TSr18/vPfue/eM5mrJ2rVrULlCObTr8BYioqJQuWJFzJw1E9Vr1FbrXUUI0tG8eeum+m5JuFxDGhNrWxvkypFLfndrFCtWRIU+mY8/YMAAvPvuuyoMzEzxYsUwavQozJ4zGwXFEE6f/qsa7OdJoYAjGcTBSefqikyZPPD+++/fc+x+/d5HrTrGt3nmX8x8O5nJJb8FDWb5sqXuKzu/Fy1675syjeZlk5hEHDna8+WSgzjzxkqcI3LSeeCodJZEREQbw0udLV5E0V4nsbnJwQgPf/9AbDM5R8nBUYn5ksvX95Yp5S6cxN5GKgcbB5Mge4gJNT7ZZusmWHy0xOxj0f5wh9WrVUI/CxtAW/jee32RK3deqfit1WiiPt7exo0eAHeZ9Hpkz5pdje55/ca99pwv/mKjItWLuHt5eP2QHHQYGzVqoEQ1B/uicHN2ckHGjB5J7JLRrtc22bU7JFMnOYtjXKNmLZw5dQanT5/AwQMHULVKFTVyYnLQYWTLcnBgIOLj7w8N4xD2mTlqoSFerut795SJtrdTFy0INSlP7hzZkC59Ruw/cFB8pgf7CtnF14yJi8Xt2z6mFCMxMfKcxsTceWH9MCxNjYvYycqVq+L8+YtiS32N3YCqVEJWsQekYIECiAgPRZdOb93nd3HgQ8uR7Pl0Juc20uca8d23WLR4ETJlyYI58/5QYePbd+3G5k0b0bN7N/w2cxaGDRuGz4Z9LuLTXr0gu4v4gur7A4ykQDGcPVsOBAYGWEQWGGEkgqg8FYJvJJlCmlDC8cGHSZNoQfg8SeaOL1+mFMIiI/Hv6lWmFCObNm0WURGCunWNozjyZuPblrNnziPEFOITG5+AKVMmKQfI+BbjCeEmIlSWLFshhuSuk8LJh/mQlC9nDAEqXrI4rnndxO6d9zo7ixYuQpZMGVG+gjEfRRj/4xQRDyNXzhwqvnvd+k1IiDO+xSabt23DhXNnUaVSRTFcCWrqA44MZWbbtu1qWoXq1Y2hphkzpoeLmxu2bN8Bg+ltFsXL2LFjZLs4uSbG27lI4UJwcHIUo7JYfbfkQROTUtQyXDRMHLXSpUqiS+fO6Pj228iX996QgkKy72PHTuLI4QOmFOOcZGtWr1ZhYPnzFUDWTBlUqOuG9RsRFWkMdzUTKb89YSstQ3PNzlbuXLlQoVIl9SY8Tq7FE2O6Hdivhn0FDx46issX7g1B5bnf69yZZeRdssvvxP5T6zdsVMbdkrCw+9/IaTQvFbGDSVuDduzahUARa3nyGEeAY6h7eGQ0VqxYrr6bWfXvKkRFhKFOHWPIIO9t9mFhHzxDkpa7pDRr0gTuHhnwx/w/cfrUCVOqcR8HDh3BuJ/GIEfWzMiZKyf27j1wj+PGfthbN29G2bKlxS6m/PQEjIRIL2XjW/akMASM2NnaoGiRwmqk48OH9qo0ckls+YYN/8kn43NOe3Hz5r2isXSJ4srWrlpp7O9uZtOmTWoUV3M/wSexFZzD0RzZYWbduvVKkLFvJyks5T1x4jSuXr6gvpvhdCLsq/g4NGrYCGFiB2fN/B23pQ5s2LChqhOTg9eoVMlSOHX2HI4eOmRK5e93Xe6lZbCV+65E8eJyv1yXa2gc/dAM7XisKWpDo0lpOBoxR7OfPHGyGmXYTGhoGGbPmYvDB/fKc1hZjSkwf95c01ojixcvRYz4IfXqGu3ek9CgYQPEJxgwacpUcZriULNmLdMaoBTtgo09FiWxO2wl5CjnliT1O+h/cWocMxyTolyFiioSQrWGhoTQ1ItvV9CUA9i/74AKQ7UWm22GNodTSdzpGvMAOEWZ142b4qOtN6UYWfj33+rY5SuUN6W8Xuh5CJ8jrDg2SeXKaR7y5M2v0jKLoLouFeyG//7Dgf37xFG4jUVLlmLJooVo3rQh3u7U7U4zdqI8NuulUty7d7eaK2rq1CmIp2CIjUOVyhVEnBRVTv6CBX+jdMlichM/ePhzwlbJNav/VW9w/5FjXrt2DavXrMXGDetQu3ZNOXYXMJSpUKEi2L5zB9auWYernJLg/AURotNw8expvPNuL1SubBRoHFCF25+TCvPSxYuS7zTKlC4NmyR9Uhz4JsrGFps3b8JmcRo8r17Fejn/aVOmqH50xYoVR0BQsDgiG7F3z274B/iLSF2F+XPnyPrq6NGzl+oc7OjggDCp/Df8twHHjxzFhUuXMHnKZDV/HoVh2dIlUaJkaaR3dxfRHa0E7PGjR9T8iwekQp83bz4WL1qA9u07mEp2F6PAtlGilL/NunXr8M8//+CPP+bjzJmTKC3nxXl2ChYspIaF37hxA27fvq3mGJw0WYxyVLgauKVQ4SJqf2wdWL12jZpjkG+iLklZ/164ELN/n4WK5UqrN3xDhgzBGnFKafT+27gRy/9Zhpo1qqBJk6bJhnJt3roVnlcuo3v3rlJgY2gW+4/+uWABMqZ3RdNmLZWhLSZOyooVK9TgDj4+3qqfCwe3GD32JxQrmAc5c+dVrSc8Nw6QU9ViGHqSTspOZ+w/MZZsuT11+gxWLF+BSRMnyr1c64EtrBrNiyQ4OBTLly0TB8BP9QfjnHNLli6VSn0BcuXMjs8//1zdqwwl5dx1K8WmcA4p2rQl8qz9t24NWrduaWrJsVJ26/S5c9i6aQs8RRRu2rQR1atUvKePrRk6DRwIYfeePVgmZTgm9ohTK/zx51/yXM1DlkweaNi4KbJkzSbP9iZlM/gccl7SKWLHkZiAwYMGqfmtyFkpFwdzav1Ga2TMlEWlkVWr1yIiPBgtW7ZW3Q+2bd+FG16eaNNGvjveDdmc8dtvyJU9Gxo3aaYGXLCxsRPBuwa7xY77+/vjnJzXn38uwNw5v6Nxo/pwZGtbpkw4cPAwVq36F9e9vLB3335MnjRZyhaP+g1EKAlHT52RemqvctZ2796NYoULIX+BAspes246uH+/Oq816//DH/PmoXq1KioKgmFqkVI3zZ07D7VqVENRi/lhk+OToZ9h+fJlqi6hTf3jj7+wY8c2NG/eBF26dJMcViLw80jaDiyRuis8LEyVaZ0cd+yYMSiQL6fUsQVUGC9/j7y5c9xn1wj776/fsFmOcwZZMmdAv/4fqP6XJC4+QWz+UmT0cEPd+sbz58u1RYsWqXkaPeV4O3fvwfjx42EnIrKBiMncuXPj5KnTypH0vnULvlInrBe7Oe2XXxAWfBsVHhCOqtE8C1WrVhGf4oryCeiznBP7t2vXbkycNEkNvFe3Tm3xEavgsqeXqsvPnzmtbOBysYHLli5Gg/p10KfPu+plmrePL5aK3WzZrDFy5TH6qWSnPO/Hjh5G714979hAhubv2LFTzW/MsSi69+gO8yAwfLYi5Pn7848/cPrUSdUfkGHZc0WQrl2zSnVZ4XPMMHD6Ze3bt4Ozi5valgPsvfteX+zbsxNBYlt2yLmsXP6PGuPgjTfaqSm1OI8pw73Zh3rZipX4Y/5cNadrxYoVUNYUdeUlInmX2DzOG8pBu7JnzYRMmbOK/7MWkSIe27YzTuvG/sqbt+1U/Yk5UJ7nVU/MmTsfW8VH7dm9C5qIL0XOnr+IXdu3okXL5shsGgeELBXfMEaO3aplS9Uv+VVBC8LnCOex4xwrlStXRmaLyXPr1q4ND3G6WVHfvHVDhUS2Ns0RZxnTXFjER6asWSRfgJr0vXLlihj80ccIks/lypRGtuw5Vaip1/Xr8r0UChRMfn49M3xryQnm2YSfPkNGqVAvg6PXtWrRAu+88w6cTYPIsKMuRQn79gUEBorw8VUjTX7w4QAlOsxQfBQVMRcoecLCQpEze3Y1QbTlhMtmihctgoIiljjZc0hIsGrl7PveO6hZp67qP1izZg1lbAICApWDAYMBzZo2waBBg+FiMhqE8/1xtDdvb28Ei8AtK0Ltyy+/RKCIvpIlit8ZcKVqlcrwyJhJ7c9TDCGvdRZxgNq3by8OonE+HEvipDwclCKbOAljx/6sWgebN2+BrDlzyMO/HAkxkahWo5Y4EZlQtXo1NYn+LSlnkJSBA/B89tlnKFvu7lulAvnzoXKVqup8b964qX4jJ3HoWrVsgXIVKqtwDZaVE9xzktVwudY1a1bDQLkHHmRgODmso2zHEQqNV9/Y0nhVBHa5MmVQytS/z83FBXXq1lOtAbfEQHLSZM671qBeXdm2sRKbDBHmduxXw5h9SwoXLIDSZcqq+4yDKvBaMxz27U4d1WhlfGmg0bxsGI552++22AfOsxejXo5wwvc2b7yhRo/LmNE4CTFb/WqIfWGr2c0bN5TTzoiInuLMdBExyDmoCN8JlSheAv4BAapln+3nTcUGmdcnhSFStevUkVzWiIqJVq3/Hhk80L1rF/Tq846K8GB0RLVqVcWG+sNfhCv7vpQrW0bZtZKlSpv2RHEbIg5LhBq4wc00GTS5fuM6ONonnTv2zbntf1uEoR1q1KgBO4t+6JwwvXzZsuq5JZyYuaTYRi+v67jlfUuNQMp5X9u2bSvHLaPycJJ5hlByUJ3AoEAVxtq4cQN07dZdjaZHypYuo/puh4r4tlfHra7sU1WxbblEoHHgHNo4hqB1aN8G77/fTxw246TXHKSH4pvnnzNXbpX2IHgdadPMfYNc3ZzRtXMnvPNuX5VO6HBWl/OOFttLB+76zRvyO0WiWbMmarRT3g9sjbgp16xYsaIoUvReu2aGLwloDxs1bCA2++7AODyK13UvFCpUECVLGn8bNxdnVKpcVc0/xggSOqBNGzdEz969pb50VnUlW1r4go3Xgt0ZeB9UFieVI2YnneBeo0kJGFJdr149FC5cWL14iRIhxpZCCsUPB354576mPXGX+/3GrZtiO/zF74pH1y6d8H7f/nfsGsOyfb19UadOrXteRvmJnXQUX6FJ02Z36nyOuElxxgitpk0b3/E5zNDvcvfICL8Af/XCJkD+0ga+ITY5d26jb0a/gi36LJu5f6Ot+IzFihXD6TNnxWZ5IcDfD40aNFS+KhsD2P+5oJwr5ybkJPJsFOzb9z3VuEGbbR4cplSJkuLLJSrfEIZEdT040BXPP3PGjKha7e7Ahk2bNJELaa2ea3ZXSif2sVu3rnjr7bvzcYeGhak5YTkAjuWLcE8pY55cudQc2Oyf/qqgJ6Z/jjCckkNZs6N8ciGeHOiEFRg73zLPg6Do49Z0MAhHUbPcZ9LvD4N5LffDUj7shmYe3iF0qljO5OB58DZ6nDKYj0lny9z52JLHviYMEZW/5re7bGXj5P5Jj28uGzGfd3JcFtHUXYzBsKEfo03buy2I0SKi33rzLVSuUApffzvSlMozkH2rc6FNefC1YSiEuY9Tcvko6Hi+6lweUj5iPpek+R72+xuvN51dud5JrqdxO16z5MvOY/GYJLntNZqXDZ8dyyqMz9fDbJDRnhkkH+/n5J837lM9k09wz5ufswfZAvM+H2Rvzc9a0mebaSyHeZ/m/STNx/57dpKW9Nwt7R9DqzjoVVK4P/NxkrNB5rIldz3M1/NB2zJkjaMgPy4Ps1eWPCwf1z3odzDDPHwRqQyvBfHi6PIaJd2W58htHnSe5HHLrtGkJPQhjP3m7vcNzJjvTZLscyoCzS6JXaJd4H2f9F4224MHHYtY2p2k+R5kw4h5Oy5JB3whfJHNAbMoINm6yfx8VvnMWWJ+Vs1lZz6S3HPJvDwe9/O458ptHmVj0iJaEGo0QmBwKN58603kypYZ3br1QKHChXHbzx+rV6/B1s0bMXLkd6hX3zgnjkaj0Wg0Go1G86qgBaFGY2Lv/gNY8Ndfam4q9ifhG3cPD3f06d0b1apz6pAHtzxoNBqNRqPRaDRpES0INZokcKCeGM7lZ2+v+okkDUfQaDQajUaj0WheFbQg1KRZ1MTPCca+LRyBT/fb0Gg0Go1Go9FongwtCDVpFk6twKHQ2eGXQ50XLHh3jhqNRqPRaDQajUbzaF6tIXI0rxWcRoPhnRzmm6NWaTQajUaj0WhePidOncaECRNw3cvTlPJo2EZlOSpqWkSVPw22tWlBqEmzmIcV1qGiGo1Go9Fo0iJ+/gG4desWQoKDTSmvBr/PmYMtmzYm66NxAnrOOc35ri1ZvXYdunTuhNDgAFNK2uKWj6+ah3bd2lWmlLSDFoQajUaj0Wg0Gs0LZPPWbejZsxfat2uLjh07olXr1ujRvRu2b9tmypF2CQ4Nx8H9+9G8WRPkyJnHlArs2bsfb3V8G23btEGnTp3QqlUrdHq7I7Zt3aTWx8QlwNvnlppbNS3CIQgDAwJF6IYYE9IQWhBqNBqNRqPRaDQviDXr1mPczz8hMiIM/fv3w9QpU/DRkE9gELd84cIFiIuLNeVMm+zYtRPWiQmoU7+uKQVY999GfPfdt7CxSkTvPr3VOQ8cOAjp0mfA5ElTVB5rayvY2tim6dHd2SLKifPTGloQajQajUaj0Wg0L4CIqGiMGz8O6dK54Ouv/4cuXbqiXPny6NCuLX6ZPh3devQ05TTCMRL8/Pzg7++HxIT7+9dFRUervnckLCwct2/fvvOdxMXFqVHZk4NjMHC0djP8bD7Wg/ryRUn5eYzw8DBTyr3EyXZbtmxB/gJ5UbRoSZXm7euH+fPnwpAYhwnjJ6BXr14oW64c3nrrTUyePBn9Phig8plxdLBXf29LWUJCHtzaFhMTo8obEOBvSrmXCDk/M4GBQXJe9+fjtYqKupvPPyAg2XyW8JhcHkRycjYwMFCdjyGVjnmhBaFGo9FoNCkMnSkOfEWHhX/plFk6XhqN5vVk4+YtiBYx1fntt1G6TDlTqhE3VxfUrFETdnb2iIyKwfQZM0Q89UaPHj1k6amE1Mnjx0y5gaDgYHz00cdYv+ZfzJw9Fz179lR5Bwx4H2dOn1R5/vh7Ifr364crly6q72Z27N6DfpJ+9PABNQbK9F9noE/vu8d67713cezoEVNuIwuXLkX3Ht3R25Rv3E9jTGvucvmKJ44fPYrmzZuq8yCbt2yFj7c33undC9lz5lJpZij+mjRuavoG2Nvb49SZ8xj66afo0a07esk206dNFdEWYcoBBIeE4vsfRqoyGM+5J4Z+MgQXzp015RBxHBGFrp07Yfv2rZg8ZSq6duuKXpJ3yMcfISjwrpjbs/+gXK8PcOL4cXw85BP0lH3yOo8ZNRJRkXePSfbsOyD76K3Ov1fPXhg48AMcPnLQtDZ5zl24iE+HDVP77S37fa9vX5w6ddy0NvWgBaFGo9FoNM8A3zBHRESoQRLOnTuHY8eO4ciRIzh8+DAOHTqkFn5m2okTJ3D58mX1dplCUaPRvF6cPX0G7u7pUbJkKVNK8lz09MSG9etRo0ZV/O9//8M7776HoJBw/Dz+Z4QEB6k8CfEJIm4CMWPWbGz8b60akOXtTp1x5swFTJ48SeXJlTOnEmmHD98rXLZt3Y7AQH/kzJETF2T9xo0bUK16NXWsd0W0BAaHYuLECXKsQJV//6Ej+GPOHFStWB4//vgjOnbqglu+3upllyX7DxxEtIi3xo2bmFKA69e94GBnh/IVK5lSksfaykrsqRVGfD8SNlbA8K+Gw8MjE5YuX4aNG9aZcgEHDot9PbQfb7Ruha+++kqd84mTpzF50kRTDrasGnDz1k1MmTwVB/btwaeffII69evjoJzHL7/8YsoFKWu0st1ff/ONCmcdPHgwSpYugxX/rsGSxQtNuYC9cl7fjfgWHu4u+OKLz/HZ55/jxk0f/DTmJxG7N0257mfatGnwuXEDgwYOxDfffItcuXPj2rVrprWpBy0INRqNRqN5CjjtzaVLl7Bv3z7s2bNHnLAzuCEVf0BAAMLDw9V6thAyXIuhWWFhYUoIXrlyBUePHsWuXbuUWOQ2uvVQo3k9CAoJhZOzPRwdnUwpyVOiSEEs/Ptv9Os3QERhDXRo3w6933sXly5exvWb11Ue82jriYnx+HXqVLz51lvo3asnWrZthyue1+B76xqqV62K3Hnz4r//1qttSGR0FHbv2YUqlSoie648KJgvD/5e8Bf69zceq33btujRq5fswxPXvLzUNhcuXkGCIQEDPvwQZcuWRaeOb2HczxPVXNBmIiKj1KA4ZUoWR+YsOUypxlBWR0c7uDg7m1IeDPfRqkVjjBn7E2rXro1Ro0fBI0MW7N+335QDqFuzBpb9swxdu3VX5eVgPHUbNMSpc+fh73/bmEkEpZXInFy5sosonIwGDRvis6FDUalqNZw6dQrBQcawUCtrY4Bn8aKF8PO4CWjSpAnGjPoRWbJmwwGxzyTRYMCSJUthZ23ABBGYNWvWQt06tfHjmLEIDArBpo3/qXzJcf78BVStVgWNmzZFlSqV8a0Iz5Yt3zCtTT1oQajRaDQazRNAwcdWwL1798JTHCYKPzpFdnZ26i8dNGtr62QXrmM+hkXRmWP/mLNnzypxeP78edXSqNFoXl343Bv7+D18rjo7Wzs4ODoiODhERR5cvHhRpbEVzdrqrvseExuLZo3rI0PmLKYUoHyZMuov+6wxDLV6zZo4efocfL1vqHS2poUEBaB2nTrqu63YJQcHOZbYIx6LL7qIWC0pr/FYxUQwIdEaH374gXr5FRNj7JdoOQDM8ZMn4X3zBlq1bGVKMWI+Z8u+jclB4WVvZ43uXbuZUoBMGT2QPVtW+PnfDfN0cLCHtY2tesF29uw5XJbyuru7mwakuXtt4hPiRVy2gEfGTKYUoKxcG76wM9ta82/Ru/e9fTfz5cuHsNAwxMdFI0BEn4+Pt4jGorgoxzp+/DhOyrlGhIao1t5bNx/cQliocCGs+vdf/Pbbrw/s65ga0IJQk2axNEKWnzUajeZ5wBa+06dPq7BPikLaHYo7Cr2nsUHchgKRIpIthGwpZGgpQ0qThmFpNJpXA0dHe8TFxssz/vAJ2Dk4y+9z5mLQoEH44Ycf1CTvSxYthKNzkpZF0TNJdZYBicqmBImQIdWrVoO9oxN27tqpvm/dshX58uZBiRLGQV/iJe/vv89R4ZLff/89xo8fj3+XL7/nWJUrlMPAQR9KXiuV79OhQ7F162bTWiPbtu2Aq4sTKlS6NzTU3s4WsXK+jzpnhZhSy2knGPrJMwoVcWYmPCISo8f+hI8+/hijR43ChIkTsWvHNjmOsc/iXShCkw7ikoiY6Lh7BpwhvN5J4WAz0TExYvtDZZsoXL9xS4Wbzpw5UwTeb5g3dy7Su6dDthx3W0OTwlbJ6jVqY9mylejbty8mT5qAwFQoDLUg1KR6HvRGyeyAmZ2qpOgQLI1Gk1Jcv35d9QH09vZW359WBCYH92NuQeRgNAwpZQtkUJCxn5BGo3l1yJsnD4JDwnD27GlTSvIsXb4S8+fMRrlypfDzzz+p0Tk/GPiRat1KSnJeEu2KlZVxTdGihVG4SDFs2bxZjh2MgwcPolqVysiazShklv27Gn/Mn4sypUuqEVAniCDsO+BDRHIkUQsz17JFC0z/dToGDf4Ivv6B+Pbbb+Dra7SJFHEcwKW07CNnrrtzD5JcuXIhJiYOJ07cO0hNskiRkz0fU2gn4QA6G9atRovmTTH2p7EYL2K5eas2iIlNOpqqFSWh6bMFVhSJj7bfRhtvgJMThbEVypYuoa7NTz/9hLFjx8oyBpOnTkGPHn1U/uSg8P5OrtPUadNQtnxF/LNsBaZPn2pam3rQglCT6uGb8j/++AMjR45UDyGXcePGqSZ7vp0nCxYsEIP5852H9LvvvlMOlUaj0TwL7APIVkGGc/IlE18+GR2tlBGDlpiFIVsM2RrJ1kIKUY1G8+rQrFlTxCcmYunSf+T5vmpKNRIaFo59+/aoz7v37Ea2bFkxYMAA+ZsdDo4OCA0Nvidc9JGY7JSrszPq1K2Di5euYMnixQgOCkCjho3UOrJ923bkyJFNjTqaLWs2FarKcHYr67sv22NiY9RfVxcXtG7VEv0/+ACREZz2wdjadfjocYSHBqFhgwbquyU1a9WEk7MLZv42B2Eh977oYgvc3f6Nj7arFJ7Hjx9FhfIV0LVrd2TNmhX24gvSZoplNuV6FI9vvzntR+YMGZE5cybs3X9ApVEg3lnkWpmvc1IsQ4MLFSyAr78ajiLFSuD8BWNIbmpCC0JNqod9bVq0aKHezNM54l+OCMVBGswOFOd3uXXrllrH0ZtcXV1RsWJF0x40Go3myeEooBx8wMfH57kKwaSYj0PbRiFq7s+j0WjSPjmyZkGH9m+qQV+GfDwU/65aiRMnT2Ldf//hAxFZM379VXIloFjR4vC77Y+1q1crW7R67VpMmzwRziLILNvQEg2J94VFUohQyFjOeVe/fj3ExSdi1apVyC5lKFHq7iinhQsXETt3G+vWrDEdax2mT5mkRJzsTOX5efwEzJo5Q8p0GzfEB9u8aSPsHWyR3t1drefcg2wNK1q8hPpuSbHChdBM/LgQEbwDBnwoonQRTp8+g3/leB8N/hiTJ05Q+VS51bnc26rHsFGeD6H4y5kjF86eO4c9u3YiOjoGs+fMw6plS2An/uIdZBfqGiSJMmM/RZVuOgZXM8/9+RLVkpCQCFtba9SuUxd+AcH4ceT38LxyWU35cfToMdUIceH8KdNW9x4zQHxTDtRz9PAhFaK6fsNGXLvqiRzZs6r1qQktCDVpgowZM+LDDz9Ub87pKPEvnSWz42Tuh8Nwq9y5c6v4do1Go3laaEsYVsWwTUtb86LgsXhc2jYOXENhqtFoXg0+HToEA8VPcXRyxs/jxquWuTGjRsEjfTr1GbBBj66dUapceUyaMh2t32iNObNmolXLFoiJZf86oy2iqKGNsLFoyVOIIFF+kYVAypszJ0qULi2CLx41a1aDtY0xwoq806sHypQrhym//IrWrVtj9qzf0LJlcxGQcXda3QoXKYql/6xAp06d1Nx/p44fxSeffIxcufOI8AnGzh3bUbtmTWTKdHdwG0sGDuivpmqIF3E37ZcZ6Nv3XYz/+SexdQn43zdfqzw2okpspVz3aDP5Yi3n4mwxKmu/fu/D3SMjhv/vGylvK2zZ9B+aNG0iWe8VgDY2Rl/REtpWBwcH2Mk6M8rGJ2k1tJI09kk0X9uund5WobI7du5Wc0N2evtt8TUH4ty5MyJEHVUeYmPLl4fGY2bImEGJ4MFDPkGH9h0wauQPKFu6JD7//Eu1PjVhJRfuXkms0aRidu7ciX/++eeOILSEoaUeHh545513kFMMn0aj0TwNfEPOkHOGTJnD0l8mrKZp3zjqXZEiRUypGo0mrcMwdA5Qxb8UKRkyZDCtuQsjFGiTMmXMqFoH+T1TpkzKD6JtYISUo6MjXFTLoRGGuoeFhyGj+ESWYZ+RkVGIiIyAB0fkTMa2GY8Vg8yZM8NJxKqPry8ySpnMdpAjc/IlGY9Lf4vRWGTxshWYNG4s5s6ehcJF728htCQuPgHBgQFqIJuk58zzDAkJlvPLfM8LOI5+So8vnak1knA/frd91cu7nDlzKPF3+/ZtFdppFmQ+Pr5SzvTqOGbYUhcdFSXHlWsj+RiCGhIcrPLZ2t69JsGSRtKnT6/+mgkPj1BljBex7OaW7p7y87qwVdDFmeGkd6fY4GiovHbOTk7IkjX1tQ4SLQg1aQreritWrFChCTSANBhMYxM9F47gVLx4cVNujUajeXLYZ5Dh5+Yw0dSA2c6VLFkS2bJlM6VqNBrNy+edvv0QFuCLxf8sN6Vo0hr3NrFoNKkcOmft2rVDsWLF1JskOknmpU2bNloMajSaZ4Lhmb6+vqlKDBKWhQv7FIaGhppSNRqN5uUSHRuD6lUqoe/7DHXVpFV0C6EmTcKm92nTpqnBZegk1atXD23btjWt1Wg0mieHdoX9BtkSZxZgqQlW1yybm5sbqlSpYkrVaDQajebZ0C2EmjQJY+W7deum4sLZWtiqVSvTGo1Go3lyKLbYOsi+euZBZFIbLBPLxr6NHFVZo9FoNJqUQLcQatI0Fy9eVAPIODvf7byr0Wg0TwoHduBAMs8iBh+3On1WsckBKGjzOLUOp+XRaDQajeZZ0IJQo9FoNK81rAYpBjla3+MIQstqk5+ftho1Hyfp30fB41EUcsTRPHnymFI1Go1Go3k6tCDUaDQazWsNQzCPHj2qhNaDRBnXcWEfPsJ8HHiGYesc/p0tdfys5gSThcKSi3k7Cjhuy5BULhwUiws/cx3zELMgfZQ45DbsS8hWQh5Po9FoNJqnJUUFId+ucu6Tx33LqdFoNGkBmkn2W02XLp0pRfMqcfbsWTVAleXIouaqkX8pvgjDNN3d3dXC+bf4nfNzUcQ9DRSInEMrKioKYWFhCA8PVyOI8jOPaRaVyQlElotL2bJlkTFjRlOqRqPRaDRPTooJQs4Lt3r1alW5aUGo0WheJWgmKRb0PJevJlu3blV/WXeZq0T+5cIXAZx4OEeOHOrzi6jf2GrISZE5yTJftJqn2DG3BJrLSdGYPXt2NTehRqPRaDRPS4oJwpkzZ+LkyZMqZIaVmUaj0bwK0PlmSCBbcRo3bqzmu9S8OvB33b59OxwdHe+IQbbcsfUvX758yJw5s/r9XxYUg/7+/vDx8VEikfCe5MJyUiTWrVtXpWs0mmcjMjISV65cUbbgRbz80WhSCr4gLFq0qKrLnoYUE4SzZ8/GiRMn1EPEPg38m0K71mg0mpcCw/UYxnfp0iUV/UBB2Lp1a9NaTVqHXRyuXbumFoZ+ss7ib547d24UKFDAlCv1EBQUpJxV9nk0O6u8Lxk2miVLFvVdo9E8PXzpwmcsV65cd/oLazSpHdZb169fR8GCBZE+fXpT6pOR4oKQb1dmzJih36xoNJpXgqtXr2LcuHHqc5MmTbQgfEXYt2+fWrJmzaqmrqHzx4V9AytXrvzQOoyCjBUwB3VJKRJE2IWHR6jWSBdXF1Pq/bB/ISfPN5ePQvb48eMqOqdZs2bKkdVoNE8Hn22+IOJzZO47rNGkdhgpQkHIqBb2cX8aUnxieupLHTKq0WheFdgCo6MdXi0oqFatWqX66Dk5OZlS7/KglgG2HHzy8cdo90YbdGjbDoM/HKj28azs3r0bPbp2Q7s23G9bTJo4EdHR0aa192MpVvmZI5xeuHAB8+fP1xPWazQpAG1+0gXyv714zW72z2+xMw0YnNzx9aKXhy3PSoq3EEZERGDq1KnqbaXm2eC1ZN8Whqul0M+kSaPw9+fAFjVr1lQhAZoXB5+/ieKg0/HWLYRpn8uXL+P3339XLXyspypVqqT6C/IZM7cQJjeVA6eleLtDBwQGBcHG2gbWcj/ExsWp53LT1i3Imy+fKeeTMXf2HHwy5GPY2RpDVgkjbRo0qI8Vq1ff11LJFsJDhw6ZvhlbCPlm+PTp06pFI1OmTOjXr58aAEej0TwZ5hZCc9SAGT6aTnbAVs9YLD4TI8+/aUUyONpawUGWB8GnPCLGAAfZHw+RoPZthZh4A94uJTYpmx3idLSq5glgfXbjxo1naiHUgjCVsnLlSowdO1a9faZjktQp0Lx+8FFlaxWdvcGDBytHUPP80YLw1eK3336Dp6enen7YslatWrU7/QcfJggb1K2H8+fOqZBO9i+MiY3FTRFiUdHRah+r1q4x5Xx8zoiIe6t9BzXVBMvAytzW1gZnz55DZFQUBg4aiG9HjDDlNpJUELKcvr6+KmyUnzlITqtWrVCnTh1TDo1G87g8TBCmd7TCl1vCERhlQJ28doilkkuCq70VJh2IxoHLseKli9+W1HVLlG1kP2MauGDM7iiUz26LQh42mLE3Eog14Kf2buhfwRmRIg5fBjzPlHI3aVO17/piSAlBmOIho5pnh87KF198oZwEznvm7OQEJ0dHvbzmC9/4s88SWzfmzp1ruls0Gs3jwikcGFJpfplCZ4UV6aPei148fwGXLl5UeQsVLox1GzZg8T9LUbxECSUQuY52+0nZv2+fGsSCL3re6tgRy1Ysx/pNm/Be376wkbJt3LjRlDN5zM6W5UtDfuZLDI1Gk/LY2wCFMtigfDZblM1qd99SPpsdcruJay3CEPayAU2N5SLprrZWqJnbDnnSWSO3LBVz2Brz21nB7mFNjxbQZt1vtZIPHVR5H2HjiJWVtdjGe1+EPYqk+zZ+N362s7fXgjANoQVhKmT69OnKQXCQh4kPl42dPazF6bC2tdHLa7nYyj1gp1400iGlA7p48WL4+fkZbxiNRvNYUHxxZNEndVJCw0LVdokJiShVqhQcnRzVoBNFixVTg8HExsUjIjzClPvxCQoKVjae/e7rN2yA9BkyqGe8aYsWypkKCgwy5Xx8aB84TcWD+kFqNJqnh6Ggw/8NR7kpgag2/f6lxMQA/HM8GmALX2wyS5wB4WEJqDU9CMe84jB3XxT6Lgk1raOkezQUbk7OzlIWm3vEmI2tPZydnWAjotKczn/tHYwvlR9m9bjPiNAgXLpyTRX9cbERe8OQe+PiBEdHB9jYWMmxEnH+7GlERD25vdW8HHTIaCqDc0516NAB1655wVbkukuW7Gg++hd5qm3lAdcV/OuItY0NooP9sH74IMRF0+k0zkHG0XzZ/0nzfNEho68ObMWbNWuWEk2s+hgyWrVqVfWX380ho3yuKMzMBIcEo3L5ioiJjoaDOFafDfsMkZFR+E2ewRARmVmzZVX9CD08Mpi2eDzWr1uH9995D4li23PnyY2evXsjg4cHpkyejHNnz6FevXpYvOwfU24jSUNGeS4MGT127JhqHeQ5MGRoyJAh95yDRqN5NA8LGXV3tMLInRFwtrNCqSy2iE1gbWwBv0g+6p9HaSDuz5RdwYa5Y77x4IynAyo7ITremJ4UCreYiGBs2bQV2YtVQOWS+dULKQozrwuncOikJ2rWrYusGVyRIOW3s7PF8UO7ccMvGvUb1lUNkTym2fU3izV78dn3blyGSbNWYOKv05HZ1R7xCQl31icHbU9kaAB2794Dz+s3YWPvgvIVK6F0yeJApDc6d3ofA0eMRcPKJRAVHaMuSnJ7Y1mSHsfGxpbZVeOI5tHQ1us+hK8YfAvNia+9vb1hLU5Culz50Pmvf9UTrPXg64m11BCRAcFY2L0V4qJEEIqV5OARFITsu5TW8Q8MweVrPrjg6Y3rt/zg7R+M8PAoqYwMcLC3gUc6V2TL4oH8uTOjeIHcyJcnK5wcGYvzYtCC8NUhICAAU6ZMUY4ef08KKE4xYR5UhgsrVgrCpIOyDPvkU/z++6w7eQnzMgz1s2HD8L9vv1FpT0Ks2Pu2rd9Qo55ytFOWy1ocvrj4OHnOpV6dOxfNW7Qw5TbCeTEPHDigyk8Y/url5aUGleFn1iGFCxdGnz591HqNRvP4PEwQpnOwwqhdEWhQ0B7VcsizloL9/OxtrLDDKxYHb8ZjUNWHCEJrGySE38ZnQz+FR4l6GPl5f0SGR8DJ2QXzJ3+LxRuP4d2PPkfb+pWUCHN2dMC3H7+LYNfiGPHlYNhZJ4g7aaUGxTLbPGLv6Ig965dg/K/LMG3OLGR2c5DzT5Al+XO0FVtz6/IZ/PrLLzh3IxD58uZGQmwkLl+9ibfe+QBdGpVB+zd6YvCo8WhctQRiYuPEh00Er6il9KMd42IuC4/m4uyAxfNmIco+L3p0boKoyAePuKwxkhKCUL8+TNXIYyMPSGJ8IhLEP0gUA6GX128x/vby4c67xLtGNC1y/spNzPz7P7w1YCwyl+2KzKW7oVrd/ujRawSGf/0bpk5dirnz1uLPv9aJA74aP49fgKGfTkGHN4ejRJVecC3WEYVq90W/4dOxbN1eBASFmfas0TycjBkzqknnGYlB+GKFn83PEv/yjfSpU6fum4NszLif0K1HN8SIkxUTE43YuFgV6jlo8OCnEoOEb+Xn/fkHKoko5ciiLEu07NvN1RU/jxt3nxgkFH9mJ46wzBxIhjCdTmzx4sXVd41Gk7LwyRNtg5g4A6LFRMTIQvHGv8ktj7suOsGAuMcQmAYRaS4ZcqBc8UI4J3YqLDJeRRHBEI1TJy6I0EvEiRMnGcupREJ0qC/OXg9A2fLl4ORoC1tbe9U/OToqUuxXAhwcjSGmCknnSzK+WKLPERUVo8JNmWYJRWlMWADmzvoVF33j8NPEX6Tenozpv/6GEZ8PQkY3Z8QnJKrjc1/yR0RdlOr+4mBnq64h98kBtOLFjkZFieCzsoa9rGNJmH7twhmcOH9Ftpfy2sgO0qa7k6bQgjAVklYdfY3mQVy7cRu//bUeNdp9hmK130ffgeOw9J+t8PcPkZpBzFCGdOKtuwPuroBUJnB1AlxkcZMlnQvg4QZkTg+kd1P9uC5fvoUZv61Ah27fIEeV3nir/1is2rAfQSHhpiNqNMnTqFEjFSJKwUfxxBY32lyzyKITw7BMTjNh2UJAJk6egs3btuCb70bghx9/xLoN/2Hk6FGmtU9H5ixZ1H7+Wvi37PdbjP35J+zatw9du3c35bgLW6tV9IiU0VLEsrxMY+sgBW/p0qXVOo1G83zhU+hgC9iZvGlLSUedJRpM/TVjXs/83O5pvD0Oblq6fHnEBF7HVW9/2InIC/G5hutBsShSsAAunTmNkPBYFdJ5/co5RCU4oVTJIkqMeV04ih+/HY7Phn2BIZ8MwZQZ8xAqypaikLaEYmzTqkX48vNhGPLxYHw3ZhJ8AsNgy3raBPd7+cxRnL3mh3Y9eqJoviwIDQlFaFgEylavj5YNagGJcbC1d8Clk4cwYviXKoT9i6++l21uw9nRHre8zmHc6B8w9LNPMeyzoRgy9AtcuBkEq7gIjP/xWxy57APfywfR99338NvC1UjEkw12o3lytCDUpB7EyNEns3j5rUnjnDp/DZ/9OA812w3D+0MnY+9uvrkUw+4qos/JAbC3MwrCx30JwnxSYakJnJRgdEZsVAyWLt2CNu/8iDpvfoGp89bgdkCwaQON5l7y5s2Lli1b3mkd5EAzlm/A6RTxe1BQkJrKIekE8aXKlMEHAz9UI4GWLVfOlPrsNG3WTPY7EL369EGWrFlMqXdhGNvVq1fvE4MUsjwHtlZyVOq2bduqfpAajeb5YiOPIcXexcAEeIcn3iPwKPg4LcXJ2/GqJdAsGLneQczNzdBEXA5KUNubt3lcEhISkbdQMWR0tsLpC56wkXr0ytkTsPXIheZNGiDK38skFK1x6uhhZMxTAPlyZUdsiDfGjBqNGJccGPjREHR9szmO7voPC1ZugqOIN9qW2KggbNtzBPVatkOPzm1xatd6/L1MBJmNcWA7whY7ryuXYe2YHqWLFkFcTLSyQxznIjYmFvEJjGiicAS2b9+CbCUqolfXtxB88wJmzF2kWiVvXr2CGJv06P1uf7z/bi/YRftg1uwFiLNxRoMmzZA9Yzp4ZMmHjp06okq5krBK8nJOk/JoQZhGUaLJQjiZhZRKT4Ow3FZiPJzcxNjYp93z0BgJDY/Eu59NUULwp3F/4eYtP6kF5Yd1cbwrAE1O7VNj3oed3Djcr+z21MnLGPjxRFRr8xkmz/nXlFGjuRcOJNO1a1fV34J9ACkOzSKLGN+U26o+h2wp5N+XBYUe+weydZBCNWk5KVzZksl+j++9954a/VSj0dyFL0y2bNmi+gemFHwMKea+2hqOGr8Ho+H8EPx3KQZOUh1xQEDfiES0WhCKWrKu27IQ+IQlqnS2GG6+EovKs4JQc3YwRuzgIDWyP9nn47o9iWKvMmTJgeKF8uDYkaNIjI/D4UNHkbtgUVSsWA4ZXYFjpy+LXYjFwYMnULxUWWRK54xDu3bAK8Qa3bp1Q7GCeVGnQXPUrFAMu7bugZWdnbGPn7UjBgz5DG2aNUSzNp3RrF4FnDl2BP4hESIYrVQZaXeiY2NUv0M3V0cpDx24+7ux8GVak3ad8H6PrmjSqjUa16oE70vnESn5q9ZthR+++xK1q1VCtdr10bxODfjd8kJMog2q1qyHXBnd4OaREy1atEDFEgVl39opfN5oQZhGsXMQ/zqdLPLgc3GUxd5ZflCbtCemWF6WOyIgEDtn/Y5AvgUXo5lWsJKniCLWVn4Tfn7dmbd0C0rW/wC/z16jQkhUCChbApNUFimKqp3l4rPVMZ0LPK/cwuChk1Gnw+fYdeicKZNGcxdOH9G3b18MGDBAfbfsl0fo3FCAsX8eWwqvXLnywke8oxA9fPgwfHx87mkZJCwvy5MnTx4VjtW+fXtkzpzZtFaj0ZhhP7b//vtPTenFv0lb/Z8GWxsrnPSLx58n2JfYAO/AePy8L1qNPOpsa4V/zsbgiGesGBJg26U4LDsXo0YnjZP13++MQlRkoogqAybtjkRAlEG1Nj4ubImzdXBB2TKlcPXCWdwOuI2zFzxRtHhJeGTKgqL58+DkiWMIvO2Dy7cCUb5CBdl/PHyDAuFgZ8CMSaMw9NPP8MnQYTggwtHZLgHKsolNsbG2R7aM6REdFS1LDPLlK6gGiwmXzxyIRmWTxVr+40AxMTFxsGLhZVtlQi3Ow5BohZzZcyEhLhqRMSJi3VzFpnLuV1tEhQfh799/waBBg/DRRx/j3x2H4ezE1oBE1a+QraAJifGqT3UsO21qnjvafU2DUDxd2b8f63/8ERvGjsX60aOwffo0XNq5W/nFNpz89AlFIYWMnZPsm9u+BGzluAFel/DXx+/i6v7t6ntagNc7PjYWM95sikUf9VXTQlj4bK8VnG+oTZ+R6PXhz7jBFkFXtgbKzfqiLwiPx9gdVxfs3HkMDToOxw+TF5tWajR3oeDjQDNZs2ZVrYTJiULzQkHI0UApzp43FKEc2IZClIPNJBWDZphGQZg+fXqVR6N52fA54sBH58+fTxXLxYsXVes6R75nf+GtW7di/Pjx2LBhg3q2nhbaCncHKzjYiM1gC5mQ3tEKttZWSJR1GeUz2KolApDd3zzkOwfsZIBMevG1VLokODpaw14E5L2W59EkivtesnRpxIb64eiBo7jlH4bSZYqLHbCXv6Vx/dI5nDx5GBHWbihdtIDqe29tZQMbW2f0/ZAi7CN8KGLsy6++w4/ffYa4yIg7ZeCgMVZyHrQp8fGx8tcGdiy4KQP3lSNXDsSFBeD8levq2lIssgWRkRXsh2iGrZnKrsrC6yJ7V6GkqxbMxoJVm1CvaSu817cfGlYuLQKZsvSuneMUG1zkH/n2pFdI86ToGiSVwYfJPNhBsg+APBd8wLb8MgarfxyOfX/OwKHF87HqmyEY37oWJjSuIA+lZLv7PKrdqOfQgjvf5S9b40K8b2DRoH64fuiAEpzmdSlJ0jIoLNI4Upa9GB1rzj9jSrvDI8rCfd+TJUn+5I6dbHmeENqq2KgInN26Ad5nTsDAYUFNhX/kMeVz0jwpUaaXwe6DZ1GywQCs+meriDFR8wzjpBFPxol9MchxGc/j4qSG8P/fsClo2vVbhD7F5OGaVx8OMU/bmxxmQWjZWrh3717l9JpH90wJaPc5oTyF4O7du9XgMeZjc0kK6wgOL85+gxpNaoHhmRRbvH9T02IeIIrihH2HGWr9LIIwXgRdofQ2mPmGG6rls0P70o6Y3NRVqnUDIuKAt0s5YnhjV5TOZoOv67ngbVkfGUtRBMxp7YYGxe1Rr4A9/mrvBlcxPSrq0rTvxyEhPh45CxZD9nTWWLJkEeCeC8XzZ0OsFKxMufKwivLB34v/Rb5i5ZAzk9SDcoACIuJCAv1wOzgOxYoXR5HChZE7Zza4ODuK72IQf8YaMVGB2LXvkAhHB9giGtu374JLhuzwcHGWMnLCCuPcgMXKVkYODwf8OXs6PH2C1YjJDva2OHdsHzZs3yc26357qtwbsWWGuEicuXQVxcvXQ6f2b6B08UKIiIpUVbYZisdwEbtxUgrjKKhPcnU0T8NrPw8hK3RW7MlVuC8avo3hKHHff/+9mmg4KCAA7jnz4O35q+RhNb6dYTHFpOCv/l3gdXgfPt50EE7umREZ7I/1o7/G9jnT0WXcDNR8py/i6Kvw15VN2WpIochfm2dK28jpDPjd0QXwuXgRo6oURUdu+957SIhhy5dpe4tLo/r3yd9E46jtCgpItiwmSJrlXIkqr3ynRlJll3xMU6HgPA9Zx+m2+NfeEbh69DAmNa2KbtPmo2q3LneOTwPKst43gY0FFGa2sm9VOEFtY9qeSTx3XgPmM6ep6RzEqJt/elVefpc8PCdVdvnOc0s05b2DbMPjmbcP8b4FWwdHOKXLoK4pF3VMnq9p/0xjmXjtVZKpTOp34XdJF58QhntfkqnrFhXoj8W928hvKhWY7JCVG+chZF+ol82shRvw0bczEREsYsuRcbOmFakJXvywSJQqXxTzJ36M8qUKmFY8Gj0P4esB++nRcUzaTy85+PxxoYikKMuQIQPc3NzUXIIcwZTbP6jFjlUuFzpVrH/olLJvE8NDzaFsD2oRNMPtefwSJUoge/bsplSN5uXDlxqcJ5N9v1ILfMboV/HlCUPFa9WqBQ8PD9Pae3nUPIQ/7opA7Tz2qJrDFjGy2oH+gknJxIvjoSarl69McbQztgpaSw0fI/U6XQimsy8hB5mhvOKzzGknODH97muxOOab8NB5CC1xdXXGpBFfYO2uIyhZs418HoiQsAg4IQZDBn6A87eC0eHdIejbrh7ComKkPIkY/dWXOH4tEJWqVJbzscGli+eRu1xtDH2vCzat+BOTZy2Fq4c78uQtAOtIf5y84oNe/T9C8zoV1IAxZuzs7XBi31bMmDUfIZJcpFBh8V0icOnyddRv1xXdmpZFhzY98dGoCWhSrSQM4lStmzcFs9Yex6p/F2DxlJFYsH4/6jdsgKhgX5y/eBkGu0wYPXYEsmdww7JZE/HH6p0oXaE8cuUvgU5tm8vV4hXUJAfrjGedh9DmW8H0+Zlgx3uKGHaApyF40NvW1Ma5c+ewf/9+dTH5ZovG4GUvDE2ikQgOCoK9mxiwdl3EchgNjtFHMODkmqUIvXUDtfsOFiFiD9dMznBKnwVHF81FBnmQSzZpqgSPWYT5yz73/zUPl3ZuE/F3Hulz5IRzele13vvsRVzetQWeB3bJfrKIgLNG4DUvZC6Y3yjwqFbUcRNwau2/Ik4CkT53bpXO1sXgm7ekPCuQKW9BVRamU1Sd37oJwTe8kKlAPmOfQEk/uXqFyntl327YOblIOcSZ4X6kHMHijO3/cxYqdewOe5cM2PfnHFyU8opVRsZ8eY3l4GK8FHfgtpwz5+ym9Ti6fDG8jh6Bg6sL3LNm5aZG0SXHv3bwAA4t+hOX9+4WYRUt+8yvDDkNvUHO7eSq5XB090Ck/AY7f5uCMD8/OR9nnF67Cm5Zc8BR9sm8PD7P7/CSv0XgxcIjdw5c3r1TxGS85DOdjxyPx720ayeOr1om57FVRK8z3LPnMJ6CbE9B6SdiY/fs3+R67JLf8xayFC0mv5dUHxZ2j3njRQieXrlQdR7nTcD7g8LkZQ8gsXDVTvTsNxZxCawZqX5NK1IbfHCkArt9yx/L/tuH9q1qIAOnuHgMOOjIvn1842mFggULomjRoqY1mlcJ1lm3b99Wnx8lCLmeC59DijqKOW7rJzaDf3nPmO15aGio+ssWCTrLrCdv3rx5Z+F3ThvBFkKzEHzU8ZmXlX6BAgWUgNVoUgsUX9evX0eRIkVMKS8fvmjhy3b6phx8iS9uHgTz8XmleOTzbYmDrRV2esUhr7sNcrlZg9MGsmUvXqo/LqqVz+LRpUCkDxIni6r3jclKJFpuQxiReT0kAT4RBlTNZafWPQxVNnHgPNK7wc09M2rVqYscGd3U3II29o5wcXVClhz5UL9eHTjZ20AN/GJth/IVKsLd2Vb83RApVyIKFCuF+rVrwc3JUcqYCLdMudCmRSOE+IstdHBD27c6o07VMkiMu1ehcn/Zc+VH+XKlRWjawkbsZ7r0mdCsdXs0qVMF9qJ64xOtUKpsWaSXshgnuDfANX1mlC5VHHnF/0rvbA8fXz9kzJ4Pb7ZrAQcnNxQvVlhdoJz586v9RkZGoUiJssibKytP2nhwzX2wzmBdw+4Djo6OptQn47VvITxy5Ij6W6FCBfX3ZcOfo2nTprgl4sBOxEq6nHkf0ELYGdcP78eXhy6J+LGFrfz+e+YswZx3OqLj2F9Qp29/xMUY97n2xy+xY/rPcBAD5+KRWcTeZXnOXdH2+0mo0787/vl8JHb9No5HF5HiKALLRvJlwCc7TtxpmaMoSTTEY1rbegjzuYGB/+5GOhGVdqIB/vliKNZPG4d3ps5D5S49VKtZqO9N/FSnDApWq4MPVi6H97lbmNu7A64fO4Ds8nBHh4bA7+oVNP34S7QeMVK1Il49fBi/dmiAEo1aioDaLGLMCZFBfogXY161R190/WW6fFendAeWKy46EosG98Hp9ctk3+UQHR6GmxfOYfQFfxG4GVV55r3bUcToEmQtWEy0tTX8Lp5FoboN8MGKTaolMk6OMapKQRGvRRB83RMB16/BPVs2vDFiEma99zZaffQ53vhhFKLDxHGUW/vqwUP4qWlltB3+g5R/OD7OmB7F6jZCtxmLxeiKoBNDu/TTftj3x0x45Mwp4tAevlc90XTQMLQdOVr9NutG/Q9bJv6IjPkLws7ZBbdOHUO+ClXRc85yuGXLbmxZ5TmKv5caWwjHzVyJod/MlPOVm5IhomkBmruoGKTPlB5r//wW1cs/WtzpFsLXB/Y38vT0VK18T4K5GrX8mzTNLPIs/5o/E8vPD4P7oyAsV64cMmXKZErVaFIHfOnBF2itWrUypaQtKAYf2UKY19RCmIINVk/TQkhbYCe2yk7EWEJ8nBrkhXaEFsfB3kGFWjI8Nl7shUqXFXyBpOybIVH8J3GgJLcxTyJsbWxhJ3U5wzW5RjZSvgzXG63Y/dja2RkbgGQbHiNRHC4OAsP8FCbxsTGIizce39aWeW1EoEfJsc3lYKiqlZQ/UZU3RvJTPNIP5TmwfOZ9ah5MSrQQqt/8dYY3KVs1Uwt88PjAGt/6PthBYEfbWHmoDvw9FwcWLMXq737Cmu8/R/7ylVDbJAbtnYCjKxdj16yJKFynEb45fh1f7DuDjzcfhZ2jK/795hP4nvdFs8+Go+/CtSJAEtBYBNqwPRfRb/lOFSapnmopBg2JnaMtyrXpiCCva6q/HFu4YiMNuHpgL5wlz+U9W5T4shNxennfXiVeSrdspxo3V//wJa4d2ocPV+7A0B1H8L9jl1GpQxdsnT4OV3bvVyKL2Dk44sS/S1C370cYfvgShu0+j7yVamDb7F9x+8JNY1inhWViS5zPudM4t3kNWn89TvIfwKc7jqPfX2tEhDkpwbj/rzk4tnIJ2o6YgM/3n8UX+0+j1YhxOLN1M/bNn6vKy/vA0c0Nnvu2I0uR4vjhfAD6Ld2Gkk2aI2eBwjizaa06V+6Pxz+5dhmc7KxQqlkbJSjtRLzacuhX2Y+DM3Bs+SLsFjFY971B+HzPGXx1+AreEqEeGRKsxPvJtauwc8ZEVOncG18duSBlPor3l2zA5UP7sWXqaBVCm5r5fdEmfD5qXtoSg0R+H45EGuwfgo79RuP8lRumFRoNkD9/fuWk0BE0C7mHwTxcaD+4sFLmQvtNJ4kLRzjkYv5utu/m1sAngcdi2SgEtRjUaF4s5qfVXvwAJ1vxGaTqS4mFU1Vwf2yBfLTVuQvtR7z4r4xSiI2Lv2NP+G+sCKuo6GgkiL24ky5/KK4oyKJjZL0KWY8CR/RkjoSEeGNrqixcrz7Lfh5WpjjxWaNlP8zL/UVHS37aTlmYTqFpPn68iFZjWLxRaPI4bJHliKZxcbIf+cxNmZ/rVTkljxaDL4bXXhCmVVTn3/BQrBz+Mf4e2B3/jfkfQryvK2fB99x5Fa7IFvrTa5fDwckFb4oYsXd1QkKcFQpUL4m6/T9BeIAfzm/ZKEJIjJEHW9ISYefE0FMnOKd3Vw+mJQxjLNagOeIk/cpe40igQTevwv/qRbjnyAmvI4cQdttbTYFxdsNq1cpYoHod3L58Gxd3bkDZNzqgQouayvBQhDX74kfY2Tvg8r6dsDEJwpjwMFW2ZsO/EKNgi6xFcqHmO4M4SBeOrVho7JNnzKrgZ54zB9oJ9rmp0hxc7OVYLeSvM6LDY0UM/o18Zcuj7gcfGUM5ZanZ+0PkLlUW57eulxPjVkbDmqtMRXT/bSHcsmRAtmJFkS67GwrXawjfi2dx6+QRNRJr2G1/nN20Rs6tHjIXKmbsT2kulPxli96hpfOQzsMdjYd+BSf3dOA8rfX69Uf7MdPEKIogXLNUrnN6tBYhz/zcrnz7xihYow489+8ytg5anmgq4uS5a+j7uZwH+xNYjCaWZmDl5GSPG57eaNzlG1OiRmMMG33cUDezGDQvT8OT7IPraesY7paawvE0mteFRHEWKNp+3huFD/8Lx5ANKbN8LMsg2d/4/VHGCeyfzpw8MbQpZrFmyb1pD3dEkm6f3P40aQMtCNMoFEAuGbPgiwNnMfJiML457YsOY2cg8PpVTG1dG5HBwYiPSsCNE4eRvURpuOfMJ98pnoDYCCBz4aKwEkUXHuCvnnfuj1aIb2X4kS19SaFIyVK4MLIXKoILOzerVshLu3fCzs4eLb8aC98Lp+F95pQyH6fW/oPcFaoia6F88D1/CQmxcfC7fB7jW7+J3zq2wi9t3sCyYf3UCJ0M0WT8PIkTkZGnXCU1qA3DVeOipaxyPHsHOwTduG6cq8fC3lBo5SpdHsUatsSGyWPwY+Vy2PHrLyLaQmDnDIT7+yLk1k2EBwVgVqe2+LVDa0xv3xrz33kTITe8EO7no/ZBIxYfE4MC1WrBJYO7lItlkSUSqNC+uwhJWxxYOA/ObpBregS3Tp9AlU69YetoK0bVVBiBoQ9RIfHqXLMXK42M+TKrffF6xobzODZqsB9/zysqlOKvD3vi1/Zv4Le3Wsnv9iaCrl5CVHAQokLDJa9pp6kIr5v+6PD+KCRGyEk877kFnycst4sTrp+5gk4f/mRK1GiAHDlyIHfu3Cpy5EEizSzgOJAMw3PMYs2czsWMZZrlwrBP/uX23I95+wfBdbRT7MPq7CzGTaPRvDBYZUTEAu+Ud8TPjV3wcRUnfFLNOcUW7m9iEzf0KOOYoqGoD0OLN40lWhCmWYwx3g6uHrB1coCzOBW13u2NWn0GIdjPD77nzsKGHYmVsrs/DIGDxdAU3GcPGAL4AOirMKS7ZNO28L9ySQTVdZzftg6Z8hVEieYtYeeSDpd3bcLNcyLCwsNRvEELJcriY6KRGBeLjHkKinBrgSL1mqJw3cYo1qgl2vwwBRXffgcxFqM/JyQJ4aVI5QlQbCV3HhzIptPkuejx619wSJce/373GSY3r4ownyC1DfsHpsuaA0UbNEGR+k3l+E1QuE5jNB02Ag0/+tq4HzV6DgVm/D1imKIwb8UqyF2+Ko4t/5vdKeWc18NWrm3R+k1Uq2lSH87KeGXVPu8rryxcGxcTBQcXNxSu1UhdDy4Fa9RFg0HD0fLrn2Hn5KrOLbXx8YhZuHjKE3BO5TGtj4tHOixavBm//rnelKDRQA0exNE7ORJociLNLOTKly+PihUrIlu2bMq5YjqFHhduy8X8nQtFH/MxXJT9aziHILfnQBcUeQ8ShEzntsWLF1fzJmo0mhcPo65s5fnN4mKNrK4pv2R2sYKdjXFkUo3mRaMFYRrGIP+xZY8CxtjKJX56hkxKtFBUsa+ae7acCLp5HXGRoTBPC8Owy6igACUWndw97ggPChlupySh+ude6KvwWIVq1ZPjxeLCju24cfwwcpWrjCx53ZGzbEV4HTuEE6uWwVVEWoGqtRArgoojmlrb2sE1YyY0/6gP6g0YaFo+RL0P+iNPxQqqRZBY21gjLipK9Snk+XDKh1BfH8THxsElQ2ZVhvuQNOf0LqjSqQv6/bMRLb4aDe8L53FsxSK4Zc6qjmtrZ4+6/Qeg/odyTNOx6w/8UERiA9USmRw8Pq+NUzpbFK7dCEH+/ji/+RA89+2Uc6sD95xZ7xGPCimLnSMH5cmsyh0dnKjCVHk5beT3sJPzYd9LdxGodAxr9ekn5fjg7jX5YAAqtG9//35TAX8t345lK3cALnIivDivAuKYsw/kdxP+xgXPW6ZEzesOBVvJkiXV0PQUckmFGr+b+wUSCrXKlSurIe3ZgsfRP/PmzasWdvKnwCxWrJjaZ9myZZUArFKlCgoVKqS2py3g/pKDQpAL96WnmNBoXh6s9ijWOKff81q4/1eletWkLbQgTIvQN1FGwwbO7ungmkl89AzAtcMnsXf+L3C0t4VH7jxqBNCC1evC7/JF7Jg+Ae4ZgXTiT0QGx2PrtDEidNxRvFFTFZaZKIqSAtP71DG1LwcX46EsoZGKF+GWp3wVZMxXCOvH/A9hvrdkHy2VCC3eoBmuiyDc/ssY5K9SA5kKFkIcw1PF6fHIlQ+Hlv6JmxcD4JjOOOANB04JvOqNmIiYOwbQyT09VnwzBJd2H4JHNilXLLBv/q+gXqz4VjfjXIcWvhnFlve5M/D39OIIyciYzU5EXgslwCKDguX62CFPhSo4v2cHTvy7Gs6uxmPz/EK8AxARGKYGinkQPFa8XJ+yb7wFZxdnLBrSV02lUfntHqrMSQWqchSdgfzVauKm5xUclnN2levpIdf9yp5dWDPya9UPMW+larh95TI2TxoDVykLy8S+nBGB4Qj1CXhomV4WPT+aYOwzaI7vfVUQQejj5YOh3882JWg0RlHI1rvMmTPfCR81C0Ou41QTnET+/PnzuHDhghph29XVVYk2irfChQsrwUcxyO9sRWSrIsUfpzi6evUqDh06pLY/c+aMGt2Q68zwWGYxyj6D3J9Go3m+8Hnjc/ighVNV8fl/fkvyx9WLXh61PCuv/bQTnD+RI3umhgm+CUdcatu2rZp2wlp+mnRJJqY3ttwl4s8BXXFy5WIRW0XV8LyJ4rCE+NxULXFtf5wigqUrGGnJAVD+6tcJF3ZsRt5yFeCSMTNunT6OuJhoNe1E1W49ECcii9NAzHvnTVzZvRXZS5SErSiUwf/tUyNoJoUtj/8M+wg7fpuEjLlzYei2U3DL7I5Lew9gdteWqiWt46jJqP/BQBF74m+L2Lm8Zx/m9GiNBDlu/up1JH82eB07iCCvKxiwfIekVRAReBDT3qiNvBWr4ebxQ8hWvCTC/PxFuN1Ahbad0XPeXDXtBO9Y871vL+Jr67Qp+Pfrj1CodkO458yN85vWqTDVT7aeQIZ8uZTImtKiKgI8LyFn2QrIXqwMvM+fVKOj9vxtIcp3fBsxodEYUS43yrbugDfH/Wqc1N6MHIsD6Exr3xgXt29CzuKl8P7SjXDNmk31q2Rr5hf5PVC8XmN0mbEQNrbWUmYfzOjQEH6eF5CtqFxPB0cRywdRoX1X9JwzH2H+0Vg0uCeOrliM/BUqybmWQdAtL3ju26VGJm39wxjV11MdXjTYy552Ysh3v2PC5IWAm6jXFDA8qQ71sERh+/oJqFOlpCnRiJ524vWGVSSH86bos6x8mc7n0IzZkSR07CzzWeblZ2K5npi3Ieb8rEfZ6si5pTSatMCrMO0Ep5/hCxzL51ujSc2w/vD29lYvD5922onXfmJ6Hx8f9Rb2ZU/wbYZlWbhwoZqomK6BQzp3lGrXWTyEu064tY2VCBRRZSIM0+fIJeIqC9LnzIVybTqh6bDvUbpZY8RGyyYiVpzdnVGsUSs4pnNDTLgoDHE0cpQojVbfjkfJ5q2Mgk9snoOLI3KXrYzI4EDYOTgjW7GSKNm0uQpFTQongndwTifiLgrFG7ZA0bqNwfnSXTwyihCLgoscq/6gL4z94BJk97KPTAVzoUj9ViJywmWJQHREGDLlyY/a/T5BoZoNpFzWImoTEOx9HW+O/VXOKzdCfL2RLmt2VOncC00+G4HEBFsVwmnymRQMreRIn/bOziKybiM6OAg5y5RHu5GTkbN0McSKfnJws0epZh1ELNsgJjISUXKODCWt3KkXyrXtIudjr1q9gm96IXeZishZqgIv0z0wdNU1YzbERYejVPM2qg+keZ5A48T/nnL9KiJPhWpSJiu57q4o0eQNuR7GJk17F1dU6dIHDQcPl+M5qSk8itVvAbdMmUSw+iMqNBQOTs4oL8K3Uud34eDqfjeU1xovdWL6MxevY+DXvyE6QQqkpkN5BeFNFR8P78BQvP1GLbkd7raC6onpX2/4u5sHfuHEv3yBaE63XCxFoBmz2COW+SzzmhczdEK5HfsKMsSUE2RrNGkFTkzPFyhpeSTc8PBw41QO8qzrRS9pYWFjEusRvsh4Wv2lWwjTWguhCba6MezR8tczj8p5T+uWoAScq2lz8ekZZsmRLpnXEvZts7fYZ1Sw8W9SuF4d35kCFogOMabTp2E4KKe8iJRtWR4LP+fu/qUM3AfLwRBUijamcTsn2T6arYqSV03HIPm4ji2NFJfGFtJ7oWBiuCUDoJmH58t98vzU8Xks2TevAVF55DvFLlvhKJy5LY9Nkcdj3QfPWc6X50wRzQnqLXFOb9xfTLgpQeD5mM+X5baSffDc1PH4XY7JMvGvKpNcD/7lADtqDkjTub7sFsIhI2ZjwtRFcpLyo1v+oK8afBscHYt1i35As3oVTYm6hVBzFw4Sw1BPvoll1WlenhZuaxaD/MsXgpxWgn0Qs2bNqtI1mrREWm8h1GheV8QV1aRFKHjC/IBw/7tLlAgz8+AslrAVjQKNwo1CJiJQthdBmBSOqMl1FIIMzXwQ9F8oKMMD7hWN9It4HJYrqRgkd/bPcoTKZ9leCSjZjnm5DffJPntRsp77Zl5+Nouq5OA6HjdKyqz2K8e4IwaJ/KXQ4zlxn+oayHF4PczijEJZXSMLQXcPkkddc15nOUZSInjsJCKRwpHHZJl4rEjL4wkstzo/U5kipdzMYykGXzZet/ywdM1uY8xs0h/0VYOtgiIKp+sRRzUPgG9e2S+QrcS3b99WrSHmSeaTw1I0moWj+S+xbC1kqwSFIAeb0WJQo9FoNC8SLQjTKPTNk1seJCTUOvohJvGlvifhTropz8Mw502a70Hp5E76A8ph/n4n3SLfo0iaP7ltks1jzmf6ntx2Zszrk8uTXPqdNB7T9D3p73NnG+Yx50+S52WyauMBXL91G7BLiVBROUk2KceJKjY7xfwea/H9ZePkgPXbDqswWY3mQbCV8Pjx4zhy5AhOnz6NoCDjGzQKRi5mkWj+a/nZPDopF3axYLcF7mv//v1qoBrm02g0Go3mRaJDRtNoyKjm9eFlhoxWaT0EBw+eAxwZw/ssSpVi0IAsmTyQzg64dDNACV97B1cUzpkO5718EG/RT/bOsczm6Z7v/JzkYXimslnA/YdE4KuveuP7T7qoJB0yqrGEz97IkSOVrabA43cuFHrs78fFxcVFzStoFoesZhkOyrqGrYrsI87+iKwvuS33w/UZMmRA//791fYaTVokrYeM8tnkSx5zKLdGk1bgC8YKFSqouudp0IJQC8IXg5T9iYufxO9/Xe3zyxKEvn7ByFa2m3EgGdtnDCagmYmJRcO32mLT5K6oVr8f9u/2wuzVM9E0fzSKNfwMYQns2JlgzM9jslWS28UlinKUz4StiZz6gphbGsWZhr1tyt0gUs48eXPg2t6Z6qsWhBpLNm/ejPXr198j2szVKJ9LyyqV94z5u+VnQhFodjrN69hHsXr16rr/lSbNktYFIaeEuXbtmhqwjc+zRpMW4ItHLy8vNe/t045KrUNGNc8d5QOJ32MjPjvnHnR0fczFWfLLorqvUQ/f9aU0L4Bt+04BoRHPLgYJHV8RbZuXrIVnqCP6v1ULLkULo3eTIhg9bj7CAuOQIWtmvP12Y3zwTkuUyO0uKjgWbh7p0apOCdjzx49NQKuW1ZElvQPSZfBAo9ol0aRZTXRvL6I4ih0vUwg7O3idvwr/wGQ6iz4Ehv3RkdC8utBZ3L17NxwdOcrzXSjouLBStlzMoaJJP7Pl0CwILUUh1zF0lC9WNRrNi8fymUwJHGxkn6bPGs3zgi8Un/Xe1YJQ89wwCziKOo4CGhUSgLPbd2Dvgr+xY+4cWeY+cNnJ5Y/5OLVpMwJveN0RkrSsWhi+GNZsPSS1majxlILDv0aHYfi4xWjV9g3MGz8QfhePYtqKk7DKnRtbV0/AhKFvomeXlji9dRrql8yCTFnzYdmvg5DfTX748DisnDkc1YtnRs5cBbBx8VisnDEEI/q3glV0MqMkPS3Wcqy4eKzbdsSU8Gj27NmDL774Ajdv3jSlaF5FNmzYcGcgGTOsiC2Xx+FBeSkSGSWyadMmU4pGo0lr8Mm2kWoknYMVdl+PU+9UbbXvoknlaEGoeT6I4WOLIKdV8DxwEHMH9MfIBpUw5c1GmN2vC/4Y1EeW3g9c5nP5sCemvt0UY5pVw8T2LUUcblWthXYORoP75DGomsclJjYOR49fkh/Q3pSSQrg6Y9nS9TgdDHRoXBaffjsLidEGdO/SAkUcQtGgzVBUqfoejvnZ4ON3GyIyKhaR0QmI548ttWmk7CI2wcDuiEIi3u72OYq/8T0M7px3JKWQnTs4YNehM+rbo964LV68GKNGjVLhRfb2KXy9NKmG69evq75FbN1jfz+Gd7LPhuXCdHPYaHIL1yfdhvux3I6tj4cPH1ZzuWk0mrSFPMJwUJ61AZ9uDEeLP0MwYgdb/A0pMzabRvOc0IJQk/KIQbR1FEda7q5/R4/C2JY1sGv+rwi8flUcnycL7TOIoxTq640zW9ZiUvsGmPluZ0SGhKlw0uTGFtGkDAFBYfC8cTtlwkUtsbFBzK1bWLj2CGL9PTF/80UVSlo4Vw6cPHYc53xEKUaE4OiVa/DIlkF+3kTlLCfEJ7LHNEw9DI0tKeG+OHH+OqJFNMImJcspN5ac93nTSKMPE4Rjx47FnDlz1GcKBc2ry9q1a1XrIH9nDhzDqSEKFy6sOvHXrFkT9evXR8OGDdG4cWM0bdpULc2aNVMLPzO9UaNGqFevHmrUqIHy5curKSyyZMkCV1eGPxj7kFMkMmR048aNKk2j0aQdnOylqpKKqt/acEzZw1eYwIRdkXh3dQRc7a3udIfXaFIbWhBqUhyGiAbcuIHRTapi1cgvkcjBP1KIw8sX4rNimeF14pSaHF8H5z8frl73RYRvIJWXKSWF4O8lYis6LAJR0TFqIn7O2O/l44+y5cuhSBZ3wCMLqhTND19PbzWZf4acWZE1kxvsS5aCrEWimpTSKMDsKMJSVAyasLXBhSu3EB0TJ5fg7k1mFoecKmDo0KFqcBEOoGUOIdSi8NWBLyKio6PVaKBsHSxWrBh69eqF7t274+2330a7du3QoEEDVK5cGSVKlEDBggWRJ08e5MyZE9myZVMLRSMXfs6RIwdy586tRGDJkiXVfIMUkO3bt0fnzp3Vfrt164YWLVqgVq1aShxeuHDBVBqNRpNa4Xtp1gzOYv6vBSeiyu9BWHI0GrCzghVjReXvsqNRqDwzCNdDE+Aq358ZNkUaP5iWFwPrQFUn3jm+5lVBC0JNimJjB0SFRWN8q7q4duSAKTVliY+NwYQ29XFh1y7YUxRqUpyL17yNBj8F6q37oKiSfcex1Y+C084Gfy9ag5vxGbBhySgc2PkLPGK9MXLWVvh6eeHibWDJn6Nx9O+hiIuL5Q44PLI4zKImVfmeQyGljKFR0bgdEHpHELIiZEjoxYsX8cMPP+DkyZOqpcgsEvmXwoEDy3Bk0pexsHVJ83QwXJMjTnPgGI7yzN+RC/uFsmWQQo+/v1koshUvKipKfeZ25tDPRy3Mx/zcjttzP/xMGC5K4Vi2bFnVmsgyeXp6qvJwrkPm0yMfajSpB8oiOtIc6HrrtVi0XxgCTz+pmxzuHTAKTlY4fiMerRaE4IB3HFw4k5Na+xSwbpa6ky8gbW3tTYtxblN1LK5PQdTLVxsbte/o6EiEhIbDii9BU/g4mpeLnnZCTzuRMtA+iRg0JBgwu19nHF6xyLTi+ZGlYDF8smob0mXNKiKRRte04hXjQdNOzJw5U7VOPA9GTl2Cr76aAXikZN88IjeKCMEcObOjXF4PrN1zytjZNCYO2fPkQtNaxZHezoCVWw7C80YomwNRqERhNK2aHxfOX0UMnHFeBFlIvD2aVMqDjXvPIiqON18K//gJibCxs8X+FT8ha3pbjB4zVokBDul86NAhNbQ6v5srfJpRLncq5BcMj00xSNvRu3fvl1KG1AjFF3+Th8FnKTw8XM0/RoHG62i+fpbXkZ/N1WVKX1/Lajjpvi0FIFuied9xnilOe0EByfDpB8H65PLly0rU8hy5DYVt0aJFH3ldNJqnIa1POxESEqJeBPE5edTLFz62DFDxcLTC36eiMWh9BALDZRt5tJKzEeo5jwdcnKyx+E031Mtrhyj5zj7xT2RRZN+JcTG4cfMW4o0d6tW+E2XJmTs3XBwdxGeUcqSAnbJCAo4d2o9IpEOjelWxZPYvOHA5BKN/HI7oUKmjU9gWap4O1gPsd04fxd2dsVRPjhaEWhCmGA4uwMofRmD12G9MKc+fgtXq4Ns92xFyW77Qdr+Ctik5QcjH9scff1RhZ7xnUpL06ZwxeMQ8zPp9DZDuOU2QzTBiEV1qFFNWKDRD7HgRa2rhYjrnG+TvKWJRrVPzD0o+O1nHv7F8CyufU1oMElamUtFuWvQjiudzx4+jxignnK1HbIlzc3O7zxHnb8IWHIqQlBYMj4LCgMdlSOK4ceNU+V5H+Czs3btX9b/j70SRx7ooe/bs6uUJ55DMlCmTysvfyjxBPOsA/mbm3+1F/36Pg7mq5l8uLCMnw3dyclLzTvGvudwUtf/88w/++usv5SSwXmbrJAUl87HvY5s2bdCpUye1D40mpXhdBCEfR7YKshaYciAKX60NV62CYDX1KNiLRjb8pr4LhlZ3UtUh32s+rtWxtbPH5WM7MGLsJNi7ZoSNPPcGQyIM4iz0GTgE1UsXRpy5LrXAbDfuwJPgtvKfWD9T4l2sOBBEXBi+/vJTBDkUxOwp32PmqK+w+WQA/v57OiICg9T2mpePFoQpgBaEz44yjE7AlUOH8UuXVgjz8zGteTEMXLIRpRo3ErFkSnjFSCoIreTBZ0XVo0cP1W+J929K4u7mhNG/b8GWbWcBl7TxHKc4iXJTc+qJv0agbNEsGPnjaOVMc3AQCg32HWQLi7nvoNlJZ98wDw+PR75ZTilYufO4HJWStjdv3rwYM2bMaykId+zYoVrNT506pc6fzwbFH4UfQ3mvXr2qQnx79uypfkc+N2YhSO5xlNIA5qrb/JcvBXi+DC0dPXo0du7cqe5POghceE14j1y5ckUt3I6hqb/88str+wJBk/K8LoKQ00qExRgwZGM4lh2LoTf9ZC8n2bJnsMKbFezxW0s3JIogY7XzONjaO+DK4W3430/TMfS7n1E4myviE4yjFDs4OcPB3k71r+d3a7Fr8QkJsBZbkGh6KcTWQ1kjNi8RcWqMB3aHML5oNb44spM8CVIFxovQsEJwYABiDTbInzc7Zv40EttOB+CPP6ZqQZiK0IIwBdCCMGVwTg/82r0nDiydb0p5ceQqVR6fbzoodokG79WzTw9qIfz999/VCIfPg95DJ2Pu7H9FHRpHP3ztYM0cG4d///wOFYtnU4KQgoEDfjRv3hx///035s6dq1pXuNBx4MLpJ0qVKmXayYujX79+SvBQBFEMvG4OPgX6Rx99hMyZM6sXJRR9DK20hCLo+++/V0KpevXq+Oabb9RvSgcoLWOuwvmCgmGh//vf/1SYaJEiRfD111+jXLly6jwt4eT606ZNw4EDB9Ropxwp1zzSqUbzLLwugtDRFph/PEaerUS42lsjllktfDSGkvKpY3ALp5vgI8jPZvidk9bfCktEOkdrdC7hYNzHY2AWhF+JIBwxfiZK5kmvxFui1Fu0B3FRQfj1t7/QoHkzHN+5Aac9vVG8XBV07dgW+zetxIadB2HtkA7de/dBvuwZYCWO055tG7DrwFGEhEXCPVN2tGnfAUVFACbER2P9P/8gxjUHenRugek/fqcFYSokJQSh3LIazbPBvoO+l26JGPzDlPJiuXHqKI6tWQGH12iAGWX0n+MAIrZs+XoSO0+n1HJ5GaTo8WUf1lbG62CxP4ZlEo4KySkn+LbVPCAIfxPz5xeJWYy+rqxevRoffPCBCp9esWIF3nvvPWzevBnffvst3n//fXzyySfqhSVDJSl82IJ68OBBTJw4Uf2eSUN/0xoUezwH2gO2kJ4/f16NWLp8+XLl1DKN1+Gtt95S14YvbEuXLo0FCxZg8ODB6lp8/vnnpr1pNJrHwdHGCisvxOCP47GomsMO71Z0RNfSjuhSygE9yjiiaQF7hEQnwjciEYFRiSiX1Ra9yprWy993yjmiSAZb/CmicuPlWKlrnlBYWVmrVkqfWzdVH2GKgcBg9umzRmJcFI7s34Xv/jcc527Holj+bFj3zwJ89GF/zFi0EUWLl0TQtRMYOWo8giMSEHLrNH6avgAZcxZE/Xp14XPxMH788ScERsSpch0/ehBHT56VXds+kVugSVtoQah5ZuhPnd68Xj6lhCP+dBxe/rfqkqZfVqUM7Ef42PErlgJMCTLT30eh8pqWZ8W0D44+qsqdEvsUsefs5PDAu5rhdhQXfCP3MoSgGXML0euIt7e3CnnMnz8/pk+fjsDAQHz66aeYMGGCav2ik3Tu3DksWrQIAwYMUOKxQ4cOquVs06ZNqq/hq9CHjq2DDJXdtWuXmhKDU6Js2bJFtRxTGPI68B7l9fr333+VQNywYQMGDhyorgdbDHk9NBrN40FXw9nWGvtEzFWcGYwFx6MRm2BAdDwQLX//vRCLsFhj38DbEQZsuxYn6wyIkfXhMYkYsSMSzRaE4uTVOLg7PrnjQl/HziYRf82egu9/GInvR4zA/GUbVD9C9v2zlpqrWqM2+P7rL/Duu31Rs3QB+Ida4/uRI9G7d0/0facHAr294O3vD7dsxTD79xkY8G4PtG3/Jnp1eQuJESHwC+Io29awV5EwehCqVx0tCDXPBI1SfGwijq9faUp5OXgdP4SgGz7GkU5fX/84xcicMZ1cyCeopESN12tYGz/1bwYHq8doreKPxL4LkWYh9Yw/WmIi0qXPgMnDu6FQevvHF7MPQja3s+cE5C4PbX3j3HRfffWVChPlACWvszh7GaxatQpeXl4YNGiQclw4oA67LnAAIIaMmhe2DrIFjeJx+/bt6NKli/rt1q1bp8Is03orIWEfSvYjpBikCB4/frzqgsDuG7wGFI3mQWg4kA4FNLtMMHSWaRyERqPRPD7qBbT4HBHRieixPAzfbTdORM/WwygRf9dCE2AvpsUvMhFZXKzhbG+FGBGL/deG45uNEQiKZDyp2uSJUVVogjXe7PYOBov9G/zRR2jXtBas1OS+si4uAWUqVISjdQISxTHKmC0TMuUrgsK5MyMqMgaZMmWDnSEKYVExcE3ngYTQ2/hz3hyMH/czNuw8BCvVH1LXZ68TWhBqngn2bwsP8IbXsUOmlJdDwPVr8Dp1TBweU4LmmSiYL4eIKqlYHlfgxCeiVLnS6NWmGqykspFaRtJYMcn23EdMrKRJZRkhApBNudGxKFa+DH79qqOIQknna9Q7yGeGw4ab8ptb/CggmRYu+zZ3xmA6R1MLiYCNrRPe7d4SeTzkJmCHfabzmCzPk4ZUyn5dnByQPTMHiJF9PQSG5VGING7c+E5Iqeb5ExAQoFr+2G/yjTfeUKGQ7CdIccMwSst+c/xMMcS/v/32m+o3yLBftpxRFHFdWhXzFLNsGT1+/Li6Dhw4h2KPLzIoBC2vA+F3prPv/E8//aTys5Vw//798ijK86LRaB4fPl+2VkiQ6mb1hRgsPB2NS4HxqJXbDu4iAJ2lOiqcwQZ189jhr5PRWHMpBgdvSmbxvq1UmOi9z+djY0hUVWmevIVQtHhRlCheAnlzZpUVHDCGWMGQEC95jP0KDSLwDLIuzlQvGySdETW2YvuuHt+D9z8YhFNXbiJ7rjzIkSWzamHUvF5oQah5JqxFEPpfvY4QX29Tysvj1unjsNZRDSlCwTzZjFM6PHadwEm9YxApoq1e3Uro1asJMjvJzcGpIUT8FShaEF27N0fnN2vCySoB1i7ihLaqi/f7tkGnVlWRNaODEpXqgFGxyJotK97u3BRvta4K7oZTT7h4eKBHj5bo0rEO8mZ1UfkYf5OvYB5079MC1UpkR6gIxljuRwRlttw50bN3K7RtVgEu1rJf1p6PizjTmT3SIYOH60NbCC358ssvn9sgP5p7ofBbtmwZ/Pz8UKtWLZXGsEe2kCUVQJZQ+HHqELYM1q5dWw2+QyGVVgZBSw4KQg7kwRbQGjVq4PTp02pQskeFwnI9+x6xhbVhw4YqpJSfNRrNEyLCysHBCh9UdsJPu6NQeWYQTvrFY1BVZ1TKZocG+eww5UA0eiwNw/+2ROGnxq5SH3GzZxNdNHWcLkJNGSFfVKioZbSD5e6TO5ZsYyMFOXB4LxwzFMIXXwxH9y6dUK5kYeOAqcls8mwl1qRmtCDUPBO0PYE3xYl4RsOWEvhcOs/+1MpIap6NHFkzIENmjydqWYsX0ZanTGX8NW0wpo/5BEf++QrUeYUqlcfJTRMxeshbmD31K2ydNRDVKxRF9zbVILUQJn3fFy0r5hbxGK9a/mzSZcLedVMw89se+HPWtxjZtTqy5c2NPWsnYeoXHTFx1GCc3zAOWV0MyFG4BI6sm4rp/+uNpTM/RZbM7oiMjEbWooVxcM14fNm7OWZMGoZVY3qKMI15/PtURGWBPFlhZ2MNTvb7OLAiTsvCIq1w7Ngx1ZrFEF22cnGqDX7m6ICPE/pJJ+zixYtqRFKOxnb79u3H2u5RqLfwT7E8KxTAFHPcF/tScoREhoo+TBgTruegSGfPnlWt3LwGDJ/VaDRPgjzDMQb0reiIU/4JuCpCMDIW6CPi7+e9kcjmZo1vt0di9BZ5tsTMeAcnYItnLLpLfsTz+X86G8DnnZPTr1m1GH/88Sf+/PNPzP9rATy9A+S5thIbEIsEg7n+NiAhPk7s5d0IlsTEBMSqPFbIlikLgvyvYvXaNdi4djmmzv4DYdHm6awMiI2LV6OYkoS4e/ejeXV49lpQ83ojPkfQ9dTxVjnE+yYStZ1KETKmd0Oxonmlwnr8C2pjZ4sob0/UaNAXToW7IlfpiujYqBy+H/YeDi1bhNwlO8GpTD9UadwUBeGH3p/PQeRtT+Sr3Buz150DnOyUIPxgYB9ki/dB9qJvwSF/B0zdcAaDP+yJMk6BSJe5ObJUeh/nEjPi4/bVMKj/m3D0PwXXjI1Ro/dk+f3jRfclYNjQ95E91gsN3vocg0b9gwYdO6BYxifoWyhCo3yZgupjSjjtmmeH4bicMoJzLlK8sE+cmScN1VXOVGKiEkUpNe0EW9z4QuBxF4ZtmuexfFZ4Pcyi9klGnDXn5XXgokOeNZonJA4omM0G1XLaYdahKDU5vZWtOEZS3UzZGYkikwOx7pyIK0dJZ4ioVHO/7IlC08L2KJ5NvjzFI8f5BNNlzo5aNasjIuCWesHFqWauyBIYGgE7e1dUr1kNmdK5in3jdBRWyJ2vCMoUy6e2ZTcIO9d0qFy1Clwc7FGreXv07tAUB7dtwOKVm9G2Yy/Uq1MDDvbWYiutUaxkKRQtlE+qxTjkK1wU5cqVUhEJmlcLLQg1z4bYt+jwENOXl0tsRIQYP/nw8BfjmsfAxsYaVSoUUeGej4u1bON98xau+EmlGBQIf6nocmVKj6xZ02Hr1jNSUToBvj444xONTBmc5Rh2sLWxFSHpIJWkybmXfeTJnQEXTl9ERKyYp5goXLlwG9lzZcThnadkH+lUn8Ojp24hU5Z0yJnTA+eOX5TtHOF55hICgsKl4nVArmzpEG+fAb9P/QwftiuP00ePI/Lx/WS5meJQt1pp9VHrwZcP+7ZRDHp6eqo+goR/KaqY5uHhoebRexwxROHDVkWGm7JVMUuWLM8s+inGGKbJ1jYO6PK4C1s2zULuaeE58/wpkHkteG4UnI86J67nteDgOpy4n599fX2f+VpoNK8L7KoOOyt8U9cFn26KMCaaHBA+T3CUZ5uPt73xhYtphepz+Mv+KPQsK3WfrHvc95RmEkXkZchRAAMGf4IvvvgSw4cPV4Obff3VcJQrkAMJNs4Y+OkwVCiWx9i6l5CIWg3boF+3NiLkYsVmJMA9S158OuxzFMqeAeHRiXiz5/sY8cNI/PD9N2jSqAH69XsPOTO4qVFR3+jcE2+/0RgRoeEiHtthcP9uiA03n6/mVUELQs0zQRMXF/Pyhty3JD4+jv2sNSlEk9rlVYsdQ0Yeh0SpdHLkyY70znJXOLsjk2i8m7fDEBwSjUq1CwFSmVhlSIei2RzhFxAtYtBavTGN4EAxrHWI1LC3/UKRv3BusU4iRu2ckDt/RvgHhKN8DRGoMcFsikH5Yllw62YIAv0jkLdwTtkuDMWL5UPm9G4wxMQhOCwaIbcuoVnrIajd7gvU7vY9vCLlPFTHiEdAUeHshEY1ypgSNC8TvommGOQAMBQ9dKwogjgYSoYMGdQ8eoT9Nxkq+TBBw9ZACsd69eqpybMpyDiBO0NPnxb2W2T5pkyZgl9//fWJlsmTJysxZtna+aTwWlDUUhTynDjHYNasWR/a2sdrxOvKUFEKyL1796rrwuvHfoUajebh0MpExhrQpawjjvnE45a/1JU2Rr1nhh85WqdlraM+S749XnEIkjqpSRF7tZ8nhc8w7VnShV0cDKzD+NditwZxju79Luv5n/xl3U17YcMXtFJeo2g0ZVb7MX5W28i+1Vf+Y3mymjSPFoSap4Y2IUEMWyI77qUCDHI7J+o7OsVoXLss7LJ4iNJ+nJA6K6W1HLMUwLVTSxB9YyG8zx7G4q2HMHbq32jZuSduXlyEqPPzcWLzRizfdxknr16DXfrc8D+3EO+0Lg5Ex6k3p5OmzUe6vCUQfX01Yq7+g7HvVsf0GX8hLmtx+N1aDb9jc1DMOhBTl+3BL/P+QYbi1RDouwnb5n0qYtER6Ryt8N34echSuiZunpyPkztnwWvTSFjxbYGpjnso0bGoJWLY1jZlwvk0Tw8F29q1a+Hj46PCK81v2emYsHWQc0FeuHBBzbnHCegpEM396cxODOFnOksRERFqRM2MGTOqidkpoipXrqwE4Z03+E8Ay8SWQU7ZwH0T87EftRBuu3jx4qc6thnui6K0SZMmWLp0qXLsOAE9xR0/Wx6P8DPT2TLZv39/db3+/vtvVKxYUZWD8xla5tdoNPfD8dKq5rJBmaw2mHYgGmD3cXlszM/bwxaF+CqT9kehU2kHeDhZG1sbXxJm82MwJNwt36N4BpulSZ1o91nzVJhNRnY/H7hF+Ju+vVwcYsOQKchHvYF7ibb1lcFWnN0WDSoZWwkfVUnY2eDfZf+iXMP30OLdsfjok9Eo0fYH+EdbYd9/m1C8yccYMWUpevf5FjV7T0Y4bBFw6iSqv/k1hv84B+sPegH2tmqJ8fZCjhrv48OvZ6Jrr+Ho/fMGXD5xBtkr9MbXk5djyGc/I3/9T3A7wQ7nDxyWzx/h2/F/oHaLD1Cr9cc4H26Dm0eOIEuV9zB82iqMmzgHVd8arSbsvedVbXLwPBMT0bNjfVOC5mXB0UAp9DhnHvvnJRVNFHHlypVDpkyZ8P3336u5BzmnXu7cuREVFaVawMwLxRFb0nr16oWOHTti/vz5ajTO5s2bq+0pFp8WCiru2yxYzf35HmfhebGs3P5Z4LXgCKNsGeQ1oLjjqLd07szCkIv5Wri4uOCDDz5AzZo1VbgZWygrVaqkrgNHLNWjjWo0D0GqiVh5tloXscecY9GIiTW9bORj/LiLEB1twOhdkfi4qhPinzRu9LmgRd7rjM23gunzM8G5nNj/gBVOixYtnikE5kXCN8+sBHPlymVKebmwLAsXLlRvxvloOqRzR6l2ncXYpJ4HVdk9KU4+72OoemUdDuzagyPnrxpXvkRyuztgWHkPhNm5IcgtM6ykoK+CeWMDbHxUJE6vXIjE+Dj1Zo6OXuvWrZ/7fWsjTuuS9XuNXx70RpDp8n9YUCh8b4fj6pWbOHT8GqJ5z7KVTWyB/y0/HD5yEacu3UQ8bQPTbaxw48oNyeuJMEa32fD9lGwjTnJ4YDCOHL2EM1d8Ec+5ROxsER0ajkMHz+HEuZsI5+tU036Cb/th/8FLuBUUjuu3AuS4shvJHxkcimNHLuDYmevwC402HvNB52BGxK9HFg+M/987SOfqrJI4xxtD8ejsc867okWLqvTUAu+FNWvWqP5wbCFr1KiR6kOWlmFr24YNG9Rfy5ZBM/zO86aw4cKwUY4+2qpVKyX4uI4CiPCaUDi+//77aNq0qZq7cNSoUUoAdevWTYky5n9SuA3Lwf2zlZJCyjxITNLyJsV8PNr7Bg0aoGTJkqruNO/zSeF2FMQM/+Tk+6w/unfvrqbWMItiQvFLsThs2DB1TWbOnKlGJ2SrabZs2dQ1ozilSC1UqJDaRqN5Etjfl+HdDMVOi/CFCW0pQ9IfZBeYytoqToRdPncbdCjlgPbFn3xpV9IBFbPboXQWW6kOn/y512jMsN7gy9P06dOriJGnQbcQap4K68QE5PA/hwQbOyRYP3y+qxdFopWN6GYr5PQ/D4O+s1OENk2romp59t17xIhirMzEsYajLM5ijFxlMQswLo72kuZkXKeEH7eRv04iXJhuTjNjL/tR+WU9R2bjPlSaiDQX874lH9MdZN9ukpd/eRwRsXfzSzrzs/WRaQ+DlX9UNHp3bISc2TKaEjUvGk44v3HjRuVYJicGLWHLGMVUu3btlGjv1KmTEjhvvvkmxo8fj3nz5qm+ekOHDlX7oSjkO9DChQvj448/VpXn07YOsmx0GCkGKbIoqJ4Ebsuyc/qLS5cuKRH/NGLQDK8FRe64ceOwfPlydU34MmPQoEFqovq//voLM2bMwKeffqpGJOzdu7e6NhTFfNFhDpvlebEfIQWuRvM6w2c0uYWSkC16WV2s0VFEXYdiIvCeYuF23cs4wNGWA8skfyy96OVxlpRAu82ap4N+iywG9SH1YFD9GeXhSJnn47XH3s4WXdrUleuZKMsrflETEuGUOT26t5fz1bwU+GaeA5ywhcs8gMyjoJApU6YMunTpoloLJ0yYgDZt2uCdd95R4ufDDz9UApECiK2I7GvH/obsR2huOXtSWC62pi1ZskQNJsM+hEFBQaa1jwf3weHiGb46ceJE1cr5tJE1ZqeA58Pz4z4ZPdCnTx+0b98eQ4YMwddff63Om98pkPk2uWvXrkocW14HsyhkSK1G87rB54jPAJfkwrwtF/o/UfFWiHyGhdvzRXZy+9eLXh534f36rFjJzZ8iXt7s2bNx4sQJFeIzderUNBOyxFBXOhRVq1Y1pbxcGK7Qtm1bNdiAtfw06XLmwdvzV4k/LkInlfjjxmIkoPqpJciWEIKvf/0Hs1dsVKkvk9KF82L1hM/g45wNe0q1h22C0qxpHnZ9iwr0x+LebRAXFUmPTYV18W3/i7hvff2CUaHZYNzy9je2wr2qBIWhz3tt8PtPA00JRth6Q4edBpfONkN1UxNs4eLgIOz3xZae0aNHw83NzbQ27cB7ev369aqF8FEtg8lBMcVWRY7aSXHl7e2thA6np2ArXN26dVGtWjVlYzmiJlsHn6b64zYc0IbTRrCFzdx/0Mzjltvy2KyDOOLn4MGDH2vKiKQwPxcOksN+hGYYSkyxyu4crJspmHPkyKHCnrNnz67CZZNrIeU50cngvc5rpdE8LmxZZms9w7fTIuy7zBZ02ownfQ41mpcF7TV1A20767anQbcQajSah5I1c3pMHPE+EBpBz9OU+grBU4qPh0Om9PhhaDdjmuaFwta27du34/bt208lBgnFHwUO+74NGDBA9RU8dOgQ9uzZg5UrV6pWshIlSigBRHH0LM4ey0dhSSHHitjM05SbcB8cnIbX4Vn2wX6ElrRs2VLNT8bWUYbIcvRRDqSTJ08edZ0fFC7LffHcOOKoRvM6wZcmjB7g802bohe9pIWF9yvv22d5gadbCHUL4RNjLIZuIXxRvOwWQjNlGg3EydOXja2ET+m0pko4upsY1E8GdMDPX/UxJd5FtxA+f44cOYKTJ08qQfckgshcffF5IDzv/Pnzo3jx4mpfSWHrI49FMcQWAHa+f9IqkPm5Peu633//XfUhZOukOdzzccpvPib/UgTyN+RgbFzM5/KkcD8cYTXpb8/9scWULZpPcn25HVtXmzVrdp/Q1GgeRFpvIdRoXld0C6Hm6aA/82R+1AvBShwsLpqUZ/b4QbCyE6f3seYlTENEx6B8uSL43+C3TQmaFwlHJDx79uxTiUGKFr4dpbDjwC4cYZX9CZMTg4QtX+Zj8OXb08DteVy+ieU0FhRM1atXvxOCahZ7jwNHBWUo69tvv6328yTbJoUvNpOD58y5FimAKTwf9xg8T442qqeg0Gg0mlcfLQg1T4XB2gYB6XLDPi4a1obUIRCspBy2ibEISJ/H+F39q0kpKpUpjO8/6w5EiSP9DI5rqiI+HtZO9pgxagDc3VxMiZrnDfv3MRyRg7z8999/qnXLsh/ew6CgobChAGJrWJUqVdQgMmwVZLjXw7AUhOYQzaeFZaAI7Ny5sxKkHBDnSQQt4bRHLDfDOLnt0wpCbkeBy/NLDqY3bNgQ7u7uT3TO3C9bQDUajUbzaqNDRnXI6BNjLgannijvdwDTRo3BX4tWmlJfHiWKFsLkxQtxKVMZxFnbvTKCMLWEjBI6wR3eG42VK7YB6cT5fkIHOFXBUNGAYEz55TN82KOFKfF+dMhoysEBX9hX8OrVq8rusuwUggy3ZJmzZMmivietlszf+ZeChnOEFShQQM11xrDGxyU8PFyFT5rhvHxPEzZqhmXlgC285ubvTwJFKfvzcV5AXounKQfvS9YbFKRsJX3YHFSchoICnPbjQeLREpaH5WL4Hwes0WgeRVoPGaV94cAyvO81mrQEbTr7ET6ObU+O114QXj59BDHimJQoX82U8nJJC4KQqKKIFrAVv3PJZ8OwZdpYlf4yyVO+Kj7fug+JbMBKVMV7JUhNgpCERUShSJ1+8Ll+2zhPYFoUhTR7oRFo8UYtrJn7jSkxebQgTBlYP3DESwpBCsCklRbvaYo7TpfAUTzNVRP/cmFoKAVXhQoV1MAxT1vH8CUgj8V9MuyTFejTVoM8D4rcESNGqO9P2kLI346jfnJ7c5meFF5HCj3WHaVLlzalPhiKYs7z+LjildedYbicnkKjeRSvwiij58+fV63pT2sXNJoXDese9pFnHcAXpk/DKycIw2ITcMU/Fke9Y3DaNwaXAuJwLTAOAREJCI9LQEI8YGdrBRd7K2T3cIRzTCDye1jjjcoFUcjDBgUz2cNB1r8s0oogNOPgAiwY+jG2/jbRlPLyyF26AoZvO4x4Tqn1Ctnx1CYIydUbt1Gj3Wfw9vI1Ti6flkQhTV5oJNq/1QBLfx32SCdeC8Jnx9PTU02OznqBAobX0rywCjIvvK+ZJ1++fEqw8NyYRuHG1kCOEvqwt5+cX48jijL/g6o2yzf/j/rtHweWk3b7aWAZuT2FJc/zaTGf66NEHs/XXN4HXZ/kYN4H9ct8WfAcBg4cqEaU1aQe0rogZEs7bSlfTFnaCo0mNUO7zpeTjDh5raedOO8Xi3mHg9FpwQ1UmuSJqlOvofeCW/h5cwBWHA3F0etR8AqKRWB4IkKiE+EfnqBE4r5LYdhywwG/n7BDm9+vospUT5SZcBnvL/PBilNhuBXydJMWv27Ex0abPr1cEuPFeRQfJw1JkzRLvlxZsHzml8iaKzMQzcEsHt+5fKnQCQ6LUi2DU77vmyKCQPNwODeguUWKC685HS1OjE7nkY4907hQ7LEFkemEwo6tU+xjV6pUqYeKQcIQTE5qz4UtYcktzGNeOGjKsy7cp1m4PulCocUWOL5ITW7fj7uYzyfpuSZdeF3YAsK8vM5PsiS3v5e1mH/jpxXiGs3D4HNpfj6fdjE+4/xrXuR7Mvn0opeUWMz367P4NGlaEB66EY3Of99EvRnX0EsE4KJDobjgG4uYBHH67OSicHGwhpWdLLZcxOm4sxjTwReqtpJf0iLiDGr733YGoN2866g27RqGrvHF6dupQ/CkSuQSR0vFnBqIjY6CIeHp37Jrnoyq5Ypg898jYe/qCITLMyLGKFUjBhNhkahYrSQWTPkEObJkMK3QPE+uXbum3rgzDNQMv3PyZ/YlZHiWeUAW88LQFw62wlFDy5Ur99j9BCk42ZL1sIWtcSm9JG31fJKF2ya3z6dZkjvf5BbmNQv0x1meZN8vajGfg0aTmqBTTmysrWBnYwV78UNt5S+/W8HovGs0qZE0JwjlccKsA0EoO+EKKo+/goX7g+ETyjhQedjM4o8PnrnCNW33ICTL3bzcjiLRQSoZeYCvB8Vh3EZ/lBrrifITPbH9SoRpK40lof6+pk8vl9ioCCQmxBqbCLXNfSGULJIb57b+gopVSwIh4caBWlIbrIA5VUZwOPq/3w6H1ozXI4q+QBjGYh7ZknaWYs/cAkgxxHUUjWyFMsNWRfYTZAvhk6IdLo1G87JwsLWGk701YuIScSMwGhe8I+Atf2PiE+HmYAt7WU+0ndKkNtKUINxyKQK1frmG95b44MStGKMIdLKBlYg3OhopxR2RyL6Esn+2Ih67EYV6073Qfv4NnPTRLYYKuTzUX1HBIaaEl0tMZATiY2NE2JsSNC+E/LmzYcOf36FL9+ZAeCQQJ85/aqnsWI4YKY+Ijl+mfoJffuxvWqF5UVDc3XnpJgtD/pK2qDHkkoLQ/J2w1fCZ4G+vl1dv0WhSGbwrabbYInjNPxrj11zH0L+uYOifF/Hlgsv45M/LGDL/EqZuuInrst7RnpEBTz/NjEbzPEgbrrM8MwOWeaPhL1ex55I4nIwSkYUtes8bHkEdh+JQrtbyoyEo8/MVTNkTaMzwGkMDGBsdi4igAFPKyyWO/WKikp+cWfN8yZDeFX9N/gTjxnwAe3s7FZqpQjRfVlMtK9q4OFWOAgVzYPPS0ejf/cFTS2ieHwztI2bnh6GjSfvnMPTPPLIoF4rClBgYxyoxFtbxEXp5RRZwzlu5PzSa1ALvRrqHdjbWWLL3NgbPu4i1R/xw0z8CsXHGfoQxcfHwDoyS9T4YKOsX7b4NVwdbFUb6LPDFWtLleWFNG+3gKGV+PsewtbODg9QB1qYXgpoXT6ofZXTjhXD0XeaDq7eiAWfjgAQvE3WxGBYXnoByRVywoHN2FM/y4HmfnhR2kk8ro4xaiyiPDPbDVxULITos1JT6cvlu32VkKVQACa/QeECpcZTRh+EXFIZPv5+NeX+sNd4kDiIQWYm8iEeX5ozhobFxcPVIh28+fhsfvdcOtlJZPy16lNFng9M8LFmyRPX7Mtvvc+fOqZZDQicmd+7cyJw58x2hyIFWvvvuO7XNkzB48GA1tYU6/8R4hGWvirA89WEVF2XKoUmrGGztkfHcIjiEesEgRpED4wwZMgSDBg0y5dCkBl6FUUYZwp4zZ05ljx4FLZqTvRW+WXoN288EitCzFtFkXpMUAzjMQVBEArrUzIY+9bOzOn+qnhaJhgREhEfeeT9Cu0nR5urqkuJVra3s98KJA1i0eife6/8+sqZ3lvNIOYfUXnyE3etXYvf52+jXt5cKzDOfl+bxYD1648YNNUI3p0x5GlK1IBy/IwAjNvkjJFIcPA4E85LFoCXqssUakNHdFgu75ECjwk/e1yU50pIgtBFfze/qRXxXrSQS1FwPL58vNh1D3gplEf8KDT6X1gShmWXr92HKnH+xbd8p40ikDvZy0zy9MHsk7KcWEw9nDze0b1EDn7z3BsqVKGBa+fRoQfhscFTLWbNmqb9sLeR1NE/+TOHHsrq4GPt00q7y3maFVqNGDVSvXv2J7P49gjA+GgElusCv0qdyXwSZcmjSJnIP2Dkhz6YP4eJ7GInW9loQplJeN0FoL77p2mOBGL/6Gtwcre+0cHG8C/WJfpulDaONk7QEgxX6Nc6J5uUyIo4DIT4BNrZ2uHH+MKbOmCNuKAfrot2Mh2P67GIDByJHeifZZ5KySxksLaml66/WcKUksdxmaHv5zcHeFgc2r8Loaf/gpykTkD9besTxxasx0939yj6Tnsn/2TsLAKuKLo7/X9d2F90dgkiIBYgiqJ/Y3Z2IiIWiWChiC7aigIAogoBFCIpISDe7y3b36/jOmfcerLAIu7zt+cHse3duzb3v3pnznzNxJP/mNUc1k+V1tGgwaTH/g2n47q80KmtfRohWSYLTm/7q5P/NmUAIwlq0zk6NV1YWYNz3OSix0EPRwMQgI9KjVaCg1ImLP8/AnH8aRj+6uoLfaXb+lOYWNhgxyNgtDWPEUwnwv5FnYMmnz+C7D5/AoMHdSdWSSi+g94TFIRdWlQuGmsD7c6FUYWG3pGhucvVVw7Bq3hR8+cZDARGDklOH50QaMmSImB6BjQEO3ESUPYI8Kbt/4Bi/GOTKxNjYWBw8eBC7du0S62oClxgKD/cftUJBAS56/mRopIF+P/4dPSc20CWSuoBLL67fLCp3YOH6PBg0ikrNHTmf4yLPQ8KPF71lHedx7Fljqeh2u/Dj5kIUVThpP+/xThYFGf/2inIcyszB2RdcjOuvvxbXXnstrrj0IoQYtfAolDAYjCJv5cDdODhl/qSwJ9FoMol1RoPB2y2K4vlTp9f79jNBwxV43jOS4FBBrfGOZmw0evfVU17tPy6j0mhhMnnPyZV8GjUZiQLegudAVYt473qjaGbrPT57IenYGg2JEoqh/5wOkTbfeknt0yAF4Q1zM/H4t9lCCDZEMejHKwqVMNvduPrTdDz3S55vTfOABWFxTpZvqWFgs5hlBtKAMBp1uHjEAKz9dipyds/F1NfuR4/ubah8IMOusBQorQDMZPDxQDQs7lgocs0gV6GK4FvmeF9TUFSQcVhcLvYPMekxjI4//5sXUbDtK3z91jj069nBd3ZJQ+GMM87A8OHDRS0mw8KPPZv++fv8YlBPRgBPrOtvXrpp0yYxSmkg4HxBhsYZJJKGiJYEzV/7ypBVZBEDyvhxcnFFRdoVg2OFyLKTKnRSMNs9SIw0IjFCJ8RjSp4ZW1LLhZexunD+qFCq0b1XP9GSYuDAQejftxdMOg0sZUVYvngBPvjgfcz88BPsPpDubZ1B+7HQKi/IwsJvvsK773+AJb+shNXhFmJPARf+XvMb3n3nHXz4yRfYti9VCDe/5FOrtagozsP82V/i/Rkz8cemHSKv5lyd+xcW5aRi1ucf49333ses2fNRUGqn9dyHXCHWF2anYsHc2Xj77Xfw9TcLkZ5bCr3hqNaEVEawaNy4+hd88/2PsLqPiEZJ7dLgBOF1szPw5V9FZEn6po/wxTdURPo4I9Ar8ewPuZi+pvkMNsN62FzUsK7XQwampGESExmKR++4FFt+ehsp6z7GvDnP46abL8KAQd3RIi4SoUEGb40iiz8eEIbFH4tAKou4yUpEiAkd2ibivOH98dDDV+HnJdOQ/OfH+HnWc7jswkEwGQPXl1cSeLgZ5+rVq8VoomyccLNRv8eQhSI3c2nVqpUwMDjOXxG4fv164V2USCSShoLfNk0mUXfYRUbwIDLMNUPjce+IFpg4pjUMOjWVbUrcck4izuwSiswim5ib0EPbHsw1C3HoP95JQzvwPty0kivT/BVrLlsp3n97Ghb8+DtKy8qxb/vfeO7ZZ/HX9oMwGI0oytiDZ596Gt8vX4uKkkLM/+JDvDtrIYKMWnz5/lRMe/9zmG0OpOzbgkmPP4rftyRTnsyDvSjhshdj+muvYvWmXUje+Q+mvzoFc5auRUhYGPZuWonHH3scf27aidLiIqxevhAPP/IoDmQWUdlsxL5/fsekSc9h6Yo/KT+voPXfYcL48dh+MFvk+eKS6D7wfdmwYiGmTH0TKbllQuBWur2SWqRBCcLpawrw1Z/FwuvmNwYaAyKl7HInUfjwwiws2N4wBlipbfgncli9A0M0GBrRc9Nc4Xe7VWIMxl44GJ++9gDWLXwV21a+h7+XTseKb6bgh8+fwdyZT+DrGY9j3odPYOmXz2LVvJewcflb2PrL2/jlq8l445lbMezM3ogIbzh95ST/DU9E/88//wgv4D333IN+/foJERgfHy+EYFJS0r8mGufnhJfLysqwYcMGX6xEIpE0DFj7lVtdQoixJchi0Or04Ioz4nD5GdEoLLNjSJcwPHlpa0y7oQNaRGmxYH0e7eeTOGSuVFhqVomtIIGmVrrx/dwvRB/tD2fOwPxFy+FU6DHq0msx7Y3X8eykSXjnzdehd5Zi+/Y9MJhMWP7tXOTadXj0yUl45plJeGnKZAzt1xMHt63Db+t247o7H8Gkp5/EG69Pw5m9WmHO3IWwu735sc1qRe+hI/Hqyy9iypTn0LN1JJb8sAROlxXz5s6DM6QlXnn1dTz9zDN47eVJcBSkYNGyVVBrFPjhu4VwB7fApMkv4Omnn8bkZ59EuLIc3y35GQ63t7ktVxTu2foXpr/zGQaNuR733ngZPE67FIR1RIMRhB//XYyHv80BDI1LDPrhFIt22Eolxn6ZgXWpTb9Gm19SbhPekNAHh1Dm7FuQNBpCg4zo0Doeg/t1wUXn9ccVFw3G1WPOJNE4CCPP6oMBfTqidVI09DwwjaRRwuKPBR4P2hAVFYVLL71UNCXl/iTcb9BrVB0LT0fhF5MSiUTSUGCTLyyIB8pSkj3ELR0UuLR/DHq3MeGpOcl48PO9MNucGNQhBAXlTry8MBV2u5OEnNfGVVCWF2pS11jw8GEs5eUoyC9AfkEBigqLoNAY0LNHFyTv3IRv5szB/B9/g1Gnp3O4oYING3bsQ8dup6FHxyQUFBUjPK4lzhvSHzu3b4fdo0LmwW344L33MPPTWSizuVGSkwEzpZm7eeiCojDmwhGAwwKVMRwDBpwOa3EmDqWmICWzAOeOvAjhBg+Ki0sQ07YnBnRri7RDe1FQXIx9BzIx5JxzkBgVhCI6b2RcGww5vQ9SUvehzOKASqNGUU4a3nr7A8T0HoEn7rseGrjgpHLBe7cktU2DEIR/HTLjqeV5pC5owfeiNFr4GlwejP0qHWaH2xsXKDjXaCiBP1yUmcUmeBcaAFyREJnUUnRPqzLNjTUw/k+JpJFy2mmnIS4uDj/88IMYMIbp378/DAaD6Et4PEHI7zU3Kdq5cycyMjJ8sRKJRFJ/cG7FpkbnBJOYT5Dzr/hwPQorHHhufgq2p5WKSepfX5yGJZsLMG3xIdrefVgM8v4ajRLt4oyi6Wh1i3gPGTp2lxJX3nInxo9/FI89NgG33ngllPYSfPLem3jtrfexaesOpKYcgo1sUjHgjdsNB51JR6IRbvZMeuByOuFwuGB32qBUKeGwW+m7A5YKM1p27IUxFw3jRnu0JaWQLtjpcApPKHs5eSAYPqzDboNLoYKR8mnv6KYeOGkbrXAYKOFy2Oi8gJbWi6at9F3sz33K3XQAjqDrMQYFITE2CgVpe5GeW8yZvxSDdUiDEIT3fZ+D7CJ6XFSN/8cX3k21Ahk5djyxNNcXW1PoLVEooTQooaL3V2lsOEFFwUPveqt+/aHQNAyvTavTBiGqXRIUuqrT3FiD+O313PFaZo2Sxgs3CR07dqwYGvv6668XI4iy9+/MM88UxtTxBCHDfQzZkFizZo0vRiKRSE6erKwslJeX+5YCg9PpRs8WQYgIZqED5JVa8efeYthJYGnJnuWRR//YU4x3f0pHqdkODYtBthEJB+2bQAKSBaWDxFO1S3fKLkW+Sed10R8PJYD7+WWn7cOPP6/BVbfej6efehyPPvoIWoTqSP/RhkotQkiU5RdkiqlbtFqdGMCFDxZk5NGeVRj1v6tw91134pbbbsNdd92Nq/43igQh588KuFwkFklcGo16uhYlCgpyhJESFhIKLVxIy86BKcgIrU4HncqNQ3kFMOqDEBISAj0tZ2TmQqfTkzDUiuau2QUFCDYFkUAl0Uj3Qx8chZtuuRHO3P14a8aXlBw5UX1donqW8H0/JXjy4ZycHDGv1IUXXijaAp8ML6/Mx5erfIPINJEfXlwHZQZ/JVvQOU6L7nEnP9gF15TPmTNH9JthI0hDBlN8TDzMyakUDlA42GBC+cFkqC3lsORmIW3/Xt8V1A88XPHFt94Bk0eFkj17YKkivY02pKaibN9OHPzrd2EUM1wQ8Hx4bGQ3N9hLxF6lyv3NapPCwkIxrxa/1zzPX6dOnXxrGgb8LCxZskQ0xYyIiMCwYcMCMg9sbXDWWWeJz2+//RbfffedmHbi9NNPF/0IeTRRfr6PVw5wfsjztObl5aFNmzZVbrds2TIhNPn6FW4nLNHdUBE/EAqetqCJlC/NFqUGYSnLoanIFhPT86BEPLpiQ56LtTliNptFpU/Hjh19MQ0Dnif7gw8+EPk5j2R8vDyS8xjOS1nE/FclFecmvDbYoELLKD2W/FNIZp9CjDHITUc5f/IGrzdMDBxDgY/JU0+olCrcNzIJneN5zkBxyJNGqVKjKDMZP//+F84aMRrRIST46JicR1pKCvDrbysQEtcareLCsXjuZ/hu5QZ07dUPffv2gtqaj0VLfkJ+uQtxEQZ889kHWPT3Ptxw6UgsXbwQ6/85iA7t28BcVox1q3/B5n1p6NKxAzIP7sZvq37Hug1/I7ZFexzYtBJffrMYPYeej0svHI7Mff/g+0XLERpL91Zhx/xP3scvmw7gRhKV3du1RB4J1cWLl8OtD0N0qJbS9RW+/elPXHc7r4/H9r/WYFtKAa698Sb07hiPj99/G4WuUAw5vYd41yX/DT9bpaWlYpon7qdfE+p1YvoDhXZ0e+0AzyUNBb9FTQhxV51udIvXYc29rRGmPznjtfLE9CyqudYHDu5UG5CfKeBw23kV/da5efnCUPOPdHU0KpUSMeHB3vtSzUvhDNXqcCK/uIwy0X87tTkDZHHA85YFGw1w2qwN9E6dIuwp1rIn1lug8H1u6BPT1wY7duzA5MmTMXLkSNx8882+2NpFTkwfeHgycRaFnHaewJqFIpcdXJj5Kz2qgp99Ng569OiBPn36+GKPUHliep57sKDLFcjt8zAUPDE9ZySSRonI09UGtFrxCIy5m+XE9A2YU52Ynt/vgoIC31Jg4CbnbJ/++uuvYpRj9or17t1bNFnnyqjKVHdieiZEr8a7P6fhhw35lM34mmdWhg0fihP5l4utOQVuPjcBF58WReeotkkElVqLtJ3rMPW9z3DPY8+jc4twykvpQHQOrghbsXgu5v64WngAw6OTEG50I75DP1w7dhTlixX4/KOZ+P3vrWQ/qWEICsXoy6/BqLNPx8bff8JXcxciv8wCtUoFN6XzostuwMUjB2PL6uWYtfQvdGgZgfXrN4rmsm069MANN9+EljFhKCvIwqxPP8H6nQfE/IWgY59/6TW4eNggcf2W0nzM/vILrN+6W9iDSrUep58zEtePvQgalRvLZn+KpZsz8MzTE5AQbsSs917H8g37MO6pZ9EhLlR4VGUWfnzYFj7VienrVRDeMj8Tn66hgprEUlP8ocWttQMvjYnG42dH+WL/GxaEF198sWje4B9+vTHA3hpOKxt4bDhXRjSNiArB6/deJtYdHmHrJNGqVdh6IAsTZ3yLEJPBF3sE/7lPNvNuzIj7R9fJ95kFIQ/K0VxgQ+G6665DUVGR+L2nTp2KXr16+dbWHlIQ1g6vv/46Pv7448OeQW4+ytfRvXv3Y/KQyvC2vJ6bmrZo0cIX60UKwqaJKDGkIGwUsJeCp5epqSDkfIxbPPDAU4Gyf9hGyM3NFRXtnHfws8Nwv+bLLrvsXy3aqisIOYXsz9CplXjp+1Ss2lFIYorKKxfFK73Zjps2Yq8ga7bECAMuGxiDS06LFHNY1/wSPd4pfDQ8p6EviuBKep6IvriwAFa7E+FRMVC6rbA7PHSdZGsrVaKJJpejvD4kJBxGvQY2OhY39XTZbSgo5PxSiaCQEAQZ9GIdT+nF/QJNZIMVkWC308WEh0dCraR0OJxQkb2qpXtQkJ9Py9wfMBhhwSZxr/n6edAY7jPIU1JUWKwwkRANDTHBQcdmm9Djdommtjq9lmQoCUa6h5byCqh0euF5lfw3jVoQrkmpwDkz0sQDxk9zU/y5xa2lDECnUaDg2Q4waU7sJeQXnPvZpKSkCAOpoXKMx5IWj2fEOSnjiI8MxVsPX0GveQ0EIWUkW/al45F3FiAsqGpX+Ik8qE3pCfMXUjzUdN++fcX3pg4XKs8//7yYk45HpeSm6ZzHsLewW7duvq1qBykIaw/2JixduhT79u0TlWE9e/YkIyNcNOviAq6qPIXj+B3g35+NzspljRSETRORu5+EIOS4VatWiWaLxyuPJLUH33O+90ajUVRs14S9e/cK8TZkyBBfTGDgqWu++eYbYVexEOTWNdxk/Whq4iFkdGoF3v05E3PXZqNLohEJ4TrkV7hgtTmhJxsmMliNMzqG4oz2wYgO1qDc5hWDNXlM2bbke82Bv/uXK6/j/NO7zNfA67zb0f+j1nvjxXcK3qatvM6/vT+dR85X+djcVNUf7z8ufZDA8w48493Xe54j63l7777ec9OxfTrAe07vtv7j+pclx4fva6MVhFd/nYE5G0sAEktN+YcWd7fCgQ+ua4E7B4R5I0/A448/joULFzYIo46HKqbXUXwTL634xv84kzm5R4drxiKCjfhwwvXQa9ViuTpwZrpi8x489eEPCDGd2PN8LJxuzsC8n96raLyw4cyjNX755Zfisznw/vvvY9GiRSJf8RcSXHnC89exAKppBngySEFYtxQXF4umXTwZ/dH9RLnQY4OTA69nD+HQoUMPN/uSgrBpIkqMkxCEbMBzc8OqWqpI6gbOm7lJZk3zIK4cYk+ev79xoPj777+xe/duITS5D/LxqKkg5NFDP12VjYIyB24cGoMwkwYWuwsOF4/GqYRRq4RWw4Nj8QictAM91KfyiFY23Y9+1o9n1vu3O3p95f2P2ZfW8doTHZM5dhvat1LS/Ot5H+/3I+uP7OuNq3yso69PciyNVhBm0gvT/pUD9LLQqVWBNc/FxRy+IvpCD1J9P0oehxs9E/TY8khbX8x/w0Oyc2d57hfHzUbrHAXLPScFB9QwQOWmwDPCKGx0R90weuJhdEeTtDq5gYP4EeNO1uf06widqvrNYLnfYEpOATbvSRPewuriUbhRjixYlPl0VWV0HXZ6JpQi/d5rILFYvSTVG1xAcYF13333CWOoOTBv3jwhfpnKAoGfIxYF3J/stdde88UGHikI6x5uzsR9DLlzPBd0DH+y54C9ivwe8O/BzYj5mWAj7/zzzxfvBHsBpCBsWojsWTYZbRbUliDkvOJkBjusqSBkWACadCph73DFN30chg/VSMwMSSOk0QrCV1YU4PGF2QEfWVRcCHufnL5L4kPz8cmGPN55xOXz5rS6tmohxDkq3Fj+QCuM6MBD+54YHl79mWeeQXZ2tkhXgH6m/4QzMbVGBa3SiBBXG0S6e0DnCaPbx226KQ0+byF/Z8FYHTj93F7d622sPhqV0ttRuYb4xatTYYULVtgUZShXpKNEtQ82T6kwqnnY4zq4zacEN3e58847hQBoDvz111+YOHGiaCZ6tLeI4eeK+6zwIDOPPfaYLzawSEFYP/D1/P777+I7F3ZsJHJT0qONOn4G2GPIzadXrlwpmqAGmUxQuGxSEDYRRLYsBWGzoLYE4clyKoKQs5jKNkTl7zL7kdQmjVIQWhxunP9xGn7fVwEFz3YZQLjNcqhRjat6BkFHh7bbPfg7xYyNuTzH4bGCz3/pEVoFimlbfvVrTRRaXLhuYBi+vDLRF3NieBoPNnCSk5NFWmsrbQwfW0037Z8Vh2A5GAkjYimWBaA3ePF6W/2iUCycLHyrTyH5/FPV+PJp38NpFn/9n0o4PBWwBKei53mRCI4wwWmv5vjPdQT//jwCI4+K1q9fP19s02b79u2i3yAX0P4BllgM8LPK31kI8ScHrv297bbbcPnll/v2DhxSENYfPIXEpk2bxPxhPNAW/9ZV5YMcz3BzU65EYC+iRuFEYZcrpSA8DnzLGsstEb+uFITNgsYsCCWS+qJRCsItWTYMfjcFFSQMuRNpIPHY3ejdPgib726J5btK0SZSj7ZGDzpPTcYBC10mv9x23pCCms6t4Q6uCqy+JQkPzE3DpgJaofd2iA00HqeH0qPBjkfawhBgIRwodqzNwrvjl6Ks1ExPBt0rhf/RaDqGlN9D6b0i+ushYehRofug1nhsxoVN6VIbNTwP5wsvvIADBw4cnlOHMzyO9xfSlUUPiyIWiw8//HDAB9qRgrB+2bJli/D6+QcKqUoQMlyU8TPAfWy5D2JeZipKe1yHvNMeqXVBKIpRhy9wbSSVL3w2kdtQWQfuHkHxCi53GgBcHol0UVkUiCmfhBUhFCbf5sBfo7iPUhA2C6QglEiqTyAEYZ0rk7UpZhKNPPGgLyLAuMnAJxMJI1/bj87Tk2EN0uH8RBKnJBZ7tTJhyd2t8PsDLfHcWXTDbB5MHRWHwR2D8NFVCZgwiIwoVy01G6Q7nVLkwJpUiy+iYbFm0S5Mvnk2CgtLSCO5fL8P/6mlH6qeYDPNa6r5rov7SyocWPfTDowb9TlK8kkMS+odnluSm0x//fXX+PTTT0X44osvxOAhbPCz0ckijeP862bOnFnrI45K6h6eWoQFLhtn/yU2eB17irkyctSoC9G7dx84XLWfhwkxSHbj8K5BmHd7C/RM1AphKMoRpxs9Wxiw8K5W6NVCJ4QYR/M+/uDn6LjKy1XHiSiicpw3iFj6OBwnYrxwGnom6fHb/fFoF62Eh+dF82/nC2K7o+KOjv/XdwpxwSoEaRSipY5vtUTS6PA/22xgyyBDYwqM//mtCXXuIbzxmwx88WeJ1xPniwsU7CHs0TYIW+9tgRs+TkXvDqG45zQTOr60H1aTHgfHt8HSvwqw36HAxLMjcfPMgwiPNWHa6BgsWl+IJbsr8PGucrgUgfcSittMBfGTI6LwwogYX2zDoDC7HC/cPB8Z+wuhNXA/rdo1oBoi/PtYyu0YfnUv3PXiCF+spKHBnjBuQs35y6xZs+rEEyY9hPUPi372HHDT4RN5oPhdFgWk24ENJWFYZBpLN8kmKn9qI2cTebsDeGx4JF4ZGYNP/s7FrbPzAI23gH7/f3G4a0A4LvzsEJZuK/dWw5KAZG+hhz2HWl+q2LvI3SO51ToJq8N94Rm+Zt6MvXq8joUuH4eza96P1zEk7qCmFb5tlVol3Hwcbo3j91qSYAuhfP78Dgb8tK8CJeV0THaEeJPrPRcfl9PBx6sqng/E8f4W9lYXPrslEcu2F2LOerrXJt6AzscfAUDcCekhbBbUt4eQ+6RzdwWulAyQeSyR1DpcLnLXij59+ogxF2pCnQpCm9ON3m8mY3eWDQpfYRlIjgjCltiaZobJoEa7KA0ueWs/wlpF4rPhRige3kMFqgrTb22Ns5Q2DJqVh/Rn2+Oq9w/g5wwq3bi5DxViASrHDiPussuNM9uZsPquVt7IBsLMZ37GT7O2QG86sbHVlGEPhN3mwjOfjUWPwQ3rN5J4ueuuu8QcnZy/sFewpk0jqoMUhPXPzz//jBUrVpyUIKyMUeHARmdrfOc4A3YYKGN3sEzxrQ0MfkH4+Igo/K+bHhEmFc56Lw0ZBS50SdRh1rVxKKhwY/rvxfhxcykS43R4c3QsetDnkp3FGL80Hy6nArOuS0CfeD2W7y3FI/NyMbiLCa+NihW66+EfsrAp046vrklA5ygdcsqcuGleOg7luDCwYxDevyQGZhKX+RYXvvg7B99ud+B1OseYriZszLBgHO2fVkSCmEUoCcIIkxqPDAnGC78U4OYBkdCrlLikezCsDhfu/z4He1MsuP/8GDiozL6mTwjdMQ/u+y4bW/ZZ8OTFsfh1fxnW7bZgdP9QxBjJEHEpMeeKOBwosGHhDrqmJYV0rwNXsSoFYfOhvgUhv888pZFsLippbHDZyLZRTe34wKuy/yC1yIn0Yid4qonawntkF3o9vwftH9+NyWvL8DoV1PFBSpSV0rn5Hafz51MBzRWpBhKAKqUCGq5B5Z19H7UC/Uh7qcBsSKTtz8eimX9Db2zeYpDhPq08xcX0h5f4YiQSSUPg9NNPF4MqVcdIYxFh9qjRR3UQ9+iWIlGZQ5F6b+VcLaBVASsPWPBnmgMPDgmhk7twfb8wbEytwKFiF9Scvzrc+O3OltiSWY4eUw9iWKcQ3DMgGDfQdt2jVTjn3RQSVBXCEzfvunh8ui4fV85KR0apCy1DtZi/pQyD3kzGwSIHnjw7AgYSn6vvTsS1Xx3Ca6sKcBoJ0EU77Hjvf3HoEAW0m7If6SUuzCFRyucW4pX+h+pUuLaPASYtcFqCEZOGheC+BekoI1H50shw4XUc1FKP50eE4e55GdiV78THl0fTVboxtI0BrUPpWuxudIrRYXg7HeauK8SaQ2bM2pCPl38roe2ad1kiabz4jWr2EMogQ2MKPN7CqdjxdSoIc8sdMFMhUpt4b4YS/ToG4bQewTi7tR77ChzYkGZGcJwJ53YzoVcbI67qasCaFAtYnnlonx4tDIgPVVN5Vzv9H0SyKBSXuVBsaRg1TzxB6qeTV0BPVkGgB/hpjLDnQKNTIi+jFMu/3uKLlUgk9Q17gtu3bw+Hw+GLOTGco3EjUSu0iFSU4QbNb2inTKFYVS3l8Qoo6cDfby3DNX1D2T2JCzobMWN9CUwaFUkpOqlWiY4RWoQaNLhrcDjKbR4kUbnz1yEL4oL1eOzcKBwqcormot/vNOOeIVHolWBABom6vTlWOFzArQPDEW6kskqhFvWbVqdLTMvDWXgWlbE8unaPeB2sDgUeOjsS0SY1jDravtKANtwS1Eqn4fugpHTPWJeLbdssWLyngsoCjRCkVDzgg3U52LHPirfWFCI6iMwFoxIWSpu/GOcWrGKSbUpfAQng7HI7CgopkXRMUeZJJBKJpFFQp01Gv9lSgiu/yBB9IGrDG8VNRru2NmLV7S1RZnaKgs5WasUYOueecm6Sk4SrOupgdiqQkV2BwTMzUEjbzLwqCbf3NuHLX3Nx49ICeNSB70PIiFtNhfCex9uhY5TWF1t/rP9lH6be+T10ZJxIQXgEnnoiPM6El7+9HiERBl+spCEgm4weS3NoMsrw7z5jxgwxF+eJyg/Oa/+9jQdquODwqLDE2R8bXV0pjsRlAPoVinydDjXpwmhE6d2Y8GMhkp9sh9n/FKFnrB7nTk/Fwnva4OO/irD4n1J4pnfDZbMOodhMeQ0pswOFNmRk2NCeyq6nh0Xh7LYatH4lBR4bMKZXCGZeFodpq3Oxr8iF1y6MwSPf5WBoxyCEUDn64A+5WP9AK2QVO4U4++SvfMzfVI4N49vh+x0lWHXADpXSgxwSijvzfGKatmsZocOyWyMx5O10vH5xS+SWFWDCV2W4+YIojOkcjEvfScasO1piR2YRXlpQhq7dg/DTrVFIej4VP9zaCrM35eLrn8px7+XxOCNeievfz8LiR1th4dY8fLyKEh4c2DEChJEim4w2C+q7yShXOuXl5VWr8kkiaQhw33keeO/ouXpPljr1EKZxk83ahArInekWJDyzF91fPYgurxxAp7fTsKeUixM3rvskBYkvHkTHqfvRbUY6CjmaCvM7qHBOeG4f7vmtkMRgLQsjp1v0/6hvinIr8PWrv0PFfTlr+ZIbG3xPslNK8NWrq30xEomkvuHhtNu0aSNGEj0aFmUcWByzIcfB3w9ICDbK5BwkCVUkAP+n+QNjNStEHDxKr9gIAFqVAkYqg8ylDrz1RwkeHBSDzzcUiqmOjFoFNFy22NzYW2THxV2CkVxoR5soDa1TYuyQCHSM1mL+1lJEBSmRQIJqPInDXdlWrE01IzFUgR7xBhSSsEsudOL0JAMV3nRMEr3RJhVK6LgHCh3QaTXimlanWDC2RwgyS+zQU5racgWkGKTGm9lzrw0jbaqg7F9HC+xAZLSURr4Oxu1W4NGzW2DU4DBMGxWNP1LpQircPH4M7h8cg4uGhuP186NoH97aQ2JbgTFdw9G/s064F8Vtl0gaGezUYEHqz09kkKExBH5eMzIyxPNbU1TPEr7vp8TmzZvFROpcEF944YVVKtQfd5fj9/3cP6J2PIT+Y3ILFq7bEWYDF248Mhqvou8VDg/KqWDkZqIcL3ZRKlBu94ipojiiFpJ2BDr/ZX1C0DGq6lFY64r57/yBzatS6HdSSe/gUfBzpFIrkXmgEJ37JSI6McS3RlLfLF68WEw+zvnLpZdeeniOwtqksLAQ69atE88Fe+A6derkW9Mw4IJgyZIlYv6siIgIDBs2rMoWGk0BlUolJqqvfH1ewef9DA8PR9u2bYV4ZC8pF44sDPm348Bbuijjb6nMQ7SiBMmeGMqS+VjHqpfqlQMeEnIaWBwurDtkwz4SZ91i1Hh+ZbFoXtmKBNmOHCvSSlz4YXcFhnc04YqeIWgdrsWKg+UosnowZUQ0esXr8frqIqzea8HIrsG4Z2A4cspdmLq6GD/sKMdFXUJxbnsDtpJQ/CfThjIqT8b2CMLk5QVILfYOJJNnseJ1Om/HaD1uPj0UfZP02Jljp2ATZR2jorIwMViNn/ZZEEvp3ptvw7YsJ0IpjrdYvbcCF1M5VWIxo1t8EMpsTjzzUyEKKZ3rM6w4s20Q+pEo/WxTCdLovH8esiPT7MYFnYMRqvfglz0Wca7q3cMToNQgLGU5NBXZVH6rRMXAwIEDMWDAAN8GkqYA57c83yy/w/UBe54534iOjhatETivkUGGhh7YFuK5ermvfU3tojptMjpuSQ6m/ZIPhY6VmC+yHhC6z/u1ThG32uLB/DsScVm32m/qdjxy0orxyPmfifvAwkdyLPxb2ckI6nxaEibPvtIXK6lvZJPRY+HawebQZNTPU089dcy8S3wPuI9h7969kZCQIJ4Pi8UipihZvXq1GI6bt+ff0IsHetiR4Y7E146zUKwIg05hE/PY2lxUPnl8+aKSqxdPLA5FKWp38WHZ5UY/Cu1npWCk7yzC2K2momNq6Dt76my07Ie35x15e4bzZB3vQ8vc2Y/P7S8zLb79+JgsBs8Mx0eXRuOc99MRZlDjg7ExmPRTNuZsMnsnw/cX79wShCfG9y6JkUbF8XlUbW5ryiOC0jm524U4p9ONhXe3xtbMfEyaU+6dRoLTwF5OTj9fD8Pp4Fulp3V8HBsFvk6eVsp/sgAgrkI2GW0WNIeJ6fl5DuDrIZGI8q1xTUwvcnWint+E+j093QR3/aXATYX916+tIWPJLsXgf8CGo1anxpY1yfj9h92+WIlEUt8MHjxYtETx12Wy0RYSEiJGImVRaDKZhCeRRTELxNNOO03U9P+77tM72EycsgT3qb/HG63W4uMeO/BJ9634oPsWPNZ2LwZH5tNWtA+JxH/tWgUsfriiU0HCSHznfuhBatH6gnN7EU9iUHwnUaUw0Tp/4GX/9hyEmKI4A+3Dy/5tuGWNfxsWmiEqzP+nFLfMz8Pj50Xhpv4heHp5PuZsJDEozuHbn0MlMciIdNExxDE5bSxAOV5L2/FctCQgF+0qw/p0uvAw2t+fBt6GPyulQ+zP8bSPiDNw+sXhJJJqc6TSpvHgzR480Cg80FMw/Efg9VoKRwxiiaRhUKeKQMe1o/QO/LtgPjX4WCL4lv0cL77eoczO30ejPtj2Ryo2rTgIvbH+B7Vp6HDBZDBosfD9v1CYU+6LlUgk9UnPnj3FENuH83gKsbGxookXv7MsEP2B4Zp+Foe83b9RwA4SM0olSrOTUVZcIPrQRWicOD2sGA+2SsHEtvvR0lhBBcqJRWFd4zecv91cgiu/ysCNc7LwzeZSrxfyVI1qEpCf/l2CJbvtdDxfXCOBf2euMOAmpTI0ruD/7Y59VxsunFKuOGKL6qBNha/zNPggW4MPczSYeVSYQfFf52uQZleJRgDevSWShkGdNhl9eWUBJi7KFkNvV64FEklwUPA3j+EmJ1wLeZwyTTR34aYpdBzxQnG5zyLLVxsrjsfHov+V408WcXxuOuPfnwtYbiHDTWIYbiZD6WM5zdfh4SY0vI9P8IrtuMb3KOEn0kXp/u2+1jinnckXW3fwdU2+YR62/3lITDUhOTH8m5nL7Lj6kUG4/IHBvlhJfSGbjB5Lc2syyvBvv3v3bjFRPV9/165dccEFF4jlykUa9zXljvbLli0TfdzZc3g0vLWHxCOvS0pKEh5Gj8ctaks1SjcK7Rq8fagNthaHUXngPmWtFWgqXy9TuWw9FfzHDdTxTgWRkpNsMsr5w8qVKw83KZY0HvhZ4/6D3C+UPfv1QXWbjPKzGabyYA4JvRdS1Thkdomm5/za8N7+t4c/eVt+KuP1SrzdwYmzQhyw0rYSyakSiCajdSoIZ20uwfWz/j3tBJ9eTcLpos5BSAxRU3nrwfrkCqxLs3n7LHiLArG9SCr9DzGoMWVoGD5ZV4CghFC8OyQY532ShjwWbXxYEl2XnhGN+7tpcPGsLJQdLQf53MdctvcFZsNAqVThhr4h6BmhwtpkC77dU4GEKD3GdjZ6daHNhaU7ynConF53ert7tDSiQ7AC3+6sgJKE4G39wvD3wTJsznX+SxSK9DuBbePbonvssfentvnh4w34bMoKGHjeQd/9l5wYl5OMQKUCU3+4AQltwn2xkvpACsJjaY6CcMeOHfj666+F4GOjjYfaHjNmjBhUh+8Hw78XF5JbtmwR/Qi5bDqeSOC8mfN+E923Lq2TYKdyiEfNZNQKbgrmxrg93XCwwkQH5iktxCpJHSFK62r0ITwZQ17ScKlPMV8dQcjPpZbygiyrG13XGymCDLzKSfcrQt6QP/35BmVRYXoVlvawogtlKTYWkL5V1YJtSs6MKFTeP0Bm/Slx2GY/HiLN3MLDtyw5JQIhCOv0rUsiwSe8a5WhF8ag1eD1i+Px2OlhuKZ/OP54oA0e6EkvF3vp+IWiB0Y8WPzdRYUzia4eiUYSkCpxE8KDSUj6jiU8gxSUdJ4wihewfSACr6NP/xPIy+zdE/aDr3lphRufX5uEty6IRFc6x7sXxeCMMDXO7haK6RfH4vJuwZhwbjQOPtEBd/UKAsxujOgWginDSChQeqeMTsCMi6KgE7P1HgWdQENiODbo2Frq2sbpcGHu9LVkSGvEiyo5eZQqJWwWBz59/jdfjKQxYiEDkgcX4VBT/O8OiwuuyeYRLE9EKW1nNnuHgt66bRsKC/PF98ps2boFFWWlviXJieCRRFkEsvjjMoC9f3v37hW/CS9z4DIjKysLO3fuFL/Xf+V7vE5FZUZOuQdTDrTB7oog6EgE8h4Ot5KKCAUeaJkMo/rYKS8aMl6hWzOj68i+Ndi5nvE/AzI0ztBY4PyBG4atKKI/9K5w0nn+a7b14nXAunOCEMLew/5kr+q98UraS0EmYLHdg01lCtHYjP5XH34v6YRcKcZmtd1ug8POc6sqyM5U1+yYAYJ/Q843VCpKRxUJYaeLXwxKe7ThUKdvXnywBkbfS3EYfhZoucLqxpOz03DG43uxtsCNy3uT2KKn5eGB4egXRm8Pia3RJLxu7GFEQYkdi3eUYEcOTz5Peo60l4PEndagwvjzYjD7xkQMiFLDRmLP4nAjMlSD50fGYNGNSbiuo0E06dRrVXhmaAQeGhqJzy+LhWjAKQo+JS7tbsKMJZkYOWUf2r6dij+LnNBQEvall+CsaQfQdvJefLLbgncvj0eMQYFyhwcFFjf+R2L28YHBuOLjFKzLIZVZ2Tvo+xNmUCKKBwSoY76auhoVpTbvvIOSasH5ld6owfple7Fva5YvVtLYePGVVzDhscfwxBMT8fprr5EwK/CtqZo9JDDKSWDwgCR+uPBNTkvHYxMm4KmnnsS4ceOw5IfvfWurZv78+fjy88/E9w9mfIhNG9eL75X58MOPkJKy37ckORHch7BPnz6HBTnX5P/1119Ys2YNdu3aJUYX/eeff7Bq1SrhUWaj40SGB69WK5xYXxSJp/d2xg+5MQhWOSneQ8WPCh1N5egdXEL5eGDzUCG8qEwS4ovKrBMJsMpCzb+p97t3wf+dtzFSfm9ii1PEVVp3OIhVR5b/dSwFQvVKKsa8Nf0iSiKR/Au2QS1shPryFze9d63ILny1uxEDIjT4oI8JYxK1eKe3EUbKOuhN94o1+sMDE58gWzouChJVep0GW9avwVuvv4rHHn0Uj4x/FFNemorFP/9O9qdXFB5+tysF5njxzNHLFPOvOP/3fwWxhvJQusZVyxdgypQpmL3wFyhVlToh03ZKtQZFWQfw5tRXMe2tmSixsR3vvQlHH1NSt9SpOkgiYZdAolD0t6sEP0pcWA/vHYL7Lo9Dz1AlFmwuIytcizvPjMDpUbQPlfsju4fiht4k3ZRKPDo8Bme30NIL5X0Q6ZnCh1cmYUK/IBzMd2D8OeFiJCelSoUVd7XEoAglFu0147NbWuLubkZ6UZR4bnQcnh0ayi2AEOGfNpEW5m+vwKNXtMD0a+Oh56PbuKZYQaJQCY2JNqQn/umlebDQMQYmqVFOYrVXyyB8MTYOd32cinn7KLG6f7vw+UXg0D5SJ661Ltm6NhW/zt0OQ5DsN1hj6DfTB+swY+JPsJTbfJGSxkRqciruuP0mvPLqa9h3MBmLFx0Rcrl5edi5YwdKS8jg9zH9nXex9MfFKC0tFTWeDLc8KCkpQ2iwCc899yxuvvV2fPzJp8hIPwQXGQW8rZ+i4mLxOWrURbjkf5eJ70aTkQSmt7m4xWrDnj17UF5OxwsLg4YKSsbucIih11NSDoplpoSO6yDxs//AARKp0pPI9OrVS8y3xIYD/z48zQSLwB9//FHMV/nrr7/iAN0vXncyea6STLVSt9Fr4dH/zw61wc8F0TCpXDCSMDSTKMy182/37/KrJniLAyq7uC88GYVD2hlhoDKjZ6JeLPP0D2K9b3s/Hm7V4vBAz/3suWWL0zfxPm/ortREixuo0DG4RcsHYyNEJagod3kfuwfCVOTRrtmQ5Z3FBy3z/vydA62bc1MLnN3OIMpA3s5/eIlEcgR6c45AC8X0jh4oITuBXpi9xTYU0vuzp8gG9VG+gH/tVx0oP1N4nFg891M8/+obdD4dRv9vLC67+GLEhmjwxYcfYseBHNKEKmh1Oipb1KLc0et1h8sy7jPN+SfH6WkbFcdTevkd577YWq1PyImXXimOo+J8h+Bj8f68nU6nF104uOKIr4j9IAd278S2bVux4JtZOJhdBC2lw5ufKRAcZMK3X3+KNX9vFPOX220ukT/zWdR8PJEmvUizpG7x/rp1hEmrQi/2o3OhdDSUkjPaBeGCTkbRdGdAayqYqUDiieRZ9DF29vhxE0/CQoUd164wXCMTFaTGmA46vPBTDp5cmINxPxeKFqed4w3oEaFBcoENHqsThXYFRtKxdaJtuBvXfJaGG+ZlI83fEsigxAPzMzB5RTFuOTsGm+9piV6xmsNpEC8wvdQOKmBtFKfRsGucDD2tEiadEsUWOtBx33IF+res276D3P9t8ScbYTXbhTErqRl85zT0/Kbszscvc7d5IyWNCrVaiZDgEBioAAwNDSER5m1nv+ynX/DspEmYPWcOxj82Hru2b8WOXbuQeSgVf/y5Dj/88IMo+Pyigj/ZaxgWGgZTUJAQc6EhwTiYmoavvmJPoIdsbw9emToV+Xk5WLVmLVatWCH25SfJXyC/8MIUzPxwBiY9OxkZaamHheIzzzyDWV9+ibfeegdzZn8t4r79/ns89PDDeO+dd6gQ3SjimjtBdO87d+58uJ8P/y58b51OEm9ms4hnj+7JiEEhdujvHk8S/aXfh2sJVW58nN4CC3LisbkkFNNTWmO/2duH8FQQoo2FmM2Dge2N+P7mJHx0eYxY99YlsfjxthbolkDCkOcRZMEn1tB+VM6p1QpMvSQOy29Lwg+3JGJwO9qOjM3TWxrw4NAQIfziQjV44cIoJFBZ+9SwKIzsGE7CLp6eLw/GDY/EhBFhtH9LLLwxET0S6JmjfaZfEoPoILpPDuD2wWE4q7UO1/QLx4g2RkwZGY1bh/j7Tp/atUskTR56RbQknLi5pJlsVIVSLXIXzov804ieKqKlyq6NmPXN9xj+v+sxYfwDuHDEcAw//3zcee+DmPrys2gRHQSPy4V9u3aisMyM5L078Psffws7Wq3WwGmzYNOGv/H772vxz7adcCnUQuRxOZmRkowDyemUdyrFKMxupx27t29DcblVjPm4f88OVJCQy89Oxx9rV9P+u8S4kF7ByM3vlWjRsTtijU6sXLsBKirbOBtWUrrN+Sn4Y9MBDBo4ECFiflVaQf9ZWBbnZeHvdX9gNaUpq6CYBKIUhXWJ1zKpQ85oZaDCkGshjhQs7EvzUAH55o85GDXtIG76Pg9XnRuFllqv2BOVmFQwmn1i8Gj4ZWOxaVJ6sL/Mq+y259hJECoQys0zaX+NVo0BiQYs/KsQX+6pgIeb0dDLklJKb6ivaacwHOh/aaEdkxZmIebFA1BEmfDgaUFwUprZyOPBBnhS4egwLYJIAOYUu6EjUbghuQzvbCjH11S4t+DxhI9+8TnpdLfPpQK2Llm7eBd2rjsEDc+RdVKGkeR48P1T02+99IvNchqKRggXzJMmv4hbb70NW0lUdevWTcS/MW0abr7pejz//PPo3W8APv78U3Tr0gU9evfB6ItG4aqrrxZNE/15FvfP2LptB+69737cf+89iI2JRFBIuNimtMTrveMsKy8/n/INlxAnhUWFIp7fQC40/968FQV5mZj87HMY9+h4VFiooFWrsHbdRijcdjw3eTKmvPgS5n+3kLbLQXm5GXp6hydTGk8/Q45266d///6H8zX+5MCi0B9OJs/j31XhduKgKxZ/OLtQDPcYpN+aypNylxpfpLfEc/s7YU1htNj+JA55XMQzRA9H5xgd5t3SAvOvTcS6VAsGvZsOi9mNy7/MwOpkM9be1xqzb0hCYrhGlJcCqxPPXxCDYe10uHdhDnbmOjDnmgTojEq0Cdfi3LYkDqmMNFLZdmlPE0rKHFhKZd3uvAq8vbqYnk8PRnYKxr1nROJxKmsdVJZNHxMlJqjnQd2CSDDyuYa0NqJPohZLd5dhf7EDC7eW45e93j6wEonk+LB5yFmHUelCT5NbvIv9Qz2I0SrQO4iW2eKm919sdwoo6STrV6+ETReDyy8dDSPZt5xNcJ6nIWHVsUtXhIea4LSX4a1XpuCll1/F05OexeNPPou0YjvK85Lx/NMT8MIrU/HpJzPx5MQJeOX1d0iwKhAUpMd3X32E92Z+RSJRReWSGmWFmXiZyqp/9qVTtmjHO1NfxptvvYNnnn4W738wA089+Tje+WQuKVWv8HM5XdBFtMHZ/brgr9UrUFBmE2nTaTRY8+tSOE0JOKNfbzgd3ib/Wkpz+s61eOihh/HujI/x2cfv4+GHxuGPzfth0JMQqKQXJLVHnQvCM6mwURnoifH/vvxJi2oyklpFaBBOBeWgFiSaSHSVkxLUapU4r7MRLVubcFXvIDh8Qou9iOzw4sC1MZmldhyyq3BH9xCERWox/pwIhFEBdzDXRgdXYENqBe7+IRfT/y7C6mw7XPRw0hPqnROQ/9NTzDWwOr0Kb14cg84JWsTwBMFk0JVYPOI8IXo1ukZq0K99ML6/MQE7DpTi90w7gjQKMQPG/V+lYZtdg9W3J0Lp9jXl8UNfW4SqcWa7uhOEFfQSzp3+B5wkpk/GMJKcGBaEuRml+OLFlb4YSWPB5Xbh8fEP4+OPP8LlV1+HN998Cxa7EzoqrPuc1l9sc97ZZ6GszGv8cm0m18TqjprU3OFwonu3Lnht6quYPWc2CovL8c2cr2A0Ut6m4hpNbjajEPsqFSxMuMbU11aIXkOu5Nqxcyf69ukNU1AwEuJi0KljZzFq4s7dO3AwORVPPvkkJk9+DvHRMSLdFhKMl4wZI7xinB6Jlw4dOiAuLk54BauPt2KSPYmhoWHo2DpB/ObCYqMfinNMkW0qaJm9ghQCko1SWTF1TCzOa2/AGW+n4KWluSgsofRTOZVHAuzlH3Jw2hvJGNbZhK+vjhFCUDx+biXuOCMM43/MxvaDFjz9cx6KqHjrHqOhTTywippTr37kcrLC4saGNCuKrXasPWCmMpWumNI/bnEe/t5Rjnf+LEKbSBKROqXoa+/bXRyLT1eUZ0e22YXNmVak5vgGT5LliERyXDoEKRFvUCK1TIFbttqxpcCKi9fbsJjsxOs328GtSFuSKmxv8joqagSVKW6nGfvSstG2cxdEhZjgcTmxbcMfWP7Tz/jll1+wdPmvMNvcYkA8tl1z8gtx16OT8MOCL9ExRouZ776DtHIt3v/wc3zx5dd458Xx+GvFD5i7ZAXZ3Hoh3thEFlBmIGxt+qOgjIhOL8q1gwcP4Jq7x+Gb+Qtw19jh+GP5d1i9cTeVT5yHelBRbsaF/xuL8uwD+P3vrTBR+Wguzsb3S37DkPMvRFJkkLBNlVRmWosz8cKLr6PHWWPx2RezMP/bbzG0RzxmzJiBQitX8sl8py7w/+R1Rmd6GHslGERNpoB+ZxcZSJnlTlw9PAZrH2yN/7VX44Gvs1HII35uLsOYM6Kw9rZEmIvohWKfOxVKuWVO0STUSaVYfoULDnqwJizLw+k9w7FjXBsk0duWWeZGRpEVj/9SiCcvTsDeR1vjp5tbYHhLrXCb20udws1dGRsd9JzuYVh1dxusv7cl0lPL8OaWcpTSOfRGHeZxU5vrE5CeXIKr5uVQIa6E2epCIYlGtdKNq7/MgCHGhAm9TFQqVzo4fe+TaECEoe5c4L/M3YqMg4VQa6V3MFDwfdTp1Vi7eDdSduX6YiWNAS7MgoKDxPe+ffvCLeaa88BMYqukqEjEp6Zniv4UjJvyFhcVtPyb/+v9oeOoVSoYjCZEhocjMakFiooLRSGam0fPBB23uLQMVrPl2PdOFK4KxMTGIjMz0x+FnOws0YcwLDwCXTp3xNNPPSWasb72+jTaNkGMpmnnEeQkx8C/ZfUnsybDhn4nrg+MjIxEfGILMubsuDAyiwoVlfhN/PBP6A8BgcqtexZm48tNpVhxTyu8/L94tInm5jAedIrT4sWxCVh+ewt8vbEE18zO+9f0S066Rhf3/SNxqqWyh8WfyzdnoomHOxTlKhlQvD0tajmOB8HxXxB9ikpQQq9RkvijxIg4rpSlL3RA0c+Jt6ftuCGNd2uJRHI8xOtF79Jj7bT4ZYiJ3i2gwKbAwFVmOEjMXLvRgiwLEKVXYNmQIDzdid73o43P6uCh8oDKJp3a26+P9dLfv/+M+fO/xTdzZuG1197EwXSy/ZQqOOxODD77fAw9vTciIqLgKM3FrgPZOHvUaLSODYGZyqmeZ45E37Zx2Ld7O8yuo8o7H0fKQQUJOQcGnXcRzhnYG1YqP88ddRHCTRocTE4WFaG8jctpR1K77mifGIGVv62kfMyIfds3YG9mKS4ccS7cDru4b0rKcHIy0pBD9n279knYuWUD/ly3EYktW8FaVIC8vCJRtkpqnzq/y6F6FS7tRkYZ10Ly00DPl9nqxOWfHMIZ7x7C8BmH0P2NFLy9rUL055v2cy76vJWCYTMPoffbyZi4oky8DKM/TcPidAc2HCjD6K8yUE6F24I1+ej3ZjIu+PgQuk4/iBsWkHGmUeGVpdno82YKrvo6C4PfS8HXe22w2xzo/HYqdvvmEmR4rjmuJj3tjYM4h853wcxUnPlpJlIqPFi2tRCdXk2m9KWh/1vJGPZZFvaS4OQ0zl5XiGtJHDrpXLsOVaDn6wfw6QGvZ5IRhgplFjy3YV2RuicP37+/Xs45WAuI2ir6Sb94aSXcbFBJGgU2ux3vf/AhFZav4Z2338Tp/QdAp9Vg4OChmDx5Mr788kt8NONdjLrwArF9h3btMXvuN/iC4v/Vh5D+bd2xU4xU+swzk5CacgDnnTtc9CMsKCzDSy+9hJemvEAis0B4n6w2G52b8gPCYrXAQQX5gH59sWX7bkyd+gqemPgEicN0WuvB2UOGYPvu/Zg5cyYWfvcdPvn4I+8xrFYheiTHwoPLhISEnLQg5O245Ue6KxzKqHZokRArugNwBcHomBzotXYSZ95BDgKNeIaovEkrcODBb7Iw6tN0xAWpsPjWeARRWfIBicGW4WoM/ygND87PQkaRAwoSft5nz4PvtpTh7THR6NPehJfOjxaegd15LiHsBrUKxgVUxrxyfhTahJJRRruYHW50jDFhNE+RREKP+92/NDIcQ2j54SHhOFRIz6XVAz2d46HBkbj1rAhc1zOYNCtdPWVtZRYXruplQucWBu8FnOQ9lkiaE6JkILvgzQNWtNADq88KxplRKljYJU/ZNs8zeHqkGn+dG4IYtRuTdpjJNhV7VR96B5VqPSKCgpCRmQErCT4XZSpX3zEOb705HQ/dcyOCjPT++95Vnl81Ijyc3mincJxUVBRz92XER0aLSka320XaVIUIUxCVUw7hZOHsprLdKL5XSi7noXqdluwfp2idoTEGwaRRw+KwHNmM8lNog3DOmf2xf/t67N2XjDWr1yKu8+no3iqCyjNvcz8uT61WnsNbhb9X/YRv5s0Tfec378lA9x5dYCDNUL3KPklNqRfZfWVPEkY6OjX9yN4HzYMiqwuZZU5klDpRzq1/aL0QaFSIHSh0YE8xP/RAlvAQ0qfZhQq3h4wrNzIqvA8WzxCaTvtvzXPAQ/vmWeiB5OPTi5dFx/47yyYmk+d3lI+RXOoSx/zXg69S0svhwc58OzbTcZycBtqfa2LZi8lpzK6g43L6Vd4aEzO9ZCKOD0rvYW65C9lW72TmAtq5VYIeo7p4vRN1wTdv/kEGqRlqni9DEnB0Jg02r0rFb/O3+2IkDZ3xj4zDsOHni+kKJj72GG686WYR/9ykSbjyqqsRHRWN5597DiPOv1DEX3XF/3DjjTejTevWokDiwM1Fe3bvjIcfehi9evfGiBHD8OYbb6J9x84ICwnCJDpW776n4Y7bb8OLL76MYBIqF44YgfPP94rMW2++Gd279URkWCimTXuDxExf3HzTDXj99TcQERWD6MgwvPvOu+jaowfCw8LERPhcO3rd1Veib7/TxTEk/4ab6vJvyqL5RAjDgkJYWDB+UJyLjwt7iQHDWP45qWCIUDtwU2IaZeW8nW+nAMNlhoIrC0kA7sm24qavMnH+hxkwkw694st0XPdFBpLzSKhxGeirVBQYVBi3OAerkh14eVQ0Qmn9DXNy6bo9+GV/Bd5fV4bxZ0dhd66VvpeIbhg/7CnHmmQb7hkYCpWOr9KD9elOPH5uNNJJbN77XZ4oN6+bm4NucUHom6jD1JWF2JdPhTAVcVN+yUeHaAOG8UijEomkSjgHYUG4vRTo90sJjAonVp8dhNQLQ7H2vBAkjwwhMWhCepkNg1eVIcXM29c0i6GzqXjane7I2b8Nv2/YLgZk4RGsuUtBEH0ePrAv+3C7XL5+i25o9UHQ0AYZ2TnQkqjjAWY0JBZzS0sQTKJQy3kObcsVkSoSeTyAmofEHfc59udGnIexZ5CnkOAmpuaifJTabAg1hojKNT/cr77fkHOREKzCpx++h017szBmzCg4fRWkDG+t1xvhoPz76tseoHJzCp599llMfn4KJk+aiNhQvWhFKKl96kUQdojW4dz2JiGUuIAWBSS9TAoWWBz4u29bIda4iYs/noN/e/486vux2/oKYI6nB10c37et//vR8H6Hj8PbcZx/e3/wxTPi+1HnEsfwQ+Lwlv5hoha2Ltj+5yFsWnkQeoPsa1Rb8O+sM6ixcMZ6WM3Sc9MY6NOnF8477zwR2rXv4IsV5TgGDRqEkReMRMdOnX2xZI9rdRg8eDBOP/30w945LiQZjh82bBiGDDlTiD4/LVsk4YKRI9Gejt+1axcSKyYkJSagQ8eOYn2f3r0QEekdnKRN61Yk+IaLc/JomSGh3pEcY2OiMezcc0lEnn84nR3at0NMbJz4LjkWHlyGyxL/73MsVNb41kXHxKBVUgKGRJYgpcyI3wqixLQSXFPIU0sMiyzAkPBCKp/+3XQ00HAeIsoZEmrpJWyweZBX7hICjSshxfrKqIByKkvu/TYHIz9OJzGYie3ZZFjRtjwP75M/5uK8D9Pw7PJ8PLa4QAjcMrMLt36ThQs/zYbL4hEtdOZvL8NFMw7h9vnZOMDCj4Tp7wcqcN7MVDFYzVM/5mPZfhLXHL/fjDPfP4R3/vROoUKp9n1KJBLOHzhXCVLQe0sL3FV8r1mJQavMGLu2BEvTzSQCLfghzYyr/yzBhX9asIfEoL+iR6dgX3z1WyM4nE70G3wOTuscjxlvTcPCZSuQX1iC/Lxs7N69D1a7g8xrOqr3/2HYGxgWFY/WCWFYsWwx9qXli1YGqxcvwLZDRejVpw+JQwVio8KRlXEAW3cdRFHOIXw1ey6Kym2iuwPDI2L//ssi/LJmA1xOK35Y+D3KnWp07NCO0sZuFq56ovOREA2JTsIZfbpi88YNUIfGoV/39rCJ8tSbMvYyRie0RGJsMOZ9/Q1yCkopW1QgNzMFf23cBJe//72k1qkXQcg8MjTCe/bKT+tx4EfwZIuh/9r2ZI/BVOec/4WYN0qnwkNn+oftrn3ef+IneKicV8j3qFbhAWayUorwzZtrfTGSpgg3iZE0bGJI5J155pmir6VfSPm9uhyUHhdlwx60a9MK0dHRsHtUGB2dhXiDGR+ltCXxpIRG6SbjjluDKHBvy2S0DSoly0tN+4vD1QqiApGDv5LxcGXjsaWPiONoyteFucXlJwVxvRz88WxsipKdvnM8fadLEuLzp11lSCuxH9738P78nbfhT183d3+8RwyoI2LE4SQSyREcpAhHhnIzcyflHyoh9kopP1mQrcBdmx24cr0d9291Yk6GAhXeF47yFAXC4EAfo120PqsubhJxwVEtMfGpSeiWaMKM118SrVJuvfVWvP3RPCS274K42DCxXUVFGSosPo8cZWYO6HHbXXcjzJWPO2+5ATfddCOeePkdnDP2Jlx09gCUlZXhzPMvQpTWgWfGP4Db73kQaXk2RIboUGH1Di7FSY4OC8fH01/A1Vdfja+W/I4LLrkaA7q1EfPo2qwWVJjNIu+lG4Kh55wFczEJzv6DEBNmonya+0I7UVZaJrpTGMMT8OgD92LPukW49eabROudO+68B3O//w0qtXRs1BUK+sFq8DgeyyeffIKtW7fSw1eBd955R0xUeSIu/SId320uAfT0EvnimhLi1jo8eGJ4FKaM9M4zVdv8+MVGzHzyFwSF6b0FuqRW4YFHrBYnZv5xJyLjgn2xktrirrvuQkpKishfvvjiC4SGeucSrE3279+P6dOni/eJm3COHj3at6ZhwCLo7rvvxqFDh9CuXTu8/PLLCA5uns/itGnTkJWVJZpO8X1htEoPtrtb4Rf3aXi7+x6oPG7RVUBPAvCvklC8srcLeoQXYmKbA6SZuKeNQjSp0ihdeOlge6wvDheCqDFnp6KQ5/KIR2JTkVEquhg2ngsS6Vcb0GrFIzDmboZbqRVNhB955BE88MADYhuJJBCUlJQgNTUViYmJ/9HiwIvfeA7XKPDZ7gI8kRGMfA/bvr41Sm9fXvHuub35EUeEK+z4uG05zmsRAhuJR9662m8j7aTiidy1ahTk5iA7Nx8KlQYRkZGIiY6E005ik85ZmJ8HXVAoTHqdsEn5XBoND2LlQEpyCqwOJ8IiuNVEHCwk4rh5pkargctmRnLqIWj0IWjTOpHOkQuNIQQmjQ0P3nEXBl9+Jy4ddhoO7E8l2ycRCdERQtxxvlJeVgIrXW5UGIlSym95ELb8vHyYQsOgUyuFV9Vlt6KouAwR0VGiHkqr18NO4jU9IxMWmwNhkVGIj42Gy8kDhvEFS/4L7lqSnp6O1q1b19gu4t+h3njy3Eh6MikJTbB9sHiAXR60jNLg9gFh3shaJi+9BEs/+wd6OZBMnaHkJl/E3OlrRWYrkUjqDxbFixYtgp6MCx49NCIiAq1aJsEQ3RIF5gj8mBtFAtFrmNncSvQJKcVZ0TnYVhiFb3NiSSt5R551eBSwk6E2vu1BjIrJEcZXY369RS7FZQIPJ0r/G5MYlEgaKv63qNjhwZXtw7GsuxVft8zFl0k5+KZlDkboi0XT80uCSjGXljn+a/r8qYcFw1uEijyGs5UavY20k8thF6OEBoVGoGOnTujQvi0iQoNhs1hEs1LOs6JiecAqEoM+ccvn4vn/eLTiNu3ao0vnzoiLChPOHBZvnE047DyYlQ4dOnZGqxbxYjksIhImg5ZEske0mrGYrTAFhaNrt26IiQgRg6eJecPppEGh4YiOCBeClO0ino83KiZaiEEXpYPTotbqERcfJ0QIb8NpVmr0Ik3dunVBfEyUEIN8TEndUK+CsF+SAQ8OCQcq6KHxxTUZfNbDo0Mj0Tq8blzeiz/ZiKxDRaIpo6SuUEBv1OD373di86pkX5xEIqkP2LDIyckRNfwtW7ZEfEICDKYQnBlehJjgYnyTlYBsmx5ahUc0D1WQ8LunZSp0OgvmZydhQXYcQlROr6eQBKOKjjckNJ8tL1aQ3i4A4jwnFojebU6wUSV4HlyPncrCowygw/E1aVtWCTYE2dir78rCk7l3Ekljgd8mfpx5JNF20SEY0z4al3aKxaUd4zC9sxLBnlJMbKvE/zrFifgx7WPQPjJEjEDK+53S2+h7l3kaCB7AhQMLQZZ+/vfc6XDA5aKYo9577k9YeR8v3m14U+9UR7SO9mdPKYtA/uQ+j/FJSQgONohj83oebM27n7eqyUXb8vZimQLng7wdi0F/HB+L43idP46neeJz2mz+83rXSeqGelcO08fEIS5OJxpiN5VCQhgBdg8u6xmCewdF+GJrl21/HMLKhTuh1arphZQvUF3C+RW3iZ/31p8oLznxSIeS5k1xcTHy8vJ8S9xAwiNqZ81m8zGWssViEcFPSWmp7NN4AnjU0bVr14q+MHw/eXS8cI0DV8Rlwk5icGZ6K2GIcd08Nw9VK9x4peNuxJIonJ3WGp9mJtFL7YFJTffZ44ZNE4Jr+kXh5kFhSAhRe4UZdxwiI8v/c/En5/si8DJHksEDuzeeEfG+bY6GjxlPxx7ZPQThRt85OJ7SHqRXYmS3ELSK0Ij4ysfxH0nEcTg6nr4cHcccifd9Pxzni/dudvh75Xjvfke2YaqKF3EcKsXTh/cPi2v64EWJpLHjt7h4fusKekcr6LOI8oi4UANW9LKjXagORXa3iOf1PLJxIPELqsPBF8/4447mX9ufxHoOPNooN91+fPLLuPi8gUK0+betjH97P/7l6sQdvU5S+9RrH0I/i3aW4ZIv0rnsFZ3qGzPidtJ1qOg6Uh5vh6RQjW9N7fLstXOx6+8MaHRyEvr6gA03u92J6x8/C6Nv6eeLlQSaxt6HcMny5Zjz9ddk2LswdOgQ3HHHXVi1Zg0+mjFD9PvjeREHDx6E/102FkqlSszJVFJciNtvvxNbd+7C22+8jheen4zYuATfEb01ubIPoZcHH3wQCxYsoPxXhUsuuQTnnHMOzNwUiaSHUenGzdt7otCqxw0tD2FsbCbKXd78WUuiMNeuw0fpLbCpKBI9wwoxMjIHNrUJt4/qC5tHL8qnLTnluPXjLDwyJhb/pFnxG5VdYgoiboVKeYCAB3Uhw69nCwPGdNXghWUl3q4RDBuCvJlvJGt/Vu2xunHTwDB8ekUCvtxUgBu+yAL0anBHnPvPjcJbdL5HlmTjjZ8LObHe4zBcXnLgc3PgaA6V4/3npEWRNoau5fAxOIq35U9K9zHbchx/5X043fyd9xXb0HWJdbTsPw8di8tx4en0n8MXz58JJGyfPicYd8/No/vCTVhpe+9Wx0Uc5ST7EHJFAPcjleVg44X773HFTn1QnT6E/wU/s/wE8mPvfw2aCt53i0d1lh68hkIg+hA2CEHIvLYqH+O/zRFDXTfmB0zU7FKYd1MSxvaom4noN686iKevmouwSOO/p7uQ1Cku9nLTv8823wedvm4qApobjV0Qnk0C5aMZHyCpVWts3vwPBp4xAF9/Mxe7tm3FhAkTkZOXhwcffhjnnTkQD4+bgM/pGgsL8vDAQ4/QecfgrttuxJhLxvqO5kUKwiP4BaHBYEAI3YOHHnoQWnpW2INvULmwpTQEz+3tIrZ9pct2dAoqh9lFooTgZqScfd+wrTdsTi1gV6BHWz3mXxOJTq8eAIrdMMZoEEpC7bd7WmFbmhmvrCrExlQrerXQ45x2QSglAffVPyWwkUB8l0Tcpd11uHNBHpbuZe+vAhd3D0b7KA0WbC3B/hyHEIpc3LEgvJkE4asXRdHxFQibtA9mK6/w4Pf7Wwnv4Xt/FGPasny0S/JO26TXKjFvSwmyi5yIC9cgNliFGJMGXWK1mLWxBIVlToQGq3FmawN6Jeixcn8F1qZY2I5DmygtRnYMQonVgXyzG2so3mxxYTSlr1usDisPVmDdXguCw9S0zPOQeTCwlRHfbS+Fw63E5T2CsCmjAqtpGx6kRqtR4MbTwmCgz3lbSpFVaEccnYPnH2sRpkUipX8O3ZdCOtdDZ0bgjdERGPNZJqXHhkI674nKLWGknKQgZDH4zz//CANJ0rjg3ywtLQ1t2rQRlTn1QaAEYVPGLxukGGw4NClByDywKBtv/5IPGBufl0vcRK4RdXgw/bJYPDg4UsTXNuUlFky4eBbys8rI8PGNFy6pN7jJ6IhreuHul873xUgCSWMXhBeMHoV7br8Vo8dcSkvePG7ON9/g4IG9eGLiU2J5/8FUTJwwDrO+/BwLv1+MfXv3wk6ir12rJNx0821im8o0ZkHIhjs3leV5IAOBXxDyKKMOhx2nn3cRrr7wXFRYSJAR7CWcnx2HWWmtScTY8VCbgxgYWiwGmFGQIOSM/M4dvVDspLyUisZIKos2PNQKh0jg3PltHnYfsqBnGyN+vbMldmbbhPj7anMp5l2bSOLGjJGdgpBVasOttO18iuseq8Zs2ua11YV4+5IEmOiw69PsuHVAEG6Yk44Vex1QkIhiQXjHkHAM72wg3ajExpQyvLK0CIO7heCVUWH4PcWOwnIPpi7LwZxbWyKl0IG2ERr0TlSh09RUEp4hWHBdEr7ZUoTYED2CtQ6cRvHXDIrERR1N2Jppw3PnR+Hiz1Px8z47Mp9qh1kbitG/tRE9YtRo9/JBPHJuNIaQ2FxKIu+RsyJw8+xD2J7rQurE9vhlXwUKSLiN7R6E9ek27Mmz4abTQtDm5f1IKXJj00Ot8fchM8xU/t3UPwSJz+3DhT3DMO+qBMyi+9MqXI0gnQunv5WOGWMTcENvE95YW4R5W4vxd6rz3xPwV4EoX+Uoo80Czt9ZkJ111lm+mLpFCkJJY6TRjzJ6NNNHx+KsrmTI2Ll/gSgCGgUipZxeKtQnjIiqMzHI/Pj5ZmQmF0HDo8dJ6h1jsA4rF2zH3s2ZvhiJ5AgP3P8QCcBv8RAZsbt2bvdGktCsnN8lJSXCYDQiLz9fTAD894aNSNm3p0ox2Njh/pGTJ0/GypUrfTGBgcW7mgTeykwdtptDRJNQxkLCb1RMLi5LSiORrcabqW3xXW4seBAZ9uAty49GscPn3SeNUlDuxOVfZKLEqsBf97fGo+dHYOvucvyWYsHX/5Ri5m8FJDbduH52JmZvKsXH60vQKYYnhHfgtVWFSC4sx6PzcmDQaTCotQEfrivC/C2l2JvnxGgSj6Ivog92krEn83M6xrWnUYGuA+4ZFIavNpSgxMLTYNAGlMZ7vs3GB38W4fONJdCqNQjXq8BzQe/IKcXVX2XilvmZCDXpEByiwde07xM/5uHrTSVYnWzBkJYqRJtUKLLYMO7bLExdWYS9+WUot3pwVa8gLNhahG+3luKvNCsuo2Uegj6jwoVrZmfg2jmZ8JDRcdeCDNw8KwM/7iNxHKtFj3g9+sSr8R5d2+x/ymBxKTC0tY7uL5BRasf1H6bg2rlZaBmqgsvjwksrClBss+Kx+VlCDIo2dRKJD3+/tPqC82IZZGjMoaY0KA8hU2Zz4dIvMvArFZoIahyeQtFXwubGNQOo8L460Rdb+7AQfOLSWbBTyavivhySBoG1wo5uA1vg2VlX+mIkgaIpzEOYm1+Ar7/+Gmt/X4kZH8zAb6t+x57d2/HkE0+L9eVmM+658068Me01/LpyNeWrW1CQX4SR55+Di49qLso0Zg/hhg0b8PDDDyM8PBxXXnklrr32Wt+amuH3EIrrd1qR1eFqRJ1zK56I34AQtVMM864C9yd04ZvceMzKSKIbqESXECpvKH6vmUQQiS5/sSO6AA1hkeoAAP/0SURBVFDezuLwmjMi8P6lUWg3ZS/eu6Y1Vuwuw/skCMMjNZh/QxIKSTiVkrA6q60LnV7NwPmdw/HUeXoMei0Lfdub8MvtSfh8QxlrOtGlcPnuUizeboZCqxQewrvOjMD5nQy49JN0lL/aGbfMPYTpFyfS+fbh0fPi4CTx+NKPOfji5hZoGabGjlw7LukWjJ6vHcCZbYPw2Nk6DHojGy3i9FhyW0v0f+0griJhef8Z4ViVUoELOwXjx52ZGLfYBs/UjvhhVxmJVwOm/JqDxTvN2P9ke3y3pRiFFiBEr8TiXSXYluXEsjtaoNNLB6ChRJdM6QTj+J1CmH5xfQKWbStCkVODH2+Kw/O/FiGYxGmQToEXf85D39YmPDk0HH0n70N4ohGpE2IR+/whtIk04fe7IhH5ZArdCPVJdXMQRor0EDYL9u3bh8zMzHrzEHIf1J07d9LzLrt9SBoPbJ9wa5vevXvDZDL5YqtHgxOEjMPpwc3zMvHV2iLApBJVpw1RFopb56IvJAgnXxCNJ8+LFrW8dcWUmxdg69oUaHRUqNaycG6I97+6BORBPwm4gsBmdeLOKcMw7MpevlhJIGjMgtBmt4smGRqtdxqasZdfjpdfmoIt23bSOXZjwvjHRfz7H36EnVs24e133sOXs2ahuKgA11x3E0ZfdAE+eOdt9OxzmtjOT2MXhBMmTBAFGBtiF1xwAe6//37RB7AmVBaEChKEBV2uQG6vceipS8bj7Q6IfoJ2EjP8O7BX8Km9nbCnotK9Yk8hZXac33moHOqeoEOkQYFV+y0Y2sGIpbckImnyHnxwTSvszbLg6UV5GNUnFDMviUDiUwfwv9Mj8eqFJnR+LQMjO4XghfND0f/NQ0gI12PdfS1x+WfpWLOtAsHRauEctNI5WBCxILx7aARGdTHgoumpmHpdCzw6JBxz/snH1e9l4vlrE1FmdtNyMf68rxVOm3YAcREGfHdjIvq9kYwz25jwxLk69J+WjVZxBiy9vSV6vLQfv93TEiv3FGPSvHz89kQHbErNxZztSsy5JhYfri9BeokDczaVkSb24ODEdnhySSZmry2HIVQNHsu2TYQWy+5sgY5T9otKx7IXSBBO3AUe6HbODYlYsqMQa9NcODC+FUKe3oeyIjciozUoKLLjioERePqsCPR4di+ikkgQPhaHqMmpaBtpxPr7EhD5zEHxW3DP6xOVX1IQNh/qWxAynKcGyDSWSOoUHlCtpnqgQbqVNGoFZl2diHuGRXkjnFxkNCy8YtCbqg+vjMfTw+pWDO7akI5/VpMY1HK/wdo5sZKOq6K/fJUu+ufwuBttcFLgC+Hr4euqVejwPBfkN2/9CUuF3Rcpae7kFZfitttvw8cffYSnn3kGLRPj0bJFSxIEwPp164XofPzxiVi3ZhXuve9+sY+TLO8KsxmR4aF4dMITmDzlRRTm54p1VcEFgVrdePoSc+HFcP8HFve//vornnzySdEXImCQ2NlaGobn9nVAuUsFvdINLYUK+m7z+IpAIQQ5iP9eKI/nPoQfXp6ILePaYvY1iXh9ZS6KCoEft5fjjtMj8Ml1iVh30IwCqworHmmLF0ZGwUwiT6NSYEu2FaEGPTY93BoVNjte/q0QX1+bhGXjWmPl3S1xRkudt0KRoZPaqJwrs1Ea6JxfbihGrtmBD/8uFaOYOqisIdmIQ3l27M13YfFtrfHxZXGw0fYif6a0FvMgNPT78zQm3NSVy1Fuwnlt/ygSg+3RLUaHMrsHqSTWWoerMaSVAdf1DkXyU60Rws1Tv83FtNFJWDGuDXaMb4fzO+hgsbtRXOHiw4pj59B3+qkEpXQsBT28BzOtmLq2FDvGtcdvD7fBWhKhEWF0b+k+lNP+XDByeVlgcdN9USKt2IEDxaD70grntdccuQcSSQOB8yXOR2WQobGFU3EONUgPYWU+p4LxoR9yUFzsbBAjkIrilwswKuhaUQH78RXxVKjVzD1bUypKrXj17u+xY10aDKbAT3rPgon/5bqKkerMQ46zCBVui6jJbazwNRkVekSpQ9BBk4BIVYi4RpcYSz3w8GtVUWrD2PvOwNXjhsBNBl1g3rRjYUNRpVY1ixFmG3uTUe4PePDAfuj1OpxPx9IbjEjPzMJff/5Bv58SUZGRYuRRjdabf+6lc5eXl6Jv775i+aeffkbvnt0QU8W0Ezw6X0JCgrhH7CFr6AMicJOsHTt24P333xceQb6//N6w54eHnJ82bZroIF8dqvQQ9nmY1FYR3Sg1IvQWXBufgXZGC77PjcGKQm+lY1XFinhfXW7oNErEBalJ3LhQUEKZv442puIoJphrYoGcEhJfWgVahmqQQmJHR0LMQpt5HG4EG1QI1ytxqIx2sLkREaxGGAm+ItqgyEy/D+lh/3XrSUQaaN8iK8XT/xAq70r5O53DqFbyYJ4oE8setA3XIqvMQZsphKeRm6DyvsVULnG+FkZpLCLBxitjQjRiBoksEnPcBPap4ZHol6jGJe9n0LWo4Hm9K7q9sR87U2wIClEjmtJncXiQXeKAUqNApF6FPCtfEBBF3/P5OxFE18x1orwt959PjNJCSycqMDtF01ktrQ/mZb4ZlDdFkLAtZMHrpnV0rXFBKuSYXbCx2K3qB6gE7SU9hM2EhuAhlEiaIw1eEDI5VPBdNTsTK/dWeCO4dKMC5L+LkMAjbpWTAhVudw8Mx3MjohDNw8bVMYs/3YDPXlgJvVFzwoL0ZOFL4+vTKFUoI/H3j+0gDjq4lp4fD64Sruu7XVuwMaNEgioKvXRtEacOh6OWqqh5jh72fITHmeiR8Rp9tQH7DoKCtWjTLRad+ydiyKj2otkqx/PzoVQ1Ho/RiWgKfQgDDQvCO++8E9nZ2eJ5Y0O5tp61QMM1mv6yonJeZrPZSFBocccdd+DCCy/0xZ6Y4wlCBQtCOrzHTXkZd+JT0v1x86dXcB05878Rt1Fkjt5lzgo5neL+0q5iR66IofdNbOM/kPikP/59OQtleB+G11OofM3imOIYHOf/7lvm4/NX9rZVeS5CxB21L1P5nCS+eiTp8enlCWKKDC0pyb9SKvDo0jw6rnczsS/jT3PlYx3+Tn84vfydz+m/H4w/zpcOkebD1+bboNJ9qXwPjgdvKgVh86C+BSE/q7LJqKSxcipewkYhCBmrw41P/i7GyysLkJZrB7RUkqjqRhSKW8RVoRT6tDJi4jmRuLxn3cwxeDRZqcV46bZvkZtW7Gsueurw9fEl6ul4efYyrLHuQJGzmNawRcAlNj8idXGnaxu6DjYGhXnhpsdHjSH6bmitiSFJyHGBh0Why8mFiy+iFvBfkd3qRst2Ojz0TLSIY7uRxaAuKAzGqCQExbeFShN4j3JdIgVh1bBhvGnTpoDnu7UNF17sKTy6AGPvJpclY8aMwX333SeE7snw34KQhYlvQ8aXrzWFnO1kEWWZ04NgowoxQWrYXG6kFzq9WT3dnxraEbWO+NmkIGwW1Lcg5HyH03CyeY5E0lDgEXq7dOkiWtjUhEYjCP2UWp2Y9nsRpq4qhLnYQSqGXloetpoLMi7QvJudEt47Qn/4k5vDkBiNjNLi9YticHmPEBhZjNYTM5/5GT9/tQW6AHoH3WQUGAxaDLq4Cx7+dCZKXeV0L0VbJt8WTRH+fd3iuTnX0Bet1DGwe7zDXQfqvtY1DrsH8YnAnfd70y+eY/rDrzjX0mv0wYjvNxym6BZifWNECsKq4XmzVq9eLfocNpbnl8Ug9xVctWoV9Hq9L9ZbqJWWluLee+8VI49WhxMJQglnCb6yjT16fEtEcdZwxSDDyZWCsHlQ34KwuLhYlDHc/F7OQyhpLHAFRkZGBtq0aYOwsDBfbPVodILQj9PlwddbSvHyb/nYlWvzNuUUwpDCMXqt6sKuykvn99/fJIeOd14HEx4cEoGLOpvq3dDKPFiEu8+cgaAwA5R8rQGA74HT7sagCzthuyEZH378A2Ag46y5GE8kCjVQ43xTP0SqgmB3usS9bYyi0OFgQajAXQ+qhZ1X+fHm39njdlFwI6brQER1GeBb07iQgrBpsWXLFmHUs4BjuKkof+e4M844Q8RVBykImyYiK5OCsFlQ34JQTkwvaYywIGxSE9NXBzUZ7Tf0DcXWR9pi7T2t8ch5UegcqxMd3UXzThaI7N0TTT3dojP90UF0HfNvx58kBMN0SvRvbcBzF0Rj80Nt8MvtLTG6S1CDEAifPv8bNDpVwMQgw00ao+NDEHVaMOYsWg3wkPjNyXCia3XAjk3WfdBqNOjSP8k3AAw9D00Ifn4VSn521Mjb/ReKkn2Toksk9Yh/Emp+3+x2O1q1aoVJkybVSAxKJBKJRCKpGY1WEPpRKxUY1NqI10fFYtej7bB9XDvMuyEJ48+JwiU9gzGA1rWN1iE2RI0ogxKReiWijCrEharRKU6Lwe2MuKJPCF64MAbf39QC2x5ti/X3tcEzw6LRO+FIM6b6ZvfGDGxccQD6AI8qytJPqVJi9verUVZQCjGUXbOC74AKmc48ZFmKcNGNfdG+VxzsVqd3dRPCKwq9I/Xmbl8Dt93mWyOR1B9cC89isEePHnjppZfQrVs33xqJRCKRSCR1QZOz/luFazC2RwheHRWDhTe2wLp7W2PLg22w7aG22DquLf6hwJ+8vOmBNlhzd2vMvS4JT54bhTFdg5EUqvEdqWHxx+LdwpAX+iWAqEgAZmcVYcW6bYCumXkHK+PxINWaKwT3bc+eB6fDJbynTRKlCi5rOYoP7fRFSCT1A4/mZ7FYxOAxzz//PMLDw31rJBKJpKHibUXE/06W6m4fWLzplUj+i2bhDgrSKREdpEJ8iEYIvvhgNaJMKhh58qZGgMvlwcEdOVBrVdwb0hcbGPh4DoUTdnXT84idNEJoK1DsKofN6kDLTtE47Zy2sFn4njS9TJSfIJVGh5z9O5CdlemNlEjqAR4E5/bbbxfTZvA0ExKJRFIbcJ/TwPQJZJtAAaXCa4+drMir7vYnQ1VH8scJASpEIAdKL0+PI5H8B82tfWCjpLSgAkW5FQF/of0ZkxMuuDzcobJ5ZxhWjx1uXy3ajU+eC51BRQarP3ttWijVahTnpOF/F4/Bu++954uVSOqWAQMG4NZbb5VDvEskksPUxpgNGzduxAcffCAGrTk1FFAr9GKQco3SIETeiVApNCTOeHsjSzNf7KmhUCih5TnnfMuMUqU6HKfT62Ew8OCOCqiUPL2Pjj5lPis5PvLpaARwLY/T6a6VTNIL5VRiTq7mjLfmzn8XktpH4LL7BsJucTTNphZ0SaEhwXTVbjw+4XHMmDHDt0IiqTt46gmJJJBwM2QO7A2Soe4D3/tTwWvvOMVnVcevSWBUJJbS0tIwc+ZMvPfee9i9e7fou1xd1Eo9dhUuwptbu2B99odkRHvzMK/9cMRW8C8rSQxmV2zHjB2DsTT1Ed9av71RM9uCxaClogTbd+yAnQdIJNNQpVahKDcD23btgYtsxT9WLMdPv/4JnTEIybs34N6778Xm/Wli8LwmadNITplGO+1Ec6K8xIqnr5iN7NRi0Ww0kCgpJylylWGJ+W+vd6zWRGcDx+1ClCcMy794Fn3PbiuiygrNeObquchMLoRW3zD7llbmv6adOBr2NpdV2HDf618iM68Q0VFRmD9/vhjlsSEjp52Q/Bdy2ommicjKTmLaCY775ZdfhB1SexWokuPB95xFVosWLTB06FBfbPXgKScWLlyImJgYsRwIE5UrnnJzc8WxOY08vQ3Tp08fjB07VohFPyeadkKrCsG83ddjb+mP6Bx2MUa3nS7yFvb8kYQVgZf8nkAVPas78udjceo4xOg74OqO86FRHZk4nLevLmqNFgc3r8RTr76Pp155D91bR8FpLsaT4x+BLaQNJj89DtOeeRDpjmh8+N6b2P/3Mjz/8kzc8+QzGNi9Haw2u3w/mhiBmHZCCsJGwku3fYvNq5KhM5y6MOEf3J8VSEHoowpByKxdvAfT7l8Eg0krJndvyJysIORXXqfVYHdKJh57dz5sVIBzATl58mTceOONvq0aJlIQSv4LKQibJiIrOwlByHlbaWnpKXupJDWDhVVBQYGYX/TSSy/1xVYfFmWB/A25f/KGDRuwfPly4X2MiopC37590bt3b0RHR/u28nIiQagjQThrx1ikmdeiU9goXNT2DWiUJpQ5cqBT+qYoUyhhd5RCrdKJ7bcVfoOlyY8hSt8RV3WaDYMqAmZXEdlfStpGT89t9a5VrdXh4MaVePKVd/HstI/Qq1UQ3n75GfyyORePP/0UBnRvjaysdNhcKrRMSsJeEo9TXv0Id018Cmd0ayckq0athI3eIVdTHTyvmdGs5yFsbvQ7ty0cdldAasskJ8/gizqh15mtYbd5m7A0FfQaNf7ccRBmq01kJFzwsdCSSCSSxgob42wMRUREyFAPge99WFgYNJpTq7gO9G8YFBQkKhF5FOMLLrgADz30EIYPH36MGDxZvN5AMqAVKqiVBuwuWoTPdp6LX9OfEU1E8y17MffAlViw7yaxnrfn6iiFwgONwoQcy3bM2j0Ki5LvgdlRQOvYQ1l9+0KpVFFZDiz8ciYW/b4D4yZORL8uLeGh86xb8TNW/74RKu2/fwuDyYitf/yMSZMmIzUv8GNTSBovUhA2EvoN74CgUJ2YNP1UYFEjX//qccmdp4smo01hGgq+Ao1KhVKLDSs3+aYyIVgUGo1HmrFIJBKJRFJdqvKqNQQ6deokRjQ+99xzT7kFG5ejXHYqFVpsK5yH39Imo8xRiBL7IVqjRKH1IIosh5Bl2QSn20o2l7ecVSn0yDJvwg8p96HQkooyezpcHiv0JMr0ZI1XSxbSIbU6Lf5atRTzl/2B/11/D87s21G0+FFrlNi+aQM2bdkOZSVxbjAGI2XbGrz13ococukRFUZlfuM3ayQBQgrCRkJ4tAljHxiEkgKz9BLWMT0Ht8KIq3vAUmZv1Pee066iQkytVuGr5X8gJTMPapXXO8gFZP/+/X1bSiQSiUTSdGBPYSDnOVWTGEwr/xMrDr2AckcRWgT3xYgWr0Cj0tNaDxnXGhKMavrmtRnYm1hqz8ai5HtRYslAhKEthrV4EbH6Vvgx14E3DwCFdo8YouZkrAyFUgW1x4b5c2YjKK41br/+UlgtbB9613O/SbXmyKBdvFxwaCcmPv0iYrqfgxefGY9grRKuBirgJXWPFISNiItv648B53eApdwBTw28VZwx+T1Ckupx7WNnoVO/BO+9b6SiUEMFgkqlwPzf/sbsn9ZBr/PO+1ZeXo6zzz4bZ555pliWSCQSiURyfLiZp81VDrfHSZaVBWfGT0SkoQPcbh6wxm9nVba3lHC4zbA7rfAo3OgTdQPahZ4Ns8uGqQcV+CLdg88PuWBih95JmBgelwtOpQ6XX3UVStP34d1P58JkMpGN59ug0rnZ7vO47Jj5/gdwhLXHk+PvgUHhoLS4pE0oOYwUhI2M+1+7AL2HtobV4oDL6aZc4eTESSN2bNUpx7tNKrUSd00ZgZAIA2xWZ4NtFiPwuOm/yxfc9JJ7QMlHWUUF3pr7M2YsXAGngwoTh0MMAsVNaZ599tl/jbQmkUgkEonkeHCLGw2VrVoqYw34I3s6Sm3pohlp1XCFPKBXh0DhUWFL/ldIL98Ao0qPMbHAgAglzo1mkenb/CSw2+zoP/RCjDqnPxbP+QRrt6WKaSWOlnhcia1Ua3HW0MGw5h3A0p9XQaHReoWibxuJRArCRkZ4TBCe/mwsrn30LNGh2Gp2kTD0CI+h8Fwd5+3mjOhkJlBtzvDdUf+HKGrdJQZvLL0ZQ0d3hdtBmbGF5zg6cu/rO5D+A9wKaHVG6AwmaAxGeFQapOaVYd6qrZg4YxGWbdgLU3AwoqOj0KNHD0yYMAFLly5FQkKC9yIlEolEIpH8B244PDYkBfXH8BYvQKc2IK10PVZlvgS3x0W2hN+0PmKQcXywJhZj2r6DEF0sCq3J+C19MgptOXiwjQpvdPOgT5gCVrfXXjshtA1X+NpdClxx463o3Socb06bisxiM3RVDOrDc1mfPfoKXDK0N2Z/MhNrNu+DyaCjw0hJKPEiBWGAycrKwqFDh8QEqLUVMrLSMfjyFnhw5jkYdFkSgqO9I165bB4hUuzmagSLB07ajwVFs4fehqysbGTnZlV53zlYPMW4bHxPXDe5HxK66qDmykDKmF0Ouo92ynTrJZAYdAJ6IxCUFAplx7Og6nQONJ3OhaH7cCQNvgSjbrofr739Pr7/dj7mzJ6NWbNm4a233sLll1+OoqKiKq/1ZAIPz83DjEskDQ2ZozVB5I8qaQBwP0Gn20JFvxqdwi/C0IQJJBHt2F3wAw6WrIBaqYbLY6fgoGeW7Cv65yQBCaUCsaaeGNnqNbIbPEgvX49tBfNoLQ9yoyCRKcyJk4JbANntDjgddqiMkRj/+HhYM3dj+lszUVRO53Y54XDS+Qm3ywWbzYrSMgtuuvdR9GodjNemvICUfB5lVMoAiRc5D2GAWbJkCfLz82u/+R3lGmqNStQksRipKHChvNAJp9Wbo5xspsIesfSCEkxf+htlXhRxUlVTTRDKXGOUEZhww1Ah9JycMx8Hno9QrVUJz6ClhDJlswe2crfw1Ho38H7UJRqtAsFRaihJoCrVCi6DBJwU4R1WKI/5afnVP9W5nhwOh2hyOmjQIF9M7SLnIZT8F8fMQ9j1auSeNg7geQjr48WUBA61ES1/fQCm3I3HnYdQUv+w/bNu3TpcdNFFvpjGxYnmIVQrdNhf8guWpz6GwQnj0DPyaujUJszfexMKrPswuu170KuCsPDgHQjWxuPydl8h27IF3x+4E23DzsGQhPG0Pgyr0l/CzqKFOCtxIjqFXQCH23bS5pdKrUHWwa14/5M5uOme8WgTHwK9Vo/ff1qAhcs34Pb778eWn+ch0x6ORx6+BanbN+CTzxdgzPU347Su7ZC5bxsJxxkYdOk1OH9QX9EfUdK4kRPTN0CWLVuGvLy8OuuPJTIQ+kP2Pj0Q9LWac8rwKJPJGcWY8NqPcHKe0FznpCFBGKuKwOM3nkOCUPufgtAPCwS+7yLU922j5HLZxW9zTQYcqik8yW+HDh0wcOBAX0ztIgWh5L/4lyB02VDc+nzkd70WSnsZrW2meVsTwaPWIeHv12Ao2EOCUC0FYQOlqQtCRq1gD6EdGqUODo+FYpTQUJzDbYFKqREeQTat1Qq1aFqqhJqWXWReaYQnkderFUY4PVb61Hi9h9WBjq3SaGEyGGA2l1M57IKHyie93gCdVg2L2QyNTk85ngcV5RViW6PRAKu5AnaHE2qtd1+71QKr3etFlDRupCBsgLAgrBMPYRXU5JfUqJVIySzGxDeXwsV5XzMXhBNvOgfxXXXC63rSsAjzfa1P6kOUsodQCkJJQ6GyIOQMUeFxchMKKQUbOd78lcxbNfeNUollKQgbJk1fEPLTxyMycFcdNwX/0+n95/Z49+FWObwt//Ov8y7554I+ElcjKH/z78llE1OVOS/WHb1tFftKGjeBEIT8xEqaCPxeVzdIAkAV97U+gkTS3GHj5rCBQ58epRoejQFuDuoABv8xAxWqOkdNQlXHbgKBf0OPRk+/qfpwZicNWUn9wM8dSUGPi/7+W+yxGPTnQR4e7du3nuF1R5b9x6jaA3lS+M5T+T3wL1cOvhX/vSyRENJDGGDq00NYE7jJqPQQEqfiIWzGSA+hpCFx880346uvvkJQUJAv5gg8MbNWe7wh4U8efuY5BAp+rgwGg2+p5tjtdtGEu7nAHsKnnnoKTzzxhC9G0hBoDk1GJZKGhmwy2gCRgrCRIgVhjZCCUNKQSE5OFn24WfxVhpf5udm2bdspiUIWXK1atRJTtgRCFPIzZbPZsHr16sPL1YWLcA7du3dHUlLSKQ8U1VhgYz0uLk5cs6ThIAWhRFL3SEHYAJGCsJEiBWGNkIJQ0ljYvXs3tmzZcsqCsGvXrujWrZsvJjB8++234rMmgpDhdPXp0wft27f3xUgk9UNTEoTNpXJF0vhhzSEFYQNDCsJGihSENUIKQkkg+Oyzz0TZwbWcgcYvsjIyMlBeXn5KeTN7DEJCQpCQkBAQY5HTxmKOPZv+5ZrgT1d8fLz0alQTvv/saeQ5WSWnTmMXhMXFxWKOXfY8y3dJ0ljgspOfW27BIgVhA0EKwhogHsFK560PTSoFYY2QglASCG666SZRmGk0PIpk7cB5ck0FV2XYSAykochpCkR5Eeh0NRcsFguGDBmCKVOm+GIkp0JT8BDu3bsXUVFR8n2SNBpYEObk5KBLly41tovkKKOS+kXoLjaG2FDjQI+k1GISSbOCm2FygcaDq+j1+loJLDa5L+GpBm5yWtXxaxq4cqOq81Q3BDpdzSXwfevXr5/vSZQ0dzgPio6OPlxRI4MMjSHw8xobGwuj0eh7kquP9BAGmEB4CAP0k5wU/nkIn3hzKZxuEmR16SH00LkUbkSqChCkrOCnETa3DvnOaDg9WrGuznC7EMMewmpMTN9UOBWvifQQSgLBxo0bMXHiRGGM1UazUYmkKnhkVjagPvzwQ4SFhfliJadCY/cQSiTNFVnyNlD8zX9qO7i4nSgJUI9vEtU6g8SgRmlDW+1BxGpyYFRVwKg0I0JdiPa6fQhSlXgFYx2i8vCEx1Xfp6YauPKhLisgJJKqOO2003DllVeKPn7cp8v/XAYqBJKqjn+qIVBUdWwZqg5cmcWVPLfccosUgxKJpNkjPYQB5lQ9hDxQAddYDho0SBRYtQ33IczKK8aIm15GQR6JME0d9H3kJ44K4pbaZOEZdB9VL8FTvLpInB20tYXTo+GnVMTWHnR8txPtlS3xwWu3oNuQBDjsTXt0MTaE2PDetGmT6ENTU6+M9BBKAsm7776LX3/9FWazOWCeQv7dAul15CKTK1MCRSDT5xc7ASrWmzQ8V+Wtt96K888/3xcjCQSN3UPI7w6Xa/IdkjQ2uCzhrhH8WROkIAwwpyoI2Ujn2sq6NjrPvvxJrFq1ETCd+gTJJ8SjgE5hQRtdMj2BHHH0w+sRorDAGYlcRwKt5smWa1EQ8ivgcWCQuhdmfHY3up/Zwrei6bNo0SKUlpbW+HmVglASaHjI9zVr1oj7zvlhTQs3hvflSrbCwsKAjArKxaXJZBLPXSBEoT99ubm5p3SdftgYiIyMlMbscfD/fh07dsTQoUPFwCGSwNLYBWFZWRl27twp+uVKJI0FLj+4cr9Xr16isqsmSEEYYAIhCNnYGDNmjC+mbnj3ix9x36NvAUY9P1m+2FqCBGGIqghJ2gyfd7BqQVjhMuGQvR2tZk9pbaWJxaAHBuhwoa4/npwxFn3ObuNb17ThZ23JkiWimZ70EB4fKQgbN+xt/Pnnn0/JE+6Hn3cexa1v376+mFOH38P58+eL5+tURCELVG5dUtdlh0RSmcYuCHnaiUOHDsl5CCWNCtYcPFI3z0NY0ybwgWtHI2nUXHbBIHTo3Aqw2X0xtQkZPuIv10VUZQB54xSiqWgtI07hQWddCxiVeu5BKKIlEknToKioSIhBFkxs4J1qYAEXSKo6R00CXx9X7rAAlkgkNaNypYy/kkYGGRp6qPy81hQpCCWCuOgwvPnknYCDjB1PXYgifmhr/uCeOl7PIDx2tNUkoIemNRwIrKEnkUjqH67x59EkGyqBbN7JHkyeR00ikdQd/jeYK7nVCg8Z1hxz7HsduDddIgk8UhBKDtM9oSX6mnpB6aHHwuNiS8Ubmkw2xtfDH/7rcqODtg0GG7rBTZl4U7lKiURyBBZIp1Jr2ljga2RxWVBQ4IupH1iUzpkzBzabzRcjkTRd2G5gAahTsg2hQKYVMLt4nATASHEGCjqyLzQUeBxz3kPaGpKGiBSEksNYnA500CTgbEMvBKt4ckv2FFIQAoo/AxREw8wTZ4neLfjcgTo/H5G9gG7RPLSPrgMGGjp7zyLWSSSSpgYPmnSqTWkaC3yN3Gy0Pvn222/FaLGzZs3yxUgkTRcWeUaypL/PV+Om3VoM26rBBdu0eCxZgwV5SizKV+LnIhX2WJRQUxZkoG1ZQEqLQ9LQkIJQUgme7sGFFpooXGIcjMGGHmiljkOIKgh6pRY6qCloAhI0Cs5Gj58l8hoVFLxllftXN+gphKhMSFTHCo/gaNMA9Na3FcJUZs0SSdOE+/v5BWFzgAfNYY9ooPs5niw8SJV/sCceKIfFoUTSVOEmojx84POH1LhhqxY/5gDZViV2lHkwI0WFG7dpcC0JxLG0bvAmLS7crse3+SohIDUBsjy4MtsfJJJTQQpCyb/gLMoJF+V0HrTXxGOosQdGGftjjOkMjAkeTGHQKYdL6Dh9dW3hYK9dlVmiB27K3MKUQRgbfBbtM/CYY9Qk8HWca+xJ15UIrUJD55cjiEkkTRkeYIUHlGlqgvB4xh8LQh7p22q1+mLqjvXr1+Ozzz4TaeDpLzh89NFHYvRxiaSpwW8gC7tFhSq8nKoGVE4KFEu2EzesgsqFCIMCsSYFwrQeuJxu/JHrxo07tbhhj054CdljWPWbfPKo1Gp619T/GkFZqVLSch3MKS1pUkhBKKkS9py5fP4ztUIJnUILPYmoQAQDHUujUItj/xeUpcEoznvq59ZRUAuvJA5fl0QiadrwCKMnqjlnQ4qH7ObAwrEhikdOkz+NnF5eruq6OJ7FYF0LQp677fXXXxfim9PI+D/ffPNNZGRkiO8SSVOBcwk3vYIL8ug5d9EXf7bhAsYkqPHzkGBsPS8Iu4cHYeuwIPx6pgl9ImlbpxMLMpV4KlUrmpv+d1up46NUqmEwGGApL0NhUQlFqKHX6SgZLiya8yUWLlsJhZxLUVINpCCUVAmZRb5v3sou7vUXmH8eEU4mC/RuVXnfU/0nkUiaE35BWJXI4zgeACU7Oxt79uwRIT09XYxIWtX29QGng6eTyMvLw969e7F7925kZWWJuMoegcrwNXEz2bqCxef48ePFaK7sFax873i+UL6nL7zwghCNEklTgd++fAewpbSSGKSvN7fR4vtBQRgWo4aZxOHmIidMKgXOjdFg03nBuCRJS9u58E6qGl/meJuPVje3UapUMBdlYvqLT+PGm27BrbfcgiuvvBrL/tgCtVqJPdv/wbZdBzgDqfaxj6UmclXSGJGCUHJCOEPhbCUw/2pG5SPU/J9EImlOsEjxe6oqw6KFB19JSUkRE2mziPJP2XDw4EEhXhqCKOT5BXmS7NzcXCFUuW8gjyJ64MABkd6j8aeZhXBdwGl47bXXxD1jbwXj91z6Pzme7/OLL74oliWSpgA/3eEaoEswvXM+zcTv35VJFEnMOmRHx8UlOPfXCrRfXoI1+d5+vRcn0Hp2LcKND7LUyLErqu0lVCk9+HHBbKzanIrxk57He+++hVuuHIXM9DQ6jgJajZaC1zuoUHibcKspH+TmpVqutBFrvHDTUq2a0kSR/lYIal8zVO9+3uOI15muz7uOm4RrxXdJ00EKQomkElI2SiRNAxZTLOyO50ljrxsLLF5fObD3jQUYf9YnbFyyQOU+gUenkYXY8aaX4P3qyhv34YcfYuXKleI7ewq5ySgLQb8Y5GWO53u5atUqfPrppyJeImns8BOupazlrFDKJyqZDTz+AXNamAoXt9IiLEiJIosHN2wwY166A5+k2CE6D5Ko21MObK8gAVctS5ysFI8LaelZiGvTAWcPGYRWrVpjzBXX4aqLhsHjcnrFG8FiT63yYM2vy7D+nx3Yu2MTfl61Dm7KQzjJLBCzU/dhyfLllCYtdmxaj93JGcg4sAsL5s/DvG+/Q2ZhGTS0Hec7PMfiri0bMHfO15i/8DvsPnBIHEPSNJCCUHIYlZrH9Wzegkir1fm+SSSSxgzPg8dewKo8fSyo/IPNVF7vX+Z9WchUtW9dwaKK08+GWFVpZKHIovdouIafPaO1LWi5KSin74ILLhBh5MiRGDFiBIKCgkS6OB0c5w9jx44VzXN5P4mkscOai4VXCy0PwscxChJjHrx30Ou57xKiwncDTdg/IgQrzgnGtS01uGOzGb9n03ql9312epTYaVZCRYsnn9N4oFBqkJgYg+Ttm/DNdz+iwuaCUqWBRquGR3gfOZ9QQq9TY9k3H+HFN2Ygq9SK7P3b8PKrryE1r9zrAWRP48LZ+PCrHxAaasLyRfPxyksvYcqr0/HPtl1YRusmT3mVti9DaLAB8z9/G5NfmY6DaTnYsn4Vnpv0DH79cxt0Oq04p6RxIwWh5DAF+QWHM6rmhjCy6N9bb76B9X//6YuVSCSNFRYrLPzqU9QFAr+37Wj8wrAqWMyyYKxNkpKS8Nhjj2HcuHF4+OGH8dBDD4kQFRUlPK9Go/FwHK9/5JFHMHHiRLGfRNIUEKKQpZz/FVUBi9Pt6PFzKT5NseOQ2Y1InQJnR6vxfFcDsi4Mwc3tdIDjyDtt9rDlUT0cJDxHjb0B5/TvgI+mv4yHHhmH75atgEqjJ2FIR6N8QafV4KcFX+CDuT/j3gnP4OJzz8Dgc4YjUm3Gmj83QU/vZ2F2KnbsS8P5F46Gxm2HWq2F3WHHneOewPOTn8PUFyYhZ89mrFi7CVkHtuH75X/h+nvG45Upz+GNadNx7mltMHvOQrg87EyQNHakIJQIfly6GJMnTxbtzqufPTUN2EO6Z+8+3H7HHXJSZYmkkcP96NhLVpVo4j4wer1eiK3Kgsu/rNVqD6+vLzjdJpNJXENVaeS+eew9PBrej4VwbQvCqmAh6PdM1ue9k0jqAs5ZdPwKiizG+7z3jFRDpVTglr8q0Gl5Kfr8WoaJ2y3ItbqhJ7E2tacBRm6IxJvTfqEkIvlrdd4Wt8uFoMg4jHviOUwYdw+CFTZ88OareOfzefAo1NDp9Ni5cTU+/PoHXHrLOIwdfgZcdhtC49vh9B4d8dfaVahwqbF/5z8osatx5qC+sNscdFw32nToiQF9u8FF73Krrr3QOjYMWRnJ2J+cDrtbhazkXfjs00/w9byFKC63oywvA2aHkzWopJEjBaEEX37xBZ586imUlpSQKPJ2iG6OsCHFhiAbWlOmTMFLL73kWyORSBobPFjMfxEfHy+EIQuYyoHjeF1VYqsuYUEVGRkpmmBWTh/H8+id7Ik7noeQt6urgWUqI0WgpDnBjr52RsCkprzCTXmKVoGVQ03457xgDEvUwGrz4J9CF17+x4I7NnunggnXAgl630BXbg/y6CCHNWU18NA7zk1Ozxp+Maa/8zYuGdIXK5YtQUpWgRh0JjQ0AiF6DXZs3UBCjqv5PbDY3LjwwhEoStuHHbv3Y/269Uho3wMdW8bCSSKT315uJOYhYeh207JCiWBuDupxwGy3wEMrS4vykJ6RiZTUQwiObomLLhoBledIv0VJ40UKwmbOX3/9hamvvQadRisMIYlCGILh4eFYsGCBmFhZIpE0PnjQleONguf3sLVq1UoIK/YG8jK/9y1bthTNHRuCuOE0cHpiYmJEmjiNERERIo7z66rSyCKRw/EGnZFIJKcOCzgWhG30bgwNIzVI4qzECews8XrI3+5pQP8YNaINCpwWr8Gtrb150f4yNw5U+PsderAkr7pSkPYisVZaWi4GdHE57FBpg9Cndye4XB4RnE4HEjv2wj23X4vda5bhiwU/QaHWwumwokvfQUiMMGDRooXYcTAbffufBh3pU+56yHVgJaVFqLA7RJNSe1kB0gpLEBoSg+jQUHicboy85CpMfPxxjH/0UTz88EO49YYrxRg5Ug82fqQgbMZwHxv2hHFts1J97NDszRkxohZltp988glSU1N9sRKJpDHAg8L4B405HiymuEVAbGwsWrduLcQhewY5P2xIcF4UHR0tRCCnMS4uTqT7vwQr71NYWOhbkkgktQH3H2TL6ZlWDvDIMGZSiE/ssKCCPjuHqLDu7CBsPDcIa88Jwuh4Lcopfvw2Kwk63tubN1l4XKhqqCmFUgVbWT7enfYSPp89H3sPHMTvvy7BZ/OWoWW7DoiNCoXD7oTFbEGfIefj+stGYP4XM7Fy/XaoVEroQ2NwRt9O2Lj6F1g0EejdrZNogsooVWqk7d2CGR99KeZl/eLjj1BoV6NHn55o37ETIk0ufPbJZ9i4dRcOpSTj5x8XYeHSn6HwTU0hadxIQdiMmT17thA7bFxIjoUFIYvmzz//3BcjkUgaAzztwskMKMOiioPfq+aP+y9OtL4mnMw5/Wnk7yfangVhfTQZlUiaGzaPAgNC3Hi6NYlChQqrc13o/ou33+CyXCeSzW78nOPEi7ut6EzxizK94pHeavF/eBS90/+dTf0LbipqDI1Cz67tsfaXHzD52Ul4492PoY/rhPEP3oswowY6g0GMB2F3enDN7fejX+twLPlhIQrKrLA7XBh67nAYlHa079YbSTFhh0cr5qbmHSmuNG0bJk+ahEUrNuCG2+7FoO5toQ2Lx2OPPgpNRTpeeO4pTHjiCcz65nuUVThFn0lJ40cKwmYKGwvLly9vcLXhDQ0e1OHXX38VE0FLJJLGAedvfhEVSGrjmLUBp5GNPK7QkkgktQdXzRSQxhvfwokX2jug1amQUu7By7tsGLW2AmetLMfoPyrw5HYrMixuMRKp2MutQJxBiWtinLBzi1OOPik8tKsaY66+FW+9/S5ef20qfb6NKZMmIDHKQCJQgVsenIC7b7xUDCRjcSgxYcpUTBr/AIK0Su7qKDyCLo8Wg84YAK1a4Z0nX8S7oTNF4pkpr+L1aa/jnffexWWjziYR6oTVYkXbnqfj2ZeminO++spUvPb6VFw1Zhgcdrv3AJJGjRSEzZQdO3YgKytLeMEag4FTX/ibXm3ZssUXI5FIGjrcz4773HGNd6DgY/EAL23atPHFBAbuv8hNVgOZVhaufA+4z6FEIqk92Hpy0187iapHkpxY2duGkfEKBBtI+SnIxObmlGRHeKf0ok8SgnArEU1icFp7O3oHuYWXsVpWGL3fDocTGq0eUdHRCAsNpv2576BLvPsarQ4Gvbey3+XmeQ/VIj9Ukq2nVSvx67IfYddFoE+PzqwCxXYsNLnvodVqoWRrERkZhVDK7zjO3yLBKVpdqMS6qKhIGHVaOr5/f0ljRwrCZsr27dtht9sPi0GRqSmrVU3VBPHQv39nbnx/eILlbdu2+WIkEklDhyu6uDn8pk2bAhY2btyIgwcPCgEXaLjPIx+/qvPWJPCxcnNzRd4lkUhqF2E/0d9yEnvdjG4s7mrFvtMtWHuaDctJIK7o68Cs7i5cF+fCyCgXpnR0YctpVlwc6YKZBWIN8XjcYqoXp7PqqWkYMb5opWWHtRwwROGqq65EhFEp9mXbh+ujuvfthx7dOsJht8HlOjKFTGX4ON5z0nrfMSVNAykImynsHfRnEF4UcCmtnC34lpsffO1upU1koJVho4qNK4lE0jhYvXq1aObNeRw3nQxEYFJSUrBy5UrxPVCYzWYsXbo0oGnlY61fvx779+/3nUUikdQFVo8ChS4FNGRGdDN5MCDYjT4mFy6JdOK9jg7M6ebE/fEO6JUeVJyCGPTDldbVaeRldylx7a13Yuyoc8TAW34r0O5w44JLr8S1l42Cw8ZTZBz/oN5znnraJQ0LKQibKcdOWqyAE2a4FP+dETRNOEskQQwLXb9ZfK8MZ3xWq3cOIYlE0vBhkcXNvfnd5QodDrxc3cCeRv93PhZ/8rEDCQs4rm33n+dU0svBn2Y+Rn1MTi+RNGfYemCLwknCkJuC2n2BPYFWWuGg7ywaHfVoZ1WuOKos7DgukE3XJY0LKQibKUdnBOwVcyvtsGiy6VvzeywU0MCsySVBaBNLR8P3SyKRNA44b/MLOB5ghkcdrZzfnQy8fU5Ojmha78d/3EBT+Zg8EExxcXGNzsPGHKeZDbvaSKdEIjkx/Obx63fsG8g9/fzf6h+ZR0gqIwWh5DBKjxolmt1wKxykgJpRRiGu1YVyzQG69qo7SMuMUyJpfPB7ywKppnPypaWlCY9gXb3/fJ6SkhJkZ2fXqBLK6XSKNJ9oDkaJRFI1/veO3x8ZZGhM4VRR0MMfENcHT+C9detW0UTlnXfeabbTGSxbtgz5+fmiuU5N4AI9NDQUY8aM8cXUDuPGjRP9bHgOQv+DxEOqeOBEjHkwQh0d4YaNc0WxLpAooUauexv2O5dDreA5EI8+hwdujxtBinj01lxPqaigLWrJuKGnn6eWNaszkWn6hb6rjzkXNxft1asXPv74Y19M04CftSVLlgiPBHtSagLP9dahQwcMHDjQF1O73HXXXaIfF+cvX3zxhXhXahvuhzV9+nTxnowYMQKjR4/2rZE0VObOnYs1a9aI54S9ZjV9vnlff2HLRSV7C4cMGYIrr7zSt8Wpw97Lp59+WqTRn85TSTN7B7n84ePefffd6N27t29N7cOD4zz66KPinYmMjMSsWbN8ayTNBbZ/1q1bh4suusgX07hg7zxPys7Pb4DMY4mk1uHyIi8vD126dKmxXSQ9hJLDsBBicVRg2ACbqpC+k1hryvmhEINq2FXFyDP85bv+WhKeEomkzggJCREVHiyOGP6sSWBYnPF3/uRjBgcHi/hAwX3+uGLOn17/ef3fqxtYvPInV9bwfZBIJCcPTy3TsmVLMWULT9UggwyNIfDo1y1atBDPb02RHsIA0zg9hL5IHzzaptptQkLFCGjo8+ipGE4VpaKaHkJP7XgIhRhUliLH8Dts6gIoxYyxdB56IzwK8UfcG+khPD7SQyhpiHAzz6+++ko0n6zps300LLLi4uJw8803iwI4kLA3k0ca1Wg0vphTg8Ur1xRfffXVvpi6QXoIJY3dQyiRNFekh7CZwnOkqpUeaFRuaJT/Dlp+KjQlyAtZDqcuG3ql1hc0AQkGEoEaEoUnQk0GOJ/XEMBzHwlaeLSFyAtdDrc2j65Z4bt+F9QqCnR/FCwKJRJJo4P74YWHh6Nz584BCyywYmNjUVpa6jtLYOA6WRabXbt2RadOnao8d3WC/xh+r6NEIpFIJCdCeggDTGPxEN7z4HjMW/o3LJ5guHguHPp/NOwpZO+gxh1MqwNXd+DxKBGkykeE5iAd/3g14m7Y3EHIsXcl8erwxQUSNxw8xYS4dN+18ZtAy1oShLEmK6INVqholdlikx7C4yA9hJKGCHso9u7dGzCPmx9+3jt27IgzzjjDF3Pq8AAw8+fPF2UGP2OBgr2kw4YNQ6tWrXwxtY/0EEqkh1AiaZxIQRhgGr4g9ODdz3/Efc986BNAVYvBf8Pz0gTSW6ZEsKoYLbWZJDervk8KOmeF24hD1ra0UBuCkC/aH45CXKoCBi0Zf2Fl0KIMPXr2loKwCqQglDREeFL23bt314ogZO/b6aef7os5dbhJ+oIFC8TzFUhByEJz+PDhol9JXSEFoaSxC0J+x3lwDm52LZE0NrhbA/dLrwmBc/tIGgVzF6/FfU/PJDXgAlRkfChJ/XDTyOMG2klBj4mChFugAolA5Uk8esI0EucO8PlF4GPSGaq6Zk4afVrsGuwuDIHTzT0YKV4ikUgkEkmThZ0a6enp4pMrS2WQoTEEfl4PHTokPmuK9BAGmIbsISwqLUevYQ8g7VAWYND7YusBjxKhqiIkadP/00NodhuRamtPC+whDFzNebVwKRGtz8OYoR3w0UfSQ3g00kMoaYhID6H0EErqh8buIeRpJ3gwqqSkJNG3VyJpDLDm4OeWuwjU1C6qmRUoaZSsXb8LaakkBpupWK8RSjfyLTo4XPUkSCUSiUQikdQJXCnDfhJuMsqfgQmBPJYMMhwb/M/rqSAFYTNi14EMdgvVm7OtseJxquHwyJsmkUgkEomkukhTW9LwkU9pM8Kgr2rOP8kJUbrliyKRSCQSieS4CG/N0eMNKDVkdvG4Bd7m67xWjkggaYhIO7cZ0b9neyiMBp612BcjOTEK6NROaFXynkkkEolEIqkCUnkqhVIMmScEHzffUxthT/4W5j/uhSPjJ9rAIIxuDoERhf9uNujnVJsOMnwEcZQAHEvSOJCCsBlxeu8OOGdIT6DM7IuR/CecD5IOjDNZKaOXmaJEIpFIJJJjUSuVcMAFNwkojX8Uc6Ue9t3vwpOzCh761Ct5bmeF2IYnBjg1q4JFoEIMCMfB3/eR0en1pzSgFh+F9zfouFUZR0j7pzkgBWEzgjOMT19/EK27tCZRaPG+9YEOJ0k1Nj0xnFkdDrwcqKBAbJCZBKGFMnDZ1FYikUgkEskRuImoWqFCSkUB7tn4De7dPA9FdrMQhRqFG0HhXeBSm3CwMAvf7v4bH6Tm4p3kLJQ4jzfG+smhoHOaTEYoyTRhgWkwGqEjAaegc/7+609Y/ddmKGo4erhGrcK2DX/gm++WQcOtyiTNAikImxktE6Lw1+Jp6NI9EXA5DgufgATun+ihR+pEgR47riXjU58QsQ9lm0cfo3Lgx9hK12Kx0/JRaaph0KjcaB1Whnbh5XDJ10QikUgkEsnRkCGjIeG1uywHB8yF2FmejT8LU+Ci+OSyUixQn4130oPxSboea/euRa7dgUyrDWlmq6ikrwkKEpsuewW+n/Mpxj38CB566GE8NuEpbDuQQbYLsPaXpVi5ZhPPRXDiUSOq8P5ptEr888fvWPjdj9AajL7Yk7LYJI0Yaek2Q2IiQjD69HB0i8pHh4hStA0/9dAuogyJhlzEqjMQq8n8zxCjyUCYuliIwuPB67QKO2K0aVUewx9i6HwcnnroUjxy9wVIoDRUlb6TDe3Cy9A5qginxeWjRbCZMl5uluFLlEQikUgkEokPb1NNN3qGxSNUpYPaDny9cyveOpiOT1LTsFXdHgUIhx0aWHO2Q+1xoVuwCR2CjMKzVxPUahVW/jgfMz7/Fl37DcHll14Mg7MYi39aAQ+JUzUJQaXaZ95T+pS0zE1AOajVao7ywuenBZ7Dzr9eND+lf2oVHYfOIxDb0L60naTpIgVhM8Xp8sCodiI+yIIkEj6nGlg8xRsrEKEuQIQqD+HKY0OE7zNSmQsjSuFyc350bIbIcW43SUKPQ2x79HEqB6M9De1jPHjm4Wtw9YX9EaMrrjJ9JxsSgysQbbRDRRmmdxiZmtXgSSQSiUQiafrsLavAn4VOOHMVKEgpxJ7UZKSVFJIN44HOFInYmPboHeTANcadGBdtwV3tWkGjPMlWUsdAco1so62bt6N1zzPwyAN34IJRF2HKm+/hoZsuh9vh9G3FOo7EIIWS/Gxs2bwRa//4A7v2HCDbRinioWDRp0ZBTgbW/fknNm76B4WlZq/w4/W+Y7AwzElPxq59yWS3SZuoqSIFYTOGvXBOermdHuUpBwcdR6s3QqXRw8PDKys19Kk+HLR6E6DSiu9uCjwMs78jNE+o6YfFIAfvOqXYtvJxKgcFHS86LhETn3gGGh1JzHKz93pO8Zq8/QX9QSKRSCQSieQILOZ4YJgcmx2zM/OwvcKKiLBElmuwu2ywW/PQLywYlyXE4o6+A3FVghXdjeVQ5q9BhcYAGMhO0vIRiGopQ7LclGpERYchfd8u/L5uK8xWK6wWG7RasrvcRw6mVKqQl7aTbKSn8emXX2PRtwvwwuRnMGvBMii1OtpeiQ0rl+GZpyfhq7nz8dnHH+Cp56Ygv8JB+3rtH24Om7Ljbzz/7DP4/rd1ZF/R+aVp1CSRglByWPqcSmBY3HGTg+uuuw5z5szB559/LsLcuXNx+eWX44033sCsWbMOx8+bNw/nnHMOrJSZ+XG5XIiJicFHH32EL7/88vC2VYVPP/0U3333HS666CKxb2VvY1VpPNkgkUgkEolE8l+wxaHhSm2yPexOF9pEJiI8KhQhiSEwmSpwWXwUegbpER7XG25jJFwkAl0lf8KRkoHSj3+Bde1OQEVmOBse1RCF7KU7a/goJIQ48cKkJ/Dmex9hX2oWDAaDsMMO43GTXaTChZddh0mTnsPU11/H+YO6YcVPPyG/zAFLQTbmLfgWuriueOmlF/H0ExNxZp+OsNps3mvTGVCQdQBvvvM+1PE9cfcNY2EgEVnJ1JI0IaQglAQUFnQtWrRAr169MGDAABH4+65du9C+fXv069fvcHz37t1hNBrFPpVxOp0YOHAg+vfvf3jb44WEhATfXhKJRCKRSCS1D8sutlyitBrc0yYed7aKw+Ndu2BA+7bQhxiwx5qHbFcFPCE6eEJbwenoirxlQPILe5A+8mEUPTkLuXe8B/vudJ+n8ORVltPpQNvu/fHqtLcw5twB2LB6OR556H7M++lPaDTcAsu7ncvtRkL7nrj6f+dD6bYhLTMbSQktoXZaSSu6kHxgJ3KKHbjmuisREWxEVEIr3HDz7YgP5YFkFHBZSvHEU5MQ0m4gXnx6HMJNWrhpP0nTRArCZgo3yWT+VZsUIBwOh+/bvzla+DElJSXHpMFsNqOiosK3JJFIJBKJRNLw4A4v4RoNWhh1CNbp0De6NRwKN8rsNvyxaSPKpy5EzmWvIHdSLgpWKGDJ8MDqKoRSb4AqNgwKFoM18Lg56PhaUxhuvuchvPPWNPRtHYtvvvoSaXml0PgGlGE7rzQvHU+MewiPPf4kpk97Az+s+BMKEo28zmY3w6M2IsxkhJ3sNqfDDpvwDnKCFLRsQXF+MX13QavTCBtOegebLlIQNkP4pc7LyxN99/g7B/7OoXKzy6O/n0yoirKyMhQVFSExMdEXcwTOfPzilGFxyIKyKvEokUgkEolE0pBgUehSKenTgx7FWqiX7oXn7d+x9I6psL40H7ZN+6Ep1tBGCihUHihalCFs4ljEfHg/NO3jSd052fjxHuxkoE3VPCqoWiXspcT23XH1ZcNQXFSC0nL/dBY8GIwSSxd8hd3ZVjw44Um8/sYbuPPKiygdTtHMVacLBpxmlJrN0NLx1Fqt+OR+kOxBNIQn4LGH78Dedb/i83k/wmAyeQejkTRJpCBshnC/Ow7l5eUoLCwUYq2goEB8509/4PjS0lKRufCwxCcbdDqd70xeJk+ejBEjRsBEmcnRsDewsofQLwgtFosvRiKRSCQSiaQBwvXgGhJmB7ORPnoygi5+E0kL90K5rwC73OUoMaigjQmF8awzkHBtK7R9WIkWj5TCdGtfaNsnkRisXuU3TzZvLc7Fu29Mw69r/0ZZaTkObN+MOQt/QWKLJERHhpDeY2nKI7V7UFJajODgCERHRcFWlo8ff1sNJ3v/nE60bNUWoXoXvvh8NvJLypB9aD8+mvkOUgvK6DwK2CrKMeDsMbj20hFY+MV7WLZmC1QkGCVNEykImyEs2Dh4R/L0irHKoszv7WMvnd1uR3FxsRCLJxNYQP7zzz9Yu3YtZs+ejbvvvhtarRZ33nmn7+j/hgeUqXxuhjOqygPNSCQSiUQikTQ8SHhp1LCt3wvLhv3Qk1ndTR0CRBjg6hGLfRPOQ8KX4xA18z5EXHkx1MF2uEjEOTO2w1NNMchwQyy9MQhKZxk+m/E2nn52Ep578SVkWtS4+cabEBWsg4dsKiX94xHXh51/IWyF+/Hc00/g8ScnodStg8mgh9vpQGhca1x++f9QkbUDjz/+BF58ZRq2H8hGiMkoPIEKFV0XnW/ExZfjgtO7YdZnnyAttwiqSq26JE0H+as2Q45uHuoXgP54P/6mnOwprEr8VRVYPG7fvh3ff/899uzZg9GjR2PKlCli9KujYcFZVZNRKQglEolEIpE0eMhm8dgc0J/ZFfrhvaAc3BkDH7sa+ofPhfquIfh7aARUHRPI2HZAHTsSiogBUEaeDnVEbzK+vHMGVguPGwpdEG67b7wQeVdfeSVuv+t+THlhMgb1aU/2kwJX3HgHrrlsBFx2G9r0GIgXnp+MG66+EtfddBsmPvYYHnn4PoQHaWG1O3Hm8DHe9ddeidvuvBfPPDEBQWrgnNGXY+Kj96CiuAga7qv4wKN4+K4bEWLUwU1pkDQ9pCBshgQHB4vAE5Kyp5CbcoaEhCAsLAyRkZGIiIgQnxx4Coh27dqJEUJPJrRq1Qo33ngjXn31VfyfvfMAjKJow/B7/XLpvRd6770KCFIEBCw0RRQUVKQIKOovigVUBEEsIEVFrBQrIiCCIor03iEkkIT0nsv1//vm7mLA0AMCmQcmuzc7Ozszuzv7vTuzMy+99BJ69OjhOuq/YSHIXUPPbSHkVsnzDUwjkUgkEolEcsNgtUMdFYTwZc8iaOnTaD60HyKiI1FoLsbJjDMoLjaC1BmUOn8Y2n0Ezw6fQ6HxFOLuSnDY7VBqtIirUh2tW7dCk0YNEOjrJV6wc4zhsZUQGxEqwpnNFoRFVULzVq3QuEEdaHR6VKtWBTqVUmy32uwIi4xBq1at0ZC2+3jpaR8rAkMjUb1KDGyuMR30Pn6oW7cOvPQa0UopufWQgrACwnP/3XXXXUIIsjDkJQtD7trJ3wCW7krKLYalB525mOPWvUv5/o/jXLZsmRhN9NwWQk7DX3/95fKRSCQSiUQiuUFhc8lsgyPPCGteEXRmB8ZWaoteobUxvnpH6JQkojicwwZY8khAFjrXrwLu1cUvz90v0HmKCTdW+m0hW8yNzWaFhcKZTGZhp7FILK3peH8Rj9ju3MLTS5i5S6vLFnSQ6OUwUgzeukhBWEFh0cUVg7u7qJtzf18reLqJ8ePHixFIOS2l4bkJP/zwQ9EFVSKRSK4G98std912uY45txfDtYSPVVY6LsW595dIJNeZUredhcReHd9wvFznTtSmpfUadbE8373O/mVtc/udu63k97/8XSsMrZcVp+TWQQrCCorbeDgXvuGvx03P3wjq9fp/iUGGj89ilbs/SCQSyZXCdQl/A33s2LErdsePHxffRl+PepHf1J86dQpHjx4tMy0XcrwPp7WsbvgSieT6YrJZUWgzi6VEcjMgBaHkP4Gnm+Buo2XBxgxvk5PTSySSq4HrEu6NwF2duE65Escvpq6HIOT4+Vg8UnNZ6biY45doLAa514VEIvlvcdcX17rekEjKCykIJf8JLPbYgDkf/C0iG0YSiURyNXBvCDbKrsadr0fFtaKsNFyqu95plUgkEsnNjxSEkv8E91twNmDOhf246xR39ZJIJJKrhUXS1biy6qlrRVnHvxx3PdMqkdxq8D3kfll97r0lnXQ3qit9vV4pCtq5XF4nLlq0CHv27BEtP++++64YtbIi8vPPPyMjI6PMb+MuBW4Z8/X1Re/evV0+1wYe0OX3338XI4uWpwHB3ZXGjBmDhx9+2OVTNqtWrcIjjzwCLy+vfx2fK2MWhG+99Rb69evn8r0469atw9ixY8UUGuWZJ/7esUGDBli4cKHL59aAr7WVK1eioKDgrJFeLwc+T9WqVUOrVq1cPteWkSNH4uTJk6J+Wbx4sbhXrjX8fdasWbPENXXHHXeIuTUlNzZbtmzBoUOHRP3GXUa5Tr7SRx2fd56Ch6fl4a6nNWvWRPPmzV1brx6uX5YvXy6Owy/JUlNTr+g7QM4fTyUUHh4uvs/mbvldunRBdHS0K8S1h7u8TpgwQdwzXGZLlixxbZFUFPhe27x5M3r27Onyubng5yHXHXwvSSQ3C/y84OdG/fr1xcCMV4IUhOWMFISXJgh5yonRo0eXKd74kmTD6/nnn8ewYcNcvhdHCsLLQwrCS0MKwpsPtyDUaDTivLHQuhpB6L4/+Hq/loLQXW9xeq+E0lMGsXEgBaHkenOzC0K3/XGhT1okkhsRrvvZNnI/Ay4X2WVU8p/AIuRiFy2/KZdIJJLLhY05twDkJQslfkl3Ja70yxKO61oYiufGWVY6LsWVrlOvVVolklsZt1Ht4eEhnXQ3leOeIVcqBhkpCCX/Ce6R8C508WZmZrrWJBKJ5NIJCAgQvR+uRgie6zgubnH09/d3HaV84K5p7l4NZR33ShynlY3a69GCLpFIJJKbH9lltJyRXUYvrcvotGnTxHXChtC58CXJXTbatm0rugVeKrLL6OUhu4xeGrLL6M0Jd8M8cuTIFdfF58LdOOPi4jBw4ECXT/nB19jXX39dbt8tcctgs2bNcPvtt7t8rg+yy6jkZu8yytdwUlKSsEHK046QSK4HVapUueLniGwhlPwnsHC8kAjhipgHg5BIJJLLhV8OrVmzBmfOnEFycnK5OI5rw4YN+PXXX11HKR/YAF2wYAFSUlLKPO6VOI7rs88+E0uJpKJzOe0e/O1tVlYWvL29xeAcV+M8S7mytksnXXk5HqCRbWZ+wX+lSEEo+U9gQXiht2+8jStmiUQiuVy4lYJ7P/Cb0vJ0HGd6errrKOUDt0SwKOTuqGUd80ocx8UuLS3NdRSJpOLC9sb69euF0LsYbHtczTeEBnI+Bg/4enrAi5YGDz28aN2X1r3F77L3k066q3V83V5Nq7YUhJLrDr+t4yHRz3fhuv25+7FEIpFcLlyHXM2D8Xxcq3glkluJK/0E4VrB3cZ5qqv58+eLngP8qcOFYBuFHXe9vlQHhx06hQN6pQMnCh34McWOd45Z8dzeYrxz1IrvUmw4VUTbVeQonIPClxWPdNJdibucVvDzIQWh5LrD3+JcbJ4tfqDwWz3ZSiiRSCQSyc0BP9f5Gzz+jpDdX3/99Z+6v//+Gzt27BAjMObl5Ynu5DyGAX9jzL8vhPsF0MWcWqmAjtz6dAce3WHBsG0mTD1YjK8TLdiU4cDSUxa8ftCMh7ab8Mh2KzZkAN4qBVRlxCWddFfiygMpCCXXHe4exQO1XOwi5jDsJBKJRCKR3Pj4+fmhdevWJV2XuZv1f+3ctga/aObWQm5RKa/BpkjXCUP65YNWTNlbhH1ZJijtVngoHPBUOWBQK2CgQ/E6HRgHcix4Yb8Z7590wGwHaDPKZWRHieQqkYJQct1hQcjfzVwIrsB5FMyr+UBWIpFUXLhb2OV2+7qQ47i4TiqPrjml4bqurONdreP8l9ebY4nkUmGhVadOHTRt2hRNmjT5z12jRo2Ec79c5nTxSLh9+vQpc5TzS4VrAQ3dXkVWB57eXYyl8YWwkRBU8xYH1xcuR/cirYh7kVsEtWR1q2DD/GMmTD1ig5U2czzXUxRyHVbe9Zjk5kcKwmuE+4a7HPdfUVZartS547sQXDGX/obw3Djc+3PX0kv5CLwsyorzSlxFoKx8X6qTSG5EbrvtNkRFRYlWirJaDMpy/EE+dys7n+Mw4eHh5T7FCo8Oxy0qHH9Zxy3tOI2l03w+x/muWbMm6tWr5zqKRFJx4WdVly5d8Mwzz6Bfv37inrsa+MnH7YsmEnOv7CvG2tNF8FU7hR+/jLHxSxmby4kXNDY4aJ3FIVs9LAy91Q6sP2PBCwdtJBId180Y58e2aLklJ35IJC7kPITlDM/rxqPQXWl3BH4DzV0u+vbt6/K5Njz55JNi+PTyPk98/p966imMGDHC5fNvTpw4gbvvvhupqanCcDkf3DrIc3N17tzZ5XNh+GPxxx9//Kre+pUFt2jyG8ZbbU4tvta+//578R3FlV6v3ApRo0YNtGnTxuVzbZHzEErOhb8z5nvU/SgTb+LpeuaXSRcbzZjhbmRstHGvBV6eD46fh6Ln67284eHCDx8+fNH70D16KKflYo9unpyfDV++z91wWbjF5bWAz4Och1ByM8P3YkJCAiIjIy9YH3jSrfrFSRNmHMwHKJhKoaS6hO4xlnYk8Li9Rcl1j/j/z7deJAtFGJVSIYRlnl2JOQ20aB6gEF1ILwUFHUh9nrqC6wWbjXsyuDxKwV68X+KJo8gzK1G3VlXYrDzAzoXrSMmNDz/HTp8+LebKvVK7SArCcmb//v2iQrnSUbb4dPCcIjwR+rXkyy+/FA/tKxUC54MNgo4dO4o39OeD5/OaO3euMMDOV05cDmzoPfDAA0KMXQr79u3D0qVLy93YYYOKWxseeughl8+tAeeLy+xiA/xcCG7FjYiIQKVKlVw+1xYpCCVuuP7Yvn27mFqhrMGn+GXTxephrv9ycnJw6tQpER9fz+eD6yQ2EO+6665ybSXk4/Izk/NxofqYrz8Wg/7+/uKe4/xdyGDlvJSVH64fefJibkHk+MoTKQglNzuXIgi5VnHQI3PQhhzEF5igUynpN8s+p2HOCAHIPuK/EiTRUGBxwFergjc57mrKotBMFnh1Xx3eb0T3Pq1fyCDnOkit0SLp8B5s3LYHCpUGKrWGRJ5CvJzl+13v7YfbOrSHr4dOhGdHiRFp41UfHz3eeH4SThq9MGfmFBjzeWAd3uqM/3y2AKer7C1Oytr3QvFJypcbVhC+9957otuKRCKRlCdSEEoYfqm0ceNG0fWcRdTlGh0cnh1fSxyX+/fF4mHB07ZtWwwcONDlc/VwK+bzzz9/SfngxzUbffx8rVu3rrgPLiQKy4LjYBEaFBSE22+/HZ6enq4tV48UhJKbnUsRhPwd4MZUE0b8mQUfNck9132rUJAwJJHnXFfQvaaA0WYX61VJ9A2p6Y8esZ74I8WIMX+kIsBDTSJLgVybCh821aGJH4WnQ56vFuB7V6vT48Cfa7F8zUZo9QakJcUjMSUXdevVhUZJgtAvGAPvvx9h3h7g10GcNucUFywOQc9MD7zx7NM4UeSNd2e/DGNeLoVy1n0sKvgY/+TbKQM5XyIel1zlMOxoQ0laeV/ez+3P4Z1l4Dy2W1G6w/GSt7v3Kfv4kkuFy+5qBeGFX59eAXxSy7vVSSKRSJjSDxCuAK8H3BLDx5XcGLDo2LZtm/gWmVu4+Dq4XMfPKG6R4+79fH75N7uywrqd+9l2LZ5vHKfbILqYYzHIrfvx8fElhtXlOm4l5JZRHpZfIpFcHqx5NqdzjwISO/yPRQz7c4dQmw1W8i+22KCi3z3jvLGoUxS+6hqNu2I84aNV4VCWCSoFhRUizQGV3YqN6TYSdM74zwfXERazCdVbdMQLL76El6a8jD492sDDJwxjJz5Hfi9i3OOPIoTEICkymAoLkJqahqIik6vHxD9iVTjxS0nbNLCYikV9mJObD1VJWGedZzYZkZmVgUJX93yTySK6rXJ3U7PVRjHYkZWZCaPZQuFZ5DpQUJBHdWw6ioxm5zOU8sbfUBYUFkJN9baxIB8ZGRkkWhXOBiSHTRy/oMgowkuuP+XeQsgPqPbt24uLqJyilkgkEmHErl27VrzB5fqlQ4cOonXjWr5NZOOZj8d1G7eqyBbC/57jx49j06ZNTiODjJorhbv3cwsjn+NLgbtksRDj7vD33Xefy/fq4RbCF154QVzHLHAvJU/8bOXw/D0jdyG9knuA4+Brun///vDwIAOyHJAthJKbnYu1EHJtYSEh9+TmLGw+UwQ9qTiWVtwaZ7ZxN1Cgqq8BXUkI3hnnj9pBeuQVWZCaVww/Tx28dGoMX38aO9KLS/Y1UXyNA/WY21SHovP3Wv8XHgYvrPv2Q8xfvgOzZ70Ffy9ufQN0GgVWffsFvlv9h7jHodaj+133om+P2+HpocAbzz7jbCGcNQVWYyGO7vkLcz78lASdncSfGa0698ID990FXy8Ddmz8CUu+/g65lAcWugadFlatD95+ewa2rfoC32w8iKqhOmz6eyeqNO2KiQ91xvwPF+HwiVMU3gqVxhO9+t+Pu7vdhmN7/sRrMz9Gt26d8Pu6NUjNykGNRu3Rv/dt+O6LT7HvWCL0PoEYMORh3N6iAUycdsklwc+xG6bL6IIFC7B7925htPGbWykGJRJJecPf17IY5Ac11zMX+uarvODjsaHO36mxIORvyCT/HdxVlLt68nm5UkHI4o6fV8zF4uBnGV9n/KDlCbd5KPsBAwa4tl49ubl5ePPNN0jY+Yn43W/lL4Q7TWy0RkdHX/Hzlq9pfoFbtWpVl8/VIQWh5GbnYoKQ5x1MNdow4NczyDFaoSYFyKECPTToHOuLHpX80SrcCxqqV4qsNiSkF4B0IsL8PeFBQq3QYkfX70+45iB0ttTx1BNBBhW+bOMtpqD491H/Dd/zQhB+Nx8LSBDOIkEY4KmAUq3Czg0/4JXZS/DIuEno3r4xVq1YjE++/hkjJ7yEPp3q45UJ44UgnPf+6ziyZR2eeW4K2t/7OB7o2wGpJ/biuf9NQ9chozHirpa4p28fNO75MB5/oA82fv85Fn+zDg+Pexbd2jTAz19/gjkLP0d0nZZ44J7uUGq8EKDNx5o/D4oXttGhflj8wXSs3pqMRZ98hKLELXj2hdcBrwA8+tgo+DkyMH3G+yi0qXFb97vR/86WWPjODOw548CiBXOgsbGWcGVYckHKQxBe2qvRS4DfVLKxxjcQf9fAwlA66aSTrrwct2LwQ5BbadzfUZUVrrwdi0Gu13jExurVq7tqPMl/BYs5vg6uVAzyfnw+yzL2yoKPxw/bhx56GHd0vUNcf+WJXq9FXzK6hg0bjjp16opRfzmNFxJ57rzzfXCl5eCG83erwuXD7npy5MhR7Nm9+5Kuk8u5Di+V8+XZXXdeLeV1vXC+eTTMmw2+2/jWtFBZim/q7A4YqUw6RntjTKNwtIv0hpW8k/NNOHgqm8SgAxEBntCqldCSmkwtsiDTaOYCoP822t1G8dlhod8XuOUvDQWJU4sZf/+9HZE1GqFRrUrIyc5Bg8YtKA1eOHjoGIX5pzsmi9t9u3bBqPZH985tYCosQlhMDdSpEY2jBw4jPy8XZrMGrVu1QHhICFq1bg5PDxV0Bj8hXKkkKDovPPbEY2jVvBma1KuG6KoNMXL4g6gRFwm11gPNmzWHzm5EobGQkqdCMeV9yOPj0Kl1UzRt2R5VooNRtV4bPP7wfYiJrYIO7dvCVpCJvEJjybeZkutDubUQMvxxPr+1v9oHlERyLWHjzm0UluPlL7nG8JD/3LUuOTlZiMEpU6YIkXY9DD6+TliQhoaGunwk/xXr1q0TLWlXOkIm3/vckrVz585LamVkA5ivuWefmyS6q5pNFgwePNi19erhbqu///4boqKi8f333+HQocMICwsT1/WF0sbGPYfjEX6vVFRwC2HLli1Ru3Ztl8/Vcb1aCFPTM7BwwQLUqlmVxPQ9Ll+Ib5zmz1+A8GB/9B94P95+932obEUYPWaCK8S1Zc/+A3hj6lQ0bNgAIx4dDqVaA0+DZ5nn8Ztvv8OPP/4AO4mie+7uizt7lk/Pg3femwud2ooRI0bBSNeWVqel61yNrTt24+NF72PmjFnQ6S6/i3BBUSE+/mgx/vpzE2KiI/HUU2MRHBLu2nr5fPrFV0hNiqfrZZLL58bgol1G6VQWk+Ibsv4MDmQaoRezyiuFUvTXq9EwzBuP1wwEzBYYPDSIDvGGs2OoAwatCiuOZeOJXxMR5KGGnQQcXxncWlgrQI/FrbxIGLLMujjimXROC2GgtwpWYx5mTn8d24+chr8XN9LwyzMgPzcPbe8chOdHD8Yr48fghNEHC99/BR+89Sq+XfMXAuh+tVst4lotzM9GTK12mP7KExh2732IbNQFjw27Fz99vRArN+zF1NnvoU5kAFYu/QgLl2/EosULoLWbKd1UDrZi/Pz9t1i74XeYbM7OtLkFVkx/9wMoMg7iiVH/w9SFS1A7yk+U3YvPjQPCWuJ/owYK8bzr1x8x9f3FeGveIkR4X/6gWRWVG6rLqERys8CGFBsu5Tm6nuT6wKOM8mAa3Avh888/v+oJhiU3H1u3biXRdMg5EMEVwAYPiy0WhBcTXW44DM+LysYJj8xZnt8QcovgpElOo5hbpN1doi+ULn5sc9pZDPIUFFdqNLEY7dq1q4ijvBgzZgyOHDkiRjH99NNPXb5Xxtat29CgQT0612dPY3U0PgFPTxiPwtxs/LjyRxI9ToHzw08/451Zb6Nxozp4442ZOJOaSoLLOTUOw4OAsLl9bpdcfh5wncLw84HL99wXDiyez/3Wkl+A8zlz8/2PP+LwwX2YONF5Pjvd3gGff7oEYRFR4rebt+e8h51b/8KE8ROgobQvXfo1nhrzJLx8/MR2Pi/c46o07hdf56ad88QtTO6BONIzM9mTxFoInhw7Dn16dsXtnbtRHs1ITj5N10xlEe58lHVs5oP5C3Hy8H7878WXsGXrdkSFh6BGrTpiG5cZp89dhm6s5KdyvYA9l+ycHBKshXRuIsVv9zVdekARvq75G7jSZcwUGSmNHv9OY3lwMUHIOeGWtf9tS8cXR3LhrXaKQcqkUHJZJhuGVA/Aw+Riw3wQ5KUjYcTxKKCjHZ/+PRGfH8yCD4lH3oUlYQGd2j6xBrzeyBt53Lx4CXB5/UsQeqlgsxox45WXYA6qhefGPAyb2UTJUtB5cF433j46vMnfEBq9SRBOxUIShMt/P4QvvvoI1vwcbvAU15harYU5NwkjnhiPkJg4ZJxJhrd/OO4dPBS3NastBohZvWIxFiz9HQs++RAeCjr/eh2WLpyFpWu34cERT6B9s0Y4tmMj3py9ENNI4ClJEI568n94+cOPUTc6CDq1A1OeHwd7SEu88OQgEsjAznXfY9oHn7kEofaK67aKRnkIQtVLhGtdIqkQzJw5EytWrEDz5s3LfPBJblx+JIOLH9hsNPTp0+dfhoLk1oeNFRaFPEIdD8jC18PlOhZhLALcRvaFxJcb94AvMTExqFPHaQiXB2zw8neR7viZS0kPlwMbATzVU1l5vJjLJOHA91GnTp1cMV4e7vlkt2zZUuJ41FJuRXV3K0wlQcb+f//9t9j2xx9/iDldL9VgmTBpIjp36kD19Nkv7zKycpB06iSCQsJgNhWhZk1nC+fCRYtQp2ZV2K02EmOdsenPvxB/7BBq1a6LVavXYMGH87B27RoSiRaEhkdg+ltvYcOGDfjpxx9IGHfDV0uX4pOPPsaaX9bi+LEj9IxogaQzqZj99iz89NNPyMpIQ736DZB4Oglvvvkm1qxejVXkX616FRSZLFi0cKEwynJysrF9524cOngIScnJJJjMqFKlmkgj8/q0qXhu0jNo0LAxgkk480BFPJ3A4aPHMWfOO/h51SpsWP8ralSvRmXlR6L3J3y6eDF+/fVXrFmzBr4+BpxKScPypV9h9dq1WPr1V4iJjkJoWDj+oDynpyaRaE7E+l9+IRGYQiKvAL5+fpTWHxEQFIzpb76Bzp07i7R89uWXSE05hYDAUDr2HKxcuRIbf9+AqlWqiH3cbNuxEznZ6VRO3VG1ahUEBYcI/2UrvsXnn38m0syjUdaoWQvrf/8DXyxZgh+oXA8c2I8/6PquU7sm9CTilq74BocO7IVSo8fO7X+jTt162Epxv/nG63Qu1iMzIxX16jXAuvUb6Pr6AL+uW4dUEiMNGjSk8jkmBjNZu+YX2CxFVO41KAUXv1cuB64X+P7w8fERoqss1EoFimwO/JBQAD3pLL5fOSyPpMnbuKtj00AdDidn47QZqOZvgMY1wuc7O84gnb89pLAievpjpOXIGl6oRILOQuuXmiONRov4wzuw42AKunW7Ax5a5/fHqfEHsP6vfWjaohUiQgK45YfOXSZsCjW8PfXYtG4tsi069OrZBbkpx7F2w0ZUrtMcVWJCxcT1udlZMJM6K0g/hq9++gv97huIzh3aoUWLFoiJCIFOqxXfTh47uBs7DiSgd99e0Cgc0FB98uva71GgCMbwhx9EoLcaf29aj+37T6Jbr95QFKXjp1Xr0bFXH4T4GkQZ/Pbrajg8o3Bbi3pibscz8Yfxx7a9uKPXXfDWycEpLxW+Bvm55kf37JXaRXQ6JJKKAz/8f/75Z9HCMGPGDJevRCK5WeBukjwICgtCNtz4IXi5joUkG06XIryuJ5eSHreBxAKShVdZ+buYy87OFi2e9evXF3FdCXwe2HhetmyZeFHzww8/YBWJAi5bFposdN3+vPziiy9E2rnl5UJwmFMkqljIMAknE0lUnRbrbjiMRqNC9zu7UX2+WvjFJ55CUX4O6tSrDwsJPoaFGwvUnPxCfPXl52QA34lhwx8R3c+LTWYhUEMCAjB+/AT8uflvrPn5Jwx7eChGjxmD9WQk7965lUTlZvAUAS+/PAUNGzcR8b5PQiUyLBjPPvss6jduimnTXkdEeKgwmGtUr4o77+yFAf37kwDS4Z6770azZi3EfkxqRrbodhgbG+fy+YfZs2chOiIML734Erz8AvDuu3OoHC1CcN13793oP+h+HD1yGLXr1EMaCVXuatyf/Dvd0R2z35kl4uCyO0zPt/Zt2yA2rjI6dWwvRJyR8rtj+1YyGH1w+NgJnEo4Ibomrlr1E2rVqIHP6PxolA5Mn/4mouKq4L13Z4v43PToegfSMnLx8MMP4c8/Nwm/M2npWLHsayqzh/D8/ybjkyWfUbzxyKdr6/ff12Ng//twX/+B2LNvPz1zD4h9li9fjijKY1pquhDdhcXFJJCnYcB9d+ORESMRHhGJ9MwsLFn8CYYNHYKnqYw3/L4JB/fvwQ+rfkZIoB+mTp2KKtVrwvEfNR7xNBOtQz1EF1Hu5ui+J3kaCTaq4/OMSCgw47vThbjvh8N4/e9TYrvRakNygYnCOGCzO6erMNEymIRPkwC6Z64gPzwNRWFRkUgHJYTiVOGO3vcgRJWNF597Fq+/8RZee+0VPP/CS9hzNJFEm0q0dhcVG8V3kPVadkTnpjUwbfIzePnVaXiLzv/TEybi5z+2IrpqPfirTfj8o4X4+ONPMHsGbZv4NL5auR56g9557MIicR0xVhKRDej+y0jYg1emTMaLLzyPr3/YQCLXTvnlkZEtKMgvgLOlniExTGnha9MdB9dpBYUFlA/ZMni9kYJQUmHYvHmzeKvL3X64ZZB/v//++66tEonkZqFHjx7CsSHGBgS39HHXokt17pZBFi78m8XLxRwfh5fXAu5y547/Yo7DsnBk5+6qd27+zuc4LMfB9R+3sLdp08aVgiuDJ9TneBjugs/xcqslw0v+7fbj8zVx4kQhxC+ExWLD9z+sxPz5H8JIQu7rZcvx9RdfwkLiszRWysdtbdshIzsPBw/sxXfffy9Ei5e3j8groybjV6/XYf/Bg4iLiUK72zqgVs2aaNP2NmGQc2vv4PsHI4JEKrdStW7VErXr1kOl2Fi063Q7du7YhhbNmpKwTMGbb7yBoMBA5JLYOZWYiKEPPii6xd5Lwq+oyAi7pRghJJI9yFAOCQmBl6eBBIKN4g6Hv3+ASI9A4RQD7km+3VitdtGKc/c998DH1wdD7r8fKSmpMJmLoSLxy4ODpKWeQWCgP7y8fGC2WtCxQ3vR+tm6dWsUFztFMLfSKBVKeOh0Ii1BwYFCAPM54LIP9A9E9+498NNPP2LX7j0I9PVGVExl7Nm1SwixefPmITkxAdlkuJcmNiYaC+bPx9Dhj+LV16ZhxdIvEX8yASYSFvwi4OuvvqA8e4n551ho9OjeHU2aNkdkeDjad+iIv/78E0ln0mAg8dOiVXsqA5toFT1x4iSlGWjVpj2qV62KDh064fCRoyRyCvHrht/wFQtVCsBl06VjR+zaexBvz3wLoSGhULha3a433KszwqDCI7X8aJ2/DnS+zGHHYs9EAabuTMMvKYXwory9teU0eizbT8tkZBst4D24yyV3Z84x2TCihif8dUoxGunl5IgFWb1mnTHuyeHw8eCu5g4x1YN3SBzenP0eHh16L6KjwlG/UTOMHDUaTWpWQl5+MXrdNxgPDeqHIrqW1R6+GPO/V/HcuJGoWa0y4ipXw7AnxqF3pzbYtHolbIZQvDZjNmbPehtzP5yHHi2q4cvPlyDXrESzdp3x1LjHoAXlhepibiFu1fUevPTCc2hWvxbqN70N0958A888NQreWgcCIqph0uTnERvsK7oT8yXbr/9DuLt7G1gtVrqnrahSvzkmThgPP9E6KEXh9UQKQkmF4MSJE3j33XdFhc1GIC/5Ifk9GRHcBUcikdw8sHHLXR2HDx+OZs2aCcOeW54ux/F3ZbFk+HNrIzv+9oJ/87Isx9t4NO2mTZu6UlE+8HewPPUDd6Us67hux8evXLkyqlWrhipVqojpJsrK14UclxOLB3e5lQePPvqoSA+/6T8XFuzcisij844aNcrle2G0WjVGPjocL774Irz9/TBu7CiME9/anf19GhugLPg6dOxE4nEh9u/dgy5duwqj2N1i48RB4kgvWkbPwhWERTWj1WiQl5sr1pkCWucuebHRkaLVrHqtupjy0ouwkXDn+HmCbaawgJb0W6lQlYhzNwoSZjzpd2lCAwNgI/F34thRl4/zWzlOkIUn+nYJ34LCIihVJC8oPwa9AZv+2ozdO7bjxcnOr3zcL0MY8ZKgDHHEwlNTcnzu1shL/g62E/7euoOE3I9o2sTZ6qlUKdCmdSv07dsPI0aOwGuvTBX+bjiNKkpPp9va48Fhw3Hw8GG6DxUIDg7AXb17i+l4uCtqrToNRLpKjxDZqkULxCecxqcff4S2dAyGBREniLsfsqAujVarh4+3F3r36ol+fftSub+Eps1ao0G9OiTMp9N1EYi3pk+n3f8bwcDFaCTRN7iqN2oFeMBESs59zQlRSJa1iX6rqQjYyPaild1p+fhwV4oQwgqH8zopouugUZAe98R6iMFkLgc+Do/SGhQWi3atm9Ox+CWDU1DyNaT19EXb227HPXffg549uqN+7Rp0LSjALc7V6zVCi6Z1YafzxN2rrVCheZvbxLnv2+cutGhSH14GDdJS02AstiI7NwfFJguy0pIRfzoVAUFhUMOGgNBodLitDeXxn8RbzDZUo2ugT7+70e2OjggJDkbzli3hrVdDq/dGxy6d4aWl65ruFSsdu27DZqhfI06UC4+66hMYKrpQe2pYELoilVwX5KAyklsefkg/9thjJSMTckXqhh9c7Mef0jZo0MDlK7lR4UFleA46Hrxg8eLFV/zxtEQiKT+4++79998vWqDcg/2wacFChb9p4dGBWUxfLsMfexSvv/wKgoLPHt33wOFjWDBvjhjR83Rapmita9WsEV5/cyZ+Wv0zVq/8DrPf+QDzF36EzNREjH/mBQwYcB86d+iAyJg4nEo4jr739Mezzz6HGW++Lr6H27lnH55/9hmMHPEIGdYqql8+xruzZ+GvLdsRHOCHQjJ0Pye/T6jeefm1aUhPSsDDj46k358iKjwIE59+Dt989x0O7d+NZ5+bLNLZloT+o8OHoV27tqhUqYrwYxZ+sgQ/fPM1Bg0cBKVai1/X/YJ335mNMROehp+nHgMHP4A3ps9Aowa1MHbsBPQfMBCV4mIQ4BeAuiSKetzZE18uXYaEYwfxzLMv4ETiaUx8aiyWL1uGBR99gsLcDIwZOx7PPPe8GNly8P0PgGxvTHvtJSykMlGT0O0/+H4U5WRi5tszUa16Lbw3bz62bPoNL7/yKk6cTBADfrRu08GVYuCV115DRGgw6tVviHfmzEGnDm0x6IGH0bt3Lzw89AEy4jvht99+Q8+ed+K7n37GGSrj8a7Bdbi74ISnn8Zv69biZxKhIWFR+O7HVdi74y888/xLGDhwIDq2b424ytVx+OBePDLiCRKlj6FDu1bo2bsPNm/+Cx07dMTyb1agccOGSEhKxi+rfhLp4BFUyxPuhn6hQWXcsOHsSSJ6b7YJ969LQU6xBQYSXKXtCzelzWx+ScAthEaKOspbj1mtg9HAXysmp/+v4PSdm24l3cvF2cl4acqrOJWaC72HHjarGb4hsRgxahTqVw6H2XLzTRtyq8IvSeWgMhLJBeAR0/h7g71794oPbc+t9NiAYVHI3xZy9ykpMG5s+FuknJwc0crbt29fOaiMRHIDwN1C+YUaD44jWquonmVjmt2rr76KmjVrukJeHr179oLB898jCTuoGueRR6tVq4rAgEDRytq7d2/RNZNbHXx9fUiA1hLHDw8JFS2rrVq3xv79+5GVmY5+/e6GP+1ntZhRp3YdaHU6hIeGoB7lYfPmv5GTlYFxY8ciKiZWGP4bfvsdSYkn8fTTE+Ht7YMO7dshIycPO3dsR726tTFixOMiXdwiF+DnWyL++HvGfbt3IzAwANHRMcKPadywPhluVbBn7x7k5+WRMOxPIikcnW+/HWdS07H5r7/EfGxDhw7DiYTT2LFtCx5/7DG0I1H0ytTXSTRqUaNmXQQH+SOGBC7DrWUNSSxZ6XkWERaKaEp706bNsGPnTmhUSlQnQc71Zc1atYXxyC3k3NrcqmVr8bt50ybQG7zE4DBZGelo1KgxpTtIxM3EUPp5UJcDVIZ33MEj7Q4SA5B07HQ7tm7djr//3oyI8HASrHXFCQrw96c8VhL7cmthCInuSpXi0KZte+HHIiTQ3xdVqlTFnSQiN23ajOysTHTr1k20lnfo2IHKd5eI19fHm9LTCAqVBr+sWUPpy8DTEyfQdVf+o0xfyqAybrjraJRBjX6VvfBLigkZRm6xdX5H6OZcm4PnGzSSOG8R5oV324Sgjr+Gfv93YpA5N40Mt0xrvPxwV9976Jx0Eb0Y7qL7pv/dvRHsY4DJ7JyiQnJjwOeCe0FczaAysoVQcsvC38p8/PHH+Prrr0vEIDv3Nyxug4Xh4cN55EDupuRPDzLJjYlsIZRIbly+/fZbzJ8/XwgMNi0GDBggWg4lVw7PbTjt1VfwyPBh8Pbxw/tz38e4Jx9H/Ybl23VZ4uRSWwgZt/FsIJMi1WjHBwdy8UNCPnKKueXMDhV34KT/bGXbWCgqlGL+wc7RXphYzx/eGgVMFz7EfwsnnGwmpZJHNOYux/wdMk9zIrwlNxCyhVAiuQA8mujSpUuFeOBuoez4pnG/wWZhyNt4yYIxLS0NWVlZYqQ4Die58ZAthBLJjQu3BPK3hNx1kAeb4e8LJVdHaEgwwiOjxHfwqalncE+/PqjfoLFrq6S8uZwWQtZE7HiqCG+1Ap0iDbg9yhOhnmp4a9WirdBosSLWV49GQQYMru6L0fUCMKCyl5ii4nK/G7zuuFSf++U5f5/LflIM3njIFkKJ5ALw0OpcibnFHYsIbl0aPXq0GGmUR7175JFHRLdShm8FDh8QECAF4Q2KbCGUSG5suA7leV55kBF+CSeR3ExcTgthadiQZp2kIdNBq1SIEUMLrXYUkurzJE9PtVJMaG+mDSwgZSubpDwpjxZCafVKblm462dgYKBYsuNRRfntCbcQ8kAzLApZWLi3sxDkYcSlGJRIJJIrg+vPe+65R4pByU2L+/OSy8Edmlv9imwQXUG1KiUCeXRNWvJv9neOCyvFoKR8udzrtSxkC6GkQsGtS0OGDBFikI0WbiGU3DzIFkKJRCKRXCv4k4SjR48iPDz8sloIJZL/En4Rl5KSIgaK4oaPK0EKQkmFQgrCmxspCK8/3JoukUgkNxPcYnIlvX14MDruesc9iSSSm41KlSpdce8MKQglFQopCG9upCC8vvCULDxUv+z+J5FIbha4ZY8Hi6tdu7bLRyKRXAwpCCUVCikIb26kILy+FBYW4tixY4iJibnoiHsSiUTyX8Mtg9y6Fx8fj+bNm7t8JRLJxZCCUFKhkILw5uZqBCG3dqk1aihKPv93wl0iuWtR6Y+yzWYTNBrtBT/UZqODh9jnwYrccFxcpfKItqXhybJ5HDq3Pw9t7p4G5XLgia+3btuGerVrQ0n779i6BW3atnNtLX9YEHJ588hl8nsaiURyo8N1NtfD/B1g06aXP1cj19+8v6zvJDcbfO1fTW8eKQglFQopCG9urkYQjnlqPGIjQvHUhKddPsCc9z/Agb27hfiLiozAmDFjoNN7YNJzz+KBQYNQp249V8iz2bhpE774/HMYi4pQp3ZNTJj4DFb+tAorf/xBiDxPTwNatmiOvv3uEeG//PprFOTnYviwR7Brz14smD8Xr0x5Gf4BgWL7pcLC8nFK41NPjIRvUBiefHw4li371rW1/HELwtjYWGEoyceFRCK5kXELQu7ZcCWCMD8/HwcPHhRdTiWSmwW+7ouLi9GwYUMYDAaX7+UhBaGkQiEF4c3NlQrChKRkPPnY49Dr1Jjz7jsIDY0Q/iMffxz39OuNGjXqYvqMmahdPZb8xmDosGEY9dijZFC0EOFKU2Q04fkX/ofOt7VBh9u7YtfO7WjTpi3mzV+AzPRUDBs2HMkpKXht6lTc1rYlnhz9FOYvXITcnHSMGTsBwx5+GL26d8W9Awa5YvyHAhJgdjJmeFJkhls1eV4sLy9P6Emo2qm6Hv3UUxj1yHAEhIRj9KhH8eWXy0TYPDJkHHZ7uXajPVcQlkZL9pKyAg+dzqVhsUHMN8bFwE6rdi4rIlwe3BBudZUHQ7dbhS0Phqcg4DLhjgYV/fpwU3wdxmq5GkHIo4yeOnUK0dHRIh6J5GaAX2AkJiaKzzvkKKMSySUgBeHNzZUKwpmz56BKTCh2HziO2IhgPPjQcOE/8onHMe7JUahRszaWfb8SO/9aj9emvYXhj47A4yOHo3HjZiJcacwWK54jQRgZEoBxT/3T2jhv/nzYzCY8/sQo8Xv/4aP436SJWL7sa3z2xVKkpiQhLSsHtatVxtCHnccvzaKPP8HmTRtJZanQpVM7dOzaC5Ofew7e3l7ie5g3X5+KuMpVMWrcODz56HD4B4djzJMj8AXFvWz5N/h13RrRunlXzx7o0KmzK9ar43yCkI3a/akWmEgNsbFbEXGQsV85UIUADxUJdacQ2pVshqqCTmNqp0KoHKBGoMFZHja6XnanWCrs9WGle6NSoBrBVB586xjpAjmcbhHrFVUVmqkMmkfrXL+uHVcjCK9kYnpn1Sj+XB50c1T0FwSS8oF7Jl3txPRSEEoqFFIQ3txciSAsKCrC6NFP4t1ZM7H74HHMnzsbixZ+IraNGTsWt3fsCL+AAHz08ce4t29v9Oh5F4Y9+iieGPlImYKQ2b5zF957710YdFrc1/9etG/fEfMWLIDFWIRRT44WYXLy8vEkic2Z09/A+t//wBeffY5Afx/Mm/chVBqtCOPmeHwCpr8xDePHjYF/UCiys9IRE1sZyUmnEB4RgSWffQWbKQcjHhuDJ0UL4TAhCMeOHonPP/8aE599Dk3r10Kffv1hNBbCz8/fFfPVUZYgZANGo1Kg0bvJOJplp3XhXaHgkrCScftB7wA83NQTxbSeXmBH3Ixk6NU8qbUzXEXCRGXwTk8/PNHcG0UWBzKKbKj+dooweitiS7KxyI537/bH4029UUzi8GSOFbcvTEem0V5hXxoY8204/nwUIryVJA7FpXFNuJ6CkKtFzgdViZeVH96PX5o4qEatgLeHpJwpD0FYQasliURSUThy5DjSz5zB2l9+xdFDB5CUlIozKUlim1avw99btmDnjh24q+edQgwKLvKerEmjhpg7dy6atmiNt2fORuLJY//6mNtqsQiDQkOKyWI2o0WrFnCotfj+h+9cIf7hCBkvERHhqFajFoICA1CtWg3ydeC7737E1NemYseOrUjPyHQGLoVbpN3R+Q58tfQbvDN7Jhkl1968YOOngAw6FkXc8lHRHAtAq8UOi90hxA6XuDgTrm1l7XOrO7vZDivbz1weXCD0x0TCkIViWeFvdQcqD5vD+XKAi4PHjyqka4ZbycoKXxEc96EVAorvlVsEvv/99CDRT3Wi2UHn+OKOw3FxeGuV0giX3DDIa1EikdzS/LFpo3hTzG9ivTwNiIurhDWrV4ltBfmFGDx4gBhMpk/ffsKPEca9C24lK92RwmK1ilFCtWo1hg65H9GVq+DIYecgBKpSo4t+98NKeHlo4ecfTIaxBR46Laa8NAULP/qEBOhWVygnPr6+SEs9A5vVLH7b7TZ88cVXKMzPwssvv4zevfsKgXku7nR1ub0DVqxYgUKTDZ9+8rHwu9ao2NKlJ4iCLKKK5pxW/tktX2KV/1TAMnGXBy/ciPUKWh7sON+8KI3K5V9W+IrgOO+3khrkrLDQH/tzASLfyEDMjExEv3VxF0MudHoGnv210Nmy6IxOIvlP4dtTIpFIbknOpKbhwP69GDRwIPr06YN+/fphxMjHsGbNLzAWOQdwYXF3LlaLGQqHAsZiE8ZPmIBTifGuLUB6RgYmPD0RH86bhzfefAtZqSlo3KylUJFbtm7Fe+++i+effwGb/9iA0aPHiH1sJOYKCwsQFRGOIUOH4dVXp6KoMF9sYxrVqwubQynE3+x33sFHC+cjKiYGJ+LjsWrVKixd+jUJTmd1zSONcsujzcFv2x0wU9yvvz4Nq1f/jMKCfAQEBIhwEolEIrk28Ls4HjRp9xkrPthWDPC7wEt13JmE9n9/qxH70q1isKFS7xwvCa77z+cui3P2EVMwudYvO66z4O/LFf8arbV0OktH7/Y7H6X3K825/rxUUB7kKLGXjxSEEonklkWn0+IeEoGVKldx+QD16tbGoAeGwGQ2Y+DAAYiKinFt+YcHhwxBbFwlpJw5g/y8XPh4O0f9ZCJCQzHs4eHwIr+Y6AhMmzaNRFgw2rZtg549eyEgMBCdO3fEjJkzUadufbFP2zZtyO8Osd6vT28xaI3J5GwNZAweekx+cTJqU/iwkGD06n0XOne8Db373oO8vDw8/NCDFHdfEXbgffciJDQcvt5eGPHoSGg1GnToeDvOnElFpw7t0fdu51QX54PnTpRIJBLJ1cGNnvkmOxw8GClb06xJuCMHV+0XchyO9AoPPJRX7Ox2fulQeBI7er2+TMff13N055dWZ6Ohfbw8PZ0t+iSm+Hljdg2Nq9Pp4UHPJt52qfE5YTGohsWYhyPH4mFzfYqpUChFnJ50PIPBA1oeqtq5Rfjr9ToSpGUXhpqec5w/ft654XLg8SA4Pg/axvtyL53stGSciE8iUcjqW3KpyEFlJBUKOajMzc3VzEN4JSxdvhzenh7o1q2Hy+fmZ82aNThx4gSGDx/+rwn0z+V8g8rwwCnVZqXgZLYVCu7zVMEQRWGxY27fAIxo7gWjxYE0HlTmzSSysBRk+FSsMhHlYbZjdh9/jG7pLcojw2hHzBtUHnR9VLTyYBwFVszpH4RRzbzEd6UJeVa0mpuG7GK7s/tkBcSRZ8GxyTGI8lbCdJMPKsPXvKcW+DXejN6f54mKMdhLic6VtFCTOCzLsub88kAyq46ZkV3kEN1Fvx/oh/ZxahSRULx4ebAYVCPj9EkcPpHIiohEkIqEj6Kk54jW4IW6dWrDg8QWj/Z7oSg1lNC/N/6CrQeSMWLkIzBmnMRL/5uCHkOfRNc2DbH9jzXYcigd993bD956JaXdGV/Js+A8Cebt3j6+WDTjWfxxAnhz6v/gpVXAZCzAkQP7sP9wPDx8/FGzdh1UqxQNh8WIXbt3w2RToxb5+XlpSUT+U4AqpRJpyYk4Gp+IkMjKqFopUoi/zJTT2LNvH5LTshERFYf69esiLDgIW39dgRkLvsXzr72OWlEBMFts1+xau1GQg8pIJBLJNaRH9+7o0qWr69etARtLS5cuxfTp0+U8WxKJRFIeUFV6ZzUtPr/bG/N7nd991s8HvWroABLElwvrMLVag6Sj+7Cc6vBvv/sOny/5GB/MnYfly1dgxfKlWLl6NfKKLVCVSMF/ulS6JZZ7Xal04OihvVj3+ybYVVraw4aCvFzRcsmfKBw5uAsb/9qMArMNSpei4n1ZCLIrHacb9mPRaivKwJr1O9C+Y2cEeOlgtxThq0Xz8Masudi5dy82rP4R06ZNRXKOEZaCTHz04fuYPettrFi1HgrXKNziWCR07OZCLPnoQ8yaPQvfr/4datqen56IqS+/jM+Wfo+DJDI/+3gePvjoUxQ7FKhVvymifJV0/L/Ft/tcBpKLIwWhRCKRnAdPg+GW+xaBWwXZrVu3Ds888wwKCgpcWyQSiURyRdBj4qdjZoxdXSAGi3mmDDeJ3FOrC/EzhRPfEl4mLMLMpmLUbdcVr77+Ot58czr6dGsBh9IHE55/Ga+T33Pjn0L1mAiotWruAkhSSAkvb1/4+nhzEoXIUmt0CODJyx0qDHx4DD5bOAd6R7FoAeTnHUs/7jbad8hozH17GsJ9tbDaWSSqxABoPt7e8PLyhp+fL7RqnmezlOCiNKop3NFdW5Bt16Npo1oivqSjB/Db5h3odt9DmPnWm5TWqRh+f3/n/hS31WKjeHXYueVPZOaZoHa1omu0WiQc3oMjCakI8PWGzWoVrWGb163GmWINxj87mYTl6yQOX0TrxvVhNZvgHRyGBrWr4s/1awGdoUQaSy6MFIQSiURSweAHqpeXF/bu3YuHHnoI+/fvd22RSCQSyWVD1nRavh2z/zBi/tYifLTd+C/34ZYivL2xSIS7Guubv8XzMBjIeUCv1ZCHEgb+lo6EWlHWKYx+ZBh+23mURKEWHrR94ayXMWX6XJjpoBqtDukJ+/HYiEdwNK0Af/z8LV5+dTZUpYUTrWjUamxZ/R3enP0hjFYFNBotCjLP4AMSiPyN/YMPDsGzL0zD8aRM6HXaElHIcXBL47bt2xAYWR3RYX5CTBabi2Eikenl6QMdpUFPIrVdx04I8dbDTtstFhM63HkfrLlJ2EDCUafXCQGsJEm76sfvEF6lIZrVqgyLjVsrHcgrKBTfFbLYZVEZGl0ZnTu0g8pugc2uRqNmjZCdcpzSl0PhKJbSolVSJlIQSiSSmw5+UMhRxK6M0uXG39IWFRXh6aefxp9//unylUgkEsllQ5qjey0tTo8PwtHRgTjy5D+Of58i/w7VSMBdfL77i8IjZNttdvHdILcDipGnyc/TyxsOUzZ++2MLWfgqOKxF2PLXVuzauQ0pGfkwGPQ4vHc7jiZkINjfG5npZ3As/gQU53xPzt/tZaadQfzJBEouPW9tRXjv7Tfx+9ajuLNff9zX906kx+/Cy6+8jjyLQ4Rn+NlsIfF3Mj4ZUTGR0GnUYsqkiNgqqBwZhE/nzsRnK35EVk7BPwKUsNmsCImoirqVwvDbul9htitFT5bCzCRs3huPlm3bwKBVw0H5tJN0adK8OfJT4/H2W2/gl01bheh0OJwFa6Vy8A+KhL/ajGOnU6BSqM86lqRs5KAykgqFHFTm5oYHleEP/nlQmTZt2ojlhT78l5wNP2CTk5Oxb98+0UrID2/G4prjcNCgQcK5kYPKlI0oCjmoTAmiPOSgMmchB5X5N7f0oDL8no2CN4vS4M3bDVw9sD4sgbPK+Z24thC7kinzFF5FAS5vUJl/4PrYw+CFdd/Nx4LlOzBr1lsI8FKKEUuXLnoH329Nwdw5b8KWfhjDRz8Ntd4PDz42Hv27t8SU8aMQbwvHwndewuJZU7F0/QEsW/EZ0k/sxqSnJqHPY5NwV6fmWD5/Flb8fRJzZk1H2v7fMe7FGXh80mvo27kplQ2wc9MqPPfidIx57R20r1tJzNHL3/zZjNl44flnEF6vN8aP6AtTsUl893cm/gCWLPkMG//ehdCYKujZ52707n47is4cx2NPPIEhz81FQPZ2vPzOEsz4YCFqxwZi3YqFeH/Fdrzz9mv4af50nEQUJk94RLQcbvh5BZZ/uwrHTp1B45btMPj+IahFgpIHSS3OSsS4UaPQ5fE3MaBDTRSb/j2P761EeQwqIwWhpEIhBeHNDZ+vxMREMfw0zx8oq6/Lh0WhxjV0d2lDnY0oFoDdunXDxIkThd+tKAhLXzNXKlREFFIQliDKQwrCs5CC8N/cioJw3Qkz7mJB6G5gE7vQxrIy5656XH3znILQlwShpnwEoSfdayoNTu7+HWNenI1ps+eh8MBKfLXhJEI9imAOqocpj/XEI48+ifb3PI6R/Ttg0TszsOwigvDdd97E9jVf4J0lGzBz1puIDPCEXalGfspJTBr/FDoOfxYDOjWB2cKCUAW7MRPPkyCMazIIox+6A8UkCBkWhbQVO7f/hR+/+RZ/7T6McZPfQJsqPnh05AgMevo9dKimxsRx41Hj9iEYPbATJj4xHDFtB+PJIT2wcNr/cEoVgxcmDIeNjqXV6ZCXnY5d2/7GwvkfQRkQLaZvqhTqj4I0EoTjnsTtD7+KgZ3rSEF4CcguoxKJ5Kahbdu2wrhkMchLrgSlu3QnBgwow+pg48JsNiMqKkqU8fWCBxNwiHm8nJaS+E1C63xCn/3Pt+1SEPvy7mSgl/yWSCSSK+Ss92Fct7JVzYKf/c91Yhs5/kFVj42W7F2e1ZDNZkflmvUQRuJw66692LP7IOo2b4PmTerh+MF92LVrFwqsWtSvU40E3OWIJIXorumuMzndUHBnVef3hqVxBlGQEMxz6mOC5wx02G0wU/oaNW+PMU+NRY1wb2zfdYjKwSFKwm6zwicwEm2aN8L2v/7A5o1rcSylGLd3akPlXPq5oBAvNi1kB3h4+eH2Hn0xduQQFGYk4/DxZGg0POUGP1fsJJDpuGIf976S8yFbCCUVCtlCePOTkpIiujhWxFaHq4W72P7666/49NNPRSshlyG/BefJ6uvUqSO+JQwPD3eFvrYthCz+PPVKPFTPC9/vKUBiEQ84oEavynr8cqQQ6WXNiMFCji0Mbelj8vr5HmPnbCPh2aiyFz7oGoBO7yWi6Apb80RRyBbCEkR5yBbCs5AthP/mlmohJEfVIHJNdnRdkoujSZQhD/Lgc8s3BO/qevFUJlS/1Y/VYMV9PgigepBuGVFbXSpcH4sWwm8/xIIVO0taCHnKCF9fL8x6aQK2JxTAXpiNx16ciUgkYdLLsxEY5EXpjMK0V5+Hl9qCL+e/J7qMLj9vC2E85sx+C8m7f8W4yW/hiWen4p6uLUUZb/p5GaZMn4+XZn2AhlXCxVyIdHFDaS/G9BefRa5fTbw2aRQUdiuSE+Oh9AhAbFSYqA/y0hPxzPixiG0zCCN6NcZjj43EfeNmot9ttRC/7y889fzr9LzSwie2AT58+xWYCnOw6M0pOK2JxeTxw3HowAFUql4H3no1tHoDNv24GFPf/wqPPT0F3VrXwcmD2zH6yQkYNX0hOtSJQrHJfEvXQ/zCV7YQSiSSCgULlpiYGERHR0t3mS4kJEQ4t6HDD3Wr1Yp27drh7bffPksMXnPIAmoc54U590Tix/tDhaAI8dNi7r3hqOVJjybariAjibtViTm7yPB6pls43u3pR+tOg0shsuGcF4sNLLbShB8ZRUo2r2z0g/4rOQ4SoGyg6dRq1Av/Z1Q8iUQiuVxYWnDHBn8Sc+sf9MPL3b0Q6aNyelJ9FeenwtMdPfFcJ088e45j/9d7emL5vT4IMiiFbrxSqWK322CxWEvVZzyipx2tWrVEdloCcu0G1IyLRGhkLCqFeOLA3iNo1KINvDQOZ5VotYgXrLw3x8GthlaqN/m31UbbzFbxjKjVuBXaNqyORXOmY/b7izDvndmYs+Ar1G3fHfWrRolnicBhh1prQI1qsUg8Fo9CkwVanQcOblmPsaNG4n+vTMVHC+dh0qT/Ic3kje6d21DebTCbTWIyeguJysq1m6BmTCCyC0zo0f1OOMxGyqeD0mOl7XYR/vtP38PwR0Zg9ntzMWv6K5g2Zwmq1W+JZvWriHhSTscjH5T3GBL27rRJLogUhBKJRFKBcD+4+SHP6/369cPzzz8v/K43rNe4pa16jDcG1vIQb9vzhXOgfU0ffHZfOL4bEok+lXRoWtkTQxt7YXCzALza3heNwvWY0TkAWjJidHoNPuwZhHAPFSZ2CMSU9kH46r5Q1AzU4OU7QrDi/kh83S8MgTrSkmSwmcm5zSeJRCK5UnjwGB+dAsMa60XrHMwONIlW4+M+Xnilgyf+186AF85xL7U34MnmBgSSGDRfhVbhkTnDoqqiTaum4F6bLOhYWFpIXFWt2wSdO3RA59s7wUdP6VJ7oVPnzmjboTNaN64FU7FZpDeuai20bdkCluIiaPVeaNmmLSJDAoRIjKVtzRs3IKFgh0Whx2PjJuDuHh1x+sRhJJzJxB19B+CpkUOhsluFuHTjUChRt24D5KSdRHJaHuxWM1re0QdDB90Nja0YR4/HI65OYzw96RnUjg2GQu2BNrd1QliAQeTJ7FCj51190LlLV7QgEcqte6x3q9apjzrVK1HdrcKQkePQrmltZJxJQlJqNu68dzBGPz4MBrUCDpsJhw8egU9wDCKDvSmfXMhXKrkrDrLLqKRCIbuMSio6a9euxbRp08Q9MGHCBHTs2NG15d9c0y6jJPza1ffF15388E2SBf3i1Gj1USrWj4jCnW/HY3CXUGSmFcJm0OPFlp544KszeLJbOCJUFry6OgvZWi2+vMsPlV6PR5G3Aeb/RaHJ6yfx3vBKaKi1YPpvWdh4xorBdbzw/cFCPN87DAd3pOP1I3ZsfCgY4ZOPoVj7z0irl4MoCtlltARRHrLL6FnILqP/5lbqMuqGr30fHbBotxFPLC1A38Y6zO3pRcJEBeOFuozSJt56tWWgIiWoVilJBFpIlLmOR0ulSg2tRkPHcIhv7rnm1mg1YnoIi8VMZeTMG8/lpya/YvFdvhJaCuN+WcjbVHStmjluKgv+zd8L8nYeTVTEZSZhSdvc2eDjKRVq6FGAQQPvR5chT2NYvw4wkgDVUp3tcNgoboeYvN5O6xy387ha2Eg4ulsnOe38zbu75ZBqEXF8noOQ93GmRQWrhS4kSgfHx0LY5iCRnX8GL/3vBYQ07oXJj9+LnLyCW74Okl1GJRKJRHJZFBcXC2PnpZdeuqAYvD4o6MGvwFvrMmDz9cCzzX1gIYNApwZm/pEJP18dOlbSQa9T4dCZYvxBwvFAWhG+2pGLbAuE8OCX8mwwWE020mjcVdSBp5cmY/LabKw9XIgfThjRpboBPiT+DDoyK8hYcplN1x0+blmuPGDB7nYXQxyX/pTXsa+Uc48v0sXuPGlzb78SSpePO56rie96c26ayyvdoqzLK7IKCXdDV2LhDhOeu8MTH/X2gY6M8wuKQYb0SXloFBuJM5PJ/I8YZChi7kpabCp2iUHGIcQb1/9uMcjwHIEsBhmex4/Dl/QioW0cN98zLKhEWNqfBaE7rtJikOF1PrbKMwT9enTA5g1rkJZXTJHbSBQaRXzcTdWZNrPYx3lcisuVLo6DWyg5fu4q6oyf6ngSsiwGGT6+0VgsprpwrheJ7qb8bfzBXVuQZdGhd9d2KCwyivCSiyMFoUQikVQgKleuLLqINmvWzOXz36JRKnAyoxivbczFI50DEULCLcfkwLrHK6GxnxK/kqArtgJqlYIMLX5PTNAfBT29eGw7k9UOnkTDaTTQQ41Wco1k0FD4Xk0CsLhXIOLTinEyzyq2/VcIocb9qoSCLeXIj/5eFSJuho1Q/l+Ghc8+bkcBnGmhpfj9H+AuD3dSxYLTVMq5NglKtlOZlZG9CyKORf9VtOTvUsu7/K81In2uvJc4yovwvwJ4P+Hcf7gMrjSyCgwXmYqE0imqW8a2MGBia4M4NaaLNyzelLhb2fh+ctcx/65S2cdBQqwQd9zzEEYNH0T1tE1cX2JL6X2vQhH/Oy3O3ywa42o2wbOTJiAuxEeIzFu9dbC8kIJQUqHgZnV3ZcTrEklFg0cTrVmzpuvXf4uGbkEvEoDcBfX9NWmIL1LAx1ctDK3a/iqkZprg56GBn6dSPKwKSfx1ru6DR1r6wVxoRkiIATO6B2PzyEgxL7Ra6YCB4tPxD4ok0kcNHa1wd85oipcFpYaEoqfWJSyvE6LOcSgQ5KlGDKUj3EuFcG8VYv3U8OShCl11kmshELu41t3w79JhGPdv7j41rlMgantTSbn2dW8TC377zpYqGf9aKviqwRp4sEJ2BTr3eO71c49XHnB5qCnfETx4EKVLHIPSpad0BeqViPDXIJLKR1jXHJ7/0HZPnRI1KN28g0ivy52L8HetC+gHd3H7Y0w1jKimFcfha4OviVAPTgPFx8HOE1dp/hX3NUYci/LuTXmPoDLhNPM15MldtV2JK52mstJ39nZaM9N1IF4eOBDsrUalgPOXqXuVl6W8JQTXIdyWZlAr0bemFlQ9XdUAMTcLLLAuJLJ4Gw/kovXwQa2aNah+534b/2wrT4FWOj5e8jeIvsHhqBwXS+dBXrGXAz9jJZJbkszMTGRkZCArK0u4vLw88X0A90tnMcjfR/Fw++7t7vCX8t2ARCK5SkgQHEsz4e0/c2BRsYixY8Anp/DmLxnIJ4u026Ik+Ed4IkRlxWurM5BDRvG7v6VhQ4IF9cJ12HOqEPcvS0WVUD2++D0dr63PQYYJWPhHJnbn0T1Mom/+pgzM2m1E73reWP5XFr46asTJLBPe25QLKxvU1xPK05Suodj5WAxOPFMVx8fFYefjMRjVyAAUkSji0SnIouQ5GcW6y7EB756fscSPw7A/Cyb2YwOf6jQeUKceiQVhlbrDWmidtlcNNeB/t/nSsawIC9Bj5QNR6BFCYUsfj4/vOp5zX1ccruOVGxR/hK8eO8ZWwtAqOuex6f8zXULxTa9AvN49FG/dTmk12pxp4PwV29GqshcOPBYlRKQQi2yBc/oovyLdvOTw7E/7lKSZ/JtW8kTLIOCXJDsOPF0F+0fFYDudi2W9gqFlw5GPwXGx47hEfG4/1+9S5V3uZXI++BhmB17qEYakSVWw4eFo/PVIFIZVonIrpjRwelyO81+yXpKHs9PMI2De19wf3cPo3FP53tPYD8vvDYaSz7k7f664RP74mnDt745X8g9ci3CJFFmcy+tcq9ywsDjjrqA8aun1vGLEccmGs1ic3V4ll44cVEZyy7Jq1SosW7asZL41dtz3neexY0FoMBgQGBhY0l++qKgIrVq1wvDhw8WkpxJJReeaDirD8XGUbIRyKxnD62R3it+8zgEcrm0aWvI2fmHD/UX5dSaH4T6AdlcY936cJvbiKNgg5nknOAy3iLn3E8fkeoEWl4koCjKOL3VQGXdegzyU8NWo8M6AaBQl52DUmhxYKWiTaD0ZTkCEjxLfHSpE61hPVAtWIyXNjG8OFyLAT4MWgWoUUL5rBWuw6VAB9mdaERumwx3VDMjLtWDNSRP+GhuLpz9OxMp0G3pVNyDKT409J4vwe5IJr98VhTFN9HjoixT8cdqEe2p74ft9eThRAHSu5YnadLx9iUZsoHi8fTRoGaKCQ6NGFX8Vlu/KQxqJDy67c/PGiPIgwXCpg8oIwUl+vzwWB2NSLnp9kQ69vxZbxlbGou9PYZ9FjVBSLp8dKsYddbxQK0CDtZTWTMr/2AYGPLs2GwYqk67VPBHhqcC2E0X4m/JUP84APzpUaJAOHnYblu0rQJErbdMHxaC12ozblmYh5X+VMOWr01iWYBLn5QzlrQ+VQbiPGqfTi/HDUf7uSIFGMR5oE6PHgdNF+DWhGJ4GNe6h9BjoevpmT77Y77xlUk6Dyohrx+TA3KExaK81o97CVAR6qpBZbEO9SD10VNaVI/QoKDDRebWgB51XY74ZK48ZYSIhWZXCdIjzgMNswxe78+jc6rD20WgUJhbg2Y05yKZ8dg5VY8bWfPh4a9C3rid0dMzfjxbiUJYNzWhfNcVTja7RghwTvj1aBDulv6w8X4xbcVAZieRGQA4qI5FcgC5duqBq1ao4fPgwEhMTRSXPYpDFnruFMD4+Xmw7cuSIaDns1auXFIMSyXVAGJRsEJYIM1qykGPhx+vsr6ZHFP9mx2H4icV+3CWUjWoOw62L7jAcjP34P8fBYdjfHYb3o8XViMErwZ3XjCI7jpN4M5KYzDPZkJppQSFt+PzBWKwdGonRjb1wT31fzOsZjE4kbpYOjcaASlrUDvPATyPjsPzuEEzsEIy1D0UgyKDC4gGReKCOJ0a2CUAHEoykwVBE4uOx1oFiSo4u1X3w7YPReLCmAW2itdBrVXi8uR8iSfCNvC0AflQ+k3qF4+f7w9CjihfWPBqHcY0MqBfhiZ9HVsL8HsH4X+cQfEXH5Z6V5QbHRYJm2YEC9GzoI8R1gygDang48Mm+QvRpFoA7KunQi5ZL+oagM4nbsQ1JGIbrMaljoDh/n98fjfndgzCgkT/WjYxFCxI1g1sH4bdRsXimpQ8+GhyNaa0pbhJgBm8telfW4XMStiotD0vvEFObnKECO1Nkw50N/PFej0B0q+6Nbx+OQU+Kq0UNb+wYHYsBtb3x0X1haEXie82IWIxr7I276Zg/DQ5HqJ5OKgvO6wDP+e3loUJTEmY16VzbTHaM6xyKzWPjSHT6YNmwWOyk9D7b2g/Lh8VgZHU9DD5a7B0dh5FUdpO7h+H7e0PRrYoHIr1J6Md64s6qenSia2RIQ28EkNhdS/l7voUvHm8ThH3j4hCmduCpLqH4c2wsxjb3xbKHYvAMCUYxi/otDN+vbCPwUjrpbgbnvl6vBtlCKLml4RbByZMnY9u2bfD0pAdZGfBoVjqdDjNnzhQtIRKJxMm1bCG8mRFFcRkthG6cZajAiodikXc6B0O/yYIhUIuUydXwzKcnMHdPsSjgOiFaBPpqMLNfBNb+fgYrs4CND4Uh4IUj8A40YP+oaNw9LwHzhsVh554sDPk+HcVqDfZPjMXEjxLxfZIFdYM1iAzR4Z0+YXjvm0RssXvg694+iHn5BHwjvbH9kTA8vDgFvz1VCUPeP4FPdxZiyoNx6O1vx3PbjPi8VwCqv34MhnBv7B4WimZvx+NokaPM1i2RrctoIWS4O2ZwoAfSJlXCHa8dRNM24RgQrkCDmYn4cFQVaM7kYKvDA281N6DHR6ew4ZgRbZoE4I97A9D2swwsvzcId847he1JZvwwoRqKk7KxV2VAa50F3RYmY2y/KIyMUaLmrAT0bBOCD2/3QdM5CcjXaXFyYmWobDbkk3jetCcbA5amo36MHsFU5u/cG4kPVySg7W0RCM3KQ/uFqfAMUuOO2n5YcW8whn6RAqNOja9IJN777nEsS7RAIV4wnE15txDOJoE7qp4Htp02IS/bjLs/T8acEVUQkV+ALguSsfDJqqhnL0bz95Lw+VPV4EjLxRGlAd29LGhJ5eFJZV0wuRKavnEMw7tHwn48B0+szcKjvcMxMlqFaXuLsaibP6JePYZchRqHX6iOj386hWp1g+Cbk4+7F6fjvVGV0cxciOafpEPhxW9XLo+boYUwJycHBw8eREBAQEmdJ5Hc6HAdy5881a1bV7YQSiRlwa19PKJicHAwzGbn8Mml4QcHdyl94oknpBiUSK4xfP9JI4vKwbV0w0Wy/zQPzQ60reWDDSNjMLVjAGr4qclwJk82nElgZJMgszrsMJL4Ssk1oe+nSYiK88GJiZXRJVKDIhJiRhJaw9oF4neK4+lWfgjVK8UndTyfmDDAyfGCe23ylB9UC2JTupkqSyUSM01i1FcdCZysQgvSjRSfmZyNR+fksOUICcX0jGIsPVKMsR0D0buqHst25LoEJOCpUeL91Wfwzj4jfnq8Mmb3DBQNvNyLz6BVoCjPhuM5FpGRo1kW+BtUUFNBnsknpWGDKAcxFD+le0BjH/x5pADJhXaRP567bNJXp9FoxgkM+ykLdzQPwIZHo/HibQGI9VGStlXQ8YHDp+icULkU5tpQSFFBrcK99bzxQE0Dvt6chRMF3H1Z5Oaao6Vy2XUoGy3eOIEun6cgj06ZTulAMolDJpXEVi6JTe4inZZrhZUupgBPJRJSKA9UJIWFzk8jAqhcnT2uOUMELWxUTjwYkzGf4iigcFR2CRRHIJUpl29KNqs3ugRNdira65Th/wh+cczd7njp7e0tnXQ3hXNft15eXq4r+fKRglByy8M3CrcS8kTc3Brohg1THlSmf//+6NSpk8tXIpFcC4QQJHuVHa9WZLQkSrjnK8PmNc+7qHF1Y+1X3wc5yYXo/lES9uZYoSfRpuQWJRZvtI+a1lkcRPrp4G2zos2seJg8dbi7lkEY90qlCoObkADakYk7vziDFDLi9RQ/iyxvvQY1wvTgxh0tHS+vyAYj1HixhR/8g7W4q54XjpPAMJP9z8dlBcajsupcIq1c4fhIbMzfko0erUNQWWfHF4eLRD5ZtPH2epEe+PDXVIxbm4X7mvgiWE9lQYImKdeCsCgDBjX0RqU4T/SnvG+NN0JLBcmt1wyXJ6/5+WvROVKLz/fkC3/uPexB4ie32IYMEj+FRhtGtPXH4SO5uJeEFos8g4pEZroVd7cNQGSIFg/Sdh/WU3ThvrUuDf2+TMHUTTnYS6L0ellRPO1KiI+WjD49GkbroPJwtryK/NJSQxnTUxhOj47KSE9leDjFjO7N/dE4Rod7GnH3WRsOk9DjcFXDdAgL0pD+5ji4TK0IjvZC55qeaFPDG7dHa7HxhBEeOoqLrwX6z9cMXw+3MvyCODw8HFFRUeI7Qumkuxmc+3rlT5+ulOtUlUkk/y01atTAxIkTxc3CrYJsnObn52PgwIEYMGCAK5REIrkWCDFoduC1XuGY1d4XMDlbK9hfjKBptTuX/M/tZyPH/vzbHZZ/s+Nt7jDsz+7c9Yvte2646yhSD6WZkJBDZUDGNdVG2HWqGPlcJAoHFv6VDUWQJ7Y/EQOd0YLEQhvyi+3Yk1wswvNAIRzeTI/vF3qE48TEOJxKyMP72/JxPN2EXFJzb6/PRu26Afj7oQjkZhQj1QRsP1mIvVl2bHw0BjEkeHYmm2AstqL7wiQ0beiPQ2Ni4VVowtPrspBKwmE/iQn+BtNstWFPkglWKrPyRMg1Ehpr9+TiWKYFK3bk4BgLLLJnTqQX4wD5Narijd8ei8WzTb3w+poMnMyx4MgZEw6cKMT4NZl4pmsYNg2LwPqdmXh2Yx5y8sw4nkVqVqtABoXdk2pGp7q+MOcV43fODwkaM53v7YlGFPB3cCxuyG/aT+mIruyLX4ZGwJZrRhZte3llKg4Wq7FrVCweruuJbUdz8cJvOfjkwRgcHROHVzv7w4+EpbjArjV0mF1JRcj31OP7odH4fEAkhtXU0zkqxolcKjPKQxIJ+cMZFrHOLb2nqCzfX5OKPzId+HFYDGZ08sPQL5KRmGfHV9tz0bS+P2Z0CaTnoBWHsy34ZV8upvyWjc8of5/1DcaCdan4Lp7iyTQjgc8LxXs6w4z96XQMFuwSieSWQn5DKKlQLF26FB988AG0Wq0QibNmzRJvWSUSyb8pr28Ixb5GO34YXQX69Hx0+SwV8FIDFhv8PLUI8ACyCmzIKXZAq1fAQMHNSqVoETqVYy0ZRDTaXw072fs82XA+Ge0+ZJCnGW2i4THMoERmkR0W2h5J4dhWP5VrISFDO9Pxg7zVdEiF6G5pIiGYU2hHoJ8GAToFjnKXSc4H1QWXUh2IorjibwgBT04cpaHQ1R00yEOFLBJhQnOR7R3io4KB/FON7OEQ+tmP0pnFXQIp7kBeN9lh0CgR7aVCcq4VeRSXn4cS+dytj4JFUhxKynsW7czax+zaHkjpO05p9SHRVEBlYad0BHiqEcJlzV0jKRwPvOJLZSWOR8a/P/3OpXi5nMvKm8jWZX5DyIjyoEgDKP8m2r+QC4CCcr64MIoo3zHelA8Kd5LSpqQ08fnK4A0UMMyHzimFj8+zijwb9CzQaD86Pnd79VQrsYQEzqnDWRjxS444N7yfL8XBXWHNrvPBZR7mq4KWfmazPx2bhTfHF22g8i2wIp/Sx2UfRcfkAXZO0fVaTGXH6S2zTMrtG0LxV7Sacsue81AKitMuWg3d+eVWT+4ym0/p5vkaFZSHAlrXUJ6j6V4rpnstmd86iH2oXH3V4kVDPoXzpLj5/DKxPG0JxSNEIMFx8e9CV7w8uX8eHe9y8uDmZviGUCKpqEhBKKlwTH7heSQnJeONN95AYHCIy1cikZxLeQvC5U9Uhj6jAHd+QYKQjMuu9f3w08Aw5JNhrTBa0XD6cdSo44d5nQKg8dIg3EuJLzekYeC3GZh2bySebOwFNYmFgnwzZm3KxvAmPug0PxEnzEokjK+EUYsT0bhhEJ5r4Q0L2bH7Duei5YfJGHhbMOb0CARPXK+nHHyyLg2/Fakwq2sAPEmMbNmXjb5fpYEkwyUZuqIorkAQMqIseH8OwuFK/eb9SraXhCHHiN/8w7XdtSpUGuW15Lc7vNO+d/52+/F2dhy+dFi3/7lhzzne+YUd/bkCQcj8uzyEp/M3484Hp5kRYXkjrfA2/s29pNjPJSjFH5EoBTrH6XCQBH9SIQXmc1vqeO50iTScr7zYX5Qve/473HnLpJwEISOywscWSxeu5DjTQX/ceT9rnRyntyQP7OiPO7/uMCIe14o7f6K8XWFpIa5NV7wXOp8X4mYQhPxZSVpamhiQTiK5meAecNzd+Uq7jV5XQVhgsok3s8prVQtIJBeBbxSLqQgFBUXwDwwSDw7JzQMPEsHfu4gWFsk155oKQoMKsX5aeMJG4gH4ZXQlfLoqCXuhxaoHItD+jcPQhnjjp3uC0GnhaXz2YBT6zDyKWk1CMKmWHg/9kI4/Rkah4czjOFKkQPbLNTBs3nEcMCqQm2NGaKgHtj4RgxbTjuK5+6KxdXsaPkpwYN/jkbj349P4angspi4/jTl7imB5qxae/vwkZm4toswpRR4vhCiKKxSEtyKiPK5QEF4rxNXKCSslfK5nOspTEN4q3CyjjPK+cpRRyc0ETzuRmpqKWrVqXfEoo9dVEP7v5zTM3pgFL2nMSf4zHGLQBX4g23hiJ8lNRREZ4ffW98GC+yJcPpJrybUQhLr0AvRkQUjCKzbEA/P7hMBXr0DjKA+MXxyPoxoP/NTVG4rnT6B6LR9sfCAMPRclYfHDMfh9eybCKvlAkVWE0evzsP+JKNSdcRzxhUDaKywITyDPS4+3uwaKuecbhWrR8LWjmHBPNGrCjE3ZQK/KGvT/MhVbJlTBgcRC8ECVlQI0mL0qBTO2UkRSEF42ojxuMEHIiCvWfd1e5zRIQfhvbhZBeOrUKTFIx5VMTM+nlqpHsjOc+XNnkRtXOTq6FMS6RFKesCDkObWvZmL66yoIR3+Xijm/ZoiuQhKJRHLZkNF5VxNffPtAlMtDci0pb0H4zagqMKTnoysLQq0KHw2JRhOVGf2+zcTSkXFY8lMSDqp0WNnNF4rJx1G7pg82DArF/STg5j0QiYwzRiRlmvDc6gwkaTXIeSYOTV4/inilFulPx+GBjxLx6qBYLF6agFX5Cqx7JArdZ53Ac/dGoYrGjlNZFsz6LQM/nrHD+mpVPLHoJL44akYEGag8QXkOGWyXIhxEUUhBWIIojxtQEP6XSEH4b24GQZibm4uEhAQxYuPl9CDiaV0MdO/zN8o7U21i8J3jmXak030Q7KFEpQAVmoarUS9EDR2FKzA5RI8XiaQ84N5vp0+fvipBeF2VGb8x4SOyASGddNJJd7mOjUteSG5C6LxlkXHUor4ffnuqMtY8HAEjibvQCE+81zcMNX1VMNnZSCJtYWVl5tyt2OxAMY8YQvD4MGHBeiwYGIFYuw3rkqz4dngcNj4cifxCG4wmO/6KN2JA+yC8e1colCYe+IPEH+3rQUYYzyP38l0RuCdGhZmbC/BCn0gsvz8Cnw2ORD1vlbN7oUQikRD8IuNijv6IF2Ss7d7fakTHT3IxeHk+xqwsxDtbjDDQtgW7ijFuZT7uXZqHNouyMW+bERqqbngaj7LilE66y3XlgWyqk0gkEsk1RTywtEpMWZmCbh8l4bmVaZj8SyaeX5+B+5edwYd/ZaHdnJP4LtGMTUfzcceXqaTgVDiWWoxei08jLsoT3jYL7lmShBE/ZaJWnCfah6nRa0ECxq9KxyOfn0aH+YlYn2LGY1+dxst/ZOO575PRZm4iCjx0aByoxsvfnhHzx+VrNRha3xtPLz2NAUtTsGRXLsZ8n4qtPAKjfCJKJJLLgKopMVpv/6W5mLapCHfV1OGx5jpoNMDCu7ywoLc3PrjTW7zMfPE2T9xZQ4vxawox/Lt8MSqynvaXDYWSGwH5+JNIJBLJNYdbeBOzzNicUIRNJ4uw+bQJ2WRIrT1ciOWHCrEt2YRTBXbkF9vw22meM04pWgp3nzHj1/giJFlV2DumEtY+GIGth/LwzSkzjEYblu7Nx19JZhEu1+IQ+3+xKx+/xBdjVyrPS0fHpO3vPRCNw7R/tMOMWX/liaffH8eL8MnufPxxyoTiS+wuKpFIJCziPNTAiRwbWi/KxY4zVux4xB8TWnvggy1GjGjigUF1PZBldODeWjpMbG3Aa78X4tUOXjg1LgDL9pvQ/bMcnCkkUUji8UpEoUN8JevckbvlX8cvwCS3IFIQSiQSieS6oOAuUhql0/G6khwPMib8aJ1Eo/DjbRyeBZpehdOpRjR44xhqzzmJ+jOO445PkpFUTMYP9x+m/cW+7vg4DuFHTquAxWzDPQtOIuyNE2j53glUnnESv5yxiMnLOUzJsaUYlEgklwDrLq0KSCuy4/4V+WJQLLtDgZEr8/HYygIEGlR4ob1BSDU1VTG8nNbZwNNd4lFXmGAfJWwOJbovyYWSq7LLtsYVUKvUUAmnglqtFgOLuOE0Kui3WqN29b7nVFwvnMfidDnr1X+OzWuc1iudGkFy7bjsS1AikUgkkvLkQlJMbOMnFQm+5EI7zrAQZBFJhgbbGhfaV2zlABSeB/NI4LnoWASSLUJ7u0NIJBLJJcP1DgvC6X8aYbYC3/b3wY+DfHGmwI7PtxrFCMef7C7Gz8fN2HTaip+OmcX3hXqNAh//bcSJbBt+ecAXKwf6IJfqpZnkp7ssfUQC1GpGRkYG0tLIpachOycXdvLXaLQifUpSmIU56djy9zYxyNO5wuxq4fg0Go1Ynt0wyT8UYpCdM0mnUGg0URiuwLkFk8qNBOrBPTtxLD5JjPguuXGQglAikUgkNzRsdAjHrX/sxG/XxotQ9r5SBkokkiuDW/2Ok6hbvLMYkzsYEOqpQutoNUa38EBAgBrtY9RYtKsYD/+Qj8HLczFiZT7mbDPhzqo6ePkoRbfSuiFqxPqqMKenN15cW4jkfLt4V3Upkk1FQuzMiT2Y8sIzeGHyC5g8eTImPPUUJj03Gat/30z1nAZ6nQeO7l6P0WPG4WBSNtTuFrkyDnBuV9N//3atELyNBV5Bbib+/PNv5OYZoaJ69axdFCrolTZM/d8ELFu3HR46ncsf8NIr8da0FzFr/qcww916WcYxXUvmYumTlA9SEEokEolEIpFI/jPYyC/L0D+f/3+JklTMioMmVAlUoVMlDUw2BwrNwPIDJrSOUuHDu3ywcagftj7shz8e8sPftPyTlnO6e6FbZS0+IiHJxneRxYG7a+rg6aHAMtqXp624FEXIL7SsJjOycoowaNgovPD88xj/1JOI8FViwZxZ+HT5GnCjXM0mXfDB+3NQJyYANpsdWhKJWp0GOhJoer2OhJxTAmi0WnjoPchPL9w/4pESQ8fSUVixzYPC6LTQ0tKYk4IFcxciOcsIPx+ff4lCLiOTxQyLxcZRlFBQbMekF6fhqREPQAsrlCq1iJvT4D4+p49TxtHxuVepnWHYeXgYoNVqRFw32GVx0yMFoUQikUgkEonkP4O/f2Ohc674O5//f9XKL4SO1YGVxyzoVV0DL61TCOWb7difbkXbaBKItF1B/wINSkR4q8RSQWFMJMo6V9Zg82krT2MqZrlRU3z96+jw3VEzHLR+Wdki1RcZHYe4ypVQv2EzjH96ElrVi8UP3yxHWq4J1uIi7Nu9HzaKWAEbVn/zFbbsO4E1PyzDm2/NxomUXBJ5emQnx2Pu+7Px1oyZ+GjJUhK3dhKFJA+o7LnVctvGX/AuCc3Z77yLv3YdRkbCAXz5zWo4lFas+XEp5sybjzPZhbRPaVGoEOdOWTpDtE2tVeP0sSM4nZwODQm/MycP4ouvv0FudhYWffAuZs2ajZVrN5JAdIpCtUYLc2EOflj+JWbOmIF33p2LQydSoCMByVFLUVh+SEEokUgkEolEIrnusLDjFiFeenh4iAFHWPyxmOAWIbc/D0Li9neHdy+vJ2w0ZxU7cDLHivZxWnjrlfAnZ7E7kGtyoGG4BjpSed46BTw1zsnqecm/dWolmkRoUGyyg6daDfQgoUZhe9XUIZHiy6N4WXBeEiKcA1abFVaLBSZTMVR6P/S8syvseck4fDIZmSknsPjjT5FTZKV027D5r41445Vn8fHSlUhMjMeZjALE7/0To8eOw+HkfAQH+uKPNcvw/JQ3kWe0wsfHB99+MgevvfUeMvOsMOelYfprL2LbgSNITUuFzW5HdmY6EhJPo9BouaRzYdBr8NO3K7D+j7+hpvOalpyAb75cgkeHPYIjqbmU5kTMen0KVv65l8QjiUJrEaY8Ow5Lf94I/+AQpCbsxXPPTMCWAwnQk7gUKlNSLkhBKJFIJBKJRCK5rrCAYJG3aNEiPPLII3jppZeQlpYGrVYLs9mM6dOn49FHH8Xrr7+OgoIC4Z+fn48XX3wRI0aMwPvvvw+bjbskXkdRSIfigWSKSfz9b30RuizORpfPsjF4RT5yjOS3oQB3kF+3z3PQvZTj33d8mo0xPxdwxtHz81zc8Rn5fZKNV/4ogsVMcYqWxSuEdJHdboVXYBB8PDTILSwQXS0NBoMY4EUIaI0WGo8ATH71Tcx97120qxeKb5d/C0N0U7w3cxpGjByFGdOmIPX4bmw7mAhrXgq+/HYtOvUbSufmOTw7+WXMfONVtGjXHeMeGwq9xhP9hzyG11+ejCrhfiRO7Zy1i6Lz0Im0cFB+AaBWq9B14DDMenMqXpoyGe2b1MRfv2/iYUqxe9NqHM1U47kXpuCJkSMwY+Y7qBfrhxXfrRYtjNfxzN/ySEEokUgkEolEIrmOOESrH4+UuXbtWmRmZmLbtm3Ys2ePaBk8ffo0fv31V+G/efNmxMfHC/9jx45h48aNwv+3335DampqSevh9URFyifcU4EIHxUiyQUZlEJ4hXqphB93FQ0v5dy/QzzJ7Kb/wV4KRNJv3tdHqyyfdi6KhFsLrVQWajXH6fznxkoiu16T1qhVORzGYhOMRXk4k5kPjbIYCz54F3PenYMVP62HzWJFXm4u0s8kIM+sR9NG9QFLMQoKjYiOqwI/gwpGkwkOux0ms0k4m4M7wF4BtJ9S6YFOHdvDmJ8Hh0qHmNAgUrdW7rGK4/GnodWpsH71t3hn9mzMW7QYOQXFyMtMg0WMXiopL2RpSiQSiUQikUiuO9xyZbVahaCzk8Ao3drHv9mfWwG5qyjDS/ZnP+a6tg4SrDs9tIBGo8CIph745C4ffNTLG2919hRdQ8e38MDHfbyxkPzOdZ+Q/4vtDaTMHPjwTh8s6u2Nj/r6YGRjHrRFAQ+1opR8u0RoB7EPFYNao0HqqVPIN5NQDSRRxRtKRcjiUEPimVsSOR92Eo8WKkcPHqzF0xMGDw/oDL4Y8MADaFynCiwkAu0qLeVXQ7rNObgPl7tTfJOjY4ryP+c4ZSF24aVzUQqnD4tQB4lDh4O/PRReYpPRYoJeq4OXF6XP00DiX412nbvjnj53wEailudaLH0NuK8TxrnN9UNyUaQglEgkEsllwY9wOz/h+T8tK5pzlgCtc2G4KFmvgGXiyrQz/y5KflbA8mBXRpFU6HuGHef9H5xCMDg4GMOGDUPdunXRr18/NG/eHEVFRYiLi8ODDz4o/AcOHIiqVasK/xo1amDQoEFo0KCBWIaGhl7XbqOkixCoV6JagAprjpuRb3J+O8gDqvAnbYczrCi2AAXkx/P/sePRRN2/D2WQkKVwSpVDdDHlSQu/PWRCZT8VfHQ8wb3rQBeDw1GedSTmDB4GePv4IDPpGH5YtRbBcbVQJSasRDSXlDstxXngVRJfWj2JWK0KCp0/HnroYQwZMoTKfAgGDxqIylHB8PAKgMqcgyMJp0goGoQgsxgLUWym8qZo7FYLbFTsHh56EmrKkridONd5cBjutup0HlCVEmyloSuE/rK4pKU7jZS/EG9vmO1KdLmzL4Y9/JBI4wMPDMHt7VrARse3mIspPRZnvLRfQUG+KBeeGsNYWAALd8OVovCSkIJQIpFIJJeNgh60MLOjHxXRkdFnsbIh48ZdHhW0TKgsyC4TsD0nDNuKfI1Q3vmbMIb/2u20pDKq0PcMOVeRlMCtfd26dcPUqVMxdOhQeHp6lgi8AQMG4NVXX8W9994rBpBhf17y94avvPIKevXqJVqEzhYi1xY+Eo+8eVcNLb4/aCax5+wqGeChQKyPEltTrNBreUxPB1ILbUjMtSG9yC5GFPUgIbnplIXEpBpeHAkJlSK6Jni6intr60proYvCAkphN2PT+jVYtXIlPlk4Hy9OmYKT2RbcP3gAfPQqUV5Wchwlh7fZbaK82UMIQk8/tGreEPv/XI15nyzFseMnsGvbn5gzZzbiz2QgOKoa6lYKwvdffYofV/+GTb/+jCmvvIxDKTnwNHjR9ZyP3zasx9pf1iFVjDLK58KZPobP4eHdm/Hl119h+fLlWLr0W5zJKRKVAw9Iw+mw0Q4lwtWFuwXYSmXbvEMHFCYfwrtz5mHbrv04emg/Fi/8AD//sYV0tRkfznoDz0yeCQ8SxPv+XovHnxiDQ0k5sBVm4OX/TcSir36AQq11xSy5EAq6kS7x8rt6xv6Qitm/ZkBBF6pEIpFcLg6zHf0a+WD5/VEuH8m1pLCwECdPnkRsbOxZRhePSH4y2zl0ekV9+cqCh78bCiBnY9uGyocnq1ZV0AIpKQ8PKg++VMgdJ+P0rGHnKxBWKpBQTzX8SChw2fD1weKAy6ai3jNmynxVEkNq5RV0jbwMWEzwt4ZNmzZ1+Vw6ubm5SEhIQGRkpFM8lQFPFZFvobzMzsKcO73wUH2eu0+BqZsK8fofRtwWo8buZAvSSQDzeed7wFcNtIzVYiMJwrHN9ZjcwQsmqkDn7SzG06sKcGxMoBiRVNw7F0Gl1iDl2G7MW7gYmXlGur4cMHj5oH6jJritQydUjQ4VA7ycPLAZr771EV55+x2Eezswd8Z0KMMb4JEhvWA18aigSqqvbPj1h6X4+odfYLTYxLyAdRu3wqBB/REV5IfM1BOY/+FHOHDsJG3ToXGr9hj6wCB4ay349vPF+PHXP2FWeOLZl15CzUh/mMW8g0p46oCpL76AxIwCIUpZKfJYp+NeeBG/fvweFGF18eTjQ3Dor1/w4ac/4omnn0ZsiC/lxYofPp2H48V+eHL4INGNddfG1fhyxQ84lZpB0SgREhGD++5/EK1qR+K9WW/heJYBM6Y/h72/f4eZHy7DuMlTUT1AgddemYKw+p3x6P13ie6xtzL8YoS/u+WWdV9fX5fv5SEFoUQiuWmQgvD6cj5ByOaclgwg7qVTYQUh5dxO1htdkgIWyWwo8rIiwlcHC2Oz62U/D58vrhHuW1YB4evDRteHqwGJjGS6Z+iGUSkrZnkwdoeCxAEJg2tcBNdaEDLcvfONP4rwzt9G/PKgHw5lWDFlQxEOJVlwdyM9RjbWI9RbCQ8NYDQrkFVsx6sbi/DLERMqBarxYS9vaNQO3PVZHl7t4oUHSVS6W5QvBRZdLAL+ed+iIKGogo0HlXG1uLm/t1SyABdRc/dJp58bbsXjSeHNpmJYLFYhNvU6HawWsxCa/M0e1/NGY7FzEnmdVgxcw9HxYD5ms4niUNF1zS8+nOnnvyyCFUqVqAfcOJ8h3H3YGcaVKOeSwrufMZwnB6WTEip+azRaOGxWMXgN6Fg8UT6JF5FPjp67lnIc/M2gncIpKYyzCyrHS3rD7mwlvZWRglAikVQopCC8vpQlCPkBzKJn5LdZSC6wQ10BBRAXBRv7Y9r6oGtVHSxkf2Ub7Ri8NAt6tdOgqUhwefC3OqPbeOPOGnqYrGRYmxwYupSe92QRljYKKwoFdD2Mbe+Nu2p4CJGcnG/DM6tyRMtSRX1pkF1op7o7CAFi3r5rd59ca0HI1zvXeya7A/d9nYeTuTaRHxaBf562wkB1wOf3+MJG2/klCYsjHwPQbkEOgjyVaBWlwYw/i0T+awap8ONAXxQ7G9EuG/e3k+cz5Xn7pZj5HM4dtqzwLDg4gW7R54ZFGPufuw//4pS50+fEKQbP5UJpZH8RBzl3b4Nzzwv7uvcuHdeF4r3VkIJQIpFUKKQgvL6cTxDyxMsx05NwJpOsmIpanVvtmHN3EEa18hKDRaSSOK706mlAU9oAqkBQGbzVzx/j2/iI8kgj4z9uKpWHMOZcYSoKnOcCK2YOCsa4ll6i5Sc+14rG76aiuIgVgitcRYLLJNeCI6/GIsZHKV4asNe14Hq0EHJ1qCPhl2ey424ShbtTbfh7uC/8yb6NezsTc3t74eEGHuLFiEED/HjEjOHf5WPfqADkFDvQ4L1MtI3TYnE/bwToqDzoUP/1bcJ1/NkC7h9K6v9ztp/P/1pwPY91s1EegvCWq5b4cuFrRjin1wXhC6zEufxuRpx5Lvvty/WCDy3S4fx5FiXbzrf9PP6XQ0n85RDXpVD62rlZcJePRHI18ONYz4Mi6BRQkDFT0Ry05Cj/mlJiWJgoWvpLrqx9bmXnLA+F6CLqhhsORHlUxGvEdR2Uvj64ldSDXxZU0HtGlAnl/VZpLWZNwi2/XnTtbxjqh/tqa9FkXg7Gry5A52oaTFxTiH0ZVjHYzJ5UK0auLMAd1bR47Md8NHg3CxPbeWLpPT7wp7Lhbuc3QrFcSGjxtrK2n8//WnA9j1UR4Sr7lkEY5vxFbil3IWNdbKP/Sv7im25stpTPH/rGRWRR5N25FL+vM+KQfGAuS3KlkyDK2eUvHJ+XUmFKb3f7XS7/OgbHRX7sfS1wXzsqjp9Xr9WBypGSMrqG5SKRSCou/6pWZD0jucWxkpjjaSYW9vbB94N8kWl04LeTFuTn29Hpk1zc/mk27voqD9m5Nqw+bobR6sDKIb54rZOn6Gnh/sZUIvmvuSUEIcsIBwtAiwP+BhUaROrQkFy4J2XPbHdNqOk0iB109zoonNug99WpsWZ4LB6v6eEUkfT/poPy4u+pRsc4PQJ1CvH7ukPHVCkUqBKgRiC/BeWyFN7OMvXVKRHnq0IsuXCDEmrebHJOOstvfKr4q+HH+7FguUw4DiUUiPB2xh/ro0KYns4998Gg2lak4RIQ1wlfL5cSnq6jlpW98cewKLT1U1G6Xf43KCJPNqBaoAZhHlQ24mWJa6NEIpFIJJIrgkUhdw29LUaDX0js7XzUH18M9sG4Vh5oEqrBE830WDLIB9vJf/VgP7SP1Yhuo2SKSiQ3DDe9IHQbulqNEtPuCsf+cZWwY1Qctj8Zh6PjK2PZwHD4cQszh6Obtnm0B3pV0Ts/8yABoNepcHt1TzQI0bqMepdY/BdOA9rt3JCv8x95im3i378p2V56Z6K0f+ktwo//ubeJ7c5/pRHxkejpWd8fvz5RCaPrG6h2cob5Z1/nemlK4jx3A1F6n39vLQsKReLrgeaB2PtUZex5JAIoJGHF/vSf+zZ/MTgKB8ZWwq4n4nCQwuwdHYsH65AIp7T6emlwbFIVPN6Y0s5inWMsSYNzeUEojuaVDdg1lo5N534XnftDT1XC5lGxGN3EGxpXi6Sbs+J2+1GYYC81BtbxRDBdS2WHJ+fyY0EVHqBHy+reiDKwCHdt5z+lKHNfF2dtO2ejc5vLufwY/vXPfufsdCGojKpHe+LIM1Xw+9BIVOU0u/Io4jnHiS1i1Xk8N87NruPzb5Ges/0FZ/m5PSUSiUQiubVw92LkOQWzjA5EeqvQs6oOE1p64OVOnpjQyoC7qukQYlAih4RjkWsGBNduEskNwS3RQsi31UvdwjCpvT9OJRXh7kWn0POj0/g50YS7mwXg416BULLYK7Dh0Q6hmNE9CCp+NUOOtRNv4vlgRNt9MTkzGbHnCgKeTNZEypMdtzK6DV2Oh7dxRLyNb3Te5tzVGY5by6gSEMNIseDh/VzbSvbj7a7WKbGVt7EfD1HFS7fjtJXen+OmIJuO5eOFVan4/kQxoHKNrMSvrdzpLpVmkR72L5VX+uWMs2Qb7cMd5EttOx/O5CgwqKkvPLQqRMT6oFYAVXU8CS+hpPTEhelgMVnwyLIUTP8rF14kpj4eEoUGASoxNxEUShj4OxSOS6SdHKeB88xpYP/zQdt8DGoEe6ux+O8sPPVDOt78MweVIwyYPSgKb7bzpby48u/OH5cJL+k4oqxI0FaL8MTHgyJRy4vSQWUjyoWvAz7H4hzxPhyP87BWseKASZxDPk+03XV+xZYy9+UtnEValpx7cpQud7xiv1LnR6TRvQ8FLUl/qWvpQjj3c2BoMz/6pUC1OAO6xOmd+3PMfGyKs8RxmjnvvI3X6VAchziUO238g9dLrlHOB63zXhyWrz23n7uMJRKJRCK5gXE/q9zfq12OE1MtkLM6FGS+KEgg/uP4N/uXDieddOXlxCiwxNXYWjf9KKMOEnF1oz2xc0ws/t6VhS5LzsDIRj/nigTGFw/FYkAtPZq8cQxegQa82TsUNbR2TPstG8czirExyY7Tkytj7orT+L1Agf51PLH9ZCFmbM6Fxf31Mx2jUx0fPNrAC2YSKd/uy8OKg0YxqECHGl6orLYj2abEUNq+dGsOlp+kbeLkUCLIGPbx1uC5dv6oTEJjV6IRb23JhZlOIAqt6NjAD4PpmD5q4MsdOVhxhASdWoFALzWG1PLEeoprMAktrdWGI3kOZOYU48tDFD8XIRnrHWp6o4WvAosOG3F3NU+sPpSPeB7FjI7buJIBjzXyhpoM91VH8vH1fud+niSexrf2R4NgNU5mmPHq+gxkWym9Cgc89Go80cIXbSO02EHHXrg7H0kkTHjo8LIQV4/djlB/Pc48WxnfbM1E32aBePeHU3hyXb74iFylUWH3hMrQ5hSg+iuJgEGJ25oGYsOD4Ziy+CRePmaB7eVqeOX7U5i8nvahdPRr7I97a3ggN9+CxTvy8GcaKW1KAxfbuXA3z9upHH8ZEoFO7xzD+mMm9oVfkB4bnohDg0AlYv53GKeMDoQFaPFIE18SrCoUGG2YuSkThzLsqBHlgSfbBuKJ5t6Yuz4TO9PN+G5/HjLMCgxt4oO2kTroKc6Pd+RidTydIxI8vVqH4vt7AzHwnXhE1/BBQz8VNhwrwPwtlAe9EioSwoMb+uK2KB281A4s30Pn4GCRc6AFElXt6Np5mK4ZJQnvL6mcVyVSvFSeCrquHmnuix5xHjiZXowF23KxL4PEFZ27QB8dnm/vh0i9AtsSijBzaz5s5M8VwvlgganRqkXrYHJCLqpU8sWxYzlouyBFpLMh3T9tY7Vi1DceJptn8Fm5Nw/JdLk81tIXZ1JN+Cae0k1iMjpIh0dqe2Le5izkqtR4ispr2a58DG7hh2CFHU/9koUCuv5a1vLCE418oKBrY83BAizeXQB4KC+YzktBjjJ6fTnfKKN6qqOqzUoRk9MrSg0kUlEQRUHPhbl9AzCiuXOU0bQCO+LeTBKDq1ztdX6zIcqD7s3ZffwxuqW3KI8Mox0xb1B50PVR0cqDcRRYMad/EEY1c44ympBnRau5aci+wPP0VseRZ8GxyTGI8r5xRxktKCjAnj17oNFoXD4Syc2B0WhE48aN4eXl5fK5PG5qQSiSTg/lB9oGY3HfEAx8/xi+PGF2ThDDljUZ3UIoPBiByUsSUadJEPrXMpCBbEcOGa17EvNw/7Js7HmuCvzJmC2iB1o6+ccGavHr1nTcviSNjHcVpvWJwKQ2PtgRXwgvEnfVg7R4bdkp/O+3PCwYGYdhJOi4tYQbxH74Mw39vs10zlBMuizER4uNT8QiVuvAtnQL2sTocf/HJ/HZXiMe6xyG9+8MxOGkIhQpVGgUocPiX1Lw4A+ZqF/ND7tHsdHrgIUerun0cEkrcqBhkAKNZ8RjZxYJBI0aR5+rCr/8IvT7MRe/PxqJJz6Mx/t7CjG0Syg+uiuYBKSZG0ZFnka8fxTf5Kjw96hYRGkc2JJsQrNKnrDlFqP5nJPYl+3ALoqvPgnMjQkmtKnkgWmrkvHC+jwSdvyV3r8R54AE+IgOYZjb2RvNZpDAuz8W7TxtqPTWSWRQoah0TkGoyy1AtamnhDBoUccXmx+JwuSPTuK1kyQIp5AgJBE5+cccvHp/NJ5v54edCYUI9tfhTHI+Wn6UAhs9PcoyLEoLwh4fHMeq43wN0AZ68PZpFYhv+odh7IITWJjkQPwzJEwtVpzItqB6pAcMdJLqTD2KhrUCsKRfkJhTJ6fAAgsJ8AGfJeHJLpHoU0WD/VRWPj4aRPtq8PSXiZi+MQc924fjh/7BsNLDPrfQAgddd0GeasxemYSxv+Tii0fiMKCWBw6cLoae/CsHaPDGN6cwaW0uhnZ1nh8+9w6dGp4WC1rPTUS6XY3fH4tD8wg1/jhaiHoxBviSqG73+hFsN6qQSKJbRU/Sg9k2tI7ToePs49hwmgqZrrcyzw/fB1wOzakcBoah46sHcVf3KIxtYkDVyUdxPM+O8d1DMbWjP3KMVgT7akU8fWYfxXfxNiRNr4mTuzPR9oszwujr0TwIKweE4q7pR7Bf64FjY6Jh49ZAwlxsQaM3T6Brq1DM7h6AfYmkKLVK1A3TYdHPyRj2a45L1JeV0ktDCsLrixSEZSOKQgrCEkR5SEF4FlIQ/pubQRAyXNddR9NYIik33C2FV8KV73nDoIAvT/JChv1hMm5FDcP/eUm5O0OVMBNiUGDAnBP4/KARJ5OL0PiN47jjkzMopnCkV5CQWow7PzyJuJeO4KdEM26r5YtKHiTA4jwxrrUPvvs9FU1ePYYa5BbvL8KEzkHw9lCggB58zPu/piGC9n10DRm9LAb5+CSUKgXpUN1fjYmLE9D2teMIe/U41iaYERNuwPQegVi7OR01XzuGxrQvp21Iu0BU9lahmPZlMzs1vRiN3zqGOm+dwOifSWjqtLizsh4w2oSYq0oV65It2cjnwLSP6L7oocbLXQJxOrkQtaceQ+XXj2PoshQkkH3+ZIcgka9m04+h7bTjqEIGvIe/Ho829ILaQ4MGwRp8tPoMbqP9QihdC3bTTuKDy/NAh9Np1Rjc2Bvbj+VjW6oZH2/Pg1egB26P1oqWShGMFlq6UDWUt6ZVDHjp9iDytWNNupnKv1T8JF77NPDBqcR8NJ52DNEvH8WQ7zLhuNwnB4en83CMRDgTyy2C9AR6YkUSol47ikZ0LurNSSRjRYU+sXp8vj4V/T5PI3Fnx0MLExAzLR4bTpnxwSY6P1R+dcnFvHgM3PbYu4aXyDf3mGT2JeQh+tWjqPFGPP5IMmNMl2BEkOh9/88MNKZyrvP6MVR54ShIY+Meyhufp07VyEggIX7bjBOo9fIxdPs0BafzbHR+goUYfPD9E2g39ThqkfhPNSvwTBs/VA31QJBeiScXJ6INidi4aSew52LzwHEaFUoMIBEFowkbKBHf7ssnTxX6VqPriO6R2RvSEPzSYdw27zQO59hw9EQeNqRQuVG8xaStiymjrqzCQmlnWANaXQWQm29C67ePI5Lyb/fRY/Lt/li/NR31phxBPbqGZm/Lx8NUJjW9KEKndpRIJBKJ5IaE7Uc2rKWT7mZzV8MtIAgJt7XqttAZXiVNULKJDVESJ9xVU0Ge2RYbzKwVKYye3Lebs7DhhLOr4ff7C0R3PzVtrBmm516PUJPonP5AJGb0DkE4eeh8tcLo5whMWUa8vi4L6YU2ZPC3ZORHu4jSTck1I9XowOv3x+D5HgHQ2m1Iy7CiarAenhxIo8Tr90Zgev8wBLCQJMFXjUSesLvJLfglHfuSLcgx27HxQB6KybtfA1/a5kC/+mTkU3wfbs+HgeJhLJTRyFADog1KfLc1G2nFdthp0yebsrA6xYZuVfQoNNoxuFUAZg2JwOONKQ6iUaQHbEVmnCiw4eHu4ZjZPxQ+VFAJmSQMKFkiP+cgypYSWjPCA+3CNVi6M48COrB0a5bYPrAhp4+ELQW02OyIifZB5uRq2DoqDt1iNBj/2Wn8fcZytiCktG48XojoGG+sejQa7aO0OJhmdp7ayxWFhKtYKLG0b6EFX1NZ3V7TB5PuDMb9NTzFJk8VB1Igh64PXuMPw4Ugp1O5ZncefHy0GH9HMCZ18EM+FYfanQ6xcOClb1JhtCqQlW/Gkt0ktrRaVKasb9yRB7tOjbGdgzCRRJLNbKMs0BGUDmxNLILeV4+1T8Tizhp6HCRhDJMC7fnbPgrXsoYPZg6NxEQSgjaLg86PHkXZxaBQmD0wEpO6BsJICc0qKHW9lQXlIyxUj06VPLBiS7ZoVd6XUIQDuXY80NQHHloFrKQp84odeLhdEGr6qfDQVynIdd0bl8Lsb1KwhcRzdp4VlcM8EEhxWtRqvDk4Em/1C0WcJwlBlQZV6JosuSElEolEIpFIJDcEbnP55oWEUaFQdkpU4g/xWDmI//SHbGVuoWOOsoVLgsudYZ4ioXTuhSZhQabkD36d0bDzcnVvDfXRoE6QBvVCNXCYSFj8lY0kEnrcO9VKUVv5eLQ/dwUp0S0UaWKmCd0WJOL3FAte7hOJoxMqo2W0RhjiTIiXBnWDNWgQpoPCbMb327JxmESZEDIUJc9ZI1roOIF0oI92F6J+nCcJVR361fXEvqN5JCZsopWT4ZY4navrezZ/S0j7ie4pHCEdU0/iR01+dUK0qBmoRZNILdbsz8X3x4pEmXX/8BQW7yvCqC6hODS+Eh5t5By1VHShoAI5qxsFr5OY6MvClHiShOSep6tiy+Mx4neb6l6oEaAS+6koDZmZhXhwaQoGfHIKDWacwMydBc70ucuLIZH91IoUvLw+E/WreOO3sVWwuHcQtFwYZaXhfHAYSnd1Hj2W2JNmgdJLi5+eiMPSgWG4u74XOlUl8UXweWbxw0XMS3d6NCzW74mk/ERjWDNfdKzuCX8qW9s5xxfh+dohskiAO1FidO9wbB8Viyda+eGOmp4II0HE3+jpdErM+S0dj3yXBpW3Dj8+URk/DwyF3tM1sTOVVTW61moFaemaU2N/YgGW7C3A8SwTbpubgAOFwLS7I3FsQiW0CaMEcZm4Xam00S/RbbpvXW8E60hsNgoQXYJ/HR5FIk2B+lW90Zzi59bmOxr6YWxLH3z9eyo2pdIFLQrDSensunqHnkU+vwTh64v++3k4L8Qwb7pf6LquF6KBzm7Bj9uzEW+kcHxdSyQSieQ/gavzs59g5+dSHrUSieTW4OY2z4SoU+BAMrebAQ829CaLlRSKmQxPl5E6tCmJFasFv6WaRVi2+LnFz86WrUWYzILSooTX+ScHz+LmIuL9dano8eFp3PFRErouOIX+S1NRQMfQuARN2d9IkJ/djl2H89H9gwS0eT8BDhIl49v6oaDQGe+STRnoOfcUxXuahOMp3PVZEk4WOUp6abqjFfGTmPtyRy6UejVe6BSE6l5KfLE1919CN4s/GiSqkjEuRsvksqCM8uAyuRY7cnLNuHP+KXRbdBpd2c0/jek8EArFc+REAR78OBFx046jSKfF4238YWCxY3OIsVA4nhLRQQulXolBJK5S0ovwzqZsrNiXj29352LZgQIEBXmgZyUezdIuBGFWvgXfbM7BV/sKsIc/LuR4OV/uk8BL+m3MMePFb84g8rXj+OJAER6gNPAgMHy+RLlwds7zpOJvNcT5JzHsTSJ+eHMeWdOGH08Wo0ddX3Sv7IEHFyag2awEdFiYJPZxlzGfLv5SUsPFR+UW6acT5+rjX9JQb1Y8us5IwNE8G9TiOnKjQAC3gJGo4nSx0OYVm1KJ524PxKrNmWj49kl0eSseW+gaFNcLn6wim2j9rfPGMbyyMQd3NA5AhxgtUindNrMVD9N10H0hnRu63u6Yl4BJG+k8UwFt3puP9rNPosOHifD01eGxFl6ifPnJLeZ2JFf6/HAZc3fRovxivP9HNr7Zn4eldH4+2ZHHihd3V+OpP4C3eoYi4VQ+nlyV+c++5BT0R80aj49BZcJzPbo3u1G6y4MWaQXO6/qzP9NxJ13XnP7uC06j15JkHODWzNJFJ5FIzgvfxnwvl7zsOeeFz7m4t4j93OFdfpKbh5JzXvr889K1/WoQcXBdzs/Ji8EJoLB8fIlEcutzUwtCYVuSgf33yUIsO2xE77Yh+OnBSPSq6YG+DXyx9tFY3EMG74er07A3mwx2yq2dBFp4pAceaOiDO+t6QkN1HRdC6SFTxJDAZOTqyJjeSAIpw+TAoqExYjLRav4a3N/KH3O7BYpjs5jgHofn2rlcl3JzSt+mAfjqwXAhaHQUShyL4t51ugjHyUCePigaA+t7Is5Hjftb+GNRrxAehFN8M8fdgUs11JABr8CWE4XYnWnDoLaBMOYWYzGPOErpFK2A5Fhw5KQX40CODQNuDyPB4Is763jhwLPVMKG6Bh+SgAyN8MTCu4JRL1AtuiK+c084+sRpUTPOEysfiUS7aC30nCP6b6eHQZHRiqe7RSB/UmW08aFE0fNEQAKtXQ1fVPNV4fONmXjzpzS8tCoNr61Ox6Mr0sT3dsNakCAjMcl51rIAZEVHQl3BaXYpMSGQxAo50ht/PBWHoY14PkDKGueLjmciURsXYUDGC9XwRlMSQWKKg3/gYEzvWt4YRMec2DUIxydVQ+cYHd76/gwy+CNLV2FWonMYG6TDZ66BSVy7irxymEHNvNC1njdCPBViFpGYQC0iPVQYR+VU00flbFEk3PstfDQOAym9Q1oH4Jm2vjh+NBdH8klAq4GIADXCDSo81DMMHSJ0YgAafmfx8YNRogtqMKlstasAdAoHPt+RA5VBh6UPRKB2oEq0HE/pHYahVfQY2DoYK+haquGvhIEuOt7LzOKXyvGjwbE4NSoK1bj/M6VPGI60KSrMA+0jtFixOQsv0vmZsiodr/6cgce/SkEynaD+JJif6hWKenR9/nbMiJZVvfBwc19Uonxy19WkXAtua+yPEY29MaJrKJb0CRZp5by7T5tYcploVNgaX0Ci2Y43BkajR3UPVPMj0dnED4v7hCCQz79EIrko4vlBN5XCoaB7HeQU8Ka6U+W+t11hnGsuP7fxTus+OiW8eRofqnt5ICa3oHCHZ1zRSG4g+Dzxc9GTn1V8gqgO594/zjrWdQ5dy9IIP5enCONc/dc6XyMdavugRyWdc3oh9i+1rxvhR9sfbuOHWDJI3C8XOJxYilCu9XN3lkgkNyVum+7mhW1MqqwGf3oKn+/NR5vavvh+eCxW3B+Juv4qvLPqDEasy3UqBjK+527MQHyOA+8MisL/2vhC7bDjdIENBfTgFHGRKzRZkZ7nHD0v/QwJzU+ScLhIgd/GVMW+CVUwv3eo82FLZPPon/lk4fO+ZcCjg7Yh0bT3mWpYPSwSp5IKMeWXHOQWkKE9NxHxpOc+fTgWh5+pgg/7hIoJTemRABMZ4yk5Fp6Z4h/oGMVFFsz/O0fkeen2HJwupnRTOotMNqRmm1mjUQ1tx6Alp7E31YL3h0Tj2wciEeCw4MfTFnz6Ryam/pGDBzqGYOeEqvj7CRLNNT3F95KpeTbUqeSD9U9WwaFn4pCdVoTJP2fRQR2oGqKF1ocUWunK32bHnTW9kJ1VjC8OFQG8nbvYkgWTnV2MJbsLEBWiR6SXCslZZmRwyyWdh3OLykJ5tJB4FpO1ksuzqzB/cDSSJ1dHlygVpv6UjkMZNoT4auDjqYbB3Xzqhn7mF9uQkGvFAy2D8G7fMDzbIRAnkwsxdNFJTNxA599LjXV7c7DsQCFe7R+NgxPiUFXvwKkcq7NVUa3ElvhCfHfUiIG3heK7+8OgKTbjmZ8ycFsjfxx9rhomNvfCnwlG5LIIozIvNltxOoPyvqsAnw2NxSd3hyIztQh3f5mGzEILJn2fjrrVfHFgUlVM6+CL348bkU3CVoxKalPgpV7hSJpSHWObeuLjX9OwLtGC1SQIx6zKQK1qPtg7kc7PqDiMb+krspmabxVdO/c9UxXf3B+OA/H5eGlDvhDYMUFaGMgIPAvKVisS+fyxrJiqRE8KVZwfCkeGwcItOVAaNOhRzSDi7tE0AIv6R2Ju/wj0JSHNPPZNKvZn2TD3wVi82ckfX/2dLa5LfmFhpfNfSHkppNMqahI6DwX5FvT5JBG7s+xYSWnfN7EKltwbhmAPJdk2pa4diURyAeheoXtr/O0hyPlfNRx5Kg4pk6pgcDUt3c9knPPziuf/pDDuFpwBDX2pTqObkOqY+QOjMLuLD0WjwIMNvejR54xPCERaCCOejXzXvpIbBHqAN4k2IP2pGHhYbGhW2QuZL1RH93Cqu/nhzue95Dy6nPCjfdmPzyc71/Z/rRfbMfK2QExsTM8Fkys81990LTlFH/3j+NjRI31evwi0DKBj8zG5V5W45shxWN6X1+nYvI84xi0ANxrw8P1FRUViKZ10N4Lj69FiYSP52nHTz0PIiCxwpUZ1U4S/GjXJ2aiCOpxlwRkSOaJVigUhh6OKLdJPgxokFg+nW5BUZEdl+s2CIp0NfQpi0KoQY1DgGAkMoceoItbrVGgeoRXd8pLzLDicaxPmra+HCqEkNI+RKGSDt3TXUWe6HPDxUKNxqEaMYMnfsuVxF05uLaF4DbR/PTLmfeg5n0DpPUHx8DG5lbKyjxoZRTbkkPEuWgA5TqqE+RvA6iSOTuWbxSAnbIhzS1olEl4pLG5FRc1pVqJZuBZWMiAOZvLANOTP0VCFVy1Yh2gSnyZ6KOzPNDu3UXp96NzUDtKwfsLWFDNy+TtEEhIFU6tj184MtF2S6mzho/RxWkJJ/PlQ/o+SsOK4hT8nlPLtq1ciivJ3MNeCcBJyKhKqiQWUF3776UKUER2CR2JNM9qRQ05Jl0cdKhNuWTtKaYunsuaRXpaMrQZuoGr3fiJ25thEK6M7Dm7hZdHB5eb2yyDRbbXTbz7/7M8PMwrXKloHNa1uTzbBjzJaTOcji8qYE66nvPG5KjLasDvTKvLI0yaEeihwINUMbmgOpTJKIAGlpbCRdJ3EU9k2iTHAS+XAgTQz0vlbOXF+7agRQuVM5+VohgmpJoUIf5yvSUpHVXrQVvJVI5kE1v4sZ/kJR+cunK7JukFqFJEYP0nbk4TqAgK8NGgYrIaR0rwn3SwGCKpZyQsHx8Ri+ren8fSmvJKWUMZbo0IECcBjdA7EUd3lQ/nigYiiqYwzTDZoxcA6Tng1i/Jf5DI8gqiMGgZrSTyb6Z6yoiqdm+Q8K9sLqOmrwilaL6Qsi3PP55PvFzr3jUO18KC0pNB9dIjyYOdjk3Ml4YqQ005cX+S0E2UjioLu72s17YTzPgJm9o9GM40Zw37IgJKeS8lU5/t4aqAngRfir4PdZMXmk0ZUjTJg02Mx+GF9Gsb9nYfbKhlgyjVC4eeNpf2D8OSyZOw8Y+EHvngGcR1en+5PfomYSnWM+/lypYjyoHtTTjvxD1cy7QTXby2qe2PzwCDEzT6NVaPicOhIDvp9lY6a4Trk0PO9SSUPHE8uxqFsOo9U74b4a9E4Qof8Qgv+PlUMP28tQjX8XLfAm+ruGL0C+8nW8fXWwFdhx4v3RCE8Ox89PsuAPkCDNrEeJOhs+P2EUeg7b4MaLaL1OETP/x3PVMbwD07g+0QzWlf1pPrcIb4ZT6Fjn6LrvVa4HtXIltp9ykj54+feP8+YsrgZpp3Iz8/HoUOHxDyE7jpPIvmv4RcVnp6eqFmzpsun/LklBKEbkRWqk8TbLa5p+DC0KF1BlYRh59ou1nlJ4TioePPFpUKGcYmRy785XoYrc2E/c+Czw57L2fvSdj4m7e8OKY51brwiEeTH6SojXhEnW/eusM7gLj+K/99ppgAir7TkqNxx87HZT8RDjinZh2BDjx5kI24PwdwO3oidGo9EEpBuIcacW1ZuRAyltjk9KEwZD0KRVvc54O28H/9mf5FmEpe+euQ8XxkjF8Vj3l5u7SrdybdUHKXh41Iod7JEEjgcCx3em8uEV11pP6vMeCfeznC5cppK5dsZKfm5ztFZcdI23lySJt6X8+XevfS+7m2lyk/sx8fkZUmcvIVw7+P2J+Ni8SNx6OZnR/jbibDxKEcUHwcvyQ/vQ2H/dR25y5nTz+FKc6Eyce/DuNbPOvccXuSBVwhX/jjN5yThspGC8PoiBWHZiKK4DoLwzXui0dHXiidXZ1Hd6cBfx4yYcm80Jrfzwr4kM2qH6vDc8lPQhPrglY7+SEkvxpRVqWjXOBA5J3MRWi0A91TXY//JQuwmA79nHQPiXjkGnzAv7BgRgcc/PYWvTpihOLfXxWUiykMKwrO4UkHYrKo31vUPxoliJdJS8nDH4lSofTT4iwR/PR8V4kkU8svf3vPoeazRYfWQCOTnmREeqMPandlYm+rAa60MqDQjAZPui8G4OCUi3krAI13D0M/XjqN6DwRm5eGun/Ox7tEYBClsUJMI3HskD0O+z8TvYyshTgMYKY1xgWr0mHkCDRsF4qn6HvT8VwjxOXphPMzBXnjtNl/sPGNGo2AN+ixMwB9p/7yoLYubQRDm5OQgMTER0dHRIh6J5L+G60+r1Yq0tDTUrVv3mtWnbrPuloALiY0ThZbEAj+U2TA+p+BKwpTaLn6LdVcYXi/1EBNh2I9bxti5tvHmc8Oey9n7utZd25gy42V/Xp4nXrGNKl2xr2tziZ/LQ/w+97i06ay4eVtJPC5XKj0iMG1fsy8Xjd9JRCK3IrIgKIUIX0Y6xXFKbRPr5MqiJD0chn/zktPlSh8FgNlsRZc58Zh/qJg/thPhSlMSR2nHfqUCirjZr3SZuMKJ7byN/dzlIvYnx+t8TfE2txPJoqX7OKXjdB2zZDtv42VZ+7q3uXcixDZ3/ktfp6X3IX+RIb0Ks39JQ8uFyWIgG7cYZER4/u3Ky7mUbOMlx1vaucKXxMHHdJeJa3vp9dLwz5J9SuXvnGASyXWBtQoLFl7ebPB0PY0re5LwDMWnvYLoxqJ80I2UeKoI9d48gde2FOCBhr549bsU7Em34I1vUzBvawE0VF95qIHHl59BQkYxBnyZhId+zoJZq0HPKnp0qe2N1HQT1p42/6tOr2jcaNcGvwxQeWnRIEKLz7bkipdudCpFnfrF5gzUmnoC2wsc6BjjgdEdgnHqZB7qzozHnZ+loFMdb+QWmsSAY03Ctegcp4d3gA7tovS4o4YXlu7NE1MX8XzF3Wr7opG/Eq+uS8eMv3LRo64PHmvsgzq+CnSddxK13z0NK6VFrVGhWw1PjP/qNPp9cYb2tuPjE8V4vJUv1u5yfuKQqVVjTCMe4OxmvMvOxv084xYZPhfSSfdfO/e1eK6tVd7cUoJQUr6Ii4/+x2eYsZO7NLJG/A+sen4QGott+CWxWMyp+F+k4UbEeX4c2J5cjBPcZ5MFm2ubRHKzQM+5fx5+Lr/yQsTnPIBw5R3/tUanUeLnnTlo824C6n+YTPe7eOeDI6kmoMAmum6Lu55ufwXlzsKt8uQ4u5x77gLIFNkdMGeY8PmRYgxr7IfOlTyw7nC+c5qcm6Q+LblGnJkrF0RU/IfKp/xivTq4XrdmG/H1nnxM7ReOAL3oCAIHncxNJ4tEWlPp3CtUSkT6qLDtKPnZgN0pJpiVSqRnmsCfjA9r7ItwjQ1/JpowvJUfmnsDXx81ihG/uXNIsLcaHnolJnUMwpMNPLEtvgheBjWKci2Iz7fCmFCEbAtdXWSMJtHvyT3D8dndoTiZWACTQwl/DyWaV/XC4l7BKM4y4Uim00aQ/L+98wCMqsj/+Hf7bpLNpmfTG6AgPSgoCFIUFCsqNgTFXg7PevZyVuziydkV+J8IqBQVFEF6F6UICOk92fS6Lbv5/36zu2HhwNOYACHzgcm+NzNv3vT5/d6bNyORtC/+Mm9Hyr+y+Up+F658/IbneE/7YaVQKDzHMQ4nIiI/fOXjtZNIOgtCuOfvd3n2AX9b7fA8CW03KCwWgGOC1dByW2nPsI8B3LTDg9QICVQhjAR430MfHTtQunjlZrGnLttplYjnjVINKjGw83flPGnAoFMhNVRLHoC3f6zAiMERuDxJjf/s5H1gldSHiMtPWIQSyIouT8vnN1BUV8R09/aAwg6i/EriPYxZkfZaH094qAumsr76k3wUKDTYPS0BKmojKirz1nKnX43CjYLaZowfEooIowoTTjPC2OJGLimEn2xrwA2jolBb0ojpG+sx4YwwlFfZUFrpEqun6+n67CoHGhqcmDKnEAPezMU1C8uwrNCOKLMeA8w6nH1WKCKp2oQEqtE3QoN8Uvr2Z9TisjklvE4ZamwtWLy1CoNeycLojwvx8m5STHnmykkGT9Wz2+3SSHPcjM1mg8PhEIvK8GccvMAM/7Jbe3JSfUN4LPBkF3V6vGob/Z583Z+ks9BaF/lvF6mI8hvCY0tHfkMowiPh/qIBJtyWHiy2VZi3oQIz91m9Pgi+JWs3ooLTCb/x8lV7/9uyvc/O69XjtwURoTqsmBqP578owIIsh5hyzuH5X/5nEVnR0d8QkoJy+8hoPDUsGFWNLgQblHhiQQF0MaEYHeLExDnlmDQ2CjclqjHykxK8NiUed/YJxFNflyA20QhHWT0eWteI725PxAizGlNn5WNuthM7H+uBuvxajPmsFHZSLtrjIZvIjw74hlDkA5VjcIAaL42NQPdwjdinduqiMlT4Pu/ie/s/2uZzNnxLtved+/vznVMZXjU8Gm8N0sH8XC5pP7wqClePdsiTtnxDSPHpmxiIry8NR6+3cxEaGYi1t8Rj+leFGD0oHF9vKcecvXZ8MDkB5dnVeHV/M766NgbdAhRwUpj/Xm3By+tr0SstGEsmmfHJsmJ8kO/G+pvj6NoK3P9tFV6+MQkRVQ2YurwWH10Xh3FJWjRSs9hT2ogr5pbh0+sTMTZeg5J6F1SkED6zyIK7LophDRB51hZcNdCE697JRKMpEO9eFAFHYzOUlG13fFGMH/Kcns8ZjkJn+IawtrYWeXl5iIuLE/WvoKBA/Cr56YpEcgIg+kWCFcT+/ftDq6WG2g6cNAqhSIQ3KUfrzA8mlQco7+GfQFzPQfATbbF4Bx1TQP5Btfohy/YYVPz5q/FvLzoyjUfiYLqJw/L7eNKaD8wxygsf4t4sEPHKqWILlONbJ44VUiE8tnSoQije8qjgnt4Dc1dZsKUR6G9owR0/VIp2zgJjqF4ptmoRsH+6VwSNH5VNzeJbOg8tCCeFod7uEm8uPLQgxEB2tmYYgrTYRErRE5/lY1m5C06qQ7z4sFBUPJ7/NCIrOlQhFH/FvrKh3L4pOCX9qXe4eCcJBFH+WxrdYkppqFaB0gYX1HTfXqFqoXjwir68Z2ENKR+8EnaqUYX9VQ7YFSrkPtYNb3yVj9d38Bud9nlDKOLbUQoh9XP3jjXjyX46PLi8Ghf2C8ab3xRjtYUcKB8iAlSoovpAapaoIyqyC6F6U0NKtIvzgbKP65pBq0Kz2w1eWVurUyKQ/FVXkWI90ow30rWIeyUfxlCNqEd/Jc4+2qQQUnrVdF9e1bq4yY0WikpYkFL8sj5ipXCaKG/DDHRCdrwatIHaQ29SlC10P74Hx50reAxdV0nuDqowUeS/kcqnka410bGG7lVB+aMkOebUMA3dk+JX60ItpV1FGXZahAbl9U5QkOgRbcDGW+Nx4we5+KVRgdUPpOLjRfl4ZF09osK1YoGbIlIKefsuLoLfy7fOqhDGxsZCrVZ76qNEcoJQXFyMHj16QK/Xe23+GixJdnpEG2UljQ0JDy08teQwREPmifjsh/fcaUu7pmvCAjV47aJojIxQi3NhvIh7UPDhNIBrqRNut2kthAi7mQYSnjpDx22Kfzsg4kH/w0kIUYqodGxEfHkqVqzksqM87dg7/m84Tvw9B0jgoVoA8WyGjsVeTHzc0XjzpF9SAD69OBJxHIl2LgeRRk5PO4crkRwCKyT080t+E2YsKsXURRUICjVg822JWHtXMrIe7YZV15uhpvaWEheA/Q+m4ed7U7BuahxSAuhKjQoLb0rCb/elYM/fEjEukUVdBb6/LQVZD6Yi5/5kDA5TwUay6mtXxaKAwtswJQZx3GjbsX9ubzyCskJ8E2ghwd1CwnYpSee872eTg+xIWWBF3E5jWWkTJY6Um2byy1tK1JI7bw1QQwoALxjDQv4vFodQJBIidXA32DD7V1IG6ZqOEsjbFYqj2ahBHSl9i3bW4NK3c0gZdKNfSiC235OKX6nst9yagCQq+tG9Q3Dg/lTsui8VGVQfknUKXNg3FFmkxBQ8koZ/9g7AoFNNyPxHGnIfTsPb54cJecAYYcD+p7oj+8EUPMwf2/Eefd7bH0tYmeKFXIpI2Rf3p/KrorLmhyKVNMaIrYDITxUdi62SqAyt9Lut2I483g/Zp8jS4FxC9YZnYlNvTvXFhUaqH1xnakkOqmBZiNoe32VvucNTbzg8UgZ5Q61dZQ6U2KgeUZ3ZWWrDSxtr8MSlMfhqkhmbtlfi2S31YqVvVkK3lNj/kDLYmeFFPeQiM9KcSIbrY3vT6RVCyhfRoZ+WGICd96bipzsTcEa46hClkDOPn5i9eGUcch5MxSP9g4RyxdYeczCT/TnUjSxIgIgM0uK+kREYbiaJgjpY8nHwOgqzT3IQMh7rjrnjQ0gBpU6S8ITjF5awPcjBe7DxWvrB9rw54cQhkdhzdwLSjFRshwkzfHZIOB5rwe+6+dsLw3b+5qC9gISMq06PQNFj3TCtTwApaf7XHebXC58edPP59bj9T6gcByQFYQ8N8t9dY4aOG4H3Yk+4h5lW+0Pj4XEnu0OO2Y/XeLwdPBfGa+kH2/OT2TCTDt/cmYSSJ7uj8ukeWHSdGT1NNHqzEiX8+YfludbHQXuP8eG5zuP/oLvXrfWcDFvQfc5IDcaUc6IQz1PgfNcI338M9vtf4Xrt+CFzslHVqvT7ux00XkuJpC2w7NhgxzOrq/HKlCTsfTwVvaNVNNAB/ZMDsfnnSoz9qAin9zRhYs9AzBgfjd17qnHGazlwB+rwwEAj7j0nEj2ULvR7KRM/lgEPDwvD/SPDcUZoC84hxeGxVdUwaBXQktmb1yD2ME1LM+KGU/Si7zqRYdmaBWwW4lsNn/M0T+8bptZzPuZfVvK87sL43MmelYc8SxP6vZ2PCn7N6AnixIeKaeZaC/QRgSh59hS8dnGEUJQeGxOJgvw69H45G40GHV48NxS78624+fNi9CM7U3wQJiTroCTFJzlMjfvmFeGt/Q58MzkWC9dbkP5OPn6tbia9SAFjkAq3zS7AzB1W3H9OuOemx6mDay0z/vUr74N23rL2d+dy99aPo4bhc+NjNj5/fK2v3nDYPjs6ZwmxmeSrp5ZZcPq7+TiTzKVflKHJt6I137P1Wk/4JzM87jEij6SR5jga3xRmPm4vOr1CKKA2GhemRd94A9K7B+P1UaSMNXk2jhfQwN8z0YCHh4Yg2WzA6TE6nitLDmRYsWLlkQ0J+r4GL37ZsNIn3Dz27J33gucXRAfdvP6pYGobnMgst6NQbDSu9O71Robdffehc+9tPNdxWIe4eR39IXtOY88kA4JZAfB7OCB88z188fGFw24ifDKHu9FP6719xusmHNm/77f1GvqlNJbU2HGg3IFysRs5Xcd6r79f+vWlQfz1vz//svGF9zsIdwr78gEm9DLrMXZQKE6P0lA43nB99/Q3rfH3uPMh/T/ErvWYjYiTx741P9iuNc107g+dB+rVmDc5AeNPCcCSn2rw5sZqXHJGGK7tQUImx8F3D184ZNeaH4ffg+7dmg/8y3Hxzy+64X/HS1h7nOlA1EWfm7gX2/8+wsvh5cLpZXu7G70Tjch5PA0DjFTA/JiZAj1y/ogrJJK2oVPi6YXFGPR2HiwaLdbenoAevHhKSzOe+KEa2/IasdXixKmJOsSbVEg/1YSFtySIqZGhgSr0M+sQHaXH/FuSMDZVR32jEkPi9Fjxcy12lzowh9rmqrJmKKi+vr+5FvsLrdhb7UIYXeup7F0HFhy4udawIkwjf3sKEh0Gx5GKKq/IitQXM/HwqhrcNz4W04cFIy1cg0E9jFh8cyJOpfrACwfV2FyYMjQci2+KRyjrLEpeVEiJTXvr8OmOehS7FYjWufDGT/XIpDDf21gLJ92jNL8Rq3c14IfMRhIXeNEV7/27OKKOcDWh/GigNiTqDimBQhn0eOlScH7wmxmr1SqNNMfd8DeEvMCMb5EZ/v0rdPpvCEXsSSIe1TcEKyfHoqjWiTgSHELu3YtaLd2Hey2rG+/dlIJbe2hQRyPh8g3luPKbSjFlIilMg4GRWoRoFNhVZsd2C+/LRBeR4MvfZPBeP7F6BbKqHVifa0davBF7HkjEMx/nYQkJFmfFaLCzyI6tZd7rKD7dTGqUNTSDZ3AkhmoQrWrBzjo3zk8zIISOvz5gRRV/F8P+qYONDtViaJwWJrUCWwpt2FtJKic/dfMO2KKISCifdn4M3hodhP6v5GBnuUt8vC0Kj4R5XoGsPym6nJbyegeWZ9tYJxbpDyQhqRfZ96UBtKqxGWvybXR/upIGzFiTFjE0aJZTdM4hoWt7nhVZthYMDldjU5kTQ0gB7W5UYk1OEzJryROFx6vZJRlUyKl1oFlNAliUFr9VOJAUpUN/ys/cShtW51F+aMkzxUFL/s+M1SKNBuxsSlsZxVdBysTeckrn7wgm/JY3xKjBpruT0VTRhIE9gjFreQlu+LYKMPA+W0oSCnhev6cecDDF1U5UU16dEatHeY0DOU0UZ3ILCyLhMUSDrSU2Mc2sT6gKeyqaMYbKpNnWjKV5drjofomUT2fRtboWN9YV2JBdTdqn33c2PFW0uzkAv92fjP98V4TJCykuvLBfiBZGqm4WnopD4QQHqXF2oh5mvRI7i234yVc/iGhK05kxWvHtTzbVqzV5FCf+JpVuMpzqwT5StlMjdehOcV5MAkp9E9WRMK3IQ17z4Ecqo3yK+w3nxeKTC00Y+lwGJVBPgrQSa6mcssXUod//Nojzlp/upnOdidagiPJtFcWjyelGWLAW5/cPxf9dEoFbPsnFOgt/m+KEzdqCCMrDoXE6BFJ0t1C6smr4Xkcvw/ZGfkN4bOnoRWUCdWpQM8E+6kMjE4JguT8el84qxYKb4jD0n79hh12Fnfen4IPVFkwaGolVGy14hYT5sAA1MqucmHlTKk61N+KK+RaYAlSoofb+0CWxGB3cjAEfliDMpEEY9VVf3ZCA5+bnY36OE+seSMPWjaW4f30DjUVUkduAyApqK239hlDkJbVB8YDFB1/Hb2X88B+e29LGxNW+MPh6F/dPdEx9cns2WXGLDvqGkK89hcaVDBqfXY0ufPtIDzQX1SM6yYhfd1bgkbV1QsHPr2nGp7enILnJhqsXWLDqiR6Y+VkucoOD8ffuCpz1aSmlW4OWF7tj4oxMLMh3IjqIxvg+EXhziA7mJ7MxengU5pwfgtTp2bCJfr/tmdSWbwjbk9aVWVvrVQv1n3TurQ5iPGJRjOUEtqOx5a+k94/QWb8hNJvN4htClUqFkpISNDQ0QKfTea+QSI4P3F65rvuOa2pqkJ6ejmDq89rCSaMQjiaFcMXkGDy/woLHxkTj2Xl5eJJXKaBbJUQa8Ou9yVi0pgxDBkdiz7YKTPiyDHecH4sZ48JQT0qSgpSEEBJMXllaioeW1yAqRo9Pr4rF+Sl61DS4SDFRY/qiAny434XN9yahocIOU4iKlBIVKUjAE/OK8NymOiTEBSHjgSTM/6YQk7+vxbPXJOCxQQHYR8pUKnWCeoMaxcWNGPtpEX4lhWtEnxDMu8aMQFJAmvjjbxJQXvy6CI/SIMfLh4tunBN5BIWQO3rxlsetwJzr43F1zwAUkmCfTMrEnuw6XDqnCBalBt9OiRMKCH+HEkPKZ0lpI9LfzUdJjRtvTEnCPafpUUxKRxwpr0vWl+KNjBasujEGW0m56GXWIkhHmeh245r38/D5PivGnB6GH64zY8q7Wfi6RoXCh5KQRcpBEimGelJstDSQPjY3Dy9so/wnpXzJ1AScn6xHLg3Y3cgPjz6ZufXo/24hGimFRxuEWmwuXDY4HF9eEYnxb2bh0Slp6Nlix4AZuShoAk4nBXHt1BhRB3jcM1K9emtxAR7YbEXxP3tgw8YyXLaEFH8SgiaNisGci0MxbnoGykxB2DjVjEISKLub9WiosWHgazlI7xuGf42PIEGP8pbK1ahwY9r8Yry3i9JBSrUoCworjpSv7femQFVrxUWfFmJzCY1sXKV5gKWI9E0KwqLJsSC9koQiyleTEp/8aMHUhZW4dGg45k00o8nqJFlQKZaSf+XbIjz0Yw00ATqUP5GGyio7Ekm5VlPZTpiZg70KNX68MR5UhOIjf32LC5d/mA9DItWdyyJImLYiOVwrFhdoqLXjso/ysYLixFN5joTn21YF5l6fgImnGlBAdSYhXIe92fUY80E+bqZ28fSwEBoAFbA7XGgkhXncu7mwGgPw/aQYxOoUqCdhgxXg6ygen2XZoWDl/xggFcJjS4cqhNRvd6P+8udbY7E9vwkxVAdzc+px7/pGbJ6WiCqLFaV2oBsJ7b3fyMG1I8x48swgLN1DygD1Yx+usWC/S4sfqN/f9FsddEYNVu2rw6JcJ36dloQNGQ0wk0L4+vcW3HRuFF7+qhAL8pxYf18aNpFC+OBxUgg9+ajA6XF6DBYfM/J2AsD8HbXUr5EbX8rGk90wkDBvpzbr0R39HPwOPSf0l34ODukeD7xICafSQW3ntMRAXNZNi+dWVYuHjv5wnA8VBw6G+b8Ql3WQQshvoz65Kg5DI1QobnRjcKIel7yTg/juoXh1ZDB++LUB0VR3Zv9QCnNvKo9T9NiQb8fEQSF4ZHYO8oxG3NNdieFzSuGiOM29Kw3nmZXYU9mMqqomLC5R4Ln+OsQ9m4MxZ0di1thQdHs1G1bKn7bGmzmeCiE/8Iuiun9970B8urUGlSwzUp89tqcR3Uhu4cq0LrsRu8qd6J8cgFP0LZh3wPa7D2jbg5NBIeSFPIKCgmAymTrkOy6JpC1w3czPzxdjNdfNttC20fCERYGfSLD4hXq/KUNCYeSxlgaAiekhCFa14F8baxAklFEaZKgnauK58d+UYhApGANm5GFVqQsPDg8XCsH1Z4bh/FQDHv68EGe8nYNbF1mQYFLzyyIxMMeGqvDgVyUYQIJKiUOJu88OI2WOP+wX4xfFhP7QbVj2VujUKC9vxPB38jB5oQWxsYGYdEqAeFI7e1Ic6iqsOJPCOeW1bHxTYMcjl8WI+HpG2d+D3KmTH3WaCZP6BuHlb4rRnQaycz8pQs+0YCHU28l9a14TLvskH6eS2xRKR0xMIC4nRdcz5Y9iSvErrLDh/Pfy8Mz6OrQoPNUihqJ47awCDHu/UChIDwwPEUKQiBV54ei56I+GMqVPgg5/o7waNjMfe2pceHhMJMIpDQNTAnFRjwA8T0oup+/fPzeAR4IXVlSi0XX00UAIApTRE/ubUF/vwPoiB+b8XIvwqACMSDCIpO8rbsIFHxZg9L/zMH+v51X56nybmP3IZSD25/LmoWeQ80yZ4rGRV5zrTsru1R/l4vLPSmHTavDqRVHIyqlDOsWz/1u52E1RffnCCITwOhVCiSIo4KIaO15fV4UIisuPd6Zg5vhwRFPZC62UynTmlaQ0adwY9VYOuok0N+LGMWZ0D1WKjaD/vbYcg97MRe83c7Ak1075GoEErZKylsqD4plKSurr35ViJCnte0nI5EWMYtVuXE4K+cAZOfiM0hrhN+VNQQri+aSwXfl5GXQmHf4xhDoDXzkdhshXyqCJg8JwNQkLzy8pRvJL2bhqXglOSwvCsyNC8OYPFtz+dYXw//e5BZTHRdhGbWPW1XGIVLopz/KoTeTjo19IMA+kdHM2C98SyZ+AFIXMkiZc+p9iLDvQiNdXluPaxeUodQBBShcepzr45Y4aXDKnCLwP+9ukAE75sgyZJMjP/qkGa0qc+CW7HhfOKsSWEgcW76jD4gNN2Ef93egPCvDd/kY88Y0F/3fAiie+LcMG3qeA6urTS0owm4VffqB2vKB+91ZSPl4cGY5LugXgslOCEMN9CI1XojFRPyIWQbPTuHVJDIZFUXu3kYOD0sCzO8RMBPLDb3x4FgR/r05tW7RvUsZEOFayo9/J6Sa8dLoRIIWE36RdxVPbuT/j/orD4evpmtZrfeH7wuT4Hk+ov3piqQWv0vj93b56MU4tL3Ti082VuHaBBXurHJi9pRrLypx4fUU5nl5dha35jbiY+svFhQ5syKjFU2uqxYqjCFDhzgWFuG95JZbursODP1Tjh321uH0p9XdGNXYWNOKORaVwtPEhx4mAKEdSziedEY5XL40hWUPnKVeqP89eHIPHSS7gcXXjXUm4Ik2P80hJfG5EqMhnyR+D85iVTt9iM9JIc7wN10fR9v8CJ5lCCDQ0ufDKhmokJgVjDD991ZDidnYodv9Wg21FTn7pJlDolJhFgu8LP1ZDqVaIqXiZPF1Up4KKlIXr+gSjvLgB09fXIKPKiQ/WVOC6r6vhVCpJ0VTguS+L8eG2eiF8fLi9DsEGNUykOPA4y0XSWjA8rpDAfuFHJFQX2DBnUzV4K8kYvRJh0QYxXWpbdhNMEVr0j9Zic7aVrlFjWDhFiAf830PcQoGrB5rQ0ujAgTo3zukeALvNidw6F0aSkGG3WHH/3GJ8n2NHN15KmhQ/3uUrnhVjul7oSU0O3Dm3CN/tbcDPxU4oeCUR4mZSIr/e14QN26uxlYQpnurIFwndiIzwRYJNC8kOHy4tw2zKj20Zjfjw5zoYg9Q0vioQEeRRwJfsbIC73I6l+0nLIvs8FlbouiM9jRThkltgqBYTTjXgs01VqK914f3VlaBk4ZZ0Em5ImGkg4WjVbw0oaVbiGlKIv99cjkWZdtZdW8vBx3+1Ezp/eX4R5v3SgOUkOMbHGhBHAtm6HCtS4gzoRsrbjyRIBkcEiimz7J+DEPHla0nAHPtxEQ7Uu3HHmGgUPdINFyZRfTNqMTRGg02/1pFUq8FQUpR3FZHwSeV0frwOa3+qxt+/sqCFFMtIqgM78q3iLQVPF+Y0k16KlRss+Mc3FVh9oAHKIJ14u/ovUhAXZlqRWeHADVSen/xqFUotR+aGT4uwJtuGL0hI3lxsR5qJ6g6FdVRUKlx6WhCaa23YT8r76FMD0NDYjAOUxxeQcNBYYccWC38pC2ynOruF8iQwVI+BlCez15Rj3p4m/FZuw82fl+CNvTzdlVMnkfw5RFtStOBHasMvr67G+1vrUEVCK3dNSmofi6kNvbquBhupT+IncbyK5pJf6/HUj5WY/Us9SqzUEKndbM5pwnOrqvDOllrsLadOU6cQbecFUgzm7WtAQ7NbKIfFrCRRU15BfdRuqvdtfbPZXvDDydkbK3Dum3kY9kYOypVazL7WjBQDEBKswadXxWDmRRGYPNiEj66Kxe39DHj8gmi8dG4EVt2ZgL6RGjx6XhQ2PZCKL64xI9lA6aE0Xp0egh+nJeOr68y4YlAIHh0ZgWnnReL1yyOpnTuxNZdGICd/JxyAeTcnYtt9yfjbgCCg0YU7hoXjuVHhWHRLEr6iMMUKxsdRUfDUEaCQlL73N9XgJVLsVhfwOK2A20XluqcOz6yswsc7alFCiqyNxoRPttbizY21WErlzGNiEV27Ip+uobLnMq9uaMasLRTWumpkUD0orHTg6yzqx6gf5q0WlmQ2kfLovXdnhIpLSWP19X0DsLPQhtuGhosH2WwfZFBi3vpyjHg+ExuqWjC5XxCUlE4aViUSSRfnpFMIAzQKzN1YJY4n9Q/GsJ7BID0Lb5BiB626NcEtNHik9zUh65ke2PdAGn68LUFMr+CBUk29J+kiKK0hQYTHBO5NeSEXHlDolMNoZmWNnzCTUO4ggYP+H1EGF28KaUBV8SsrUkJ5YSB+qOskDYWnaDKXDA7DkklxWDQ5DvcNNsJhd4nvD8XN/hevCtUrAAAZpklEQVQ0YMeQ8qUI1OKNCTEkGMRiCYUToW5BZjkPnGq8fkMi6p/tgdW3J+E/18SA5A1+gCjgQc9NJ1UcKZ4+5SfcizRqyY7Sz8ubu/maw+LkHa/h4CfXPG2QjG8vMNIVhRLMPj6fmoAHL4jErCvMKC61I7+SPLFOSvkgjOcSD6y9kRnePVhs6TC0dwjm3kVxnxhF9sCwXsGIDKLARRqUWHBDAinEdjywgspdTXnsHcj9n5b4vy8TzuRWXEfly+kjEyeUXeC2kVEkSMVi0fXxuGlAAGoqba151QpfT+lcvqcW/V/NwgX/VwJVoAbPjY1A3zBPOGf1DRXl8CWV6/OjQuGkClLS6EZ8aiC2P94dBx5KxZo7knD/kGCR/75bsIpXWsvxoiOKVzgJjVzfcqoof1lpZMP5TJZszzSz9kt1iy1cdNwqv3G++ozXig98+3SpTXq8fWUMvqQ6M/dqs5iSmk3CE9drvVdY1nrvaRaKPahOUdz4e0c23CY83g7e5xBzqL1Ecjjc/yionvMDOjZc98qqmtB/eg4aArgNkDvZiX6G+tBWv/zL53w99U++68WKh/5h+vyxH3//3B8fZ2zOFlzQ34R/TY7FjMsjkFNhR2R0IN4bH4UZE2LRO1iBRfuaUEdK3rYcKzaXOnHNkHDcMyIEv+U2oWesHr1CFHh+mQWpyUa8fW4YelH/MudKMzaSomQ16DCY3PdWOJBFY8GqbCvSzAbcONCIoDADFlMfp6mzY9avVsy4Nh7X9jSgJ13/2AUR2PxbHQaeFop3x4WJweJ4Nl9RZlyuvjIW9YHMIfVB5Tln4/PHbtSPCeOtFyI8Pvf5YXs2HCa78fVcP7x+OyUkw5x7ihFhChcum1WEnilBOCuKBnYaGNxUkHoNtSsScBKNKlQ0uP7r4alEIuma0Ah8csGLq6DKhuUFDlwwMBRv0eBWU96Eb/LsHmGaEJ0f6SNzr41DjJKn9mUh5rkMvLG1TvhxNregntwjgz3CvZhaw1MuSGr3dZz+8oRnKPkdyNnnw/dLQw7K+HUX8erCIoQ/nYHkF7KQ8mImwp88gHV1dCdvfH347u1giZ8Nx4sU2ypSIGstTRj6aiZin8+kMLIQ/2wGRswuxfmDwnDvYBM+W2tBwnOZGDazAPU0AvBmva3QbXxKlD/emaN/CE9+eMJoDYqilx6vR7O9GWXNCtx6TgQ2/lqFi+cUIbOeMpPD96XD898DH1AEbzrdRO4uMXupR6QWPULVKKyyQxmgxbgkvZgSNWF4JAZFqPD44lLxTSaHybfn+IjwOHwqOxrjCVJM+MeLyqPjCI8WfntA3P5pHqL/mYlkysOU5zMQ+3I2dtaTB2+4QrHhQDhchiyXranAFlJwWcG38/eHxIKVpYh48mCZhj6+HwsKmjHjklgMjFZj/Ds5iKMyeoiUWCUJLv6IsuCbETVUtnynBP7ug/OJgxd18WBaWuuiuMyvNrIHvoaTxkoZ25GjiwSGBgqjurQJQ6ZnIY7qDKc3/p8ZGDm/XDwA8IUhFiage5XxirIEr/QowuQnIBwXDtSbx577eM/ZD5/wL7vxf6kUSv4HLIizgLqzwvMwrlML5n8At4vaa4sCgfyApakZ9y4uw5AB4bg+TY0pC8qw/LdGansufLW3DjsybOLbzVeXluKOr8oxb3stXttSjz5mrfhGzUAKzojUABzIqsPjP1biuo/y8eCKauwqcaCguAlfb6tDHbVN3sdwWLcA6BrtuGOJBf9aXIIFWU5c3DcQTnKbv6kSL31twYwttehhpn720O5JcgIj+lhqOtcMNKGq0o56qlNFdiWu6M1bbXHZu3HdqGhkPJYGZa0VL2ys5SUIDo4ZEomky3LydPXeHk0IxzQwTl9ZAX2gBgPjdfhwXSXK+bsIFup9nR95jA5UoqjCjo2kLCZGB2B0Kg1+LJA4mrEh3wZzfBBuHWAUb0euOCMUH10QCq3LIxj7d6AcZqtQTvBh69NIz4k49sF+NaS4WsqsQn6+/uwI9ApViU1go0K1mNLPKITwwxHBKJUYEKdH7wQ90hMN6B6lwcrf6mGKCsCk/nQdDfhOSueZqUEYbNbAyE/Zie05VrEh7ZheRhgpAj7Z/PC4iwh5z/2t2Y8vGeKHz8WZz43PPIH63NmYg9RQk8LD07reXV+FpRlWhJCdeBVGA9fz481YeFkka7m+y0Xak8J0mNBDjzmrLDjjlWykk2J2Opmz3i0AL3Z6w0Aj0hIC8Alduz+7HiuLneiVEkBlqoKNlLKKJjeG9TRiUIwWA0414uXRoRS+iFlr/DxnhLIFewsbxeG9o8KRRGHU0+CZHK3HZacEepVJL2Q/vncwvpscK1YRjQtW45zTQ8SqrDzleH+JDQW2Flx6djiGUv7Xk/LFK6Ve09cINSXbTAqVq8GJTXk2BJu0uIjiyOn1xYVv1VpdKGPzSQHmaZ23jY7ECKrLvLT6jMvMuK6XQby1PRy+VlxPYcaEaPHl5ATc3LodhscPu63LbkKomerMwGDxVpG/5zozLQhnRlIkKVif8jYi2YAkUsZ54R3eSeWmUZEYmaxFPIX98oVRuKW7TiwMsuzGOIyP01CcVXjz0hhqK2FiCtokajdryS2Fv4/yi4JEcjS4L/F/o3OyotMosGxXDe6aXYib+EEMtUGdViGmwnPbD+Q38NT58D55oreizoFn81c28uwKBS4fEo41U2J4wWXUeftPfhzUzFM5uK9jzyol9NQsPQ/3yM7bANmfi/zZeL4/ha9QtJByyrdogYP6LDGbhboCMftA0nmgotOSDDEuRQ9ThAHLb08UizedS+M+v21Xq5VYurUSY97Nwykz8pFJnbqOH6JLJJIuj7+o26nxdWlCjqVBdGNmA37m76BcLny8m4R99kCGX2wI8ZsGwn9tqENaihEHHk7FDyTgJ/IHhna36DSnryjHnnIn3rsxEbunpWDBVTFosLrEZ31sxDjpzT2xpyEZfq/CA6uLhG+emuGJFP3SAOvdQ1IoT+wupiw5m3H1lxZERhvw0z2p+OWuJGy9IwnTSXlR8Oo0fA8f5N3OAzVpUu9fHY9NdyZhA5mFE6Px5cZKLM2x4dGLYrD37ynYeVcyFlN6LkkxYOW+OhyocmLGpARsnZaMx4d7Vh8S+cTZwFGn+LRWBBbC+DZ86Pnx+ON8E2nyPMFnxYgFNh5LWGhgd3Etw+4cJv3u42UCSRqZSEruNekm3D8mEivuTMb7rKA53LiwjwmXkr1SpM0LhT26V7C4/xe/NgAGkkxYiTSqUdvUjG/2NyE9JRCXnxYstj+IiTHgh9uTsZXy450xnoVvnlpZKRZ9Wfe3FKy9KR5lpPg7qWyFekzxctM9WlroYr4JlUUFKV53L6tAr+7B2H5PEn6msNbfkoh/nElxI7/+sLLZLy0Ya+9Owq6/JWPVzfHIK2nC0yurRH2b8nkJ6lRqrKZ6s/PuZGyjsD64KBLBlLEfbKqByqjHjofSsOGWePQykQjm4LykgCk6fCs3P7Jl6Lyu3olHlpZDS9esoHB2/S0Jt5EyzNPNPO/8PPXO612sKu/iD2CoTEyBakwgRfTsGF4em/1400GZ8N7maizNtOKxy+Ko3iVjyx3JWDgpDqPYL3njb3Z+q2nGM1ckYAPVyd4hCly/wAKbXo/vqPy2T0vFXYOCUd7QjH6JQRjX24ThsTrodCpc2T8Ek/sFirfXg0nJPJvcugVT7PyKWCLp0nib4/l9TXh4QhSeujQKZyUbMH1sFNb+VImv8prx0eVm6l9bxL63kwaFYMipBtF2DdzpUl8cHqASq0nuLbEjLkRL3aQCPxdYqQ8z4YWxEfiQ+vzr0rSkLLagb2oQrh5mQjApoYF6JXYVWqEIMeCt8VG498IojE9Q4/NdDQgJVEHnnZmipfvw1j6SzoEYn6mPvbgflbPDgZHv5GLgWzm4aE4R4kjGOK+bjkQjJWobm5HHKzfxzBSqD/xZQIC3zCUSSdfl5Nh2gv6EkvB7brwOq/KtKOfpf2Tfm4TbOJJvv+eP6IW0DIzrEYiKajt+4sUHyG5MWiAGx2ixr8SKXZUu9AxRYWmuTbw1CTdqcHH3AIRpFThgceDr7CZoqBM9LzkAB0psyGj0KG285H9fkwor8qywk/IzPtWAPIsNO6t4mwU9+pPQvzDbKj5UZ/9j6Z7lNXb8XEFxIMWpp1mPYYk6schITqUD24rsyBR7yfFz3INpDKc0DozWCqWWFQhWyKy2ZmykNKt1aoxM1mNAtE58z7eTFLFtJQ40kHKUEKbFeWkB4HVqVmRZEUCKb2WNA/tqXGJKUF+jgtJsBa94zvEzBahxMYX1zf4GVLMQT3EcnBQAE+XJcroXv/EaQXm7vciKIhI2LkwNQG65TSzUwMSGanA23Wxxtg1vX5OA8eFu9J9ZCAspCPx95ipSfvuoHOj7URn2/iMNGzdbcN7n5QAJIyK9dL8elG/9QpVYcqCJ8tSTVt+AlxCmEW/kfqngPSe1Qinl/ODvNCvqHfiFp46Sv5E9ApAeqUF+pRMr8u0YnqDD+twmNChVOI+OdxfbkUNKPivnYisG+t8vRo+zyI1XFj1gcWIb+cnncm4tC08c4k0aKjM9koNVsNQ58S3lK0/tEpEhZS05UovhSQbEB6lQTMrVzyS07eLvJqnODUkwYCRdy0rXSorX0FgtlmVRvEgRHN/NgGKqA7/w6zgOi+9HwZ5m1ony5a0oVlMadliaYaZIjjRr8U1WI3gGLsd/SLwBgaQVrqT6NvW8aHx0YQQufCMT3/LCHCI8oBspd4nmIKwuasHWKw3YbTWghMpvXLwb45c0IT5Eieu7KfHsDgXmXxAIF1W4Mf9XhafOMcCq0aG4XoG3z1Jh2hob5h+w4+ZTWlBSp8BP1Iby69wYTfVf43ThuxwbUqgch5nVWJLRhFoqVy4ozse2IredOLZ05LYTnRmRFdS3tnnbiRZq632CcfmpAZ5dbpQtWE/97cB4PV5dXYnmAB1eGh6Mfyyz4KyeoZjWJwD/2VoFc3Iwtu2upP7aCRP1QU+ODMegMDX1Bw6UVtnw4sY63HVOJK4k4b/B5sK0RWWk+Gnx6pgIFJY0YlaGA/f01uP6rypw3gAT7h5kRDD1f/N31WLm5jrcdE441E0OvLe1Dhekh2JUmAIPrK4R3wz/TpI8+UFts723nejMHOttJzxjkwJXUrn21rjw1JY678CowDNUT3Zm1eG07qHIza7BHOq3xScpNFaM7xeCEcHAQ+uonDu4rE6WbScCAwNhNBo9eS6RnAAolUoUFhYiOTm5zdtOdHqFkBEp4D/8eoU6OSHgi3OPu2/DVY8dGe6FuDPkcxq4WEgWCiPbs53vaRkL2eyfYSsa6AV8DQtBQhCiY9aDWKHwXcfufMxhchy8YR41DiwocxgMB+ENmw99kA+vP3F0EP9wOFyfM9/bFx//dIiBiI75l4vhsPgxQjli/2znHbhaxBs8OuY8YHeOB8eTnb3pbfXri6dKiblTk3B1Dw3uW1AqVq4cnBqE58dFYsWWctSFBOISMymQL+SgnjdS917P8JNvcZ/DhCuRf7785vvzL/1vxZcuxle2fDn75Thx/NnOG/9D7unLQ04qw06ch+TnoC+/OHAYPoQ/Lg5vGR/FXeC7BwfK9/emU+BXt7w23vDYeC2EO/1yGN40HVK3iIBADXIf6YbN2ytw8XwLb2bm8aNQIbkiB18b1sM1chTKp7+FiFFDUR6XBsNH78F4z53QZGSg8YeVUDzyKOyffQ5tEwkWDz0M7WOPQNMtDZaLJ0L95KMwTZyAiCQzHlmQhVmnTKC08AhPNxdxoAP+BNeXD0fIx7YgFcJji1QIj4zIijYqhIzIS27r3PZ9cD7yqfilA9G2qdNw0C8Hx21etCWyYz98LbWH1j6EPwxnP2zH/vkPtzvRL3ivZ3vuN7i/EfenY1+/5LPjcw6Lpxvw1FPv+Pl7iPyQCuEhHI99CA+OAZ5yo4z31A0ev7ne8NNknq7EdVT4pz+eaVN/qN7+VaRCKJF0DO2hEPqGgk4NdyrcwfpWlPPY0Tl3cH6dnMeO/NAgyTbinKdN6LiD9NrzL9uz4YGM3ciIsH32fMxuHAb/42P/67zxEP/8wjxqHPjpq/99vGH7I/yyPbv7G5E+cvOmX6SFwzlaOkSe0K+4B/07LH7M4XnJCD98LR+zO5/zL4d/uF8KWwgX1Fn+fXEJNhQ68fTFMfh2agIeGx6ChVsqcOOyKizfWYVzPyhCPVdDv+sZES8O1y9ejLifz43TwPHgY59hN/bjjdchecq/bO8Xf3+EG9m35iH7Z79edx+tcfD5Y8Phk/3/cj/kHr74+uLFxhdXEZIHT3jeazgsXxr90tTqj8Mme/5G9flFxbhtWYVn9VivH94CJTciFXdYumHjCx/hgjOfwUu7FNj4xTqcfc6rWPTxSjy+W43BQ6fjl+dn4m7DKEyInYK8vz2Cwf2fwBTHGch77g2cPfYdvLDNjjkzv8esPhNJ2PC8afXFwVNX6J8vjkfIR4mkqyLaLLULsSO9z3Ab536T2ow45pWGuT1x++WVhVlJYztvWxL9F1/H14jrvXb8wJXD5hVauf2JvoPsqd8QYbD/1vvTL59zm/XZ8cM5OhR+/4AyKDlxEGXF5e1VBrnkRJ3w1hvxK/pmD6JoRb07OI5IJJKuyUnxhlByYuL/tNJs9Hyb0mR3o5ynVvLgxE8u+ZcVHM8lknZCvOXlp8KsIFIe++evaPAKIenRAflRUHvkFSVaBQK6hu25/Hx2nmL0cIg9/bY0k5MItcORbwiPLfIN4ZERWfEX3hCebIj8kG8ID+F4vCE80ZFvCCWSjkG+IZSc0LAQIN5Yke5RSkpgXm0zykkhFAITK4H85kgqgx2CeCOn8+7N5bXzIc5JiYObv7UkRdDloHMXFG62Y+OgY3IjO885GeHfd0x+XXwtHzuPmTIokUgkEolEIml/pEIo6XCEYshPidmwgtIFnxafaHAJHG6Yg8ceRfJohh/tth5LJBKJRCKRSDotUiGUSCQSiUQikUgkki6KVAglEolEIpFIJF0e33eB/E0WG4mkqyBru0QikUgkEomky8OftNhsNlRUVKCyshIOh0N+5vJXISVboVB6F+YhtUPo3ApxruZVbr3woj1sZG4fH6RCKJFIJBKJRCLp8vAKogkJCQgICBDHrKDI1UTbDuedQqWGtb4KG9auwd6sIuj0Wriabfhp43rs2JsFhVIJPdnt2LYJ237aCYfbs0aBzPZji1QIJRKJRCKRSCRdHn5rFRMTI7adiI2NFUqhVAj/GlqtFvt2rsfL01/E82/OQkBgAKrLcvH6ay/htZkfo6LBCb3bildeeAovvv4WMosqoeEV6iXHFJnjEolEIvlTsHjUzHtdulrQ0gUNp5v3UeUs8CEOhRsd+/ntCkZkBP0ekh98LOy7Xn6w4XQfnh/NXvsj+e8KhtPe2ZDK4F+n2eVCtDkFffr2wZD03mh2OBFkCke/fn3R77TTYNCq4FJpkT4wHf369kNYcCDc/o1HckyQG9NLJJJOg9yY/thytI3ptWpgyLsW/FbphLaLbkzvIgH39fEhuDk9CDZnC6qtbqS9WSLyo6vtO8754Wh2Y/q4EEwbbEQT5Udlkxt93i6BW9H18oOptbrw9oVhuOsMqh9UVwpqXRj3qQUWqifqrpghRG1DMzIejEN8sIrqC3+v53VoZ/7KxvSHs3fvXoSFhUGj0Yjpo0VFRWI6qdyY/s9xcOptC1pI2VMoVdQvtJDiJ2yEH17EhxVBBdvzA4Su2UzaRHtsTC8VQolE0mmQCuGx5UgKIcPjdFCgssvPMXHbWtDg8AguGjKGoK6dIb78YEGfnxMEdOn8UMBtd6PB7skPXjvDEEB/6LjrooCt0QWHi446MB/aWyHkhWV4KikL3XV1dTCbzQgKCpIK4Z+Evwxk5Y9z7fDi99mxkbn655EKoUQi6VJIhfDYcjSFkJGyEEHSi0+wEdnR1fPELz8YWUcoP/wyROYHcVgd6QjaUyG0Wq1oaGigclSIt1zFxcXyDaHkhKM9FMIu/nxXIpFIJG2BBd0ub7x5wfDxEf10JePJilaO6KeLGX+O5N7ljDcvOgsGgwGRkZGIiIhAaGioVAQlJy3HRSHkxiSNNNJI82eNnEsikUgkkuOFGIckkpOQYzpl9K6FpZi5vBzQyReTEomkDThbMC49GMumJnotJB0JTxnNy8tDSkoK3Pz1v0QikZzA8NTO5uZmZGRkID093WvbfvAUehabeVqeVA4lJwo8ZbSgoACJiYkICQnx2v45jqlCuCqrCauzGqFTd7ZJAxKJ5ETA6WpBrygdruwX7LWRdCT8/cz27dvFKntS+JFIJJ0BfnjF3/2deeaZXpv2gx+QlZaWQq/Xe20kkuMPPwipqalB//79ERzcNvnomCqEEolEIuk88PBQW1srlUGJRNKp4M3QeVP59sbpdIqZExLJiQSP0fyWkJVBVg7bglQIJRKJRCKRSCQSiaSLIj/mk0gkEolEIpFIJJIuilQIJRKJRCKRSCQSiaSLIhVCiUQikUgkEolEIumiSIVQIpFIJBKJRCKRSLooUiGUSCQSiUQikUgkki6KVAglEolEIpFIJBKJpIsiFUKJRCKRSCQSiUQi6aJIhVAikUgkEolEIpFIuihSIZRIJBKJRCKRSCSSLopUCCUSiUQikUgkEomkiyIVQolEIpFIJBKJRCLpokiFUCKRSCQSiUQikUi6KFIhlEgkEolEIpFIJJIuCfD/iokecHuAnDcAAAAASUVORK5CYII=",
- "name": "Files\\architecture-resize.png"
- }
- ],
- "entities": [],
- "replyToId": "b2f958e0-616c-11eb-b46e-c3c3213a748e",
- "id": "b57b96f0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:28:29-03:00",
- "timestamp": "2021-01-28T13:28:29.407Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "Do you want another type of attachment?",
- "speak": "Do you want another type of attachment?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "Yes",
- "value": "Yes"
- },
- {
- "type": "imBack",
- "title": "No",
- "value": "No"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "b2f958e0-616c-11eb-b46e-c3c3213a748e",
- "id": "b5a82530-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:28:29-03:00",
- "timestamp": "2021-01-28T13:28:29.699Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118405370383nul2pf807g",
- "clientTimestamp": "2021-01-28T13:28:57.038Z"
- },
- "text": "Yes",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:28:57.116Z",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "c5ffa5c0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:28:57-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "What card do you want?",
- "speak": "What card do you want?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "Inline",
- "value": "Inline"
- },
- {
- "type": "imBack",
- "title": "Internet",
- "value": "Internet"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "c5ffa5c0-616c-11eb-b46e-c3c3213a748e",
- "id": "c6c4f190-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:28:58-03:00",
- "timestamp": "2021-01-28T13:28:58.409Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118405437189fvw0nchfd",
- "clientTimestamp": "2021-01-28T13:29:03.718Z"
- },
- "text": "Internet",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:29:03.775Z",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "c9f7baf0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:29:03-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "This is an attachment from a HTTP URL.",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "image/png",
- "contentUrl": "https://docs.microsoft.com/en-us/bot-framework/media/how-it-works/architecture-resize.png",
- "name": "Files\\architecture-resize.png"
- }
- ],
- "entities": [],
- "replyToId": "c9f7baf0-616c-11eb-b46e-c3c3213a748e",
- "id": "caae87d0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:29:04-03:00",
- "timestamp": "2021-01-28T13:29:04.973Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "Do you want another type of attachment?",
- "speak": "Do you want another type of attachment?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "Yes",
- "value": "Yes"
- },
- {
- "type": "imBack",
- "title": "No",
- "value": "No"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "c9f7baf0-616c-11eb-b46e-c3c3213a748e",
- "id": "cad9dd90-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:29:05-03:00",
- "timestamp": "2021-01-28T13:29:05.257Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611840562624thw0ki5mdtf",
- "clientTimestamp": "2021-01-28T13:29:22.624Z"
- },
- "text": "No",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:29:22.702Z",
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "id": "d53fc2e0-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:29:22-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "94732b31-616c-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "d53fc2e0-616c-11eb-b46e-c3c3213a748e",
- "id": "d5dffa80-616c-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:29:23-03:00",
- "timestamp": "2021-01-28T13:29:23.752Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs
deleted file mode 100644
index cf5fb00613..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System.Collections.Generic;
-using System.IO;
-using System.Net.Http;
-using System.Threading.Tasks;
-using Microsoft.Bot.Connector;
-using Microsoft.Bot.Schema;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using SkillFunctionalTests.Common;
-using TranscriptTestRunner;
-using TranscriptTestRunner.XUnit;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace SkillFunctionalTests.ProactiveMessages
-{
- [Trait("TestCategory", "ProactiveMessages")]
- public class ProactiveTests : ScriptTestBase
- {
- private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/ProactiveMessages/TestScripts";
-
- public ProactiveTests(ITestOutputHelper output)
- : base(output)
- {
- }
-
- public static IEnumerable TestCases()
- {
- var channelIds = new List { Channels.Directline };
- var deliverModes = new List
- {
- DeliveryModes.Normal,
- DeliveryModes.ExpectReplies
- };
-
- var hostBots = new List
- {
- HostBot.WaterfallHostBotDotNet,
- HostBot.WaterfallHostBotJS,
- HostBot.WaterfallHostBotPython,
-
- // TODO: Enable this when the port to composer is ready
- //HostBot.ComposerHostBotDotNet
- };
-
- var targetSkills = new List
- {
- SkillBotNames.WaterfallSkillBotDotNet,
- SkillBotNames.WaterfallSkillBotPython,
-
- // TODO: Enable these when the ports to JS, and composer are ready
- //SkillBotNames.WaterfallSkillBotJS,
- //SkillBotNames.ComposerSkillBotDotNet
- };
-
- var scripts = new List
- {
- "ProactiveStart.json",
- };
-
- var testCaseBuilder = new TestCaseBuilder();
-
- var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts);
- foreach (var testCase in testCases)
- {
- yield return testCase;
- }
- }
-
- [Theory]
- [MemberData(nameof(TestCases))]
- public async Task RunTestCases(TestCaseDataObject testData)
- {
- var userId = string.Empty;
- var url = string.Empty;
-
- var testCase = testData.GetObject();
- Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented));
-
- var options = TestClientOptions[testCase.HostBot];
- var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger);
-
- var testParamsStart = new Dictionary
- {
- { "DeliveryMode", testCase.DeliveryMode },
- { "TargetSkill", testCase.TargetSkill }
- };
-
- // Execute the first part of the conversation.
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParamsStart);
-
- await runner.AssertReplyAsync(activity =>
- {
- Assert.Equal(ActivityTypes.Message, activity.Type);
- Assert.Contains("Navigate to http", activity.Text);
-
- var message = activity.Text.Split(" ");
- url = message[2];
- userId = url.Split("user=")[1];
- });
-
- // Send a get request to the message's url to continue the conversation.
- using (var client = new HttpClient())
- {
- await client.GetAsync(url).ConfigureAwait(false);
- }
-
- var testParamsEnd = new Dictionary
- {
- { "UserId", userId },
- { "TargetSkill", testCase.TargetSkill }
- };
-
- // Execute the rest of the conversation passing the messageId.
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "ProactiveEnd.json"), testParamsEnd);
- }
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json
deleted file mode 100644
index 9e6671b8d0..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "bot",
- "text": "Got proactive message for user: ${UserId}",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Got proactive message for user: ${UserId}'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "We received a proactive message, ending the dialog",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'We received a proactive message, ending the dialog'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript
deleted file mode 100644
index 0ee0498b53..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript
+++ /dev/null
@@ -1,91 +0,0 @@
-[
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "text": "Got proactive message for user: ${UserId}",
- "inputHint": "acceptingInput",
- "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816",
- "id": "f44c7b20-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:23:05-03:00",
- "timestamp": "2021-01-28T13:23:05.298Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "text": "We received a proactive message, ending the dialog",
- "inputHint": "acceptingInput",
- "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816",
- "id": "f4789430-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:23:05-03:00",
- "timestamp": "2021-01-28T13:23:05.587Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816",
- "id": "f4a4fb60-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:23:05-03:00",
- "timestamp": "2021-01-28T13:23:05.878Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json
deleted file mode 100644
index 1f1b1108d8..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json
+++ /dev/null
@@ -1,137 +0,0 @@
-{
- "items": [
- {
- "type": "conversationUpdate",
- "role": "user"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "speak == 'Welcome to the waterfall host bot'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'Image'",
- "attachments[0].content.body[0].size == 'stretch'",
- "attachments[0].content.body[1].type == 'TextBlock'",
- "attachments[0].content.body[1].spacing == 'Medium'",
- "attachments[0].content.body[1].size == 'Medium'",
- "attachments[0].content.body[1].weight == 'Bolder'",
- "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'",
- "attachments[0].content.body[1].wrap == True",
- "attachments[0].content.body[1].color == 'Accent'",
- "attachments[0].content.body[2].type == 'TextBlock'",
- "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'",
- "attachments[0].content.body[2].wrap == True"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What delivery mode would you like to use?'",
- "speak == 'What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${DeliveryMode}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What group of skills would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What group of skills would you like to use?'",
- "speak == 'What group of skills would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'",
- "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Waterfall"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "startsWith(text, 'What skill would you like to call?')",
- "speak == 'What skill would you like to call?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${TargetSkill}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'",
- "speak == 'Select an action to send to **${TargetSkill}**.'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Proactive"
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Got ActivityType: event'",
- "name == 'ActivityRouterDialog.ProcessActivityAsync()'"
- ]
- },
- {
- "type": "trace",
- "role": "bot",
- "assertions": [
- "type == 'trace'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "label == 'Name: Proactive. Value: '",
- "name == 'ActivityRouterDialog.OnEventActivityAsync()'"
- ]
- }
- ]
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript
deleted file mode 100644
index ef34517760..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript
+++ /dev/null
@@ -1,408 +0,0 @@
-[
- {
- "type": "conversationUpdate",
- "membersAdded": [
- {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot"
- },
- {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "name": "User"
- }
- ],
- "membersRemoved": [],
- "channelId": "emulator",
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "981e0030-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:30-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "timestamp": "2021-01-28T13:20:30.643Z",
- "from": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "speak": "Welcome to the waterfall host bot",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
- "type": "AdaptiveCard",
- "version": "1.0",
- "body": [
- {
- "type": "Image",
- "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU",
- "size": "stretch"
- },
- {
- "type": "TextBlock",
- "spacing": "Medium",
- "size": "Medium",
- "weight": "Bolder",
- "text": "Welcome to the Skill Dialog Sample!",
- "wrap": true,
- "maxLines": 0,
- "color": "Accent"
- },
- {
- "type": "TextBlock",
- "size": "default",
- "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.",
- "wrap": true,
- "maxLines": 0
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "981e0030-616b-11eb-b46e-c3c3213a748e",
- "id": "98f26730-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:32-03:00",
- "timestamp": "2021-01-28T13:20:32.035Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "text": "What delivery mode would you like to use?",
- "speak": "What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "981e0030-616b-11eb-b46e-c3c3213a748e",
- "id": "991c0f40-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:32-03:00",
- "timestamp": "2021-01-28T13:20:32.308Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611840033447rjp2jvkf9jk",
- "clientTimestamp": "2021-01-28T13:20:33.447Z"
- },
- "text": "normal",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:20:33.472Z",
- "entities": [
- {
- "requiresBotState": true,
- "supportsListening": true,
- "supportsTts": true,
- "type": "ClientCapabilities"
- }
- ],
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "99cdac00-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:33-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "text": "What type of skill would you like to use?",
- "speak": "What type of skill would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "EchoSkill",
- "value": "EchoSkill"
- },
- {
- "type": "imBack",
- "title": "WaterfallSkill",
- "value": "WaterfallSkill"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "99cdac00-616b-11eb-b46e-c3c3213a748e",
- "id": "9a618790-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:34-03:00",
- "timestamp": "2021-01-28T13:20:34.441Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611840035554f72iioqm5u6",
- "clientTimestamp": "2021-01-28T13:20:35.554Z"
- },
- "text": "WaterfallSkill",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:20:35.584Z",
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "9b0ff000-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:35-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "text": "What skill would you like to call?",
- "speak": "What skill would you like to call?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "WaterfallSkillBotDotNet",
- "value": "WaterfallSkillBotDotNet"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "9b0ff000-616b-11eb-b46e-c3c3213a748e",
- "id": "9babe1e0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:36-03:00",
- "timestamp": "2021-01-28T13:20:36.606Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611840037630e91nk7asij4",
- "clientTimestamp": "2021-01-28T13:20:37.630Z"
- },
- "text": "WaterfallSkillBotDotNet",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:20:37.663Z",
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "9c4d2af0-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:37-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo",
- "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "9c4d2af0-616b-11eb-b46e-c3c3213a748e",
- "id": "9ce30250-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:38-03:00",
- "timestamp": "2021-01-28T13:20:38.645Z"
- },
- {
- "channelData": {
- "clientActivityID": "16118400442741u2eexpiomv",
- "clientTimestamp": "2021-01-28T13:20:44.274Z"
- },
- "text": "Proactive",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-28T13:20:44.313Z",
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "id": "a043e090-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:44-03:00",
- "recipient": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://9ed82cccfc76.ngrok.io"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-28T13:20:45.553Z",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "replyToId": "a043e090-616b-11eb-b46e-c3c3213a748e",
- "label": "Got ActivityType: event",
- "name": "ActivityRouterDialog.ProcessActivityAsync()",
- "id": "a1011610-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:45-03:00"
- },
- {
- "type": "trace",
- "timestamp": "2021-01-28T13:20:45.845Z",
- "serviceUrl": "https://9ed82cccfc76.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "48224d50-60a5-11eb-881a-afe376da3863",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "980966c0-616b-11eb-881a-afe376da3863|livechat"
- },
- "recipient": {
- "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8",
- "role": "user"
- },
- "locale": "",
- "replyToId": "a043e090-616b-11eb-b46e-c3c3213a748e",
- "label": "Name: Proactive. Value: ",
- "name": "ActivityRouterDialog.OnEventActivityAsync()",
- "id": "a12da450-616b-11eb-b46e-c3c3213a748e",
- "localTimestamp": "2021-01-28T10:20:45-03:00"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs b/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs
deleted file mode 100644
index abbb3582c7..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.Bot.Connector;
-using Microsoft.Bot.Schema;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using SkillFunctionalTests.Common;
-using TranscriptTestRunner;
-using TranscriptTestRunner.XUnit;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace SkillFunctionalTests.SignIn
-{
- [Trait("TestCategory", "SignIn")]
- public class SignInTests : ScriptTestBase
- {
- private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/SignIn/TestScripts";
-
- public SignInTests(ITestOutputHelper output)
- : base(output)
- {
- }
-
- public static IEnumerable TestCases()
- {
- var channelIds = new List { Channels.Directline };
- var deliverModes = new List
- {
- DeliveryModes.Normal,
- DeliveryModes.ExpectReplies,
- };
-
- var hostBots = new List
- {
- HostBot.WaterfallHostBotDotNet,
- HostBot.WaterfallHostBotJS,
- HostBot.WaterfallHostBotPython,
-
- // TODO: Enable this when the port to composer is ready
- //HostBot.ComposerHostBotDotNet
- };
-
- var targetSkills = new List
- {
- SkillBotNames.WaterfallSkillBotDotNet,
- SkillBotNames.WaterfallSkillBotJS,
- SkillBotNames.WaterfallSkillBotPython,
-
- // TODO: Enable this when the port to composer is ready
- //SkillBotNames.ComposerSkillBotDotNet
- };
-
- var scripts = new List
- {
- "SignIn1.json"
- };
-
- var testCaseBuilder = new TestCaseBuilder();
-
- var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts);
- foreach (var testCase in testCases)
- {
- yield return testCase;
- }
- }
-
- [Theory]
- [MemberData(nameof(TestCases))]
- public async Task RunTestCases(TestCaseDataObject testData)
- {
- var signInUrl = string.Empty;
- var testCase = testData.GetObject();
- Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented));
-
- var options = TestClientOptions[testCase.HostBot];
- var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger);
-
- var testParams = new Dictionary
- {
- { "DeliveryMode", testCase.DeliveryMode },
- { "TargetSkill", testCase.TargetSkill }
- };
-
- // Execute the first part of the conversation.
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams);
-
- await runner.AssertReplyAsync(activity =>
- {
- Assert.Equal(ActivityTypes.Message, activity.Type);
- Assert.True(activity.Attachments.Count > 0);
-
- var card = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(activity.Attachments.FirstOrDefault().Content));
- signInUrl = card.Buttons[0].Value?.ToString();
-
- Assert.False(string.IsNullOrEmpty(signInUrl));
- });
-
- // Execute the SignIn.
- await runner.ClientSignInAsync(signInUrl);
-
- // Execute the rest of the conversation passing the messageId.
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "SignIn2.json"), testParams);
- }
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json
deleted file mode 100644
index 75f761289a..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json
+++ /dev/null
@@ -1,112 +0,0 @@
-{
- "items": [
- {
- "type": "conversationUpdate",
- "role": "user"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "attachmentLayout == 'list'",
- "speak == 'Welcome to the waterfall host bot'",
- "inputHint == 'acceptingInput'",
- "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'",
- "attachments[0].content.type == 'AdaptiveCard'",
- "attachments[0].content.body[0].type == 'Image'",
- "attachments[0].content.body[0].size == 'stretch'",
- "attachments[0].content.body[1].type == 'TextBlock'",
- "attachments[0].content.body[1].spacing == 'Medium'",
- "attachments[0].content.body[1].size == 'Medium'",
- "attachments[0].content.body[1].weight == 'Bolder'",
- "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'",
- "attachments[0].content.body[1].wrap == True",
- "attachments[0].content.body[1].color == 'Accent'",
- "attachments[0].content.body[2].type == 'TextBlock'",
- "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'",
- "attachments[0].content.body[2].wrap == True"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What delivery mode would you like to use?'",
- "speak == 'What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${DeliveryMode}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What group of skills would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What group of skills would you like to use?'",
- "speak == 'What group of skills would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'",
- "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Waterfall"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "startsWith(text, 'What skill would you like to call?')",
- "speak == 'What skill would you like to call?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${TargetSkill}"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Auth"
- }
- ]
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript
deleted file mode 100644
index 71181719c3..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript
+++ /dev/null
@@ -1,360 +0,0 @@
-[
- {
- "type": "conversationUpdate",
- "membersAdded": [
- {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot"
- },
- {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "name": "User"
- }
- ],
- "membersRemoved": [],
- "channelId": "emulator",
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "id": "da5e8130-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T15:59:59-03:00",
- "recipient": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "timestamp": "2021-01-27T18:59:59.299Z",
- "from": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "serviceUrl": "https://259039676c61.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "attachmentLayout": "list",
- "locale": "",
- "speak": "Welcome to the waterfall host bot",
- "inputHint": "acceptingInput",
- "attachments": [
- {
- "contentType": "application/vnd.microsoft.card.adaptive",
- "content": {
- "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
- "type": "AdaptiveCard",
- "version": "1.0",
- "body": [
- {
- "type": "Image",
- "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU",
- "size": "stretch"
- },
- {
- "type": "TextBlock",
- "spacing": "Medium",
- "size": "Medium",
- "weight": "Bolder",
- "text": "Welcome to the Skill Dialog Sample!",
- "wrap": true,
- "maxLines": 0,
- "color": "Accent"
- },
- {
- "type": "TextBlock",
- "size": "default",
- "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.",
- "wrap": true,
- "maxLines": 0
- }
- ]
- }
- }
- ],
- "entities": [],
- "replyToId": "da5e8130-60d1-11eb-8b98-b971494822a6",
- "id": "db473380-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:00-03:00",
- "timestamp": "2021-01-27T19:00:00.824Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "What delivery mode would you like to use?",
- "speak": "What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "da5e8130-60d1-11eb-8b98-b971494822a6",
- "id": "db7129b0-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:01-03:00",
- "timestamp": "2021-01-27T19:00:01.099Z"
- },
- {
- "channelData": {
- "clientActivityID": "16117740025163t1zr5cif",
- "clientTimestamp": "2021-01-27T19:00:02.516Z"
- },
- "text": "normal",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-27T19:00:02.528Z",
- "entities": [
- {
- "requiresBotState": true,
- "supportsListening": true,
- "supportsTts": true,
- "type": "ClientCapabilities"
- }
- ],
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "id": "dc4b3600-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:02-03:00",
- "recipient": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://259039676c61.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "What type of skill would you like to use?",
- "speak": "What type of skill would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "EchoSkill",
- "value": "EchoSkill"
- },
- {
- "type": "imBack",
- "title": "WaterfallSkill",
- "value": "WaterfallSkill"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "dc4b3600-60d1-11eb-8b98-b971494822a6",
- "id": "dcd65f00-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:03-03:00",
- "timestamp": "2021-01-27T19:00:03.440Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611774004677b31ih46f32l",
- "clientTimestamp": "2021-01-27T19:00:04.677Z"
- },
- "text": "WaterfallSkill",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-27T19:00:04.692Z",
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "id": "dd956940-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:04-03:00",
- "recipient": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://259039676c61.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "What skill would you like to call?",
- "speak": "What skill would you like to call?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "WaterfallSkillBotDotNet",
- "value": "WaterfallSkillBotDotNet"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "dd956940-60d1-11eb-8b98-b971494822a6",
- "id": "de24d800-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:05-03:00",
- "timestamp": "2021-01-27T19:00:05.632Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611774006749prlvxjdfr2b",
- "clientTimestamp": "2021-01-27T19:00:06.749Z"
- },
- "text": "WaterfallSkillBotDotNet",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-27T19:00:06.776Z",
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "id": "ded36780-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:06-03:00",
- "recipient": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://259039676c61.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo",
- "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "ded36780-60d1-11eb-8b98-b971494822a6",
- "id": "df60da70-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:07-03:00",
- "timestamp": "2021-01-27T19:00:07.703Z"
- },
- {
- "channelData": {
- "clientActivityID": "1611774010842ks0wa2td8kl",
- "clientTimestamp": "2021-01-27T19:00:10.842Z"
- },
- "text": "Auth",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-27T19:00:10.866Z",
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "id": "e1437d20-60d1-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:00:10-03:00",
- "recipient": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://259039676c61.ngrok.io"
- }
-]
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json
deleted file mode 100644
index 6382f436e7..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "items": [
- {
- "type": "message",
- "role": "bot",
- "text": "You are now logged in.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'You are now logged in.'",
- "speak == 'You are now logged in.'",
- "inputHint == 'ignoringInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Would you like to view your token?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Would you like to view your token?'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "yes"
- },
- {
- "type": "message",
- "role": "bot",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "speak == 'Here is your token:'",
- "inputHint == 'ignoringInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "I have signed you out.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'I have signed you out.'",
- "speak == 'I have signed you out.'",
- "inputHint == 'ignoringInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript
deleted file mode 100644
index 2d8cf8ee19..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript
+++ /dev/null
@@ -1,124 +0,0 @@
-[
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "You are now logged in.",
- "speak": "You are now logged in.",
- "inputHint": "ignoringInput",
- "attachments": [],
- "entities": [],
- "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6",
- "id": "07013390-60d2-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:01:14-03:00",
- "timestamp": "2021-01-27T19:01:14.185Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "Here is your token: 37f0ba3c-24bd-485c-9a11-7151fe604b95",
- "speak": "Here is your token:",
- "inputHint": "ignoringInput",
- "attachments": [],
- "entities": [],
- "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6",
- "id": "072c6240-60d2-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:01:14-03:00",
- "timestamp": "2021-01-27T19:01:14.468Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "I have signed you out.",
- "speak": "I have signed you out.",
- "inputHint": "ignoringInput",
- "attachments": [],
- "entities": [],
- "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6",
- "id": "077e2bc0-60d2-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:01:15-03:00",
- "timestamp": "2021-01-27T19:01:15.004Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://259039676c61.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "73573150-60c5-11eb-b881-018622be8a2a",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat"
- },
- "recipient": {
- "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2",
- "role": "user"
- },
- "locale": "",
- "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6",
- "id": "07aa92f0-60d2-11eb-8b98-b971494822a6",
- "localTimestamp": "2021-01-27T16:01:15-03:00",
- "timestamp": "2021-01-27T19:01:15.295Z"
- }
-]
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs
deleted file mode 100644
index 8ba52a0f71..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading.Tasks;
-using Microsoft.Bot.Connector;
-using Microsoft.Bot.Schema;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using SkillFunctionalTests.Common;
-using TranscriptTestRunner;
-using TranscriptTestRunner.XUnit;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace SkillFunctionalTests.SingleTurn
-{
- [Trait("TestCategory", "SingleTurn")]
- public class EchoTests : ScriptTestBase
- {
- private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/SingleTurn/TestScripts";
-
- public EchoTests(ITestOutputHelper output)
- : base(output)
- {
- }
-
- public static IEnumerable TestCases()
- {
- var channelIds = new List { Channels.Directline };
- var deliverModes = new List
- {
- DeliveryModes.Normal,
- DeliveryModes.ExpectReplies
- };
-
- var hostBots = new List
- {
- HostBot.SimpleHostBotComposerDotNet,
- HostBot.SimpleHostBotDotNet,
- HostBot.SimpleHostBotDotNet21,
- HostBot.SimpleHostBotJS,
- HostBot.SimpleHostBotPython,
- };
-
- var targetSkills = new List
- {
- SkillBotNames.EchoSkillBotComposerDotNet,
- SkillBotNames.EchoSkillBotDotNet,
- SkillBotNames.EchoSkillBotDotNet21,
- SkillBotNames.EchoSkillBotDotNetV3,
- SkillBotNames.EchoSkillBotJS,
- SkillBotNames.EchoSkillBotJSV3,
- SkillBotNames.EchoSkillBotPython
- };
-
- var scripts = new List { "EchoMultiSkill.json" };
-
- var testCaseBuilder = new TestCaseBuilder();
-
- // This local function is used to exclude ExpectReplies test cases for v3 bots
- static bool ShouldExclude(TestCase testCase)
- {
- if (testCase.DeliveryMode == DeliveryModes.ExpectReplies)
- {
- // Note: ExpectReplies is not supported by DotNetV3 and JSV3 skills.
- if (testCase.TargetSkill == SkillBotNames.EchoSkillBotDotNetV3 || testCase.TargetSkill == SkillBotNames.EchoSkillBotJSV3)
- {
- return true;
- }
- }
-
- return false;
- }
-
- var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts, ShouldExclude);
- foreach (var testCase in testCases)
- {
- yield return testCase;
- }
- }
-
- [Theory]
- [MemberData(nameof(TestCases))]
- public async Task RunTestCases(TestCaseDataObject testData)
- {
- var testCase = testData.GetObject();
- Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented));
-
- var options = TestClientOptions[testCase.HostBot];
-
- var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger);
-
- var testParams = new Dictionary
- {
- { "DeliveryMode", testCase.DeliveryMode },
- { "TargetSkill", testCase.TargetSkill }
- };
-
- await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams);
- }
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json
deleted file mode 100644
index 1b3c06348e..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json
+++ /dev/null
@@ -1,163 +0,0 @@
-{
- "items": [
- {
- "type": "conversationUpdate",
- "role": "user"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Hello and welcome!",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Hello and welcome!'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What delivery mode would you like to use?'",
- "speak == 'What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${DeliveryMode}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What skill would you like to call?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What skill would you like to call?'",
- "speak == 'What skill would you like to call?'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "${TargetSkill}"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Type anything to send to the skill.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Type anything to send to the skill.'",
- "inputHint == 'expectingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "Hello"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Echo: Hello",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Echo: Hello'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Say \"end\" or \"stop\" and I\\'ll end the conversation and back to the parent.'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "user",
- "text": "end"
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Ending conversation from the skill...",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Ending conversation from the skill...'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Received endOfConversation.\n\nCode: completedSuccessfully.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Received endOfConversation.\n\nCode: completedSuccessfully.'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "Back in the host bot.",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'Back in the host bot.'",
- "inputHint == 'acceptingInput'"
- ]
- },
- {
- "type": "message",
- "role": "bot",
- "text": "What delivery mode would you like to use?",
- "assertions": [
- "type == 'message'",
- "from.role == 'bot'",
- "recipient.role == 'user'",
- "text == 'What delivery mode would you like to use?'",
- "speak == 'What delivery mode would you like to use?'",
- "inputHint == 'expectingInput'",
- "suggestedActions.actions[0].type == 'imBack'",
- "suggestedActions.actions[0].title == 'normal'",
- "suggestedActions.actions[0].value == 'normal'",
- "suggestedActions.actions[1].type == 'imBack'",
- "suggestedActions.actions[1].title == 'expectReplies'",
- "suggestedActions.actions[1].value == 'expectReplies'"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript
deleted file mode 100644
index f5569cf169..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript
+++ /dev/null
@@ -1,480 +0,0 @@
-[
- {
- "type": "conversationUpdate",
- "membersAdded": [
- {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot"
- },
- {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "name": "User"
- }
- ],
- "membersRemoved": [],
- "channelId": "emulator",
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "id": "67d08fd0-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:17:48-03:00",
- "recipient": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "timestamp": "2021-01-05T13:17:48.237Z",
- "from": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "serviceUrl": "https://60ecb8345374.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "Hello and welcome!",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "67d08fd0-4f58-11eb-80df-41840e87027c",
- "id": "68722700-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:17:49-03:00",
- "timestamp": "2021-01-05T13:17:49.296Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "What delivery mode would you like to use?",
- "speak": "What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "67d08fd0-4f58-11eb-80df-41840e87027c",
- "id": "689ae4b0-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:17:49-03:00",
- "timestamp": "2021-01-05T13:17:49.563Z"
- },
- {
- "channelData": {
- "clientActivityID": "1609852670737zdf39h87ze9",
- "clientTimestamp": "2021-01-05T13:17:50.737Z"
- },
- "text": "expectReplies",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-05T13:17:50.760Z",
- "entities": [
- {
- "requiresBotState": true,
- "supportsListening": true,
- "supportsTts": true,
- "type": "ClientCapabilities"
- }
- ],
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "id": "69518a80-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:17:50-03:00",
- "recipient": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://60ecb8345374.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "What skill would you like to call?",
- "speak": "What skill would you like to call?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "EchoSkillBotDotNet",
- "value": "EchoSkillBotDotNet"
- },
- {
- "type": "imBack",
- "title": "EchoSkillBotDotNet21",
- "value": "EchoSkillBotDotNet21"
- },
- {
- "type": "imBack",
- "title": "EchoSkillBotDotNetV3",
- "value": "EchoSkillBotDotNetV3"
- },
- {
- "type": "imBack",
- "title": "EchoSkillBotJS",
- "value": "EchoSkillBotJS"
- },
- {
- "type": "imBack",
- "title": "EchoSkillBotJSV3",
- "value": "EchoSkillBotJSV3"
- },
- {
- "type": "imBack",
- "title": "EchoSkillBotPython",
- "value": "EchoSkillBotPython"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "69518a80-4f58-11eb-80df-41840e87027c",
- "id": "69f93c30-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:17:51-03:00",
- "timestamp": "2021-01-05T13:17:51.859Z"
- },
- {
- "channelData": {
- "clientActivityID": "16098526780751zl7loernbj",
- "clientTimestamp": "2021-01-05T13:17:58.075Z"
- },
- "text": "EchoSkillBotDotNet",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-05T13:17:58.102Z",
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "id": "6db1d760-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:17:58-03:00",
- "recipient": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://60ecb8345374.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "Type anything to send to the skill.",
- "inputHint": "expectingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "6db1d760-4f58-11eb-80df-41840e87027c",
- "id": "6e4ae310-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:17:59-03:00",
- "timestamp": "2021-01-05T13:17:59.105Z"
- },
- {
- "channelData": {
- "clientActivityID": "1609852686824zhcy1hqt9dd",
- "clientTimestamp": "2021-01-05T13:18:06.824Z"
- },
- "text": "Hello",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-05T13:18:06.848Z",
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "id": "72e86000-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:06-03:00",
- "recipient": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://60ecb8345374.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "Echo: Hello",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "72e86000-4f58-11eb-80df-41840e87027c",
- "id": "740cbbc0-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:08-03:00",
- "timestamp": "2021-01-05T13:18:08.764Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "72e86000-4f58-11eb-80df-41840e87027c",
- "id": "74411230-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:09-03:00",
- "timestamp": "2021-01-05T13:18:09.107Z"
- },
- {
- "channelData": {
- "clientActivityID": "16098526945962f14ibp83pt",
- "clientTimestamp": "2021-01-05T13:18:14.596Z"
- },
- "text": "end",
- "textFormat": "plain",
- "type": "message",
- "channelId": "emulator",
- "from": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "name": "User",
- "role": "user"
- },
- "locale": "",
- "timestamp": "2021-01-05T13:18:14.627Z",
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "id": "778b5b30-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:14-03:00",
- "recipient": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "serviceUrl": "https://60ecb8345374.ngrok.io"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "Ending conversation from the skill...",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c",
- "id": "7839c3a0-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:15-03:00",
- "timestamp": "2021-01-05T13:18:15.770Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "Received endOfConversation.\n\nCode: completedSuccessfully",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c",
- "id": "78684db0-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:16-03:00",
- "timestamp": "2021-01-05T13:18:16.075Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "Back in the host bot.",
- "inputHint": "acceptingInput",
- "attachments": [],
- "entities": [],
- "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c",
- "id": "7898faa0-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:16-03:00",
- "timestamp": "2021-01-05T13:18:16.394Z"
- },
- {
- "type": "message",
- "serviceUrl": "https://60ecb8345374.ngrok.io",
- "channelId": "emulator",
- "from": {
- "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611",
- "name": "Bot",
- "role": "bot"
- },
- "conversation": {
- "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat"
- },
- "recipient": {
- "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331",
- "role": "user"
- },
- "locale": "",
- "text": "What delivery mode would you like to use?",
- "speak": "What delivery mode would you like to use?",
- "inputHint": "expectingInput",
- "suggestedActions": {
- "actions": [
- {
- "type": "imBack",
- "title": "normal",
- "value": "normal"
- },
- {
- "type": "imBack",
- "title": "expectReplies",
- "value": "expectReplies"
- }
- ]
- },
- "attachments": [],
- "entities": [],
- "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c",
- "id": "78c317e0-4f58-11eb-80df-41840e87027c",
- "localTimestamp": "2021-01-05T10:18:16-03:00",
- "timestamp": "2021-01-05T13:18:16.670Z"
- }
-]
diff --git a/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs b/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs
deleted file mode 100644
index 151306b8b4..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading.Tasks;
-using Microsoft.Bot.Connector;
-using Microsoft.Bot.Schema;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using SkillFunctionalTests.Common;
-using TranscriptTestRunner;
-using TranscriptTestRunner.XUnit;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace SkillFunctionalTests.Sso
-{
- public class SsoTests : ScriptTestBase
- {
- private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/Sso/TestScripts";
-
- public SsoTests(ITestOutputHelper output)
- : base(output)
- {
- }
-
- public static IEnumerable TestCases()
- {
- var channelIds = new List { Channels.Directline };
- var deliverModes = new List
- {
- DeliveryModes.Normal,
- DeliveryModes.ExpectReplies,
- };
-
- var hostBots = new List
- {
- HostBot.WaterfallHostBotDotNet,
- HostBot.WaterfallHostBotJS,
- HostBot.WaterfallHostBotPython
- };
-
- var targetSkills = new List
- {
- SkillBotNames.WaterfallSkillBotDotNet,
- SkillBotNames.WaterfallSkillBotJS,
- SkillBotNames.WaterfallSkillBotPython
- };
-
- var scripts = new List
- {
- "Sso.json",
- };
-
- var testCaseBuilder = new TestCaseBuilder();
-
- var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts);
- foreach (var testCase in testCases)
- {
- yield return testCase;
- }
- }
-
- [Theory]
- [MemberData(nameof(TestCases))]
- public Task RunTestCases(TestCaseDataObject testData)
- {
- var testCase = testData.GetObject();
- Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented));
-
- // TODO: Implement tests and scripts
- //var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId).GetTestClient(), Logger);
- //await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script));
-
- // TODO: remove this line once we implement the test and we change the method to public async task
- return Task.CompletedTask;
- }
- }
-}
diff --git a/tests/functional/Tests/SkillFunctionalTests/appsettings.json b/tests/functional/Tests/SkillFunctionalTests/appsettings.json
deleted file mode 100644
index 447bc08b9a..0000000000
--- a/tests/functional/Tests/SkillFunctionalTests/appsettings.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Debug",
- "Microsoft": "Warning"
- }
- },
-
- "TestRequestTimeout": 180,
-
- "HostBotClientOptions": {
- "SimpleHostBotComposerDotNet": {
- "BotId": "bffnsimplehostbotcomposerdotnet",
- "DirectLineSecret": ""
- },
- "SimpleHostBotDotNet": {
- "BotId": "bffnsimplehostbotdotnet",
- "DirectLineSecret": ""
- },
- "SimpleHostBotDotNet21": {
- "BotId": "bffnsimplehostbotdotnet21",
- "DirectLineSecret": ""
- },
- "SimpleHostBotJS": {
- "BotId": "bffnsimplehostbotjs",
- "DirectLineSecret": ""
- },
- "SimpleHostBotPython": {
- "BotId": "bffnsimplehostbotpython",
- "DirectLineSecret": ""
- },
- "WaterfallHostBotDotNet": {
- "BotId": "bffnwaterfallhostbotdotnet",
- "DirectLineSecret": ""
- },
- "WaterfallHostBotJS": {
- "BotId": "bffnwaterfallhostbotjs",
- "DirectLineSecret": ""
- },
- "WaterfallHostBotPython": {
- "BotId": "bffnwaterfallhostbotpython",
- "DirectLineSecret": ""
- }
- }
-}
diff --git a/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj b/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj
index 14d32b4f57..f9f90104c6 100644
--- a/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj
+++ b/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj
@@ -7,10 +7,13 @@
-
+
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/tests/functional/build/yaml/functionalTestsBuild-CI.yml b/tests/functional/build/yaml/functionalTestsBuild-CI.yml
index 89bff9a0cd..9f76a12f9e 100644
--- a/tests/functional/build/yaml/functionalTestsBuild-CI.yml
+++ b/tests/functional/build/yaml/functionalTestsBuild-CI.yml
@@ -24,12 +24,12 @@ steps:
- task: NuGetCommand@2
displayName: "NuGet restore"
inputs:
- restoreSolution: SkillFunctionalTests.sln
+ restoreSolution: ComponentsFunctionalTests.sln
- task: MSBuild@1
displayName: "Build"
inputs:
- solution: "SkillFunctionalTests.sln"
+ solution: "ComponentsFunctionalTests.sln"
vsVersion: 16.0
platform: "${{ parameters.buildPlatform }}"
configuration: "${{ parameters.buildConfiguration }}"
diff --git a/tests/functional/build/yaml/testScenarios/configureConsumers.yml b/tests/functional/build/yaml/testScenarios/configureConsumers.yml
index 0cf5eadbee..c6100be4fe 100644
--- a/tests/functional/build/yaml/testScenarios/configureConsumers.yml
+++ b/tests/functional/build/yaml/testScenarios/configureConsumers.yml
@@ -3,16 +3,8 @@ parameters:
displayName: Bot's App Registration Ids
type: object
default:
- EchoSkillBotComposerDotNet: ""
- EchoSkillBotDotNet: ""
- EchoSkillBotDotNet21: ""
- EchoSkillBotDotNetV3: ""
- EchoSkillBotJS: ""
- EchoSkillBotJSV3: ""
- EchoSkillBotPython: ""
- WaterfallSkillBotDotNet: ""
- WaterfallSkillBotJS: ""
- WaterfallSkillBotPython: ""
+ EmptyBotDotNetWebApp: ""
+ EmptyBotJSWebApp: ""
- name: azureSubscription
displayName: Azure Service Connection
@@ -399,176 +391,31 @@ steps:
$groups = @{
DotNet = "$resourceGroup-DotNet"
JS = "$resourceGroup-JS"
- Python = "$resourceGroup-Python"
}
# Bots Settings
$consumers = @(
@{
- key = "SimpleHostBotDotNet"
- botName = "bffnsimplehostbotdotnet"
+ key = "EmptyBotDotNetWebApp"
+ botName = "bfcfnemptybotdotnetwebapp"
resourceGroup = $groups.DotNet
configType = $types.Appsettings
}
@{
- key = "SimpleHostBotDotNet21"
- botName = "bffnsimplehostbotdotnet21"
- resourceGroup = $groups.DotNet
- configType = $types.Appsettings
- }
- @{
- key = "SimpleHostBotComposerDotNet"
- botName = "bffnsimplehostbotcomposerdotnet"
- resourceGroup = $groups.DotNet
- configType = $types.Composer
- }
- @{
- key = "WaterfallHostBotDotNet"
- botName = "bffnwaterfallhostbotdotnet"
- resourceGroup = $groups.DotNet
- configType = $types.Appsettings
- }
- @{
- key = "SimpleHostBotJS"
- botName = "bffnsimplehostbotjs"
- resourceGroup = $groups.JS
- configType = $types.Env
- }
- @{
- key = "WaterfallHostBotJS"
- botName = "bffnwaterfallhostbotjs"
- resourceGroup = $groups.JS
- configType = $types.Env
- }
- @{
- key = "SimpleHostBotPython"
- botName = "bffnsimplehostbotpython"
- resourceGroup = $groups.Python
- configType = $types.Env
- }
- @{
- key = "WaterfallHostBotPython"
- botName = "bffnwaterfallhostbotpython"
- resourceGroup = $groups.Python
- configType = $types.Env
- }
- )
-
- $skills = @(
- @{
- key = "EchoSkillBotDotNet"
- keyComposer = "echoSkillBotDotNet"
- botName = "bffnechoskillbotdotnet"
- appId = "${{ parameters.appIds.EchoSkillBotDotNet }}"
- resourceGroup = $groups.DotNet
- group = "Echo"
- }
- @{
- key = "EchoSkillBotDotNet21"
- keyComposer = "echoSkillBotDotNet21"
- botName = "bffnechoskillbotdotnet21"
- appId = "${{ parameters.appIds.EchoSkillBotDotNet21 }}"
- resourceGroup = $groups.DotNet
- group = "Echo"
- }
- @{
- key = "EchoSkillBotDotNetV3"
- keyComposer = "echoSkillBotDotNetV3"
- botName = "bffnechoskillbotdotnetv3"
- appId = "${{ parameters.appIds.EchoSkillBotDotNetV3 }}"
- resourceGroup = $groups.DotNet
- group = "Echo"
- }
- @{
- key = "EchoSkillBotComposerDotNet"
- keyComposer = "echoSkillBotComposerDotNet"
- botName = "bffnechoskillbotcomposerdotnet"
- appId = "${{ parameters.appIds.EchoSkillBotComposerDotNet }}"
- resourceGroup = $groups.DotNet
- group = "Echo"
- }
- @{
- key = "WaterfallSkillBotDotNet"
- keyComposer = "waterfallSkillBotDotNet"
- botName = "bffnwaterfallskillbotdotnet"
- appId = "${{ parameters.appIds.WaterfallSkillBotDotNet }}"
- resourceGroup = $groups.DotNet
- group = "Waterfall"
- }
- @{
- key = "EchoSkillBotJS"
- keyComposer = "echoSkillBotJs"
- botName = "bffnechoskillbotjs"
- appId = "${{ parameters.appIds.EchoSkillBotJS }}"
+ key = "EmptyBotJSWebApp"
+ botName = "bfcfnemptybotjswebapp"
resourceGroup = $groups.JS
- group = "Echo"
- }
- @{
- key = "EchoSkillBotJSV3"
- keyComposer = "echoSkillBotJsV3"
- botName = "bffnechoskillbotjsv3"
- appId = "${{ parameters.appIds.EchoSkillBotJSV3 }}"
- resourceGroup = $groups.JS
- group = "Echo"
- }
- @{
- key = "WaterfallSkillBotJS"
- keyComposer = "waterfallSkillBotJS"
- botName = "bffnwaterfallskillbotjs"
- appId = "${{ parameters.appIds.WaterfallSkillBotJS }}"
- resourceGroup = $groups.JS
- group = "Waterfall"
- }
- @{
- key = "EchoSkillBotPython"
- keyComposer = "echoSkillBotPython"
- botName = "bffnechoskillbotpython"
- appId = "${{ parameters.appIds.EchoSkillBotPython }}"
- resourceGroup = $groups.Python
- group = "Echo"
- }
- @{
- key = "WaterfallSkillBotPython"
- keyComposer = "waterfallSkillBotPython"
- botName = "bffnwaterfallskillbotpython"
- appId = "${{ parameters.appIds.WaterfallSkillBotPython }}"
- resourceGroup = $groups.Python
- group = "Waterfall"
+ configType = $types.Appsettings
}
)
# Bots Test Scenarios
$scenarios = @(
@{
- name = "SingleTurn";
+ name = "EmptyBot";
consumers = @(
- "SimpleHostBotComposerDotNet",
- "SimpleHostBotDotNet",
- "SimpleHostBotDotNet21",
- "SimpleHostBotJS",
- "SimpleHostBotPython"
- );
- skills = @(
- "EchoSkillBotComposerDotNet",
- "EchoSkillBotDotNet",
- "EchoSkillBotDotNet21",
- "EchoSkillBotDotNetV3",
- "EchoSkillBotJS",
- "EchoSkillBotJSV3",
- "EchoSkillBotPython"
- );
- }
- @{
- name = "Waterfall";
- consumers = @(
- "WaterfallHostBotDotNet",
- "WaterfallHostBotJS",
- "WaterfallHostBotPython"
- );
- skills = @(
- "WaterfallSkillBotDotNet",
- "WaterfallSkillBotJS",
- "WaterfallSkillBotPython"
+ "EmptyBotDotNetWebApp",
+ "EmptyBotJSWebApp"
);
}
)
@@ -576,43 +423,29 @@ steps:
# Pre-configure and filter bots.
Write-Host $(AddTimeStamp -text "Filtering bots by '$scenario' scenario ...");
$consumersToConfigure = FilterBotsByScenario -bots $consumers -scenarios $scenarios -scenario $scenario;
- $skillsToConfigure = FilterBotsByScenario -bots $skills -scenarios $scenarios -scenario $scenario;
-
- Write-Host $(AddTimeStamp -text "Loading the Skills AppIds from the KeyVault '$keyVault' when no Pipeline Variable is provided.");
- $skillsToConfigure = AddBotsAppIdFromKeyVault -bots $skillsToConfigure -keyVault $keyVault
-
- Write-Host $(AddTimeStamp -text "Filtering bots that have an AppId assigned ...");
- $skillsToConfigure = FilterBotsWithAppId -bots $skillsToConfigure
Write-Host $(AddTimeStamp -text "Adding the suffix '$suffix' to the bot resources ...");
$consumersToConfigure = AddBotsSuffix -bots $consumersToConfigure -suffix $suffix
- $skillsToConfigure = AddBotsSuffix -bots $skillsToConfigure -suffix $suffix
Write-Host $(AddTimeStamp -text "Filtering existing Resource Groups ...");
$resourceGroups = FilterResourceGroupsByExistence -groups $groups
Write-Host $(AddTimeStamp -text "Filtering deployed bots in Azure ...");
$consumersToConfigure = FilterBotsByResourceExistence -groups $resourceGroups -bots $consumersToConfigure
- $skillsToConfigure = FilterBotsByResourceExistence -groups $resourceGroups -bots $skillsToConfigure
Write-Host $(AddTimeStamp -text "Adding Azure AppSettings to Consumers' configuration.");
- $consumersToConfigure = AddAzureAppSettings -consumers $consumersToConfigure -skills $skillsToConfigure
+ $consumersToConfigure = AddAzureAppSettings -consumers $consumersToConfigure
if (-not $consumersToConfigure) {
Write-Error $(AddTimeStamp -text "No Consumers were found to configure. Cancelling the configuration ...");
return;
}
- if (-not $skillsToConfigure) {
- Write-Error $(AddTimeStamp -text "No Skills were found to configure each Consumer. Cancelling the configuration ...");
- return;
- }
-
# Configure steps.
Write-Host $(AddTimeStamp -text "Configuring the Test Project.");
- ConfigureTestProjectAppSettings -bots $consumersToConfigure -appSettingsPath "tests/SkillFunctionalTests/appsettings.json";
+ ConfigureTestProjectAppSettings -bots $consumersToConfigure -appSettingsPath "tests/functional/Tests/ComponentsFunctionalTests/appsettings.json";
Write-Host $(AddTimeStamp -text "Configuring the Consumer bots App Settings in Azure.");
- ConfigureConsumers -consumers $consumersToConfigure -skills $skillsToConfigure
+ ConfigureConsumers -consumers $consumersToConfigure
Write-Host $(AddTimeStamp -text "Process Finished!");
diff --git a/tests/functional/build/yaml/testScenarios/runScenario.yml b/tests/functional/build/yaml/testScenarios/runScenario.yml
index bfa72bd232..6d230a4dfc 100644
--- a/tests/functional/build/yaml/testScenarios/runScenario.yml
+++ b/tests/functional/build/yaml/testScenarios/runScenario.yml
@@ -71,13 +71,13 @@ stages:
inputs:
command: build
publishWebProjects: false
- projects: "Tests/SkillFunctionalTests/SkillFunctionalTests.csproj"
+ projects: "tests/functional/Tests/ComponentsFunctionalTests/ComponentsFunctionalTests.csproj"
arguments: "-v n --configuration ${{ parameters.buildConfiguration }}"
- task: DotNetCoreCLI@2
displayName: "DotNet Test"
inputs:
command: test
- testRunTitle: "SkillFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER)"
- projects: "Tests/SkillFunctionalTests/SkillFunctionalTests.csproj"
- arguments: "-v n --configuration ${{ parameters.buildConfiguration }} --no-build --no-restore --logger trx;LogFileName=SkillFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER).trx --filter TestCategory!=IgnoreInAutomatedBuild&TestCategory=${{ join('|TestCategory=', scenario.testCategories) }}"
+ testRunTitle: "ComponentsFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER)"
+ projects: "tests/functional/Tests/ComponentsFunctionalTests/ComponentsFunctionalTests.csproj"
+ arguments: "-v n --configuration ${{ parameters.buildConfiguration }} --no-build --no-restore --logger trx;LogFileName=ComponentsFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER).trx --filter TestCategory!=IgnoreInAutomatedBuild&TestCategory=${{ join('|TestCategory=', scenario.testCategories) }}"
diff --git a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml
index 6fac3d47ca..9f947008bd 100644
--- a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml
+++ b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml
@@ -16,20 +16,13 @@ variables:
# ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions.
## Bots Configuration (Define these variables in Azure)
- # BfcfnEchoSkillBotComposerDotNetAppId: (optional) App Id for BfcfnEchoSkillBotComposerDotNet bot.
- # BfcfnEchoSkillBotDotNet21AppId: (optional) App Id for BfcfnEchoSkillBotDotNet21 bot.
- # BfcfnEchoSkillBotDotNetAppId: (optional) App Id for BfcfnEchoSkillBotDotNet bot.
- # BfcfnEchoSkillBotDotNetV3AppId: (optional) App Id for BfcfnEchoSkillBotDotNetV3 bot.
- # BfcfnEchoSkillBotJSAppId: (optional) App Id for BfcfnEchoSkillBotJS bot.
- # BfcfnEchoSkillBotJSV3AppId: (optional) App Id for BfcfnEchoSkillBotJSV3 bot.
- # BfcfnEchoSkillBotPythonAppId: (optional) App Id for BfcfnEchoSkillBotPython bot.
- # BfcfnWaterfallSkillBotDotNetAppId: (optional) App Id for BfcfnWaterfallSkillBotDotNet bot.
- # BfcfnWaterfallSkillBotJSAppId: (optional) App Id for BfcfnWaterfallSkillBotJS bot.
- # BfcfnWaterfallSkillBotPythonAppId: (optional) App Id for BfcfnWaterfallSkillBotPython bot.
+ # BfcfnEmptyBotDotNetWebAppId: (optional) App Id for BfcfnEmptyBotDotNetWebApp bot.
+ # BfcfnEmptyBotJSWebAppAppId: (optional) App Id for BfcfnEmptyBotJSWebApp bot.
+
# DeployBotResourcesGuid: (optional) Deploy Bot Resources pipeline GUID.
## Internal variables
- InternalKeyVaultName: "bfcfnbotkeyvault$(INTERNALRESOURCESUFFIX)"
+ InternalKeyVaultName: "ComponentsBotsKeyVault$(INTERNALRESOURCESUFFIX)"
InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bfcfnbots')]
InternalResourceSuffix: $[coalesce(variables['RESOURCESUFFIX'], '')]
@@ -70,16 +63,8 @@ stages:
- template: runScenario.yml
parameters:
appIds:
- EchoSkillBotComposerDotNet: "$(BFFNECHOSKILLBOTCOMPOSERDOTNETAPPID)"
- EchoSkillBotDotNet: "$(BFFNECHOSKILLBOTDOTNETAPPID)"
- EchoSkillBotDotNet21: "$(BFFNECHOSKILLBOTDOTNET21APPID)"
- EchoSkillBotDotNetV3: "$(BFFNECHOSKILLBOTDOTNETV3APPID)"
- EchoSkillBotJS: "$(BFFNECHOSKILLBOTJSAPPID)"
- EchoSkillBotJSV3: "$(BFFNECHOSKILLBOTJSV3APPID)"
- EchoSkillBotPython: "$(BFFNECHOSKILLBOTPYTHONAPPID)"
- WaterfallSkillBotDotNet: "$(BFFNWATERFALLSKILLBOTDOTNETAPPID)"
- WaterfallSkillBotJS: "$(BFFNWATERFALLSKILLBOTJSAPPID)"
- WaterfallSkillBotPython: "$(BFFNWATERFALLSKILLBOTPYTHONAPPID)"
+ EmptyBotDotNetWebApp: "$(BFCFNEMPTYBOTDOTNETWEBAPPID)"
+ EmptyBotJSWebApp: "$(BFCFNEMPTYBOTJSWEBAPPID)"
azureSubscription: "$(AZURESUBSCRIPTION)"
buildConfiguration: "$(BUILDCONFIGURATION)"
buildIdSuffix: $[stageDependencies.Download_Variables.Download_Variables.outputs['Set_Variables.DeploymentBuildSuffix']]
@@ -87,16 +72,7 @@ stages:
resourceGroup: "$(INTERNALRESOURCEGROUPNAME)"
resourceSuffix: "$(INTERNALRESOURCESUFFIX)"
scenarios:
- - name: Waterfall
- dependsOn: [Download_Variables]
- testCategories:
- - Attachments
- - CardActions
- - ProactiveMessages
- - FileUpload
- - SignIn
-
- - name: SingleTurn
+ - name: EmptyBot
dependsOn: [Download_Variables]
testCategories:
- - SingleTurn
+ - EmptyBot