diff --git a/.azuredatastudio/settings.json b/.azuredatastudio/settings.json new file mode 100644 index 00000000..a7458417 --- /dev/null +++ b/.azuredatastudio/settings.json @@ -0,0 +1,8 @@ +{ + "workbench.colorCustomizations": { + "activityBar.background": "#05351D", + "titleBar.activeBackground": "#074A29", + "titleBar.activeForeground": "#EFFEF6" + }, + "python.linting.pylintEnabled": true +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7a73a41b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/00-Pre-Requisites.md b/ModernizeYourDatabases2019/ModernizeSQL2019/00-Pre-Requisites.md index 803cd395..77ad1ce5 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/00-Pre-Requisites.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/00-Pre-Requisites.md @@ -1,42 +1,42 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize Your Database with SQL Server 2019 - -#### A Microsoft Course from the SQL Server team - -

- -

00 Pre-Requisites

- -Pre-Requisites for the "Modernize Your Database with SQL Server 2019" workshop are found in each module. At a later date all pre-requisites will be listed in this module. - -*Note that all following activities must be completed prior to class - there will not be time to perform these operations during the workshop.* - -

Activity 1: TBD

- -

Option 1 - TBD

- -

Activity 2: TBD

-
- -

Activity 2: TODO: Step within Activity.

-
- -

TODO: Sub-step

- -First, ensure all of your updates are current. You can use the following commands to do that in an Administrator-level PowerShell session: - -

-
-TODO: Enter any code typing here
-
-
- -

For Further Study

- - -

Next Steps

- -Next, Continue to Why SQL Server 2019. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize Your Database with SQL Server 2019 + +#### A Microsoft Course from the SQL Server team + +

+ +

00 Pre-Requisites

+ +Pre-Requisites for the "Modernize Your Database with SQL Server 2019" workshop are found in each module. At a later date all pre-requisites will be listed in this module. + +*Note that all following activities must be completed prior to class - there will not be time to perform these operations during the workshop.* + +

Activity 1: TBD

+ +

Option 1 - TBD

+ +

Activity 2: TBD

+
+ +

Activity 2: TODO: Step within Activity.

+
+ +

TODO: Sub-step

+ +First, ensure all of your updates are current. You can use the following commands to do that in an Administrator-level PowerShell session: + +

+
+TODO: Enter any code typing here
+
+
+ +

For Further Study

+ + +

Next Steps

+ +Next, Continue to Why SQL Server 2019. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/01-WhySQL2019.md b/ModernizeYourDatabases2019/ModernizeSQL2019/01-WhySQL2019.md index dff9edde..04d498d6 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/01-WhySQL2019.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/01-WhySQL2019.md @@ -1,16 +1,16 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize Your Database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

Why SQL Server 2019?

- -This module will be completed at a later date. - -

Next Steps

- -Next, Continue to A Microsoft workshop from the SQL Server team + +

+ +

Why SQL Server 2019?

+ +This module will be completed at a later date. + +

Next Steps

+ +Next, Continue to
Intelligent Performance. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/02-IntelligentPerformance.md b/ModernizeYourDatabases2019/ModernizeSQL2019/02-IntelligentPerformance.md index f970e0e1..2e02a00f 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/02-IntelligentPerformance.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/02-IntelligentPerformance.md @@ -1,60 +1,60 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

Intelligent Performance

- -You'll cover the following topics in this Module: - -
- -
2.0 Automatic Tuning
-
2.1 Intelligent Query Processing
-
2.2 Lightweight Query Processing
- -
- -

- -

2.0 Automatic Tuning

- -

- -

Activity: Automatic Tuning

- -Follow the instructions for [Automatic Tuning Exercise](Module%202%20Activity%20-%20Intelligent%20Performance/autotune) - -

- -

2.1 Intelligent Query Processing

- -

- -

Activity: Intelligent Query Processing

- -Follow the instructions for [Intelligent Query Processing Exercise](Module%202%20Activity%20-%20Intelligent%20Performance/iqp) - -

- - -

2.2 Lightweight Query Profiling

- -

- -

Activity: Lightweight Query Profiling

- -Follow the instructions for [Lightweight Query Profiling Exercise](Module%202%20Activity%20-%20Intelligent%20Performance/lwp) - -

- -

For Further Study

- -

- -

Next Steps

- -Next, Continue to New Security Capabilities. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

Intelligent Performance

+ +You'll cover the following topics in this Module: + +
+ +
2.0 Automatic Tuning
+
2.1 Intelligent Query Processing
+
2.2 Lightweight Query Processing
+ +
+ +

+ +

2.0 Automatic Tuning

+ +

+ +

Activity: Automatic Tuning

+ +Follow the instructions for [Automatic Tuning Exercise](Module%202%20Activity%20-%20Intelligent%20Performance/autotune) + +

+ +

2.1 Intelligent Query Processing

+ +

+ +

Activity: Intelligent Query Processing

+ +Follow the instructions for [Intelligent Query Processing Exercise](Module%202%20Activity%20-%20Intelligent%20Performance/iqp) + +

+ + +

2.2 Lightweight Query Profiling

+ +

+ +

Activity: Lightweight Query Profiling

+ +Follow the instructions for [Lightweight Query Profiling Exercise](Module%202%20Activity%20-%20Intelligent%20Performance/lwp) + +

+ +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to New Security Capabilities. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/03-Security.md b/ModernizeYourDatabases2019/ModernizeSQL2019/03-Security.md index eb5acebf..e9de4dfa 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/03-Security.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/03-Security.md @@ -1,39 +1,39 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

New Security Capabilities

- -You'll cover the following topics in this Module: - -
- -
3.0 Static Data Masking
- -
- -

- -

3.0 Static Data Masking

- -

- -

Activity: Static Data Masking

- -Follow the instructions for [Static Data Masking Exercise](Module%203%20Activity%20-%20Security/staticmask) - -

- - - -

For Further Study

- -

- -

Next Steps

- -Next, Continue to Mission Critical Availability. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

New Security Capabilities

+ +You'll cover the following topics in this Module: + +
+ +
3.0 Static Data Masking
+ +
+ +

+ +

3.0 Static Data Masking

+ +

+ +

Activity: Static Data Masking

+ +Follow the instructions for [Static Data Masking Exercise](Module%203%20Activity%20-%20Security/staticmask) + +

+ + + +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to Mission Critical Availability. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/04-MissionCriticalAvailability.md b/ModernizeYourDatabases2019/ModernizeSQL2019/04-MissionCriticalAvailability.md index ae74daf6..67ab73e4 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/04-MissionCriticalAvailability.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/04-MissionCriticalAvailability.md @@ -1,38 +1,38 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

Mission Critical Availability

- -You'll cover the following topics in this Module: - -
- -
4.0 Accelerated Database Recovery
- -
- -

- -

4.0 Accelerated Database Recovery

- -

- -

Activity: Accelerated Database Recovery

- -Follow the instructions for [Accelerated Database Recovery Exercise](Module%204%20Activity%20-%20MIssion%20Critical%20Availability/adr) - -

- - -

For Further Study

- -

- -

Next Steps

- -Next, Continue to Modern Development Platform. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

Mission Critical Availability

+ +You'll cover the following topics in this Module: + +
+ +
4.0 Accelerated Database Recovery
+ +
+ +

+ +

4.0 Accelerated Database Recovery

+ +

+ +

Activity: Accelerated Database Recovery

+ +Follow the instructions for [Accelerated Database Recovery Exercise](Module%204%20Activity%20-%20MIssion%20Critical%20Availability/adr) + +

+ + +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to Modern Development Platform. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/05-ModernDevelopmentPlatform.md b/ModernizeYourDatabases2019/ModernizeSQL2019/05-ModernDevelopmentPlatform.md index d080d15d..9cfdb68b 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/05-ModernDevelopmentPlatform.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/05-ModernDevelopmentPlatform.md @@ -1,49 +1,49 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

Modern Development Platform

- -You'll cover the following topics in this Module: - -
- -
5.0 Python
-
5.1 Java
- -
- -

- -

5.0 Python

- -

- -

Activity: Python

- -Follow the instructions for [Python Exercise](Module%205%20Activity%20-%20Modern%20Development%20Platform/python) - -

- -

5.1 Java

- -

- -

Activity: Java

- -Follow the instructions for [Java Exercise](Module%205%20Activity%20-%20Modern%20Development%20Platform/java) - -

- - -

For Further Study

- -

- -

Next Steps

- -Next, Continue to SQL Server on Linux. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

Modern Development Platform

+ +You'll cover the following topics in this Module: + +
+ +
5.0 Python
+
5.1 Java
+ +
+ +

+ +

5.0 Python

+ +

+ +

Activity: Python

+ +Follow the instructions for [Python Exercise](Module%205%20Activity%20-%20Modern%20Development%20Platform/python) + +

+ +

5.1 Java

+ +

+ +

Activity: Java

+ +Follow the instructions for [Java Exercise](Module%205%20Activity%20-%20Modern%20Development%20Platform/java) + +

+ + +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to SQL Server on Linux. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/06-SQLLinux.md b/ModernizeYourDatabases2019/ModernizeSQL2019/06-SQLLinux.md index 3572a226..ed8ec075 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/06-SQLLinux.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/06-SQLLinux.md @@ -1,49 +1,49 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

SQL Server on Linux

- -You'll cover the following topics in this Module: - -
- -
6.0 Deploy SQL Server on Linux
-
6.1 Explore SQL Server on Linux
- -
- -

- -

6.0 Deploy SQL Server on Linux

- -

- -

Activity: Deploy SQL Server on Linux

- -Follow the instructions for [Deploy SQL Server on Linux Exercise](Module%206%20Activity%20-%20SQL%20Server%20on%20Linux/deploy) - -

- -

6.1 Explore SQL Server on Linux

- -

- -

Activity: Explore SQL Server on Linux

- -Follow the instructions for [Explore SQL Server on Linux Exercise](Module%206%20Activity%20-%20SQL%20Server%20on%20Linux/explore) - -

- - -

For Further Study

- -

- -

Next Steps

- -Next, Continue to SQL Server Containers and Kubernetes. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

SQL Server on Linux

+ +You'll cover the following topics in this Module: + +
+ +
6.0 Deploy SQL Server on Linux
+
6.1 Explore SQL Server on Linux
+ +
+ +

+ +

6.0 Deploy SQL Server on Linux

+ +

+ +

Activity: Deploy SQL Server on Linux

+ +Follow the instructions for [Deploy SQL Server on Linux Exercise](Module%206%20Activity%20-%20SQL%20Server%20on%20Linux/deploy) + +

+ +

6.1 Explore SQL Server on Linux

+ +

+ +

Activity: Explore SQL Server on Linux

+ +Follow the instructions for [Explore SQL Server on Linux Exercise](Module%206%20Activity%20-%20SQL%20Server%20on%20Linux/explore) + +

+ + +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to SQL Server Containers and Kubernetes. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/07-SQLContainers.md b/ModernizeYourDatabases2019/ModernizeSQL2019/07-SQLContainers.md index 7774d4ff..fd3a8120 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/07-SQLContainers.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/07-SQLContainers.md @@ -1,49 +1,49 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

SQL Server Containers and Kubernetes

- -You'll cover the following topics in this Module: - -
- -
7.0 SQL Server Containers Fundamentals
-
7.1 Updating and Upgrading with SQL Containers
- -
- -

- -

7.0 SQL Server Containers Fundamentals

- -

- -

Activity: SQL Server Containers Fundamentals

- -Follow the instructions for [SQL Server Containers Fundamentals Exercise](Module%207%20Activity%20-%20SQL%20Server%20Containers/sqlcontainers) - -

- -

7.1 Updating and Upgrading with SQL Containers

- -

- -

Activity: Updating and Upgrading with SQL Containers

- -Follow the instructions for [Updating and Upgrading with SQL Containers Exercise](Module%207%20Activity%20-%20SQL%20Server%20Containers/sqlcontainerupdate) - -

- - -

For Further Study

- -

- -

Next Steps

- -Next, Continue to Data Virtualization. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

SQL Server Containers and Kubernetes

+ +You'll cover the following topics in this Module: + +
+ +
7.0 SQL Server Containers Fundamentals
+
7.1 Updating and Upgrading with SQL Containers
+ +
+ +

+ +

7.0 SQL Server Containers Fundamentals

+ +

+ +

Activity: SQL Server Containers Fundamentals

+ +Follow the instructions for [SQL Server Containers Fundamentals Exercise](Module%207%20Activity%20-%20SQL%20Server%20Containers/sqlcontainers) + +

+ +

7.1 Updating and Upgrading with SQL Containers

+ +

+ +

Activity: Updating and Upgrading with SQL Containers

+ +Follow the instructions for [Updating and Upgrading with SQL Containers Exercise](Module%207%20Activity%20-%20SQL%20Server%20Containers/sqlcontainerupdate) + +

+ + +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to Data Virtualization. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/08-DataVirtualization.md b/ModernizeYourDatabases2019/ModernizeSQL2019/08-DataVirtualization.md index 5ad67255..806f5942 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/08-DataVirtualization.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/08-DataVirtualization.md @@ -1,49 +1,49 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

SQL Server Data Virtualization

- -You'll cover the following topics in this Module: - -
- -
8.0 SQL Server Polybase
-
8.1 A SQL Server Data Hub
- -
- -

- -

8.0 SQL Server Polybase

- -

- -

Activity: SQL Server Polybase

- -Follow the instructions for [SQL Server Polybase Exercise](Module%208%20Activity%20-%20Data%20Virtualization/polybase) - -

- -

8.1 A SQL Server Data Hub

- -

- -

Activity: 8.1 A SQL Server Data Hub

- -Follow the instructions for [SQL Server Data Hub Exercise](Module%208%20Activity%20-%20Data%20Virtualization/sqldatahub) - -

- - -

For Further Study

- -

- -

Next Steps

- -Next, Continue to What Else is New in SQL Server 2019. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

SQL Server Data Virtualization

+ +You'll cover the following topics in this Module: + +
+ +
8.0 SQL Server Polybase
+
8.1 A SQL Server Data Hub
+ +
+ +

+ +

8.0 SQL Server Polybase

+ +

+ +

Activity: SQL Server Polybase

+ +Follow the instructions for [SQL Server Polybase Exercise](Module%208%20Activity%20-%20Data%20Virtualization/polybase) + +

+ +

8.1 A SQL Server Data Hub

+ +

+ +

Activity: 8.1 A SQL Server Data Hub

+ +Follow the instructions for [SQL Server Data Hub Exercise](Module%208%20Activity%20-%20Data%20Virtualization/sqldatahub) + +

+ + +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to What Else is New in SQL Server 2019. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/09-WhatElseIsNew.md b/ModernizeYourDatabases2019/ModernizeSQL2019/09-WhatElseIsNew.md index 26b6107d..3533305a 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/09-WhatElseIsNew.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/09-WhatElseIsNew.md @@ -1,37 +1,37 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

What else is new in SQL Server 2019

- -You'll cover the following topics in this Module: - -
- -
9.0 TBD
- -
- -

- -

9.0 TBD

- -

- -

Activity: TBD

- - -

- - -

For Further Study

- -

- -

Next Steps

- -Next, Continue to Migrating to SQL Server 2019 and Next Steps. +![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

What else is new in SQL Server 2019

+ +You'll cover the following topics in this Module: + +
+ +
9.0 TBD
+ +
+ +

+ +

9.0 TBD

+ +

+ +

Activity: TBD

+ + +

+ + +

For Further Study

+ +

+ +

Next Steps

+ +Next, Continue to Migrating to SQL Server 2019 and Next Steps. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/10-MigratingAndNextSteps.md b/ModernizeYourDatabases2019/ModernizeSQL2019/10-MigratingAndNextSteps.md index da753b20..34040a06 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/10-MigratingAndNextSteps.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/10-MigratingAndNextSteps.md @@ -1,31 +1,31 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Modernize your database with SQL Server 2019 - -#### A Microsoft workshop from the SQL Server team - -

- -

Migrating to SQL Server 2019 and Next Steps

- -You'll cover the following topics in this Module: - -
- -
10.0 Query Tuning Assistant
- -
- -

- -

10.0 Query Tuning Assistant

- -

- -

Activity: Query Tuning Assistant

- -Follow the instructions for [Query Tuning Assistant Exercise](Module%2010%20Activity%20-%20Migrating%20to%20SQL%20Server%202019/qta) - -

- -

For Further Study

+![](../graphics/microsoftlogo.png) + +# Workshop: Modernize your database with SQL Server 2019 + +#### A Microsoft workshop from the SQL Server team + +

+ +

Migrating to SQL Server 2019 and Next Steps

+ +You'll cover the following topics in this Module: + +
+ +
10.0 Query Tuning Assistant
+ +
+ +

+ +

10.0 Query Tuning Assistant

+ +

+ +

Activity: Query Tuning Assistant

+ +Follow the instructions for [Query Tuning Assistant Exercise](Module%2010%20Activity%20-%20Migrating%20to%20SQL%20Server%202019/qta) + +

+ +

For Further Study

diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/qta/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/qta/readme.md index b6fd30ef..9c542ad3 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/qta/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/qta/readme.md @@ -1,9 +1,9 @@ -# Using Query Tuning Assistant for Post Migration Optimization - -This exercise will show you how to use the new Query Tuning Assistant(QTA) to optimize performance after migrating to SQL Server 2019 - -To performance this exercise: - -1. Download the following zip file to your computer with SQL Server or client computer that can connect to SQL Server at https://github.com/Microsoft/tigertoolbox/blob/master/Sessions/Winter-Ready-2019/Labs/Lab-QTA.zip. - -2. Read through the instructions at https://github.com/Microsoft/tigertoolbox/blob/master/Sessions/Winter-Ready-2019/Lab-QTA.md to perform the lab. +# Using Query Tuning Assistant for Post Migration Optimization + +This exercise will show you how to use the new Query Tuning Assistant(QTA) to optimize performance after migrating to SQL Server 2019 + +To performance this exercise: + +1. Download the following zip file to your computer with SQL Server or client computer that can connect to SQL Server at https://github.com/Microsoft/tigertoolbox/blob/master/Sessions/Winter-Ready-2019/Labs/Lab-QTA.zip. + +2. Read through the instructions at https://github.com/Microsoft/tigertoolbox/blob/master/Sessions/Winter-Ready-2019/Lab-QTA.md to perform the lab. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/readme.md index f7c02ad8..e6d14a57 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 10 Activity - Migrating to SQL Server 2019/readme.md @@ -1,7 +1,7 @@ -# Module 10 Activities - Migrating to SQL Server 2019 - -These represent demos and examples to show you migration techniques for SQL Server. Right now this Module only includes exercises for post migration optmization using Query Tuning Assistant (QTA) - -## qta - +# Module 10 Activities - Migrating to SQL Server 2019 + +These represent demos and examples to show you migration techniques for SQL Server. Right now this Module only includes exercises for post migration optmization using Query Tuning Assistant (QTA) + +## qta + Learn how to use Query Tuning Assistant (QTA) to assist with post migration optimizations. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/auto_tune.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/auto_tune.sql index e2e8d19d..c543938a 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/auto_tune.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/auto_tune.sql @@ -1,4 +1,4 @@ -use WideWorldImporters -go -exec auto_tune +use WideWorldImporters +go +exec auto_tune go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/initialize.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/initialize.sql index 07b8a519..ccfa8ffa 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/initialize.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/initialize.sql @@ -1,4 +1,4 @@ -use WideWorldImporters -go -exec initialize +use WideWorldImporters +go +exec initialize go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/readme.md index 54ac2b17..a57d6150 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/readme.md @@ -1,36 +1,36 @@ -# Automatic Tuning with SQL Server - -This is a repro package to demonstrate the Automatic Tuning (Auto Plan Correction) in SQL Server 2017. This feature is using telemtry from the Query Store feature we launched with Azure SQL Database and SQL Server 2016 to provide built-in intelligence. - -## Requirements - -This repro assumes the following: - -- SQL Server 2017 installed (pick at minimum Database Engine) on Windows. This feature requires Developer or Enterprise Edition. -- You have installed SQL Server Management Studio or SQL Operations Studio (https://docs.microsoft.com/en-us/sql/sql-operations-studio/download) -- You have downloaded the RML Utilities from https://www.microsoft.com/en-us/download/details.aspx?id=4511. -- These demos use a named instance called SQL2017. You will need to edit the .cmd scripts which connect to SQL Server to change to a default instance or whatever named instance you have installed. - -- Install ostress from the package RML_Setup_AMD64.msi. Add C:\Program Files\Microsoft Corporation\RMLUtils to your path. - -- Restore the WideWorldImporters database backup to your SQL Server 2017 instance. The WideWorldImporters-Full.bak is provided along with a **restorewwi.sql** script to restore the database. This script assumes the backup is in the C:\sql_sample_databases directory and that all database files will be placed in c:\temp. Change the location for the backup and your files as needed. - -## Demo Steps - -1. Run **repro_setup.cmd** to customize the WideWorldImporters database for the demo. You will only need to run this one time after restoring the backup. - -2. Setup Performance Monitor on Windows to track SQL Statistics/Batch Requests/sec - -3. Run **initalize.cmd**to setup the repro for default of recommendations. If you restart the demo from the beginning, you can run this again to "reset" the demo. - -4. Run **report.cmd** to start the workload. This will pop-up a command window running the workload. Note the chart showing Batch Requests/Sec as your workload throughput - -5. Run **regression.cmd** (you may need to run this a few times for timing reasons). Notice the drop in batch requests/sec which shows a performance regression in your workload. - -6. Load **recommendations.sql** into SQL Server Management Studio or SQL Operations Studio and review the results. Notice the time difference under the reason column and value of state_transition_reason which should be AutomaticTuningOptionNotEnabled. This means we found a regression but are recommending it only, not automatically fixing it. The script column shows a query that could be used to fix the problem. - -7. Stop the **report.cmd** workload by pressing + in the command window and pressing 'y' to stop. This should close that command window. - -8. Now let's see what happens with automatic plan correction. Run **auto_tune.cmd**which sets automatic plan correct ON for WideWorldImporters - +# Automatic Tuning with SQL Server + +This is a repro package to demonstrate the Automatic Tuning (Auto Plan Correction) in SQL Server 2017. This feature is using telemtry from the Query Store feature we launched with Azure SQL Database and SQL Server 2016 to provide built-in intelligence. + +## Requirements + +This repro assumes the following: + +- SQL Server 2017 installed (pick at minimum Database Engine) on Windows. This feature requires Developer or Enterprise Edition. +- You have installed SQL Server Management Studio or SQL Operations Studio (https://docs.microsoft.com/en-us/sql/sql-operations-studio/download) +- You have downloaded the RML Utilities from https://www.microsoft.com/en-us/download/details.aspx?id=4511. +- These demos use a named instance called SQL2017. You will need to edit the .cmd scripts which connect to SQL Server to change to a default instance or whatever named instance you have installed. + +- Install ostress from the package RML_Setup_AMD64.msi. Add C:\Program Files\Microsoft Corporation\RMLUtils to your path. + +- Restore the WideWorldImporters database backup to your SQL Server 2017 instance. The WideWorldImporters-Full.bak is provided along with a **restorewwi.sql** script to restore the database. This script assumes the backup is in the C:\sql_sample_databases directory and that all database files will be placed in c:\temp. Change the location for the backup and your files as needed. + +## Demo Steps + +1. Run **repro_setup.cmd** to customize the WideWorldImporters database for the demo. You will only need to run this one time after restoring the backup. + +2. Setup Performance Monitor on Windows to track SQL Statistics/Batch Requests/sec + +3. Run **initalize.cmd**to setup the repro for default of recommendations. If you restart the demo from the beginning, you can run this again to "reset" the demo. + +4. Run **report.cmd** to start the workload. This will pop-up a command window running the workload. Note the chart showing Batch Requests/Sec as your workload throughput + +5. Run **regression.cmd** (you may need to run this a few times for timing reasons). Notice the drop in batch requests/sec which shows a performance regression in your workload. + +6. Load **recommendations.sql** into SQL Server Management Studio or SQL Operations Studio and review the results. Notice the time difference under the reason column and value of state_transition_reason which should be AutomaticTuningOptionNotEnabled. This means we found a regression but are recommending it only, not automatically fixing it. The script column shows a query that could be used to fix the problem. + +7. Stop the **report.cmd** workload by pressing + in the command window and pressing 'y' to stop. This should close that command window. + +8. Now let's see what happens with automatic plan correction. Run **auto_tune.cmd**which sets automatic plan correct ON for WideWorldImporters + 9. Repeat steps 4-7 as above. In Performance Monitor you will see the batch requests/sec dip but within a second go right back up. This is because SQL Server detected the regression and automatically reverted to "last known good" or the last known good query plan as found in the Query Store. Note in the output of recommendations.sql the state_transition_reason now says LastGoodPlanForced. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/recommendations.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/recommendations.sql index 75b962e5..a570c530 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/recommendations.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/recommendations.sql @@ -1,14 +1,14 @@ -use WideWorldImporters -go -SELECT reason, score, - JSON_VALUE(state, '$.currentValue') state, - JSON_VALUE(state, '$.reason') state_transition_reason, - JSON_VALUE(details, '$.implementationDetails.script') script, - planForceDetails.* -FROM sys.dm_db_tuning_recommendations - CROSS APPLY OPENJSON (Details, '$.planForceDetails') - WITH ( [query_id] int '$.queryId', - [new plan_id] int '$.regressedPlanId', - [forcedPlanId] int '$.forcedPlanId' - ) as planForceDetails; +use WideWorldImporters +go +SELECT reason, score, + JSON_VALUE(state, '$.currentValue') state, + JSON_VALUE(state, '$.reason') state_transition_reason, + JSON_VALUE(details, '$.implementationDetails.script') script, + planForceDetails.* +FROM sys.dm_db_tuning_recommendations + CROSS APPLY OPENJSON (Details, '$.planForceDetails') + WITH ( [query_id] int '$.queryId', + [new plan_id] int '$.regressedPlanId', + [forcedPlanId] int '$.forcedPlanId' + ) as planForceDetails; go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/regression.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/regression.sql index d5e323de..81b6edb7 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/regression.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/regression.sql @@ -1,4 +1,4 @@ -use WideWorldImporters -go -exec regression +use WideWorldImporters +go +exec regression go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/report.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/report.sql index 5b5b245c..5c150d3b 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/report.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/report.sql @@ -1,5 +1,5 @@ -use WideWorldImporters -go -declare @packagetypeid int = 7; -exec dbo.report @packagetypeid +use WideWorldImporters +go +declare @packagetypeid int = 7; +exec dbo.report @packagetypeid go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/restorewwi.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/restorewwi.sql index 9076a487..5c505aa6 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/restorewwi.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/restorewwi.sql @@ -1,7 +1,7 @@ -restore database WideWorldImporters from disk = 'C:\sql_sample_databases\WideWorldImporters-Full.bak' with -move 'WWI_Primary' to 'c:\temp\WideWorldImporters.mdf', -move 'WWI_UserData' to 'c:\temp\WideWorldImporters_UserData.ndf', -move 'WWI_Log' to 'c:\temp\WideWorldImporters.ldf', -move 'WWI_InMemory_Data_1' to 'c:\temp\WideWorldImporters_InMemory_Data_1', -stats=5 +restore database WideWorldImporters from disk = 'C:\sql_sample_databases\WideWorldImporters-Full.bak' with +move 'WWI_Primary' to 'c:\temp\WideWorldImporters.mdf', +move 'WWI_UserData' to 'c:\temp\WideWorldImporters_UserData.ndf', +move 'WWI_Log' to 'c:\temp\WideWorldImporters.ldf', +move 'WWI_InMemory_Data_1' to 'c:\temp\WideWorldImporters_InMemory_Data_1', +stats=5 go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/setup.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/setup.sql index b0f65b48..d5579576 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/setup.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/autotune/setup.sql @@ -1,47 +1,47 @@ -use wideworldimporters -go -DROP procedure IF EXISTS [dbo].[initialize] -go -CREATE procedure [dbo].[initialize] -as begin -DBCC FREEPROCCACHE; -ALTER DATABASE current SET QUERY_STORE CLEAR ALL; -ALTER DATABASE current SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = OFF); -end -GO - -DROP procedure IF EXISTS [dbo].[auto_tune] -go -CREATE procedure [dbo].[auto_tune] -as begin -ALTER DATABASE current SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON); -DBCC FREEPROCCACHE; -ALTER DATABASE current SET QUERY_STORE CLEAR ALL; -end -GO - -DROP PROCEDURE IF EXISTS [dbo].[report] -go -CREATE PROCEDURE [dbo].[report] ( @packagetypeid INT ) -AS - BEGIN - - SELECT AVG([UnitPrice] * [Quantity] - [TaxRate]) - FROM [Sales].[OrderLines] - WHERE [PackageTypeID] = @packagetypeid; - - END; -GO - -DROP PROCEDURE IF EXISTS [dbo].[regression] -go -CREATE PROCEDURE [dbo].[regression] -AS - BEGIN - DBCC FREEPROCCACHE; - BEGIN - DECLARE @packagetypeid INT = 1; - EXEC [report] @packagetypeid; - END; - END; +use wideworldimporters +go +DROP procedure IF EXISTS [dbo].[initialize] +go +CREATE procedure [dbo].[initialize] +as begin +DBCC FREEPROCCACHE; +ALTER DATABASE current SET QUERY_STORE CLEAR ALL; +ALTER DATABASE current SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = OFF); +end +GO + +DROP procedure IF EXISTS [dbo].[auto_tune] +go +CREATE procedure [dbo].[auto_tune] +as begin +ALTER DATABASE current SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON); +DBCC FREEPROCCACHE; +ALTER DATABASE current SET QUERY_STORE CLEAR ALL; +end +GO + +DROP PROCEDURE IF EXISTS [dbo].[report] +go +CREATE PROCEDURE [dbo].[report] ( @packagetypeid INT ) +AS + BEGIN + + SELECT AVG([UnitPrice] * [Quantity] - [TaxRate]) + FROM [Sales].[OrderLines] + WHERE [PackageTypeID] = @packagetypeid; + + END; +GO + +DROP PROCEDURE IF EXISTS [dbo].[regression] +go +CREATE PROCEDURE [dbo].[regression] +AS + BEGIN + DBCC FREEPROCCACHE; + BEGIN + DECLARE @packagetypeid INT = 1; + EXEC [report] @packagetypeid; + END; + END; GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/ddl.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/ddl.sql index 4501e5a6..5ce47c32 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/ddl.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/ddl.sql @@ -1,40 +1,40 @@ -use WideWorldImporters -go -select * from Sales.InvoiceLines -go - -alter database wideworldimporters set compatibility_level = 150 - -alter database wideworldimporters set compatibility_level = 130 - -create or alter proc defercompile -as -begin -declare @ilines table -( [InvoiceLineID] [int] NOT NULL primary key, - [InvoiceID] [int] NOT NULL, - [StockItemID] [int] NOT NULL, - [Description] [nvarchar](100) NOT NULL, - [PackageTypeID] [int] NOT NULL, - [Quantity] [int] NOT NULL, - [UnitPrice] [decimal](18, 2) NULL, - [TaxRate] [decimal](18, 3) NOT NULL, - [TaxAmount] [decimal](18, 2) NOT NULL, - [LineProfit] [decimal](18, 2) NOT NULL, - [ExtendedPrice] [decimal](18, 2) NOT NULL, - [LastEditedBy] [int] NOT NULL, - [LastEditedWhen] [datetime2](7) NOT NULL -) - -insert into @ilines select * from sales.InvoiceLines - -select i.CustomerID, sum(il.LineProfit) -from Sales.Invoices i -inner join @ilines il -on i.InvoiceID = il.InvoiceID -group by i.CustomerID - -end -go - -exec defercompile +use WideWorldImporters +go +select * from Sales.InvoiceLines +go + +alter database wideworldimporters set compatibility_level = 150 + +alter database wideworldimporters set compatibility_level = 130 + +create or alter proc defercompile +as +begin +declare @ilines table +( [InvoiceLineID] [int] NOT NULL primary key, + [InvoiceID] [int] NOT NULL, + [StockItemID] [int] NOT NULL, + [Description] [nvarchar](100) NOT NULL, + [PackageTypeID] [int] NOT NULL, + [Quantity] [int] NOT NULL, + [UnitPrice] [decimal](18, 2) NULL, + [TaxRate] [decimal](18, 3) NOT NULL, + [TaxAmount] [decimal](18, 2) NOT NULL, + [LineProfit] [decimal](18, 2) NOT NULL, + [ExtendedPrice] [decimal](18, 2) NOT NULL, + [LastEditedBy] [int] NOT NULL, + [LastEditedWhen] [datetime2](7) NOT NULL +) + +insert into @ilines select * from sales.InvoiceLines + +select i.CustomerID, sum(il.LineProfit) +from Sales.Invoices i +inner join @ilines il +on i.InvoiceID = il.InvoiceID +group by i.CustomerID + +end +go + +exec defercompile diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/proc.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/proc.sql index 331e3cfc..d5ab3aba 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/proc.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/proc.sql @@ -1,34 +1,34 @@ -USE WideWorldImporters -GO -CREATE or ALTER PROCEDURE defercompile -AS -BEGIN --- Declare the table variable -DECLARE @ilines TABLE -( [InvoiceLineID] [int] NOT NULL primary key, - [InvoiceID] [int] NOT NULL, - [StockItemID] [int] NOT NULL, - [Description] [nvarchar](100) NOT NULL, - [PackageTypeID] [int] NOT NULL, - [Quantity] [int] NOT NULL, - [UnitPrice] [decimal](18, 2) NULL, - [TaxRate] [decimal](18, 3) NOT NULL, - [TaxAmount] [decimal](18, 2) NOT NULL, - [LineProfit] [decimal](18, 2) NOT NULL, - [ExtendedPrice] [decimal](18, 2) NOT NULL, - [LastEditedBy] [int] NOT NULL, - [LastEditedWhen] [datetime2](7) NOT NULL -) - --- Insert all the rows from InvoiceLines into the table variable -INSERT INTO @ilines SELECT * FROM Sales.InvoiceLines - --- Find my total profile by customer -SELECT i.CustomerID, SUM(il.LineProfit) -FROM Sales.Invoices i -INNER JOIN @ilines il -ON i.InvoiceID = il.InvoiceID -GROUP By i.CustomerID - -END +USE WideWorldImporters +GO +CREATE or ALTER PROCEDURE defercompile +AS +BEGIN +-- Declare the table variable +DECLARE @ilines TABLE +( [InvoiceLineID] [int] NOT NULL primary key, + [InvoiceID] [int] NOT NULL, + [StockItemID] [int] NOT NULL, + [Description] [nvarchar](100) NOT NULL, + [PackageTypeID] [int] NOT NULL, + [Quantity] [int] NOT NULL, + [UnitPrice] [decimal](18, 2) NULL, + [TaxRate] [decimal](18, 3) NOT NULL, + [TaxAmount] [decimal](18, 2) NOT NULL, + [LineProfit] [decimal](18, 2) NOT NULL, + [ExtendedPrice] [decimal](18, 2) NOT NULL, + [LastEditedBy] [int] NOT NULL, + [LastEditedWhen] [datetime2](7) NOT NULL +) + +-- Insert all the rows from InvoiceLines into the table variable +INSERT INTO @ilines SELECT * FROM Sales.InvoiceLines + +-- Find my total profile by customer +SELECT i.CustomerID, SUM(il.LineProfit) +FROM Sales.Invoices i +INNER JOIN @ilines il +ON i.InvoiceID = il.InvoiceID +GROUP By i.CustomerID + +END GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/query_plan_diff.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/query_plan_diff.sql index 65bbdef8..aa6f721e 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/query_plan_diff.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/query_plan_diff.sql @@ -1,11 +1,11 @@ -USE WideWorldImporters -GO -SELECT qsp.plan_id, qsp.compatibility_level, -avg(qsrs.avg_duration)/1000 as avg_duration_ms, avg(qsrs.avg_logical_io_reads) as avg_logical_io -FROM sys.query_store_plan qsp -INNER JOIN sys.query_store_runtime_stats qsrs -ON qsp.plan_id = qsrs.plan_id -AND qsp.query_id = 41998 -- Put in your query_id here -GROUP BY qsp.plan_id, qsp.compatibility_level -GO - +USE WideWorldImporters +GO +SELECT qsp.plan_id, qsp.compatibility_level, +avg(qsrs.avg_duration)/1000 as avg_duration_ms, avg(qsrs.avg_logical_io_reads) as avg_logical_io +FROM sys.query_store_plan qsp +INNER JOIN sys.query_store_runtime_stats qsrs +ON qsp.plan_id = qsrs.plan_id +AND qsp.query_id = 41998 -- Put in your query_id here +GROUP BY qsp.plan_id, qsp.compatibility_level +GO + diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/readme.md index b7f40436..d2768d9a 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/readme.md @@ -1,27 +1,27 @@ -# SQL Server demo for Intelligent Query Processing - Deferred Table Variable Compilation - -## Requirements - -You must first install the following for this demo - -- SQL Server 2019 CTP 2.0 or greater on Windows Server. While you can run the basics of this demo on SQL Server on Linux, the full affect to the demo requires Windows Performance Monitor so I recommend you use SQL Server on Windows Server. -- SQL Server client tools (e.g. sqlcmd) -- SQL Server Management Studio 18.0 (SSMS) installed -- RML Utilities installed (ostress) from https://www.microsoft.com/en-us/download/details.aspx?id=4511 -- A copy of the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak - -## Demo Steps - -1. Restore the WWI backup. Use the **restorewwi.sql** as a template. - -2. Run **setup_repro.cmd** to install new stored procedure in WideWorldImporters - -3. Examine the details of the new procedure from **proc.sql** - -4. Run **repro_130.cmd** and observe the total duration time. It should take around 30+ secs - -5. Run **repro_150.cm**d and observe the total duration. This is the exact same workload as step 4 except with database compatibility level 150. This sould take around 10secs. - -6. Using SSMS, observe the performance of this query and differences in plan and average execution time using Query Store Reports, Top Resource Queries. - +# SQL Server demo for Intelligent Query Processing - Deferred Table Variable Compilation + +## Requirements + +You must first install the following for this demo + +- SQL Server 2019 CTP 2.0 or greater on Windows Server. While you can run the basics of this demo on SQL Server on Linux, the full affect to the demo requires Windows Performance Monitor so I recommend you use SQL Server on Windows Server. +- SQL Server client tools (e.g. sqlcmd) +- SQL Server Management Studio 18.0 (SSMS) installed +- RML Utilities installed (ostress) from https://www.microsoft.com/en-us/download/details.aspx?id=4511 +- A copy of the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak + +## Demo Steps + +1. Restore the WWI backup. Use the **restorewwi.sql** as a template. + +2. Run **setup_repro.cmd** to install new stored procedure in WideWorldImporters + +3. Examine the details of the new procedure from **proc.sql** + +4. Run **repro_130.cmd** and observe the total duration time. It should take around 30+ secs + +5. Run **repro_150.cm**d and observe the total duration. This is the exact same workload as step 4 except with database compatibility level 150. This sould take around 10secs. + +6. Using SSMS, observe the performance of this query and differences in plan and average execution time using Query Store Reports, Top Resource Queries. + 7. Optionally use query_plan_diff.sql to observe the differences in Query Store. You need to substitute the proper query_id from the report in SSMS. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro130.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro130.sql index fd2dd220..bb3414e0 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro130.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro130.sql @@ -1,8 +1,8 @@ -USE master -GO -ALTER DATABASE wideworldimporters SET compatibility_level = 130 -go -USE WideWorldImporters -go -EXEC defercompile +USE master +GO +ALTER DATABASE wideworldimporters SET compatibility_level = 130 +go +USE WideWorldImporters +go +EXEC defercompile go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro150.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro150.sql index 4678ca44..18ace4e7 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro150.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/repro150.sql @@ -1,8 +1,8 @@ -USE master -GO -ALTER DATABASE wideworldimporters SET compatibility_level = 150 -go -USE WideWorldImporters -go -EXEC defercompile +USE master +GO +ALTER DATABASE wideworldimporters SET compatibility_level = 150 +go +USE WideWorldImporters +go +EXEC defercompile go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/restorewwi.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/restorewwi.sql index d57411cf..f1f26580 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/restorewwi.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/restorewwi.sql @@ -1,7 +1,7 @@ -restore database WideWorldImporters from disk = 'd:\sql_sample_databases\WideWorldImporters-Full.bak' with -move 'WWI_Primary' to 'd:\sql_sample_databases\WideWorldImporters.mdf', -move 'WWI_UserData' to 'd:\sql_sample_databases\WideWorldImporters_UserData.ndf', -move 'WWI_Log' to 'd:\sql_sample_databases\WideWorldImporters.ldf', -move 'WWI_InMemory_Data_1' to 'd:\sql_sample_databases\WideWorldImporters_InMemory_Data_1', -stats=5 +restore database WideWorldImporters from disk = 'd:\sql_sample_databases\WideWorldImporters-Full.bak' with +move 'WWI_Primary' to 'd:\sql_sample_databases\WideWorldImporters.mdf', +move 'WWI_UserData' to 'd:\sql_sample_databases\WideWorldImporters_UserData.ndf', +move 'WWI_Log' to 'd:\sql_sample_databases\WideWorldImporters.ldf', +move 'WWI_InMemory_Data_1' to 'd:\sql_sample_databases\WideWorldImporters_InMemory_Data_1', +stats=5 go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set130.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set130.sql index 843b9347..ce272699 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set130.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set130.sql @@ -1,2 +1,2 @@ -alter database wideworldimporters set compatibility_level = 130 +alter database wideworldimporters set compatibility_level = 130 go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set150.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set150.sql index 9c0ab483..d039188f 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set150.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/deferredtablevariable/set150.sql @@ -1,2 +1,2 @@ -alter database wideworldimporters set compatibility_level = 150 +alter database wideworldimporters set compatibility_level = 150 go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/readme.md index 141512f8..701e2d9d 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/iqp/readme.md @@ -1,7 +1,7 @@ -# SQL Server Demos for Intelligent Query Processing in SQL Server - -These are demos you can use to show the Intelligent Query Processing capabilities in SQL Server 2017 and 2019 - -## deferredtablevariable - +# SQL Server Demos for Intelligent Query Processing in SQL Server + +These are demos you can use to show the Intelligent Query Processing capabilities in SQL Server 2017 and 2019 + +## deferredtablevariable + This is a demo to show the new cardinality estimation for table variables called deferred compilation. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/dm_exec_query_profiles.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/dm_exec_query_profiles.sql index a832727b..f35baca6 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/dm_exec_query_profiles.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/dm_exec_query_profiles.sql @@ -1,9 +1,9 @@ ---Run this in a different session than the session in which your query is running. ---Note that you may need to change session id 54 below with the session id you want to monitor. -SELECT node_id,physical_operator_name, SUM(row_count) row_count, - SUM(estimate_row_count) AS estimate_row_count, - CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count) as percent_complete -FROM sys.dm_exec_query_profiles -WHERE session_id=91 -GROUP BY node_id,physical_operator_name +--Run this in a different session than the session in which your query is running. +--Note that you may need to change session id 54 below with the session id you want to monitor. +SELECT node_id,physical_operator_name, SUM(row_count) row_count, + SUM(estimate_row_count) AS estimate_row_count, + CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count) as percent_complete +FROM sys.dm_exec_query_profiles +WHERE session_id=91 +GROUP BY node_id,physical_operator_name ORDER BY node_id; \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/mysmartsqlquery.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/mysmartsqlquery.sql index f1599e8e..e5f1d430 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/mysmartsqlquery.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/mysmartsqlquery.sql @@ -1,10 +1,10 @@ ---alter database wideworldimporters set compatibility_level = 150 ---go -use wideworldimporters -go -select si.CustomerID, sil.LineProfit -from Sales.Invoices si -join Sales.InvoiceLines sil -on si.InvoiceID = si.InvoiceID -option (maxdop 1) +--alter database wideworldimporters set compatibility_level = 150 +--go +use wideworldimporters +go +select si.CustomerID, sil.LineProfit +from Sales.Invoices si +join Sales.InvoiceLines sil +on si.InvoiceID = si.InvoiceID +option (maxdop 1) go \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/readme.md index b1e926ed..aacf1c38 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/lwp/readme.md @@ -1,17 +1,17 @@ -# SQL Server Demo Lightweight Query Profiling - -This is a demo to show the feature of Lightweight Query Profiling which is on by default in SQL Server 2019 - -## Requirements - -- Install SQL Server 2019 CTP 2.0 or higher -- Restore the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak -- Install SQL Server Management Studio 18.0 or higher - -## Demo Steps - -1. Open up SSMS and Activity Monitor -2. Run the script **mysmartquery.cmd** -3. Choose the process for this query in Activity Monitor in the Process section and right-click. Choose Show Live Execution Plan -4. You should see a live view of the plan in execution at the operator level. Note the query has a syntax bug which causes the crazy behavior. +# SQL Server Demo Lightweight Query Profiling + +This is a demo to show the feature of Lightweight Query Profiling which is on by default in SQL Server 2019 + +## Requirements + +- Install SQL Server 2019 CTP 2.0 or higher +- Restore the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak +- Install SQL Server Management Studio 18.0 or higher + +## Demo Steps + +1. Open up SSMS and Activity Monitor +2. Run the script **mysmartquery.cmd** +3. Choose the process for this query in Activity Monitor in the Process section and right-click. Choose Show Live Execution Plan +4. You should see a live view of the plan in execution at the operator level. Note the query has a syntax bug which causes the crazy behavior. 5. Load **dm_exec_query_profiles.sql** and fill in the correct session_id. Note you can see the same info through a DMV. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/readme.md index 4018a2ae..a8ecb8ea 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 2 Activity - Intelligent Performance/readme.md @@ -1,15 +1,15 @@ -# Module 2 Activities - Intelligent Performance - -These represent demos and examples you can run to see the behavior of Intelligent Performance in SQL Server 2019. Note the autotune demo will work on SQL Server 2017. - -## autotune - -Show the capabilities of Automatic Tuning (Automatic Plan Correction) - -## iqp - -Show the capabilities of Intelligent Query Processing including deferred table variable compilation. - -## lwp - +# Module 2 Activities - Intelligent Performance + +These represent demos and examples you can run to see the behavior of Intelligent Performance in SQL Server 2019. Note the autotune demo will work on SQL Server 2017. + +## autotune + +Show the capabilities of Automatic Tuning (Automatic Plan Correction) + +## iqp + +Show the capabilities of Intelligent Query Processing including deferred table variable compilation. + +## lwp + Show the capabilities of "on by default" Lightweight Query Profiling \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/readme.md index 997a5156..76c3c129 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/readme.md @@ -1,7 +1,7 @@ -# Module 2 Activities - Security - -These represent demos and examples you can run to see new capabilities for security in SQL Servrer 2019. - -## staticmask - +# Module 2 Activities - Security + +These represent demos and examples you can run to see new capabilities for security in SQL Servrer 2019. + +## staticmask + Show the capabilities of Static Data Masking using SSMS 18.0 against SQL Server 2019 \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/createhr.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/createhr.sql index 1fb2e46b..a1d946da 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/createhr.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/createhr.sql @@ -1,24 +1,24 @@ -USE master -GO -DROP DATABASE IF EXISTS HumanResources -GO -CREATE DATABASE HumanResources -GO -USE HumanResources -GO -DROP TABLE IF EXISTS Employees -GO -CREATE TABLE Employees -(EmployeeID int primary key clustered, -EmployeeName nvarchar(100) not null, -EmployeeSSN nvarchar(20) not null, -EmployeeEmail nvarchar(100) not null, -EmployeePhone nvarchar(20) not null, -EmployeeHireDate datetime not null -) -INSERT INTO Employees VALUES (1, 'Bob Ward', '123-457-6891', 'bward@microsoft.com', '817-455-0111', '10/27/1993') -INSERT INTO Employees VALUES (2, 'Dak Prescott', '256-908-1234', 'dakprescott@dallascowboys.com', '214-123-9999', '08/01/2016') -INSERT INTO Employees VALUES (3, 'Ryan Ward', '569-28-9123', 'ryan.ward@baylor.edu', '817-623-2391', '03/27/1996') -INSERT INTO Employees VALUES (4, 'Ginger Ward', '971-11-2378', 'ginger.ward@outlook.com', '817-455-9872', '01/01/2000') -INSERT INTO Employees VALUES (5, 'Troy Ward', '567-12-9291', 'troy.ward@tulane.edu', '682-111-2391', '08/30/1993') +USE master +GO +DROP DATABASE IF EXISTS HumanResources +GO +CREATE DATABASE HumanResources +GO +USE HumanResources +GO +DROP TABLE IF EXISTS Employees +GO +CREATE TABLE Employees +(EmployeeID int primary key clustered, +EmployeeName nvarchar(100) not null, +EmployeeSSN nvarchar(20) not null, +EmployeeEmail nvarchar(100) not null, +EmployeePhone nvarchar(20) not null, +EmployeeHireDate datetime not null +) +INSERT INTO Employees VALUES (1, 'Bob Ward', '123-457-6891', 'bward@microsoft.com', '817-455-0111', '10/27/1993') +INSERT INTO Employees VALUES (2, 'Dak Prescott', '256-908-1234', 'dakprescott@dallascowboys.com', '214-123-9999', '08/01/2016') +INSERT INTO Employees VALUES (3, 'Ryan Ward', '569-28-9123', 'ryan.ward@baylor.edu', '817-623-2391', '03/27/1996') +INSERT INTO Employees VALUES (4, 'Ginger Ward', '971-11-2378', 'ginger.ward@outlook.com', '817-455-9872', '01/01/2000') +INSERT INTO Employees VALUES (5, 'Troy Ward', '567-12-9291', 'troy.ward@tulane.edu', '682-111-2391', '08/30/1993') GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/hrmasking.xml b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/hrmasking.xml index 049819c5..2ac83fe9 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/hrmasking.xml +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/hrmasking.xml @@ -1,14 +1,14 @@ - - - - - - - - - - - -
-
+ + + + + + + + + + + +
+
\ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/readme.md index c0893110..b863deec 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 3 Activity - Security/staticmask/readme.md @@ -1,24 +1,24 @@ -# Static Data Masking with SQL Server - -This demo is to show the Static Data Masking feature with SQL Server which is documented at https://docs.microsoft.com/en-us/sql/relational-databases/security/static-data-masking?view=sql-server-2017 - -## Requirements - -- Install SQL Server Management Studio (SSMS) 18.0 Preview 6 or higher -- Install SQL Server 2019 (TODO: We are checking on whether this will work with previous versions) - -## Demo Steps - -1. Run the script **createhr.sql** to create the database and populate it with data. - -2. In SSMS, right click on the HumanResources database and select Tasks/Mask Database (Preview) - -3. In the dialog box that appears, select Load Config and choose the **hrmasking.xml** file provided. - -4. Select the Configure options to see how the data will be masked. - -5. Type in Step 3 the Masked Database name as HRMasked - -6. Click OK. This will take a few minutes to run. The tool is taking a backup of the current database, restoring it, and modifying the data to be masked. - +# Static Data Masking with SQL Server + +This demo is to show the Static Data Masking feature with SQL Server which is documented at https://docs.microsoft.com/en-us/sql/relational-databases/security/static-data-masking?view=sql-server-2017 + +## Requirements + +- Install SQL Server Management Studio (SSMS) 18.0 Preview 6 or higher +- Install SQL Server 2019 (TODO: We are checking on whether this will work with previous versions) + +## Demo Steps + +1. Run the script **createhr.sql** to create the database and populate it with data. + +2. In SSMS, right click on the HumanResources database and select Tasks/Mask Database (Preview) + +3. In the dialog box that appears, select Load Config and choose the **hrmasking.xml** file provided. + +4. Select the Configure options to see how the data will be masked. + +5. Type in Step 3 the Masked Database name as HRMasked + +6. Click OK. This will take a few minutes to run. The tool is taking a backup of the current database, restoring it, and modifying the data to be masked. + 7. Compare the data in the original database to the new masked database. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/checkpoint_and_shutdown.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/checkpoint_and_shutdown.sql index f86cac5a..6251492e 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/checkpoint_and_shutdown.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/checkpoint_and_shutdown.sql @@ -1,12 +1,12 @@ --- Let's cause rollback with server startup --- First CHECKPOINT the database -USE gocowboys -GO -CHECKPOINT -GO - -USE master -GO --- SHUTDOWN WITH NO WAIT -SHUTDOWN WITH NOWAIT -GO +-- Let's cause rollback with server startup +-- First CHECKPOINT the database +USE gocowboys +GO +CHECKPOINT +GO + +USE master +GO +-- SHUTDOWN WITH NO WAIT +SHUTDOWN WITH NOWAIT +GO diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_rollback.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_rollback.sql index 3e5bf3f2..a8d02618 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_rollback.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_rollback.sql @@ -1,75 +1,75 @@ --- Make sure ADR is OFF --- -USE master -GO -ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = OFF -GO --- Try to delete a bunch of rows --- Should take about 30 secs --- -USE gocowboys -GO -BEGIN TRAN -DELETE from howboutthemcowboys -GO - --- What is the log space usage -SELECT * FROM sys.dm_db_log_space_usage -go - --- Does checkpoint truncate the log? --- -CHECKPOINT -GO -SELECT * FROM sys.dm_db_log_space_usage -go - --- Try to roll it back and measure the time -ROLLBACK TRAN -GO - --- What is the log space usage -SELECT * FROM sys.dm_db_log_space_usage -go - --- Does checkpoint truncate the log? --- -CHECKPOINT -GO -SELECT * FROM sys.dm_db_log_space_usage -go - --- Now try it with ADR --- -USE master -GO -ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = ON -GO - --- Try to delete a bunch of rows and roll it back --- -USE gocowboys -GO -BEGIN TRAN -DELETE from howboutthemcowboys -GO - --- What is the log space usage -SELECT * FROM sys.dm_db_log_space_usage -go - --- Try to roll it back and measure the time --- 0 secs! -ROLLBACK TRAN -GO - --- What is the log space usage -SELECT * FROM sys.dm_db_log_space_usage -go - --- Clear ADR --- -USE master -GO -ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = OFF +-- Make sure ADR is OFF +-- +USE master +GO +ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = OFF +GO +-- Try to delete a bunch of rows +-- Should take about 30 secs +-- +USE gocowboys +GO +BEGIN TRAN +DELETE from howboutthemcowboys +GO + +-- What is the log space usage +SELECT * FROM sys.dm_db_log_space_usage +go + +-- Does checkpoint truncate the log? +-- +CHECKPOINT +GO +SELECT * FROM sys.dm_db_log_space_usage +go + +-- Try to roll it back and measure the time +ROLLBACK TRAN +GO + +-- What is the log space usage +SELECT * FROM sys.dm_db_log_space_usage +go + +-- Does checkpoint truncate the log? +-- +CHECKPOINT +GO +SELECT * FROM sys.dm_db_log_space_usage +go + +-- Now try it with ADR +-- +USE master +GO +ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = ON +GO + +-- Try to delete a bunch of rows and roll it back +-- +USE gocowboys +GO +BEGIN TRAN +DELETE from howboutthemcowboys +GO + +-- What is the log space usage +SELECT * FROM sys.dm_db_log_space_usage +go + +-- Try to roll it back and measure the time +-- 0 secs! +ROLLBACK TRAN +GO + +-- What is the log space usage +SELECT * FROM sys.dm_db_log_space_usage +go + +-- Clear ADR +-- +USE master +GO +ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = OFF GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_undo_recovery.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_undo_recovery.sql index 77919caa..375546ed 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_undo_recovery.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/delete_undo_recovery.sql @@ -1,47 +1,47 @@ --- Try to delete a bunch of rows --- Should take about 30 secs --- -USE gocowboys -GO -BEGIN TRAN -DELETE from howboutthemcowboys -GO - --- Let's cause rollback with server startup --- First CHECKPOINT the database -CHECKPOINT -GO - --- SHUTDOWN WITH NO WAIT -SHUTDOWN WITH NOWAIT -GO - - - - - --- Now try it with ADR --- -USE master -GO -ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = ON -GO - --- Try to delete a bunch of rows and roll it back --- -USE gocowboys -GO -BEGIN TRAN -DELETE from howboutthemcowboys -GO --- Try to roll it back and measure the time --- 0 secs! -ROLLBACK TRAN -GO - --- Clear ADR --- -USE master -GO -ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = OFF +-- Try to delete a bunch of rows +-- Should take about 30 secs +-- +USE gocowboys +GO +BEGIN TRAN +DELETE from howboutthemcowboys +GO + +-- Let's cause rollback with server startup +-- First CHECKPOINT the database +CHECKPOINT +GO + +-- SHUTDOWN WITH NO WAIT +SHUTDOWN WITH NOWAIT +GO + + + + + +-- Now try it with ADR +-- +USE master +GO +ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = ON +GO + +-- Try to delete a bunch of rows and roll it back +-- +USE gocowboys +GO +BEGIN TRAN +DELETE from howboutthemcowboys +GO +-- Try to roll it back and measure the time +-- 0 secs! +ROLLBACK TRAN +GO + +-- Clear ADR +-- +USE master +GO +ALTER DATABASE gocowboys SET ACCELERATED_DATABASE_RECOVERY = OFF GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/readme.md index 55eb3526..aa45fb8c 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/readme.md @@ -1,15 +1,15 @@ -# Accelerated Data Recovery in SQL Server - -This demo is to show Accelerated Data Recovery feature in SQL Server 2019 - -## Requirements - -- Install SQL Server 2019 CTP 2.3 or higher - -## Demo Steps - -1. Run the statements in **setup_database.sql** - -2. Follow the statements in **delete_rollback.sql** - +# Accelerated Data Recovery in SQL Server + +This demo is to show Accelerated Data Recovery feature in SQL Server 2019 + +## Requirements + +- Install SQL Server 2019 CTP 2.3 or higher + +## Demo Steps + +1. Run the statements in **setup_database.sql** + +2. Follow the statements in **delete_rollback.sql** + 3. Follow the steps in **delete_undo_recovery.sql**. Use the **checkpoint_and_shutdown.sql** script in another session to checkpoing and shutdown SQL Server. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/setup_database.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/setup_database.sql index 7dcf78f9..677ba5ad 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/setup_database.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/adr/setup_database.sql @@ -1,34 +1,34 @@ -USE master -GO -DROP DATABASE IF EXISTS gocowboys -GO -CREATE DATABASE gocowboys -ON PRIMARY -(NAME = N'gocowboys_primary', FILENAME = 'c:\data\gocowboys.mdf', SIZE = 10Gb , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) -LOG ON -(NAME = N'gocowboys_Log', FILENAME = 'c:\data\gocowboys_log.ldf', SIZE = 10Gb , MAXSIZE = UNLIMITED , FILEGROWTH = 65536KB) -GO -ALTER DATABASE gocowboys SET RECOVERY SIMPLE -GO -USE gocowboys -GO -DROP TABLE IF EXISTS howboutthemcowboys -GO -CREATE TABLE howboutthemcowboys (playerid int primary key clustered, playername char(7000) not null) -GO -SET NOCOUNT ON -GO -BEGIN TRAN -DECLARE @x int -SET @x = 0 -WHILE (@x < 100000) -BEGIN - INSERT INTO howboutthemcowboys VALUES (@x, 'All players are great') - SET @x = @x + 1 -END -COMMIT TRAN -GO -SET NOCOUNT OFF -GO -USE master +USE master +GO +DROP DATABASE IF EXISTS gocowboys +GO +CREATE DATABASE gocowboys +ON PRIMARY +(NAME = N'gocowboys_primary', FILENAME = 'c:\data\gocowboys.mdf', SIZE = 10Gb , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) +LOG ON +(NAME = N'gocowboys_Log', FILENAME = 'c:\data\gocowboys_log.ldf', SIZE = 10Gb , MAXSIZE = UNLIMITED , FILEGROWTH = 65536KB) +GO +ALTER DATABASE gocowboys SET RECOVERY SIMPLE +GO +USE gocowboys +GO +DROP TABLE IF EXISTS howboutthemcowboys +GO +CREATE TABLE howboutthemcowboys (playerid int primary key clustered, playername char(7000) not null) +GO +SET NOCOUNT ON +GO +BEGIN TRAN +DECLARE @x int +SET @x = 0 +WHILE (@x < 100000) +BEGIN + INSERT INTO howboutthemcowboys VALUES (@x, 'All players are great') + SET @x = @x + 1 +END +COMMIT TRAN +GO +SET NOCOUNT OFF +GO +USE master GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/readme.md index 37e443fb..2b6987fd 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 4 Activity - MIssion Critical Availability/readme.md @@ -1,7 +1,7 @@ -# Module 4 Activities - Mission Critical Availability - -These represent demos and examples you can run to see new capabilities for mission critical availability in SQL Server 2019. - -## adr - +# Module 4 Activities - Mission Critical Availability + +These represent demos and examples you can run to see new capabilities for mission critical availability in SQL Server 2019. + +## adr + Show the capabilities of Accelerated Data Recovery in SQL Server 2019 \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/InputRow.java b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/InputRow.java index 08b7b781..b7789a1d 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/InputRow.java +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/InputRow.java @@ -1,12 +1,12 @@ -package pkg; - -//This object represents one input row -public class InputRow { - public final int id; - public final String text; - - public InputRow(final int id, final String text) { - this.id = id; - this.text = text; - } +package pkg; + +//This object represents one input row +public class InputRow { + public final int id; + public final String text; + + public InputRow(final int id, final String text) { + this.id = id; + this.text = text; + } } \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Javangramdemo.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Javangramdemo.sql index 73415854..d08b2647 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Javangramdemo.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Javangramdemo.sql @@ -1,19 +1,19 @@ -USE JavaTest -GO -DECLARE @myClassPath nvarchar(50) -DECLARE @n int ---This is where you store your classes or jars. ---Update this to your own classpath -SET @myClassPath = N'C:\java' ---This is the size of the ngram -SET @n = 3 -EXEC sp_execute_external_script - @language = N'Java' -, @script = N'pkg.Ngram.getNGrams' -, @input_data_1 = N'SELECT id, text FROM reviews' -, @parallel = 0 -, @params = N'@CLASSPATH nvarchar(50), @param1 INT' -, @CLASSPATH = @myClassPath -, @param1 = @n -with result sets ((ID int, ngram varchar(20))) +USE JavaTest +GO +DECLARE @myClassPath nvarchar(50) +DECLARE @n int +--This is where you store your classes or jars. +--Update this to your own classpath +SET @myClassPath = N'C:\java' +--This is the size of the ngram +SET @n = 3 +EXEC sp_execute_external_script + @language = N'Java' +, @script = N'pkg.Ngram.getNGrams' +, @input_data_1 = N'SELECT id, text FROM reviews' +, @parallel = 0 +, @params = N'@CLASSPATH nvarchar(50), @param1 INT' +, @CLASSPATH = @myClassPath +, @param1 = @n +with result sets ((ID int, ngram varchar(20))) GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Ngram.java b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Ngram.java index f82bbab5..6f77b881 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Ngram.java +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/Ngram.java @@ -1,91 +1,91 @@ -//We will package our classes in a package called pkg -//Packages are option in Java-SQL, but required for this sample. -package pkg; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class Ngram { - - //Required: This is only required if you are passing data in @input_data_1 - //from SQL Server in sp_execute_external_script - public static int[] inputDataCol1 = new int[1]; - public static String[] inputDataCol2 = new String[1]; - - //Required: Input null map. Size just needs to be set to "1" - public static boolean[][] inputNullMap = new boolean[1][1]; - - //Required: Output data columns returned back to SQL Server - public static int[] outputDataCol1; - public static String[] outputDataCol2; - - //Required: Output null map. Is populated with true or false values - //to indicate nulls - public static boolean[][] outputNullMap; - - //Optional: This is only required if parameters are passed with @params - // from SQL Server in sp_execute_external_script - // n is giving us the size of ngram substrings - public static int param1; - - //Optional: The number of rows we will be returning - public static int numberOfRows; - - //Required: Number of output columns returned - public static short numberOfOutputCols; - - /*Java main method - Only for testing purposes outside of SQL Server - public static void main(String... args) { - //getNGrams(); - }*/ - - //This is the method we will be calling from SQL Server - public static void getNGrams() { - - System.out.println("inputDataCol1.length= "+ inputDataCol1.length); - if (inputDataCol1.length == 0 ) { - // TODO: Set empty return - return; - } - //Using a stream to "loop" over the input data inputDataCol1.length. You can also use a for loop for this. - final List inputDataSet = IntStream.range(0, inputDataCol1.length) - .mapToObj(i -> new InputRow(inputDataCol1[i], inputDataCol2[i])) - .collect(Collectors.toList()); - - - //Again, we are using a stream to loop over data - final List outputDataSet = inputDataSet.stream() - // Generate ngrams of size n for each incoming string - // Each invocation of ngrams returns a list. flatMap flattens - // the resulting list-of-lists to a flat list. - .flatMap(inputRow -> ngrams(param1, inputRow.text).stream().map(s -> new OutputRow(inputRow.id, s))) - .collect(Collectors.toList()); - - //Print the outputDataSet - System.out.println(outputDataSet); - - //Set the number of rows and columns we will be returning - numberOfOutputCols = 2; - numberOfRows = outputDataSet.size(); - outputDataCol1 = new int[numberOfRows]; // ID column - outputDataCol2 = new String[numberOfRows]; //The ngram column - outputNullMap = new boolean[2][numberOfRows];// output null map - - //Since we don't have any null values, we will populate all values in the outputNullMap to false - IntStream.range(0, numberOfRows).forEach(i -> { - final OutputRow outputRow = outputDataSet.get(i); - outputDataCol1[i] = outputRow.id; - outputDataCol2[i] = outputRow.ngram; - outputNullMap[0][i] = false; - outputNullMap[1][i] = false; - }); - } - - // Example: ngrams(3, "abcde") = ["abc", "bcd", "cde"]. - private static List ngrams(int n, String text) { - return IntStream.range(0, text.length() - n + 1) - .mapToObj(i -> text.substring(i, i + n)) - .collect(Collectors.toList()); - } -} +//We will package our classes in a package called pkg +//Packages are option in Java-SQL, but required for this sample. +package pkg; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class Ngram { + + //Required: This is only required if you are passing data in @input_data_1 + //from SQL Server in sp_execute_external_script + public static int[] inputDataCol1 = new int[1]; + public static String[] inputDataCol2 = new String[1]; + + //Required: Input null map. Size just needs to be set to "1" + public static boolean[][] inputNullMap = new boolean[1][1]; + + //Required: Output data columns returned back to SQL Server + public static int[] outputDataCol1; + public static String[] outputDataCol2; + + //Required: Output null map. Is populated with true or false values + //to indicate nulls + public static boolean[][] outputNullMap; + + //Optional: This is only required if parameters are passed with @params + // from SQL Server in sp_execute_external_script + // n is giving us the size of ngram substrings + public static int param1; + + //Optional: The number of rows we will be returning + public static int numberOfRows; + + //Required: Number of output columns returned + public static short numberOfOutputCols; + + /*Java main method - Only for testing purposes outside of SQL Server + public static void main(String... args) { + //getNGrams(); + }*/ + + //This is the method we will be calling from SQL Server + public static void getNGrams() { + + System.out.println("inputDataCol1.length= "+ inputDataCol1.length); + if (inputDataCol1.length == 0 ) { + // TODO: Set empty return + return; + } + //Using a stream to "loop" over the input data inputDataCol1.length. You can also use a for loop for this. + final List inputDataSet = IntStream.range(0, inputDataCol1.length) + .mapToObj(i -> new InputRow(inputDataCol1[i], inputDataCol2[i])) + .collect(Collectors.toList()); + + + //Again, we are using a stream to loop over data + final List outputDataSet = inputDataSet.stream() + // Generate ngrams of size n for each incoming string + // Each invocation of ngrams returns a list. flatMap flattens + // the resulting list-of-lists to a flat list. + .flatMap(inputRow -> ngrams(param1, inputRow.text).stream().map(s -> new OutputRow(inputRow.id, s))) + .collect(Collectors.toList()); + + //Print the outputDataSet + System.out.println(outputDataSet); + + //Set the number of rows and columns we will be returning + numberOfOutputCols = 2; + numberOfRows = outputDataSet.size(); + outputDataCol1 = new int[numberOfRows]; // ID column + outputDataCol2 = new String[numberOfRows]; //The ngram column + outputNullMap = new boolean[2][numberOfRows];// output null map + + //Since we don't have any null values, we will populate all values in the outputNullMap to false + IntStream.range(0, numberOfRows).forEach(i -> { + final OutputRow outputRow = outputDataSet.get(i); + outputDataCol1[i] = outputRow.id; + outputDataCol2[i] = outputRow.ngram; + outputNullMap[0][i] = false; + outputNullMap[1][i] = false; + }); + } + + // Example: ngrams(3, "abcde") = ["abc", "bcd", "cde"]. + private static List ngrams(int n, String text) { + return IntStream.range(0, text.length() - n + 1) + .mapToObj(i -> text.substring(i, i + n)) + .collect(Collectors.toList()); + } +} diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/OutputRow.java b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/OutputRow.java index c33af8a2..d450904d 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/OutputRow.java +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/OutputRow.java @@ -1,15 +1,15 @@ -package pkg; - -//This object represents one output row -public class OutputRow { - public final int id; - public final String ngram; - - public OutputRow(final int id, final String ngram) { - this.id = id; - this.ngram = ngram; - } - - @Override - public String toString() { return id + ":" + ngram; } +package pkg; + +//This object represents one output row +public class OutputRow { + public final int id; + public final String ngram; + + public OutputRow(final int id, final String ngram) { + this.id = id; + this.ngram = ngram; + } + + @Override + public String toString() { return id + ":" + ngram; } } \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/buildjava8.cmd b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/buildjava8.cmd index 2edf120b..66cc775b 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/buildjava8.cmd +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/buildjava8.cmd @@ -1,4 +1,4 @@ -rmdir /s /q c:\java\pkg -mkdir c:\java\pkg -"C:\Program Files\Java\jdk1.8.0_181\bin\javac" Ngram.java InputRow.java OutputRow.java +rmdir /s /q c:\java\pkg +mkdir c:\java\pkg +"C:\Program Files\Java\jdk1.8.0_181\bin\javac" Ngram.java InputRow.java OutputRow.java copy *.class c:\java\pkg \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/javasetup.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/javasetup.sql index f9c746f0..ecfad278 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/javasetup.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/javasetup.sql @@ -1,27 +1,27 @@ --- Enable external scripts. --- No restart is required in SQL Server 2019! -EXEC sp_configure 'show advanced options', 1 -GO -RECONFIGURE -EXEC sp_configure 'external scripts enabled', 1 -GO -RECONFIGURE -GO --- Create a database and populate some data --- -DROP DATABASE IF EXISTS JavaTest -GO -CREATE DATABASE JavaTest -GO -USE JavaTest -GO -DROP TABLE IF exists reviews; -GO -CREATE TABLE reviews( - id int NOT NULL, - "text" nvarchar(30) NOT NULL) - -INSERT INTO reviews(id, "text") VALUES (1, 'AAA BBB CCC DDD EEE FFF') -INSERT INTO reviews(id, "text") VALUES (2, 'GGG HHH III JJJ KKK LLL') -INSERT INTO reviews(id, "text") VALUES (3, 'MMM NNN OOO PPP QQQ RRR') -GO +-- Enable external scripts. +-- No restart is required in SQL Server 2019! +EXEC sp_configure 'ahow advanced options', 1 +GO +RECONFIGURE +EXEC sp_configure 'external scripts enabled', 1 +GO +RECONFIGURE +GO +-- Create a database and populate some data +-- +DROP DATABASE IF EXISTS JavaTest +GO +CREATE DATABASE JavaTest +GO +USE JavaTest +GO +DROP TABLE IF exists reviews; +GO +CREATE TABLE reviews( + id int NOT NULL, + "text" nvarchar(30) NOT NULL) + +INSERT INTO reviews(id, "text") VALUES (1, 'AAA BBB CCC DDD EEE FFF') +INSERT INTO reviews(id, "text") VALUES (2, 'GGG HHH III JJJ KKK LLL') +INSERT INTO reviews(id, "text") VALUES (3, 'MMM NNN OOO PPP QQQ RRR') +GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/readme.md index fae152c8..50a3163f 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/java/readme.md @@ -1,25 +1,25 @@ -# SQL Server Demo for the Java Extension - -This is a demo to show the Java Extension capability in SQL Server 2019 and later. This demo shows how to run Java code on SQL Server on Windows. The same code will work with SQL Server Java on Linux. Demo for this scenario coming soon. - -## Requirements - -1. Install SQL Server 2019 CTP 2.0 on Windows or later following the guidance on this page for Java. - -https://docs.microsoft.com/en-us/sql/advanced-analytics/java/extension-java?view=sqlallproducts-allversions#install-on-windows - -2. Follow the rest of the steps on this page to install all dependencies - -https://docs.microsoft.com/en-us/sql/advanced-analytics/java/extension-java?view=sqlallproducts-allversions#install-on-windows - -## Demo Steps - -1. I used the sample code from https://docs.microsoft.com/en-us/sql/advanced-analytics/java/java-first-sample?view=sqlallproducts-allversions and included the 3 Java class source: **InputRow.java**, **OutputRow.java**, **Ngram.java** - -2. I compiled the Java classes using the script **buildjava8.cmd** with Java 8 SDK (so it will be compatible with Linux). The compiled code is placed into C:\java\pkg. You can adjust this to whatever directory you need but you will need to make edits in the following steps. - -3. You need to setup permissions for the folder for your compiled classes. Use the instructions per the documentation at https://docs.microsoft.com/en-us/sql/advanced-analytics/java/java-first-sample?view=sqlallproducts-allversions#6---set-permissions - -4. Run the **javasetup.sql** script to create the database and objects. - +# SQL Server Demo for the Java Extension + +This is a demo to show the Java Extension capability in SQL Server 2019 and later. This demo shows how to run Java code on SQL Server on Windows. The same code will work with SQL Server Java on Linux. Demo for this scenario coming soon. + +## Requirements + +1. Install SQL Server 2019 CTP 2.0 on Windows or later following the guidance on this page for Java. + +https://docs.microsoft.com/en-us/sql/advanced-analytics/java/extension-java?view=sqlallproducts-allversions#install-on-windows + +2. Follow the rest of the steps on this page to install all dependencies + +https://docs.microsoft.com/en-us/sql/advanced-analytics/java/extension-java?view=sqlallproducts-allversions#install-on-windows + +## Demo Steps + +1. I used the sample code from https://docs.microsoft.com/en-us/sql/advanced-analytics/java/java-first-sample?view=sqlallproducts-allversions and included the 3 Java class source: **InputRow.java**, **OutputRow.java**, **Ngram.java** + +2. I compiled the Java classes using the script **buildjava8.cmd** with Java 8 SDK (so it will be compatible with Linux). The compiled code is placed into C:\java\pkg. You can adjust this to whatever directory you need but you will need to make edits in the following steps. + +3. You need to setup permissions for the folder for your compiled classes. Use the instructions per the documentation at https://docs.microsoft.com/en-us/sql/advanced-analytics/java/java-first-sample?view=sqlallproducts-allversions#6---set-permissions + +4. Run the **javasetup.sql** script to create the database and objects. + 5. Run the **javangramdemo.sql** to execute the Java code. This script assumes the class files are in c:\java\pkg. I recommend you keep the pkg subdirectory. If you need to have the classes in a different parent folder, modify this part of the script SET @myClassPath = N'C:\java' \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/native_scoring.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/native_scoring.sql index 31dce92e..af1c22d9 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/native_scoring.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/native_scoring.sql @@ -1,77 +1,77 @@ -USE TutorialDB; - ---STEP 1 - Setup model table for storing the model -DROP TABLE IF EXISTS rental_models; -GO -CREATE TABLE rental_models ( - model_name VARCHAR(30) NOT NULL DEFAULT('default model'), - lang VARCHAR(30), - model VARBINARY(MAX), - native_model VARBINARY(MAX), - PRIMARY KEY (model_name, lang) - -); -GO - ---STEP 2 - Train model using revoscalepy rx_dtree or rxlinmod -DROP PROCEDURE IF EXISTS generate_rental_py_native_model; -go -CREATE PROCEDURE generate_rental_py_native_model (@model_type varchar(30), @trained_model varbinary(max) OUTPUT) -AS -BEGIN - EXECUTE sp_execute_external_script - @language = N'Python' - , @script = N' -from revoscalepy import rx_lin_mod, rx_serialize_model, rx_dtree -from pandas import Categorical -import pickle - -rental_train_data["Holiday"] = rental_train_data["Holiday"].astype("category") -rental_train_data["Snow"] = rental_train_data["Snow"].astype("category") -rental_train_data["WeekDay"] = rental_train_data["WeekDay"].astype("category") - -if model_type == "linear": - linmod_model = rx_lin_mod("RentalCount ~ Month + Day + WeekDay + Snow + Holiday", data = rental_train_data) - trained_model = rx_serialize_model(linmod_model, realtime_scoring_only = True); -if model_type == "dtree": - dtree_model = rx_dtree("RentalCount ~ Month + Day + WeekDay + Snow + Holiday", data = rental_train_data) - trained_model = rx_serialize_model(dtree_model, realtime_scoring_only = True); -' - - , @input_data_1 = N'select "RentalCount", "Year", "Month", "Day", "WeekDay", "Snow", "Holiday" from dbo.rental_data where Year < 2015' - , @input_data_1_name = N'rental_train_data' - , @params = N'@trained_model varbinary(max) OUTPUT, @model_type varchar(30)' - , @model_type = @model_type - , @trained_model = @trained_model OUTPUT; -END; -GO - ---STEP 3 - Save model to table - ---Line of code to empty table with models ---TRUNCATE TABLE rental_models; - ---Save Linear model to table -DECLARE @model VARBINARY(MAX); -EXEC generate_rental_py_native_model "linear", @model OUTPUT; -INSERT INTO rental_models (model_name, native_model, lang) VALUES('linear_model', @model, 'Python'); - ---Save DTree model to table -DECLARE @model2 VARBINARY(MAX); -EXEC generate_rental_py_native_model "dtree", @model2 OUTPUT; -INSERT INTO rental_models (model_name, native_model, lang) VALUES('dtree_model', @model2, 'Python'); - --- Look at the models in the table -SELECT * FROM rental_models; - -GO - ---STEP 4 - Use the native PREDICT (native scoring) to predict number of rentals for both models -DECLARE @model VARBINARY(MAX) = (SELECT TOP(1) native_model FROM dbo.rental_models WHERE model_name = 'linear_model' AND lang = 'Python'); -SELECT d.*, p.* FROM PREDICT(MODEL = @model, DATA = dbo.rental_data AS d) WITH(RentalCount_Pred float) AS p; -GO - ---Native scoring with dtree model -DECLARE @model VARBINARY(MAX) = (SELECT TOP(1) native_model FROM dbo.rental_models WHERE model_name = 'dtree_model' AND lang = 'Python'); -SELECT d.*, p.* FROM PREDICT(MODEL = @model, DATA = dbo.rental_data AS d) WITH(RentalCount_Pred float) AS p; +USE TutorialDB; + +--STEP 1 - Setup model table for storing the model +DROP TABLE IF EXISTS rental_models; +GO +CREATE TABLE rental_models ( + model_name VARCHAR(30) NOT NULL DEFAULT('default model'), + lang VARCHAR(30), + model VARBINARY(MAX), + native_model VARBINARY(MAX), + PRIMARY KEY (model_name, lang) + +); +GO + +--STEP 2 - Train model using revoscalepy rx_dtree or rxlinmod +DROP PROCEDURE IF EXISTS generate_rental_py_native_model; +go +CREATE PROCEDURE generate_rental_py_native_model (@model_type varchar(30), @trained_model varbinary(max) OUTPUT) +AS +BEGIN + EXECUTE sp_execute_external_script + @language = N'Python' + , @script = N' +from revoscalepy import rx_lin_mod, rx_serialize_model, rx_dtree +from pandas import Categorical +import pickle + +rental_train_data["Holiday"] = rental_train_data["Holiday"].astype("category") +rental_train_data["Snow"] = rental_train_data["Snow"].astype("category") +rental_train_data["WeekDay"] = rental_train_data["WeekDay"].astype("category") + +if model_type == "linear": + linmod_model = rx_lin_mod("RentalCount ~ Month + Day + WeekDay + Snow + Holiday", data = rental_train_data) + trained_model = rx_serialize_model(linmod_model, realtime_scoring_only = True); +if model_type == "dtree": + dtree_model = rx_dtree("RentalCount ~ Month + Day + WeekDay + Snow + Holiday", data = rental_train_data) + trained_model = rx_serialize_model(dtree_model, realtime_scoring_only = True); +' + + , @input_data_1 = N'select "RentalCount", "Year", "Month", "Day", "WeekDay", "Snow", "Holiday" from dbo.rental_data where Year < 2015' + , @input_data_1_name = N'rental_train_data' + , @params = N'@trained_model varbinary(max) OUTPUT, @model_type varchar(30)' + , @model_type = @model_type + , @trained_model = @trained_model OUTPUT; +END; +GO + +--STEP 3 - Save model to table + +--Line of code to empty table with models +--TRUNCATE TABLE rental_models; + +--Save Linear model to table +DECLARE @model VARBINARY(MAX); +EXEC generate_rental_py_native_model "linear", @model OUTPUT; +INSERT INTO rental_models (model_name, native_model, lang) VALUES('linear_model', @model, 'Python'); + +--Save DTree model to table +DECLARE @model2 VARBINARY(MAX); +EXEC generate_rental_py_native_model "dtree", @model2 OUTPUT; +INSERT INTO rental_models (model_name, native_model, lang) VALUES('dtree_model', @model2, 'Python'); + +-- Look at the models in the table +SELECT * FROM rental_models; + +GO + +--STEP 4 - Use the native PREDICT (native scoring) to predict number of rentals for both models +DECLARE @model VARBINARY(MAX) = (SELECT TOP(1) native_model FROM dbo.rental_models WHERE model_name = 'linear_model' AND lang = 'Python'); +SELECT d.*, p.* FROM PREDICT(MODEL = @model, DATA = dbo.rental_data AS d) WITH(RentalCount_Pred float) AS p; +GO + +--Native scoring with dtree model +DECLARE @model VARBINARY(MAX) = (SELECT TOP(1) native_model FROM dbo.rental_models WHERE model_name = 'dtree_model' AND lang = 'Python'); +SELECT d.*, p.* FROM PREDICT(MODEL = @model, DATA = dbo.rental_data AS d) WITH(RentalCount_Pred float) AS p; GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/readme.md index fda6fb4d..e67000b0 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/readme.md @@ -1,26 +1,26 @@ -# SQL Server demo using Python and Native Scoring - -This demo shows the capability of running Python code in SQL Server 2017 and later and the Native scoring feature. - -This demo pulls SQL commands from the main site for a rental prediction tutorial using Python which you can find at https://microsoft.github.io/sql-ml-tutorials/python/rentalprediction/. Use this site for the entire tutorial in case any changes or additions are made there. If you want to use Native Scoring as a feature you do not have to install the Machine Learning Services feature but this demo will require it because we train the model using Python with SQL Server. - -## Requirements - -- SQL Server 2017 or later for Windows installed (Developer Edition will work just fine). You must choose the Machine Learning Services feature during installation (or add this feature if you have already installed) -- You need to download the TutorialDB database backup from https://sqlchoice.blob.core.windows.net/sqlchoice/static/TutorialDB.bak -- Enable this configuration option and restart SQL Server - -EXEC sp_configure 'external scripts enabled', 1; -RECONFIGURE WITH OVERRIDE -GO - -**Note:** With SQL Server 2019, python support exists for SQL Server on Linux. A linux version of this same demo can be achieved by installing Machine Learning services for Linux as documented at https://docs.microsoft.com/en-us/machine-learning-server/install/machine-learning-server-linux-install and follow the demo steps below. - -## Demo Steps - -1. Run **setup.sql** to restore the TutorialDB database backup -2. Run the statements and examine the output from **rental_prediction.sql** to see an example of a machine learning model with Python and SQL Server. -3. Run the statements and examine the output from **native_scoring.sql** to see an example of a machine learning model trained with Python but executed with native scoring in T-SQL. - - - +# SQL Server demo using Python and Native Scoring + +This demo shows the capability of running Python code in SQL Server 2017 and later and the Native scoring feature. + +This demo pulls SQL commands from the main site for a rental prediction tutorial using Python which you can find at https://microsoft.github.io/sql-ml-tutorials/python/rentalprediction/. Use this site for the entire tutorial in case any changes or additions are made there. If you want to use Native Scoring as a feature you do not have to install the Machine Learning Services feature but this demo will require it because we train the model using Python with SQL Server. + +## Requirements + +- SQL Server 2017 or later for Windows installed (Developer Edition will work just fine). You must choose the Machine Learning Services feature during installation (or add this feature if you have already installed) +- You need to download the TutorialDB database backup from https://sqlchoice.blob.core.windows.net/sqlchoice/static/TutorialDB.bak +- Enable this configuration option and restart SQL Server + +EXEC sp_configure 'external scripts enabled', 1; +RECONFIGURE WITH OVERRIDE +GO + +**Note:** With SQL Server 2019, python support exists for SQL Server on Linux. A linux version of this same demo can be achieved by installing Machine Learning services for Linux as documented at https://docs.microsoft.com/en-us/machine-learning-server/install/machine-learning-server-linux-install and follow the demo steps below. + +## Demo Steps + +1. Run **setup.sql** to restore the TutorialDB database backup +2. Run the statements and examine the output from **rental_prediction.sql** to see an example of a machine learning model with Python and SQL Server. +3. Run the statements and examine the output from **native_scoring.sql** to see an example of a machine learning model trained with Python but executed with native scoring in T-SQL. + + + diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/rental_prediction.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/rental_prediction.sql index ee1826d7..d7c9295c 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/rental_prediction.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/rental_prediction.sql @@ -1,113 +1,113 @@ -USE TutorialDB; --- Table containing ski rental data -SELECT * FROM [dbo].[rental_data]; - --------------------------- STEP 1 - Setup model table ---------------------------------------- - -DROP TABLE IF EXISTS rental_py_models; -GO -CREATE TABLE rental_py_models ( - model_name VARCHAR(30) NOT NULL DEFAULT('default model') PRIMARY KEY, - model VARBINARY(MAX) NOT NULL -); -GO - --------------------------- STEP 2 - Train model ---------------------------------------- --- Stored procedure that trains and generates an R model using the rental_data and a decision tree algorithm -DROP PROCEDURE IF EXISTS generate_rental_py_model; -go -CREATE PROCEDURE generate_rental_py_model (@trained_model varbinary(max) OUTPUT) -AS -BEGIN - EXECUTE sp_execute_external_script - @language = N'Python' - , @script = N' - -df = rental_train_data -# Get all the columns from the dataframe. -columns = df.columns.tolist() -# Store the variable well be predicting on. -target = "RentalCount" -from sklearn.linear_model import LinearRegression -# Initialize the model class. -lin_model = LinearRegression() -# Fit the model to the training data. -lin_model.fit(df[columns], df[target]) -import pickle -#Before saving the model to the DB table, we need to convert it to a binary object -trained_model = pickle.dumps(lin_model) -' - , @input_data_1 = N'select "RentalCount", "Year", "Month", "Day", "WeekDay", "Snow", "Holiday" from dbo.rental_data where Year < 2015' - , @input_data_1_name = N'rental_train_data' - , @params = N'@trained_model varbinary(max) OUTPUT' - , @trained_model = @trained_model OUTPUT; -END; -GO -------------------- STEP 3 - Save model to table ------------------------------------- -TRUNCATE TABLE rental_py_models; -DECLARE @model VARBINARY(MAX); -EXEC generate_rental_py_model @model OUTPUT; -INSERT INTO rental_py_models (model_name, model) VALUES('linear_model', @model); -SELECT * FROM rental_py_models; - ------------------- STEP 4 - Use the model to predict number of rentals -------------------------- -DROP PROCEDURE IF EXISTS py_predict_rentalcount; -GO -CREATE PROCEDURE py_predict_rentalcount (@model varchar(100)) -AS -BEGIN - DECLARE @py_model varbinary(max) = (select model from rental_py_models where model_name = @model); - EXEC sp_execute_external_script - @language = N'Python' - , @script = N'import pickle -rental_model = pickle.loads(py_model) -df = rental_score_data -#print(df) -# Get all the columns from the dataframe. -columns = df.columns.tolist() -# Filter the columns to remove ones we dont want. -# columns = [c for c in columns if c not in ["Year"]] -# Store the variable well be predicting on. -target = "RentalCount" -# Generate our predictions for the test set. -lin_predictions = rental_model.predict(df[columns]) -print(lin_predictions) -# Import the scikit-learn function to compute error. -from sklearn.metrics import mean_squared_error -# Compute error between our test predictions and the actual values. -lin_mse = mean_squared_error(lin_predictions, df[target]) -#print(lin_mse) -import pandas as pd -predictions_df = pd.DataFrame(lin_predictions) -OutputDataSet = pd.concat([predictions_df, df["RentalCount"], df["Month"], df["Day"], df["WeekDay"], df["Snow"], df["Holiday"], df["Year"]], axis=1) -' - , @input_data_1 = N'Select "RentalCount", "Year" ,"Month", "Day", "WeekDay", "Snow", "Holiday" from rental_data where Year = 2015' - , @input_data_1_name = N'rental_score_data' - , @params = N'@py_model varbinary(max)' - , @py_model = @py_model - with result sets (("RentalCount_Predicted" float, "RentalCount" float, "Month" float,"Day" float,"WeekDay" float,"Snow" float,"Holiday" float, "Year" float)); -END; -GO - ----------------- STEP 5 - Create DB table to store predictions ----------------------- -DROP TABLE IF EXISTS [dbo].[py_rental_predictions]; -GO ---Create a table to store the predictions in -CREATE TABLE [dbo].[py_rental_predictions]( - [RentalCount_Predicted] [int] NULL, - [RentalCount_Actual] [int] NULL, - [Month] [int] NULL, - [Day] [int] NULL, - [WeekDay] [int] NULL, - [Snow] [int] NULL, - [Holiday] [int] NULL, - [Year] [int] NULL -) ON [PRIMARY] -GO ----------------- STEP 6 - Save the predictions in a DB table ----------------------- -TRUNCATE TABLE py_rental_predictions; ---Insert the results of the predictions for test set into a table -INSERT INTO py_rental_predictions -EXEC py_predict_rentalcount 'linear_model'; --- Select contents of the table -SELECT * FROM py_rental_predictions; +USE TutorialDB; +-- Table containing ski rental data +SELECT * FROM [dbo].[rental_data]; + +-------------------------- STEP 1 - Setup model table ---------------------------------------- + +DROP TABLE IF EXISTS rental_py_models; +GO +CREATE TABLE rental_py_models ( + model_name VARCHAR(30) NOT NULL DEFAULT('default model') PRIMARY KEY, + model VARBINARY(MAX) NOT NULL +); +GO + +-------------------------- STEP 2 - Train model ---------------------------------------- +-- Stored procedure that trains and generates an R model using the rental_data and a decision tree algorithm +DROP PROCEDURE IF EXISTS generate_rental_py_model; +go +CREATE PROCEDURE generate_rental_py_model (@trained_model varbinary(max) OUTPUT) +AS +BEGIN + EXECUTE sp_execute_external_script + @language = N'Python' + , @script = N' + +df = rental_train_data +# Get all the columns from the dataframe. +columns = df.columns.tolist() +# Store the variable well be predicting on. +target = "RentalCount" +from sklearn.linear_model import LinearRegression +# Initialize the model class. +lin_model = LinearRegression() +# Fit the model to the training data. +lin_model.fit(df[columns], df[target]) +import pickle +#Before saving the model to the DB table, we need to convert it to a binary object +trained_model = pickle.dumps(lin_model) +' + , @input_data_1 = N'select "RentalCount", "Year", "Month", "Day", "WeekDay", "Snow", "Holiday" from dbo.rental_data where Year < 2015' + , @input_data_1_name = N'rental_train_data' + , @params = N'@trained_model varbinary(max) OUTPUT' + , @trained_model = @trained_model OUTPUT; +END; +GO +------------------- STEP 3 - Save model to table ------------------------------------- +TRUNCATE TABLE rental_py_models; +DECLARE @model VARBINARY(MAX); +EXEC generate_rental_py_model @model OUTPUT; +INSERT INTO rental_py_models (model_name, model) VALUES('linear_model', @model); +SELECT * FROM rental_py_models; + +------------------ STEP 4 - Use the model to predict number of rentals -------------------------- +DROP PROCEDURE IF EXISTS py_predict_rentalcount; +GO +CREATE PROCEDURE py_predict_rentalcount (@model varchar(100)) +AS +BEGIN + DECLARE @py_model varbinary(max) = (select model from rental_py_models where model_name = @model); + EXEC sp_execute_external_script + @language = N'Python' + , @script = N'import pickle +rental_model = pickle.loads(py_model) +df = rental_score_data +#print(df) +# Get all the columns from the dataframe. +columns = df.columns.tolist() +# Filter the columns to remove ones we dont want. +# columns = [c for c in columns if c not in ["Year"]] +# Store the variable well be predicting on. +target = "RentalCount" +# Generate our predictions for the test set. +lin_predictions = rental_model.predict(df[columns]) +print(lin_predictions) +# Import the scikit-learn function to compute error. +from sklearn.metrics import mean_squared_error +# Compute error between our test predictions and the actual values. +lin_mse = mean_squared_error(lin_predictions, df[target]) +#print(lin_mse) +import pandas as pd +predictions_df = pd.DataFrame(lin_predictions) +OutputDataSet = pd.concat([predictions_df, df["RentalCount"], df["Month"], df["Day"], df["WeekDay"], df["Snow"], df["Holiday"], df["Year"]], axis=1) +' + , @input_data_1 = N'Select "RentalCount", "Year" ,"Month", "Day", "WeekDay", "Snow", "Holiday" from rental_data where Year = 2015' + , @input_data_1_name = N'rental_score_data' + , @params = N'@py_model varbinary(max)' + , @py_model = @py_model + with result sets (("RentalCount_Predicted" float, "RentalCount" float, "Month" float,"Day" float,"WeekDay" float,"Snow" float,"Holiday" float, "Year" float)); +END; +GO + +---------------- STEP 5 - Create DB table to store predictions ----------------------- +DROP TABLE IF EXISTS [dbo].[py_rental_predictions]; +GO +--Create a table to store the predictions in +CREATE TABLE [dbo].[py_rental_predictions]( + [RentalCount_Predicted] [int] NULL, + [RentalCount_Actual] [int] NULL, + [Month] [int] NULL, + [Day] [int] NULL, + [WeekDay] [int] NULL, + [Snow] [int] NULL, + [Holiday] [int] NULL, + [Year] [int] NULL +) ON [PRIMARY] +GO +---------------- STEP 6 - Save the predictions in a DB table ----------------------- +TRUNCATE TABLE py_rental_predictions; +--Insert the results of the predictions for test set into a table +INSERT INTO py_rental_predictions +EXEC py_predict_rentalcount 'linear_model'; +-- Select contents of the table +SELECT * FROM py_rental_predictions; diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/setup.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/setup.sql index dc9d02a5..f84cb9b9 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/setup.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/python/setup.sql @@ -1,8 +1,8 @@ -USE master -GO -RESTORE DATABASE TutorialDB -FROM DISK = 'c:\demos\sql2019\python\TutorialDB.bak' -WITH -MOVE 'TutorialDB' TO 'c:\demos\sql2019\python\TutorialDB.mdf', -MOVE 'TutorialDB_log' TO 'c:\demos\sql2019\python\TutorialDB.ldf' +USE master +GO +RESTORE DATABASE TutorialDB +FROM DISK = 'c:\demos\sql2019\python\TutorialDB.bak' +WITH +MOVE 'TutorialDB' TO 'c:\demos\sql2019\python\TutorialDB.mdf', +MOVE 'TutorialDB_log' TO 'c:\demos\sql2019\python\TutorialDB.ldf' GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/readme.md index fa4e5ad1..ea6a5b84 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 5 Activity - Modern Development Platform/readme.md @@ -1,11 +1,11 @@ -# Module 5 Activities - Modern Development Platform - -These represent demos and examples you can run to see new capabilities for the modern development platform integrated with SQL Server 2019 - -## python - -Learn how to execute a machine learning model with Python and built-in native scoring with SQL Server. - -## java - +# Module 5 Activities - Modern Development Platform + +These represent demos and examples you can run to see new capabilities for the modern development platform integrated with SQL Server 2019 + +## python + +Learn how to execute a machine learning model with Python and built-in native scoring with SQL Server. + +## java + Learn how to execute a java program with the extensibility architecture of SQL Server 2019 using T-SQL. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/deploy/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/deploy/readme.md index f2ba2803..369d09a9 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/deploy/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/deploy/readme.md @@ -1,48 +1,48 @@ -# Deploy SQL Server on Linux - -This demo is used to show the basic steps to deploy SQL Server on Linux using RedHat Enterprise Linux. While this exercise shows you how to deploy SQL Server on RedHat, Ubuntu and SUSE are also supported. See our installation gudiance for SQL Server 2017 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017 and SQL Server 2019 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017#sqlvnext for more information on how to install SQL Server on those Linux distributions. - -## Requirements - -- A RedHat Linux installation. This can be either in a VM or bare metal machine. Look at the the Prerequisites in our documentation page at https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017#prerequisites -- Ensure your machine or VM meets the Systems requirements at https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017#system. -- Use either a built-in ssh from your client (Ex. Linux, macOS, or bash shell for Windows at https://docs.microsoft.com/en-us/windows/wsl/install-win10). As a windows usser, I like to use Mobaxterm (https://mobaxterm.mobatek.net/). -- You also need to establish connectivity with your Linux server or VM by having the IP address available and port 22 for ssh open for connectivity. - -## How to deploy SQL Server on Linux - -Run all of the following commands from your ssh session with the bash shell. This lab assumes your Linux Server is connected to the internet. You can do an offline installation of SQL Server on Linux. See the documentation at - -For this exercise we will be using SQL Server 2019 Preview but you can also do the same set of instructions for SQL Server 2017 as documented at https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017. - -1. Copy the repository configuration file using the following command - - `sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-preview.repo` - - The repository configuration file is a text file that contains the location of the SQL Server package for RHEL. This repo file will point to the latest preview build of SQL Server 2019 on Linux. See our documentation for how to use a repository file for other branches - - With a good internet connection this should take a few seconds. - -2. Use the yum package manager to kick off the installation with the following command (-y means don't prompt) - - `sudo yum install -y mssql-server` - - This involves download an ~220Mb file and performing the first phase of install. With a good internet connection this should only take a few minutes. - -3. Now you must complete the installation by executing a bash shell script we install called **mssql-conf** (which uses a series of python scripts). We will also use mssql-conf later to perform a configuration task for SQL Server. Execute the following command - - `sudo /opt/mssql/bin/mssql-conf setup` - - Go through the prompts to pick Edition (choose Developer or Enterprise Core for these labs), accept the EULA, and put in the sa password (must meet strong password requirements like SQL Server on Windows). Remember the sa password as you will use it often in the labs. - -4. Open up the firewall on Linux for the SQL Server port by running the following two commands. This is required if you plan to connect to SQL Server on a remote client. - - `sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent` - - `sudo firewall-cmd --reload` - - Believe it or not, that's it! You have now installed SQL Server on Linux which includes the core database engine and SQL Server Agent - -5. Install the command line tools as documented at https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017#tools - +# Deploy SQL Server on Linux + +This demo is used to show the basic steps to deploy SQL Server on Linux using RedHat Enterprise Linux. While this exercise shows you how to deploy SQL Server on RedHat, Ubuntu and SUSE are also supported. See our installation gudiance for SQL Server 2017 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017 and SQL Server 2019 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017#sqlvnext for more information on how to install SQL Server on those Linux distributions. + +## Requirements + +- A RedHat Linux installation. This can be either in a VM or bare metal machine. Look at the the Prerequisites in our documentation page at https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017#prerequisites +- Ensure your machine or VM meets the Systems requirements at https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017#system. +- Use either a built-in ssh from your client (Ex. Linux, macOS, or bash shell for Windows at https://docs.microsoft.com/en-us/windows/wsl/install-win10). As a windows usser, I like to use Mobaxterm (https://mobaxterm.mobatek.net/). +- You also need to establish connectivity with your Linux server or VM by having the IP address available and port 22 for ssh open for connectivity. + +## How to deploy SQL Server on Linux + +Run all of the following commands from your ssh session with the bash shell. This lab assumes your Linux Server is connected to the internet. You can do an offline installation of SQL Server on Linux. See the documentation at + +For this exercise we will be using SQL Server 2019 Preview but you can also do the same set of instructions for SQL Server 2017 as documented at https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017. + +1. Copy the repository configuration file using the following command + + `sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-preview.repo` + + The repository configuration file is a text file that contains the location of the SQL Server package for RHEL. This repo file will point to the latest preview build of SQL Server 2019 on Linux. See our documentation for how to use a repository file for other branches + + With a good internet connection this should take a few seconds. + +2. Use the yum package manager to kick off the installation with the following command (-y means don't prompt) + + `sudo yum install -y mssql-server` + + This involves download an ~220Mb file and performing the first phase of install. With a good internet connection this should only take a few minutes. + +3. Now you must complete the installation by executing a bash shell script we install called **mssql-conf** (which uses a series of python scripts). We will also use mssql-conf later to perform a configuration task for SQL Server. Execute the following command + + `sudo /opt/mssql/bin/mssql-conf setup` + + Go through the prompts to pick Edition (choose Developer or Enterprise Core for these labs), accept the EULA, and put in the sa password (must meet strong password requirements like SQL Server on Windows). Remember the sa password as you will use it often in the labs. + +4. Open up the firewall on Linux for the SQL Server port by running the following two commands. This is required if you plan to connect to SQL Server on a remote client. + + `sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent` + + `sudo firewall-cmd --reload` + + Believe it or not, that's it! You have now installed SQL Server on Linux which includes the core database engine and SQL Server Agent + +5. Install the command line tools as documented at https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017#tools + 6. Install the mssql-cli tool as documented at https://github.com/dbcli/mssql-cli/blob/master/doc/installation/linux.md#red-hat-enterprise-linux-rhel-7. This is a new command line tool which you will use in other exercises. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/cpwwi.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/cpwwi.sh index 9d8e1516..f4504c7b 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/cpwwi.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/cpwwi.sh @@ -1,2 +1,2 @@ -sudo cp WideWorldImporters-Full.bak /var/opt/mssql -sudo chown mssql:mssql /var/opt/mssql/WideWorldImporters-Full.bak +sudo cp WideWorldImporters-Full.bak /var/opt/mssql +sudo chown mssql:mssql /var/opt/mssql/WideWorldImporters-Full.bak diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/readme.md index 63276280..42e0e7f8 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/readme.md @@ -1,290 +1,290 @@ -# Explore SQL Server on Linux - -In this exercise you will learn how to explore SQL Server on Linux after you have deployed by learning - -- Explore the SQL Server installation -- Common Linux commands -- How to connect to SQL Server -- How to restore a backup and run queries -- How to configure SQL Server - -## Requirements - -Many of these requirements are met if you follow the **deploy** exercises in this Module. - -- SQL Server deployed on Linux -- SQL Server command line tools deployed for Linux -- SQL Server Managed Studio installed on a Windows client that can connect to your Linux Server or VM. -- Azure Data Studio deployed on Windows, Linux, or macOS on a client that can connect to your Linux Server of VM. You can read more about how to install Azure Data Studio at https://docs.microsoft.com/en-us/sql/azure-data-studio/download?view=sql-server-2017. - -**Tip**: For many of my demos, I setup a resource group in Azure and put all of my VMs that I use for connectivity in the same resource group. This puts them all in the same virtual network. Now I can put the private IP addresses of all my VMs in the /etc/hosts file on either Windows or Linux and use those names to connect between VMs. - -## Explore the SQL Server installation - -In this exercise, you will explore the SQL Server installation post deployment. - -1. Run the following command to see the state of SQL Server - - `sudo systemctl status mssql-server` - - Using sudo allows you to see the tail of the SQL Server ERRORLOG file. - -2. Run the following commands to stop, start, and restart SQL Server. - - `sudo systemctl stop mssql-server` - - `sudo systemctl status mssql-server` - - `sudo systemctl start mssql-server` - - `sudo systemctl status mssql-server` - - `sudo systemctl restart mssql-server` - - `sudo systemctl status mssql-server` - - Note that there are no return values when starting, stopping, or restarting. You must run systemctl status to check on the status of SQL Server. With each start of SQL Server, you should see different PID values (for new processes). - -3. Let's see where everything is installed. Run the following command to see where the binaries are installed - - `sudo ls -l /opt/mssql/bin` - - This directory contains the sqlservr executable, mssql-conf script, and other files to support crash dumps. There is no method today to change the location of these files. - -4. Run these commands to see where the default directories for databases and ERRORLOG log (and other log files) are stored - - `sudo ls -l /var/opt/mssql/data` - - `sudo ls -l /var/opt/mssql/log` - - Note from the results that the owner of these files is mssql and mssql. This is a group and non-interactive user called mssql which is the context under which sqlservr executes. Any time sqlservr needs to read or write a file, that file or directory must have mssql:mssql permissions. There is no method to change this today. You can change the default locations of database files, backups, transaction log files, and the ERRORLOG directory using the mssql-conf script. - -5. Let's dump out the current ERRORLOG file using a command on Linux called **cat** (and another variation using **more** so you can page the results) - - `sudo cat /var/opt/mssql/log/errorlog` - - `sudo more /var/opt/mssql/log/errorlog` - -## Common Linux commands - -Now that you have deployed SQL Server on Linux here are a few common commands you may need for Linux while working with SQL Server. - -1. Find out information about the computer running Linux by running the following command - - `sudo dmidecode -t 1` - -2. Find out information about the Linux distribution by running the following command - - `cat /etc/*-release` - -3. Find out information about memory configured on the Linux Server by running the following command - - `cat /proc/meminfo` - - The **MemTotal** is the total amount of physical memory on the Linux Server - - The /proc directory is known as the *proc filesystem* and there is other interesting information exposed in files in this directory. - -4. Find out about the number of cores, sockets, NUMA nodes, and chip architecture by running the following command - - `lscpu` - -5. The **ps** command is used to view all processes on the Linux Server. Use this command to scroll through all processes including parent/child process relationships - - `ps axjf | more` - -6. Run the following command to see a list of disks and mounted file systems on these disks including disk sizes - - `df -H` - - The disk starting with /dev are the true disks for the server. - -7. To see basic performance information by process run the following command - - `top` - - **top** will sort the results with the process using the most CPU at the top which since nothing else is running is sqlservr - - The **KiB Mem** values show physical total, free, and used memory. - The **RES** column is the amount of physical memory used by a process like sqlservr. - - **top** is interactive so type in "q" to quit the program - -8. **iotop** is a utility to monitor I/O statistics per process. However, it is not installed by default. Run the following command to first install iotop - - `sudo yum install -y iotop` - - Now run the following command to execute iotop - - `sudo iotop` - - This shows the overall I/O on the system plus I/O per process. Type in "q" to exit the program. Run this version of the command to only view I/O for processes actually using I/O. This program is interactive and refreshes itself every few seconds - - `sudo iotop -o` - - There are many other options with iotop. Execute the command `man iotop` to experiment with all iotop options. - -9. **htop** is an interactive program to see process utilization information across processors and processes. However, it is not installed by default so run the following commands first to install htop. - - `sudo wget dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm` - - `sudo rpm -ihv epel-release-7-11.noarch.rpm` - - `sudo yum install -y htop` - - Now run the interactive htop command to observe its display - - `htop` - - Type "q" to exit the tool - -10. You will likely need a good editor while using Linux. While the editor vi is installed by default, I recommend you use the **nano** editor. It may be already installed but if not run the following command to install it - - `sudo yum install -y nano` - - Let's use nano to create a shell script to run on Linux - - `nano dumperrorlog.sh` - - nano is a full screen editor. Type in the following in the editor window - - `sudo cat /var/opt/mssql/log/errorlog` - - Type Ctrl+X to exit. You will get prompted to save the file - - Run the following command to make the script executable - - `chmod u+x dumperrorlog.sh` - - Now execute the script - - `./dumperrorlog.sh` - -## How to connect to SQL Server - -Here are a few examples of how to do basic connectivity to SQL Server on Linux. These exercises assume you have installed the command line tools for Linux, mssql-cli, and have a machine or VM running Windows that can connect to the Linux server or VM. - -1. Run a quick test to connect with sqlcmd by executing the following - - `sqlcmd -Usa -Slocalhost` - - Put in your sa password. At the sqlcmd prompt, run the following T-SQL statement - - ```sql - SELECT @@VERSION - GO - ``` - Type in "exit" to quit sqlcmd - - Note: You can connect with any sqlcmd tool from Windows, Linux, or macOS in the same was provided you have connectivity to your Linux Server or VM. The -S parameter would be the hostname or IP address of the Linux Server or VM. - -2. Now test mssql-cli like we did for sqlcmd by running the following command - - `mssql-cli -Usa -Slocalhost` - - You should get a new prompt like sqlcmd. At this prompt type in the following T-SQL command and hit Enter - - ```sql - SELECT @@VERSION - ``` - - Notice as you started typing you see Intellisense functionality kick-in which is one of the differences from sqlcmd. - - If you are not put back into the mssql-cli prompt, type "q" to get back to the prompt. - - mssql-cli does not recognize the "GO" keyword as sqlcmd does. Use a ";" to separate batches. You can also hit F3 to type statements in multiple lines but they will all be in one batch. - - Type in "exit" to quit mssql-cli - - Note: You can connect with any mssql-cli tool from Windows, Linux, or macOS in the same was provided you have connectivity to your Linux Server or VM. The -S parameter would be the hostname or IP address of the Linux Server or VM. - -3. Connect with SQL Server Management Studio (SSMS) using SQL Authentication with the sa account and the server name or IP address:port for your Linux Server. Notice how SSMS works "as is" against the Linux Server and looks almost like a SQL Server on Windows deployment. - - Use Object Explorer and the Query Editor just like you would a normal SQL Server instance. Go through some of the steps in the SSMS tutorial in our documentation at - -4. Go through the the quickstart tutorial for connecting to SQL Server from Azure Data Studio with the SQL Server on Linux deployment at https://docs.microsoft.com/en-us/sql/azure-data-studio/quickstart-sql-server?view=sql-server-2017. - -## How to restore a backup and run queries - -In this exercise, you will learn how to restore a backup of a database to SQL Server on Linux, and run queries against the database. - -Now you will learn the great compatibility story of SQL Server on Linux by restoring a backup from SQL Server on Windows to SQL Server on Linux. And you will interact with this database using sqlcmd and mssql-cli. This section of the lab assumes your Linux Server is connected to the internet. If you are not connected to the internet, you can download the database to restore from and then copy it to your Linux Server (MobaXterm drag and drop is really nice for this) - -1. From your Linux ssh session, run the following command from the bash shell - - `wget https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak` - - Depending on your network speed this should take no more than a few minutes - -2. Copy and restore the WideWorldImporters database. Copy the **cpwwi.sh**, **restorewwi.sh**, and **restorewwi_linux.sql** files from the downloaded zip of the gitHub repo into your home directory on Linux. MobaXterm provides drag and drop capabilities to do this. Copy these files and drop them into the "explorer" pane in MobaXterm on the left hand side from your ssh session. - - Note: You can skip this step if you have already cloned the git repo in the prelab. If you have done this, the scripts in this lab are in the **sqllinuxlab** subdirectory. You can copy them into your home directory or edit them to ensure you have the right path for the WideWorldImporters backup file. - -3. Run the following commands from the bash shell to make the scripts executable (supply the root password if prompted) - - `sudo chmod u+x cpwwi.sh` - - `sudo chmod u+x restorewwi.sh` - -4. Copy the backup file to the SQL Server directory so it can access the file and change permissions on the backup file by executing the following command in the bash shell - - `./cpwwi.sh` - -5. Now restore the database by executing the following command from the bash shell - - `./restorewwi.sh` - -6. Connect with sa to run a query against this database. Run sqlcmd first to connect. Type in the sa password when prompted - - `sqlcmd -Usa -Slocalhost` - -7. From the sqlcmd prompt run these commands - - ```sql - USE WideWorldImporters - GO - SELECT * FROM [Sales].[Customers] - GO - ``` - - Type in "exit" to quit sqlcmd - -9. Now run the same set of commands using mssql-cli. Connect to SQL Server with mssql-cli. Type in the sa password when prompted - - `mssql-cli -Usa -Slocalhost` - -10. Run the following T-SQL commands from the msql-cli prompt (BONUS: Use Intellisense to complete these queries) - - `USE WideWorldImporters;SELECT * FROM Sales.Customers;` - - See how mssql-cli by default will present rows in a vertical record format. Hit Enter or Space to keep paging as many rows as you like. - - Type in "q" at any time to get back to the prompt and "exit" to quit mssql-cli - -## How to configure SQL Server - -In this exercise, you will learn how to configure SQL Server on Linux with the mssql-conf tool. - -There may be situations where you need to enable a traceflag as global and at SQL Server startup time. For Windows, this is done through the SQL Server Configuration Manager. For SQL Server on Linux, you will use the mssql-conf script. A list of all documented traceflags can be found at . - -Let's say you wanted to enable trace flag 1222 for deadlock details to be reported in the ERRORLOG. - -1. Run the following command from an ssh session with the bash shell - - `sudo /opt/mssql/bin/mssql-conf traceflag 1222 on` - -2. Per these instructions, restart SQL Server with the following command: - - `sudo systemctl restart mssql-server` - - Note: If this is successful, the command just returns to the shell prompt - -3. Verify the trace flag was properly set by looking at the ERRORLOG with the following command - - `sudo more /var/opt/mssql/log/errorlog` - -4. Use sqlcmd or mssql-cli to verify this trace flag is set by running the following T-SQL statement - - ```sql - DBCC TRACESTATUS(-1) +# Explore SQL Server on Linux + +In this exercise you will learn how to explore SQL Server on Linux after you have deployed by learning + +- Explore the SQL Server installation +- Common Linux commands +- How to connect to SQL Server +- How to restore a backup and run queries +- How to configure SQL Server + +## Requirements + +Many of these requirements are met if you follow the **deploy** exercises in this Module. + +- SQL Server deployed on Linux +- SQL Server command line tools deployed for Linux +- SQL Server Managed Studio installed on a Windows client that can connect to your Linux Server or VM. +- Azure Data Studio deployed on Windows, Linux, or macOS on a client that can connect to your Linux Server of VM. You can read more about how to install Azure Data Studio at https://docs.microsoft.com/en-us/sql/azure-data-studio/download?view=sql-server-2017. + +**Tip**: For many of my demos, I setup a resource group in Azure and put all of my VMs that I use for connectivity in the same resource group. This puts them all in the same virtual network. Now I can put the private IP addresses of all my VMs in the /etc/hosts file on either Windows or Linux and use those names to connect between VMs. + +## Explore the SQL Server installation + +In this exercise, you will explore the SQL Server installation post deployment. + +1. Run the following command to see the state of SQL Server + + `sudo systemctl status mssql-server` + + Using sudo allows you to see the tail of the SQL Server ERRORLOG file. + +2. Run the following commands to stop, start, and restart SQL Server. + + `sudo systemctl stop mssql-server` + + `sudo systemctl status mssql-server` + + `sudo systemctl start mssql-server` + + `sudo systemctl status mssql-server` + + `sudo systemctl restart mssql-server` + + `sudo systemctl status mssql-server` + + Note that there are no return values when starting, stopping, or restarting. You must run systemctl status to check on the status of SQL Server. With each start of SQL Server, you should see different PID values (for new processes). + +3. Let's see where everything is installed. Run the following command to see where the binaries are installed + + `sudo ls -l /opt/mssql/bin` + + This directory contains the sqlservr executable, mssql-conf script, and other files to support crash dumps. There is no method today to change the location of these files. + +4. Run these commands to see where the default directories for databases and ERRORLOG log (and other log files) are stored + + `sudo ls -l /var/opt/mssql/data` + + `sudo ls -l /var/opt/mssql/log` + + Note from the results that the owner of these files is mssql and mssql. This is a group and non-interactive user called mssql which is the context under which sqlservr executes. Any time sqlservr needs to read or write a file, that file or directory must have mssql:mssql permissions. There is no method to change this today. You can change the default locations of database files, backups, transaction log files, and the ERRORLOG directory using the mssql-conf script. + +5. Let's dump out the current ERRORLOG file using a command on Linux called **cat** (and another variation using **more** so you can page the results) + + `sudo cat /var/opt/mssql/log/errorlog` + + `sudo more /var/opt/mssql/log/errorlog` + +## Common Linux commands + +Now that you have deployed SQL Server on Linux here are a few common commands you may need for Linux while working with SQL Server. + +1. Find out information about the computer running Linux by running the following command + + `sudo dmidecode -t 1` + +2. Find out information about the Linux distribution by running the following command + + `cat /etc/*-release` + +3. Find out information about memory configured on the Linux Server by running the following command + + `cat /proc/meminfo` + + The **MemTotal** is the total amount of physical memory on the Linux Server + + The /proc directory is known as the *proc filesystem* and there is other interesting information exposed in files in this directory. + +4. Find out about the number of cores, sockets, NUMA nodes, and chip architecture by running the following command + + `lscpu` + +5. The **ps** command is used to view all processes on the Linux Server. Use this command to scroll through all processes including parent/child process relationships + + `ps axjf | more` + +6. Run the following command to see a list of disks and mounted file systems on these disks including disk sizes + + `df -H` + + The disk starting with /dev are the true disks for the server. + +7. To see basic performance information by process run the following command + + `top` + + **top** will sort the results with the process using the most CPU at the top which since nothing else is running is sqlservr + + The **KiB Mem** values show physical total, free, and used memory. + The **RES** column is the amount of physical memory used by a process like sqlservr. + + **top** is interactive so type in "q" to quit the program + +8. **iotop** is a utility to monitor I/O statistics per process. However, it is not installed by default. Run the following command to first install iotop + + `sudo yum install -y iotop` + + Now run the following command to execute iotop + + `sudo iotop` + + This shows the overall I/O on the system plus I/O per process. Type in "q" to exit the program. Run this version of the command to only view I/O for processes actually using I/O. This program is interactive and refreshes itself every few seconds + + `sudo iotop -o` + + There are many other options with iotop. Execute the command `man iotop` to experiment with all iotop options. + +9. **htop** is an interactive program to see process utilization information across processors and processes. However, it is not installed by default so run the following commands first to install htop. + + `sudo wget dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm` + + `sudo rpm -ihv epel-release-7-11.noarch.rpm` + + `sudo yum install -y htop` + + Now run the interactive htop command to observe its display + + `htop` + + Type "q" to exit the tool + +10. You will likely need a good editor while using Linux. While the editor vi is installed by default, I recommend you use the **nano** editor. It may be already installed but if not run the following command to install it + + `sudo yum install -y nano` + + Let's use nano to create a shell script to run on Linux + + `nano dumperrorlog.sh` + + nano is a full screen editor. Type in the following in the editor window + + `sudo cat /var/opt/mssql/log/errorlog` + + Type Ctrl+X to exit. You will get prompted to save the file + + Run the following command to make the script executable + + `chmod u+x dumperrorlog.sh` + + Now execute the script + + `./dumperrorlog.sh` + +## How to connect to SQL Server + +Here are a few examples of how to do basic connectivity to SQL Server on Linux. These exercises assume you have installed the command line tools for Linux, mssql-cli, and have a machine or VM running Windows that can connect to the Linux server or VM. + +1. Run a quick test to connect with sqlcmd by executing the following + + `sqlcmd -Usa -Slocalhost` + + Put in your sa password. At the sqlcmd prompt, run the following T-SQL statement + + ```sql + SELECT @@VERSION + GO + ``` + Type in "exit" to quit sqlcmd + + Note: You can connect with any sqlcmd tool from Windows, Linux, or macOS in the same was provided you have connectivity to your Linux Server or VM. The -S parameter would be the hostname or IP address of the Linux Server or VM. + +2. Now test mssql-cli like we did for sqlcmd by running the following command + + `mssql-cli -Usa -Slocalhost` + + You should get a new prompt like sqlcmd. At this prompt type in the following T-SQL command and hit Enter + + ```sql + SELECT @@VERSION + ``` + + Notice as you started typing you see Intellisense functionality kick-in which is one of the differences from sqlcmd. + + If you are not put back into the mssql-cli prompt, type "q" to get back to the prompt. + + mssql-cli does not recognize the "GO" keyword as sqlcmd does. Use a ";" to separate batches. You can also hit F3 to type statements in multiple lines but they will all be in one batch. + + Type in "exit" to quit mssql-cli + + Note: You can connect with any mssql-cli tool from Windows, Linux, or macOS in the same was provided you have connectivity to your Linux Server or VM. The -S parameter would be the hostname or IP address of the Linux Server or VM. + +3. Connect with SQL Server Management Studio (SSMS) using SQL Authentication with the sa account and the server name or IP address:port for your Linux Server. Notice how SSMS works "as is" against the Linux Server and looks almost like a SQL Server on Windows deployment. + + Use Object Explorer and the Query Editor just like you would a normal SQL Server instance. Go through some of the steps in the SSMS tutorial in our documentation at + +4. Go through the the quickstart tutorial for connecting to SQL Server from Azure Data Studio with the SQL Server on Linux deployment at https://docs.microsoft.com/en-us/sql/azure-data-studio/quickstart-sql-server?view=sql-server-2017. + +## How to restore a backup and run queries + +In this exercise, you will learn how to restore a backup of a database to SQL Server on Linux, and run queries against the database. + +Now you will learn the great compatibility story of SQL Server on Linux by restoring a backup from SQL Server on Windows to SQL Server on Linux. And you will interact with this database using sqlcmd and mssql-cli. This section of the lab assumes your Linux Server is connected to the internet. If you are not connected to the internet, you can download the database to restore from and then copy it to your Linux Server (MobaXterm drag and drop is really nice for this) + +1. From your Linux ssh session, run the following command from the bash shell + + `wget https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak` + + Depending on your network speed this should take no more than a few minutes + +2. Copy and restore the WideWorldImporters database. Copy the **cpwwi.sh**, **restorewwi.sh**, and **restorewwi_linux.sql** files from the downloaded zip of the gitHub repo into your home directory on Linux. MobaXterm provides drag and drop capabilities to do this. Copy these files and drop them into the "explorer" pane in MobaXterm on the left hand side from your ssh session. + + Note: You can skip this step if you have already cloned the git repo in the prelab. If you have done this, the scripts in this lab are in the **sqllinuxlab** subdirectory. You can copy them into your home directory or edit them to ensure you have the right path for the WideWorldImporters backup file. + +3. Run the following commands from the bash shell to make the scripts executable (supply the root password if prompted) + + `sudo chmod u+x cpwwi.sh` + + `sudo chmod u+x restorewwi.sh` + +4. Copy the backup file to the SQL Server directory so it can access the file and change permissions on the backup file by executing the following command in the bash shell + + `./cpwwi.sh` + +5. Now restore the database by executing the following command from the bash shell + + `./restorewwi.sh` + +6. Connect with sa to run a query against this database. Run sqlcmd first to connect. Type in the sa password when prompted + + `sqlcmd -Usa -Slocalhost` + +7. From the sqlcmd prompt run these commands + + ```sql + USE WideWorldImporters + GO + SELECT * FROM [Sales].[Customers] + GO + ``` + + Type in "exit" to quit sqlcmd + +9. Now run the same set of commands using mssql-cli. Connect to SQL Server with mssql-cli. Type in the sa password when prompted + + `mssql-cli -Usa -Slocalhost` + +10. Run the following T-SQL commands from the msql-cli prompt (BONUS: Use Intellisense to complete these queries) + + `USE WideWorldImporters;SELECT * FROM Sales.Customers;` + + See how mssql-cli by default will present rows in a vertical record format. Hit Enter or Space to keep paging as many rows as you like. + + Type in "q" at any time to get back to the prompt and "exit" to quit mssql-cli + +## How to configure SQL Server + +In this exercise, you will learn how to configure SQL Server on Linux with the mssql-conf tool. + +There may be situations where you need to enable a traceflag as global and at SQL Server startup time. For Windows, this is done through the SQL Server Configuration Manager. For SQL Server on Linux, you will use the mssql-conf script. A list of all documented traceflags can be found at . + +Let's say you wanted to enable trace flag 1222 for deadlock details to be reported in the ERRORLOG. + +1. Run the following command from an ssh session with the bash shell + + `sudo /opt/mssql/bin/mssql-conf traceflag 1222 on` + +2. Per these instructions, restart SQL Server with the following command: + + `sudo systemctl restart mssql-server` + + Note: If this is successful, the command just returns to the shell prompt + +3. Verify the trace flag was properly set by looking at the ERRORLOG with the following command + + `sudo more /var/opt/mssql/log/errorlog` + +4. Use sqlcmd or mssql-cli to verify this trace flag is set by running the following T-SQL statement + + ```sql + DBCC TRACESTATUS(-1) ``` \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi.sh index 34e4328c..bcbc1b7b 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi.sh @@ -1 +1 @@ -/opt/mssql-tools/bin/sqlcmd -Usa -irestorewwi_linux.sql +/opt/mssql-tools/bin/sqlcmd -Usa -irestorewwi_linux.sql diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi_linux.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi_linux.sql index d22e5251..14b02fc8 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi_linux.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/explore/restorewwi_linux.sql @@ -1,6 +1,6 @@ -restore database WideWorldImporters from disk = '/var/opt/mssql/WideWorldImporters-Full.bak' with -move 'WWI_Primary' to '/var/opt/mssql/data/WideWorldImporters.mdf', -move 'WWI_UserData' to '/var/opt/mssql/data/WideWorldImporters_UserData.ndf', -move 'WWI_Log' to '/var/opt/mssql/data/WideWorldImporters.ldf', -move 'WWI_InMemory_Data_1' to '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1' -go +restore database WideWorldImporters from disk = '/var/opt/mssql/WideWorldImporters-Full.bak' with +move 'WWI_Primary' to '/var/opt/mssql/data/WideWorldImporters.mdf', +move 'WWI_UserData' to '/var/opt/mssql/data/WideWorldImporters_UserData.ndf', +move 'WWI_Log' to '/var/opt/mssql/data/WideWorldImporters.ldf', +move 'WWI_InMemory_Data_1' to '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1' +go diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/readme.md index 97e3c80c..ed5eddd9 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 6 Activity - SQL Server on Linux/readme.md @@ -1,11 +1,11 @@ -# Module 6 Activities - SQL Server on Linux - -These represent demos and examples you can run to deploy and explore and use SQL Server on Linux - -## deploy - -Learn the basics of how to deploy SQL Server on Linux. - -## explore - +# Module 6 Activities - SQL Server on Linux + +These represent demos and examples you can run to deploy and explore and use SQL Server on Linux + +## deploy + +Learn the basics of how to deploy SQL Server on Linux. + +## explore + Learn how to explore SQL Server on Linux including common Linux commands, connecting to SQL Server, restoring a backup, querying, and configuring SQL Server. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/readme.md index 9fdb6161..81529299 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/readme.md @@ -1,11 +1,11 @@ -# Module 7 Activities - SQL Server Containers - -These represent demos and examples to show you the basics of SQL Server containers and how to update and upgrade SQL Server using containers. - -## sqlcontainers - -Learn the basics of SQL Server with containers - -## sqlcontainerupdate - +# Module 7 Activities - SQL Server Containers + +These represent demos and examples to show you the basics of SQL Server containers and how to update and upgrade SQL Server using containers. + +## sqlcontainers + +Learn the basics of SQL Server with containers + +## sqlcontainerupdate + Learn more about storage volumes and updating and upgrading SQL Server using containers. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/cleanup.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/cleanup.sh index 864a7ad2..400cc928 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/cleanup.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/cleanup.sh @@ -1,5 +1,5 @@ -sudo docker stop sql2017cu10 -sudo docker stop sql2 -sudo docker rm sql2017cu10 -sudo docker rm sql2 -sudo docker volume rm sqlvolume sqlvolume2 +sudo docker stop sql2017cu10 +sudo docker stop sql2 +sudo docker rm sql2017cu10 +sudo docker rm sql2 +sudo docker volume rm sqlvolume sqlvolume2 diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/readme.md index 917f1563..7b210f82 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/readme.md @@ -1,56 +1,56 @@ -## SQL Server Containers Fundamentals - -In this exercise you will be exploring the fundamentals for SQL Server containers. - -## Requirements - -- These exercises were built to run using Docker for Linux on RedHat Enterprise Linux. However, you can review all the details of the scripts provided and use them with Docker for Windows or Docker for macOS. -- If using a RedHat Linux Server or VM and Docker is not installed, you can use these steps to install the Docker Community Edition for centOS - - `sudo yum install -y yum-utils device-mapper-persistent-data lvm2` - - `sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo` - - `sudo yum install http://mirror.centos.org/centos/7/extras/x86_64/Packages/pigz-2.3.3-1.el7.centos.x86_64.rpm` - - `sudo yum install docker-ce` - - Then make sure the Docker engine is running with these commands - - `sudo systemctl status docker` - - `sudo systemctl start docker` - -- Make sure all scripts are executable by running the following command - - `chmod u+x *.sh` - -- Restore the WideWorldImporters backup by using the **pullwwi.sh** script. This requires internet connectivity. You can also manually copy the backup into the current directory where you run the exercises. - -## Learning the basics of SQL Server containers - -1. Run **step1_dockerruncu10.sh** to start a container with SQL Server 2017 CU8. This container is called sql2017cu10 - -2. Run **step2_dockercopy.sh** to copy the WWI backyup into the container. - -3. Run **step3_docker_restorewwi.sh** to restore the backup. This uses docker exec to **run sqlcmd inside the container**. Since this takes a few minutes it will run in the background using the -d paramater for docker exec. - -4. Run **step4_dockerrun2.sh** to start another SQL container with the latest SQL 2017 update. This container is called sql2. Notice a different volume is used along with port 1402 instead of 1401. - -5. Run **step5_containers.sh** to see both containers running. You now have two SQL Servers running on the same Linux machine using containers. - -6. Run **step6_procs.sh** to see the process for the Linux host which include the docker daemon. Note the sqlservr processes as children underneath that process. - -7. Run **step7_namespaces.sh** to see the different namespaces for the SQL Server containers - -8. The restore should be finished from Step 3. Run **step8_dockerquery.sh** to run a query for the database by connecting **using sqlcmd outside of the container**. - -9. Use docker exec to interact with the sql2017cu10 container through a shell by executing **step9_dockerexec.sh**. Notice the shell has the hostname used to run the container at the prompt. - -- Run ps -axf to see the isolation of containers and that sqlservr is just about the only process running. - -- Go look at the ERRORLOG file in /var/opt/mssql/log. - -- Exit the shell inside the container by typing **exit**. - +## SQL Server Containers Fundamentals + +In this exercise you will be exploring the fundamentals for SQL Server containers. + +## Requirements + +- These exercises were built to run using Docker for Linux on RedHat Enterprise Linux. However, you can review all the details of the scripts provided and use them with Docker for Windows or Docker for macOS. +- If using a RedHat Linux Server or VM and Docker is not installed, you can use these steps to install the Docker Community Edition for centOS + + `sudo yum install -y yum-utils device-mapper-persistent-data lvm2` + + `sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo` + + `sudo yum install http://mirror.centos.org/centos/7/extras/x86_64/Packages/pigz-2.3.3-1.el7.centos.x86_64.rpm` + + `sudo yum install docker-ce` + + Then make sure the Docker engine is running with these commands + + `sudo systemctl status docker` + + `sudo systemctl start docker` + +- Make sure all scripts are executable by running the following command + + `chmod u+x *.sh` + +- Restore the WideWorldImporters backup by using the **pullwwi.sh** script. This requires internet connectivity. You can also manually copy the backup into the current directory where you run the exercises. + +## Learning the basics of SQL Server containers + +1. Run **step1_dockerruncu10.sh** to start a container with SQL Server 2017 CU8. This container is called sql2017cu10 + +2. Run **step2_dockercopy.sh** to copy the WWI backyup into the container. + +3. Run **step3_docker_restorewwi.sh** to restore the backup. This uses docker exec to **run sqlcmd inside the container**. Since this takes a few minutes it will run in the background using the -d paramater for docker exec. + +4. Run **step4_dockerrun2.sh** to start another SQL container with the latest SQL 2017 update. This container is called sql2. Notice a different volume is used along with port 1402 instead of 1401. + +5. Run **step5_containers.sh** to see both containers running. You now have two SQL Servers running on the same Linux machine using containers. + +6. Run **step6_procs.sh** to see the process for the Linux host which include the docker daemon. Note the sqlservr processes as children underneath that process. + +7. Run **step7_namespaces.sh** to see the different namespaces for the SQL Server containers + +8. The restore should be finished from Step 3. Run **step8_dockerquery.sh** to run a query for the database by connecting **using sqlcmd outside of the container**. + +9. Use docker exec to interact with the sql2017cu10 container through a shell by executing **step9_dockerexec.sh**. Notice the shell has the hostname used to run the container at the prompt. + +- Run ps -axf to see the isolation of containers and that sqlservr is just about the only process running. + +- Go look at the ERRORLOG file in /var/opt/mssql/log. + +- Exit the shell inside the container by typing **exit**. + 10. Leave all containers running as they will be used in the next set of exercises in the **sqlcontainerupdate** folder. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step1_dockerruncu10.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step1_dockerruncu10.sh index 488d3761..c3bfd30f 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step1_dockerruncu10.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step1_dockerruncu10.sh @@ -1,8 +1,8 @@ -sudo docker run -e\ - 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ - --hostname sql2017cu10\ - -p 1401:1433\ - -v sqlvolume:/var/opt/mssql\ - --name sql2017cu10\ - -d\ - mcr.microsoft.com/mssql/server:2017-CU10-ubuntu +sudo docker run -e\ + 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ + --hostname sql2017cu10\ + -p 1401:1433\ + -v sqlvolume:/var/opt/mssql\ + --name sql2017cu10\ + -d\ + mcr.microsoft.com/mssql/server:2017-CU10-ubuntu diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step2_dockercopy.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step2_dockercopy.sh index 6eb2b881..4709a825 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step2_dockercopy.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step2_dockercopy.sh @@ -1 +1 @@ -sudo docker cp WideWorldImporters-Full.bak sql2017cu10:/var/opt/mssql +sudo docker cp WideWorldImporters-Full.bak sql2017cu10:/var/opt/mssql diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step3_docker_restorewwi.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step3_docker_restorewwi.sh index 1e9aabd6..b63149a9 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step3_docker_restorewwi.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step3_docker_restorewwi.sh @@ -1,2 +1,2 @@ -sudo docker exec -d sql2017cu10\ +sudo docker exec -d sql2017cu10\ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Sql2017isfast' -Q 'RESTORE DATABASE WideWorldImp$ \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step4_dockerrun2.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step4_dockerrun2.sh index d4c66502..f53e385e 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step4_dockerrun2.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step4_dockerrun2.sh @@ -1,8 +1,8 @@ -sudo docker run\ - -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ - --hostname sql2\ - -p 1402:1433\ - -v sqlvolume2:/var/opt/mssql\ - --name sql2\ - -d\ +sudo docker run\ + -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ + --hostname sql2\ + -p 1402:1433\ + -v sqlvolume2:/var/opt/mssql\ + --name sql2\ + -d\ mcr.microsoft.com/mssql/server:2017-latest-ubuntu \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step6_procs.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step6_procs.sh index 25a036e4..fa76445b 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step6_procs.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step6_procs.sh @@ -1 +1 @@ -sudo ps -axf +sudo ps -axf diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step7_namespaces.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step7_namespaces.sh index e4a0d05c..a8958882 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step7_namespaces.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step7_namespaces.sh @@ -1 +1 @@ -sudo lsns +sudo lsns diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step8_dockerquery.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step8_dockerquery.sh index 8c5fd6e5..1c144842 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step8_dockerquery.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step8_dockerquery.sh @@ -1 +1 @@ -sqlcmd -Usa -Slocalhost,1401 -Q'USE WideWorldImporters;SELECT * FROM [Application].[People];' -PSql2017isfast +sqlcmd -Usa -Slocalhost,1401 -Q'USE WideWorldImporters;SELECT * FROM [Application].[People];' -PSql2017isfast diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step9_dockerexec.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step9_dockerexec.sh index 3382533e..f73af388 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step9_dockerexec.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainers/step9_dockerexec.sh @@ -1 +1 @@ -sudo docker exec -it sql2017cu10 bash +sudo docker exec -it sql2017cu10 bash diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/cleanup.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/cleanup.sh index ae112902..f4706544 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/cleanup.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/cleanup.sh @@ -1,6 +1,6 @@ -sudo docker stop sql2019 -sudo docker rm sql2019 -sudo docker stop sql2017latest -sudo docker rm sql2017latest - - +sudo docker stop sql2019 +sudo docker rm sql2019 +sudo docker stop sql2017latest +sudo docker rm sql2017latest + + diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/execintodocker.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/execintodocker.sh index 077fae17..5744dd80 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/execintodocker.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/execintodocker.sh @@ -1,2 +1,2 @@ - -sudo docker exec -it sql2017latest bash + +sudo docker exec -it sql2017latest bash diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/readme.md index b298adf6..f6388452 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/readme.md @@ -1,26 +1,26 @@ -# SQL Containers exercises showing volume storage and update/upgrade of containers - -This is a set of exercies to learn more about storage volumes for containers and see how to update, rollback, and upgrade SQL Server using containers. - -## Requirements - -- Complete the exercises in the sqlcontainers folder in this Module. -- Make sure all scripts are executable by running the following command - - `chmod u+x *.sh` - -## Looking at volume storage, updating, rolling back, and upgrading SQL containers - -1. Let's update the sql2017cu10 container with the latest CU by running **step1_dockerupdate.sh**. This has to run a few upgrade scripts so takes a few minutes. While this is running, let's look at volume storage. - -2. See details of the volumes used by the containers from the sqlcontainers exercise volumes by running **step2_inspectvols.sh**. - -3. See what files are stored in the host folders used to provide volume storage by running **step3_volstorage.sh**. - -4. Let's see if the container is updated by running **step4_dockerquery.sh**. If the query cannot run because script upgrades are still running use **execintodocker.sh** to see the status in the ERRORLOG file of the container. - -5. If time permits, you can execute **step5_dockerrollback.sh** to go back to the SQL 2017 CU10 build of that container. - -6. Upgrade the container to SQL Server 2019 preview by execute **step6_dockerupgrade.sh**. - +# SQL Containers exercises showing volume storage and update/upgrade of containers + +This is a set of exercies to learn more about storage volumes for containers and see how to update, rollback, and upgrade SQL Server using containers. + +## Requirements + +- Complete the exercises in the sqlcontainers folder in this Module. +- Make sure all scripts are executable by running the following command + + `chmod u+x *.sh` + +## Looking at volume storage, updating, rolling back, and upgrading SQL containers + +1. Let's update the sql2017cu10 container with the latest CU by running **step1_dockerupdate.sh**. This has to run a few upgrade scripts so takes a few minutes. While this is running, let's look at volume storage. + +2. See details of the volumes used by the containers from the sqlcontainers exercise volumes by running **step2_inspectvols.sh**. + +3. See what files are stored in the host folders used to provide volume storage by running **step3_volstorage.sh**. + +4. Let's see if the container is updated by running **step4_dockerquery.sh**. If the query cannot run because script upgrades are still running use **execintodocker.sh** to see the status in the ERRORLOG file of the container. + +5. If time permits, you can execute **step5_dockerrollback.sh** to go back to the SQL 2017 CU10 build of that container. + +6. Upgrade the container to SQL Server 2019 preview by execute **step6_dockerupgrade.sh**. + 7. Run **cleanup.sh** to stop and remove containers from this exercise. There is a cleanup.sh script in the **sqlcontainers** folder to cleanup containers created for that exercise. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step1_dockerupdate.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step1_dockerupdate.sh index 0e0b027b..dce519dd 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step1_dockerupdate.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step1_dockerupdate.sh @@ -1,10 +1,10 @@ -sudo docker stop sql2017cu10 -sudo docker run\ - -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ - -p 1401:1433\ - -v sqlvolume:/var/opt/mssql\ - --hostname sql2017latest\ - --name\ - sql2017latest\ - -d\ +sudo docker stop sql2017cu10 +sudo docker run\ + -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ + -p 1401:1433\ + -v sqlvolume:/var/opt/mssql\ + --hostname sql2017latest\ + --name\ + sql2017latest\ + -d\ mcr.microsoft.com/mssql/server:2017-latest \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step3_volstorage.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step3_volstorage.sh index 6624b7c1..6e656cd1 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step3_volstorage.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step3_volstorage.sh @@ -1,2 +1,2 @@ -sudo ls /var/lib/docker/volumes/sqlvolume/_data +sudo ls /var/lib/docker/volumes/sqlvolume/_data sudo ls /var/lib/docker/volumes/sqlvolume2/_data \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step4_dockerquery.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step4_dockerquery.sh index 8c5fd6e5..1c144842 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step4_dockerquery.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step4_dockerquery.sh @@ -1 +1 @@ -sqlcmd -Usa -Slocalhost,1401 -Q'USE WideWorldImporters;SELECT * FROM [Application].[People];' -PSql2017isfast +sqlcmd -Usa -Slocalhost,1401 -Q'USE WideWorldImporters;SELECT * FROM [Application].[People];' -PSql2017isfast diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step5_dockerrollback.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step5_dockerrollback.sh index 4c7fc0f3..9eadab05 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step5_dockerrollback.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step5_dockerrollback.sh @@ -1,2 +1,2 @@ -sudo docker stop sql2017latest -sudo docker start sql2017cu10 +sudo docker stop sql2017latest +sudo docker start sql2017cu10 diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step6_dockerupgrade.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step6_dockerupgrade.sh index 6cb27c21..e3e952ef 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step6_dockerupgrade.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 7 Activity - SQL Server Containers/sqlcontainerupdate/step6_dockerupgrade.sh @@ -1,9 +1,9 @@ -sudo docker stop sql2017cu10 -sudo docker stop sql2017latest -sudo docker run\ - -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ - -p 1401:1433\ - -v sqlvolume:/var/opt/mssql\ - --name sql2019\ - -d\ +sudo docker stop sql2017cu10 +sudo docker stop sql2017latest +sudo docker run\ + -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast'\ + -p 1401:1433\ + -v sqlvolume:/var/opt/mssql\ + --name sql2019\ + -d\ mcr.microsoft.com/mssql/rhel/server:2019-CTP2.2 \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/hdfs_external_table.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/hdfs_external_table.sql index e6d910a6..330dbfed 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/hdfs_external_table.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/hdfs_external_table.sql @@ -1,97 +1,97 @@ -USE [master] -GO --- Enabled PB connectivity to a Hadoop HDFS source which in this case is just Azure Blob Storage --- -sp_configure @configname = 'hadoop connectivity', @configvalue = 7; -GO -RECONFIGURE -GO - --- Enable PB export to be able to ingest data into the HDFS target --- -sp_configure 'allow polybase export', 1 -GO -RECONFIGURE -GO - --- STOP: SQL Server must be restarted for this to take effect --- -USE [WideWorldImporters] -GO --- Only run this if you have not already created a master key in the db --- ---CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' ---GO --- IDENTITY: any string (this is not used for authentication to Azure storage). --- SECRET: your Azure storage account key. -DROP DATABASE SCOPED CREDENTIAL AzureStorageCredential -GO -CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential -WITH IDENTITY = 'user', Secret = 'C5aFpK587sIDFIMSEqXwA08xlhDM34/rfOz2g+sVq/hcKReo6agvT9JZcWGe9NtEyHEypK095WZtDdE/gkKZNQ==' -GO --- LOCATION: Azure account storage account name and blob container name. --- CREDENTIAL: The database scoped credential created above. -DROP EXTERNAL DATA SOURCE bwdatalake -GO -CREATE EXTERNAL DATA SOURCE bwdatalake with ( - TYPE = HADOOP, - LOCATION ='wasbs://wwi@bwdatalake.blob.core.windows.net', - CREDENTIAL = AzureStorageCredential -) -GO --- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). -CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( - FORMAT_TYPE = DELIMITEDTEXT, - FORMAT_OPTIONS (FIELD_TERMINATOR ='|', - USE_TYPE_DEFAULT = TRUE)) -GO --- Create a schema called hdfs --- -DROP SCHEMA hdfs -GO -CREATE SCHEMA hdfs -GO --- LOCATION: path to file or directory that contains the data (relative to HDFS root). -DROP EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] -GO -CREATE EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] ( - [OrderID] int NOT NULL, - [CustomerID] int NOT NULL, - [Rating] int NULL, - [Review_Comments] nvarchar(1000) NOT NULL -) -WITH (LOCATION='/WWI/', - DATA_SOURCE = bwdatalake, - FILE_FORMAT = TextFileFormat -) -GO - --- Ingest some data --- -INSERT INTO [hdfs].[WWI_Order_Reviews] VALUES (1, 832, 10, 'I had a great experience with my order') -GO -CREATE STATISTICS StatsforReviews on [hdfs].[WWI_Order_Reviews](OrderID, CustomerID) -GO - --- Now query the external table --- -SELECT * FROM [hdfs].[WWI_Order_Reviews] -GO - --- Let's do a filter to enable pushdown --- -SELECT * FROM [hdfs].[WWI_Order_Reviews] -WHERE OrderID = 1 -GO - --- Let's join the review with our order and customer data --- -SELECT o.OrderDate, c.CustomerName, p.FullName as SalesPerson, wor.Rating, wor.Review_Comments -FROM [Sales].[Orders] o -JOIN [hdfs].[WWI_Order_Reviews] wor -ON o.OrderID = wor.OrderID -JOIN [Application].[People] p -ON p.PersonID = o.SalespersonPersonID -JOIN [Sales].[Customers] c -ON c.CustomerID = wor.CustomerID +USE [master] +GO +-- Enabled PB connectivity to a Hadoop HDFS source which in this case is just Azure Blob Storage +-- +sp_configure @configname = 'hadoop connectivity', @configvalue = 7; +GO +RECONFIGURE +GO + +-- Enable PB export to be able to ingest data into the HDFS target +-- +sp_configure 'allow polybase export', 1 +GO +RECONFIGURE +GO + +-- STOP: SQL Server must be restarted for this to take effect +-- +USE [WideWorldImporters] +GO +-- Only run this if you have not already created a master key in the db +-- +--CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' +--GO +-- IDENTITY: any string (this is not used for authentication to Azure storage). +-- SECRET: your Azure storage account key. +DROP DATABASE SCOPED CREDENTIAL AzureStorageCredential +GO +CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential +WITH IDENTITY = 'user', Secret = 'C5aFpK587sIDFIMSEqXwA08xlhDM34/rfOz2g+sVq/hcKReo6agvT9JZcWGe9NtEyHEypK095WZtDdE/gkKZNQ==' +GO +-- LOCATION: Azure account storage account name and blob container name. +-- CREDENTIAL: The database scoped credential created above. +DROP EXTERNAL DATA SOURCE bwdatalake +GO +CREATE EXTERNAL DATA SOURCE bwdatalake with ( + TYPE = HADOOP, + LOCATION ='wasbs://wwi@bwdatalake.blob.core.windows.net', + CREDENTIAL = AzureStorageCredential +) +GO +-- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). +CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( + FORMAT_TYPE = DELIMITEDTEXT, + FORMAT_OPTIONS (FIELD_TERMINATOR ='|', + USE_TYPE_DEFAULT = TRUE)) +GO +-- Create a schema called hdfs +-- +DROP SCHEMA hdfs +GO +CREATE SCHEMA hdfs +GO +-- LOCATION: path to file or directory that contains the data (relative to HDFS root). +DROP EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] +GO +CREATE EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] ( + [OrderID] int NOT NULL, + [CustomerID] int NOT NULL, + [Rating] int NULL, + [Review_Comments] nvarchar(1000) NOT NULL +) +WITH (LOCATION='/WWI/', + DATA_SOURCE = bwdatalake, + FILE_FORMAT = TextFileFormat +) +GO + +-- Ingest some data +-- +INSERT INTO [hdfs].[WWI_Order_Reviews] VALUES (1, 832, 10, 'I had a great experience with my order') +GO +CREATE STATISTICS StatsforReviews on [hdfs].[WWI_Order_Reviews](OrderID, CustomerID) +GO + +-- Now query the external table +-- +SELECT * FROM [hdfs].[WWI_Order_Reviews] +GO + +-- Let's do a filter to enable pushdown +-- +SELECT * FROM [hdfs].[WWI_Order_Reviews] +WHERE OrderID = 1 +GO + +-- Let's join the review with our order and customer data +-- +SELECT o.OrderDate, c.CustomerName, p.FullName as SalesPerson, wor.Rating, wor.Review_Comments +FROM [Sales].[Orders] o +JOIN [hdfs].[WWI_Order_Reviews] wor +ON o.OrderID = wor.OrderID +JOIN [Application].[People] p +ON p.PersonID = o.SalespersonPersonID +JOIN [Sales].[Customers] c +ON c.CustomerID = wor.CustomerID GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/polybase_status.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/polybase_status.sql index 94ca9eb7..c1c745c0 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/polybase_status.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/polybase_status.sql @@ -1,12 +1,12 @@ --- List out the nodes in the scale out group --- -SELECT * FROM sys.dm_exec_compute_nodes -GO --- Get more details about the status of the nodes --- -SELECT * FROM sys.dm_exec_compute_node_status -GO --- List out detailed errors from the nodes --- -SELECT * FROM sys.dm_exec_compute_node_errors +-- List out the nodes in the scale out group +-- +SELECT * FROM sys.dm_exec_compute_nodes +GO +-- Get more details about the status of the nodes +-- +SELECT * FROM sys.dm_exec_compute_node_status +GO +-- List out detailed errors from the nodes +-- +SELECT * FROM sys.dm_exec_compute_node_errors GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/readme.md index 36fb1c13..454608ee 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/readme.md @@ -1,51 +1,51 @@ -# SQL Server 2019 Polybase Fundamentals - -This folder contains demo scripts to show the basic funcionality of Polybase by examining the configuration of nodes through DMV, creating an external table over HDFS, and monitoring execution details through DMVs. - -## Requirements - Install and Configure Polybase - -These demos require that you install SQL Server 2019 on Windows Server and configure a head node and at least one compute node (i.e. a scale out group). This demo currently requires SQL Server 2019 CTP 2.3 or higher. - -I used the installation instructions in the documentation from: - -https://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-installation?view=sql-server-ver15 - -and this to setup the scale out group - -https://docs.microsoft.com/en-us/sql/relational-databases/polybase/configure-scale-out-groups-windows?view=sql-server-ver15 - -For my demos, I used the following deployment to setup a head node and 2 compute nodes using Azure (Note: I used the same resource group for all of these servers so they were part of the same virtual network) - -1 Windows Server 2019 Server which I configured using Server Manager as a domain controller (with a domain name of bobsql.com) - -1 Windows Server 2019 Server (bwpolybase) which I joined to the bobsql.com domain. I installed SQL Server 2019 and chose the Polybase feature (including Java which required me to stop the install and install JRE 8 from the web). I chose the option for a Scale out group which required me to use the domain admin from bobsql.com during the install option for services. - -2 other Windows Server 2019 Servers (bwpolybase2 and bwpolybase3)) with the same process to join the domain bobsql.com and install SQL server 2019 with Polybase. - -I had to enable Polybase on all 3 SQL Servers per the documentation using sp_configure 'polybase enabled' 1 and this required a restart of SQL SErver. You must first do this step before setting up the scale out group. - -I also first ensured that the Windows Firewall was configured for SQL Server and Polybase to open up firewall ports. Rules are already installed you just have to make sure they are enabled - -- SQL Server PolyBase - Database Engine - (TCP-In) -- SQL Server PolyBase - PolyBase Services - (TCP-In) -- SQL Server PolyBase - SQL Browser - (UDP-In) - -I then used the sp_polybase_join_group procedure per the documentation on bwpolybase2 and bwpolybase3 to join the scale out group. This required restarting the Polybase services on each machine. - -## Demo Steps - -### Check the Polybase configuration - -1. Run the T-SQL commands in the script **polybase_status.sql** to see configuration of the scale out group and details of the head and compute nodes - -2. Use SSMS to browse tables in the DWConfiguration, DWDiagnostics, and DWQueue databases which are installed on all nodes. - -### Create an external table and track query and polybase execution - -1. Download and restore the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases/wide-world-importers - -2. For my demo, I simply setup an Azure storage container using the instructions as found at https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal (note I did not create a blob just the storage account and container which in my case I named **wwi**). - -3. Run all the T-SQL commands in **hdfs_external_table.sql**. You will need to edit the appropriate details to point to your Azure storage container including the credential and location for the data source - +# SQL Server 2019 Polybase Fundamentals + +This folder contains demo scripts to show the basic funcionality of Polybase by examining the configuration of nodes through DMV, creating an external table over HDFS, and monitoring execution details through DMVs. + +## Requirements - Install and Configure Polybase + +These demos require that you install SQL Server 2019 on Windows Server and configure a head node and at least one compute node (i.e. a scale out group). This demo currently requires SQL Server 2019 CTP 2.3 or higher. + +I used the installation instructions in the documentation from: + +https://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-installation?view=sql-server-ver15 + +and this to setup the scale out group + +https://docs.microsoft.com/en-us/sql/relational-databases/polybase/configure-scale-out-groups-windows?view=sql-server-ver15 + +For my demos, I used the following deployment to setup a head node and 2 compute nodes using Azure (Note: I used the same resource group for all of these servers so they were part of the same virtual network) + +1 Windows Server 2019 Server which I configured using Server Manager as a domain controller (with a domain name of bobsql.com) + +1 Windows Server 2019 Server (bwpolybase) which I joined to the bobsql.com domain. I installed SQL Server 2019 and chose the Polybase feature (including Java which required me to stop the install and install JRE 8 from the web). I chose the option for a Scale out group which required me to use the domain admin from bobsql.com during the install option for services. + +2 other Windows Server 2019 Servers (bwpolybase2 and bwpolybase3)) with the same process to join the domain bobsql.com and install SQL server 2019 with Polybase. + +I had to enable Polybase on all 3 SQL Servers per the documentation using sp_configure 'polybase enabled' 1 and this required a restart of SQL SErver. You must first do this step before setting up the scale out group. + +I also first ensured that the Windows Firewall was configured for SQL Server and Polybase to open up firewall ports. Rules are already installed you just have to make sure they are enabled + +- SQL Server PolyBase - Database Engine - (TCP-In) +- SQL Server PolyBase - PolyBase Services - (TCP-In) +- SQL Server PolyBase - SQL Browser - (UDP-In) + +I then used the sp_polybase_join_group procedure per the documentation on bwpolybase2 and bwpolybase3 to join the scale out group. This required restarting the Polybase services on each machine. + +## Demo Steps + +### Check the Polybase configuration + +1. Run the T-SQL commands in the script **polybase_status.sql** to see configuration of the scale out group and details of the head and compute nodes + +2. Use SSMS to browse tables in the DWConfiguration, DWDiagnostics, and DWQueue databases which are installed on all nodes. + +### Create an external table and track query and polybase execution + +1. Download and restore the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases/wide-world-importers + +2. For my demo, I simply setup an Azure storage container using the instructions as found at https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal (note I did not create a blob just the storage account and container which in my case I named **wwi**). + +3. Run all the T-SQL commands in **hdfs_external_table.sql**. You will need to edit the appropriate details to point to your Azure storage container including the credential and location for the data source + 4. The the T-SQL commands in **trace_pb_query_execution.sql** to trace the execution of a query in Polybase. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/trace_pb_query_execution.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/trace_pb_query_execution.sql index c96739a9..2a59498b 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/trace_pb_query_execution.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/polybase/trace_pb_query_execution.sql @@ -1,37 +1,37 @@ --- Find out queries against external tables --- -SELECT er.execution_id, t.*, er.* -FROM sys.dm_exec_distributed_requests er -CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS t -ORDER BY end_time DESC -go - --- Find your execution_id and use this for the next query --- -SELECT execution_id, step_index, operation_type, distribution_type, location_type, status, total_elapsed_time, command -FROM sys.dm_exec_distributed_request_steps -WHERE execution_id = 'QID1285' -GO - --- Get more details on each step --- -SELECT execution_id, compute_node_id, spid, step_index, distribution_id, status, total_elapsed_time, row_count -FROM sys.dm_exec_distributed_sql_requests -WHERE execution_id = 'QID1285' -GO - --- Get more details from the compute nodes --- -SELECT * -FROM sys.dm_exec_dms_workers -WHERE execution_id = 'QID1285' -ORDER BY step_index, dms_step_index, distribution_id -go - --- Look more at external operations --- -SELECT * -FROM sys.dm_exec_external_work -WHERE execution_id = 'QID1285' -GO - +-- Find out queries against external tables +-- +SELECT er.execution_id, t.*, er.* +FROM sys.dm_exec_distributed_requests er +CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS t +ORDER BY end_time DESC +go + +-- Find your execution_id and use this for the next query +-- +SELECT execution_id, step_index, operation_type, distribution_type, location_type, status, total_elapsed_time, command +FROM sys.dm_exec_distributed_request_steps +WHERE execution_id = 'QID1285' +GO + +-- Get more details on each step +-- +SELECT execution_id, compute_node_id, spid, step_index, distribution_id, status, total_elapsed_time, row_count +FROM sys.dm_exec_distributed_sql_requests +WHERE execution_id = 'QID1285' +GO + +-- Get more details from the compute nodes +-- +SELECT * +FROM sys.dm_exec_dms_workers +WHERE execution_id = 'QID1285' +ORDER BY step_index, dms_step_index, distribution_id +go + +-- Look more at external operations +-- +SELECT * +FROM sys.dm_exec_external_work +WHERE execution_id = 'QID1285' +GO + diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/readme.md index 193babcb..b15af8f0 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/readme.md @@ -1,11 +1,11 @@ -# Module 8 Activities - Data Virtualization - -These represent demos and examples to show you the basics of SQL Server containers and how to update and upgrade SQL Server using containers. - -## polybase - -Learn the basics of Polybase with SQL Server 2019 - -## sqldatahub - +# Module 8 Activities - Data Virtualization + +These represent demos and examples to show you the basics of SQL Server containers and how to update and upgrade SQL Server using containers. + +## polybase + +Learn the basics of Polybase with SQL Server 2019 + +## sqldatahub + Learn how to connect to many different data sources with SQL Server 2019 to create your own data hub connecting to SQL Server 2008R2, Azure SQL Database, CosmosDB, Oracle, HDFS, and SAP HANA. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/azuredb_external_table.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/azuredb_external_table.sql index c40707a6..48328ef4 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/azuredb_external_table.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/azuredb_external_table.sql @@ -1,94 +1,94 @@ -USE [WideWorldImporters] -GO -CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' -GO -/* specify credentials to external data source -* IDENTITY: user name for external source. -* SECRET: password for external source. -*/ -DROP DATABASE SCOPED CREDENTIAL AzureSQLDatabaseCredentials -GO -CREATE DATABASE SCOPED CREDENTIAL AzureSQLDatabaseCredentials -WITH IDENTITY = 'thewandog', Secret = '$cprsqlserver2019' -GO -/* LOCATION: Location string should be of format '://[:]'. -* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. -* CREDENTIAL: the database scoped credential, created above. -*/ -DROP EXTERNAL DATA SOURCE AzureSQLDatabase -GO -CREATE EXTERNAL DATA SOURCE AzureSQLDatabase -WITH ( -LOCATION = 'sqlserver://bwazuredb.database.windows.net', -PUSHDOWN = ON, -CREDENTIAL = AzureSQLDatabaseCredentials -) -GO -DROP SCHEMA azuresqldb -go -CREATE SCHEMA azuresqldb -GO --- WWI was created with Latin1_General_100_CI_AS collation so I need to make my columns that --- if I want to support UNION. --- -DROP EXTERNAL TABLE azuresqldb.ModernStockItems -GO -CREATE EXTERNAL TABLE azuresqldb.ModernStockItems -( - [StockItemID] [int] NOT NULL, - [StockItemName] [nvarchar](100) COLLATE Latin1_General_100_CI_AS NOT NULL, - [SupplierID] [int] NOT NULL, - [ColorID] [int] NULL, - [UnitPackageID] [int] NOT NULL, - [OuterPackageID] [int] NOT NULL, - [Brand] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, - [Size] [nvarchar](20) COLLATE Latin1_General_100_CI_AS NULL, - [LeadTimeDays] [int] NOT NULL, - [QuantityPerOuter] [int] NOT NULL, - [IsChillerStock] [bit] NOT NULL, - [Barcode] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, - [TaxRate] [decimal](18, 3) NOT NULL, - [UnitPrice] [decimal](18, 2) NOT NULL, - [RecommendedRetailPrice] [decimal](18, 2) NULL, - [TypicalWeightPerUnit] [decimal](18, 3) NOT NULL, - --[MarketingComments] [nvarchar](max) NULL, - --[InternalComments] [nvarchar](max) NULL, - --[Photo] [varbinary](max) NULL, - --[CustomFields] [nvarchar](max) NULL, - --[Tags] AS (json_query([CustomFields],N'$.Tags')), - --[SearchDetails] AS (concat([StockItemName],N' ',[MarketingComments])), - [LastEditedBy] [int] NOT NULL -) - WITH ( - LOCATION='wwiazure.dbo.ModernStockItems', - DATA_SOURCE=AzureSQLDatabase -) -GO -CREATE STATISTICS ModernStockItemsStats ON azuresqldb.ModernStockItems ([StockItemID]) WITH FULLSCAN -GO --- Let's scan the table first to make sure it works --- -SELECT * FROM azuresqldb.ModernStockItems -GO --- Now try to filter on just the stockitemid --- -SELECT * FROM azuresqldb.ModernStockItems WHERE StockItemID = 100000 -GO --- Find all stockitems from the Graphic Design Institute supplier --- -SELECT msi.StockItemName, msi.Brand, c.ColorName -FROM azuresqldb.ModernStockItems msi -JOIN [Purchasing].[Suppliers] s -ON msi.SupplierID = s.SupplierID -and s.SupplierName = 'Graphic Design Institute' -JOIN [Warehouse].[Colors] c -ON msi.ColorID = c.ColorID -UNION -SELECT si.StockItemName, si.Brand, c.ColorName -FROM [Warehouse].[StockItems] si -JOIN [Purchasing].[Suppliers] s -ON si.SupplierID = s.SupplierID -and s.SupplierName = 'Graphic Design Institute' -JOIN [Warehouse].[Colors] c -ON si.ColorID = c.ColorID +USE [WideWorldImporters] +GO +CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' +GO +/* specify credentials to external data source +* IDENTITY: user name for external source. +* SECRET: password for external source. +*/ +DROP DATABASE SCOPED CREDENTIAL AzureSQLDatabaseCredentials +GO +CREATE DATABASE SCOPED CREDENTIAL AzureSQLDatabaseCredentials +WITH IDENTITY = 'thewandog', Secret = '$cprsqlserver2019' +GO +/* LOCATION: Location string should be of format '://[:]'. +* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. +* CREDENTIAL: the database scoped credential, created above. +*/ +DROP EXTERNAL DATA SOURCE AzureSQLDatabase +GO +CREATE EXTERNAL DATA SOURCE AzureSQLDatabase +WITH ( +LOCATION = 'sqlserver://bwazuredb.database.windows.net', +PUSHDOWN = ON, +CREDENTIAL = AzureSQLDatabaseCredentials +) +GO +DROP SCHEMA azuresqldb +go +CREATE SCHEMA azuresqldb +GO +-- WWI was created with Latin1_General_100_CI_AS collation so I need to make my columns that +-- if I want to support UNION. +-- +DROP EXTERNAL TABLE azuresqldb.ModernStockItems +GO +CREATE EXTERNAL TABLE azuresqldb.ModernStockItems +( + [StockItemID] [int] NOT NULL, + [StockItemName] [nvarchar](100) COLLATE Latin1_General_100_CI_AS NOT NULL, + [SupplierID] [int] NOT NULL, + [ColorID] [int] NULL, + [UnitPackageID] [int] NOT NULL, + [OuterPackageID] [int] NOT NULL, + [Brand] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, + [Size] [nvarchar](20) COLLATE Latin1_General_100_CI_AS NULL, + [LeadTimeDays] [int] NOT NULL, + [QuantityPerOuter] [int] NOT NULL, + [IsChillerStock] [bit] NOT NULL, + [Barcode] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, + [TaxRate] [decimal](18, 3) NOT NULL, + [UnitPrice] [decimal](18, 2) NOT NULL, + [RecommendedRetailPrice] [decimal](18, 2) NULL, + [TypicalWeightPerUnit] [decimal](18, 3) NOT NULL, + --[MarketingComments] [nvarchar](max) NULL, + --[InternalComments] [nvarchar](max) NULL, + --[Photo] [varbinary](max) NULL, + --[CustomFields] [nvarchar](max) NULL, + --[Tags] AS (json_query([CustomFields],N'$.Tags')), + --[SearchDetails] AS (concat([StockItemName],N' ',[MarketingComments])), + [LastEditedBy] [int] NOT NULL +) + WITH ( + LOCATION='wwiazure.dbo.ModernStockItems', + DATA_SOURCE=AzureSQLDatabase +) +GO +CREATE STATISTICS ModernStockItemsStats ON azuresqldb.ModernStockItems ([StockItemID]) WITH FULLSCAN +GO +-- Let's scan the table first to make sure it works +-- +SELECT * FROM azuresqldb.ModernStockItems +GO +-- Now try to filter on just the stockitemid +-- +SELECT * FROM azuresqldb.ModernStockItems WHERE StockItemID = 100000 +GO +-- Find all stockitems from the Graphic Design Institute supplier +-- +SELECT msi.StockItemName, msi.Brand, c.ColorName +FROM azuresqldb.ModernStockItems msi +JOIN [Purchasing].[Suppliers] s +ON msi.SupplierID = s.SupplierID +and s.SupplierName = 'Graphic Design Institute' +JOIN [Warehouse].[Colors] c +ON msi.ColorID = c.ColorID +UNION +SELECT si.StockItemName, si.Brand, c.ColorName +FROM [Warehouse].[StockItems] si +JOIN [Purchasing].[Suppliers] s +ON si.SupplierID = s.SupplierID +and s.SupplierName = 'Graphic Design Institute' +JOIN [Warehouse].[Colors] c +ON si.ColorID = c.ColorID GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/createazuredbtable.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/createazuredbtable.sql index d5521292..eaf7ff04 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/createazuredbtable.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/createazuredbtable.sql @@ -1,61 +1,61 @@ --- Database created in Azure is called wwiazure --- This is not managed instance so you can't execute a USE database --- Create a new database called wwiazure (server tier doesn't matter for this demo) --- --- This table is supposed to mimic the [Warehouse].[StockItems] table in the WWI database --- in SQL Server. I need to use Latin1_General_100_CI_AS collation for the columns because that --- is how WWI was created so if I want to UNION data together with WWI I must use that collation -DROP TABLE IF EXISTS [ModernStockItems] -GO -CREATE TABLE [ModernStockItems]( - [StockItemID] [int] NOT NULL, - [StockItemName] [nvarchar](100) COLLATE Latin1_General_100_CI_AS NOT NULL, - [SupplierID] [int] NOT NULL, - [ColorID] [int] NULL, - [UnitPackageID] [int] NOT NULL, - [OuterPackageID] [int] NOT NULL, - [Brand] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, - [Size] [nvarchar](20) COLLATE Latin1_General_100_CI_AS NULL, - [LeadTimeDays] [int] NOT NULL, - [QuantityPerOuter] [int] NOT NULL, - [IsChillerStock] [bit] NOT NULL, - [Barcode] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, - [TaxRate] [decimal](18, 3) NOT NULL, - [UnitPrice] [decimal](18, 2) NOT NULL, - [RecommendedRetailPrice] [decimal](18, 2) NULL, - [TypicalWeightPerUnit] [decimal](18, 3) NOT NULL, - --[MarketingComments] [nvarchar](max) NULL, -- Not allowed for an external table - --[InternalComments] [nvarchar](max) NULL, -- Not allowed for an external table - --[Photo] [varbinary](max) NULL, -- Not allowed for an external table - --[CustomFields] [nvarchar](max) NULL, -- Not allowed for an external table - --[Tags] AS (json_query([CustomFields],N'$.Tags')), -- Not allowed for an external table - --[SearchDetails] AS (concat([StockItemName],N' ',[MarketingComments])), -- Not allowed for an external table - [LastEditedBy] [int] NOT NULL, -CONSTRAINT [PK_Warehouse_StockItems] PRIMARY KEY CLUSTERED -( - [StockItemID] ASC -) -) -GO --- Now insert some data. We don't coordinate with unique keys in WWI on SQL Server --- so pick numbers way larger than exist in the current StockItems in WWI which is only 227 -INSERT INTO ModernStockItems VALUES -(100000, -'Dallas Cowboys Jersey', -5, -4, -- Blue -4, -- Box -4, -- Bob -'Under Armour', -'L', -30, -1, -0, -'123456789', -2.0, -50, -75, -2.0, -1 -) -GO +-- Database created in Azure is called wwiazure +-- This is not managed instance so you can't execute a USE database +-- Create a new database called wwiazure (server tier doesn't matter for this demo) +-- +-- This table is supposed to mimic the [Warehouse].[StockItems] table in the WWI database +-- in SQL Server. I need to use Latin1_General_100_CI_AS collation for the columns because that +-- is how WWI was created so if I want to UNION data together with WWI I must use that collation +DROP TABLE IF EXISTS [ModernStockItems] +GO +CREATE TABLE [ModernStockItems]( + [StockItemID] [int] NOT NULL, + [StockItemName] [nvarchar](100) COLLATE Latin1_General_100_CI_AS NOT NULL, + [SupplierID] [int] NOT NULL, + [ColorID] [int] NULL, + [UnitPackageID] [int] NOT NULL, + [OuterPackageID] [int] NOT NULL, + [Brand] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, + [Size] [nvarchar](20) COLLATE Latin1_General_100_CI_AS NULL, + [LeadTimeDays] [int] NOT NULL, + [QuantityPerOuter] [int] NOT NULL, + [IsChillerStock] [bit] NOT NULL, + [Barcode] [nvarchar](50) COLLATE Latin1_General_100_CI_AS NULL, + [TaxRate] [decimal](18, 3) NOT NULL, + [UnitPrice] [decimal](18, 2) NOT NULL, + [RecommendedRetailPrice] [decimal](18, 2) NULL, + [TypicalWeightPerUnit] [decimal](18, 3) NOT NULL, + --[MarketingComments] [nvarchar](max) NULL, -- Not allowed for an external table + --[InternalComments] [nvarchar](max) NULL, -- Not allowed for an external table + --[Photo] [varbinary](max) NULL, -- Not allowed for an external table + --[CustomFields] [nvarchar](max) NULL, -- Not allowed for an external table + --[Tags] AS (json_query([CustomFields],N'$.Tags')), -- Not allowed for an external table + --[SearchDetails] AS (concat([StockItemName],N' ',[MarketingComments])), -- Not allowed for an external table + [LastEditedBy] [int] NOT NULL, +CONSTRAINT [PK_Warehouse_StockItems] PRIMARY KEY CLUSTERED +( + [StockItemID] ASC +) +) +GO +-- Now insert some data. We don't coordinate with unique keys in WWI on SQL Server +-- so pick numbers way larger than exist in the current StockItems in WWI which is only 227 +INSERT INTO ModernStockItems VALUES +(100000, +'Dallas Cowboys Jersey', +5, +4, -- Blue +4, -- Box +4, -- Bob +'Under Armour', +'L', +30, +1, +0, +'123456789', +2.0, +50, +75, +2.0, +1 +) +GO diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/readme.md index 49e87cf5..3d3c4d01 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/azuredb/readme.md @@ -1,13 +1,13 @@ -# SQL Server 2019 Polybase example connecting to Azure SQL Database - -This demo shows you how to setup an Azure SQL Database external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. - -## Requirements - -1. Create a new database in Azure. For purposes of this demo it doesn't matter whether the database is a Managed Instance or any tier of Azure DB. For purposes of this demo I called my database **wwiazure**. To make connectivity easier, I created a new virtual network for my Azure SQL Server and included the polybase head node server, bwpolybase, in the same virtual network as Azure SQL Server. You can read more about how to do this at https://docs.microsoft.com/en-us/azure/sql-database/sql-database-vnet-service-endpoint-rule-overview - -2. Connecting to the azure SQL Server hosting your database, I ran the script **createazuredbtable.sql** to create the table and insert some data. Notice the COLLATE clauses I needed to use to match what WWI uses from the example database. The table created for this demo mimics the **Warehouse.StockItem** table in the WideWorldImporters database. - -## Demo Steps - +# SQL Server 2019 Polybase example connecting to Azure SQL Database + +This demo shows you how to setup an Azure SQL Database external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. + +## Requirements + +1. Create a new database in Azure. For purposes of this demo it doesn't matter whether the database is a Managed Instance or any tier of Azure DB. For purposes of this demo I called my database **wwiazure**. To make connectivity easier, I created a new virtual network for my Azure SQL Server and included the polybase head node server, bwpolybase, in the same virtual network as Azure SQL Server. You can read more about how to do this at https://docs.microsoft.com/en-us/azure/sql-database/sql-database-vnet-service-endpoint-rule-overview + +2. Connecting to the azure SQL Server hosting your database, I ran the script **createazuredbtable.sql** to create the table and insert some data. Notice the COLLATE clauses I needed to use to match what WWI uses from the example database. The table created for this demo mimics the **Warehouse.StockItem** table in the WideWorldImporters database. + +## Demo Steps + 1. On my SQL Server 2019 head node (bwpolybase), I used the **azuredb_external_table.sql** script to create the database scoped credential, externaL data source, external table, and sample SELECT statements to query the external table and join it with local SQL Server 2019 tables in the WideWorldImporters database. Take note of the COLLATE required to match WWI and the syntax for the external data source to point to the azure SQL Server. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/cosmosdb_external_table.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/cosmosdb_external_table.sql index 51eac544..60c0a6be 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/cosmosdb_external_table.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/cosmosdb_external_table.sql @@ -1,69 +1,69 @@ -USE [WideWorldImporters] -GO -CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' -GO -/* specify credentials to external data source -* IDENTITY: user name for external source. -* SECRET: password for external source. -*/ -DROP DATABASE SCOPED CREDENTIAL CosmosDBCredentials -GO --- You can get the IDENTITY (user) and secret (password) from the Connection String option in the --- Azure portal -CREATE DATABASE SCOPED CREDENTIAL CosmosDBCredentials -WITH IDENTITY = 'wwi', Secret = 'hSoxMUeEgNjeeWh4FTz5jmGRlSN4Ko6HoYqiJsbleFzewe86EEXJrvwkAqBgitypJdjUbeJqnTVNBO6NUa0DZQ==' -GO -DROP EXTERNAL DATA SOURCE CosmosDB -GO --- The LOCATION is built from : from the Connection String in the Azure Portal -CREATE EXTERNAL DATA SOURCE CosmosDB -WITH ( -LOCATION = 'mongodb://wwi.documents.azure.com:10255', -PUSHDOWN = ON, -CREDENTIAL = CosmosDBCredentials -) -GO -DROP SCHEMA cosmosdb -go -CREATE SCHEMA cosmosdb -GO -/* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format -* DATA_SOURCE: the external data source, created above. -*/ -DROP EXTERNAL TABLE cosmosdb.Orders -GO -CREATE EXTERNAL TABLE cosmosdb.Orders -( - [_id] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, - [id] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, - [OrderID] int NOT NULL, - [SalesPersonPersonID] int NOT NULL, - [CustomerName] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, - [CustomerContact] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, - [OrderDate] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, - [CustomerPO] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NULL, - [ExpectedDeliverDate] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL -) - WITH ( - LOCATION='WideWorldImporters.Orders', - DATA_SOURCE=CosmosDB -) -GO -CREATE STATISTICS CosmosDBOrderSalesPersonStats ON cosmosdb.Orders ([SalesPersonPersonID]) WITH FULLSCAN -GO - --- Scan the external table just to make sure it works --- -SELECT * FROM cosmosdb.Orders -GO --- Filter on a specific SalesPersonPersonID --- -SELECT * FROM cosmosdb.Orders WHERE SalesPersonPersonID = 2 -GO --- Find out the name of the salesperson and which customer they worked with --- to test out the new mobile app experience. -SELECT FullName, o.CustomerName, o.CustomerContact, o.OrderDate -FROM cosmosdb.Orders o -JOIN [Application].[People] p -ON o.SalesPersonPersonID = p.PersonID -GO +USE [WideWorldImporters] +GO +CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' +GO +/* specify credentials to external data source +* IDENTITY: user name for external source. +* SECRET: password for external source. +*/ +DROP DATABASE SCOPED CREDENTIAL CosmosDBCredentials +GO +-- You can get the IDENTITY (user) and secret (password) from the Connection String option in the +-- Azure portal +CREATE DATABASE SCOPED CREDENTIAL CosmosDBCredentials +WITH IDENTITY = 'wwi', Secret = 'hSoxMUeEgNjeeWh4FTz5jmGRlSN4Ko6HoYqiJsbleFzewe86EEXJrvwkAqBgitypJdjUbeJqnTVNBO6NUa0DZQ==' +GO +DROP EXTERNAL DATA SOURCE CosmosDB +GO +-- The LOCATION is built from : from the Connection String in the Azure Portal +CREATE EXTERNAL DATA SOURCE CosmosDB +WITH ( +LOCATION = 'mongodb://wwi.documents.azure.com:10255', +PUSHDOWN = ON, +CREDENTIAL = CosmosDBCredentials +) +GO +DROP SCHEMA cosmosdb +go +CREATE SCHEMA cosmosdb +GO +/* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format +* DATA_SOURCE: the external data source, created above. +*/ +DROP EXTERNAL TABLE cosmosdb.Orders +GO +CREATE EXTERNAL TABLE cosmosdb.Orders +( + [_id] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, + [id] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, + [OrderID] int NOT NULL, + [SalesPersonPersonID] int NOT NULL, + [CustomerName] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, + [CustomerContact] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, + [OrderDate] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL, + [CustomerPO] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NULL, + [ExpectedDeliverDate] NVARCHAR(100) COLLATE Latin1_General_100_CI_AS NOT NULL +) + WITH ( + LOCATION='WideWorldImporters.Orders', + DATA_SOURCE=CosmosDB +) +GO +CREATE STATISTICS CosmosDBOrderSalesPersonStats ON cosmosdb.Orders ([SalesPersonPersonID]) WITH FULLSCAN +GO + +-- Scan the external table just to make sure it works +-- +SELECT * FROM cosmosdb.Orders +GO +-- Filter on a specific SalesPersonPersonID +-- +SELECT * FROM cosmosdb.Orders WHERE SalesPersonPersonID = 2 +GO +-- Find out the name of the salesperson and which customer they worked with +-- to test out the new mobile app experience. +SELECT FullName, o.CustomerName, o.CustomerContact, o.OrderDate +FROM cosmosdb.Orders o +JOIN [Application].[People] p +ON o.SalesPersonPersonID = p.PersonID +GO diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/readme.md index 9aca38d7..eda7799c 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/cosmosdb/readme.md @@ -1,23 +1,23 @@ -# SQL Server 2019 Polybase example connecting to CosmosDB - -This demo shows you how to setup a CosmosDB external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. - -## Requirements - -1. Create a new database, collection, and document with CosmosDB in Azure. I used the Azure portal to create a new cosmosdb database in the same resource group as my polybase head node (bwpolybase). When I used the portal to create a new cosmosdb instance, I chose the Azure CosmosDB Database for Mongo API for the API selection. I used the Data Explorer tool from the portal to create my database called WideWorldImporters with a collection called Orders. Then I created a new document with field names and values like the following (Note: the _id field was created by Data Explorer and the id field was a default value already provided by the tool) - -{ - "_id" : ObjectId("5c54aa72dd13c70f445745bf"), - "id" : "1", - "OrderID" : 1, - "SalesPersonPersonID" : 2, - "CustomerName" : "Vandelay Industries", - "CustomerContact" : "Art Vandelay", - "OrderDate" : "2018-05-14", - "CustomerPO" : "20180514", - "ExpectedDeliveryDate" : "2018-05-21" -} - -## Demo Steps - +# SQL Server 2019 Polybase example connecting to CosmosDB + +This demo shows you how to setup a CosmosDB external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. + +## Requirements + +1. Create a new database, collection, and document with CosmosDB in Azure. I used the Azure portal to create a new cosmosdb database in the same resource group as my polybase head node (bwpolybase). When I used the portal to create a new cosmosdb instance, I chose the Azure CosmosDB Database for Mongo API for the API selection. I used the Data Explorer tool from the portal to create my database called WideWorldImporters with a collection called Orders. Then I created a new document with field names and values like the following (Note: the _id field was created by Data Explorer and the id field was a default value already provided by the tool) + +{ + "_id" : ObjectId("5c54aa72dd13c70f445745bf"), + "id" : "1", + "OrderID" : 1, + "SalesPersonPersonID" : 2, + "CustomerName" : "Vandelay Industries", + "CustomerContact" : "Art Vandelay", + "OrderDate" : "2018-05-14", + "CustomerPO" : "20180514", + "ExpectedDeliveryDate" : "2018-05-21" +} + +## Demo Steps + 1. On my SQL Server 2019 head node (bwpolybase), I used the **cosmosdb_external_table.sql** script to create the database scoped credential, externaL data source, external table, and sample SELECT statements to query the external table and join it with local SQL Server 2019 tables in the WideWorldImporters database. The **Connection String** option from the portal of the instance shows you the username and password to use. It also has HOST and PORT fields which are used to build the LOCATION sytnax for the data source. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/hdfs_external_table.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/hdfs_external_table.sql index e6d910a6..330dbfed 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/hdfs_external_table.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/hdfs_external_table.sql @@ -1,97 +1,97 @@ -USE [master] -GO --- Enabled PB connectivity to a Hadoop HDFS source which in this case is just Azure Blob Storage --- -sp_configure @configname = 'hadoop connectivity', @configvalue = 7; -GO -RECONFIGURE -GO - --- Enable PB export to be able to ingest data into the HDFS target --- -sp_configure 'allow polybase export', 1 -GO -RECONFIGURE -GO - --- STOP: SQL Server must be restarted for this to take effect --- -USE [WideWorldImporters] -GO --- Only run this if you have not already created a master key in the db --- ---CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' ---GO --- IDENTITY: any string (this is not used for authentication to Azure storage). --- SECRET: your Azure storage account key. -DROP DATABASE SCOPED CREDENTIAL AzureStorageCredential -GO -CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential -WITH IDENTITY = 'user', Secret = 'C5aFpK587sIDFIMSEqXwA08xlhDM34/rfOz2g+sVq/hcKReo6agvT9JZcWGe9NtEyHEypK095WZtDdE/gkKZNQ==' -GO --- LOCATION: Azure account storage account name and blob container name. --- CREDENTIAL: The database scoped credential created above. -DROP EXTERNAL DATA SOURCE bwdatalake -GO -CREATE EXTERNAL DATA SOURCE bwdatalake with ( - TYPE = HADOOP, - LOCATION ='wasbs://wwi@bwdatalake.blob.core.windows.net', - CREDENTIAL = AzureStorageCredential -) -GO --- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). -CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( - FORMAT_TYPE = DELIMITEDTEXT, - FORMAT_OPTIONS (FIELD_TERMINATOR ='|', - USE_TYPE_DEFAULT = TRUE)) -GO --- Create a schema called hdfs --- -DROP SCHEMA hdfs -GO -CREATE SCHEMA hdfs -GO --- LOCATION: path to file or directory that contains the data (relative to HDFS root). -DROP EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] -GO -CREATE EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] ( - [OrderID] int NOT NULL, - [CustomerID] int NOT NULL, - [Rating] int NULL, - [Review_Comments] nvarchar(1000) NOT NULL -) -WITH (LOCATION='/WWI/', - DATA_SOURCE = bwdatalake, - FILE_FORMAT = TextFileFormat -) -GO - --- Ingest some data --- -INSERT INTO [hdfs].[WWI_Order_Reviews] VALUES (1, 832, 10, 'I had a great experience with my order') -GO -CREATE STATISTICS StatsforReviews on [hdfs].[WWI_Order_Reviews](OrderID, CustomerID) -GO - --- Now query the external table --- -SELECT * FROM [hdfs].[WWI_Order_Reviews] -GO - --- Let's do a filter to enable pushdown --- -SELECT * FROM [hdfs].[WWI_Order_Reviews] -WHERE OrderID = 1 -GO - --- Let's join the review with our order and customer data --- -SELECT o.OrderDate, c.CustomerName, p.FullName as SalesPerson, wor.Rating, wor.Review_Comments -FROM [Sales].[Orders] o -JOIN [hdfs].[WWI_Order_Reviews] wor -ON o.OrderID = wor.OrderID -JOIN [Application].[People] p -ON p.PersonID = o.SalespersonPersonID -JOIN [Sales].[Customers] c -ON c.CustomerID = wor.CustomerID +USE [master] +GO +-- Enabled PB connectivity to a Hadoop HDFS source which in this case is just Azure Blob Storage +-- +sp_configure @configname = 'hadoop connectivity', @configvalue = 7; +GO +RECONFIGURE +GO + +-- Enable PB export to be able to ingest data into the HDFS target +-- +sp_configure 'allow polybase export', 1 +GO +RECONFIGURE +GO + +-- STOP: SQL Server must be restarted for this to take effect +-- +USE [WideWorldImporters] +GO +-- Only run this if you have not already created a master key in the db +-- +--CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' +--GO +-- IDENTITY: any string (this is not used for authentication to Azure storage). +-- SECRET: your Azure storage account key. +DROP DATABASE SCOPED CREDENTIAL AzureStorageCredential +GO +CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential +WITH IDENTITY = 'user', Secret = 'C5aFpK587sIDFIMSEqXwA08xlhDM34/rfOz2g+sVq/hcKReo6agvT9JZcWGe9NtEyHEypK095WZtDdE/gkKZNQ==' +GO +-- LOCATION: Azure account storage account name and blob container name. +-- CREDENTIAL: The database scoped credential created above. +DROP EXTERNAL DATA SOURCE bwdatalake +GO +CREATE EXTERNAL DATA SOURCE bwdatalake with ( + TYPE = HADOOP, + LOCATION ='wasbs://wwi@bwdatalake.blob.core.windows.net', + CREDENTIAL = AzureStorageCredential +) +GO +-- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). +CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( + FORMAT_TYPE = DELIMITEDTEXT, + FORMAT_OPTIONS (FIELD_TERMINATOR ='|', + USE_TYPE_DEFAULT = TRUE)) +GO +-- Create a schema called hdfs +-- +DROP SCHEMA hdfs +GO +CREATE SCHEMA hdfs +GO +-- LOCATION: path to file or directory that contains the data (relative to HDFS root). +DROP EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] +GO +CREATE EXTERNAL TABLE [hdfs].[WWI_Order_Reviews] ( + [OrderID] int NOT NULL, + [CustomerID] int NOT NULL, + [Rating] int NULL, + [Review_Comments] nvarchar(1000) NOT NULL +) +WITH (LOCATION='/WWI/', + DATA_SOURCE = bwdatalake, + FILE_FORMAT = TextFileFormat +) +GO + +-- Ingest some data +-- +INSERT INTO [hdfs].[WWI_Order_Reviews] VALUES (1, 832, 10, 'I had a great experience with my order') +GO +CREATE STATISTICS StatsforReviews on [hdfs].[WWI_Order_Reviews](OrderID, CustomerID) +GO + +-- Now query the external table +-- +SELECT * FROM [hdfs].[WWI_Order_Reviews] +GO + +-- Let's do a filter to enable pushdown +-- +SELECT * FROM [hdfs].[WWI_Order_Reviews] +WHERE OrderID = 1 +GO + +-- Let's join the review with our order and customer data +-- +SELECT o.OrderDate, c.CustomerName, p.FullName as SalesPerson, wor.Rating, wor.Review_Comments +FROM [Sales].[Orders] o +JOIN [hdfs].[WWI_Order_Reviews] wor +ON o.OrderID = wor.OrderID +JOIN [Application].[People] p +ON p.PersonID = o.SalespersonPersonID +JOIN [Sales].[Customers] c +ON c.CustomerID = wor.CustomerID GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/readme.md index 767aa494..1a0a27b3 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/hdfs/readme.md @@ -1,9 +1,9 @@ -# SQL Server demo with Polybase for HDFS - -## Requirements - -Follow all the instructions in the fundamentals folder which is at the same level as the sqldatahub folder. - -## Demos Steps - +# SQL Server demo with Polybase for HDFS + +## Requirements + +Follow all the instructions in the fundamentals folder which is at the same level as the sqldatahub folder. + +## Demos Steps + 1. Run all the T-SQL commands in **hdfs_external_table.sql**. You will need to edit the appropriate details to point to your Azure storage container including the credential and location for the data source. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createtab.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createtab.sql index eca1f0d8..da9e90f7 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createtab.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createtab.sql @@ -1,7 +1,7 @@ -CREATE TABLE gl.accountsreceivable ( -arid int primary key, -ardate date, -ardesc varchar2(100), -arref int, -aramt number(10,2) -); +CREATE TABLE gl.accountsreceivable ( +arid int primary key, +ardate date, +ardesc varchar2(100), +arref int, +aramt number(10,2) +); diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createuser.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createuser.sql index 5ad3af1d..0d81b36f 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createuser.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/createuser.sql @@ -1,8 +1,8 @@ -CREATE USER gl IDENTIFIED BY glpwd DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; -GRANT CREATE SESSION TO gl; -GRANT CREATE TABLE TO gl; -GRANT CREATE VIEW TO gl; -GRANT CREATE ANY TRIGGER TO gl; -GRANT CREATE ANY PROCEDURE TO gl; -GRANT CREATE SEQUENCE TO gl; -GRANT CREATE SYNONYM TO gl; +CREATE USER gl IDENTIFIED BY glpwd DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; +GRANT CREATE SESSION TO gl; +GRANT CREATE TABLE TO gl; +GRANT CREATE VIEW TO gl; +GRANT CREATE ANY TRIGGER TO gl; +GRANT CREATE ANY PROCEDURE TO gl; +GRANT CREATE SEQUENCE TO gl; +GRANT CREATE SYNONYM TO gl; diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oracle_external_table.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oracle_external_table.sql index 87c67a47..2e4a9a1e 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oracle_external_table.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oracle_external_table.sql @@ -1,67 +1,67 @@ -USE [WideWorldImporters] -GO -CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' -GO -/* specify credentials to external data source -* IDENTITY: user name for external source. -* SECRET: password for external source. -*/ -DROP DATABASE SCOPED CREDENTIAL OracleCredentials -GO -CREATE DATABASE SCOPED CREDENTIAL OracleCredentials -WITH IDENTITY = 'gl', Secret = 'glpwd' -GO -/* LOCATION: Location string should be of format '://[:]'. -* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. -* CREDENTIAL: the database scoped credential, created above. -*/ -DROP EXTERNAL DATA SOURCE OracleServer -GO -CREATE EXTERNAL DATA SOURCE OracleServer -WITH ( -LOCATION = 'oracle://bworacle:49161', -PUSHDOWN = ON, -CREDENTIAL = OracleCredentials -) -GO -DROP SCHEMA oracle -go -CREATE SCHEMA oracle -GO -/* LOCATION: oracle table/view in 'database_name.schema_name.object_name' format -* DATA_SOURCE: the external data source, created above. -*/ -DROP EXTERNAL TABLE oracle.accountsreceivable -GO -CREATE EXTERNAL TABLE oracle.accountsreceivable -( -arid int, -ardate date, -ardesc nvarchar(100) COLLATE Latin1_General_100_CI_AS, -arref int, -aramt decimal(10,2) - -) - WITH ( - LOCATION='[XE].[GL].[ACCOUNTSRECEIVABLE]', - DATA_SOURCE=OracleServer -) -GO -CREATE STATISTICS arrefstats ON oracle.accountsreceivable ([arref]) WITH FULLSCAN -GO --- Let's scan the table to make sure it works -SELECT * FROM oracle.accountsreceivable -GO - --- Try a simple filter -SELECT * FROM oracle.accountsreceivable -WHERE arref = 336252 -GO - --- Join with a local table --- -SELECT ct.*, oa.arid, oa.ardesc -FROM oracle.accountsreceivable oa -JOIN [Sales].[CustomerTransactions] ct -ON oa.arref = ct.CustomerTransactionID +USE [WideWorldImporters] +GO +CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' +GO +/* specify credentials to external data source +* IDENTITY: user name for external source. +* SECRET: password for external source. +*/ +DROP DATABASE SCOPED CREDENTIAL OracleCredentials +GO +CREATE DATABASE SCOPED CREDENTIAL OracleCredentials +WITH IDENTITY = 'gl', Secret = 'glpwd' +GO +/* LOCATION: Location string should be of format '://[:]'. +* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. +* CREDENTIAL: the database scoped credential, created above. +*/ +DROP EXTERNAL DATA SOURCE OracleServer +GO +CREATE EXTERNAL DATA SOURCE OracleServer +WITH ( +LOCATION = 'oracle://bworacle:49161', +PUSHDOWN = ON, +CREDENTIAL = OracleCredentials +) +GO +DROP SCHEMA oracle +go +CREATE SCHEMA oracle +GO +/* LOCATION: oracle table/view in 'database_name.schema_name.object_name' format +* DATA_SOURCE: the external data source, created above. +*/ +DROP EXTERNAL TABLE oracle.accountsreceivable +GO +CREATE EXTERNAL TABLE oracle.accountsreceivable +( +arid int, +ardate date, +ardesc nvarchar(100) COLLATE Latin1_General_100_CI_AS, +arref int, +aramt decimal(10,2) + +) + WITH ( + LOCATION='[XE].[GL].[ACCOUNTSRECEIVABLE]', + DATA_SOURCE=OracleServer +) +GO +CREATE STATISTICS arrefstats ON oracle.accountsreceivable ([arref]) WITH FULLSCAN +GO +-- Let's scan the table to make sure it works +SELECT * FROM oracle.accountsreceivable +GO + +-- Try a simple filter +SELECT * FROM oracle.accountsreceivable +WHERE arref = 336252 +GO + +-- Join with a local table +-- +SELECT ct.*, oa.arid, oa.ardesc +FROM oracle.accountsreceivable oa +JOIN [Sales].[CustomerTransactions] ct +ON oa.arref = ct.CustomerTransactionID GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oraconnect.sh b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oraconnect.sh index 30896950..d4d5ea93 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oraconnect.sh +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/oraconnect.sh @@ -1,2 +1,2 @@ -sqlplus64 system/oracle@localhost:49161/xe - +sqlplus64 system/oracle@localhost:49161/xe + diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/readme.md index fdff0d49..53c24f0a 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/oracle/readme.md @@ -1,45 +1,45 @@ -# SQL Server 2019 Polybase example connecting to Oracle - -This demo shows you how to setup a Oracle external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. - -## Requirements - Installing and setting up Oracle - -SQL Server external tables should work with most current Oracle versions (11g+) so for this demo you can choose any Oracle installation or platform you like. For my demo, I used Oracle Express 11g using docker containers on Red Hat Enterpise Linux in an Azure Virtual Machine. The following are the steps and scripts I used to install and Oracle instance using a docker container and create a table to be used for the demo. I created my RHEL VM in Azure in the same resource group (bwsql2019demos) as the polybase head node running SQL Server 2019 on Windows Server. I then on this head node server added an entry in the /etc/hosts file for the RHEL Azure VM private IP address with a name of bworacle so I can use this name when creating an external data source. - -1. Install Docker CE for CentOS using these instructions at https://docs.docker.com/install/linux/docker-ce/centos/ - -2. Used these instructions to pull a docker container image for Oracle at https://github.com/wnameless/docker-oracle-xe-11g. This site has instructions for running the container, instance ID, and password for SYSTEM. - -3. Installed OCI client and SQLPlus RPM packages from http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/index.htm - -4. I had to configure SQLPLUS (sqlplus64 is actually the program to use) by setting the following environment variables: -- ORACLE_SID=xe -- LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib -- ORACLE_HOME=/usr/lib/oracle/18.3/client64 - -5. I was then able to connect to ORACLE XE on this machine using syntax like - -sqlplus64 system/oracle@localhost:49161/xe - -49161 is the port number from running the docker image for XE -oracle is the password for SYSTEM - -I've included a script called **oraconnect.sh** as an example. - -6. I wanted a user other than SYSTEM so used the script **createuser.sql** to create a new user called g1. - -7. Using this new login, I ran the script **createtab.sql** to create a new table with the instance. You can run this script using sqlplus64 like the following: - -sqlplus64 gl/glpwd@localhost:49161/xe @createtab.sql - -8. I then executed the **insertdata.sql** script finding a valid CustomerTransactionID from the Sales.CustomerTransactions table in the WideWorldImporters database. This ID becomes the arref fields in the accounts receivable table. - -## Demo Steps - -1. With everything in hand on my Oracle server, I now can use the oracle_external_table.sql script to create the data source and external table. - -Note the syntax for the LOCATION string for the external table which I was required to use UPPERCASE even though I didn't create these objects in uppercase using sqlplus64. - -LOCATION='[XE].[GL].[ACCOUNTSRECEIVABLE]' - -This script also includes examples to query the table and join together with the [Sales].[CustomerTransactions] table. +# SQL Server 2019 Polybase example connecting to Oracle + +This demo shows you how to setup a Oracle external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. + +## Requirements - Installing and setting up Oracle + +SQL Server external tables should work with most current Oracle versions (11g+) so for this demo you can choose any Oracle installation or platform you like. For my demo, I used Oracle Express 11g using docker containers on Red Hat Enterpise Linux in an Azure Virtual Machine. The following are the steps and scripts I used to install and Oracle instance using a docker container and create a table to be used for the demo. I created my RHEL VM in Azure in the same resource group (bwsql2019demos) as the polybase head node running SQL Server 2019 on Windows Server. I then on this head node server added an entry in the /etc/hosts file for the RHEL Azure VM private IP address with a name of bworacle so I can use this name when creating an external data source. + +1. Install Docker CE for CentOS using these instructions at https://docs.docker.com/install/linux/docker-ce/centos/ + +2. Used these instructions to pull a docker container image for Oracle at https://github.com/wnameless/docker-oracle-xe-11g. This site has instructions for running the container, instance ID, and password for SYSTEM. + +3. Installed OCI client and SQLPlus RPM packages from http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/index.htm + +4. I had to configure SQLPLUS (sqlplus64 is actually the program to use) by setting the following environment variables: +- ORACLE_SID=xe +- LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib +- ORACLE_HOME=/usr/lib/oracle/18.3/client64 + +5. I was then able to connect to ORACLE XE on this machine using syntax like + +sqlplus64 system/oracle@localhost:49161/xe + +49161 is the port number from running the docker image for XE +oracle is the password for SYSTEM + +I've included a script called **oraconnect.sh** as an example. + +6. I wanted a user other than SYSTEM so used the script **createuser.sql** to create a new user called g1. + +7. Using this new login, I ran the script **createtab.sql** to create a new table with the instance. You can run this script using sqlplus64 like the following: + +sqlplus64 gl/glpwd@localhost:49161/xe @createtab.sql + +8. I then executed the **insertdata.sql** script finding a valid CustomerTransactionID from the Sales.CustomerTransactions table in the WideWorldImporters database. This ID becomes the arref fields in the accounts receivable table. + +## Demo Steps + +1. With everything in hand on my Oracle server, I now can use the oracle_external_table.sql script to create the data source and external table. + +Note the syntax for the LOCATION string for the external table which I was required to use UPPERCASE even though I didn't create these objects in uppercase using sqlplus64. + +LOCATION='[XE].[GL].[ACCOUNTSRECEIVABLE]' + +This script also includes examples to query the table and join together with the [Sales].[CustomerTransactions] table. diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/readme.md index fae0f9a5..e4925384 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/readme.md @@ -1,28 +1,28 @@ -# SQL Server Data Hub Polybase demos - -In this demo I show you how to use SQL Server as a hub for data virtualization. Consider the example company WideWorldImporters (read more at https://docs.microsoft.com/en-us/sql/samples/wide-world-importers-what-is?view=sql-server-2017 ) - -This demo will cover scenarios where this company has data in other sources but would like to avoid building complex and expensive ETL programs to move the data into SQL Server 2019. In some cases, they are going to migrate their data but they would first like access to the data so applications and reports can seamlessly run while just connecting to SQL Server 2019. - -They have identified the following data sources and business scenarios: - -**SQL Server 2008R2** - This is the legacy SQL Server which contains a list of Suppliers the company no longer uses but they want to access for historical reasons. - -**Azure SQL Database** - A new cloud based application is prototyping data for StockItems in Azure - -**CosmosDB** - A research team is experimenting with a mobile based application to take orders from customers using a noSQL data store like Azure CosmosDB - -**Oracle** - The company's accounting system is in Oracle but will be migrated soon to SQL Server. For now, the company wants to be able to access accounts receivable data which lines up with transactions in WideWorldImporters database. - -**Hadoop** - The company's website ordering system now has a new feature for customers to review the ordering process. The developers find it very convenient to stream a large amount of data for these reviews in the form of files in Hadoop. The system today just streams this in Azure Blog Storage. - -**SAPHana** - The company just acquired a new company and would like to start reviewing the customer profiles the new acquired company brings. The new company has a data warehouse stored in SAPHana that can be queried. - -All of these data sources will become external data sources and tables. For the purposes of this demo, all of the examples will use resources in Azure. The hub for SQL Server 2019 will be based on the Polybase configuration installed and configured in the **Fundamentals** folder. - - -1. If you have not restored the backup already, download and restore the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases/wide-world-importers - -2. First, run the scenario for SQL2008r2 by going to the **SQL2008r2** folder and following the instructions in the readme.md file. - +# SQL Server Data Hub Polybase demos + +In this demo I show you how to use SQL Server as a hub for data virtualization. Consider the example company WideWorldImporters (read more at https://docs.microsoft.com/en-us/sql/samples/wide-world-importers-what-is?view=sql-server-2017 ) + +This demo will cover scenarios where this company has data in other sources but would like to avoid building complex and expensive ETL programs to move the data into SQL Server 2019. In some cases, they are going to migrate their data but they would first like access to the data so applications and reports can seamlessly run while just connecting to SQL Server 2019. + +They have identified the following data sources and business scenarios: + +**SQL Server 2008R2** - This is the legacy SQL Server which contains a list of Suppliers the company no longer uses but they want to access for historical reasons. + +**Azure SQL Database** - A new cloud based application is prototyping data for StockItems in Azure + +**CosmosDB** - A research team is experimenting with a mobile based application to take orders from customers using a noSQL data store like Azure CosmosDB + +**Oracle** - The company's accounting system is in Oracle but will be migrated soon to SQL Server. For now, the company wants to be able to access accounts receivable data which lines up with transactions in WideWorldImporters database. + +**Hadoop** - The company's website ordering system now has a new feature for customers to review the ordering process. The developers find it very convenient to stream a large amount of data for these reviews in the form of files in Hadoop. The system today just streams this in Azure Blog Storage. + +**SAPHana** - The company just acquired a new company and would like to start reviewing the customer profiles the new acquired company brings. The new company has a data warehouse stored in SAPHana that can be queried. + +All of these data sources will become external data sources and tables. For the purposes of this demo, all of the examples will use resources in Azure. The hub for SQL Server 2019 will be based on the Polybase configuration installed and configured in the **Fundamentals** folder. + + +1. If you have not restored the backup already, download and restore the WideWorldImporters backup from https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases/wide-world-importers + +2. First, run the scenario for SQL2008r2 by going to the **SQL2008r2** folder and following the instructions in the readme.md file. + 3. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/createuser.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/createuser.sql index 30945199..bf2dd339 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/createuser.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/createuser.sql @@ -1,4 +1,4 @@ -CREATE USER bwsaphana PASSWORD Cprsql2019 NO FORCE_FIRST_PASSWORD_CHANGE; -GRANT AFLPM_CREATOR_ERASER_EXECUTE TO bwsaphana; -GRANT CONTENT_ADMIN TO bwsaphana; +CREATE USER bwsaphana PASSWORD Cprsql2019 NO FORCE_FIRST_PASSWORD_CHANGE; +GRANT AFLPM_CREATOR_ERASER_EXECUTE TO bwsaphana; +GRANT CONTENT_ADMIN TO bwsaphana; GRANT MODELING to bwsaphana; \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/readme.md index 83026ef8..69a81f37 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/readme.md @@ -1,60 +1,60 @@ -# SQL Server Polybase demo for SAP HANA using the odbc connector - -This is a demo to show how to connect to a SAP HANA database using the odbc connector shipped with SQL Server 2019. - -This demo assumes you have setup a Polybase scale out group as shown in the fundamentals folder above this folder. NOTE: You must be running SQL Server 2019 CTP 2.3 or higher in order to use this SAP HANA demo. - -## Requirements - SAP HANA setup - -### SAP HANA Server Setup - -You can use an existing SAP HANA system. For purposes of this demo I created an SAP HANA server using the SAP HANA Express Edition template from Azure which you can read more at https://azuremarketplace.microsoft.com/ja-/marketplace/apps/sap.hanaexpress?tab=Overview. This is a SUSE Linux VM with SAP HANA installed. I created this VM in the resource group of the polybase head node, bwsql2019demos, so I would be on the same virtual net. I also took the private IP address of the SAP VM and put this in c:\windows\system32\drivers\etc\hosts as bwsaphana so I could just refer to that hostname on my polybase head node. - -1. Go through the steps to get the SAP HANA server running on Azure with this guide -https://developers.sap.com/tutorials/hxe-ms-azure-marketplace-getting-started.html - -2. After following these steps, I disconnected by current ssh session and started a new one but this time logged in with hxeadm. The docs say the default password is HXEHana1. I was prompted to change my password which I did to Cprsql2019. Note that the instance "number" is 90 using this Azure template. - -3. The client command line tool **hdbsql** is installed already through this process. So to create a database, a user, and a table with data, use the next set of scripts - -4. Execute **createdb.sh** to create a database. This will connect as the SYSTEM user and create a database called VANDELAY. - -5. Execute **createuser.sh** which will create a new user, bwsaphana, in the VANDELAY database and grant permissions. - -6. Execute **createtab.sh** which will create a new table, Customers, in the VANDELAY database connected as the bwsaphana user. I found out that the default schema for this table is called BWSAPHANA after querying the tables view. That is important as we will need it for the external table script. - -7. Execute **insertdata.sh** which will insert a row into the Customers table. I used a CustomerID of 100000 because this is far bigger than what the WideWorldImporters database would have in its Sales.Customer table set of ID values. - -### Install the SAP HANA Driver - -In order to use the general odbc connector built into SQL Server 2019 you must install the driver to connect to your ODBC data source. Since I am going to show you how to connect to SAP HANA, I found the official 64bit ODBC Driver for SAP HANA called HDBODBC. In order to support a scale out group you need to install this on each of the Polybase nodes. For purposes of this demo, I will only install this on the head node, bwpolybase. - -I found the driver to download from https://developers.sap.com/trials-downloads.html - -and found these docs on how to setup the driver on Windows - -https://help.sap.com/viewer/e9146b36040844d0b1f309bc8c1ba6ab/2.5.0.0/en-US/321ff67a31f54654af30dad9f82347dc.html - -**Note: You must install the driver on all nodes for the Polybase scale out group and configure them all with the same server and port. If you don't install this on the compute nodes you may get intermittent errors when querying the external table because Polybase may redirect your query through a compute node where the driver doesn't exist.** - -The experience was interesting and here our some tips: - -- Run the installer from a powershell or cmd window as Administrator -- Depending on what version of Windows Server, you may get an error on the VC++ runtime install like "Program terminated with exit code 1638". This driver depends on installing the VC++ runtime for VS 2015. I had a the VS 2017 runtime so it failed. The solution is to first uninstall the VS 2017 VC++ runtime, install the ODBC driver, and the reinstall the VS 2017 VC++ runtime. -- You want your System DSN to use the right port for SAP HANA. The port is based on the instance number and tenant (database) of the SAP HANA Server. The port will always be 3XXYY where XX = instance number and YY = number for the database. The instance number was 90 from the default Azure template install for me. But what about the VANDELAY database? Turns out there is a view called sys_databases.m_services in the SYSTEMDB database which tells you the SQL port for each database. When I ran a query against this view logged in as SYSTEM I found out the port for VANDELAY was 39041. So I used this port in the DSN configuration. -- Since bwsaphana is imy hosts file to point to the private IP of the SAP VM, I can use that as the host server name. - -## Demo Steps - -1. All the instructions are in the **sap_external_table.sql** script to create the credential, data source, external table, and query against the remote table. - -Take note of the syntax for the external data source. Note these strings are required even though the DSN has port specifics - -CREATE EXTERNAL DATA SOURCE SAPHANAServer -WITH ( -LOCATION = 'odbc://bwsaphana', -CONNECTION_OPTIONS = 'Driver={HDBODBC};ServerNode=bwsaphana:39041', -PUSHDOWN = ON, -CREDENTIAL = SAPHANACredentials -) +# SQL Server Polybase demo for SAP HANA using the odbc connector + +This is a demo to show how to connect to a SAP HANA database using the odbc connector shipped with SQL Server 2019. + +This demo assumes you have setup a Polybase scale out group as shown in the fundamentals folder above this folder. NOTE: You must be running SQL Server 2019 CTP 2.3 or higher in order to use this SAP HANA demo. + +## Requirements - SAP HANA setup + +### SAP HANA Server Setup + +You can use an existing SAP HANA system. For purposes of this demo I created an SAP HANA server using the SAP HANA Express Edition template from Azure which you can read more at https://azuremarketplace.microsoft.com/ja-/marketplace/apps/sap.hanaexpress?tab=Overview. This is a SUSE Linux VM with SAP HANA installed. I created this VM in the resource group of the polybase head node, bwsql2019demos, so I would be on the same virtual net. I also took the private IP address of the SAP VM and put this in c:\windows\system32\drivers\etc\hosts as bwsaphana so I could just refer to that hostname on my polybase head node. + +1. Go through the steps to get the SAP HANA server running on Azure with this guide +https://developers.sap.com/tutorials/hxe-ms-azure-marketplace-getting-started.html + +2. After following these steps, I disconnected by current ssh session and started a new one but this time logged in with hxeadm. The docs say the default password is HXEHana1. I was prompted to change my password which I did to Cprsql2019. Note that the instance "number" is 90 using this Azure template. + +3. The client command line tool **hdbsql** is installed already through this process. So to create a database, a user, and a table with data, use the next set of scripts + +4. Execute **createdb.sh** to create a database. This will connect as the SYSTEM user and create a database called VANDELAY. + +5. Execute **createuser.sh** which will create a new user, bwsaphana, in the VANDELAY database and grant permissions. + +6. Execute **createtab.sh** which will create a new table, Customers, in the VANDELAY database connected as the bwsaphana user. I found out that the default schema for this table is called BWSAPHANA after querying the tables view. That is important as we will need it for the external table script. + +7. Execute **insertdata.sh** which will insert a row into the Customers table. I used a CustomerID of 100000 because this is far bigger than what the WideWorldImporters database would have in its Sales.Customer table set of ID values. + +### Install the SAP HANA Driver + +In order to use the general odbc connector built into SQL Server 2019 you must install the driver to connect to your ODBC data source. Since I am going to show you how to connect to SAP HANA, I found the official 64bit ODBC Driver for SAP HANA called HDBODBC. In order to support a scale out group you need to install this on each of the Polybase nodes. For purposes of this demo, I will only install this on the head node, bwpolybase. + +I found the driver to download from https://developers.sap.com/trials-downloads.html + +and found these docs on how to setup the driver on Windows + +https://help.sap.com/viewer/e9146b36040844d0b1f309bc8c1ba6ab/2.5.0.0/en-US/321ff67a31f54654af30dad9f82347dc.html + +**Note: You must install the driver on all nodes for the Polybase scale out group and configure them all with the same server and port. If you don't install this on the compute nodes you may get intermittent errors when querying the external table because Polybase may redirect your query through a compute node where the driver doesn't exist.** + +The experience was interesting and here our some tips: + +- Run the installer from a powershell or cmd window as Administrator +- Depending on what version of Windows Server, you may get an error on the VC++ runtime install like "Program terminated with exit code 1638". This driver depends on installing the VC++ runtime for VS 2015. I had a the VS 2017 runtime so it failed. The solution is to first uninstall the VS 2017 VC++ runtime, install the ODBC driver, and the reinstall the VS 2017 VC++ runtime. +- You want your System DSN to use the right port for SAP HANA. The port is based on the instance number and tenant (database) of the SAP HANA Server. The port will always be 3XXYY where XX = instance number and YY = number for the database. The instance number was 90 from the default Azure template install for me. But what about the VANDELAY database? Turns out there is a view called sys_databases.m_services in the SYSTEMDB database which tells you the SQL port for each database. When I ran a query against this view logged in as SYSTEM I found out the port for VANDELAY was 39041. So I used this port in the DSN configuration. +- Since bwsaphana is imy hosts file to point to the private IP of the SAP VM, I can use that as the host server name. + +## Demo Steps + +1. All the instructions are in the **sap_external_table.sql** script to create the credential, data source, external table, and query against the remote table. + +Take note of the syntax for the external data source. Note these strings are required even though the DSN has port specifics + +CREATE EXTERNAL DATA SOURCE SAPHANAServer +WITH ( +LOCATION = 'odbc://bwsaphana', +CONNECTION_OPTIONS = 'Driver={HDBODBC};ServerNode=bwsaphana:39041', +PUSHDOWN = ON, +CREDENTIAL = SAPHANACredentials +) GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/sap_external_table.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/sap_external_table.sql index 2a91c9e8..aaa22b01 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/sap_external_table.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/saphana/sap_external_table.sql @@ -1,62 +1,62 @@ -USE [WideWorldImporters] -GO -CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' -GO -/* specify credentials to external data source -* IDENTITY: user name for external source. -* SECRET: password for external source. -*/ --- Need to change this a different user than SYSTEM -DROP DATABASE SCOPED CREDENTIAL SAPHANACredentials -GO -CREATE DATABASE SCOPED CREDENTIAL SAPHANACredentials -WITH IDENTITY = 'bwsaphana', Secret = 'Cprsql2019' -GO -/* LOCATION: Location string should be of format '://[:]'. -* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. -* CREDENTIAL: the database scoped credential, created above. -*/ -DROP EXTERNAL DATA SOURCE SAPHANAServer -GO -CREATE EXTERNAL DATA SOURCE SAPHANAServer -WITH ( -LOCATION = 'odbc://bwsaphana', -CONNECTION_OPTIONS = 'Driver={HDBODBC};ServerNode=bwsaphana:39041', -PUSHDOWN = ON, -CREDENTIAL = SAPHANACredentials -) -GO -DROP SCHEMA saphana -go -CREATE SCHEMA saphana -GO -/* LOCATION: oracle table/view in 'database_name.schema_name.object_name' format -* DATA_SOURCE: the external data source, created above. -*/ -DROP EXTERNAL TABLE saphana.customers -GO -CREATE EXTERNAL TABLE saphana.customers -( -CustomerID int, -CustomerName nvarchar(100) COLLATE Latin1_General_100_CI_AS, -AccountOpenedDate date, -CustomerWebSite nvarchar(256) COLLATE Latin1_General_100_CI_AS -) - WITH ( - LOCATION='[BWSAPHANA].[CUSTOMERS]', - DATA_SOURCE=SAPHANAServer -) -GO -CREATE STATISTICS customerstats ON saphana.customrs ([CustomerName]) WITH FULLSCAN -GO --- Let's scan the table to make sure it works -SELECT * FROM saphana.customers -GO --- Union with our current customers --- -SELECT CustomerID, CustomerName, AccountOpenedDate, CustomerWebSite -FROM saphana.customers -UNION -SELECT CustomerID, CustomerName, AccountOpenedDate, WebsiteURL -FROM Sales.Customers +USE [WideWorldImporters] +GO +CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' +GO +/* specify credentials to external data source +* IDENTITY: user name for external source. +* SECRET: password for external source. +*/ +-- Need to change this a different user than SYSTEM +DROP DATABASE SCOPED CREDENTIAL SAPHANACredentials +GO +CREATE DATABASE SCOPED CREDENTIAL SAPHANACredentials +WITH IDENTITY = 'bwsaphana', Secret = 'Cprsql2019' +GO +/* LOCATION: Location string should be of format '://[:]'. +* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. +* CREDENTIAL: the database scoped credential, created above. +*/ +DROP EXTERNAL DATA SOURCE SAPHANAServer +GO +CREATE EXTERNAL DATA SOURCE SAPHANAServer +WITH ( +LOCATION = 'odbc://bwsaphana', +CONNECTION_OPTIONS = 'Driver={HDBODBC};ServerNode=bwsaphana:39041', +PUSHDOWN = ON, +CREDENTIAL = SAPHANACredentials +) +GO +DROP SCHEMA saphana +go +CREATE SCHEMA saphana +GO +/* LOCATION: oracle table/view in 'database_name.schema_name.object_name' format +* DATA_SOURCE: the external data source, created above. +*/ +DROP EXTERNAL TABLE saphana.customers +GO +CREATE EXTERNAL TABLE saphana.customers +( +CustomerID int, +CustomerName nvarchar(100) COLLATE Latin1_General_100_CI_AS, +AccountOpenedDate date, +CustomerWebSite nvarchar(256) COLLATE Latin1_General_100_CI_AS +) + WITH ( + LOCATION='[BWSAPHANA].[CUSTOMERS]', + DATA_SOURCE=SAPHANAServer +) +GO +CREATE STATISTICS customerstats ON saphana.customrs ([CustomerName]) WITH FULLSCAN +GO +-- Let's scan the table to make sure it works +SELECT * FROM saphana.customers +GO +-- Union with our current customers +-- +SELECT CustomerID, CustomerName, AccountOpenedDate, CustomerWebSite +FROM saphana.customers +UNION +SELECT CustomerID, CustomerName, AccountOpenedDate, WebsiteURL +FROM Sales.Customers GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/justwwi_suppliers.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/justwwi_suppliers.sql index 36d11100..254abcec 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/justwwi_suppliers.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/justwwi_suppliers.sql @@ -1,83 +1,83 @@ -USE [JustWorldImporters] -GO --- Create a partition function --- -CREATE PARTITION FUNCTION [PF_Supplier_Names](nvarchar(100)) -AS RANGE RIGHT FOR VALUES (N'Brooks Brothers', N'Old Suppliers -1', N'Old Suppliers -250000', -N'Old Suppliers -500000', N'Old Suppliers -750000') -GO --- Create the partition scheme --- -CREATE PARTITION SCHEME [PS_Supplier_Names] -AS PARTITION [PF_Supplier_Names] -TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY]) -GO --- Create the table --- -DROP TABLE [Suppliers] -GO -CREATE TABLE [Suppliers]( - [SupplierID] [int] NOT NULL, - [SupplierName] [nvarchar](100) NOT NULL, - [SupplierCategoryID] [int] NOT NULL, - [PrimaryContactPersonID] [int] NOT NULL, - [AlternateContactPersonID] [int] NOT NULL, - [DeliveryMethodID] [int] NULL, - [DeliveryCityID] [int] NOT NULL, - [PostalCityID] [int] NOT NULL, - [SupplierReference] [nvarchar](20) NULL, - [BankAccountName] [nvarchar](50) NULL, - [BankAccountBranch] [nvarchar](50) NULL, - [BankAccountCode] [nvarchar](20) NULL, - [BankAccountNumber] [nvarchar](20) NULL, - [BankInternationalCode] [nvarchar](20) NULL, - [PaymentDays] [int] NOT NULL, --- [InternalComments] [nvarchar](max) NULL, - [PhoneNumber] [nvarchar](20) NOT NULL, - [FaxNumber] [nvarchar](20) NOT NULL, - [WebsiteURL] [nvarchar](256) NOT NULL, - [DeliveryAddressLine1] [nvarchar](60) NOT NULL, - [DeliveryAddressLine2] [nvarchar](60) NULL, - [DeliveryPostalCode] [nvarchar](10) NOT NULL, --- [DeliveryLocation] [geography] NULL, - [PostalAddressLine1] [nvarchar](60) NOT NULL, - [PostalAddressLine2] [nvarchar](60) NULL, - [PostalPostalCode] [nvarchar](10) NOT NULL, - [LastEditedBy] [int] NOT NULL - CONSTRAINT [PK_Purchasing_Suppliers] PRIMARY KEY CLUSTERED -( - [SupplierName] ASC -) ON [PS_Supplier_names]([SupplierName]), --- CONSTRAINT [UQ_Purchasing_Suppliers_ID] UNIQUE NONCLUSTERED ---( --- [SupplierID] ASC ---) -) --- Insert some data --- -TRUNCATE TABLE [Suppliers] -GO -INSERT INTO [Suppliers] -VALUES (-1, 'Brooks Brothers', 4, -1, -2, 1, 24161, 24161, 'First US Clothing', 'Bank of New York Mellon', 'New York', NULL, '123456789', NULL, 30, '2121111111', '2121112222', 'brooksbrothers.com', '1 Broadway', NULL, '10004', '1 Broadway', NULL, '10004', 1) -GO - --- Let's go insert 1M fake suppliers --- -SET NOCOUNT ON -GO -BEGIN TRAN -GO -DECLARE @x int -DECLARE @y nvarchar(100) -SET @x = -2 -WHILE @x > -1000001 -BEGIN - SET @y = 'Old Supplier'+CAST(@X as nvarchar(10)) - INSERT INTO Suppliers VALUES (@x, @Y, 4, -1, -2, 1, 24161, 24161, 'Unknown', 'Unknown', 'Unknown', NULL, '123456789', NULL, 0, '2121111111', '2121112222', 'Unknown', 'Unknown', NULL, '00000', 'Unknown', NULL, '00000', 1) - SET @x = @x - 1 -END -GO -COMMIT TRAN -GO -SET NOCOUNT OFF +USE [JustWorldImporters] +GO +-- Create a partition function +-- +CREATE PARTITION FUNCTION [PF_Supplier_Names](nvarchar(100)) +AS RANGE RIGHT FOR VALUES (N'Brooks Brothers', N'Old Suppliers -1', N'Old Suppliers -250000', +N'Old Suppliers -500000', N'Old Suppliers -750000') +GO +-- Create the partition scheme +-- +CREATE PARTITION SCHEME [PS_Supplier_Names] +AS PARTITION [PF_Supplier_Names] +TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY]) +GO +-- Create the table +-- +DROP TABLE [Suppliers] +GO +CREATE TABLE [Suppliers]( + [SupplierID] [int] NOT NULL, + [SupplierName] [nvarchar](100) NOT NULL, + [SupplierCategoryID] [int] NOT NULL, + [PrimaryContactPersonID] [int] NOT NULL, + [AlternateContactPersonID] [int] NOT NULL, + [DeliveryMethodID] [int] NULL, + [DeliveryCityID] [int] NOT NULL, + [PostalCityID] [int] NOT NULL, + [SupplierReference] [nvarchar](20) NULL, + [BankAccountName] [nvarchar](50) NULL, + [BankAccountBranch] [nvarchar](50) NULL, + [BankAccountCode] [nvarchar](20) NULL, + [BankAccountNumber] [nvarchar](20) NULL, + [BankInternationalCode] [nvarchar](20) NULL, + [PaymentDays] [int] NOT NULL, +-- [InternalComments] [nvarchar](max) NULL, + [PhoneNumber] [nvarchar](20) NOT NULL, + [FaxNumber] [nvarchar](20) NOT NULL, + [WebsiteURL] [nvarchar](256) NOT NULL, + [DeliveryAddressLine1] [nvarchar](60) NOT NULL, + [DeliveryAddressLine2] [nvarchar](60) NULL, + [DeliveryPostalCode] [nvarchar](10) NOT NULL, +-- [DeliveryLocation] [geography] NULL, + [PostalAddressLine1] [nvarchar](60) NOT NULL, + [PostalAddressLine2] [nvarchar](60) NULL, + [PostalPostalCode] [nvarchar](10) NOT NULL, + [LastEditedBy] [int] NOT NULL + CONSTRAINT [PK_Purchasing_Suppliers] PRIMARY KEY CLUSTERED +( + [SupplierName] ASC +) ON [PS_Supplier_names]([SupplierName]), +-- CONSTRAINT [UQ_Purchasing_Suppliers_ID] UNIQUE NONCLUSTERED +--( +-- [SupplierID] ASC +--) +) +-- Insert some data +-- +TRUNCATE TABLE [Suppliers] +GO +INSERT INTO [Suppliers] +VALUES (-1, 'Brooks Brothers', 4, -1, -2, 1, 24161, 24161, 'First US Clothing', 'Bank of New York Mellon', 'New York', NULL, '123456789', NULL, 30, '2121111111', '2121112222', 'brooksbrothers.com', '1 Broadway', NULL, '10004', '1 Broadway', NULL, '10004', 1) +GO + +-- Let's go insert 1M fake suppliers +-- +SET NOCOUNT ON +GO +BEGIN TRAN +GO +DECLARE @x int +DECLARE @y nvarchar(100) +SET @x = -2 +WHILE @x > -1000001 +BEGIN + SET @y = 'Old Supplier'+CAST(@X as nvarchar(10)) + INSERT INTO Suppliers VALUES (@x, @Y, 4, -1, -2, 1, 24161, 24161, 'Unknown', 'Unknown', 'Unknown', NULL, '123456789', NULL, 0, '2121111111', '2121112222', 'Unknown', 'Unknown', NULL, '00000', 'Unknown', NULL, '00000', 1) + SET @x = @x - 1 +END +GO +COMMIT TRAN +GO +SET NOCOUNT OFF GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/readme.md b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/readme.md index 6722e0cd..e59352b8 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/readme.md +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/readme.md @@ -1,15 +1,15 @@ -# SQL Server 2019 Polybase example connecting to SQL Server 2008R2 - -This demo shows you how to setup a SQL Server 2008R2 external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. - -## Requirements - -Install SQL Server 2008R2. For my environment, I installed SQL Server 2008R2 on Windows Server 2008R2 using Azure with the gallery template provided on Azure. I put this VM in the same resource group of my SQL Server 2019 Windows Server head node so I would be on the same virtual network. I then added the IP address of my SQL Server 2008R2 server in the /etc/hosts file of my SQL Server 2019 head node (bwpolybase) with the convenient name of bwsql2008r2. I also created a new user called sqluser (password is in the scripts to create the external data source), created a database (defaults) called JustWorldImporters, and made sqluser a dbo of that database. - -## Demo Steps - -1. Connecting to the bwsql2008r2 server, I ran the script **justwwi_suppliers.sql** to create the table and insert some data. Notice in this script I used partitions so that when scanning the remote table from Polybase, each compute node will query a specific set of partitions. - -2. On my SQL Server 2019 head node (bwpolybase), I used the **sql2008r2_external_table.sql** script to create the database scoped credential, externaL data source, external table, and sample SELECT statements to query the external table and join it with local SQL Server 2019 tables in the WideWorldImporters database. - +# SQL Server 2019 Polybase example connecting to SQL Server 2008R2 + +This demo shows you how to setup a SQL Server 2008R2 external data source and table with examples of how to query the data source and join data to local SQL Server 2019 data. The demo assumes you have installed a SQL Server 2019 Polybase scale out group as documented in the **fundamentals** folder of this overall demo. + +## Requirements + +Install SQL Server 2008R2. For my environment, I installed SQL Server 2008R2 on Windows Server 2008R2 using Azure with the gallery template provided on Azure. I put this VM in the same resource group of my SQL Server 2019 Windows Server head node so I would be on the same virtual network. I then added the IP address of my SQL Server 2008R2 server in the /etc/hosts file of my SQL Server 2019 head node (bwpolybase) with the convenient name of bwsql2008r2. I also created a new user called sqluser (password is in the scripts to create the external data source), created a database (defaults) called JustWorldImporters, and made sqluser a dbo of that database. + +## Demo Steps + +1. Connecting to the bwsql2008r2 server, I ran the script **justwwi_suppliers.sql** to create the table and insert some data. Notice in this script I used partitions so that when scanning the remote table from Polybase, each compute node will query a specific set of partitions. + +2. On my SQL Server 2019 head node (bwpolybase), I used the **sql2008r2_external_table.sql** script to create the database scoped credential, externaL data source, external table, and sample SELECT statements to query the external table and join it with local SQL Server 2019 tables in the WideWorldImporters database. + **BONUS**: Connect to your SQL Server 2008R2 instance and run SQL Profiler. Include the Hostname column in the trace. Notice when you scan the entire remote table all 3 nodes query individual partitions. \ No newline at end of file diff --git a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/sql2008r2_external_table.sql b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/sql2008r2_external_table.sql index 43c17df5..291a06f7 100644 --- a/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/sql2008r2_external_table.sql +++ b/ModernizeYourDatabases2019/ModernizeSQL2019/Module 8 Activity - Data Virtualization/sqldatahub/sql2008r2/sql2008r2_external_table.sql @@ -1,90 +1,90 @@ -USE [WideWorldImporters] -GO -CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' -GO -/* specify credentials to external data source -* IDENTITY: user name for external source. -* SECRET: password for external source. -*/ -DROP DATABASE SCOPED CREDENTIAL SqlServerCredentials -GO -CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials -WITH IDENTITY = 'sqluser', Secret = '$cprsqlserver2019' -GO -/* LOCATION: Location string should be of format '://[:]'. -* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. -* CREDENTIAL: the database scoped credential, created above. -*/ -DROP EXTERNAL DATA SOURCE SQLServerInstance -GO -CREATE EXTERNAL DATA SOURCE SQLServerInstance -WITH ( -LOCATION = 'sqlserver://bwsql2008r2', -PUSHDOWN = ON, -CREDENTIAL = SQLServerCredentials, -CONNECTION_OPTIONS = 'UseDefaultEncryptionOptions=false' -- This is a workaround for a bug in SQL 2019 CTP 2.3 under investigation. -) -GO -DROP SCHEMA sqlserver -go -CREATE SCHEMA sqlserver -GO -/* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format -* DATA_SOURCE: the external data source, created above. -*/ -DROP EXTERNAL TABLE sqlserver.suppliers -GO -CREATE EXTERNAL TABLE sqlserver.suppliers -( - [SupplierID] [int] NOT NULL, - [SupplierName] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [SupplierCategoryID] [int] NOT NULL, - [PrimaryContactPersonID] [int] NOT NULL, - [AlternateContactPersonID] [int] NOT NULL, - [DeliveryMethodID] [int] NULL, - [DeliveryCityID] [int] NOT NULL, - [PostalCityID] [int] NOT NULL, - [SupplierReference] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [BankAccountName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [BankAccountBranch] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [BankAccountCode] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [BankAccountNumber] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [BankInternationalCode] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [PaymentDays] [int] NOT NULL, - [PhoneNumber] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [FaxNumber] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [WebsiteURL] [nvarchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [DeliveryAddressLine1] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [DeliveryAddressLine2] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [DeliveryPostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [PostalAddressLine1] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [PostalAddressLine2] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, - [PostalPostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, - [LastEditedBy] [int] NOT NULL -) - WITH ( - LOCATION='JustWorldImporters.dbo.Suppliers', - DATA_SOURCE=SqlServerInstance -) -GO -CREATE STATISTICS SupplierNameStatistics ON sqlserver.suppliers ([SupplierName]) WITH FULLSCAN -GO --- Scan the table to make sure it works --- -SELECT * FROM sqlserver.suppliers -GO - --- Find a specific supplier --- -SELECT * FROM sqlserver.suppliers where SupplierName = 'Brooks Brothers' -GO --- --- Find all former clothing suppliers and their city -SELECT s.SupplierName, s.SupplierReference, c.cityname -FROM sqlserver.suppliers s -JOIN [Purchasing].[SupplierCategories] sc -on s.SupplierCategoryID = sc.SupplierCategoryID -and sc.SupplierCategoryName = 'Clothing Supplier' -JOIN [Application].[Cities] c -ON s.DeliveryCityID = c.CityID +USE [WideWorldImporters] +GO +CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo' +GO +/* specify credentials to external data source +* IDENTITY: user name for external source. +* SECRET: password for external source. +*/ +DROP DATABASE SCOPED CREDENTIAL SqlServerCredentials +GO +CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials +WITH IDENTITY = 'sqluser', Secret = '$cprsqlserver2019' +GO +/* LOCATION: Location string should be of format '://[:]'. +* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default. +* CREDENTIAL: the database scoped credential, created above. +*/ +DROP EXTERNAL DATA SOURCE SQLServerInstance +GO +CREATE EXTERNAL DATA SOURCE SQLServerInstance +WITH ( +LOCATION = 'sqlserver://bwsql2008r2', +PUSHDOWN = ON, +CREDENTIAL = SQLServerCredentials, +CONNECTION_OPTIONS = 'UseDefaultEncryptionOptions=false' -- This is a workaround for a bug in SQL 2019 CTP 2.3 under investigation. +) +GO +DROP SCHEMA sqlserver +go +CREATE SCHEMA sqlserver +GO +/* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format +* DATA_SOURCE: the external data source, created above. +*/ +DROP EXTERNAL TABLE sqlserver.suppliers +GO +CREATE EXTERNAL TABLE sqlserver.suppliers +( + [SupplierID] [int] NOT NULL, + [SupplierName] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [SupplierCategoryID] [int] NOT NULL, + [PrimaryContactPersonID] [int] NOT NULL, + [AlternateContactPersonID] [int] NOT NULL, + [DeliveryMethodID] [int] NULL, + [DeliveryCityID] [int] NOT NULL, + [PostalCityID] [int] NOT NULL, + [SupplierReference] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BankAccountName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BankAccountBranch] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BankAccountCode] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BankAccountNumber] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BankInternationalCode] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [PaymentDays] [int] NOT NULL, + [PhoneNumber] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [FaxNumber] [nvarchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [WebsiteURL] [nvarchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [DeliveryAddressLine1] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [DeliveryAddressLine2] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [DeliveryPostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [PostalAddressLine1] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [PostalAddressLine2] [nvarchar](60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [PostalPostalCode] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [LastEditedBy] [int] NOT NULL +) + WITH ( + LOCATION='JustWorldImporters.dbo.Suppliers', + DATA_SOURCE=SqlServerInstance +) +GO +CREATE STATISTICS SupplierNameStatistics ON sqlserver.suppliers ([SupplierName]) WITH FULLSCAN +GO +-- Scan the table to make sure it works +-- +SELECT * FROM sqlserver.suppliers +GO + +-- Find a specific supplier +-- +SELECT * FROM sqlserver.suppliers where SupplierName = 'Brooks Brothers' +GO +-- +-- Find all former clothing suppliers and their city +SELECT s.SupplierName, s.SupplierReference, c.cityname +FROM sqlserver.suppliers s +JOIN [Purchasing].[SupplierCategories] sc +on s.SupplierCategoryID = sc.SupplierCategoryID +and sc.SupplierCategoryName = 'Clothing Supplier' +JOIN [Application].[Cities] c +ON s.DeliveryCityID = c.CityID GO \ No newline at end of file diff --git a/ModernizeYourDatabases2019/README.md b/ModernizeYourDatabases2019/README.md index f06a3615..829db69e 100644 --- a/ModernizeYourDatabases2019/README.md +++ b/ModernizeYourDatabases2019/README.md @@ -1,69 +1,69 @@ -![](graphics/microsoftlogo.png) - -# Workshop: Modernize Your Database with SQL Server 2019 - -#### A Microsoft Course from the SQL Server team - -

- -

About this Workshop

- -Welcome to this Microsoft solutions workshop on *Modernizing Your Database with SQL Server 2019*. In this workshop, you'll learn how SQL Server 2017 and SQL Server 2019 can help you to modernizing your database workloads. - -This README.MD file explains how the workshop is laid out, what you will learn, and the technologies you will use in this solution. - -

- -

Learning Objectives

- -

-

Business Applications of this Workshop

- -

- -

Technologies used in this Workshop

- -

- -

Before Taking this Workshop

- - - -

Setup

- -

- -

Workshop Details

- -

- -

Related Workshops

- - -

- -

Workshop Modules

- -This is a modular workshop, and in each section, you'll learn concepts, technologies, and processes to help you complete the solution. - - - - - - - - - - - - - - - -
ModuleTopics
01 - Why SQL Server 2019 Learn why SQL Server is a new modern data platform for your business
02 - Intelligent Performance Explore the performance capabilities such as Automatic Tuning Intelligent Query Processing, and Lightweight Query Profiling
03 - New Security Capabilities Learn the new security capabilities of SQL Server 2019 such as Always Encrypted with Enclaves, Data Classification, and Static Data Masking
04 - Mission Critical Availability TLearn Mission Critical Availability with SQL Server 2019 such as online indexing, Availability Group Enhancements, and Accelerated Database Recovery
05 - The Modern Development Platform Learn how SQL Server 2019 meets the needs of the modern developer incuding graph database, machine learning built into the database, and extending the T-SQL language with Java
06 - SQL Server on Linux Learn the fundamentals of SQL Server on Linux including deploying and exploring SQL Server capabilities
07 - SQL Server Containers and Kubernetes Learn how to use containers and Kubernetes with SQL Server
08 - SQL Server Data Virtualization Learn new data virtualization capabilties of SQL Server 2019 with Polybase and Big Data Clusters
09 - What Else is New Learn what other new features you can use with SQL Server 2019
10 - Migration and Next Steps Learn how to migrate to SQL Server 2019 and your next steps
- -

- -

Next Steps

- +![](graphics/microsoftlogo.png) + +# Workshop: Modernize Your Database with SQL Server 2019 + +#### A Microsoft Course from the SQL Server team + +

+ +

About this Workshop

+ +Welcome to this Microsoft solutions workshop on *Modernizing Your Database with SQL Server 2019*. In this workshop, you'll learn how SQL Server 2017 and SQL Server 2019 can help you to modernizing your database workloads. + +This README.MD file explains how the workshop is laid out, what you will learn, and the technologies you will use in this solution. + +

+ +

Learning Objectives

+ +

+

Business Applications of this Workshop

+ +

+ +

Technologies used in this Workshop

+ +

+ +

Before Taking this Workshop

+ + + +

Setup

+ +

+ +

Workshop Details

+ +

+ +

Related Workshops

+ + +

+ +

Workshop Modules

+ +This is a modular workshop, and in each section, you'll learn concepts, technologies, and processes to help you complete the solution. + + + + + + + + + + + + + + + +
ModuleTopics
01 - Why SQL Server 2019 Learn why SQL Server is a new modern data platform for your business
02 - Intelligent Performance Explore the performance capabilities such as Automatic Tuning Intelligent Query Processing, and Lightweight Query Profiling
03 - New Security Capabilities Learn the new security capabilities of SQL Server 2019 such as Always Encrypted with Enclaves, Data Classification, and Static Data Masking
04 - Mission Critical Availability TLearn Mission Critical Availability with SQL Server 2019 such as online indexing, Availability Group Enhancements, and Accelerated Database Recovery
05 - The Modern Development Platform Learn how SQL Server 2019 meets the needs of the modern developer incuding graph database, machine learning built into the database, and extending the T-SQL language with Java
06 - SQL Server on Linux Learn the fundamentals of SQL Server on Linux including deploying and exploring SQL Server capabilities
07 - SQL Server Containers and Kubernetes Learn how to use containers and Kubernetes with SQL Server
08 - SQL Server Data Virtualization Learn new data virtualization capabilties of SQL Server 2019 with Polybase and Big Data Clusters
09 - What Else is New Learn what other new features you can use with SQL Server 2019
10 - Migration and Next Steps Learn how to migrate to SQL Server 2019 and your next steps
+ +

+ +

Next Steps

+ Next, Continue to Pre-Requisites \ No newline at end of file diff --git a/README.md b/README.md index 985b29ca..78fd73af 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # SQL Server Workshops +## (https://aka.ms/sqlworkshops) This site is a map of learning content produced by and curated by the SQL Server team in Microsoft Engineering. These materials are meant to be instructor-led, but you can work through the materials on a test system on your own if desired. You can view all materials directly in this interface, or you can [view the raw github site for this content here](https://github.com/Microsoft/sqlworkshops). -See the license information at the bottom of this README.md file. +*See the license information at the bottom of this README.md file* Find a problem? Spot a bug? [Post an issue here](https://github.com/Microsoft/sqlworkshops/issues) and we'll try and fix it. @@ -29,12 +30,11 @@ Find a problem? Spot a bug? [Post an issue here](https://github.com/Microsoft/sq - [In Development](https://github.com/Microsoft/sqlworkshops) -## Resources, Source Slide Decks and Code Examples - -- [PowerPoint Decks from SQL Server Team Sessions](https://github.com/Microsoft/sqlworkshops/tree/master/References/README.MD#decks) -- [Sample Code](https://github.com/Microsoft/sqlworkshops/tree/master/References/README.MD#code) -- [References and Resources](https://github.com/Microsoft/sqlworkshops/tree/master/References/README.MD#links) +## Presentation Materials, Code, and References +- [Presentation Materials - *(PowerPoint Decks, etc.)*](https://github.com/Microsoft/sqlworkshops/tree/master/References/README.MD#decks) +- [Example Code](https://github.com/Microsoft/sqlworkshops/tree/master/References/README.MD#code) +- [References and Tools from the Microsoft SQL Server Team](https://github.com/Microsoft/sqlworkshops/tree/master/References/README.MD#links) ## Learning how to self-learn @@ -66,13 +66,13 @@ You can follow the steps below to clone individual files from a git repo using a Example: -``` +
 git clone -n https://github.com/Microsoft/sqlworkshops
 cd sqlworkshops
 git config core.sparsecheckout true
 echo workshopname/*| out-file -append -encoding ascii .git/info/sparse-checkout
 git checkout
-```
+
For more information about `sparse checkout please` visit [this](https://stackoverflow.com/questions/23289006/on-windows-git-error-sparse-checkout-leaves-no-entry-on-the-working-directory) stackoverflow thread. diff --git a/References/README.MD b/References/README.MD index 57a40ec6..39bf0aac 100644 --- a/References/README.MD +++ b/References/README.MD @@ -1,6 +1,6 @@ -# References: Microsoft SQL Server and Machine Learning in SQL Server (On-prem and Azure) +# Resources from the Microsoft SQL Server and Azure Data Services Teams #### Microsoft References from the Azure Data Services Team @@ -13,7 +13,7 @@ The Microsoft SQL Server organization (along with its parent, the Microsoft Azur *(Note: These scripts, tools and information site are a not guarenteed to work in every situation, or to be placed into production without thoroughly testing on your own. Microsoft assumes no risk associated with your use of these tools. These sites have adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.)* -

PowerPoint Decks and other Resources

+

PowerPoint Decks and Presentation Materials

These PowerPoint Decks deal with SQL Server in general, for many different versions and editions. If you find a dead link, hit up the Issues link above to report it. @@ -25,7 +25,6 @@ These PowerPoint Decks deal with SQL Server in general, for many different versi -

Sample Code from Demos and Courses

@@ -42,7 +41,6 @@ These references deal with SQL Server code samples from our courses and other us -

General References and Resources

@@ -52,21 +50,24 @@ These references deal with SQL Server in general, for many different versions an - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
Resource Description
http://aka.ms/AIDAdaptive Index Defrag
http://aka.ms/bpcheckPerformance and Best Practices Check
http://aka.ms/dbcompatDatabase Compatibility Levels and SQL Server Upgrades
http://aka.ms/iqpIntelligent Query Processing in SQL databases
http://aka.ms/sqlconventionsT-SQL Conventions and Syntax
http://aka.ms/sqlerrorsErrors and Events Reference (Database Engine)
http://aka.ms/sqlfeedbackSubmit feedback to the SQL Server team
http://aka.ms/sqllifecycleSQL Server Lifecycle Dates
http://aka.ms/sqlperfcenterPerformance Center for SQL Server Database Engine and Azure SQL Database
http://aka.ms/sqlserverguidesAll official SQL Server Guide publications containing information on Database Engine internals
http://aka.ms/sqlstandardsSQL Server Standards Support
http://aka.ms/sqlupdatesLatest SQL Server Builds
http://aka.ms/sqlworkshopsIn-Depth Training from the Azure Data Services Team
http://aka.ms/tigertoolboxSQL Server Tiger Team Toolbox
http://aka.ms/traceflagsSQL Server Trace Flags
http://aka.ms/aidAdaptive Index Defrag
http://aka.ms/bpcheckPerformance and Best Practices Check
http://aka.ms/dbcompatDatabase Compatibility Levels and SQL Server Upgrades
http://aka.ms/iqpIntelligent Query Processing in SQL databases
http://aka.ms/iqpdemosIntelligent Query Processing Demos
http://aka.ms/sqlconventionsT-SQL Conventions and Syntax
http://aka.ms/sqlerrorsErrors and Events Reference (Database Engine)
http://aka.ms/sqlfeedbackSubmit feedback to the SQL Server team
http://aka.ms/sqllifecycleSQL Server Lifecycle Dates
http://aka.ms/sqlperfcenterPerformance Center for SQL Server Database Engine and Azure SQL Database
http://aka.ms/sqlserversamplesSQL Server Samples Repository that demonstrate how to use Microsoft's SQL products including SQL Server, Azure SQL Database, and Azure SQL Data Warehouse
http://aka.ms/sqlserverguidesAll official SQL Server Guide publications containing information on Database Engine internals
http://aka.ms/sqlstandardsSQL Server Standards Support
http://aka.ms/sqlupdatesLatest SQL Server Builds
http://aka.ms/sqlworkshopsIn-Depth Training from the Azure Data Services Team
http://aka.ms/tigertoolboxSQL Server Tiger Team Toolbox
http://aka.ms/traceflagsSQL Server Trace Flags
http://aka.ms/uspwhatsupReport all you need to know about in-flight queries and any blocking in SQL Server. Also available as SQL Notebook
diff --git a/SQLonOpenShift/README.md b/SQLonOpenShift/README.md index e0c05bec..4b99f72f 100644 --- a/SQLonOpenShift/README.md +++ b/SQLonOpenShift/README.md @@ -1,69 +1,128 @@ -![](graphics/microsoftlogo.png) - -# Workshop: SQL Server on OpenShift - -#### A Microsoft Course from the SQL Server team - -

- -

About this Workshop

- -Welcome to this Microsoft solutions workshop on *SQL Server on OpenShift*. In this workshop, you'll learn how deploy and use SQL Server on an OpenShift cluster. - -This README.MD file explains how the workshop is laid out, what you will learn, and the technologies you will use in this solution. - -

- -

Learning Objectives

- -

-

Business Applications of this Workshop

- -

- -

Technologies used in this Workshop

- -

- -

Before Taking this Workshop

- - - -

Setup

- -

- -

Workshop Details

- -

- -

Related Workshops

- - -

- -

Workshop Modules

- -This is a modular workshop, and in each section, you'll learn concepts, technologies, and processes to help you complete the solution. - - - - - - - - - - - - - - - -
ModuleTopics
01 - Deploy SQL Server on OpenShift TODO: Module Description
02 - Connect and Query SQL Server TODO: Module Description
03 - Performance Capabilities of SQL Server TODO: Module Description
04 - High Availability of SQL Server on OpenShift TODO: Module Description
05 - Using an Operator with SQL Server TODO: Module Description
06 - Executing Python and Java with SQL Server TODO: Module Description
07 - Using Notebooks with SQL Server TODO: Module Description
08 - TBD TODO: Module Description
09 - TBD TODO: Module Description
10 - TBD TODO: Module Description
- -

- -

Next Steps

- -Next, Continue to Pre-Requisites \ No newline at end of file + +![](graphics/microsoftlogo.png) + +# Workshop: SQL Server on OpenShift + +#### A Microsoft Course from the SQL Server team + +

+ +

About this Workshop

+ +Welcome to this Microsoft solutions workshop on *SQL Server on OpenShift*. In this workshop, you'll learn how to deploy and use SQL Server containers on an OpenShift cluster. + +You will learn the basics of deployment, connection, query execution, performance, high availability, operators, and Always On Availability Groups. + +This README.MD file explains how the workshop is laid out, what you will learn, and the technologies you will use in this solution. + +The workshop is currently built to support SQL Server on OpenShift 3.11. A future version of the course will support OpenShift 4.0 + +

+ +

Learning Objectives

+
+- Learn the basics of deploying SQL Server on an OpenShift cluster. +- Learn how to connect and run queries against SQL Server deployed on OpenShift. +- Learn performance capabilities of SQL Server deployed on OpenShift +- Learn basic High Availability capabilities of SQL Server deployed on OpenShift +- Learn how to use an operator to deploy and manage an Always On Availability Group on OpenShift. + +

+

Business Applications of this Workshop

+ +
+ +- Developers looking to deploy a database container for their applications on OpenShift +- Database Administrators looking to understand how to deploy database platforms like SQL Server in a Kubernetes cluster using OpenShift.
+

+ +

Technologies used in this Workshop

+ +
+ + + + + + + + + + + + + + + + + + + +
Technology Description
SQL ServerDatabase Platform produced by Microsoft
SQL Server 2019Most current release of SQL Server currently in preview
Intelligent Query ProcessingAutomated query processing enhancements in SQL Server 2019
Always On Availability GroupSQL Server High Availability Disaster Recovery capabilities based on replicas
LinuxOperating system used in Containers and Container Orchestration
DockerEngine for running and manage containers
KubernetesOrchestration and Management platform for Containers
OpenShiftFamily of containerization software developed by Red Hat
OpenShift PlatformKubernetes based platform for containers
ocOpenShift CLI program. Similar to kubectl
projectEquivalent to Kubernetes namespace
Azure Data StudioGraphical User Interface to execute T-SQL queries and manage SQL Server
SQL Server Command Line ToolsUtilities to connect and query SQL Server such as sqlcmd
+ +

+ +

Before Taking this Workshop

+ +
+ +To complete this workshop you will need the following: + +- A client computer connected to the Internet that has can run a Linux shell and can run SQL Server command line tools. +- Access to a OpenShift 3.11 cluster +- Access to all the scripts provided from this workshop from the GitHub repo. + +You might be taking this workshop from an instructor who will provide access to an OpenShift cluster. + + +

Setup

+ +A complete Prerequisites [document](sqlonopenshift/00_Prereqs.md) exists as part of this workshop. You will be guided to go through Prerequisites in the Next Steps at the bottom of this page. + +

+ +

Workshop Details

+ +This workshop uses OpenShift, SQL Server 2019, Azure Data Studio, SQL Command Line Tools, and the OpenShift CLI (oc). + + + + + + + + + +
Primary Audience:Administrators looking to learn how to deploy, use, and manage SQL Server on OpenShift
Secondary Audience: Developers, Architects, and IT Pros
Level: 300
Type:Self-Paced or In-Person
Length: 2 hours (self-paced) 4 hours (In-Person)
+ +

+ +

Related Workshops

+ +- [Modernize your Database with SQL Server 2019](https://github.com/Microsoft/sqlworkshops/tree/rgward/ModernizeYourDatabases2019) + +

+ +

Workshop Modules

+ +This is a modular workshop, and in each section, you'll learn concepts, technologies, and processes to help you complete the solution. + +**Proceed to Next Steps below to start the workhop.** + + + + + + + + + + + + +
ModuleTopics
01 - Deploy SQL Server on OpenShift Learn the fundamentals of deploying SQL Server container on OpenShift
02 - Connect and Query SQL Server Learn the basics of connecting and running queries to a SQL Server container on OpenShift
03 - Performance Capabilities of SQL Server Learn how to boost query performance and take advantage of intelligent query processing
04 - High Availability of SQL Server on OpenShift Learn the fundamentals of high availability for SQL Server on OpenShift
05 - Using an Operator with SQL Server Learn how to deploy, configure, and setup Always On Availability Groups with an Operator on OpenShift
+ +

+ +

Next Steps

+Next, Continue to PreRequisites diff --git a/SQLonOpenShift/graphics/03_IQP_Table_Variable_Notebook.jpg b/SQLonOpenShift/graphics/03_IQP_Table_Variable_Notebook.jpg new file mode 100644 index 00000000..ceb283c9 Binary files /dev/null and b/SQLonOpenShift/graphics/03_IQP_Table_Variable_Notebook.jpg differ diff --git a/SQLonOpenShift/graphics/ADS_initial_prompts.jpg b/SQLonOpenShift/graphics/ADS_initial_prompts.jpg new file mode 100644 index 00000000..b1667053 Binary files /dev/null and b/SQLonOpenShift/graphics/ADS_initial_prompts.jpg differ diff --git a/SQLonOpenShift/graphics/AG_on_OpenShift.jpg b/SQLonOpenShift/graphics/AG_on_OpenShift.jpg new file mode 100644 index 00000000..ce794ddf Binary files /dev/null and b/SQLonOpenShift/graphics/AG_on_OpenShift.jpg differ diff --git a/SQLonOpenShift/graphics/Azure_Data_Studio_Connect.jpg b/SQLonOpenShift/graphics/Azure_Data_Studio_Connect.jpg new file mode 100644 index 00000000..463ffbc8 Binary files /dev/null and b/SQLonOpenShift/graphics/Azure_Data_Studio_Connect.jpg differ diff --git a/SQLonOpenShift/graphics/Azure_Data_Studio_Status_Bar.jpg b/SQLonOpenShift/graphics/Azure_Data_Studio_Status_Bar.jpg new file mode 100644 index 00000000..2359caae Binary files /dev/null and b/SQLonOpenShift/graphics/Azure_Data_Studio_Status_Bar.jpg differ diff --git a/SQLonOpenShift/graphics/Azure_Data_Studio_Successful_Connect.jpg b/SQLonOpenShift/graphics/Azure_Data_Studio_Successful_Connect.jpg new file mode 100644 index 00000000..fef9aeea Binary files /dev/null and b/SQLonOpenShift/graphics/Azure_Data_Studio_Successful_Connect.jpg differ diff --git a/SQLonOpenShift/graphics/IQP_diagram.png b/SQLonOpenShift/graphics/IQP_diagram.png new file mode 100644 index 00000000..58889595 Binary files /dev/null and b/SQLonOpenShift/graphics/IQP_diagram.png differ diff --git a/SQLonOpenShift/graphics/IQP_query_plan_130.jpg b/SQLonOpenShift/graphics/IQP_query_plan_130.jpg new file mode 100644 index 00000000..6e6884e1 Binary files /dev/null and b/SQLonOpenShift/graphics/IQP_query_plan_130.jpg differ diff --git a/SQLonOpenShift/graphics/IQP_query_plan_150.jpg b/SQLonOpenShift/graphics/IQP_query_plan_150.jpg new file mode 100644 index 00000000..2066c674 Binary files /dev/null and b/SQLonOpenShift/graphics/IQP_query_plan_150.jpg differ diff --git a/SQLonOpenShift/graphics/IQP_query_store_results.jpg b/SQLonOpenShift/graphics/IQP_query_store_results.jpg new file mode 100644 index 00000000..6fd927fd Binary files /dev/null and b/SQLonOpenShift/graphics/IQP_query_store_results.jpg differ diff --git a/SQLonOpenShift/graphics/OpenShift_Console_Login.jpg b/SQLonOpenShift/graphics/OpenShift_Console_Login.jpg new file mode 100644 index 00000000..36df669b Binary files /dev/null and b/SQLonOpenShift/graphics/OpenShift_Console_Login.jpg differ diff --git a/SQLonOpenShift/graphics/OpenShift_Copy_Login.jpg b/SQLonOpenShift/graphics/OpenShift_Copy_Login.jpg new file mode 100644 index 00000000..e015f756 Binary files /dev/null and b/SQLonOpenShift/graphics/OpenShift_Copy_Login.jpg differ diff --git a/SQLonOpenShift/graphics/OpenShift_Master_Console.jpg b/SQLonOpenShift/graphics/OpenShift_Master_Console.jpg new file mode 100644 index 00000000..26fa95db Binary files /dev/null and b/SQLonOpenShift/graphics/OpenShift_Master_Console.jpg differ diff --git a/SQLonOpenShift/graphics/azure_data_studio_icon.png b/SQLonOpenShift/graphics/azure_data_studio_icon.png new file mode 100644 index 00000000..f60b4bd1 Binary files /dev/null and b/SQLonOpenShift/graphics/azure_data_studio_icon.png differ diff --git a/SQLonOpenShift/graphics/k8s_high_availability.jpg b/SQLonOpenShift/graphics/k8s_high_availability.jpg new file mode 100644 index 00000000..b8f435fe Binary files /dev/null and b/SQLonOpenShift/graphics/k8s_high_availability.jpg differ diff --git a/SQLonOpenShift/graphics/proc_created_results.jpg b/SQLonOpenShift/graphics/proc_created_results.jpg new file mode 100644 index 00000000..17eb44ea Binary files /dev/null and b/SQLonOpenShift/graphics/proc_created_results.jpg differ diff --git a/SQLonOpenShift/graphics/repro_130_duration.jpg b/SQLonOpenShift/graphics/repro_130_duration.jpg new file mode 100644 index 00000000..36937fcd Binary files /dev/null and b/SQLonOpenShift/graphics/repro_130_duration.jpg differ diff --git a/SQLonOpenShift/graphics/repro_130_results.jpg b/SQLonOpenShift/graphics/repro_130_results.jpg new file mode 100644 index 00000000..e749902d Binary files /dev/null and b/SQLonOpenShift/graphics/repro_130_results.jpg differ diff --git a/SQLonOpenShift/sqlonopenshift/00_Prereqs.md b/SQLonOpenShift/sqlonopenshift/00_Prereqs.md new file mode 100644 index 00000000..ce85d381 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/00_Prereqs.md @@ -0,0 +1,121 @@ +![](../graphics/microsoftlogo.png) + +# Workshop: SQL Server on OpenShift + +#### A Microsoft workshop from the SQL Server team + +

+ +

Prerequisites

+ +You'll cover the following topics in this Module: + +
+ +
0.0 Prerequisites
+ +
+ +

+ +

0.0 Prerequisites

+ +In this module you will learn what the prerequisites are for this workshop. + +The workshop does not assume a deep working knowledge of SQL Server or OpenShift. It does have an assumption to know basics of using a Linux bash shell but all commands are provided to run the activities including scripts. + +In order to go through the activities of this workshop you will need the following: + +**Note**: It is possible your instructor will provide you with a client environment and full access to an OpenShift cluster including login credentials. + +- Access to an OpenShift 3.11 cluster. The workshop is currently designed for OpenShift 3.11 and has not been tested for OpenShift 4.0 +- Modules 1 through 4 require user privileges for the OpenShift cluster for **anyuid** at minimum. Module 5 currently requires cluster admin rights. +- A client computer that has access to connect to the OpenShift cluster and has the following software installed + +1. A Linux bash shell +2. The OpenShift CLI (oc.exe) +3. Azure Data Studio - Minimum version is 1.5.2. Install from https://docs.microsoft.com/en-us/sql/azure-data-studio/download +4. SQL Command Line Tools (sqlcmd). Check the **For Further Study** section for links to install these tools. +5. git client (only needed if you do not have the latest version of the workshop provided to you by the instructor) +6. In addition, the client computer must be able to connect to the Internet to download a sample file or your instructor must provide it for you (WideWorldImporters-Full.bak) + +The workshop currently supports a single node OpenShift cluster but can be run on a multiple cluster environment. Each user will need ~8Gb of RAM to run the containers in the workshop. + +Proceed to the Activity to go through the prerequisites. + +

+ +

Activity: Prerequsites

+ +1. Download the latest version of the workshop from https://aka.ms/sqlworkshops. If you have used git clone to pull down the repo of the workshops, run **git pull** to get the latest version. + +2. Login to your OpenShift cluster by using the URL provided to you for the **openshiftConsoleUrl** in a web browser. + +3. You may get warnings from the web page saying "This site is not secure". Click Details and then "Go on to the webpage" + +4. You will be presented with a login screen like the following + + ![OpenShift login screen](../graphics/OpenShift_Console_Login.jpg) + +5. Type in the user name and password provided to you for OpenShift cluster access. Your instructor may call this **openshiftAdminUsername** and **openshiftPassword** + +6. You will now see a new web page like the following + + ![OpenShift Master Console](../graphics/OpenShift_Master_Console.jpg) + +7. In the upper right hand corner, click on your user name and select Copy Login Command like the following + + ![copy login command](../graphics/OpenShift_Copy_Login.jpg) + +8. You now have on your clipboard a complete oc login sytnax with a token. Open up a shell and paste in the copy (right click your mouse) + + The command should look something like this + + `oc login https://[masterconsoleaddress]:443 --token=[tokenstring]` + + Hit enter + + You should see results like the following and then placed back at the command prompt + +
Logged into "https://[masterconsoleurl]:443" as "ocpadmin" using the token provided.
+
+You have access to the following projects and can switch between them with 'oc project projectname':
+
+  * default
+    kube-public
+    kube-service-catalog
+    kube-system
+    management-infra
+    openshift
+    openshift-ansible-service-broker
+    openshift-console
+    openshift-infra
+    openshift-logging
+    openshift-monitoring
+    openshift-node
+    openshift-sdn
+    openshift-template-service-broker
+    openshift-web-console
+
+Using project "default".
+
+ +You have now successfully logged into the OpenShift Cluster and can proceed with Next Steps below. + +

+ +

For Further Study

+ +- [Red Hat OpenShift](https://www.openshift.com/) +- [oc CLI downloads](https://www.okd.io/download.html) +- [Azure Data Studio](https://docs.microsoft.com/en-us/sql/azure-data-studio/what-is) +- [SQL Command Line Tools for Linux](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools) +- [SQL Command Line Tools for MacOS](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools?view=sql-server-2017#macos) +- [SQL Command Line Tools for Windows](https://www.microsoft.com/en-us/download/details.aspx?id=53591) + +

+ +

Next Steps

+ +Next, Continue to +Deploy SQL Server on OpenShift. diff --git a/SQLonOpenShift/sqlonopenshift/01_Deploy.md b/SQLonOpenShift/sqlonopenshift/01_Deploy.md new file mode 100644 index 00000000..f41d6905 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_Deploy.md @@ -0,0 +1,137 @@ +![](../graphics/microsoftlogo.png) + +# Workshop: SQL Server on OpenShift + +#### A Microsoft workshop from the SQL Server team + +

+ +

Deploy SQL Server on OpenShift

+ +You'll cover the following topics in this Module: + +
+ +
1.0 SQL Server Deployment on OpenShift
+ +
+ +

+ +

1.0 SQL Server Deployment on OpenShift

+ +In this module you will learn the fundamentals of how to deploy SQL Server on OpenShift. The SQL Server engine can be run in a container and on a Kubernetes cluster. In this module, you will learn the basic steps for how to deploy a SQL Server container in an OpenShift cluster. This module is required to complete Modules 2, 3, and 4 of the workshop. + +In the deployment of SQL Server on OpenShift, you will: + +- Create a new project to deploy SQL Server. +- Create a secret for the password to login to SQL Server +- Create a PersistentVolumeClaim where SQL Server databases and files will be stored +- Deploy a SQL Server container using a declarative .yaml file which will include a LoadBalancer service to connect to SQL Server. + + Kubernetes and OpenShift are *declarative* systems. You program how to run and manage objects in OpenShift using a command line tool like oc. yaml files are used to declare how to build and manage objects through the Kubernetes API Server. + +In the activity for this module and others in the workshop you will often complete exercises by *executing* yaml files using a command like + +`oc apply -f .yaml` + +Inside each yaml file is declarations of objects to deploy or commands to execute. + +Proceed to the Activity to learn these deployment steps. + +

+ +

Activity: Deploy SQL Server on OpenShift

+ +Follow these steps to deploy SQL Server on OpenShift: + +1. Open a shell prompt and change directories to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/01_deploy** folder. + +2. You should have already logged into the OpenShift cluster using instructions from the Prerequisites. + +3. If you are running this workshop as a cluster admin and the instructor did not create a new project, then create a new project called **mssql** with the following command or execute the **step1_create_project.sh** script. + + `oc new-project mssql` + + When this completes, you should see the following messages and be placed back at the shell prompt + +
Now using project "mssql" on server "https://[servername]".
+   You can add applications to this project with the 'new-app' command. For example, try:
+   oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
+   to build a new example application in Ruby.
+ +3. Create a secret to store the System Administrator (sa) password. For this workshop, you will be connecting as the sa login. In production SQL Server environments, you would not normally use the sa login. Use the following command or execute the **step2_create_secret.sh** script: + + `oc create secret generic mssql --from-literal=SA_PASSWORD="Sql2019isfast"` + + When this completes you should see the following message and be placed back at the shell prompt + +
secret/mssql created
+ + **IMPORTANT: Take note of the value for SA_PASSWORD (without the quotes). The scripts in all modules use this password but you may need it to interactively work with SQL Server.** + +4. Create a PersistentVolumeClaim to store SQL Server databases and files. Use the following command or execute the **step3_storage.sh** script: + + **Note**: The PersistentVolumeClaim created assumes the default StorageClass of the OpenShift cluster. + + `oc apply -f storage.yaml` + + When this completes you should see the following message and be placed back at the shell prompt + +
persistentvolumeclaim/mssql-data created
+ +5. Deploy SQL Server using the following command or the **step4_deploy_sql.sh** script: + + `oc apply -f sqldeployment.yaml` + + When this completes, you should see the following messages and be placed back at the shell prompt + +
deployment.apps/mssql-deployment created
+   service/mssql-service created
+ + Take a minute to browse the **sqldeployment.yaml** file to see key pieces of how SQL Server was deployed including details of the container image, arguments, label to "tag" the deployment, what PersistentVolumeClaim to use (from the previous step) and a LoadBalancer service attached to this pod. + + At this time, you have submitted a deployment, which is a logical collection of objects including a pod, container, and LoadBalancer service. OpenShift will schedule a SQL Server container in a pod on a node on the cluster. Proceed to the next step to check on whether the deployment was successful. + +6. Verify the SQL Server deployment has succeeded by running the following command: + + `oc get deployment mssql-deployment` + + When the value of **AVAILABLE** becomes 1, the deployment is successful including a Running Container. Depending on the load of your cluster and whether the container image of SQL Server is already present, the deployment could take several minutes. + + You can run the following command to check on the status of the pod and LoadBalancer service: + + `oc get all` + + It is possible for the deployment to be successful but the LoadBalancer is not created. When everything about this deployment is successful, the STATUS of the pod is **Running** and the LoadBalancer service has a valid IP address for EXTERNAL-IP. + +7. The SQL Server database engine produces a file called the ERRORLOG file when it starts and can be used to gather interesting information about SQL Server or be used for troubleshooting. Since the output of the ERRORLOG is sent to stdout as part of running SQL Server as a container you can view these logs using OpenShift commands. Run the following commands to view the ERRORLOG or execute the script **step5_get_errorlog.sh**: + + `POD=$(oc get pods | grep mssql | awk {'print $1'})`
+`oc logs $POD` + + The ERRORLOG will scroll across the screen and you can scroll up in your shell to see all the output. + +A pod with a SQL Server container is now deployed and a LoadBalancer service is attached to the pod. The LoadBalancer will be a key component to connecting to SQL Server no matter where the pod is running in the cluster. + +
Do not proceed to the next Module until you have a valid IP address for the EXTERNAL-IP value for the LoadBalancer service. The value will say pending while it is being created. One some OpenShift cluster systems this process can take a few minutes.
+ +You can now proceed to Next Steps to Connect and Query SQL Server on OpenShift. + +

+ + + +

For Further Study

+ +- [Quickstart: Run SQL Server container images with Docker](https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-linux-ver15&pivots=cs1-bash) +- [Deploy a SQL Server container in Kubernetes with Azure Kubernetes Services (AKS)](https://docs.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes?view=sql-server-2017) +- [How Deployments Work in OpenShift](https://docs.openshift.com/online/dev_guide/deployments/how_deployments_work.html) +- [Using a LoadBalancer in OpenShift](https://docs.openshift.com/container-platform/3.11/dev_guide/expose_service/expose_internal_ip_load_balancer.html) +- [Using PersistentVolumeClaims in OpenShift](https://docs.openshift.com/container-platform/3.11/dev_guide/persistent_volumes.html) + +

+ +

Next Steps

+ +Next, Continue to Connect and Query. diff --git a/SQLonOpenShift/sqlonopenshift/01_deploy/sqldeployment.yaml b/SQLonOpenShift/sqlonopenshift/01_deploy/sqldeployment.yaml new file mode 100644 index 00000000..bb0458e5 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_deploy/sqldeployment.yaml @@ -0,0 +1,49 @@ +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: mssql-deployment +spec: + replicas: 1 + strategy: + type: Recreate + template: + metadata: + labels: + app: mssql + spec: + terminationGracePeriodSeconds: 10 + containers: + - name: mssql + image: mcr.microsoft.com/mssql/rhel/server:2019-CTP2.2 + ports: + - containerPort: 1433 + env: + - name: MSSQL_PID + value: "Developer" + - name: ACCEPT_EULA + value: "Y" + - name: MSSQL_SA_PASSWORD + valueFrom: + secretKeyRef: + name: mssql + key: SA_PASSWORD + volumeMounts: + - name: mssqldb + mountPath: /var/opt/mssql + volumes: + - name: mssqldb + persistentVolumeClaim: + claimName: mssql-data +--- +apiVersion: v1 +kind: Service +metadata: + name: mssql-service +spec: + selector: + app: mssql + ports: + - protocol: TCP + port: 31433 + targetPort: 1433 + type: LoadBalancer diff --git a/SQLonOpenShift/sqlonopenshift/01_deploy/step1_create_project.sh b/SQLonOpenShift/sqlonopenshift/01_deploy/step1_create_project.sh new file mode 100644 index 00000000..1d302b0e --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_deploy/step1_create_project.sh @@ -0,0 +1 @@ +oc new-project mssql diff --git a/SQLonOpenShift/sqlonopenshift/01_deploy/step2_create_secret.sh b/SQLonOpenShift/sqlonopenshift/01_deploy/step2_create_secret.sh new file mode 100644 index 00000000..f61fc676 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_deploy/step2_create_secret.sh @@ -0,0 +1 @@ +oc create secret generic mssql --from-literal=SA_PASSWORD="Sql2019isfast" diff --git a/SQLonOpenShift/sqlonopenshift/01_deploy/step3_storage.sh b/SQLonOpenShift/sqlonopenshift/01_deploy/step3_storage.sh new file mode 100644 index 00000000..d4785bf1 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_deploy/step3_storage.sh @@ -0,0 +1 @@ +oc apply -f storage.yaml diff --git a/SQLonOpenShift/sqlonopenshift/01_deploy/step4_deploy_sql.sh b/SQLonOpenShift/sqlonopenshift/01_deploy/step4_deploy_sql.sh new file mode 100644 index 00000000..8b9b226e --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_deploy/step4_deploy_sql.sh @@ -0,0 +1 @@ +oc apply -f sqldeployment.yaml diff --git a/SQLonOpenShift/sqlonopenshift/01_deploy/step5_get_errorlog.sh b/SQLonOpenShift/sqlonopenshift/01_deploy/step5_get_errorlog.sh new file mode 100644 index 00000000..86efd5b8 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_deploy/step5_get_errorlog.sh @@ -0,0 +1,2 @@ +POD=$(oc get pods | grep mssql | awk {'print $1'}) +oc logs $POD diff --git a/SQLonOpenShift/sqlonopenshift/01_deploy/storage.yaml b/SQLonOpenShift/sqlonopenshift/01_deploy/storage.yaml new file mode 100644 index 00000000..f9823a2d --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/01_deploy/storage.yaml @@ -0,0 +1,10 @@ +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: mssql-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 8Gi diff --git a/SQLonOpenShift/sqlonopenshift/02_Query.md b/SQLonOpenShift/sqlonopenshift/02_Query.md new file mode 100644 index 00000000..5ab0dc8a --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_Query.md @@ -0,0 +1,289 @@ +![](../graphics/microsoftlogo.png) + +# Workshop: SQL Server on OpenShift + +#### A Microsoft workshop from the SQL Server team + +

+ +

Connect and Query SQL Server

+ +You'll cover the following topics in this Module: + +
+ +
2.0 Connect to SQL Server
+
2.1 Restore a Database Backup
+
2.2 Execute SQL Server Queries
+ +
+ +

+ +

2.0 Connect to SQL Server

+ +SQL Server provides several tools to connect and execute queries. Applications can use a variety of languages including C++, .Net, node.js, and Java. To see examples of how to write applications to connect to SQL Server, visit https://aka.ms/sqldev. + +The simplest method to connect to SQL Server deployed on OpenShift is to use the command line tool **sqlcmd**, which is natively built for Windows, Linux, and MacOS systems. The Prerequisites for this workshop provided instructions for how to install the SQL Command Line tools including sqlcmd. In some deliveries of this workshop, sqlcmd may already be installed. + +To connect to SQL Server, you need first know: + +- The name of the server or IP address hosting SQL Server +- The port number (if SQL was configured to not use the default port of 1433) +- A login name +- A password + +In order to complete the Activities of this Module, you must first complete the Activity in **Module 1 Deploy SQL Server on OpenShift**. In Module 1, you deployed a pod with a SQL Server Container. The Activities in this module will help you determine the above information on how to connect to your SQL Server deployment. + +Proceed to the Activity to learn the fundamentals of connecting to SQL Server deployed on OpenShift. + +

Activity: Connect to SQL Server

+ +Follow these steps to connect to SQL Server deployed on OpenShift: + +1. Open a shell prompt and change to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/02_query** directory. + +2. The most fundamental method to connect to SQL Server is to use sqlcmd and execute the T-SQL query SELECT @@version to determine the version of SQL Server installed. Think of this as the *Hello World* test of SQL Server. Execute the following commands from your shell prompt or use the script **step1_test_sql.sh**:

+`SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+`PORT=31433`
+`sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT @@version"` + + In this example, the IP address and the port of the Load Balancer service is used to connect to SQL Server as the IP address of the pod may change if OpenShift has to restart or move the pod. You used the -Q parameter of sqlcmd which allows you to specify a T-SQL statement(s) directly from the command line. + + The output of this command will look something like this should the connection and query be successful + +
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+   Microsoft SQL Server 2019 (CTP2.4) - 15.0.1400.75 (X64)
+   Mar 16 2019 11:53:26
+   Copyright (C) 2019 Microsoft Corporation
+   Developer Edition (64-bit) on Linux (Red Hat Enterprise Linux Server 7.6 (Maipo)) X64                       
+   (1 rows affected)
+ +Your version information may be different depending if this workshop is updated to use newer versions of SQL Server. + +Proceed to the next activity to work with databases with SQL Server by restoring a backup. + +

+ +

2.1 Restore a Database Backup

+ +SQL Server is all about data so one of the first things any user wants to do is create a database, populate some data into it, and run queries. For the purposes of this workshop, a simpler method to get going quickly is to restore a backup of an existing database and run queries. For this workshop, you will use the sample database provided by Microsoft called **WideWorldImporters**. + +Proceed to the Activity to learn how to restore a database backup to SQL Server deployed on OpenShift. + +

Activity: Restore a SQL Database Backup

+ +Follow these steps to restore a database backup to SQL Server deployed on OpenShift: + +1. Open a shell prompt and change to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/02_query** directory. + +2. If your workshop does not already include a copy of the backup of the WideWorldImporters database (a file called WideWorldImporters-Full.bak) execute the script **getwwi.sh** to download the backup. + +3. In Module 1, you deployed SQL Server on OpenShift which is running in a container. So to restore a backup of WideWorldImporters, you must copy the backup you downloaded into the filesystem of the container. In this step, you will copy the backup into the container folder /var/opt/mssql. The SQL Server database engine by default has permissions to read backup files in this folder to restore the database. Execute the following command to copy the database backup file into the container or execute the script **step2_copy_backup_into_container.sh** + + `POD=$(oc get pods | grep mssql-deployment | awk {'print $1'})`
+ `oc cp ./WideWorldImporters-Full.bak $POD:/var/opt/mssql/WideWorldImporters-Full.bak` + + Depending on the speed of the connectivity of your computer, the process to copy the file into the container could take several minutes. + + When this command completes, there is no output. You are placed back a the shell prompt. + +4. Now you will use the T-SQL **RESTORE DATABASE** command to restore the database backup. Execute the following commands using the sqlcmd tool or execute the script **step3_restore_backup.sh**: + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -irestorewwi.sql` + + In this example, you used the -i parameter for sqlcmd to execute a *script* with the RESTORE DATABASE command. You can examine the contents of the restorewwi.sql T-SQL script to see the example syntax using `cat restorewwi.sql` from the shell. + + The WideWorldImporters backup you downladed was created on SQL Server 2016 on Windows (one of the great stories about SQL Server is compatibility. A backup on Windows can be restored on Linux and vice versa). SQL Server 2019 will automatically detect the older version and upgrade the database. This is why the RESTORE command can take a few minutes to execute. When the command completes the output to the shell prompt will scroll across several lines but end with something like the following: + +
Database 'WideWorldImporters' running the upgrade step from version 895 to version 896
Database 'WideWorldImporters' running the upgrade step from version 896 to version 897
RESTORE DATABASE successfully processed 58455 pages in 30.797 seconds (14.828 MB/sec).
+ + Notice the end of the restore command displays how many database pages were restored (SQL Server stores data in 8K pages) and the duration it took to restore the database. The database has been restored, brought online, and is available to run queries. + + +

+ +

2.2 Execute SQL Server Queries

+ +The T-SQL language allows all types of queries to be executed against your data including basic CRUD operations (Create, Read, Update, and Delete) and a host of other functionality. You can find the complete T-SQL reference at https://docs.microsoft.com/en-us/sql/t-sql/language-reference. + +If you are given a database backup to restore, one of the first things you want to do is explore what is in the database. SQL Server provides a rich set of metadata about the database through *catalog views*. This allows you to find out what tables, columns, and other objects exist in a database. + +In addition, to find out what data exists within tables in the database, you will use the most often used T-SQL command SELECT against tables you have permissions to query. + +SQL Server also provides a robust set of *dynamic management views* (DMV) through SELECT statements to query the state of the database engine. + +Proceed to the Activity to learn how to run queries against a SQL Server deployed on OpenShift including catalog views, data within the database, and Dynamic Management Views. + +

Activity: Execute SQL Server Queries

+ +Follow these steps to execute example queries against a SQL Server deployed on OpenShift: + + **Note**: These steps assume you have followed the previous sections of this module. + +1. Open a shell prompt and change to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/02_query** directory. + +2. Run the following set of commands to find out what user tables are in the WideWorldImporters database backup you restored. You can also use the script **step4_find_tables.sh**: + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"USE WideWorldImporters;SELECT name, SCHEMA_NAME(schema_id) as schema_name FROM sys.objects WHERE type = 'U' ORDER BY name" -Y30` + + When the command completes, the output should scroll across your screen like this
+ +
Changed database context to 'WideWorldImporters'.
+   name                           schema_name
+   ------------------------------ ------------------------------
+   BuyingGroups                   Sales
+   BuyingGroups_Archive           Sales
+   Cities                         Application
+   Cities_Archive                 Application
+   ColdRoomTemperatures           Warehouse
+   ColdRoomTemperatures_Archive   Warehouse
+   Colors                         Warehouse
+   Colors_Archive                 Warehouse
+   Countries                      Application
+   Countries_Archive              Application
+   CustomerCategories             Sales
+   CustomerCategories_Archive     Sales
+   Customers                      Sales
+   Customers_Archive              Sales
+   CustomerTransactions           Sales
+   DeliveryMethods                Application
+   DeliveryMethods_Archive        Application
+   InvoiceLines                   Sales
+   Invoices                       Sales
+   OrderLines                     Sales
+   Orders                         Sales
+   PackageTypes                   Warehouse
+   PackageTypes_Archive           Warehouse
+   PaymentMethods                 Application
+   PaymentMethods_Archive         Application
+   People                         Application
+   People_Archive                 Application
+   PurchaseOrderLines             Purchasing
+   PurchaseOrders                 Purchasing
+   SpecialDeals                   Sales
+   StateProvinces                 Application
+   StateProvinces_Archive         Application
+   StockGroups                    Warehouse
+   StockGroups_Archive            Warehouse
+   StockItemHoldings              Warehouse
+   StockItems                     Warehouse
+   StockItems_Archive             Warehouse
+   StockItemStockGroups           Warehouse
+   StockItemTransactions          Warehouse
+   SupplierCategories             Purchasing
+   SupplierCategories_Archive     Purchasing
+   Suppliers                      Purchasing
+   Suppliers_Archive              Purchasing
+   SupplierTransactions           Purchasing
+   SystemParameters               Application
+   TransactionTypes               Application
+   TransactionTypes_Archive       Application
+   VehicleTemperatures            Warehouse
+   (48 rows affected)
+ + You can see from the bottom of this output that there are 48 tables in this database. The output includes two columns, one is for the name of the table, and other is for the *schema* of the table. A schema allows you to organize objects in a group for applications, provide isolation of objects at a group (e.g. there can be the same table name in two different schemas), and security permissions at a group level. In order to query data from a table you need to know the name of the schema and have permissions for that schema. + + **Note**: In the above use of sqlcmd, the -Y30 parameter is used to ensure results are displayed as fixed width characters no longer than 30 characters for readability. + +3. Run the following commands to query data from the **People** table in the **Application** schema. In this database, the Application schema is used for tables that are used across the application and the People table holds data for any persons used across the Application for the WideWorldImporters company. You can also execute the script **step5_find_people.sh** to run these commands: + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"USE WideWorldImporters;SELECT TOP 10 FullName, PhoneNumber, EmailAddress FROM [Application].[People] ORDER BY FullName;" -Y30` + + Your results should look like the following + +
Changed database context to 'WideWorldImporters'.
+   FullName                       PhoneNumber          EmailAddress
+   ------------------------------ -------------------- ------------------------------
+   ahlada Thota                  (215) 555-0100       aahlada@tailspintoys.com
+   Aakarsha Nookala               (201) 555-0100       aakarsha@tailspintoys.com
+   Aakriti Bhamidipati            (307) 555-0100       aakriti@wingtiptoys.com
+   Aakriti Byrraju                (216) 555-0100       aakriti@example.com
+   Aamdaal Kamasamudram           (316) 555-0100       aamdaal@wingtiptoys.com
+   Abel Pirvu                     (216) 555-0100       abel@wingtiptoys.com
+   Abel Spirlea                   (218) 555-0100       abel@example.com
+   Abel Tatarescu                 (217) 555-0100       abel@example.com
+   Abhaya Rambhatla               (231) 555-0100       abhaya@wingtiptoys.com
+   Abhoy Prabhupda              (423) 555-0100       abhoy@tailspintoys.com
+
+   (10 rows affected)
+ + In this example, you used the TOP 10 option of a SELECT statement to only retrieve the first 10 rows in the People table and the ORDER BY clause to sort the results by name (default ascending)). + + These results contain privacy information. You can review a feature of SQL Server called Dynamic Data Masking to mask privacy information from application users. See more at https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking. + +4. Everything in SQL Server is a query even to gather dynamic information about the running state of the SQL Server database engine. Run the following commands to see insights into running sessions, queries, and memory consumption. You can also run the script **step6_dmv.sh** to execute these commands. + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -idmv.sql` + + This an example of running a T-SQL script with three *batches*. A batch is a series of T-SQL statements and with a script you can submit several batches from a single file. The contents of **dmv.sql** look like this: + + + ```sql + SELECT session_id, login_time, host_name, program_name, reads, writes, cpu_time + FROM sys.dm_exec_sessions WHERE is_user_process = 1 + GO + SELECT dr.session_id, dr.start_time, dr.status, dr.command + FROM sys.dm_exec_requests dr + JOIN sys.dm_exec_sessions de + ON dr.session_id = de.session_id + AND de.is_user_process = 1 + GO + SELECT cpu_count, committed_kb from sys.dm_os_sys_info + GO + ``` + The output should look something similar to this + +
session_id login_time              host_name                                                                                                                        program_name                                                                                                                     reads                writes               cpu_time
+    ---------- ----------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------- -------------------- -----------
+        51 2019-04-12 15:04:50.513 mssql-deploymen                                                                                                                  SQLServerCEIP                                                                                                                                       0                    0          50
+        52 2019-04-12 15:08:21.147 troyryanwin10                                                                                                                    SQLCMD                                                                                                                                              0                    0           0
+    (2 rows affected)
+    session_id start_time              status                         command
+    ---------- ----------------------- ------------------------------ --------------------------------
+        52 2019-04-12 15:08:21.317 running                        SELECT
+    (1 rows affected)
+    cpu_count   committed_kb
+    ----------- --------------------
+          2               405008
+ +The first T-SQL batch provides information about what sessions are connected to SQL Server with information about the session. The second T-SQL batch provides information about active queries against SQL Server. And the third batch provides information about how many CPUs SQL Server detected and how much memory the database engine has consumed. There are many Dynamic Management Views and more columns available than in the examples you used. You can read about all DMVs at https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/system-dynamic-management-views. + +5. As an optional exercise, you can connect with sqlcmd and run ad-hoc queries against SQL Server. I recommend you only run SELECT statements to read from SQL Server so you will not have issues with other Modules. Run the following commands to get a prompt to interactively use sqlcmd: + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -dWideWorldImporters`
+ + You should be presented with a prompt like this + +
1>
+ + You can now run T-SQL statement interactively with sqlcmd. By typing in a query and hitting Enter, you can type in the keyword **GO** and hit Enter to execute a query. Type in the keyword **exit** to leave sqlcmd. + +You can now proceed to Next Steps to learn more about SQL Server Performance. + +

+ +

For Further Study

+ +- [The sqlcmd utility](https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility) +- [Query Data with SQL Server](https://docs.microsoft.com/en-us/sql/lp/sql-server/query-data) +- [Backup and Restore of SQL Server Databases](https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases) +- [SQL Server Catalog Views](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/catalog-views-transact-sql) +- [SQL Server Dynamic Management Views](https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/system-dynamic-management-views) +- [The WideWorldImporters sample database](https://docs.microsoft.com/en-us/sql/samples/wide-world-importers-what-is) + +

+ +

Next Steps

+ +Next, Continue to SQL Server Performance. diff --git a/SQLonOpenShift/sqlonopenshift/02_query/dmv.sql b/SQLonOpenShift/sqlonopenshift/02_query/dmv.sql new file mode 100644 index 00000000..aaca3cdf --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/dmv.sql @@ -0,0 +1,11 @@ +SELECT session_id, login_time, host_name, program_name, reads, writes, cpu_time +FROM sys.dm_exec_sessions WHERE is_user_process = 1 +GO +SELECT dr.session_id, dr.start_time, dr.status, dr.command +FROM sys.dm_exec_requests dr +JOIN sys.dm_exec_sessions de +ON dr.session_id = de.session_id +AND de.is_user_process = 1 +GO +SELECT cpu_count, committed_kb from sys.dm_os_sys_info +GO diff --git a/SQLonOpenShift/sqlonopenshift/02_query/getwwi.sh b/SQLonOpenShift/sqlonopenshift/02_query/getwwi.sh new file mode 100644 index 00000000..9dfd98fa --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/getwwi.sh @@ -0,0 +1 @@ +wget --no-clobber --no-hsts https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak diff --git a/SQLonOpenShift/sqlonopenshift/02_query/restorewwi.sql b/SQLonOpenShift/sqlonopenshift/02_query/restorewwi.sql new file mode 100644 index 00000000..9bd6920c --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/restorewwi.sql @@ -0,0 +1,7 @@ +restore database WideWorldImporters from disk = '/var/opt/mssql/WideWorldImporters-Full.bak' with +move 'WWI_Primary' to '/var/opt/mssql/data/WideWorldImporters.mdf', +move 'WWI_UserData' to '/var/opt/mssql/data/WideWorldImporters_UserData.ndf', +move 'WWI_Log' to '/var/opt/mssql/data/WideWorldImporters.ldf', +move 'WWI_InMemory_Data_1' to '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1' +go + diff --git a/SQLonOpenShift/sqlonopenshift/02_query/step1_test_sql.sh b/SQLonOpenShift/sqlonopenshift/02_query/step1_test_sql.sh new file mode 100644 index 00000000..26de9969 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/step1_test_sql.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT @@version" diff --git a/SQLonOpenShift/sqlonopenshift/02_query/step2_copy_backup_into_container.sh b/SQLonOpenShift/sqlonopenshift/02_query/step2_copy_backup_into_container.sh new file mode 100644 index 00000000..3ab7865f --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/step2_copy_backup_into_container.sh @@ -0,0 +1,2 @@ +POD=$(oc get pods | grep mssql-deployment | awk {'print $1'}) +oc cp ./WideWorldImporters-Full.bak $POD:/var/opt/mssql/WideWorldImporters-Full.bak diff --git a/SQLonOpenShift/sqlonopenshift/02_query/step3_restore_backup.sh b/SQLonOpenShift/sqlonopenshift/02_query/step3_restore_backup.sh new file mode 100644 index 00000000..8dc039ce --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/step3_restore_backup.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -irestorewwi.sql diff --git a/SQLonOpenShift/sqlonopenshift/02_query/step4_find_tables.sh b/SQLonOpenShift/sqlonopenshift/02_query/step4_find_tables.sh new file mode 100644 index 00000000..90b780f2 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/step4_find_tables.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"USE WideWorldImporters;SELECT name, SCHEMA_NAME(schema_id) as schema_name FROM sys.objects WHERE type = 'U' ORDER BY name" -Y30 diff --git a/SQLonOpenShift/sqlonopenshift/02_query/step5_find_people.sh b/SQLonOpenShift/sqlonopenshift/02_query/step5_find_people.sh new file mode 100644 index 00000000..d8d3c868 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/step5_find_people.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"USE WideWorldImporters;SELECT TOP 10 FullName, PhoneNumber, EmailAddress FROM [Application].[People] ORDER BY FullName;" -Y30 diff --git a/SQLonOpenShift/sqlonopenshift/02_query/step6_dmv.sh b/SQLonOpenShift/sqlonopenshift/02_query/step6_dmv.sh new file mode 100644 index 00000000..ea8fdc86 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/02_query/step6_dmv.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -idmv.sql diff --git a/SQLonOpenShift/sqlonopenshift/03_Performance.md b/SQLonOpenShift/sqlonopenshift/03_Performance.md new file mode 100644 index 00000000..45130575 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/03_Performance.md @@ -0,0 +1,297 @@ +![](../graphics/microsoftlogo.png) + +# Workshop: SQL Server on OpenShift + +#### A Microsoft workshop from the SQL Server team + +

+ +

SQL Server Performance

+ +You'll cover the following topics in this Module: + +
+ +
3.0 SQL Server Intelligent Query Processing
+
3.1 Using Query Store for performance analysis
+ +
+ +

+ +

3.0 SQL Server Intelligent Query Processing

+ +In this module you will learn about the Intelligent Query processing capabilities new to SQL Server 2019. You will use activities to learn these concepts against the SQL Server container you have deployed in OpenShift. This demonstrates the compatibility of the SQL Server engine across multiple platforms as this entire module could be used against SQL Server 2019 running on Windows, Linux, and containers. + +Intelligent Query processing is a suite of features built into the query processor for SQL Server 2019 allowing developers and data professionals to accelerate database performance automatically without any application changes. T-SQL queries simply need to be run with a database compatibility level of 150 to take advantage of these enhancements. + +You can read more about database compatibility at https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level?view=sql-server-2017#compatibility-levels-and-sql-server-upgrades. + +The following is a diagram showing the features of Intelligent Query Processing including capabilities from SQL Server 2017 + +![iqp diagram](../graphics/IQP_diagram.png) + +You can read the documentation for a description and example of all of these features at https://docs.microsoft.com/en-us/sql/relational-databases/performance/intelligent-query-processing. + +**Note**: One of the features of Intelligent Query Processing, approximate count distinct, does not require database compatibility of 150. + +Proceed to the Activity to learn an example of how Intelligent Query Processing can accelerate query performance automatically with no application changes. + +

+ +

Activity: SQL Server Intelligent Query Processing

+ +Follow these steps to learn more about SQL Server Intelligent Query Processing. **Note**: this module assumes you have completed all the steps in Module 01 and 02. + +In this activity, you will learn how to use the built-in capabilities of Intelligent Query Processing in SQL Server 2019 simply by changing the database compatibility of WideWorldImporters to version 150 with no application changes. + +You have been provided a stored procedure called **CustomerProfits** which you will deploy in the **Facts** schema of the WideWorldImporters database. The stored procedure uses a concept called a table variable to store interim results from a user table and then use that table variable to join with other data in the WideWorldImporters database. In past releases of SQL Server, this design pattern can be a problem as SQL Server would always estimate the table variable only contains 1 row of data. This can cause issues with building the optimal query plan for fast performance. + +SQL Server 2019 Intelligent Query Processing includes a capability called *deferred table variable compilation* to improve the performance of stored procedures like these by ensuring the stored procedure is created in a database with a compatibility level of 150, which is the default for SQL Server 2019. + +The WideWorldImporters database example was created with SQL Server 2016 which had a default database compatibility level of 130. When a database is restored from a previous version oF SQL Server, the compatibility level of the database is preserved to help reduce the risk of upgrades. + +You will observe the performance of the CustomerProfits stored procedure with database compatibility level of 130 on SQL Server 2019. You will then compare the performance of the same procedure with no changes with a database compatibility of 150 which will enable the query processor to use deferred table variable compilation. + +You will be running a series of commands and SQL Server T-SQL statements to observe performance. + +1. To connect to the SQL Server deployed on OpenShift, run the following command to get the IP address and port of the LoadBalancer service associated with the SQL Server container. + + `oc get service mssql-service` + + You should see results like the following + +
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)           AGE
+   mssql-service   LoadBalancer   172.30.166.56   168.61.45.217   31433:30738/TCP   1h
+ + Take note of the EXTERNAL-IP and PORT (the number before the ":"). You will use these to connect to SQL Server throughout this module. + +2. Launch the Azure Data Studio application. Look for the icon + +

+ +3. The first time you launch Azure Data Studio, you may see the following choices. For the purposes of this workshop, select No to not load the preview feature and use x to close out the 2nd choice to collect usage data + +

+ +4. You will now be presented with the following screen to enter in your connection details for SQL Server. For Server, put in the values for EXTERNAL IP, PORT from step 1 above. Change the Authentication type to SQL Login, Put in a User name of sa with the Password you used for the secret in Module 01 when you deployed SQL Server. I also recommend you click the checkbox for Remember Password so you will not have to do it again for future connections. Click the Connect button to connect. An example of a connection looks like the following + +

+ +5. A successful connection should look like the following + + ![Azure Data Studio Successful Connection](../graphics/Azure_Data_Studio_Successful_Connect.jpg) + +6. Open the script **proc.sql** by using the File Menu/Open File option of Azure Data Studio. The file can be found in the **sqlworkshops/SQLonOpenShift/sqlonopenshift/03_performance/iqp** folder + + The stored procedure looks like the following + + ```sql + USE WideWorldImporters + GO + CREATE or ALTER PROCEDURE [Sales].[CustomerProfits] + AS + BEGIN + -- Declare the table variable + DECLARE @ilines TABLE + ([InvoiceLineID] [int] NOT NULL primary key, + [InvoiceID] [int] NOT NULL, + [StockItemID] [int] NOT NULL, + [Description] [nvarchar](100) NOT NULL, + [PackageTypeID] [int] NOT NULL, + [Quantity] [int] NOT NULL, + [UnitPrice] [decimal](18, 2) NULL, + [TaxRate] [decimal](18, 3) NOT NULL, + [TaxAmount] [decimal](18, 2) NOT NULL, + [LineProfit] [decimal](18, 2) NOT NULL, + [ExtendedPrice] [decimal](18, 2) NOT NULL, + [LastEditedBy] [int] NOT NULL, + [LastEditedWhen] [datetime2](7) NOT NULL + ) + + -- Insert all the rows from InvoiceLines into the table variable + INSERT INTO @ilines SELECT * FROM Sales.InvoiceLines + -- Find my total profile by customer + SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit + FROM Sales.Invoices i + INNER JOIN @ilines il + ON i.InvoiceID = il.InvoiceID + GROUP By i.CustomerID + END + GO + ``` + + This procedure uses a table variable populated from a user table and then joins it with a user table to provide output. T-SQL functions like COUNT and SUM are often seen in analytic queries that benefit from Intelligent Query Processing. **Note**: In this example the TOP 1 T-SQL syntax is used so that the procedure only produces 1 row. This is only done to make the output easier to read using this workshop and demo since this procedure will be executed multiple times. Normal execution of this procedure may not include TOP. + + Click the Run button to execute the script. You will be prompted to pick the connection to execute the script. Select the connection you created in Step 4. + + When you execute this script the results should look like the following + + ![proc created results](../graphics/proc_created_results.jpg) + +7. You have been told this procedure executes fairly quickly with a single execution in a few seconds but over several iterations, the total duration is over 20 seconds, which is not acceptable to the application. + + Open the script **repro130.sql** by using the File Menu/Open File option of Azure Data Studio. The file can be found in the **sqlworkshops/SQLonOpenShift/sqlonopenshift/03_performance/iqp** folder. + + The script looks like the following + + ```sql + USE master + GO + ALTER DATABASE wideworldimporters SET compatibility_level = 130 + GO + USE WideWorldImporters + GO + SET NOCOUNT ON + GO + EXEC [Sales].[CustomerProfits] + GO 25 + SET NOCOUNT OFF + GO + ``` + The script will ensure the database is in a compatibility mode that is less than 150 so Intelligent Query Processing will NOT be enabled. The script also turns off rowcount messages to be returned to the client to reduce network traffic for this test. Then the script executes the stored procedure. Notice the syntax of **GO 25**. This is a client tool tip that says to run the batch 25 times (avoids having to construct a loop) + + Click the Run button to execute the script to observe the results. Choose the connection by clicking on the IP,PORT you created for the SQL Server container and click Connect. + + You will see while the query is executing in the bottom status bar the current elapsed execution time, the server connection details, a status of **Executing Query**, and number of rows being returned to the client. + + ![Azure Data Studio Status Bar](../graphics/Azure_Data_Studio_Status_Bar.jpg) + + The query should complete in well over 30 seconds. Given result sets are being sent back to the client, it can take even longer depending on connectivity speeds of your client workstation. + + The final results of Azure Data Studio should look like this + + ![repro 130 results](../graphics/repro_130_results.jpg) + + You can scroll in the RESULTS or MESSAGES pane. If you scroll down to the bottom of the MESSAGES pane, you can see the total execution time (this includes time to execute the stored procedure 25 times on the server but also return results to the client). Your results should look something like this (30 seconds or greater) + + ![repro 130 duration](../graphics/repro_130_duration.jpg) + +8. Now let's run the same exact test but with database compatibility of 150. You will not make any changes to the stored procedure. + + Open the script **repro150.sql** by using the File Menu/Open File option of Azure Data Studio. The file can be found in the **sqlworkshops/SQLonOpenShift/sqlonopenshift/03_performance/iqp** folder. + + Use the SQL container connection as you have done in previous steps. The script should look like this + + + ```sql + USE master + GO + ALTER DATABASE wideworldimporters SET compatibility_level = 150 + GO + USE WideWorldImporters + GO + SET NOCOUNT ON + GO + EXEC [Sales].[CustomerProfits] + GO 25 + SET NOCOUNT OFF + GO + ``` + Notice this is the same script except database compatibility of 150 is used. This time, the query processor in SQL Server will enable table variable deferred compilation so a better query plan can be chosen + +9. Run the script and choose the SQL Server container connection. Go through the same steps as in Step 8 to analyze the results. The script should execute far faster than before. Your speeds can vary but should be 15 seconds or less. + +As a **post workshop exercise** you can go through this activity in a SQL notebook. For SQL notebooks,use the File menu of Azure Data Studio (Open File option) to open the **03_IQP_Table_Variable.ipynb** notebook in the **sqlworkshops/SQLOnOpenShift/sqlonopenshift/iqp/03_performance** folder. Follow the steps provided in the notebook to complete the activity. + +The SQL notebook experience looks like the following: + +![03 IQP Table Variable Notebook](../graphics/03_IQP_Table_Variable_Notebook.jpg) + +Read each step in the notebook and use the Play button to execute each T-SQL script. Use the scrollbar to scroll through the notebook. + +The rest of the steps in this section of the Module is for the experience without using a notebook. Proceed to section 3.1. + +

+ +

3.1 Using Query Store for Performance Analysis

+ +In this module you will learn how to use the Query Store, a built-in performance analysis feature of SQL Server, to analyze the performance differences of the queries run in Section 3.0 of this Module. + +The Query Store is built into the query processing engine, enabled using an option for each database in SQL Server. Once enabled, performance statistics for queries are cached and stored in the SQL user database so they are persisted across server restarts. + +In addition, the Query Store comes with a series of catalog and dynamic management views to gain insight into recorded query performance. + +You can read more about the Query Store at https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store. + +

+ +

Activity: Using Query Store for Performance Analysis

+ +The WideWorldImporters sample database that you restored in Module 02 has the Query Store enabled. Therefore, if you performed the activity in Section 3.0 of this module, the Query Store was recording performance information about each query execution. + +Go through the following steps to use the Query Store to examine the query performance differences for the CustomerProfits stored procedure when executed with database compatibility 130 vs 150. + +Open the script **querystore.sql** by using the File Menu/Open File option of Azure Data Studio. The file can be found in the **sqlworkshops/SQLonOpenShift/sqlonopenshift/03_performance/iqp** folder. + +Use the SQL container connection as you have done in previous steps. The T-SQL statement to use the Query Store for this activity looks like the following + + +```sql +USE WideWorldImporters +GO +SELECT qsp.query_id, qsp.plan_id, qsp.compatibility_level, AVG(qsrs.avg_duration)/1000 as avg_duration_ms, AVG(qsrs.avg_logical_io_reads) as avg_logical_io,CAST (qsp.query_plan as XML),qsqt.query_sql_text +FROM sys.query_store_plan qsp +INNER JOIN sys.query_store_runtime_stats qsrs +ON qsp.plan_id = qsrs.plan_id +INNER JOIN sys.query_store_runtime_stats_interval qsrsi +ON qsrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id +AND qsrsi.start_time between DATEADD(HOUR, -1, GETDATE()) and GETDATE() +INNER JOIN sys.query_store_query qsq +ON qsp.query_id = qsq. query_id +INNER JOIN sys.query_store_query_text qsqt +ON qsq.query_text_id = qsqt.query_text_id +AND query_sql_text LIKE '%Invoices%' +GROUP BY qsp.query_id, qsp.plan_id, qsrs.avg_duration, qsp.compatibility_level, qsp.query_plan, query_sql_text, qsrs.last_execution_time +ORDER BY qsrs.last_execution_time DESC, query_id DESC, qsp.plan_id DESC +GO +``` + To even the seasoned SQL user this query looks daunting. This activity is not intended for you to understand every details of how the query works but as an example of how to use the Query Store Dynamic Management Views (DMV) to analyze the performance differences for the stored procedure you used in Section 3.0. + + The query is designed to focus on the most recent execution of the query in the stored procedure CustomerProfits that has run faster with Intelligent Query Processing. + + The results of the query should look something like the following (the values query_id and plan_id will likely be different) + + ![iqp query store results](../graphics/IQP_query_store_results.jpg) + + The query_id uniquely identifies the SELECT TOP.. statement. The plan_id shows that two different query plans were used for the same query. One with database compatibility of 130 and one with 150. + + Notice the avg_duration_ms is much higher for the row using the plan for compatibility_level = 130. The reason? Look at the avg_logical_io which is the number of database pages read needed for the query. The number is much higher for the longer running query, typically due to an inefficient query plan. + + So these results show the *same* query but two different query plans, one faster on average and more efficient than the other. The plan for compatibility_level = 150 was using table variable deferred compilation. The last columns shows the T-SQL query text within the stored procedure. + + One of the columns on the right is the estimated query plan in XML. Reading the details of this XML is beyond the scope of this workshop but contains the details of how the query plan was built using table variable deferred compilation. In addition, in these XML details is the use of an Adaptive Join, which is another capability of Intelligent Query Processing. + + If you saved the XML output as a .sqlplan file and opened up the file in SQL Server Management Studio (SSMS), you would see the following graphical plan for the query using compatibility level = 130 + + ![IQP query plan 130](../graphics/IQP_query_plan_130.jpg) + + In this plan, the query processor chooses to use the table variable as the outer table of a Nested Loops Join which means it iterates through each row in the outer table to join to the inner table. Since the query processor estimates one row for the table variable, this is reasonable. But in reality, there are over 200,000 rows in the table variable so this ends up with many unnecessary logical reads (hence the high number of logical IO from query store) + + The following output is an example for the stored procedure execution with compatibiilty level of 150 + + ![IQP query plan 150](../graphics/IQP_query_plan_150.jpg) + + In this example SQL has recognized the table variable has more than 1 row and has chosen a different join method called a hash join. Furthermore, it has injected into the plan the concept of an **Adaptive Join** so that if there is small enough rowset in the table variable it could dynamically and automatically choose a Nested Loops Join. What is not seen from this diagram (which you can see from the properties detail in the XML plan) that is the query processor is using a third concept called **batch mode processing on rowstore** (rowstore is normal table as opposed to a columnstore). + +As a **post workshop exercise** you can go through this activity in a SQL notebook. Uuse the File menu of Azure Data Studio (Open File option) to open the **03_Query_Store.ipynb** notebook in the **sqlworkshops/SQLOnOpenShift/sqlonopenshift/iqp/03_performance** folder. Follow the steps provided in the notebook to complete the activity. + +In this activity you have seen how to use the Query Store for performance insights including the ability to see differences for the same query text of different query plans, including those that benefit from Intelligent Query Processing. + +You can now proceed to Next Steps to learn about High Availability for SQL Server on OpenShift. + +

+ +

For Further Study

+ +- [Intelligent Query Processing in SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/performance/intelligent-query-processing) +- [Q&A about Intelligent Query Processing](https://techcommunity.microsoft.com/t5/Azure-SQL-Database/Intelligent-Query-Processing-Q-amp-A/ba-p/446657) +- [Monitoring performance of SQL Server using the Query Store](https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store) +- [What is Azure Data Studio?](https://docs.microsoft.com/en-us/sql/azure-data-studio/what-is) +- [How to use Notebooks in Azure Data Studio](https://docs.microsoft.com/en-us/sql/azure-data-studio/sql-notebooks) + +

+ +

Next Steps

+ +Next, Continue to SQL Server High Availabilty on OpenShift. diff --git a/SQLonOpenShift/sqlonopenshift/03_performance/README.md b/SQLonOpenShift/sqlonopenshift/03_performance/README.md new file mode 100644 index 00000000..e69de29b diff --git a/SQLonOpenShift/sqlonopenshift/03_performance/iqp/03_IQP_Table_Variable.ipynb b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/03_IQP_Table_Variable.ipynb new file mode 100644 index 00000000..6ebb61d9 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/03_IQP_Table_Variable.ipynb @@ -0,0 +1,1571 @@ +{ + "metadata": { + "kernelspec": { + "name": "SQL", + "display_name": "SQL", + "language": "sql" + }, + "language_info": { + "name": "sql", + "version": "" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "# Intelligent Query Processing in SQL Server 2019 - Table Variable Deferred Compilation", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Step 1 - Create the stored procedure\r\nThis procedure uses a table variable populated from a user table and then joins it with a user table to provide output. T-SQL functions like COUNT and SUM are often seen in analytic queries that benefit from Intelligent Query Processing. Note: In this example the TOP 1 T-SQL syntax is used so that the procedure only produces 1 row. This is only done to make the output easier to read using this workshop and demo since this procedure will be executed multiple times. Normal execution of this procedure may not include TOP.\r\n\r\n", + "metadata": {} + }, + { + "cell_type": "code", + "source": "USE WideWorldImporters\r\nGO\r\nCREATE or ALTER PROCEDURE [Sales].[CustomerProfits]\r\nAS\r\nBEGIN\r\n-- Declare the table variable\r\nDECLARE @ilines TABLE\r\n(\t[InvoiceLineID] [int] NOT NULL primary key,\r\n\t[InvoiceID] [int] NOT NULL,\r\n\t[StockItemID] [int] NOT NULL,\r\n\t[Description] [nvarchar](100) NOT NULL,\r\n\t[PackageTypeID] [int] NOT NULL,\r\n\t[Quantity] [int] NOT NULL,\r\n\t[UnitPrice] [decimal](18, 2) NULL,\r\n\t[TaxRate] [decimal](18, 3) NOT NULL,\r\n\t[TaxAmount] [decimal](18, 2) NOT NULL,\r\n\t[LineProfit] [decimal](18, 2) NOT NULL,\r\n\t[ExtendedPrice] [decimal](18, 2) NOT NULL,\r\n\t[LastEditedBy] [int] NOT NULL,\r\n\t[LastEditedWhen] [datetime2](7) NOT NULL\r\n)\r\n\r\n-- Insert all the rows from InvoiceLines into the table variable\r\nINSERT INTO @ilines SELECT * FROM Sales.InvoiceLines\r\n\r\n-- Find my total profile by customer\r\nSELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit\r\nFROM Sales.Invoices i\r\nINNER JOIN @ilines il\r\nON i.InvoiceID = il.InvoiceID\r\nGROUP By i.CustomerID\r\nEND\r\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0416289" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.1910054" + }, + "metadata": {} + } + ], + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": "## Step 2 - Run the stored procedure with database compatibility of 130\r\nou have been told this procedure executes fairly quickly with a single execution in a few seconds but over several iterations the total duration, over 20 seconds, is not acceptable to the application.\r\n\r\nThe script will ensure the database is in a compatibility mode that is less than 150 so Intelligent Query Processing will NOT be enabled. The script also turns off rowcount messages to be returned to the client to reduce network traffic for this test. Then the script executes the stored procedure. Notice the syntax of **GO 25**. This is a client tool tip that says to run the batch 25 times (avoids having to construct a loop).\r\n\r\nWhen you click Play to run the script look for these messages on the total elapsted time (your time may vary)\r\n\r\n
Beginning execution loop\r\nBatch execution completed 25 times...\r\nTotal execution time: 00:00:40.3520665
\r\n", + "metadata": {} + }, + { + "cell_type": "code", + "source": "USE master\r\nGO\r\nALTER DATABASE wideworldimporters SET compatibility_level = 130\r\nGO\r\nUSE WideWorldImporters\r\nGO\r\nSET NOCOUNT ON\r\nGO\r\nEXEC [Sales].[CustomerProfits]\r\nGO 25\r\nSET NOCOUNT OFF\r\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0383739" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0427466" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0376315" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0378743" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Beginning execution loop" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Batch execution completed 25 times..." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:55.6630486" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0378308" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 2, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + } + ], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": "## Step 3 - Run the stored procedure with database compatibility of 150\r\nNow let's run the same exact test but with database compatibility of 150. You will not make any changes to the stored procedure.\r\n\r\nNotice this is the same script except database compatibility of 150 is used. This time, the query processor in SQL Server will enable table variable deferred compilation so a better query plan can be chosen\r\n\r\n The script should execute far faster than before. Your speeds can vary but should be 15 seconds or less.\r\n\r\n When you click Play to run the script look for these messages on the total elapsted time (your time may vary)\r\n\r\n
Beginning execution loop\r\nBatch execution completed 25 times...\r\nTotal execution time: 00:00:10.9975239
\r\n", + "metadata": {} + }, + { + "cell_type": "code", + "source": "USE master\r\nGO\r\nALTER DATABASE wideworldimporters SET compatibility_level = 150\r\nGO\r\nUSE WideWorldImporters\r\nGO\r\nSET NOCOUNT ON\r\nGO\r\nEXEC [Sales].[CustomerProfits]\r\nGO 25\r\nSET NOCOUNT OFF\r\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0387470" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.1565278" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0384564" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0395903" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Beginning execution loop" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Batch execution completed 25 times..." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:09.7312251" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0387062" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "customer_count" + }, + { + "name": "total_profit" + } + ] + }, + "data": [ + { + "0": "406", + "1": "147225.15" + } + ] + }, + "text/html": "
customer_counttotal_profit
406147225.15
" + } + } + ], + "execution_count": 3 + } + ] +} \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/03_performance/iqp/03_Query_Store.ipynb b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/03_Query_Store.ipynb new file mode 100644 index 00000000..2a3cf0e3 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/03_Query_Store.ipynb @@ -0,0 +1,127 @@ +{ + "metadata": { + "kernelspec": { + "name": "SQL", + "display_name": "SQL", + "language": "sql" + }, + "language_info": { + "name": "sql", + "version": "" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "# Using Query Store for Performance Analysis", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Step 1 - Look at the Query Store to compare different plans for the same query\r\nTo even the seasoned SQL user this query looks daunting. This activity is not intended for you to understand every details of how the query works but as an example of how to use the Query Store Dynamic Management Views (DMV) to analyze the performance differences for the stored procedure you used in Section 3.0.\r\n\r\nThe query will look in the Query Store for the most recent queries executed over the last hour and sort them by the longest running queries by duration on average.\r\n\r\nScroll after the results to see more details", + "metadata": {} + }, + { + "cell_type": "code", + "source": "USE WideWorldImporters\r\nGO\r\nSELECT qsp.query_id, qsp.plan_id, qsp.compatibility_level, AVG(qsrs.avg_duration)/1000 as avg_duration_ms, AVG(qsrs.avg_logical_io_reads) as avg_logical_io,CAST (qsp.query_plan as XML),qsqt.query_sql_text\r\nFROM sys.query_store_plan qsp\r\nINNER JOIN sys.query_store_runtime_stats qsrs\r\nON qsp.plan_id = qsrs.plan_id\r\nINNER JOIN sys.query_store_runtime_stats_interval qsrsi\r\nON qsrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id\r\nAND qsrsi.start_time between DATEADD(HOUR, -1, GETDATE()) and GETDATE()\r\nINNER JOIN sys.query_store_query qsq\r\nON qsp.query_id = qsq. query_id\r\nINNER JOIN sys.query_store_query_text qsqt\r\nON qsq.query_text_id = qsqt.query_text_id\r\nAND query_sql_text LIKE '%Invoices%'\r\nGROUP BY qsp.query_id, qsp.plan_id, qsrs.avg_duration, qsp.compatibility_level, qsp.query_plan, query_sql_text, qsrs.last_execution_time\r\nORDER BY qsrs.last_execution_time DESC, query_id DESC, qsp.plan_id DESC\r\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0552518" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(3 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.6058095" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "metadata": {}, + "execution_count": 1, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "query_id" + }, + { + "name": "plan_id" + }, + { + "name": "compatibility_level" + }, + { + "name": "avg_duration_ms" + }, + { + "name": "avg_logical_io" + }, + { + "name": "(No column name)" + }, + { + "name": "query_sql_text" + } + ] + }, + "data": [ + { + "0": "41993", + "1": "521", + "2": "150", + "3": "5.752", + "4": "230", + "5": "", + "6": "SELECT qsp.query_id, qsp.plan_id, qsp.compatibility_level, AVG(qsrs.avg_duration)/1000 as avg_duration_ms, AVG(qsrs.avg_logical_io_reads) as avg_logical_io,CAST (qsp.query_plan as XML),qsqt.query_sql_text\r\nFROM sys.query_store_plan qsp\r\nINNER JOIN sys.query_store_runtime_stats qsrs\r\nON qsp.plan_id = qsrs.plan_id\r\nINNER JOIN sys.query_store_runtime_stats_interval qsrsi\r\nON qsrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id\r\nAND qsrsi.start_time between DATEADD(HOUR, -1, GETDATE()) and GETDATE()\r\nINNER JOIN sys.query_store_query qsq\r\nON qsp.query_id = qsq. query_id\r\nINNER JOIN sys.query_store_query_text qsqt\r\nON qsq.query_text_id = qsqt.query_text_id\r\nAND query_sql_text LIKE '%Invoices%'\r\nGROUP BY qsp.query_id, qsp.plan_id, qsrs.avg_duration, qsp.compatibility_level, qsp.query_plan, query_sql_text, qsrs.last_execution_time\r\nORDER BY qsrs.last_execution_time DESC, query_id DESC, qsp.plan_id DESC" + }, + { + "0": "41987", + "1": "519", + "2": "150", + "3": "107.45648", + "4": "5164.68", + "5": "", + "6": "SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit\r\nFROM Sales.Invoices i\r\nINNER JOIN @ilines il\r\nON i.InvoiceID = il.InvoiceID\r\nGROUP By i.CustomerID" + }, + { + "0": "41987", + "1": "518", + "2": "130", + "3": "1293.14972", + "4": "690230.76", + "5": "", + "6": "SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit\r\nFROM Sales.Invoices i\r\nINNER JOIN @ilines il\r\nON i.InvoiceID = il.InvoiceID\r\nGROUP By i.CustomerID" + } + ] + }, + "text/html": "
query_idplan_idcompatibility_levelavg_duration_msavg_logical_io(No column name)query_sql_text
419935211505.752230<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.524" Build="15.0.1200.24"><BatchSequence><Batch><Statements><StmtSimple StatementText="SELECT qsp.query_id, qsp.plan_id, qsp.compatibility_level, AVG(qsrs.avg_duration)/1000 as avg_duration_ms, AVG(qsrs.avg_logical_io_reads) as avg_logical_io,CAST (qsp.query_plan as XML),qsqt.query_sql_text&#xD;&#xA;FROM sys.query_store_plan qsp&#xD;&#xA;INNER JOIN sys.query_store_runtime_stats qsrs&#xD;&#xA;ON qsp.plan_id = qsrs.plan_id&#xD;&#xA;INNER JOIN sys.query_store_runtime_stats_interval qsrsi&#xD;&#xA;ON qsrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id&#xD;&#xA;AND qsrsi.start_time between DATEADD(HOUR, -1, GETDATE()) and GETDATE()&#xD;&#xA;INNER JOIN sys.query_store_query qsq&#xD;&#xA;ON qsp.query_id = qsq. query_id&#xD;&#xA;INNER JOIN sys.query_store_query_text qsqt&#xD;&#xA;ON qsq.query_text_id = qsqt.query_text_id&#xD;&#xA;AND query_sql_text LIKE '%Invoices%'&#xD;&#xA;GROUP BY qsp.query_id, qsp.plan_id, qsrs.avg_duration, qsp.compatibility_level, qsp.query_plan, query_sql_text, qsrs.last_execution_time&#xD;&#xA;ORDER BY qsrs.last_execution_time DESC, query_id DESC, qsp.plan_id DESC" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSqlHandle="0x0900C27BA7AB34EB039A652633AA8B0903F90000000000000000000000000000000000000000000000000000" DatabaseContextSettingsId="2" ParentObjectId="0" StatementParameterizationType="0" RetrievedFromCache="true" StatementSubTreeCost="0.115249" StatementEstRows="1" SecurityPolicyApplied="false" StatementOptmLevel="FULL" QueryHash="0x5C6C483F0F95C430" QueryPlanHash="0x53638C53DEDDB8C5" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="150"><StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false" /><QueryPlan CachedPlanSize="160" CompileTime="32" CompileCPU="32" CompileMemory="4584"><Warnings><PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(image,[P].[query_plan],0)" /><PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT(xml,[Expr1012],0)" /></Warnings><MemoryGrantInfo SerialRequiredMemory="1536" SerialDesiredMemory="1584" /><OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="656537" EstimatedPagesCached="82067" EstimatedAvailableDegreeOfParallelism="2" MaxCompileMemory="8526832" /><OptimizerStatsUsage><StatisticsInfo LastUpdate="2019-04-16T16:54:54.34" ModificationCount="1" SamplingPercent="100" Statistics="[_WA_Sys_00000006_0BC6C43E]" Table="[plan_persist_plan]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.34" ModificationCount="1" SamplingPercent="100" Statistics="[plan_persist_query_text_idx1]" Table="[plan_persist_query_text]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.28" ModificationCount="13" SamplingPercent="100" Statistics="[_WA_Sys_00000002_0DAF0CB0]" Table="[plan_persist_runtime_stats_interval]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:44:27.50" ModificationCount="13" SamplingPercent="100" Statistics="[plan_persist_runtime_stats_cidx]" Table="[plan_persist_runtime_stats]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:44:27.50" ModificationCount="519" SamplingPercent="100" Statistics="[plan_persist_plan_cidx]" Table="[plan_persist_plan]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:55.30" ModificationCount="1" SamplingPercent="100" Statistics="[plan_persist_query_text_cidx]" Table="[plan_persist_query_text]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.29" ModificationCount="1" SamplingPercent="100" Statistics="[_WA_Sys_00000002_09DE7BCC]" Table="[plan_persist_query_text]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.29" ModificationCount="13" SamplingPercent="100" Statistics="[plan_persist_runtime_stats_interval_cidx]" Table="[plan_persist_runtime_stats_interval]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:44:27.45" ModificationCount="519" SamplingPercent="100" Statistics="[plan_persist_plan_idx1]" Table="[plan_persist_plan]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.36" ModificationCount="15" SamplingPercent="100" Statistics="[_WA_Sys_00000006_0CBAE877]" Table="[plan_persist_runtime_stats]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:52:36.80" ModificationCount="13" SamplingPercent="100" Statistics="[_WA_Sys_00000003_0CBAE877]" Table="[plan_persist_runtime_stats]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.34" ModificationCount="1" SamplingPercent="100" Statistics="[plan_persist_query_idx1]" Table="[plan_persist_query]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:44:27.51" ModificationCount="13" SamplingPercent="100" Statistics="[plan_persist_runtime_stats_idx1]" Table="[plan_persist_runtime_stats]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.29" ModificationCount="1" SamplingPercent="100" Statistics="[plan_persist_query_cidx]" Table="[plan_persist_query]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:52:36.83" ModificationCount="15" SamplingPercent="100" Statistics="[_WA_Sys_00000007_0CBAE877]" Table="[plan_persist_runtime_stats]" Schema="[sys]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2019-04-16T16:54:54.42" ModificationCount="15" SamplingPercent="100" Statistics="[_WA_Sys_00000008_0CBAE877]" Table="[plan_persist_runtime_stats]" Schema="[sys]" Database="[WideWorldImporters]" /></OptimizerStatsUsage><RelOp NodeId="0" PhysicalOp="Sort" LogicalOp="Sort" EstimateRows="1" EstimateIO="0.0112613" EstimateCPU="0.000104843" AvgRowSize="4843" EstimatedTotalSubtreeCost="0.115249" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Union1022" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /><ColumnReference Column="Expr1168" /><ColumnReference Column="Expr1169" /><ColumnReference Column="Expr1170" /></OutputList><MemoryFractions Input="0.666667" Output="1" /><Sort Distinct="0"><OrderBy><OrderByColumn Ascending="0"><ColumnReference Column="Union1022" /></OrderByColumn><OrderByColumn Ascending="0"><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /></OrderByColumn><OrderByColumn Ascending="0"><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></OrderByColumn></OrderBy><RelOp NodeId="1" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="1" EstimateIO="0" EstimateCPU="1e-07" AvgRowSize="4843" EstimatedTotalSubtreeCost="0.103882" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Union1022" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /><ColumnReference Column="Expr1168" /><ColumnReference Column="Expr1169" /><ColumnReference Column="Expr1170" /></OutputList><ComputeScalar><DefinedValues><DefinedValue><ColumnReference Column="Expr1169" /><ScalarOperator ScalarString="[Expr1167]/(1.0000000000000000e+003)"><Arithmetic Operation="DIV"><ScalarOperator><Identifier><ColumnReference Column="Expr1167" /></Identifier></ScalarOperator><ScalarOperator><Const ConstValue="(1.0000000000000000e+003)" /></ScalarOperator></Arithmetic></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Column="Expr1170" /><ScalarOperator ScalarString="CONVERT(xml,[Expr1012],0)"><Convert DataType="xml" Style="0" Implicit="0"><ScalarOperator><Identifier><ColumnReference Column="Expr1012" /></Identifier></ScalarOperator></Convert></ScalarOperator></DefinedValue></DefinedValues><RelOp NodeId="2" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="1" EstimateIO="0" EstimateCPU="0" AvgRowSize="4843" EstimatedTotalSubtreeCost="0.103882" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Column="Union1022" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /><ColumnReference Column="Expr1167" /><ColumnReference Column="Expr1168" /></OutputList><ComputeScalar><DefinedValues><DefinedValue><ColumnReference Column="Expr1167" /><ScalarOperator ScalarString="CASE WHEN [Expr1173]=(0) THEN NULL ELSE [Expr1174]/CONVERT_IMPLICIT(float(53),[Expr1173],0) END"><IF><Condition><ScalarOperator><Compare CompareOp="EQ"><ScalarOperator><Identifier><ColumnReference Column="Expr1173" /></Identifier></ScalarOperator><ScalarOperator><Const ConstValue="(0)" /></ScalarOperator></Compare></ScalarOperator></Condition><Then><ScalarOperator><Const ConstValue="NULL" /></ScalarOperator></Then><Else><ScalarOperator><Arithmetic Operation="DIV"><ScalarOperator><Identifier><ColumnReference Column="Expr1174" /></Identifier></ScalarOperator><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Column="Expr1173" /></Identifier></ScalarOperator></Convert></ScalarOperator></Arithmetic></ScalarOperator></Else></IF></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Column="Expr1168" /><ScalarOperator ScalarString="CASE WHEN [Expr1173]=(0) THEN NULL ELSE [Expr1175]/CONVERT_IMPLICIT(float(53),[Expr1173],0) END"><IF><Condition><ScalarOperator><Compare CompareOp="EQ"><ScalarOperator><Identifier><ColumnReference Column="Expr1173" /></Identifier></ScalarOperator><ScalarOperator><Const ConstValue="(0)" /></ScalarOperator></Compare></ScalarOperator></Condition><Then><ScalarOperator><Const ConstValue="NULL" /></ScalarOperator></Then><Else><ScalarOperator><Arithmetic Operation="DIV"><ScalarOperator><Identifier><ColumnReference Column="Expr1175" /></Identifier></ScalarOperator><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Column="Expr1173" /></Identifier></ScalarOperator></Convert></ScalarOperator></Arithmetic></ScalarOperator></Else></IF></ScalarOperator></DefinedValue></DefinedValues><RelOp NodeId="3" PhysicalOp="Hash Match" LogicalOp="Aggregate" EstimateRows="1" EstimateIO="0" EstimateCPU="0.0488447" AvgRowSize="4843" EstimatedTotalSubtreeCost="0.103882" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Column="Union1022" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /><ColumnReference Column="Expr1173" /><ColumnReference Column="Expr1174" /><ColumnReference Column="Expr1175" /></OutputList><MemoryFractions Input="1" Output="0.333333" /><Hash><DefinedValues><DefinedValue><ColumnReference Column="Expr1173" /><ScalarOperator ScalarString="COUNT(*)"><Aggregate Distinct="0" AggType="COUNT*" /></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Column="Expr1174" /><ScalarOperator ScalarString="SUM(CONVERT(float(53),[Union1024],0)/CONVERT_IMPLICIT(float(53),[Union1023],0))"><Aggregate Distinct="0" AggType="SUM"><ScalarOperator><Arithmetic Operation="DIV"><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="0"><ScalarOperator><Identifier><ColumnReference Column="Union1024" /></Identifier></ScalarOperator></Convert></ScalarOperator><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Column="Union1023" /></Identifier></ScalarOperator></Convert></ScalarOperator></Arithmetic></ScalarOperator></Aggregate></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Column="Expr1175" /><ScalarOperator ScalarString="SUM(CONVERT(float(53),[Union1034],0)/CONVERT_IMPLICIT(float(53),[Union1023],0))"><Aggregate Distinct="0" AggType="SUM"><ScalarOperator><Arithmetic Operation="DIV"><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="0"><ScalarOperator><Identifier><ColumnReference Column="Union1034" /></Identifier></ScalarOperator></Convert></ScalarOperator><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Column="Union1023" /></Identifier></ScalarOperator></Convert></ScalarOperator></Arithmetic></ScalarOperator></Aggregate></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ScalarOperator ScalarString="ANY([WideWorldImporters].[sys].[plan_persist_plan].[query_id] as [P].[query_id])"><Aggregate Distinct="0" AggType="ANY"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ScalarOperator ScalarString="ANY([WideWorldImporters].[sys].[plan_persist_plan].[compatibility_level] as [P].[compatibility_level])"><Aggregate Distinct="0" AggType="ANY"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue></DefinedValues><HashKeysBuild><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Column="Expr1084" /><ColumnReference Column="Expr1012" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /><ColumnReference Column="Union1022" /></HashKeysBuild><BuildResidual><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_plan].[plan_id] as [P].[plan_id] = [WideWorldImporters].[sys].[plan_persist_plan].[plan_id] as [P].[plan_id] AND [Expr1084] = [Expr1084] AND [Expr1012] = [Expr1012] AND [WideWorldImporters].[sys].[plan_persist_query_text].[query_sql_text] as [qt].[query_sql_text] = [WideWorldImporters].[sys].[plan_persist_query_text].[query_sql_text] as [qt].[query_sql_text] AND [Union1022] = [Union1022]"><Logical Operation="AND"><ScalarOperator><Logical Operation="AND"><ScalarOperator><Logical Operation="AND"><ScalarOperator><Logical Operation="AND"><ScalarOperator><Compare CompareOp="IS"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></Identifier></ScalarOperator></Compare></ScalarOperator><ScalarOperator><Compare CompareOp="IS"><ScalarOperator><Identifier><ColumnReference Column="Expr1084" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Column="Expr1084" /></Identifier></ScalarOperator></Compare></ScalarOperator></Logical></ScalarOperator><ScalarOperator><Compare CompareOp="IS"><ScalarOperator><Identifier><ColumnReference Column="Expr1012" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Column="Expr1012" /></Identifier></ScalarOperator></Compare></ScalarOperator></Logical></ScalarOperator><ScalarOperator><Compare CompareOp="IS"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></Identifier></ScalarOperator></Compare></ScalarOperator></Logical></ScalarOperator><ScalarOperator><Compare CompareOp="IS"><ScalarOperator><Identifier><ColumnReference Column="Union1022" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Column="Union1022" /></Identifier></ScalarOperator></Compare></ScalarOperator></Logical></ScalarOperator></BuildResidual><RelOp NodeId="4" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="3839.54" EstimateIO="0" EstimateCPU="0.000383954" AvgRowSize="4860" EstimatedTotalSubtreeCost="0.0550377" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Column="Union1022" /><ColumnReference Column="Union1023" /><ColumnReference Column="Union1024" /><ColumnReference Column="Union1034" /><ColumnReference Column="Expr1084" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><ComputeScalar><DefinedValues><DefinedValue><ColumnReference Column="Expr1084" /><ScalarOperator ScalarString="CONVERT(float(53),[Union1024],0)/CONVERT_IMPLICIT(float(53),[Union1023],0)"><Arithmetic Operation="DIV"><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="0"><ScalarOperator><Identifier><ColumnReference Column="Union1024" /></Identifier></ScalarOperator></Convert></ScalarOperator><ScalarOperator><Convert DataType="float" Precision="53" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Column="Union1023" /></Identifier></ScalarOperator></Convert></ScalarOperator></Arithmetic></ScalarOperator></DefinedValue></DefinedValues><RelOp NodeId="5" PhysicalOp="Nested Loops" LogicalOp="Left Outer Join" EstimateRows="3839.54" EstimateIO="0" EstimateCPU="0.0160493" AvgRowSize="4852" EstimatedTotalSubtreeCost="0.0546538" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Column="Union1022" /><ColumnReference Column="Union1023" /><ColumnReference Column="Union1024" /><ColumnReference Column="Union1034" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></OuterReferences><RelOp NodeId="6" PhysicalOp="Nested Loops" LogicalOp="Left Outer Join" EstimateRows="121.417" EstimateIO="0" EstimateCPU="0.000507522" AvgRowSize="4852" EstimatedTotalSubtreeCost="0.0245987" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Column="Union1022" /><ColumnReference Column="Union1023" /><ColumnReference Column="Union1024" /><ColumnReference Column="Union1034" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /></OuterReferences><RelOp NodeId="7" PhysicalOp="Nested Loops" LogicalOp="Inner Join" EstimateRows="3.83954" EstimateIO="0" EstimateCPU="4.11519e-05" AvgRowSize="4860" EstimatedTotalSubtreeCost="0.022215" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Column="Union1022" /><ColumnReference Column="Union1023" /><ColumnReference Column="Union1024" /><ColumnReference Column="Union1034" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Column="Union1019" /></OuterReferences><RelOp NodeId="8" PhysicalOp="Nested Loops" LogicalOp="Inner Join" EstimateRows="9.84496" EstimateIO="0" EstimateCPU="0.000199063" AvgRowSize="4868" EstimatedTotalSubtreeCost="0.0174837" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Column="Union1019" /><ColumnReference Column="Union1022" /><ColumnReference Column="Union1023" /><ColumnReference Column="Union1024" /><ColumnReference Column="Union1034" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></OuterReferences><RelOp NodeId="9" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="1" EstimateIO="0" EstimateCPU="1e-07" AvgRowSize="4825" EstimatedTotalSubtreeCost="0.0132077" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Column="Expr1012" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><ComputeScalar><DefinedValues><DefinedValue><ColumnReference Column="Expr1012" /><ScalarOperator ScalarString="CONVERT(nvarchar(max),showplanxmldecompress(CONVERT_IMPLICIT(image,[WideWorldImporters].[sys].[plan_persist_plan].[query_plan] as [P].[query_plan],0)),0)"><Convert DataType="nvarchar(max)" Length="2147483647" Style="0" Implicit="0"><ScalarOperator><Intrinsic FunctionName="showplanxmldecompress"><ScalarOperator><Convert DataType="image" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_plan" /></Identifier></ScalarOperator></Convert></ScalarOperator><ScalarOperator><Const ConstValue="" /></ScalarOperator></Intrinsic></ScalarOperator></Convert></ScalarOperator></DefinedValue></DefinedValues><RelOp NodeId="10" PhysicalOp="Nested Loops" LogicalOp="Inner Join" EstimateRows="1" EstimateIO="0" EstimateCPU="4.18e-06" AvgRowSize="2542" EstimatedTotalSubtreeCost="0.0132076" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_plan" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></OuterReferences><RelOp NodeId="11" PhysicalOp="Nested Loops" LogicalOp="Inner Join" EstimateRows="1" EstimateIO="0" EstimateCPU="5.57333e-06" AvgRowSize="797" EstimatedTotalSubtreeCost="0.00992033" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /></OuterReferences><RelOp NodeId="12" PhysicalOp="Nested Loops" LogicalOp="Inner Join" EstimateRows="1.33333" EstimateIO="0" EstimateCPU="5.57333e-06" AvgRowSize="781" EstimatedTotalSubtreeCost="0.00657896" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_text_id" /></OuterReferences><RelOp NodeId="13" PhysicalOp="Filter" LogicalOp="Filter" EstimateRows="1" EstimateIO="0" EstimateCPU="3.52e-06" AvgRowSize="781" EstimatedTotalSubtreeCost="0.00328992" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_text_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><Filter StartupExpression="0"><RelOp NodeId="14" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="4" EstimatedRowsRead="4" EstimateIO="0.003125" EstimateCPU="0.0001614" AvgRowSize="781" EstimatedTotalSubtreeCost="0.0032864" TableCardinality="4" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_text_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></OutputList><IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_text_id" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Index="[plan_persist_query_text_cidx]" Alias="[qt]" IndexKind="Clustered" Storage="RowStore" /></IndexScan></RelOp><Predicate><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_query_text].[query_sql_text] as [qt].[query_sql_text] like N'%Invoices%'"><Intrinsic FunctionName="like"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_sql_text" /></Identifier></ScalarOperator><ScalarOperator><Const ConstValue="N'%Invoices%'" /></ScalarOperator></Intrinsic></ScalarOperator></Predicate></Filter></RelOp><RelOp NodeId="15" PhysicalOp="Index Seek" LogicalOp="Index Seek" EstimateRows="1.33333" EstimatedRowsRead="1.33333" EstimateIO="0.003125" EstimateCPU="0.000158467" AvgRowSize="15" EstimatedTotalSubtreeCost="0.00328347" TableCardinality="4" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /></OutputList><IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Index="[plan_persist_query_idx1]" Alias="[Q]" IndexKind="NonClustered" Storage="RowStore" /><SeekPredicates><SeekPredicateNew><SeekKeys><Prefix ScanType="EQ"><RangeColumns><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_text_id" /></RangeColumns><RangeExpressions><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_query_text].[query_text_id] as [qt].[query_text_id]"><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query_text]" Alias="[qt]" Column="query_text_id" /></Identifier></ScalarOperator></RangeExpressions></Prefix></SeekKeys></SeekPredicateNew></SeekPredicates></IndexScan></RelOp></NestedLoops></RelOp><RelOp NodeId="16" PhysicalOp="Index Seek" LogicalOp="Index Seek" EstimateRows="1" EstimatedRowsRead="1" EstimateIO="0.003125" EstimateCPU="0.0001581" AvgRowSize="23" EstimatedTotalSubtreeCost="0.0033358" TableCardinality="5" Parallel="0" EstimateRebinds="0.333333" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /></OutputList><IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Index="[plan_persist_plan_idx1]" Alias="[P]" IndexKind="NonClustered" Storage="RowStore" /><SeekPredicates><SeekPredicateNew><SeekKeys><Prefix ScanType="EQ"><RangeColumns><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_id" /></RangeColumns><RangeExpressions><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_query].[query_id] as [Q].[query_id]"><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /></Identifier></ScalarOperator></RangeExpressions></Prefix></SeekKeys></SeekPredicateNew></SeekPredicates></IndexScan></RelOp></NestedLoops></RelOp><RelOp NodeId="18" PhysicalOp="Clustered Index Seek" LogicalOp="Clustered Index Seek" EstimateRows="1" EstimateIO="0.003125" EstimateCPU="0.0001581" AvgRowSize="4037" EstimatedTotalSubtreeCost="0.0032831" TableCardinality="5" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_plan" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /></OutputList><IndexScan Lookup="1" Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="query_plan" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="compatibility_level" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Index="[plan_persist_plan_cidx]" Alias="[P]" TableReferenceId="-1" IndexKind="Clustered" Storage="RowStore" /><SeekPredicates><SeekPredicateNew><SeekKeys><Prefix ScanType="EQ"><RangeColumns><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></RangeColumns><RangeExpressions><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_plan].[plan_id] as [P].[plan_id]"><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></Identifier></ScalarOperator></RangeExpressions></Prefix></SeekKeys></SeekPredicateNew></SeekPredicates></IndexScan></RelOp></NestedLoops></RelOp></ComputeScalar></RelOp><RelOp NodeId="19" PhysicalOp="Concatenation" LogicalOp="Concatenation" EstimateRows="47.6228" EstimateIO="0" EstimateCPU="4.76228e-06" AvgRowSize="49" EstimatedTotalSubtreeCost="0.00407688" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Column="Union1019" /><ColumnReference Column="Union1022" /><ColumnReference Column="Union1023" /><ColumnReference Column="Union1024" /><ColumnReference Column="Union1034" /></OutputList><Concat><DefinedValues><DefinedValue><ColumnReference Column="Union1019" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="runtime_stats_interval_id" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="runtime_stats_interval_id" /></DefinedValue><DefinedValue><ColumnReference Column="Union1022" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="last_execution_time" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="last_execution_time" /></DefinedValue><DefinedValue><ColumnReference Column="Union1023" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="count_executions" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="count_executions" /></DefinedValue><DefinedValue><ColumnReference Column="Union1024" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="total_duration" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="total_duration" /></DefinedValue><DefinedValue><ColumnReference Column="Union1034" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="total_logical_io_reads" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="total_logical_io_reads" /></DefinedValue></DefinedValues><RelOp NodeId="20" PhysicalOp="Clustered Index Seek" LogicalOp="Clustered Index Seek" EstimateRows="16" EstimatedRowsRead="16" EstimateIO="0.00386574" EstimateCPU="0.0001746" AvgRowSize="49" EstimatedTotalSubtreeCost="0.00404034" TableCardinality="16" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="runtime_stats_interval_id" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="last_execution_time" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="count_executions" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="total_duration" /><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="total_logical_io_reads" /></OutputList><IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="runtime_stats_interval_id" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="last_execution_time" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="count_executions" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="total_duration" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="total_logical_io_reads" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Index="[plan_persist_runtime_stats_cidx]" IndexKind="Clustered" Storage="RowStore" /><SeekPredicates><SeekPredicateNew><SeekKeys><Prefix ScanType="EQ"><RangeColumns><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats]" Column="plan_id" /></RangeColumns><RangeExpressions><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_plan].[plan_id] as [P].[plan_id]"><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></Identifier></ScalarOperator></RangeExpressions></Prefix></SeekKeys></SeekPredicateNew></SeekPredicates></IndexScan></RelOp><RelOp NodeId="21" PhysicalOp="Table-valued function" LogicalOp="Table-valued function" EstimateRows="31.6228" EstimateIO="0" EstimateCPU="3.17798e-05" AvgRowSize="49" EstimatedTotalSubtreeCost="3.17798e-05" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="runtime_stats_interval_id" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="last_execution_time" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="count_executions" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="total_duration" /><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="total_logical_io_reads" /></OutputList><TableValuedFunction><DefinedValues><DefinedValue><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="runtime_stats_interval_id" /></DefinedValue><DefinedValue><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="last_execution_time" /></DefinedValue><DefinedValue><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="count_executions" /></DefinedValue><DefinedValue><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="total_duration" /></DefinedValue><DefinedValue><ColumnReference Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" Column="total_logical_io_reads" /></DefinedValue></DefinedValues><Object Table="[QUERY_STORE_RUNTIME_STATS_IN_MEM]" /><ParameterList><ScalarOperator ScalarString="(0)"><Const ConstValue="(0)" /></ScalarOperator><ScalarOperator ScalarString="NULL"><Const ConstValue="NULL" /></ScalarOperator><ScalarOperator ScalarString="(1)"><Const ConstValue="(1)" /></ScalarOperator><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_plan].[plan_id] as [P].[plan_id]"><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></Identifier></ScalarOperator><ScalarOperator ScalarString="(0)"><Const ConstValue="(0)" /></ScalarOperator><ScalarOperator ScalarString="NULL"><Const ConstValue="NULL" /></ScalarOperator><ScalarOperator ScalarString="(0)"><Const ConstValue="(0)" /></ScalarOperator><ScalarOperator ScalarString="NULL"><Const ConstValue="NULL" /></ScalarOperator></ParameterList></TableValuedFunction></RelOp></Concat></RelOp></NestedLoops></RelOp><RelOp NodeId="22" PhysicalOp="Clustered Index Seek" LogicalOp="Clustered Index Seek" EstimateRows="1" EstimatedRowsRead="1" EstimateIO="0.003125" EstimateCPU="0.0001581" AvgRowSize="17" EstimatedTotalSubtreeCost="0.00468149" TableCardinality="18" Parallel="0" EstimateRebinds="0" EstimateRewinds="8.84496" EstimatedExecutionMode="Row"><OutputList /><IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues /><Object Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats_interval]" Index="[plan_persist_runtime_stats_interval_cidx]" IndexKind="Clustered" Storage="RowStore" /><SeekPredicates><SeekPredicateNew><SeekKeys><Prefix ScanType="EQ"><RangeColumns><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats_interval]" Column="runtime_stats_interval_id" /></RangeColumns><RangeExpressions><ScalarOperator ScalarString="[Union1019]"><Identifier><ColumnReference Column="Union1019" /></Identifier></ScalarOperator></RangeExpressions></Prefix></SeekKeys></SeekPredicateNew></SeekPredicates><Predicate><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_runtime_stats_interval].[start_time]&gt;=dateadd(hour,(-1),getdate()) AND [WideWorldImporters].[sys].[plan_persist_runtime_stats_interval].[start_time]&lt;=getdate()"><Logical Operation="AND"><ScalarOperator><Compare CompareOp="GE"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats_interval]" Column="start_time" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Column="ConstExpr1171"><ScalarOperator><Intrinsic FunctionName="dateadd"><ScalarOperator><Const ConstValue="(6)" /></ScalarOperator><ScalarOperator><Const ConstValue="(-1)" /></ScalarOperator><ScalarOperator><Intrinsic FunctionName="getdate" /></ScalarOperator></Intrinsic></ScalarOperator></ColumnReference></Identifier></ScalarOperator></Compare></ScalarOperator><ScalarOperator><Compare CompareOp="LE"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_runtime_stats_interval]" Column="start_time" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Column="ConstExpr1172"><ScalarOperator><Intrinsic FunctionName="getdate" /></ScalarOperator></ColumnReference></Identifier></ScalarOperator></Compare></ScalarOperator></Logical></ScalarOperator></Predicate></IndexScan></RelOp></NestedLoops></RelOp><RelOp NodeId="23" PhysicalOp="Row Count Spool" LogicalOp="Lazy Spool" EstimateRows="31.6228" EstimateIO="0" EstimateCPU="0.000103162" AvgRowSize="9" EstimatedTotalSubtreeCost="0.00187625" Parallel="0" EstimateRebinds="0" EstimateRewinds="2.83954" EstimatedExecutionMode="Row"><OutputList /><RowCountSpool><RelOp NodeId="24" PhysicalOp="Filter" LogicalOp="Filter" EstimateRows="31.6228" EstimateIO="0" EstimateCPU="0.00048" AvgRowSize="9" EstimatedTotalSubtreeCost="0.00148016" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList /><Filter StartupExpression="0"><RelOp NodeId="25" PhysicalOp="Table-valued function" LogicalOp="Table-valued function" EstimateRows="1000" EstimateIO="0" EstimateCPU="0.00100016" AvgRowSize="15" EstimatedTotalSubtreeCost="0.00100016" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Table="[QUERY_STORE_QUERY_IN_MEM]" Column="query_id" /></OutputList><TableValuedFunction><DefinedValues><DefinedValue><ColumnReference Table="[QUERY_STORE_QUERY_IN_MEM]" Column="query_id" /></DefinedValue></DefinedValues><Object Table="[QUERY_STORE_QUERY_IN_MEM]" /></TableValuedFunction></RelOp><Predicate><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_query].[query_id] as [Q].[query_id]=QUERY_STORE_QUERY_IN_MEM.[query_id]"><Compare CompareOp="EQ"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_query]" Alias="[Q]" Column="query_id" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Table="[QUERY_STORE_QUERY_IN_MEM]" Column="query_id" /></Identifier></ScalarOperator></Compare></ScalarOperator></Predicate></Filter></RelOp></RowCountSpool></RelOp></NestedLoops></RelOp><RelOp NodeId="26" PhysicalOp="Row Count Spool" LogicalOp="Lazy Spool" EstimateRows="31.6228" EstimateIO="0" EstimateCPU="0.000103162" AvgRowSize="9" EstimatedTotalSubtreeCost="0.0140058" Parallel="0" EstimateRebinds="0" EstimateRewinds="120.417" EstimatedExecutionMode="Row"><OutputList /><RowCountSpool><RelOp NodeId="27" PhysicalOp="Filter" LogicalOp="Filter" EstimateRows="31.6228" EstimateIO="0" EstimateCPU="0.00048" AvgRowSize="9" EstimatedTotalSubtreeCost="0.00148016" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList /><Filter StartupExpression="0"><RelOp NodeId="28" PhysicalOp="Table-valued function" LogicalOp="Table-valued function" EstimateRows="1000" EstimateIO="0" EstimateCPU="0.00100016" AvgRowSize="15" EstimatedTotalSubtreeCost="0.00100016" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Table="[QUERY_STORE_PLAN_IN_MEM]" Column="plan_id" /></OutputList><TableValuedFunction><DefinedValues><DefinedValue><ColumnReference Table="[QUERY_STORE_PLAN_IN_MEM]" Column="plan_id" /></DefinedValue></DefinedValues><Object Table="[QUERY_STORE_PLAN_IN_MEM]" /></TableValuedFunction></RelOp><Predicate><ScalarOperator ScalarString="[WideWorldImporters].[sys].[plan_persist_plan].[plan_id] as [P].[plan_id]=QUERY_STORE_PLAN_IN_MEM.[plan_id]"><Compare CompareOp="EQ"><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[sys]" Table="[plan_persist_plan]" Alias="[P]" Column="plan_id" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Table="[QUERY_STORE_PLAN_IN_MEM]" Column="plan_id" /></Identifier></ScalarOperator></Compare></ScalarOperator></Predicate></Filter></RelOp></RowCountSpool></RelOp></NestedLoops></RelOp></ComputeScalar></RelOp></Hash></RelOp></ComputeScalar></RelOp></ComputeScalar></RelOp></Sort></RelOp></QueryPlan></StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>SELECT qsp.query_id, qsp.plan_id, qsp.compatibility_level, AVG(qsrs.avg_duration)/1000 as avg_duration_ms, AVG(qsrs.avg_logical_io_reads) as avg_logical_io,CAST (qsp.query_plan as XML),qsqt.query_sql_text\r\nFROM sys.query_store_plan qsp\r\nINNER JOIN sys.query_store_runtime_stats qsrs\r\nON qsp.plan_id = qsrs.plan_id\r\nINNER JOIN sys.query_store_runtime_stats_interval qsrsi\r\nON qsrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id\r\nAND qsrsi.start_time between DATEADD(HOUR, -1, GETDATE()) and GETDATE()\r\nINNER JOIN sys.query_store_query qsq\r\nON qsp.query_id = qsq. query_id\r\nINNER JOIN sys.query_store_query_text qsqt\r\nON qsq.query_text_id = qsqt.query_text_id\r\nAND query_sql_text LIKE '%Invoices%'\r\nGROUP BY qsp.query_id, qsp.plan_id, qsrs.avg_duration, qsp.compatibility_level, qsp.query_plan, query_sql_text, qsrs.last_execution_time\r\nORDER BY qsrs.last_execution_time DESC, query_id DESC, qsp.plan_id DESC
41987519150107.456485164.68<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.524" Build="15.0.1200.24"><BatchSequence><Batch><Statements><StmtSimple StatementText="SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit&#xD;&#xA;FROM Sales.Invoices i&#xD;&#xA;INNER JOIN @ilines il&#xD;&#xA;ON i.InvoiceID = il.InvoiceID&#xD;&#xA;GROUP By i.CustomerID" StatementId="1" StatementCompId="5" StatementType="SELECT" StatementSqlHandle="0x0900987AD6D316F3924442B36492707B50290000000000000000000000000000000000000000000000000000" DatabaseContextSettingsId="2" ParentObjectId="1579152671" BatchSqlHandle="0x030005001FF51F5ECCA7150131AA000001000000000000000000000000000000000000000000000000000000" StatementParameterizationType="0" RetrievedFromCache="true" StatementSubTreeCost="4.71505" StatementEstRows="1" SecurityPolicyApplied="false" StatementOptmLevel="FULL" QueryHash="0xC03E0B5FBB00AA02" QueryPlanHash="0xFF7E99A34B7167C4" CardinalityEstimationModelVersion="150" BatchModeOnRowStoreUsed="true"><StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false" /><QueryPlan CachedPlanSize="88" CompileTime="7" CompileCPU="7" CompileMemory="592"><MemoryGrantInfo SerialRequiredMemory="4248" SerialDesiredMemory="71120" /><OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="656537" EstimatedPagesCached="82067" EstimatedAvailableDegreeOfParallelism="2" MaxCompileMemory="8531576" /><OptimizerStatsUsage><StatisticsInfo LastUpdate="2016-06-02T10:38:35.48" ModificationCount="4261" SamplingPercent="20.0848" Statistics="[FK_Sales_Invoices_CustomerID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:45:05.20" ModificationCount="3812" SamplingPercent="22.5708" Statistics="[IX_Sales_Invoices_ConfirmedDeliveryTime]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:29:18.25" ModificationCount="7449" SamplingPercent="20.7164" Statistics="[FK_Sales_Invoices_BillToCustomerID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:39:24.63" ModificationCount="3987" SamplingPercent="20.0262" Statistics="[FK_Sales_Invoices_ContactPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:34:55.87" ModificationCount="5491" SamplingPercent="20.2525" Statistics="[FK_Sales_Invoices_SalespersonPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:37:24.87" ModificationCount="4724" SamplingPercent="20.1274" Statistics="[FK_Sales_Invoices_PackedByPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:40:44.41" ModificationCount="3527" SamplingPercent="19.8185" Statistics="[FK_Sales_Invoices_AccountsPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:45:36.31" ModificationCount="1604" SamplingPercent="19.5992" Statistics="[FK_Sales_Invoices_DeliveryMethodID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:41:15.07" ModificationCount="3308" SamplingPercent="19.7896" Statistics="[FK_Sales_Invoices_OrderID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:54:55.62" ModificationCount="0" SamplingPercent="17.2061" Statistics="[PK_Sales_Invoices]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /></OptimizerStatsUsage><RelOp NodeId="0" PhysicalOp="Top" LogicalOp="Top" EstimateRows="1" EstimateIO="0" EstimateCPU="1e-07" AvgRowSize="28" EstimatedTotalSubtreeCost="4.71505" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Column="Expr1002" /><ColumnReference Column="Expr1003" /></OutputList><Top RowCount="0" IsPercent="0" WithTies="0"><TopExpression><ScalarOperator ScalarString="(1)"><Const ConstValue="(1)" /></ScalarOperator></TopExpression><RelOp NodeId="2" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="1" EstimateRowsWithoutRowGoal="660.018" EstimateIO="0" EstimateCPU="6.60018e-05" AvgRowSize="28" EstimatedTotalSubtreeCost="4.71505" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Column="Expr1002" /><ColumnReference Column="Expr1003" /></OutputList><ComputeScalar><DefinedValues><DefinedValue><ColumnReference Column="Expr1002" /><ScalarOperator ScalarString="CONVERT_IMPLICIT(int,[globalagg1005],0)"><Convert DataType="int" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Column="globalagg1005" /></Identifier></ScalarOperator></Convert></ScalarOperator></DefinedValue></DefinedValues><RelOp NodeId="3" PhysicalOp="Stream Aggregate" LogicalOp="Aggregate" EstimateRows="1" EstimateRowsWithoutRowGoal="660.018" EstimateIO="0" EstimateCPU="0.000525548" AvgRowSize="32" EstimatedTotalSubtreeCost="4.71505" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Column="Expr1003" /><ColumnReference Column="globalagg1005" /></OutputList><StreamAggregate><DefinedValues><DefinedValue><ColumnReference Column="globalagg1005" /><ScalarOperator ScalarString="SUM([partialagg1004])"><Aggregate Distinct="0" AggType="SUM"><ScalarOperator><Identifier><ColumnReference Column="partialagg1004" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Column="Expr1003" /><ScalarOperator ScalarString="SUM([partialagg1006])"><Aggregate Distinct="0" AggType="SUM"><ScalarOperator><Identifier><ColumnReference Column="partialagg1006" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue></DefinedValues><GroupBy><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></GroupBy><RelOp NodeId="4" PhysicalOp="Sort" LogicalOp="Sort" EstimateRows="1" EstimateRowsWithoutRowGoal="477.771" EstimateIO="0.00375375" EstimateCPU="0.00341679" AvgRowSize="36" EstimatedTotalSubtreeCost="4.71505" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Batch"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /><ColumnReference Column="partialagg1004" /><ColumnReference Column="partialagg1006" /></OutputList><MemoryFractions Input="0.995454" Output="0.995454" /><Sort Distinct="0"><OrderBy><OrderByColumn Ascending="1"><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></OrderByColumn></OrderBy><RelOp NodeId="5" PhysicalOp="Adaptive Join" LogicalOp="Inner Join" EstimatedJoinType="Hash Match" AdaptiveThresholdRows="66.1417" EstimateRows="477.771" EstimateRowsWithoutRowGoal="477.771" EstimateIO="0" EstimateCPU="4.77771e-05" AvgRowSize="36" EstimatedTotalSubtreeCost="4.70793" Parallel="0" IsAdaptive="1" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Batch"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /><ColumnReference Column="partialagg1004" /><ColumnReference Column="partialagg1006" /></OutputList><AdaptiveJoin BitmapCreator="1" Optimized="0" WithUnorderedPrefetch="1"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></DefinedValue><DefinedValue><ColumnReference Column="partialagg1004" /><ColumnReference Column="partialagg1004" /><ColumnReference Column="partialagg1004" /></DefinedValue><DefinedValue><ColumnReference Column="partialagg1006" /><ColumnReference Column="partialagg1006" /><ColumnReference Column="partialagg1006" /></DefinedValue><DefinedValue><ColumnReference Column="Opt_Bitmap1007" /></DefinedValue></DefinedValues><HashKeysBuild><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /></HashKeysBuild><HashKeysProbe><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="InvoiceID" /></HashKeysProbe><OuterReferences><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /><ColumnReference Column="Expr1008" /></OuterReferences><RelOp NodeId="7" PhysicalOp="Hash Match" LogicalOp="Aggregate" EstimateRows="477.771" EstimateIO="0" EstimateCPU="0.545855" AvgRowSize="36" EstimatedTotalSubtreeCost="4.4906" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Batch"><OutputList><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /><ColumnReference Column="partialagg1004" /><ColumnReference Column="partialagg1006" /></OutputList><MemoryFractions Input="0.00167484" Output="0.00167484" /><Hash><DefinedValues><DefinedValue><ColumnReference Column="partialagg1004" /><ScalarOperator ScalarString="COUNT(*)"><Aggregate Distinct="0" AggType="COUNT*" /></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Column="partialagg1006" /><ScalarOperator ScalarString="SUM(@ilines.[LineProfit] as [il].[LineProfit])"><Aggregate Distinct="0" AggType="SUM"><ScalarOperator><Identifier><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue></DefinedValues><HashKeysBuild><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /></HashKeysBuild><RelOp NodeId="8" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="228265" EstimatedRowsRead="228265" EstimateIO="3.6935" EstimateCPU="0.251249" AvgRowSize="20" EstimatedTotalSubtreeCost="3.94474" TableCardinality="228265" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Batch"><OutputList><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></OutputList><IndexScan Ordered="0" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /></DefinedValue><DefinedValue><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></DefinedValue></DefinedValues><Object Table="[@ilines]" Index="[PK__#A91F82B__0D760AF9A87315AB]" Alias="[il]" Storage="RowStore" /></IndexScan></RelOp></Hash></RelOp><RelOp NodeId="10" PhysicalOp="Index Scan" LogicalOp="Index Scan" EstimateRows="705.1" EstimatedRowsRead="70510" EstimateIO="0.123866" EstimateCPU="0.077718" AvgRowSize="15" EstimatedTotalSubtreeCost="0.201584" TableCardinality="70510" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Batch"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="InvoiceID" /><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></OutputList><IndexScan Ordered="0" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="InvoiceID" /></DefinedValue><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Index="[FK_Sales_Invoices_CustomerID]" Alias="[i]" IndexKind="NonClustered" Storage="RowStore" /><Predicate><ScalarOperator ScalarString="PROBE([Opt_Bitmap1007],[WideWorldImporters].[Sales].[Invoices].[InvoiceID] as [i].[InvoiceID])"><Intrinsic FunctionName="PROBE"><ScalarOperator><Identifier><ColumnReference Column="Opt_Bitmap1007" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="InvoiceID" /></Identifier></ScalarOperator></Intrinsic></ScalarOperator></Predicate></IndexScan></RelOp><RelOp NodeId="14" PhysicalOp="Clustered Index Seek" LogicalOp="Clustered Index Seek" EstimateRows="1" EstimatedRowsRead="1" EstimateIO="0.003125" EstimateCPU="0.0001581" AvgRowSize="11" EstimatedTotalSubtreeCost="1.53467" TableCardinality="70510" Parallel="0" EstimateRebinds="476.771" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></OutputList><IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Index="[PK_Sales_Invoices]" Alias="[i]" IndexKind="Clustered" Storage="RowStore" /><SeekPredicates><SeekPredicateNew><SeekKeys><Prefix ScanType="EQ"><RangeColumns><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="InvoiceID" /></RangeColumns><RangeExpressions><ScalarOperator ScalarString="@ilines.[InvoiceID] as [il].[InvoiceID]"><Identifier><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /></Identifier></ScalarOperator></RangeExpressions></Prefix></SeekKeys></SeekPredicateNew></SeekPredicates></IndexScan></RelOp></AdaptiveJoin></RelOp></Sort></RelOp></StreamAggregate></RelOp></ComputeScalar></RelOp></Top></RelOp></QueryPlan></StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit\r\nFROM Sales.Invoices i\r\nINNER JOIN @ilines il\r\nON i.InvoiceID = il.InvoiceID\r\nGROUP By i.CustomerID
419875181301293.14972690230.76<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.524" Build="15.0.1200.24"><BatchSequence><Batch><Statements><StmtSimple StatementText="SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit&#xD;&#xA;FROM Sales.Invoices i&#xD;&#xA;INNER JOIN @ilines il&#xD;&#xA;ON i.InvoiceID = il.InvoiceID&#xD;&#xA;GROUP By i.CustomerID" StatementId="1" StatementCompId="5" StatementType="SELECT" StatementSqlHandle="0x0900987AD6D316F3924442B36492707B50290000000000000000000000000000000000000000000000000000" DatabaseContextSettingsId="2" ParentObjectId="1579152671" BatchSqlHandle="0x030005001FF51F5ECCA7150131AA000001000000000000000000000000000000000000000000000000000000" StatementParameterizationType="0" RetrievedFromCache="false" StatementSubTreeCost="0.0179329" StatementEstRows="1" SecurityPolicyApplied="false" StatementOptmLevel="FULL" QueryHash="0xC03E0B5FBB00AA02" QueryPlanHash="0xDE2D0E6A36C29EB5" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="130"><StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false" /><QueryPlan CachedPlanSize="32" CompileTime="4" CompileCPU="4" CompileMemory="432"><MemoryGrantInfo SerialRequiredMemory="512" SerialDesiredMemory="544" /><OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="656537" EstimatedPagesCached="82067" EstimatedAvailableDegreeOfParallelism="2" MaxCompileMemory="8523936" /><OptimizerStatsUsage><StatisticsInfo LastUpdate="2016-06-02T10:38:35.48" ModificationCount="4261" SamplingPercent="20.0848" Statistics="[FK_Sales_Invoices_CustomerID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:45:05.20" ModificationCount="3812" SamplingPercent="22.5708" Statistics="[IX_Sales_Invoices_ConfirmedDeliveryTime]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:29:18.25" ModificationCount="7449" SamplingPercent="20.7164" Statistics="[FK_Sales_Invoices_BillToCustomerID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:39:24.63" ModificationCount="3987" SamplingPercent="20.0262" Statistics="[FK_Sales_Invoices_ContactPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:34:55.87" ModificationCount="5491" SamplingPercent="20.2525" Statistics="[FK_Sales_Invoices_SalespersonPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:37:24.87" ModificationCount="4724" SamplingPercent="20.1274" Statistics="[FK_Sales_Invoices_PackedByPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:40:44.41" ModificationCount="3527" SamplingPercent="19.8185" Statistics="[FK_Sales_Invoices_AccountsPersonID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:45:36.31" ModificationCount="1604" SamplingPercent="19.5992" Statistics="[FK_Sales_Invoices_DeliveryMethodID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:54:55.62" ModificationCount="0" SamplingPercent="17.2061" Statistics="[PK_Sales_Invoices]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /><StatisticsInfo LastUpdate="2016-06-02T10:41:15.07" ModificationCount="3308" SamplingPercent="19.7896" Statistics="[FK_Sales_Invoices_OrderID]" Table="[Invoices]" Schema="[Sales]" Database="[WideWorldImporters]" /></OptimizerStatsUsage><RelOp NodeId="0" PhysicalOp="Top" LogicalOp="Top" EstimateRows="1" EstimateIO="0" EstimateCPU="1e-07" AvgRowSize="28" EstimatedTotalSubtreeCost="0.0179329" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Column="Expr1002" /><ColumnReference Column="Expr1003" /></OutputList><Top RowCount="0" IsPercent="0" WithTies="0"><TopExpression><ScalarOperator ScalarString="(1)"><Const ConstValue="(1)" /></ScalarOperator></TopExpression><RelOp NodeId="1" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="1" EstimateIO="0" EstimateCPU="0" AvgRowSize="28" EstimatedTotalSubtreeCost="0.0179328" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Column="Expr1002" /><ColumnReference Column="Expr1003" /></OutputList><ComputeScalar><DefinedValues><DefinedValue><ColumnReference Column="Expr1002" /><ScalarOperator ScalarString="CONVERT_IMPLICIT(int,[Expr1007],0)"><Convert DataType="int" Style="0" Implicit="1"><ScalarOperator><Identifier><ColumnReference Column="Expr1007" /></Identifier></ScalarOperator></Convert></ScalarOperator></DefinedValue></DefinedValues><RelOp NodeId="2" PhysicalOp="Stream Aggregate" LogicalOp="Aggregate" EstimateRows="1" EstimateIO="0" EstimateCPU="1.1e-06" AvgRowSize="28" EstimatedTotalSubtreeCost="0.0179328" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Column="Expr1003" /><ColumnReference Column="Expr1007" /></OutputList><StreamAggregate><DefinedValues><DefinedValue><ColumnReference Column="Expr1007" /><ScalarOperator ScalarString="Count(*)"><Aggregate AggType="countstar" Distinct="0" /></ScalarOperator></DefinedValue><DefinedValue><ColumnReference Column="Expr1003" /><ScalarOperator ScalarString="SUM(@ilines.[LineProfit] as [il].[LineProfit])"><Aggregate Distinct="0" AggType="SUM"><ScalarOperator><Identifier><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue></DefinedValues><GroupBy><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></GroupBy><RelOp NodeId="3" PhysicalOp="Sort" LogicalOp="Sort" EstimateRows="1" EstimateIO="0.0112613" EstimateCPU="0.00010002" AvgRowSize="20" EstimatedTotalSubtreeCost="0.0179317" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></OutputList><MemoryFractions Input="1" Output="1" /><Sort Distinct="0"><OrderBy><OrderByColumn Ascending="1"><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></OrderByColumn></OrderBy><RelOp NodeId="4" PhysicalOp="Nested Loops" LogicalOp="Inner Join" EstimateRows="1" EstimateIO="0" EstimateCPU="4.18e-06" AvgRowSize="20" EstimatedTotalSubtreeCost="0.00657038" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></OutputList><NestedLoops Optimized="0"><OuterReferences><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /></OuterReferences><RelOp NodeId="5" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="1" EstimatedRowsRead="1" EstimateIO="0.003125" EstimateCPU="0.0001581" AvgRowSize="20" EstimatedTotalSubtreeCost="0.0032831" TableCardinality="0" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></OutputList><IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /></DefinedValue><DefinedValue><ColumnReference Table="@ilines" Alias="[il]" Column="LineProfit" /></DefinedValue></DefinedValues><Object Table="[@ilines]" Index="[PK__#B9706F9__0D760AF9E81218E0]" Alias="[il]" Storage="RowStore" /></IndexScan></RelOp><RelOp NodeId="6" PhysicalOp="Clustered Index Seek" LogicalOp="Clustered Index Seek" EstimateRows="1" EstimatedRowsRead="1" EstimateIO="0.003125" EstimateCPU="0.0001581" AvgRowSize="11" EstimatedTotalSubtreeCost="0.0032831" TableCardinality="70510" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></OutputList><IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore"><DefinedValues><DefinedValue><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="CustomerID" /></DefinedValue></DefinedValues><Object Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Index="[PK_Sales_Invoices]" Alias="[i]" IndexKind="Clustered" Storage="RowStore" /><SeekPredicates><SeekPredicateNew><SeekKeys><Prefix ScanType="EQ"><RangeColumns><ColumnReference Database="[WideWorldImporters]" Schema="[Sales]" Table="[Invoices]" Alias="[i]" Column="InvoiceID" /></RangeColumns><RangeExpressions><ScalarOperator ScalarString="@ilines.[InvoiceID] as [il].[InvoiceID]"><Identifier><ColumnReference Table="@ilines" Alias="[il]" Column="InvoiceID" /></Identifier></ScalarOperator></RangeExpressions></Prefix></SeekKeys></SeekPredicateNew></SeekPredicates></IndexScan></RelOp></NestedLoops></RelOp></Sort></RelOp></StreamAggregate></RelOp></ComputeScalar></RelOp></Top></RelOp></QueryPlan></StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit\r\nFROM Sales.Invoices i\r\nINNER JOIN @ilines il\r\nON i.InvoiceID = il.InvoiceID\r\nGROUP By i.CustomerID
" + } + } + ], + "execution_count": 1 + } + ] +} \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/03_performance/iqp/proc.sql b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/proc.sql new file mode 100644 index 00000000..0b0d61f5 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/proc.sql @@ -0,0 +1,33 @@ +USE WideWorldImporters +GO +CREATE or ALTER PROCEDURE [Sales].[CustomerProfits] +AS +BEGIN +-- Declare the table variable +DECLARE @ilines TABLE +( [InvoiceLineID] [int] NOT NULL primary key, + [InvoiceID] [int] NOT NULL, + [StockItemID] [int] NOT NULL, + [Description] [nvarchar](100) NOT NULL, + [PackageTypeID] [int] NOT NULL, + [Quantity] [int] NOT NULL, + [UnitPrice] [decimal](18, 2) NULL, + [TaxRate] [decimal](18, 3) NOT NULL, + [TaxAmount] [decimal](18, 2) NOT NULL, + [LineProfit] [decimal](18, 2) NOT NULL, + [ExtendedPrice] [decimal](18, 2) NOT NULL, + [LastEditedBy] [int] NOT NULL, + [LastEditedWhen] [datetime2](7) NOT NULL +) + +-- Insert all the rows from InvoiceLines into the table variable +INSERT INTO @ilines SELECT * FROM Sales.InvoiceLines + +-- Find my total profile by customer +SELECT TOP 1 COUNT(i.CustomerID) as customer_count, SUM(il.LineProfit) as total_profit +FROM Sales.Invoices i +INNER JOIN @ilines il +ON i.InvoiceID = il.InvoiceID +GROUP By i.CustomerID +END +GO \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/03_performance/iqp/querystore.sql b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/querystore.sql new file mode 100644 index 00000000..af2fc234 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/querystore.sql @@ -0,0 +1,17 @@ +USE WideWorldImporters +GO +SELECT qsp.query_id, qsp.plan_id, qsp.compatibility_level, AVG(qsrs.avg_duration)/1000 as avg_duration_ms, AVG(qsrs.avg_logical_io_reads) as avg_logical_io,CAST (qsp.query_plan as XML),qsqt.query_sql_text +FROM sys.query_store_plan qsp +INNER JOIN sys.query_store_runtime_stats qsrs +ON qsp.plan_id = qsrs.plan_id +INNER JOIN sys.query_store_runtime_stats_interval qsrsi +ON qsrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id +AND qsrsi.start_time between DATEADD(HOUR, -1, GETDATE()) and GETDATE() +INNER JOIN sys.query_store_query qsq +ON qsp.query_id = qsq. query_id +INNER JOIN sys.query_store_query_text qsqt +ON qsq.query_text_id = qsqt.query_text_id +AND query_sql_text LIKE '%Invoices%' +GROUP BY qsp.query_id, qsp.plan_id, qsrs.avg_duration, qsp.compatibility_level, qsp.query_plan, query_sql_text, qsrs.last_execution_time +ORDER BY qsrs.last_execution_time DESC, query_id DESC, qsp.plan_id DESC +GO \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/03_performance/iqp/repro130.sql b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/repro130.sql new file mode 100644 index 00000000..738059bf --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/repro130.sql @@ -0,0 +1,12 @@ +USE master +GO +ALTER DATABASE wideworldimporters SET compatibility_level = 130 +GO +USE WideWorldImporters +GO +SET NOCOUNT ON +GO +EXEC [Sales].[CustomerProfits] +GO 25 +SET NOCOUNT OFF +GO \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/03_performance/iqp/repro150.sql b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/repro150.sql new file mode 100644 index 00000000..d7124bb9 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/03_performance/iqp/repro150.sql @@ -0,0 +1,12 @@ +USE master +GO +ALTER DATABASE wideworldimporters SET compatibility_level = 150 +GO +USE WideWorldImporters +GO +SET NOCOUNT ON +GO +EXEC [Sales].[CustomerProfits] +GO 25 +SET NOCOUNT OFF +GO \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/04_HA.md b/SQLonOpenShift/sqlonopenshift/04_HA.md new file mode 100644 index 00000000..67eaab8f --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/04_HA.md @@ -0,0 +1,280 @@ +![](../graphics/microsoftlogo.png) + +# Workshop: SQL Server on OpenShift + +#### A Microsoft workshop from the SQL Server team + +

+ +

SQL Server High Availability on OpenShift

+ +You'll cover the following topics in this Module: + +
+ +
4.0 SQL Server High Availability on OpenShift
+
4.1 Updating SQL Server on OpenShift
+ +
+ +

+ +

4.0 SQL Server High Availability on OpenShift

+ +In this module you will learn how to use the built-in capabilities of OpenShift for high availability for SQL Server. + +
Note: This Module assumes you have at minimum, completed Module 01, Deploy SQL Server on OpenShift, and Module 02, Connect and Query.
+ +OpenShift, which is based on Kubernetes, allows you to deploy a pod and specify a declaration for a number of replicas to be deployed. In previous modules, you deployed a SQL Server container in a single pod on OpenShift. You used a declarative yaml file to instruct OpenShift how to deploy SQL Server with a replica. The fragment of the yaml file looks like + +
apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: mssql-deployment
+spec:
+  replicas: 1
+  strategy:
+    type: Recreate
+ +By stating **replicas of 1**, OpenShift will attempt to ensure at least one pod for SQL Server is always running. Since you used PersistentVolumeClaim for SQL Server databases, your data will always be available even if OpenShift has to start new SQL Server containers. In section 4.1, you will learn the signifance of the **type: Recreate** syntax. + +In addition, you created a load balancer service with the following yaml fragment + +
apiVersion: v1
+kind: Service
+metadata:
+  name: mssql-service
+spec:
+  selector:
+    app: mssql
+  ports:
+    - protocol: TCP
+      port: 31433
+      targetPort: 1433
+  type: LoadBalancer
+ +The LoadBalancer service in OpenShift will have a consistent IP address and port (31433) that will always map to the private IP address for the SQL Server container and port 1433, which is the default port for the SQL Server database engine. So even if OpenShift has to deploy a new SQL Server container with a new private IP address, the LoadBalancer will always be directed to the correct SQL Server. + +The following diagram is a simple visual on how OpenShift provides built-in High Availability + +![k8s HA](../graphics/k8s_high_availability.jpg) + +Proceed to the Activity to see examples of how OpenShift provides high availability for SQL Server. + +

+ +

Activity: SQL Server High Availability on OpenShift

+ +Follow these steps to see how high availability works with SQL Server on OpenShift using replicas, PersistentVolumeClaims, and Load Balancers. + +1. Open a shell prompt and change to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/04_ha** directory. + +2. One of the simple methods for High Availability for OpenShift is at the container level. Since SQL Server is the main program in the container, if SQL Server is shutdown or crashes, OpenShift will automatically restart the container in the same pod and node. Run the following commands to see the status of the current pod deployed for the project you created in Module 01. + + `oc get pods -o wide` + + The output of this command should look something like the following. Take note of the xxxxxx + +
NAME                                READY     STATUS    RESTARTS   AGE       IP            NODE                NOMINATED NODE
+   mssql-deployment-6d8844988b-j9r84   1/1       Running   0          3m        10.129.0.15   ocpcluster-node01   none
+ + Take note of the pod name (under the NAME column), the IP address, and the NODE name (If your cluster has only one node, the node name will not change throughout this activity). + +3. Run the following commands to shutdown SQL Server. You can also use the script **step1_stop_container.sh**: + + `SERVERIP=$(kubectl get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SHUTDOWN WITH NOWAIT"` + + You should see the following output from the shell + +
Server shut down by NOWAIT request from login sa
+ + Now run the command again to see the pod status + + `oc get pods -o wide` + + Note the pod name, IP address, and node have not changed. The STATUS should be Running. + +4. Execute the following commands to test SQL Server is running. You can also use the script **step2_test_sql.sh** + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT @@version"` + + Your output should look like the following + +
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+   Microsoft SQL Server 2019 (CTP2.2) - 15.0.1200.24 (X64)
+        Dec  5 2018 16:51:26
+        Copyright (C) 2018 Microsoft Corporation
+        Developer Edition (64-bit) on Linux (Red Hat Enterprise Linux Server 7.6 (Maipo)) X64                          
+
+   (1 rows affected)
+ + Depending on how long it takes OpenShift to restart the container, your reconnection make take longer than a few seconds. + +5. Since you deployed the SQL Server container in a pod using 1 replica, if there is a failure of the pod in a node, OpenShift will attempt to to create a new pod and schedule it on the appropriate available node. For SQL Server, this is like a *failover* since OpenShift will start a new SQL Server container but pointing to the same PersistentVolumeClaim, hence the same system and user databases. And the LoadBalancer acts like a *listener* so if the new SQL Server container has a new IP address, the application still connects to the same LoadBalancer IP address. + + **Note**: Ths is not the same as a SQL Server Availability Group which will be discussed in Module 05, Using an Operator with SQL Server on OpenShift. + + Run the following commands to take note again of the pod details including name, status, IP, and node + + `oc get pods -o wide` + + Run the following commands to delete the node for the pod for SQL Server container. You can also use the script **step3_pod_failure.sh**. In this example, you can take advantage of the label used to create the SQL Server pod. This was defined in the following yaml fragment from Module 01 + +
template:
+        metadata:
+          labels:
+            app: mssql
+ + `oc delete pod -l app=mssql` + + The output of this command should look like the following: + +
pod "mssql-deployment-6d8844988b-j9r84" deleted
+ + and then you are returned to the command prompt + + Now run the command again to see the pod status + + `oc get pods -o wide` + + Starting a new pod on the same node should take a matter of seconds but if OpenShift has to start a new pod on a different node, it could take several minutes especially if the SQL Server container image does not exist on that new node. + + The output of this command should have a new pod name but start with the name **mssql-deployment**. The IP address should also be different and depending on your OpenShift cluster configuration the pod could be scheduled on a new node. When the pod status is Running, you should be able to access SQL Server + +6. If you have completed the steps in Module 02, then you restored the database WideWorldImporters to the container. And since the container uses a PersistentVolumeClaim, the WideWorldImporters should have the same data. Execute the following commands or the script **step4_find_people.sh** to query the database: + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"USE WideWorldImporters;SELECT TOP 10 FullName, PhoneNumber, EmailAddress FROM [Application].[People] ORDER BY FullName;" -Y30` + + You should get the same results of data as you did in Module 02. Notice in this example, you connect to SQL Server with the LoadBalancer service IP address and port since you cannot determine what the IP address will be of the SQL Server container as it gets recreated on the same or other nodes. + +Proceed to the next section of this module to learn how to update SQL Server while keeping it highly available. + +

+ +

4.1 Updating SQL Server on OpenShift

+ +To update the version of the SQL Server software outside a container, you would normally use a package manger command such as **yum update**. + +However, package management software is not normally installed in the SQL Server container. Furthermore, the principle of containers is to use a consistent image. So the challenge to update the SQL Server software is that you want your running SQL Server container to keep the same set of databases and data but you want a new SQL server container with a new updated image to connect to the databases. + +Fortunately, the SQL Server engine is aware of the version it is running under when it starts up and can detect the compatible versions of metadata within system and user databases. Therefore, if you start a new container using the same PersistentVolumeClaim of your databases from the container with the newer version image, SQL Server can be updated in a highly available fashion. + +When you deploy your pod with SQL Server on OpenShift you can declare the deployment to stop the container and recreate a new one if you indicate to OpenShift that the image should be updated for the deployment. + +The following yaml fragment from Module 01 shows this declaration of strategy to **Recreate**. + +
apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: mssql-deployment
+spec:
+  replicas: 1
+  strategy:
+    type: Recreate
+ +**Note**: SQL Server can be updated from a lower major release to a new one such as SQL Server 2017 to SQL Server 2019. However, you cannot rollback a major version update. SQL Server has a concept of minor updates called a *cumulative update*. Cumulative updates with a major SQL Server version are compatible to update and rollback. SQL Server releases in preview called Community Technology Preview (CTP) builds are treated like major releases. So you can update for example from SQL Server 2019 CTP 2.2 to 2.3 but you cannot rollback. + +This workshop as of April 2019 uses SQL 2019 CTP builds and therefore there is no exercise to rollback but future versions of this workshop will include a rollback exercise between SQL 2019 cumulative updates. + +Proceed to the Activity to learn how to update SQL Server but keep your databases intact making it highly available and consistent while updating the SQL Server software version. + +

+ +

Activity: Updating SQL Server on OpenShift

+ +In this activity, you will use OpenShift commands to deploy an update to the release of SQL Server with no change to user data and minimize application downtime. + +1. Open a shell prompt and change to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/04_ha** directory. + +2. Execute the following commands to take note of the version of SQL Server. You can also execute the script **step2_test_sql.sh** + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT @@version"` + + Depending on what image was used for your workshop, the output should be reflective of the version of SQL Server deployed. In this example, the image used was for SQL Server 2019 CTP 2.2 for Red Hat Enterprise Linux. + +
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+   Microsoft SQL Server 2019 (CTP2.2) - 15.0.1200.24 (X64)
+        Dec  5 2018 16:51:26
+        Copyright (C) 2018 Microsoft Corporation
+        Developer Edition (64-bit) on Linux (Red Hat Enterprise Linux Server 7.6 (Maipo)) X64
+ +3. Execute the following commands to update the image of the SQL Server deployment from Module 01 to SQL Server 2019 CTP 2.3. You can also use the script **step5_update_sql.sh** + + `oc --record deployment set image mssql-deployment mssql=mcr.microsoft.com/mssql/rhel/server:2019-CTP2.3` + + The output of this command should look like + +
deployment.extensions/mssql-deployment image updated
+ +4. Execute the commands to see the status of the image update to the deployment + + `oc get all` + + The output of this command while the new pod with the new image is getting created should look something like this + +
NAME                                    READY     STATUS              RESTARTS   AGE
+   pod/mssql-deployment-6748c8d9ff-wqstc   0/1       ContainerCreating   0          1m
+
+   NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)           AGE
+   service/mssql-service   LoadBalancer   172.30.241.155   13.82.210.117   31433:31372/TCP   38m
+
+   NAME                               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
+    deployment.apps/mssql-deployment   1         1         1            0           38m
+
+   NAME                                          DESIRED   CURRENT   READY     AGE
+    replicaset.apps/mssql-deployment-6748c8d9ff   1         1         0         1m
+    replicaset.apps/mssql-deployment-6d8844988b   0         0         0         38m
+ + The time it takes to run the new pod and container could be several minutes as the OpenShift cluster may not have the new container image for SQL 2019 CTP 2.3 in its local docker registry. Once the new container is Running, you can connect to SQL Server. Notice also in this output the previous pod is stopped but available to restart, which is part of the process to rollback should you be using a cumulative update strategy. + +5. Run the following commands to see the SQL Server version updates. You can also use the script **step2_test_sql.sh** + + `SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'})`
+ `PORT=31433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT @@version"` + + The SQL Server container will move to a state of running, but internally the SQL Server engine must update the metadata for system and user databases. This process should only take a few minutes, but any attempt to connect to SQL Server before this completes can result in the following error + +
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'sa'. Reason: Server is in script upgrade mode. Only administrator can connect at this time..
+ + Within a few minutes, the above command or script if run again should product results like the following: + +
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+   Microsoft SQL Server 2019 (CTP2.3) - 15.0.1300.359 (X64)
+        Feb 15 2019 23:50:43
+        Copyright (C) 2019 Microsoft Corporation
+        Developer Edition (64-bit) on Linux (Red Hat Enterprise Linux Server 7.6 (Maipo)) X64                          
+
+   (1 rows affected)
+ +6. If you are going to proceed and complete Module 05, you need to cleanup resources. This can be done by running the following commands. You can also execute the script **step6_cleanup.sh** + + `oc delete project mssql` + `oc project default` + + When this completes, you should see the following output and be placed back at the shell prompt + +
project.project.openshift.io "mssql" deleted
Now using project "default" on server "https://[masterconsoleurl]:443".
+ +You can now proceed to Next Steps to learn more about using operators and SQL Server Always On Availability Groups. + +

+ +

For Further Study

+ +- [High Availability for SQL Server on Kubernetes](https://docs.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes?view=sql-server-2017#ha-solution-on-kubernetes-running-in-azure-kubernetes-service) +- [High Availability for SQL Server Containers](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-container-ha-overview) + +

+ +

Next Steps

+ +Next, Continue to Using an Operator with SQL Server on OpenShift. diff --git a/SQLonOpenShift/sqlonopenshift/04_ha/step1_stop_container.sh b/SQLonOpenShift/sqlonopenshift/04_ha/step1_stop_container.sh new file mode 100644 index 00000000..8a4f5093 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/04_ha/step1_stop_container.sh @@ -0,0 +1,3 @@ +SERVERIP=$(kubectl get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SHUTDOWN WITH NOWAIT" \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/04_ha/step2_test_sql.sh b/SQLonOpenShift/sqlonopenshift/04_ha/step2_test_sql.sh new file mode 100644 index 00000000..26de9969 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/04_ha/step2_test_sql.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT @@version" diff --git a/SQLonOpenShift/sqlonopenshift/04_ha/step3_pod_failure.sh b/SQLonOpenShift/sqlonopenshift/04_ha/step3_pod_failure.sh new file mode 100644 index 00000000..b9e885cd --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/04_ha/step3_pod_failure.sh @@ -0,0 +1 @@ +oc delete pod -l app=mssql diff --git a/SQLonOpenShift/sqlonopenshift/04_ha/step4_find_people.sh b/SQLonOpenShift/sqlonopenshift/04_ha/step4_find_people.sh new file mode 100644 index 00000000..aa91c162 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/04_ha/step4_find_people.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep mssql-service | awk {'print $4'}) +PORT=31433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"USE WideWorldImporters;SELECT TOP 10 FullName, PhoneNumber, EmailAddress FROM [Application].[People] ORDER BY FullName;" -Y30 \ No newline at end of file diff --git a/SQLonOpenShift/sqlonopenshift/04_ha/step5_update_sql.sh b/SQLonOpenShift/sqlonopenshift/04_ha/step5_update_sql.sh new file mode 100644 index 00000000..3a12d833 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/04_ha/step5_update_sql.sh @@ -0,0 +1 @@ +oc --record deployment set image mssql-deployment mssql=mcr.microsoft.com/mssql/rhel/server:2019-CTP2.3 diff --git a/SQLonOpenShift/sqlonopenshift/04_ha/step6_cleanup.sh b/SQLonOpenShift/sqlonopenshift/04_ha/step6_cleanup.sh new file mode 100644 index 00000000..ff499978 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/04_ha/step6_cleanup.sh @@ -0,0 +1,2 @@ +oc delete project mssql +oc project default diff --git a/SQLonOpenShift/sqlonopenshift/05_Operator.md b/SQLonOpenShift/sqlonopenshift/05_Operator.md new file mode 100644 index 00000000..6d57a3ff --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_Operator.md @@ -0,0 +1,385 @@ +![](../graphics/microsoftlogo.png) + +# Workshop: SQL Server on OpenShift + +#### A Microsoft workshop from the SQL Server team + +

+ +

Using an Operator with SQL Server on OpenShift

+ +You'll cover the following topics in this Module: + +
+ +
5.0 Deploy an Always On Availability Group on OpenShift with an operator
+
5.1 Connect and Query a database in an Availability Group
+
5.2 Testing a failover of the Availability Group
+ +
+ +

+ +

5.0 Deploy an Always On Availability Group on OpenShift with an operator

+ +In this module you will learn more about what, how, and why you would deploy an Operator that assists in deployment and management of an Always On Availability Group. + +You learned in Module 04 the built-in capabilities of OpenShift to detect the health of the SQL Server container, pod, or node to provide High Availability. + +There are a few limitations with these capabilities: + +- OpenShift doesn't understand the health of the SQL Server engine +- There is only one SQL Server instance so any restart of SQL Server within the container, in a new pod, or a new node could result in several minutes of downtime. + +Always On Availability Groups is the flagship HADR feature for SQL Server. It provides the fastest uptime capabilities using multiple SQL Server instances called *replicas*. You can read more about Always On Availability Groups at https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server + +Installing and configuring an Always On Availability Group can take some time and involve many steps, especially when you need to configure a failover software package (such as Pacemaker) to help support automated failover capabilities. You can read more about Always On Availability Groups on Linux at https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-overview + +In Module 04 your learned OpenShift has built-in high availability capabilities. SQL Server 2019 provides the necessary software to cooperate with OpenShift to provide high availability with Always On Availability Groups. In addition, SQL Server 2019 provides an *Operator* to assist in deployment of the Always On Availability Group and coordinate failover activities. This is non-shared storage solujtion as each SQL Server replic has its own storage. Combined with LoadBalancer services, this provides a complete High Availability solution with less downtime and read capabilities on secondary replicas. The following diagram shows a visual of this design + +![AG on OpenShift](../graphics/AG_on_OpenShift.jpg) + +Proceed to the Activity to learn how to use an Operator to deploy and configure an Availability Group on OpenShift. + +

+ +

Activity: Deploy an Always On Availability Group on OpenShift with an operator

+ +Follow these steps to deploy an Always On Availability Group on OpenShift using an operator. + +1. Open a shell prompt and change directories to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/05_operator** folder. + +2. First, create a project for this activity. Use the following command or execute the **step1_create_project.sh** script: + + `oc new-project ag1` + + When this completes, you should see output like the following + +
Now using project "ag1" on server "https://masterdnsx5rquio6c54pu.eastus.cloudapp.azure.com:443".
+
+   You can add applications to this project with the 'new-app' command. For example, try:
+
+   oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
+
+   to build a new example application in Ruby.
+ +3. Create the SQL Server operator by executing the following command or execute the **step2_apply_operator.sh** script: + + `oc apply -f operator.yaml --namespace ag1` + + When this completes, you should see output like the following + +
Warning: oc apply should be used on resource created by either oc create --save-config or oc apply
+   namespace/ag1 configured
+   serviceaccount/mssql-operator created
+   clusterrole.rbac.authorization.k8s.io/mssql-operator-ag1 configured
+   clusterrolebinding.rbac.authorization.k8s.io/mssql-operator-ag1 configured
+   deployment.apps/mssql-operator created
+ + You can ignore the Warning. To ensure the operator was deployed successfully, run the following command + + `oc get pods` + + The STATUS of the mssql-operator should be **Running**. Don't proceed to the next step until the pod is running. + +4. Next, create a secret for the system administrator (sa) password and a password for the master key using the following command or the script **step3_generate_secret.sh** + + `oc create secret generic sql-secrets --from-literal=sapassword="Sql2019isfast" --from-literal=masterkeypassword="Sql2019isfast" --namespace ag1` + + When this completes, you should see output like the following + +
secret/sql-secrets created
+ +5. Using the **sqlserver.yaml** file you will deploy the SQL Server instances for a primary and two secondary replicas. This will coordinate with the deployed operator to install a SQL Server Always On Availability Group configuration. No database will be deployed. That will be done in the next section of this Module. Run the following command or use the script **step4_apply_sqlserver.sh** + + `oc apply -f sqlserver.yaml --namespace ag1` + + When this completes, you should see the following + +
sqlserver.mssql.microsoft.com/mssql1 created
+   service/mssql1 created
+   sqlserver.mssql.microsoft.com/mssql2 created
+   service/mssql2 created
+   sqlserver.mssql.microsoft.com/mssql3 created
+   service/mssql3 created
+ + To proceed to the rest of the activity, you need to ensure the deployment of all pods and LoadBalancer services are successful. The deployment could take several minutes. Execute the following command + + `oc get all` + + When the deployment is successful, these pods should be in a STATUS of Running + +
pod/mssql1-0                          2/2       Running     0          4m
+   pod/mssql2-0                          2/2       Running     0          4m
+   pod/mssql3-0                          2/2       Running     0          4m
+ + And these LoadBalancer services should have a valid EXTERNAL-IP address like the following: + +
service/mssql1   LoadBalancer   172.30.217.34   23.96.27.207   1433:32145/TCP      4m
+   service/mssql2   LoadBalancer   172.30.242.37   23.96.58.167   1433:31976/TCP      4m
+   service/mssql3   LoadBalancer   172.30.6.212    23.96.53.245   1433:30611/TCP      4m
+ + Run the `oc get all` command until the pods and LoadBalancer services are in this state. + + Note: You will see some pods taht start with a name of mssql-initialize. You can ignore these. They are used to deploy the SQL Server Availability Group but may not be needed in the final design of the operator. + + In addition, notice that there are three objects from the oc get all output that look like this + +
NAME                      DESIRED   CURRENT   AGE
+   statefulset.apps/mssql1   1         1         43s
+   statefulset.apps/mssql2   1         1         40s
+   statefulset.apps/mssql3   1         1         37s
+ + As part of the design for SQL Server Availability groups, a concept called a *statefulset* is used. A stateful set provides the capabilities to manage a set of pods that belong in a group like Availability Groups. You can read more about StatefulSets at https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/. + +6. Even though each SQL Server pod has a LoadBalancer service, you need to create a LoadBalancer service that will always point to the primary replica and a LoadBalancer service that will point to any secondary replicas. Execute the following command or the script **step5_apply_agservices.sh** + + `oc apply -f ag_services.yaml --namespace ag1` + + When this completes, you should see the following + +
service/ag1-primary created
+   service/ag1-secondary created
+ + Use the following command to check the status of these services. Wait until each of these services has a valid IP address for EXTERNAL-IP before proceeding to the next step. This could take several minutes + + `oc get service` + + At this point, a SQL Server installation is complete with a Always On Availability enabled and created for use. In the next module, you will learn how to add a database to the availability group, add data, and then query both the primary and secondary replicas. + +

+ +

5.1 Connect and Query a database in an Availability Group

+ +In this section, you will learn how to connect, add databases, add data, and query data to replicas in an Always On Availability Group deployed in OpenShift. + +Once you have an Always On Availability Group deployed on OpenShift, you will want to add a database to the group, add some data, and see the changes reflected in secondary replicas. + +SQL Server provides T-SQL statements, such as `ALTER AVAILABILITY GROUP`, to interact and manage the Availability Group including adding one more databases. An Availability Group can have one more or databases and is the unit of failover. + +Once you have added your database to the availability group, you will create a database backup, which will initiate a concept called *direct seeding*. This process will send data to the secondary replicas making them in *sync*. You can now connect to the primary replica SQL Server and interact with it like any SQL Server database. You can also connect to the secondary replica(s) with a special connection option to read data. This allows you to offload read users (e.g. reporting users) from your primary SQL Server. + +Proceed to the activity to see how this works. + +

+ +

Activity: Connect and Query a database in an Availability Group

+ +Follow the steps in his activity to connect, add databases, add data, and query data to replicas in an availability group deployed in OpenShift. + +1. Open a shell prompt and change directories to the **sqlworkshops/SQLonOpenShift/sqlonopenshift/05_operator** folder. + +2. T-SQL provides capabilities so you can see which SQL Servers instances are currently the primary vs secondary replica. + + An example of a T-SQL command to see replica status looks like the following + + + ```sql + SELECT ar.replica_server_name, hars.role_desc, hars.operational_state_desc + FROM sys.dm_hadr_availability_replica_states hars + JOIN sys.availability_replicas ar + ON hars.replica_id = ar.replica_id + GO + ``` + Run the following command or execute the script **step6_check_replicas.sh** to see the replica status of the Availability Group deployed + + `SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'})`
+ `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -icheckreplicas.sql -Y30` + + In this example, you are using the LoadBalancer directed to the primary replica. Your results should look like the following + +
replica_server_name            role_desc                      operational_state_desc
+   ------------------------------ ------------------------------ ------------------------------
+   mssql1-0                       PRIMARY                        ONLINE
+   mssql2-0                       SECONDARY                      NULL
+   mssql3-0                       SECONDARY                      NULL
+ + It is possible that the replica_server_name for your deployment is any of these replicas. In most cases, it will be mssql1-0. You will use this same command later to see that the status of the Availability Group is after a failover. + +3. Now it is time to create a new database, backup the database, and then add the database to the Availability Group. Examine the contents of the script **setupag.sql** to see the T-SQL commands. Run the following command or script **step7_setupag.sh** + + `SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'})`
+ `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -isetupag.sql` + + You should see results like the following + +
Changed database context to 'master'.
+   Changed database context to 'master'.
+   Processed 328 pages for database 'testag', file 'testag' on file 1.
+   Processed 2 pages for database 'testag', file 'testag_log' on file 1.
+   BACKUP DATABASE successfully processed 330 pages in 1.239 seconds (2.077 MB/sec).
+ + Direct seeding should happen almost instantly because there is no user database in the database. + +4. It's time to create a table in the database and add in data connected to the primary replica SQL Server. SQL Server will automatically send changes to secondary replicas. + + Examine the T-SQL script **testag.sql** to see the table and data that will be added. Run the following commands or execute the script **step8_testag.sh** + + `SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'})`
+ `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -itestag.sql` + + Your results should look the following + +
Changed database context to 'testag'.
+   (1 rows affected)
+ +5. Now you want to query the primary replica to see your data but also query secondary replicas to see if the changes were synchronized and also learn how to run read-only queries against secondary replicas, one of the benefits of using Availability Groups. + + In order to do this, you need to know the LoadBalancer of the primary replica and secondary replica. So far, you have been using scripts to connect to the primary replica. You created in the previous section a LoadBalancer for the secondary replicas. But, since there are two secondary replicas, which one will be chosen?. That is the benefit of the LoadBalancer service. You can have multiple users connect to the secondary replica LoadBalancer and these connections will be balanced across available replicas. + + Consider the following T-SQL script you will use to query the data and to determine which SQL Server you are connected to + + `SELECT 'Connected to Primary = '+@@SERVERNAME;USE testag;SELECT * FROM ilovesql` + + In this example, you will use the -Q option of sqlcmd to run a query directly without a script file. The use of the ";" serves as a batch delimiter much like the keyword GO. In example, the built-in T-SQL function @@SERVERNAME indicates what SQL Server host the query is running on and the remaining queries select the data you have inserted. This way even though you are connected to the LoadBalancer you can see which exact replica you are being redirected to. + + Execute the following commands or the script **step9_queryag.sh** to see the results + + `SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'})`
+ `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT 'Connected to Primary = '+@@SERVERNAME;USE testag;SELECT * FROM ilovesql" -Y60`
+ `SERVERIP=$(oc get service | grep ag1-secondary | awk {'print $4'})` + `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT 'Connected to Secondary = '+@@SERVERNAME;USE testag;SELECT * FROM ilovesql" -K ReadOnly -Y60` + + The first set of commands connect to the primary replica LoadBalancer. The second set of commands to the secondary replica LoadBalancer. In the case of the secondary replica, the -K option is used to state the intention of only reading data. This is required to query a secondary replica. You can read more about how applications specify ReadOnly intent at https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/listeners-client-connectivity-application-failover?view=sql-server-2017#ReadOnlyAppIntent. + + Your results should look like the following (your server names may be different depending on how the primary was elected when the Availability Group was deployed) + +
------------------------------------------------------------
+   Connected to Primary = mssql1-0
+   (1 rows affected)
+   Changed database context to 'testag'.
+   col1        col2
+   ----------- ------------------------------------------------------------
+        1 SQL Server 2019 is fast, secure, and highly available
+   (1 rows affected)
+ +
------------------------------------------------------------
+   Connected to Secondary = mssql2-0
+   (1 rows affected)
+   Changed database context to 'testag'.
+   col1        col2
+   ----------- ------------------------------------------------------------
+         1 SQL Server 2019 is fast, secure, and highly available
+   (1 rows affected)
+ +Now that you have successfully created a database, added it to the Availability Group, and synchronized data, you an proceed to the next section to test how a failover works. + + + +

+ +

5.2 Testing a failover of the Availability Group

+ +In this section, you will learn how to simulate a failover of SQL Server in an Availability Group deployed on OpenShift. + +Since Availability Groups provide high availability and lower downtime due to its non-shared storage replica design, it is important to see a failover in action to understand the application experience. + +In previous sections of this module, you deployed an Availability Group using an operator. The operator also coordinates with *agents* in containers running in the same pod as the SQL Server replicas to detect failover conditions and if necessary trigger a failover. A failover will cause one of the synchronized secondary replicas to shift roles as a new primary replica. The previous primary replica, once it is healthy, can be synchronized and become a secondary replica. + +Proceed to the Activity to simulate a failover and test a new primary replica is active. + +

+ +

Activity: Testing a failover of the Availability Group

+ +Follow the steps in his activity to simulate a failover and see how a new secondary replica has switched roles to become a primary, resulting in almost no downtime to the application. + +1. From the last step in the previous section activity, the primary and secondary replicas were synchronized. Verify the replica state by running the following commands or the script **step6_check_replicas.sh** + + `SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'})`
+ `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -icheckreplicas.sql -Y30` + + Your results should look like the following + +
replica_server_name            role_desc                      operational_state_desc
+   ------------------------------ ------------------------------ ------------------------------
+   mssql1-0                       PRIMARY                        ONLINE
+   mssql2-0                       SECONDARY                      NULL
+   mssql3-0                       SECONDARY                      NULL
+ + 2. If in your results, if the replica_server_name is mssql2-0 for the PRIMARY, you will need to edit the **failover.yaml** file. If not, you can skip to step 3. + + The **failover.yaml** file declares how to manually trigger a failover to another replica but is setup so you must specify which replica to target as the new primary. The workshop was built so that mssql2-0 would be the new primary. In some rare cases, mssql2-0 might have been chosen as the original primary. If this is the case, you need to edit this part of the failover.yaml file and change the name mssql2-0 to mssql3-0 + +
- {name: MSSQL_K8S_AG_NAME, value: ag1}
+    - {name: MSSQL_K8S_NEW_PRIMARY, value: mssql2-0}
+ + Once you have edited and saved the changes, proceed to step 3. + +3. To manually trigger the failover, apply the failover.yaml file which will submit a *job* to trigger the change for a failover. Run the following command or the script **step10_failover.sh** + + `oc apply -f failover.yaml` + + You should see results like the following + +
serviceaccount/manual-failover created
+   role.rbac.authorization.k8s.io/manual-failover created
+   rolebinding.rbac.authorization.k8s.io/manual-failover created
+   job.batch/manual-failover created
+ +4. The failover should happen fairly quickly. You can run the following commands or script **step6_check_replicas.sh** to verify the new PRIMARY switch has occurred + + `SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'})`
+ `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -icheckreplicas.sql -Y30` + + Your results should show a new PRIMARY like the following + +
replica_server_name            role_desc                      operational_state_desc
+   ------------------------------ ------------------------------ ------------------------------
+   mssql1-0                       SECONDARY                      NULL
+   mssql2-0                       PRIMARY                        ONLINE
+   mssql3-0                       SECONDARY                      NULL
+   (3 rows affected)
+ +5. Now run the following commands or use the script **step9_queryag.sh** to see your data is still synchronized and by using the LoadBalancers the application has not changed even though you are connected to a new primary and secondary + + `SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'})`
+ `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT 'Connected to Primary = '+@@SERVERNAME;USE testag;SELECT * FROM ilovesql" -Y60`
+ `SERVERIP=$(oc get service | grep ag1-secondary | awk {'print $4'})` + `PORT=1433`
+ `sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT 'Connected to Secondary = '+@@SERVERNAME;USE testag;SELECT * FROM ilovesql" -K ReadOnly -Y60` + + Your results should look similar to the time you ran this query from the previous section activity except the server names should be different and reflect the new primary and secondary replicas. + +
------------------------------------------------------------
+   Connected to Primary = mssql2-0
+   (1 rows affected)
+   Changed database context to 'testag'.
+   col1        col2
+   ----------- ------------------------------------------------------------
+        1 SQL Server 2019 is fast, secure, and highly available
+   (1 rows affected)
+ +
------------------------------------------------------------
+   Connected to Secondary = mssql1-0
+   (1 rows affected)
+   Changed database context to 'testag'.
+   col1        col2
+   ----------- ------------------------------------------------------------
+         1 SQL Server 2019 is fast, secure, and highly available
+   (1 rows affected)
+ +In this activity, you have simulated a failover for your deployed Availability Group and seen your data is still consistent, intact, and your application has connected with no changes and almost no downtime. + +

+ + + +

For Further Study

+ +This is the final module of the workshop. For further study on the topics in this module, see the following + +- [Overview of SQL Server Always On Availability Groups](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server) +- [Always On Availability Groups for SQL Server Containers](https://docs.microsoft.com/en-us/sql/linux/sql-server-ag-kubernetes?view=sqlallproducts-allversions) +- [Introducing the Operator Framework](https://blog.openshift.com/introducing-the-operator-framework/) + +

+ diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/ag_services.yaml b/SQLonOpenShift/sqlonopenshift/05_operator/ag_services.yaml new file mode 100644 index 00000000..6f92eb2b --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/ag_services.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: {annotations: null, name: ag1-primary, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433, targetPort: 1433} + selector: {role.ag.mssql.microsoft.com/ag1: primary, type: sqlservr} + type: LoadBalancer +--- +apiVersion: v1 +kind: Service +metadata: {annotations: null, name: ag1-secondary, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433} + selector: {role.ag.mssql.microsoft.com/ag1: secondary, + type: sqlservr} + type: LoadBalancer +--- diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/checkreplicas.sql b/SQLonOpenShift/sqlonopenshift/05_operator/checkreplicas.sql new file mode 100644 index 00000000..5ded6a23 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/checkreplicas.sql @@ -0,0 +1,6 @@ +SELECT ar.replica_server_name, hars.role_desc, hars.operational_state_desc +FROM sys.dm_hadr_availability_replica_states hars +JOIN sys.availability_replicas ar +ON hars.replica_id = ar.replica_id +GO + diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/failover.yaml b/SQLonOpenShift/sqlonopenshift/05_operator/failover.yaml new file mode 100644 index 00000000..1adfd7d2 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/failover.yaml @@ -0,0 +1,46 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: {name: manual-failover, namespace: ag1} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: {name: manual-failover, namespace: ag1} +rules: +- apiGroups: [''] + resourceNames: [ag1] + resources: [configmaps] + verbs: [get, update] +- apiGroups: [''] + resourceNames: [ag1] + resources: [endpoints] + verbs: [get] +- apiGroups: [''] + resources: [pods] + verbs: [list] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: {name: manual-failover, namespace: ag1} +roleRef: {apiGroup: rbac.authorization.k8s.io, kind: Role, name: manual-failover} +subjects: +- {kind: ServiceAccount, name: manual-failover} +--- +apiVersion: batch/v1 +kind: Job +metadata: {name: manual-failover, namespace: ag1} +spec: + template: + metadata: {name: manual-failover} + spec: + containers: + - command: [/mssql-server-k8s-failover] + env: + - {name: MSSQL_K8S_AG_NAME, value: ag1} + - {name: MSSQL_K8S_NEW_PRIMARY, value: mssql2-0} + - name: MSSQL_K8S_NAMESPACE + valueFrom: + fieldRef: {fieldPath: metadata.namespace} + image: tigervin/ospvin + name: manual-failover + restartPolicy: Never + serviceAccount: manual-failover diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/failover.yaml.ubuntu b/SQLonOpenShift/sqlonopenshift/05_operator/failover.yaml.ubuntu new file mode 100644 index 00000000..73d45086 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/failover.yaml.ubuntu @@ -0,0 +1,46 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: {name: manual-failover, namespace: ag1} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: {name: manual-failover, namespace: ag1} +rules: +- apiGroups: [''] + resourceNames: [ag1] + resources: [configmaps] + verbs: [get, update] +- apiGroups: [''] + resourceNames: [ag1] + resources: [endpoints] + verbs: [get] +- apiGroups: [''] + resources: [pods] + verbs: [list] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: {name: manual-failover, namespace: ag1} +roleRef: {apiGroup: rbac.authorization.k8s.io, kind: Role, name: manual-failover} +subjects: +- {kind: ServiceAccount, name: manual-failover} +--- +apiVersion: batch/v1 +kind: Job +metadata: {name: manual-failover, namespace: ag1} +spec: + template: + metadata: {name: manual-failover} + spec: + containers: + - command: [/mssql-server-k8s-failover] + env: + - {name: MSSQL_K8S_AG_NAME, value: ag1} + - {name: MSSQL_K8S_NEW_PRIMARY, value: } + - name: MSSQL_K8S_NAMESPACE + valueFrom: + fieldRef: {fieldPath: metadata.namespace} + image: mcr.microsoft.com/mssql/ha:2019-CTP2.1-ubuntu + name: manual-failover + restartPolicy: Never + serviceAccount: manual-failover diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/operator.yaml b/SQLonOpenShift/sqlonopenshift/05_operator/operator.yaml new file mode 100644 index 00000000..76699c42 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/operator.yaml @@ -0,0 +1,70 @@ +apiVersion: v1 +kind: Namespace +metadata: {name: ag1} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: {name: mssql-operator, namespace: ag1} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: {name: mssql-operator-ag1} +rules: +- apiGroups: [''] + resources: [serviceaccounts, services] + verbs: [create, get, update, delete] +- apiGroups: [batch] + resources: [jobs] + verbs: [create, get, update, delete] +- apiGroups: [rbac.authorization.k8s.io] + resources: [roles, rolebindings] + verbs: [create, get, update, delete] +- apiGroups: [apps] + resources: [statefulsets] + verbs: [create, delete, get, update] +- apiGroups: [''] + resources: [configmaps, endpoints, secrets] + verbs: [create, get, update, watch, delete] +- apiGroups: [''] + resources: [pods] + verbs: [get, list, update] +- apiGroups: [apiextensions.k8s.io] + resources: [customresourcedefinitions] + verbs: [create] +- apiGroups: [apiextensions.k8s.io] + resourceNames: [sqlservers.mssql.microsoft.com] + resources: [customresourcedefinitions] + verbs: [delete, get, update] +- apiGroups: [mssql.microsoft.com] + resources: [sqlservers] + verbs: [get, list, watch] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: {name: mssql-operator-ag1} +roleRef: {apiGroup: rbac.authorization.k8s.io, kind: ClusterRole, name: mssql-operator-ag1} +subjects: +- {kind: ServiceAccount, name: mssql-operator, namespace: ag1} +--- +apiVersion: apps/v1beta2 +kind: Deployment +metadata: {name: mssql-operator, namespace: ag1} +spec: + replicas: 1 + selector: + matchLabels: {app: mssql-operator} + template: + metadata: + labels: {app: mssql-operator} + spec: + containers: + - command: [/mssql-server-k8s-operator] + env: + - name: MSSQL_K8S_NAMESPACE + valueFrom: + fieldRef: {fieldPath: metadata.namespace} + image: tigervin/ospvin + name: mssql-operator + serviceAccount: mssql-operator + imagePullSecrets: + - name: vin-acr-cred diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/operator.yaml.ubuntu b/SQLonOpenShift/sqlonopenshift/05_operator/operator.yaml.ubuntu new file mode 100644 index 00000000..e7268fbf --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/operator.yaml.ubuntu @@ -0,0 +1,68 @@ +apiVersion: v1 +kind: Namespace +metadata: {name: ag1} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: {name: mssql-operator, namespace: ag1} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: {name: mssql-operator-ag1} +rules: +- apiGroups: [''] + resources: [serviceaccounts, services] + verbs: [create, get, update, delete] +- apiGroups: [batch] + resources: [jobs] + verbs: [create, get, update, delete] +- apiGroups: [rbac.authorization.k8s.io] + resources: [roles, rolebindings] + verbs: [create, get, update, delete] +- apiGroups: [apps] + resources: [statefulsets] + verbs: [create, delete, get, update] +- apiGroups: [''] + resources: [configmaps, endpoints, secrets] + verbs: [create, get, update, watch, delete] +- apiGroups: [''] + resources: [pods] + verbs: [get, list, update] +- apiGroups: [apiextensions.k8s.io] + resources: [customresourcedefinitions] + verbs: [create] +- apiGroups: [apiextensions.k8s.io] + resourceNames: [sqlservers.mssql.microsoft.com] + resources: [customresourcedefinitions] + verbs: [delete, get, update] +- apiGroups: [mssql.microsoft.com] + resources: [sqlservers] + verbs: [get, list, watch] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: {name: mssql-operator-ag1} +roleRef: {apiGroup: rbac.authorization.k8s.io, kind: ClusterRole, name: mssql-operator-ag1} +subjects: +- {kind: ServiceAccount, name: mssql-operator, namespace: ag1} +--- +apiVersion: apps/v1beta2 +kind: Deployment +metadata: {name: mssql-operator, namespace: ag1} +spec: + replicas: 1 + selector: + matchLabels: {app: mssql-operator} + template: + metadata: + labels: {app: mssql-operator} + spec: + containers: + - command: [/mssql-server-k8s-operator] + env: + - name: MSSQL_K8S_NAMESPACE + valueFrom: + fieldRef: {fieldPath: metadata.namespace} + image: mcr.microsoft.com/mssql/ha:2019-CTP2.1-ubuntu + name: mssql-operator + serviceAccount: mssql-operator diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/setupag.sql b/SQLonOpenShift/sqlonopenshift/05_operator/setupag.sql new file mode 100644 index 00000000..a03e8901 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/setupag.sql @@ -0,0 +1,11 @@ +USE master +GO +CREATE DATABASE testag +GO +USE MASTER +GO +BACKUP DATABASE [testag] +TO DISK = N'/var/opt/mssql/data/testag.bak' +GO +ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [testag] +GO diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/sqlserver.yaml b/SQLonOpenShift/sqlonopenshift/05_operator/sqlserver.yaml new file mode 100644 index 00000000..6e1b9498 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/sqlserver.yaml @@ -0,0 +1,86 @@ +apiVersion: mssql.microsoft.com/v1 +kind: SqlServer +metadata: + labels: {name: mssql1, type: sqlservr} + name: mssql1 + namespace: ag1 +spec: + skipAgAntiAffinity: true + acceptEula: true + agentsContainerImage: tigervin/ospvin + availabilityGroups: [ag1] + instanceRootVolumeClaimTemplate: + accessModes: [ReadWriteOnce] + resources: + requests: {storage: 5Gi} + storageClass: default + saPassword: + secretKeyRef: {key: sapassword, name: sql-secrets} + sqlServerContainer: {image: 'mcr.microsoft.com/mssql/rhel/server:2019-CTP2.4'} +--- +apiVersion: v1 +kind: Service +metadata: {name: mssql1, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433} + selector: {name: mssql1, type: sqlservr} + type: LoadBalancer +--- +apiVersion: mssql.microsoft.com/v1 +kind: SqlServer +metadata: + labels: {name: mssql2, type: sqlservr} + name: mssql2 + namespace: ag1 +spec: + skipAgAntiAffinity: true + agentsContainerImage: tigervin/ospvin + acceptEula: true + availabilityGroups: [ag1] + instanceRootVolumeClaimTemplate: + accessModes: [ReadWriteOnce] + resources: + requests: {storage: 5Gi} + storageClass: default + saPassword: + secretKeyRef: {key: sapassword, name: sql-secrets} + sqlServerContainer: {image: 'mcr.microsoft.com/mssql/rhel/server:2019-CTP2.4'} +--- +apiVersion: v1 +kind: Service +metadata: {name: mssql2, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433} + selector: {name: mssql2, type: sqlservr} + type: LoadBalancer +--- +apiVersion: mssql.microsoft.com/v1 +kind: SqlServer +metadata: + labels: {name: mssql3, type: sqlservr} + name: mssql3 + namespace: ag1 +spec: + skipAgAntiAffinity: true + agentsContainerImage: tigervin/ospvin + acceptEula: true + availabilityGroups: [ag1] + instanceRootVolumeClaimTemplate: + accessModes: [ReadWriteOnce] + resources: + requests: {storage: 5Gi} + storageClass: default + saPassword: + secretKeyRef: {key: sapassword, name: sql-secrets} + sqlServerContainer: {image: 'mcr.microsoft.com/mssql/rhel/server:2019-CTP2.4'} +--- +apiVersion: v1 +kind: Service +metadata: {name: mssql3, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433} + selector: {name: mssql3, type: sqlservr} + type: LoadBalancer diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/sqlserver.yaml.ubuntu b/SQLonOpenShift/sqlonopenshift/05_operator/sqlserver.yaml.ubuntu new file mode 100644 index 00000000..59a109d7 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/sqlserver.yaml.ubuntu @@ -0,0 +1,86 @@ +apiVersion: mssql.microsoft.com/v1 +kind: SqlServer +metadata: + labels: {name: mssql1, type: sqlservr} + name: mssql1 + namespace: ag1 +spec: + skipAgAntiAffinity: true + acceptEula: true + agentsContainerImage: mcr.microsoft.com/mssql/ha:2019-CTP2.1-ubuntu + availabilityGroups: [ag1] + instanceRootVolumeClaimTemplate: + accessModes: [ReadWriteOnce] + resources: + requests: {storage: 5Gi} + storageClass: default + saPassword: + secretKeyRef: {key: sapassword, name: sql-secrets} + sqlServerContainer: {image: 'mcr.microsoft.com/mssql/server:2019-CTP2.1-ubuntu'} +--- +apiVersion: v1 +kind: Service +metadata: {name: mssql1, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433} + selector: {name: mssql1, type: sqlservr} + type: LoadBalancer +--- +apiVersion: mssql.microsoft.com/v1 +kind: SqlServer +metadata: + labels: {name: mssql2, type: sqlservr} + name: mssql2 + namespace: ag1 +spec: + skipAgAntiAffinity: true + acceptEula: true + agentsContainerImage: mcr.microsoft.com/mssql/ha:2019-CTP2.1-ubuntu + availabilityGroups: [ag1] + instanceRootVolumeClaimTemplate: + accessModes: [ReadWriteOnce] + resources: + requests: {storage: 5Gi} + storageClass: default + saPassword: + secretKeyRef: {key: sapassword, name: sql-secrets} + sqlServerContainer: {image: 'mcr.microsoft.com/mssql/server:2019-CTP2.1-ubuntu'} +--- +apiVersion: v1 +kind: Service +metadata: {name: mssql2, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433} + selector: {name: mssql2, type: sqlservr} + type: LoadBalancer +--- +apiVersion: mssql.microsoft.com/v1 +kind: SqlServer +metadata: + labels: {name: mssql3, type: sqlservr} + name: mssql3 + namespace: ag1 +spec: + skipAgAntiAffinity: true + acceptEula: true + agentsContainerImage: mcr.microsoft.com/mssql/ha:2019-CTP2.1-ubuntu + availabilityGroups: [ag1] + instanceRootVolumeClaimTemplate: + accessModes: [ReadWriteOnce] + resources: + requests: {storage: 5Gi} + storageClass: default + saPassword: + secretKeyRef: {key: sapassword, name: sql-secrets} + sqlServerContainer: {image: 'mcr.microsoft.com/mssql/server:2019-CTP2.1-ubuntu'} +--- +apiVersion: v1 +kind: Service +metadata: {name: mssql3, namespace: ag1} +spec: + ports: + - {name: tds, port: 1433} + selector: {name: mssql3, type: sqlservr} + type: LoadBalancer diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step10_failover.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step10_failover.sh new file mode 100644 index 00000000..35874538 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step10_failover.sh @@ -0,0 +1 @@ +oc apply -f failover.yaml diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step11_cleanup.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step11_cleanup.sh new file mode 100644 index 00000000..eea3ff7c --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step11_cleanup.sh @@ -0,0 +1,2 @@ +oc delete project ag1 +oc project default diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step1_create_project.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step1_create_project.sh new file mode 100644 index 00000000..ddb1480d --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step1_create_project.sh @@ -0,0 +1 @@ +oc new-project ag1 diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step2_apply_operator.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step2_apply_operator.sh new file mode 100644 index 00000000..636ff822 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step2_apply_operator.sh @@ -0,0 +1 @@ +oc apply -f operator.yaml --namespace ag1 diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step3_generate_secret.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step3_generate_secret.sh new file mode 100644 index 00000000..fc97d7e7 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step3_generate_secret.sh @@ -0,0 +1 @@ +oc create secret generic sql-secrets --from-literal=sapassword="Sql2019isfast" --from-literal=masterkeypassword="Sql2019isfast" --namespace ag1 diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step4_apply_sqlserver.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step4_apply_sqlserver.sh new file mode 100644 index 00000000..004efd4e --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step4_apply_sqlserver.sh @@ -0,0 +1 @@ +oc apply -f sqlserver.yaml --namespace ag1 diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step5_apply_agservices.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step5_apply_agservices.sh new file mode 100644 index 00000000..863b6952 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step5_apply_agservices.sh @@ -0,0 +1 @@ +oc apply -f ag_services.yaml --namespace ag1 diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step6_check_replicas.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step6_check_replicas.sh new file mode 100644 index 00000000..e7964862 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step6_check_replicas.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'}) +PORT=1433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -icheckreplicas.sql -Y30 diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step7_setupag.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step7_setupag.sh new file mode 100644 index 00000000..e0bd2d84 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step7_setupag.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'}) +PORT=1433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -isetupag.sql diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step8_testag.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step8_testag.sh new file mode 100644 index 00000000..a6437e31 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step8_testag.sh @@ -0,0 +1,3 @@ +SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'}) +PORT=1433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -itestag.sql diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/step9_queryag.sh b/SQLonOpenShift/sqlonopenshift/05_operator/step9_queryag.sh new file mode 100644 index 00000000..b6980f61 --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/step9_queryag.sh @@ -0,0 +1,6 @@ +SERVERIP=$(oc get service | grep ag1-primary | awk {'print $4'}) +PORT=1433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT 'Connected to Primary = '+@@SERVERNAME;USE testag;SELECT * FROM ilovesql" -Y60 +SERVERIP=$(oc get service | grep ag1-secondary | awk {'print $4'}) +PORT=1433 +sqlcmd -Usa -PSql2019isfast -S$SERVERIP,$PORT -Q"SELECT 'Connected to Secondary = '+@@SERVERNAME;USE testag;SELECT * FROM ilovesql" -K ReadOnly -Y60 diff --git a/SQLonOpenShift/sqlonopenshift/05_operator/testag.sql b/SQLonOpenShift/sqlonopenshift/05_operator/testag.sql new file mode 100644 index 00000000..9aaf1a4d --- /dev/null +++ b/SQLonOpenShift/sqlonopenshift/05_operator/testag.sql @@ -0,0 +1,6 @@ +USE testag +GO +CREATE TABLE ilovesql (col1 INT, col2 VARCHAR(500) NULL) +GO +INSERT INTO ilovesql VALUES (1, 'SQL Server 2019 is fast, secure, and highly available') +GO diff --git a/graphics/paperclip1.png b/graphics/paperclip1.png deleted file mode 100644 index af070f4b..00000000 Binary files a/graphics/paperclip1.png and /dev/null differ diff --git a/sqlserver2019bigdataclusters/README.md b/sqlserver2019bigdataclusters/README.md index 97ec5bd6..789bb8ea 100644 --- a/sqlserver2019bigdataclusters/README.md +++ b/sqlserver2019bigdataclusters/README.md @@ -1,6 +1,6 @@ ![](graphics/microsoftlogo.png) -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) #### A Microsoft Course from the SQL Server team @@ -83,7 +83,7 @@ The solution includes the following technologies - although you are not limited Azure Kubernetes Service (AKS)Kubernetes as a Service Apache HDFSScale-out storage subsystem Apache KnoxThe Knox Gateway provides a single access point for all REST interactions, used for security - Apache LivyTob submission system for Apache Spark + Apache LivyJob submission system for Apache Spark Apache SparkIn-memory large-scale, scale-out data processing architecture used by SQL Server Python, R, Java, SparkMLML/AI programming languages used for Machine Learning and AI Model creation Azure Data StudioTooling for SQL Server, HDFS, Kubernetes cluster management, T-SQL, R, Python, and SparkML languages diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/00 - Prerequisites.md b/sqlserver2019bigdataclusters/SQL2019BDC/00 - Prerequisites.md index 0090161f..e6239fb0 100644 --- a/sqlserver2019bigdataclusters/SQL2019BDC/00 - Prerequisites.md +++ b/sqlserver2019bigdataclusters/SQL2019BDC/00 - Prerequisites.md @@ -1,6 +1,6 @@ ![](../graphics/microsoftlogo.png) -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) #### A Microsoft Course from the SQL Server team @@ -89,7 +89,7 @@ Get-WindowsUpdate Install-WindowsUpdate -*Note: If you get an error during this update process, evaluate it to see if it is fatal. You may receive certain driver errors if you are using a Virtual Machine, this can be safely ignored.* +*Note: If you get an error during this update process, evaluate it to see if it is fatal. You may recieve certain driver errors if you are using a Virtual Machine, this can be safely ignored.*

Install Chocolatey Windows package Manager

@@ -109,7 +109,7 @@ Your environment variables control how the cluster will be built. The variables for **name**, **password** and **e-mail** for the big data cluster is provided to you when you request access to the Early Adopter program. -*(Note that in production, you'll set these environment variables permanently using the Control Panel or by adding them with a Registry command, and may be handled by an improved installation experience)* +*(Note that in production, you'll set these environment variables permanently using the Control Panel or by adding them with a Registry command, and will be handled by an improved and secure installation experience)*

Activity 4: Install Azure CLI

@@ -138,9 +138,7 @@ Note: Python can install in multiple locations based on various conditions. To s `where python` -(In Linux, `which Python`) - -In most cases, Choclaty will add Python and pip to your path. Otherwise, you may want to find and add it manually. +Note that the Chocolatey Package Manager should have set the Path variable for Python and pip, but if they are not in your path you can learn how to set that here.

Activity 6: Install kubectl

@@ -160,6 +158,8 @@ the `mssqlctl` program then deploys the SQL Server big data cluster environment You must delete the old version before the class. It is updated quite frequently during the preview phase. You may need to run these steps in CMD rather than PowerShell. + +You may have `pip3` instead of `pip` as the command. @@ -172,9 +172,14 @@ choco upgrade kubernetes-cli python -m pip install --upgrade pip +REM for 2.7 and lower: pip uninstall mssqlctl -pip install --extra-index-url https://private-repo.microsoft.com/python/ctp-2.2 mssqlctl +REM for 2.3: +pip uninstall -r https://private-repo.microsoft.com/python/ctp-2.3/mssqlctl/requirements.txt + +pip install -r https://private-repo.microsoft.com/python/ctp-2.4/mssqlctl/requirements.txt +

Activity 8: Install Azure Data Studio and Extensions

diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/01 - The Big Data Landscape.md b/sqlserver2019bigdataclusters/SQL2019BDC/01 - The Big Data Landscape.md index 692ab9ea..3213ea8b 100644 --- a/sqlserver2019bigdataclusters/SQL2019BDC/01 - The Big Data Landscape.md +++ b/sqlserver2019bigdataclusters/SQL2019BDC/01 - The Big Data Landscape.md @@ -1,523 +1,525 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) - -#### A Microsoft Course from the SQL Server team - -

- -

The Big Data Landscape

- -In this workshop you'll cover using a Process and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. There's a lot here - so focus on understanding the overall system first, then come back and explore each section. - -(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) - -You'll cover the following topics in this Module: - -
- -
1.1 Business Applications and Big Data
-
1.2 Workshop Scenario
-
1.3 Big Data Technologies: Operating Systems
-
1.4 Big Data Technologies: Containers and Controllers
-
1.5 Big Data Technologies: Distributed Data Storage
-
1.6 Big Data Technologies: Command and Control
-
1.7 Big Data Technologies: Data Ingestion, Processing and Output
- -
- -

- -

1.1 Business Applications and Big Data

- -Businesses require near real-time insights from ever-larger sets of data. Large-scale data ingestion requires scale-out storage and processing in ways that allow fast response times. In addition to simply querying this data, organizations want full analysis and even predictive capabilities over their data. A few industry examples of applications of technology that create large data sets are: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Industry Sector Primary Use-Cases
RetailDemand prediction
In-store analytics
Supply chain optimization
Customer retention
Cost/Revenue analytics
HR analytics
Inventory control
FinanceCyberattack Prevention
Fraud detection
Customer segmentation
Market analysis
Risk analysis
Blockchain
Customer retention
HealthcareFiscal control analytics
Disease Prevention prediction and classification
Clinical Trials optimization
Patient load analysis
Episode analytics
Public SectorRevenue prediction
Education effectiveness analysis
Transportation analysis and prediction
Energy demand and supply prediction and control
Defense readiness predictions and threat analysis
ManufacturingPredictive Maintenance (PdM)
Anomaly Detection
Pattern analysis
AgricultureFood Safety analysis
Crop forecasting
Market forecasting
Pipeline Optimization
- -While solutions for large-scale data processing exist, they are often batch-based, which has a lag in the time from query to response. Also, batch systems such as Hadoop are complicated to set up and manage. Operational data is often stored in Relational Database systems on-premises, and joining that data to larger-scale cloud systems exposes security weaknesses and brittle architectures. - -

Activity: Define Your Use-Case

- -In this activity, you will define the use-case that best fits the industry where you work. - -While you will review the design for a complete solution in this workshop, it extrapolates to many other scenarios. You need to find the top scenarios specific your industry. - -Steps

- -

Open a web browser and any professional notes or resources you use at work.

-

Spend 5 minutes looking online for the terms "Big Data" and "Machine Learning" and "Top" for your industry. For example: Hospital Big Data Machine Learning Top

-

Record your findings in your personal workshop notes.

- -

- -

1.2 Workshop Scenario

- -This solution uses an example of a retail organization that has multiple data sources, but it has many applications to the other industries listed above. It serves as an end-to-end scenario where you will learn the technologies and processes you can use to create multiple solutions. - - - -Wide World Importers (WWI) is a traditional brick and mortar business with a long track record of success, generating profits through strong retail store sales of their unique offering of affordable products from around the world. They have a great training program for new employees, that focuses on connecting with their customers and providing great face-to-face customer service. This strong focus on customer relationships has helped set WWI apart from their competitors. - -WWI has now added web and mobile commerce to their platform, which has generated a significant amount of additional data, and data formats. These new platforms were added without integrating into the OLTP system data or Business Intelligence infrastructures. As a result, "silos" of data stores have developed. - - - -Now they want to expand their reach to customers around the world through web and mobile e-commerce. But they don't want to just simply make their inventory available online. They want to build upon their track record of strong customer connections, and engage with their customers through personalized, high-quality application experiences that incorporate data and intelligence. - -The technology team at WWI has recognized that moving to an omni-channel strategy has quickly outgrown their ability to handle data. They anticipate the following solutions needed to reach more customers and grow the business: - - - Scale data systems to reach more consumers - - Unlock business insights from multiple sources of structured and unstructured data - - Apply deep analytics with high-performance responses - - Enable AI into apps to actively engage with customers - -Prior to expanding to their current omni-channel strategy, WWI had a simple Point of Sale (POS) application that handled customer orders at each retail store. The back-end was a series of service layers used to process orders and store them in a SQL database. They had designed their systems and tuned them to handle this level of data. - - - -As they added new e-commerce channels to expand the customer base, consumer demand also increased. This increased demand from more customers ordering products through more channels generated more data. Now WWI has new challenges to address: - - - Increased consumer demand, leading to increased app data - - They are unable to determine business trends because of siloed insights - - They have a rising data management footprint, increasing cost and complexity - - New development challenges resulting from more deployment targets and duplicated code - -
- -
- -In the 04 - Operationalization Module, you'll learn how the team solves each of these challenges. - -You can read more about Wide World Importers here. - -
-

-
- -

Activity: Install Class Environment on AKS

- -In this lab you will deploy a SQL Server 2019 big data cluster to the Azure Kubernetes Service. You will need a client machine and a subscription to Microsoft Azure where you can create assets. This will take some time, so you'll do this now as you work through the next few modules, and then return to the installation process in a later module. - -Using the following steps, you will create a Resource Group in Azure that will hold your BDC on AKS. When you complete your lab you can delete this Resource Group which will stop the Azure charges for this course. - -

Steps

- -

Ensure that you have completed all prerequisites.

-

Open a Command Prompt on your classroom system. Read the following article, and use the SET command for the environment variables as instructed in class.

-

Read the following article, ensuring that you carefully follow each step. Stop at the section marked Connect to the cluster.

- -

- -

1.3 Big Data Technologies: Operating Systems

- -In this section you will learn more about the designs of two primary operating systems (Microsoft Windows and Linux) and how they are suited to working with Big Data. - -NOTE: This is not meant to be a comprehensive discussion of the merits of an operating system or ecostructure. The goal is to understand the salient features in each architecture as they pertain to processing large sets of data. - -When working with large-scale, distributed data processing systems, there are two primary concepts to keep in mind: You should move as much processing to the data location as possible, and the storage system should be abstracted so that the code does not have to determine where to get its data from each node. Both Windows and Linux have specific attributes to keep in mind as you select hardware, drivers, and configurations for your systems. - -

Storage

- -The general rules for storage in a distributed data processing environment are that the disks should be as fast as possible, you should optimize for the best number of nodes that will store and process the data, and that the abstraction system (in the case of SQL Server BDC, this is HDFS in many cases) be at the latest version and optimized settings. - -For general concepts for Windows storage see the following resources: - - - -In general, Linux treats almost everything as a file system or a process. For general concepts for Linux storage see the following resources: - - - -

Processing

- -Both Windows and Linux (in the x86 architecture) are Symmetric Multiprocessing systems, which means that all processors are addressed as a single unit. In general, distributed processing systems should have larger, and more, processors at the "head" node. General Purpose (GP) processors are normally used in these systems, but for certain uses such as Deep Learning or Artificial Intelligence, Purpose-Built processors such as Graphics Processing Unit (GPU's) are used within the environment, and in some cases, Advanced RISC Machines (ARM) chips can be brought into play for specific tasks. For the purposes of this workshop, you will not need these latter two technologies, although both Windows and Linux support them. - -NOTE: Linux can be installed on chipsets other than x86 compatible systems. In this workshop, you will focus on x86 systems. - - - -

Memory

- -Storage Nodes in a distributed processing system need a nominal amount of memory, and the processing nodes in the framework (Spark) included with SQL Server BDC need more. -Both Linux and Windows support large amounts of memory (most often as much as the system can hold) natively, and no special configuration for memory is needed. - -Modern operating systems use a temporary area on storage to act as memory for light caching and also as being able to extend RAM memory. This should be avoided at all costs in both Windows and Linux. - -While technically a Processor system, NUMA (Non-Uniform Memory Access) systems allow for special memory configurations to be mixed in a single server by a processor set. Both Linux and Windows support NUMA access. - - - -

Networking

- -The general guidance for large-scale distributed processing systems is that the network between them be as fast and collision-free (in the case of TCP/IP) as possible. The networking stacks in both Windows and Linux require no special settings within the operating system, but you should thoroughly understand the driver settings as they apply to each NIC installed in your system, that each setting is best optimized for your networking hardware and topology and that the drivers are at the latest tested versions. - -Although a full discussion of the TCP/IP protocol is beyond the scope of this workshop, it's important that you have a good understanding of how it works, since it permeates every part of the SQL Server BDC architecture. You can get a quick overview of TCP/IP here. - -The other rule you should keep in mind is that in general you should have only the presentation of the data handled by the workstation or device that accesses the solution. Do not move large amounts of data back and forth over the network to have the data processed locally. That being said, there are times (such as certain IoT scenarios) where subsets of data should be moved to the client, but you will not face those scenarios in this workshop. - -

5-Minute Linux Overview for the Windows Professional

- -The best way to learn an operating system is to install it and perform real-world tasks. (A good place to learn a lot more about Linux is here). For this workshop, the essential concepts you need from the SQL Server perspective are: - - - - - - - - - - -
Linux Concept Description
DistributionsUnlike Windows, which is written and controlled by Microsoft, Linux is comprised only of a small Kernel, and then all other parts of the operating system are created by commercial entities or the public, and packaged up into a Distribution. These Distributions have all of the complementary functions to the operating system, and in some cases a graphical interface and other files. The Distributions supported by SQL Server are RedHat, Ubuntu, and SuSE.
Package ManagersSoftware installation on Linux can be done manually by copying files or compiling source code. A Package Manager is a tool that simplifies this process, and is based on the Distribution. The two package managers you will see most often in SQL Server are yum and apt.
File SystemsLike Windows, organized as a tree, but referenced by a forward-slash /. There are no drive letters in Linux - everything is "mounted" to what looks like a directory.
Access and AuthenticationUsers and Groups are stored in protected files, called /etc/passwd and /etc/group. These files and locations may be augmented or slightly different based in the distribution. By default, each user has very low privileges and must be granted access to files or directories. The sudo command allows you to run as a privileged user (known as root) or as another user.
- -The essential commands you should know for this workshop are below. In Linux you can often send the results of one command to another using the "pipe" symbol, similar to PowerShell: |. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Linux Command Description
manShows help on a command or concept. You can also add --help to most commands for a quick syntax display. Similar to HELP in Windows.
catDisplay File Contents. Similar to TYPE in Windows.
cdChanges Directory. Same as in Windows.
chgrpChange file group access.
chownChange permissions. Similar to CACLS in Windows.
cpCopy source file into destination. Similar to COPY in Windows.
dfShows free space on mounted devices. Similar to dir | find "bytes free" in Windows.
fileDetermine file type.
findFind files. Similar to DIR filename /S in Windows.
grepSearch files for regular expressions. Similar to FIND in Windows.
headDisplay the first few lines of a file.
lnCreate softlink on oldname
lsDisplay information about file type. Similar to DIR in Windows.
mkdirCreate a new directory dirname. Same as in Windows.
moreDisplay data in paginated form. Same as in Windows. An improved version of this command is less.
mountMakes a drive, network location, and many other objects available to the operating system so that you can work with it.
mvMove (Rename) an oldname to newname. Similar to REN and DEL combined in Windows.
nanoCreate and edit text files.
pwdPrint current working directory.
rmRemove (Delete) filename. Similar to DEL in Windows.
rmdirDelete an existing directory provided it is empty. Same as in Windows.
sudoElevate commands that follow to sysadmin privileges.
tailPrints last few lines in a file.
touchUpdate access and modification time of a file. Similar to ECHO > test.txt in Windows.
- -A longer explanation of system administration for Linux is here. - -

Activity: Work with Linux Commands

- -

Steps

- -

Open this link to run a Linux Emulator in a browser

-

Find the mounted file systems, and then show the free space in them.

-

Show the current directory.

-

Show the files in the current directory.

-

Create a new directory, navigate to it, and create a file called test.txt with the words This is a test in it. (hint: us the nano editor or the echo command)

-

Display the contents of that file.

-

Show the help for the cat command.

- -

- -

1.4 Big Data Technologies: Containers and Controllers

- -Bare-metal installations of an operating system such as Windows are deployed on hardware using a Kernel, and additional software to bring all of the hardware into a set of calls. - -

Virtual machines

- -One abstraction layer above installing software directly on hardware is using a Hypervisor. In essence, this layer uses the base operating system to emulate hardware. You install an operating system (called a *Guest* OS) on the Hypervisor (called the *Host*), and the Guest OS acts as if it is on bare-metal. - -
- -
- -In this abstraction level, you have full control (and responsibility) for the entire operating system, but not the hardware. This isolates all process space and provides an entire "Virtual Machine" to applications. For scale-out systems, a Virtual Machine allows for a distribution and control of complete computer environments using only software. - -You can read the details of Microsoft's Hypervisor here. - -

Containers (Docker)

- -The next level of Abstraction is a Container. There are various types of Container technologies, in this workshop, you will focus on Docker. - -A Docker Container is provided by the Docker runtime engine, which sits above the operating system (Windows or Linux). In this abstraction, you do not control the hardware or the operating system. The Container has a very small Kernel in it, and can contain binaries such as Python, R, SQL Server, or other binaries. A Container with all its binaries is called an Image. - -(NOTE: The Container Image Kernel can run on Windows or Linux, but you will focus on the Linux Kernel Containers in this workshop.) - -
- -
- -This abstraction holds everything for an application to isolate it from other running processes. It is also completely portable - you can create an image on one system, and another system can run it so long as the Docker Runtime is installed. Containers also start very quickly, are easy to create (called Composing) using a simple text file with instructions of what to install on the image. The instructions pull the base Kernel, and then any binaries you want to install. Several pre-built Containers are already available, SQL Server is one of these. You can read more about installing SQL Server on Docker here. - -You can have several Containers running at any one time, based on the amount of hardware resources where you run it. For scale-out systems, a Container allows for distribution and control of complete applications using only declarative commands. - -You can read more about Docker here. - -

Container Orchestration (Kubernetes)

- -For Big Data systems, having lots of Containers is very advantageous to segment purpose and performance profiles. However, dealing with many Container Images, allowing persisted storage, and interconnecting them for network and internetwork communications is a complex task. Kubernetes is an open source Container orchestrator, which can scale Container deployments according to need. The following table defines some important Kubernetes terminology: - - - - - - - - - -
ComponentUsed for
Cluster A Kubernetes cluster is a set of machines, known as nodes. One node controls the cluster and is designated the master node; the remaining nodes are worker nodes. The Kubernetes master is responsible for distributing work between the workers, and for monitoring the health of the cluster.
Node A node runs containerized applications. It can be either a physical machine or a virtual machine. A Kubernetes cluster can contain a mixture of physical machine and virtual machine nodes.
Pod A pod is the atomic deployment unit of Kubernetes. A pod is a logical group of one or more containers-and associated resources-needed to run an application. Each pod runs on a node; a node can run one or more pods. The Kubernetes master automatically assigns pods to nodes in the cluster.
- -
-

-
- -You can learn much more about Kubernetes here. - - -In SQL Server big data clusters, Kubernetes is responsible for the state of the SQL Server big data clusters; Kubernetes builds and configures the cluster nodes, assigns pods to nodes, and monitors the health of the cluster. - -(You'll cover the storage aspects of Kubernetes clusters in a moment.) - -

Activity: Familiarize Yourself with Kubernetes using minikube

- -To practice with Kubernetes, you will use an online emulator to work with the minikube platform. - -

Steps

-

Open this resource, and complete the first module. (You can return to it later to complete all exercises if you wish)

- -
-

-
- -

1.5 Big Data Technologies: Distributed Data Storage

- -Traditional storage uses a call from the operating system to an underlying I/O system, as you learned earlier. These file systems are either directly connected to the operating system or appear to be connected directly using a Storage Area Network. The blocks of data are stored and managed by the operating system. - -For large scale-out data systems, the mounting point for an I/O is another abstraction. For SQL Server BDC, the most commonly used scale-out file system is the Hadoop Data File System, or HDFS. HDFS is a set of Java code that gathers disparate disk subsystems into a Cluster which is comprised of various Nodes - a NameNode, which manages the cluster's metadata, and DataNodes that physically store the data. Files and directories are represented on the NameNode by a structure called inodes. Inodes record attributes such as permissions, modification and access times, and namespace and diskspace quotas. - -

- -With an abstraction such as Containers, storage becomes an issue for two reasons: The storage can disappear when the Container is removed, and other Containers and technologies can't access storage easily within a Container. - -To solve this, Docker implemented the concept of Volumes, and Kubernetes extended this concept. Using a specific protocol and command, Kubernetes (and in specific, SQL Server BDC) mounts the storage as a *Persistent Volume* and uses a construct called a *Persistent Volume Claim* to access it. A Kubernetes Volume is a mounted directory which is accessible to the Containers in a Pod within the Node. - -You'll cover Volumes in more depth in a future module as you learn how the SQL Server BDC takes advantage of these constructs. - -You can read more about HDFS here. - -

Activity: Review HDFS Tutorial

- -There are two primary storage concepts you will work with in SQL Server Big Data Clusters: the HDFS layer, and SQL Server. Fro HDFS, it's important to know the basics of how it works. - -

Steps

-

Open this reference, and review the lessons you see there. Bookmark this reference for later review.

- -
-

-
- -

1.6 Big Data Technologies: Command and Control

- -There are three primary tools and utilities you will use to control the SQL Server big data cluster: - - - kubectl - - mssqlctl - - Azure Data Studio - -

Managing the Kubernetes Cluster(kubectl)

- -The **kubectl** command accesses the Application Programming Interfaces (API's) from Kubernetes. The utility can be installed your workstation using this process, and it is also available in the Azure Cloud Shell with no installation. - -A full list of the **kubectl** commands is here. You can use these commands for troubleshooting the SQL Server BDC as well. - -You'll explore further operations with these tools in the Management and Monitoring module. - -

Managing and Monitoring the SQL Server big data cluster (mssqlctl)

- -The **mssqlctl** command-line utility is written in Python and can be installed on your workstation using the **pip** command in Python. You will see how to install this utility in the *Planning, Installation and Configuration* module. - -The **mssqlctl** utility enables cluster administrators to bootstrap and manage big data clusters via the REST APIs exposed by the Controller service. The controller is deployed and hosted in the same Kubernetes namespace where the customer wants to build out a big data cluster. The Controller is responsible for core logic for deploying and managing a big data cluster. - -The Controller service is installed by a Kubernetes administrator during cluster bootstrap, using the mssqlctl command-line utility. - -You'll explore further operations with these tools in the Management and Monitoring module. - -

SQL Server BDC Programming and GUI Surface (Azure Data Studio and Jupyter Notebooks)

- -

Jupyter Notebooks

- -A Jupyter *Notebook* is a web-page-based interface consisting of *Cells* that can contain text (using the Markdown specification) or code. The code depends on the Kernel that has been installed for the Notebook. Traditionally, Python and R Kernels are installed by default. - -*Notebook Servers* run **.ipynb** files (the Notebooks). You can install a Notebook Server locally, remotely, or you can use something like Azure Notebooks which provides a free, quick, easy way to work with and share Notebooks. (It's all a bit like a specific kind of web server). - -*Libraries* are a container on your Notebook server where you can have Notebooks, code, directories and other files. - -Notebooks are JSON files that contain areas called *Cells*, which have text or code in them. When you double-click a Notebook, the Notebook server renders and can display text or run code, such as R or Python, using a Kernel. Cells can hold text (such as *Markdown*, *HTML*, or *LaTeX*) which you can mix together, or Code. Double-click a Cell in a Notebook to edit it, and then click the "Run" button to render what you typed. Code runs and displays an output below the cell. You can toggle the result for code to show or hide it. - -*Markdown* is a simplified markup language for text. Use it for general text and simple graphics. You can read more about Markdown here, and there's a great cheat-sheet on Markdown here. - -You'll use Notebooks within Azure Data Studio to work with Spark, which you'll learn about in a moment. Learn more about Jupyter Notebooks here. - -

Azure Data Studio

- -*Azure Data Studio* is a cross-platform database tool to manage and program on-premises and cloud data platforms on Windows, MacOS, and Linux. It is extensible, and one of these extensions is how you work with Azure Data Studio code and Jupyter Notebooks. It is built on the Visual Studio Code shell. The editor in Azure Data Studio has Intellisense, code snippets, source control integration, and an integrated terminal. - -If you have not completed the prerequisites for this workshop you can install Azure Data Studio from this location, and you will install the Extension to work with SQL Server big data clusters in a future module. - -You can learn more about Azure Data Studio here. - -
-

-
- -You'll explore further operations with the Azure Data Studio in the Operationalization module. - -
-

Activity: Practice with Notebooks

- -

Steps

-

Open this reference, and review the instructions you see there. You can clone this Notebook to work with it later.

- -
-

-
- -

1.7 Big Data Technologies: Data Ingestion, Processing and Output

- -In any large data system, you will need a way to bring the data in. In some cases, you will edit the data either on the way in, or after it is staged using a process called "Extract, Transform and Load" (ETL) or leave the data "pure" and unaltered (common in Data Science projects), using a process called "Extract, Load and Transform" (ELT). - -In SQL Server big data clusters, you'll learn about three ways that the system interacts with large sets of data: - - - "Virtualize" the data by pushing down the query to the source system (no data is ingested in this scenario) - - Ingesting data into SQL Server Tables, using the PolyBase feature or into standard SQL Server constructs - - Loading data into HDFS - -In Data Virtualization, no data is brought into storage - it is queried from it's source. It's important to think about the network bandwidth per query in this scenario. The next two scenarios do bring data into the system, either into SQL Server tables within the big data cluster or into the HDFS mount points. - -In both cases, the first considerations for loading data are source-data locality and network bandwidth, utilization, and predictability of the path to the SQL Server BDC destination. Depending on where the data originates, network bandwidth will play a major part in your loading performance. For source data residing on premises, network throughput performance and predictability can be enhanced with a service such as a dedicated network path or "hot potato routing". You must consider the current average bandwidth, utilization, predictability, and maximum capabilities of your current public Internet-facing, source-to-destination route, regardless of the method you are using. - -In this section you'll learn more about working with the last two options for loading data into the SQL Server BDC architecture. In the *Operationalization* module you'll learn more about Data Virtualization, and also see a practical method for working with data ingestion and pipelines. You can use multiple methods to control the pipeline or workflow of your system, depending on the requirements and other parts of the Data Architecture at your location. In general, you will use the Team Data Science Process to define your objectives, identify and explore data sources, perform any transforms and do any Feature Engineering for Machine Learning, and then Operationalize your solution. - -Next you'll explore the two locations you can store data in the system, and then you'll learn about creating a Pipeline system to standardize and automate the process. In the Operationalization Module you'll see practical examples of each of these. - -

Data Ingestion for SQL Server Data Stores

- -For SQL Server tables (regardless of structure), standard ingestion methods work well: - - - The bcp utility - - SQL Server Integration Services - - The SQLBulkCopy class in ADO.NET - -In the case of PolyBase, statements can not only query data from various sources, but also persist them in SQL Server physical tables. - -

Data Ingestion for HDFS

- -Since HDFS is a file-system, data transfer is largely a matter of using it as a mount-point. The following methods are generally used, although the platform and location of the HDFS system affects the choices available: - - - If your HDFS mount-point is on-premises, you can use multiple tools to copy or transfer data to it, including mounting it in Linux as a file system - - There is also a Network File System (NFS) gateway you can install to access the HDFS mount point - - Python code use the Fuse library to mount HDFS, allowing you to access the mount point programmatically. - - If the HDFS is located in the cloud, each provider has methods for accessing that data. Microsoft Azure has multiple ways of hosting HDFS, and a common method of transferring data to almost any location within Azure is using Azure Data Factory. - -

Data Pipelines using Azure Data Factory

- -As described earlier, you can use various methods to ingest data ad-hoc and as-needed for your two data targets (HDFS and SQL Server Tables. A more holistic archicture is to use a Pipeline system that can define sources, triggers and events, transforms, targets, and has logging and tracking capabilities. The Microsoft Azure Data Factory provides all of the capabilities, and often serves as the mechanism to transfer data to and from on-premises, in-cloud, and other sources and targets. ADF can serve as a full data pipeline system, as described here. - -
- -
- -A full description of Azure Data Factory is here. - -

Data Pipelines using Apache Spark

- -Apache Spark is an analytics engine for large-scale data. It can be used with data stored in HDFS, and has connectors to work with data in SQL Server as well. - -
-

-
- -While Spark is used for all phases of the data processing lifecycle and can compliment and extend the capabilities of SQL Server, it is also often used to ingest and transform data as a data pipeline. An important concept to keep in mind when you ingest data using Spark is that Spark has three main data storage representations it works with once they are ingested: - - - RDD (2011): Distribution of JVM objects, Functional Operators (map, filter, etc) - - DataFrame (2013): Distribution of Row objects, Expression-based operations and UDF’s, Logical plans and an optimizer, Fast, efficient internal representations - - Dataset (2015): Internally rows, externally JVM objects – type-safe + fast, Slower than DF’s, not as suited for interactive analysis - -You can learn more about these data representations here. You'll see an example of ingesting data using Apache Spark in the Operationalization module. - -
-

-
- -

For Further Study

-
- - - -

Next Steps

- -Next, Continue to SQL Server big data cluster Components. +![](../graphics/microsoftlogo.png) + +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) + +#### A Microsoft Course from the SQL Server team + +

+ +

The Big Data Landscape

+ +In this workshop you'll cover using a Process and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. There's a lot here - so focus on understanding the overall system first, then come back and explore each section. + +(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) + +You'll cover the following topics in this Module: + +
+ +
1.1 Business Applications and Big Data
+
1.2 Workshop Scenario
+
1.3 Big Data Technologies: Operating Systems
+
1.4 Big Data Technologies: Containers and Controllers
+
1.5 Big Data Technologies: Distributed Data Storage
+
1.6 Big Data Technologies: Command and Control
+
1.7 Big Data Technologies: Data Ingestion, Processing and Output
+ +
+ +

+ +

1.1 Business Applications and Big Data

+ +Businesses require near real-time insights from ever-larger sets of data. Large-scale data ingestion requires scale-out storage and processing in ways that allow fast response times. In addition to simply querying this data, organizations want full analysis and even predictive capabilities over their data. A few industry examples of applications of technology that create large data sets are: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Industry Sector Primary Use-Cases
RetailDemand prediction
In-store analytics
Supply chain optimization
Customer retention
Cost/Revenue analytics
HR analytics
Inventory control
FinanceCyberattack Prevention
Fraud detection
Customer segmentation
Market analysis
Risk analysis
Blockchain
Customer retention
HealthcareFiscal control analytics
Disease Prevention prediction and classification
Clinical Trials optimization
Patient load analysis
Episode analytics
Public SectorRevenue prediction
Education effectiveness analysis
Transportation analysis and prediction
Energy demand and supply prediction and control
Defense readiness predictions and threat analysis
ManufacturingPredictive Maintenance (PdM)
Anomaly Detection
Pattern analysis
AgricultureFood Safety analysis
Crop forecasting
Market forecasting
Pipeline Optimization
+ +While solutions for large-scale data processing exist, they are often batch-based, which has a lag in the time from query to response. Also, batch systems such as Hadoop are complicated to set up and manage. Operational data is often stored in Relational Database systems on-premises, and joining that data to larger-scale cloud systems exposes security weaknesses and brittle architectures. + +

Activity: Define Your Use-Case

+ +In this activity, you will define the use-case that best fits the industry where you work. + +While you will review the design for a complete solution in this workshop, it extrapolates to many other scenarios. You need to find the top scenarios specific your industry. + +Steps

+ +

Open a web browser and any professional notes or resources you use at work.

+

Spend 5 minutes looking online for the terms "Big Data" and "Machine Learning" and "Top" for your industry. For example: Hospital Big Data Machine Learning Top

+

Record your findings in your personal workshop notes.

+ +

+ +

1.2 Workshop Scenario

+ +This solution uses an example of a retail organization that has multiple data sources, but it has many applications to the other industries listed above. It serves as an end-to-end scenario where you will learn the technologies and processes you can use to create multiple solutions. + + + +Wide World Importeres (WWI) is a traditional brick and mortar business with a long track record of success, generating profits through strong retail store sales of their unique offering of affordable products from around the world. They have a great training program for new employees, that focuses on connecting with their customers and providing great face-to-face customer service. This strong focus on customer relationships has helped set WWI apart from their competitors. + +WWI has now added web and mobile commerce to their platform, which has generated a significant amount of additional data, and data formats. These new platforms were added without integrating into the OLTP system data or Business Intelligence infrastructures. As a result, "silos" of data stores have developed. + + + +Now they want to expand their reach to customers around the world through web and mobile e-commerce. But they don't want to just simply make their inventory available online. They want to build upon their track record of strong customer connections, and engage with their customers through personalized, high-quality application experiences that incorporate data and intelligence. + +The technology team at WWI has recognized that moving to an omni-channel strategy has quickly outgrown their ability to handle data. They anticipate the following solutions needed to reach more customers and grow the business: + + - Scale data systems to reach more consumers + - Unlock business insights from multiple sources of structured and unstructured data + - Apply deep analytics with high-performance responses + - Enable AI into apps to actively engage with customers + +Prior to expanding to their current omni-channel strategy, WWI had a simple Point of Sale (POS) application that handled customer orders at each retail store. The back-end was a series of service layers used to process orders and store them in a SQL database. They had designed their systems and tuned them to handle this level of data. + + + +As they added new e-commerce channels to expand the customer base, consumer demand also increased. This increased demand from more customers ordering products through more channels generated more data. Now WWI has new challenges to address: + + - Increased consumer demand, leading to increased app data + - They are unable to determine business trends because of siloed insights + - They have a rising data management footprint, increasing cost and complexity + - New development challenges resulting from more deployment targets and duplicated code + +
+ +
+ +In the 04 - Operationalization Module, you'll learn how the team solves each of these challenges. + +You can read more about Wide World Importers here. + +
+

+
+ +

Activity: Install Class Environment on AKS

+ +In this lab you will deploy a SQL Server 2019 big data cluster to the Azure Kubernetes Service. You will need a client machine and a subscription to Microsoft Azure where you can create assets. This will take some time, so you'll do this now as you work through the next few modules, and then return to the installation process in a later module. + +*NOTE: Your instructor may walk through these steps if the class environment does not have enough resources or time for each person to deploy. If so, they will provide you credentials to work with a pre-configured system in class.* + +Using the following steps, you will create a Resource Group in Azure that will hold your BDC on AKS. When you complete your lab you can delete this Resource Group which will stop the Azure charges for this course. + +

Steps

+ +

Ensure that you have completed all prerequisites.

+

Open a Command Prompt on your classroom system. Read the following article, and use the SET command for the environment variables as instructed in class.

+

Read the following article, ensuring that you carefully follow each step. Stop at the section marked Connect to the cluster.

+ +

+ +

1.3 Big Data Technologies: Operating Systems

+ +In this section you will learn more about the designs of two primary operating systems (Microsoft Windows and Linux) and how they are suited to working with Big Data. + +NOTE: This is not meant to be a comprehensive discussion of the merits of an operating system or ecostructure. The goal is to understand the salient features in each architecture as they pertain to processing large sets of data. + +When working with large-scale, distributed data processing systems, there are two primary concepts to keep in mind: You should move as much processing to the data location as possible, and the storage system should be abstracted so that the code does not have to determine where to get its data from each node. Both Windows and Linux have specific attributes to keep in mind as you select hardware, drivers, and configurations for your systems. + +

Storage

+ +The general rules for storage in a distributed data processing environment are that the disks should be as fast as possible, you should optimize for the best number of nodes that will store and process the data, and that the abstraction system (in the case of SQL Server BDC, this is HDFS in many cases) be at the latest version and optimized settings. + +For general concepts for Windows storage see the following resources: + + + +In general, Linux treats almost everything as a file system or a process. For general concepts for Linux storage see the following resources: + + + +

Processing

+ +Both Windows and Linux (in the x86 architecture) are Symmetric Multiprocessing systems, which means that all processors are addressed as a single unit. In general, distributed processing systems should have larger, and more, processors at the "head" node. General Purpose (GP) processors are normally used in these systems, but for certain uses such as Deep Learning or Artificial Intelligence, Purpose-Built processors such as Graphics Processing Unit (GPU's) are used within the environment, and in some cases, Advanced RISC Machines (ARM) chips can be brought into play for specific tasks. For the purposes of this workshop, you will not need these latter two technologies, although both Windows and Linux support them. + +NOTE: Linux can be installed on chipsets other than x86 compatible systems. In this workshop, you will focus on x86 systems. + + + +

Memory

+ +Storage Nodes in a distributed processing system need a nominal amount of memory, and the processing nodes in the framework (Spark) included with SQL Server BDC need more. +Both Linux and Windows support large amounts of memory (most often as much as the system can hold) natively, and no special configuration for memory is needed. + +Modern operating systems use a temporary area on storage to act as memory for light caching and also as being able to extend RAM memory. This should be avoided at all costs in both Windows and Linux. + +While technically a Processor system, NUMA (Non-Uniform Memory Access) systems allow for special memory configurations to be mixed in a single server by a processor set. Both Linux and Windows support NUMA access. + + + +

Networking

+ +The general guidance for large-scale distributed processing systems is that the network between them be as fast and collision-free (in the case of TCP/IP) as possible. The networking stacks in both Windows and Linux require no special settings within the operating system, but you should thoroughly understand the driver settings as they apply to each NIC installed in your system, that each setting is best optimized for your networking hardware and topology and that the drivers are at the latest tested versions. + +Although a full discussion of the TCP/IP protocol is beyond the scope of this workshop, it's important that you have a good understanding of how it works, since it permeates every part of the SQL Server BDC architecture. You can get a quick overview of TCP/IP here. + +The other rule you should keep in mind is that in general you should have only the presentation of the data handled by the workstation or device that accesses the solution. Do not move large amounts of data back and forth over the network to have the data processed locally. That being said, there are times (such as certain IoT scenarios) where subsets of data should be moved to the client, but you will not face those scenarios in this workshop. + +

5-Minute Linux Overview for the Windows Professional

+ +The best way to learn an operating system is to install it and perform real-world tasks. (A good place to learn a lot more about Linux is here). For this workshop, the essential concepts you need from the SQL Server perspective are: + + + + + + + + + + +
Linux Concept Description
DistributionsUnlike Windows, which is written and controlled by Microsoft, Linux is comprised only of a small Kernel, and then all other parts of the operating system are created by commercial entities or the public, and packaged up into a Distribution. These Distributions have all of the complementary functions to the operating system, and in some cases a graphical interface and other files. The Distributions supported by SQL Server are RedHat, Ubuntu, and SuSE.
Package ManagersSoftware installation on Linux can be done manually by copying files or compiling source code. A Package Manager is a tool that simplifies this process, and is based on the Distribution. The two package managers you will see most often in SQL Server are yum and apt.
File SystemsLike Windows, organized as a tree, but referenced by a forward-slash /. There are no drive letters in Linux - everything is "mounted" to what looks like a directory.
Access and AuthenticationUsers and Groups are stored in protected files, called /etc/passwd and /etc/group. These files and locations may be augmented or slightly different based in the distribution. By default, each user has very low privileges and must be granted access to files or directories. The sudo command allows you to run as a privileged user (known as root) or as another user.
+ +The essential commands you should know for this workshop are below. In Linux you can often send the results of one command to another using the "pipe" symbol, similar to PowerShell: |. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Linux Command Description
manShows help on a command or concept. You can also add --help to most commands for a quick syntax display. Similar to HELP in Windows.
catDisplay File Contents. Similar to TYPE in Windows.
cdChanges Directory. Same as in Windows.
chgrpChange file group access.
chownChange permissions. Similar to CACLS in Windows.
cpCopy source file into destination. Similar to COPY in Windows.
dfShows free space on mounted devices. Similar to dir | find "bytes free" in Windows.
fileDetermine file type.
findFind files. Similar to DIR filename /S in Windows.
grepSearch files for regular expressions. Similar to FIND in Windows.
headDisplay the first few lines of a file.
lnCreate softlink on oldname
lsDisplay information about file type. Similar to DIR in Windows.
mkdirCreate a new directory dirname. Same as in Windows.
moreDisplay data in paginated form. Same as in Windows. An improved version of this command is less.
mountMakes a drive, network location, and many other objects available to the operating system so that you can work with it.
mvMove (Rename) an oldname to newname. Similar to REN and DEL combined in Windows.
nanoCreate and edit text files.
pwdPrint current working directory.
rmRemove (Delete) filename. Similar to DEL in Windows.
rmdirDelete an existing directory provided it is empty. Same as in Windows.
sudoElevate commands that follow to sysadmin privileges.
tailPrints last few lines in a file.
touchUpdate access and modification time of a file. Similar to ECHO > test.txt in Windows.
+ +A longer explanation of system administration for Linux is here. + +

Activity: Work with Linux Commands

+ +

Steps

+ +

Open this link to run a Linux Emulator in a browser

+

Find the mounted file systems, and then show the free space in them.

+

Show the current directory.

+

Show the files in the current directory.

+

Create a new directory, navigate to it, and create a file called test.txt with the words This is a test in it. (hint: us the nano editor or the echo command)

+

Display the contents of that file.

+

Show the help for the cat command.

+ +

+ +

1.4 Big Data Technologies: Containers and Controllers

+ +Bare-metal installations of an operating system such as Windows are deployed on hardware using a Kernel, and additional software to bring all of the hardware into a set of calls. + +

Virtual machines

+ +One abstraction layer above installing software directly on hardware is using a Hypervisor. In essence, this layer uses the base operating system to emulate hardware. You install an operating system (called a *Guest* OS) on the Hypervisor (called the *Host*), and the Guest OS acts as if it is on bare-metal. + +
+ +
+ +In this abstraction level, you have full control (and responsibility) for the entire operating system, but not the hardware. This isolates all process space and provides an entire "Virtual Machine" to applications. For scale-out systems, a Virtual Machine allows for a distribution and control of complete computer environments using only software. + +You can read the details of Microsoft's Hypervisor here. + +

Containers (Docker)

+ +The next level of Abstraction is a Container. There are various types of Container technologies, in this workshop, you will focus on Docker. + +A Docker Container is provided by the Docker runtime engine, which sits above the operating system (Windows or Linux). In this abstraction, you do not control the hardware or the operating system. The Container has a very small Kernel in it, and can contain binaries such as Python, R, SQL Server, or other binaries. A Container with all its binaries is called an Image. + +(NOTE: The Container Image Kernel can run on Windows or Linux, but you will focus on the Linux Kernel Containers in this workshop.) + +
+ +
+ +This abstraction holds everything for an application to isolate it from other running processes. It is also completely portable - you can create an image on one system, and another system can run it so long as the Docker Runtime is installed. Containers also start very quickly, are easy to create (called Composing) using a simple text file with instructions of what to install on the image. The instructions pull the base Kernel, and then any binaries you want to install. Several pre-built Containers are already available, SQL Server is one of these. You can read more about installing SQL Server on Docker here. + +You can have several Containers running at any one time, based on the amount of hardware resources where you run it. For scale-out systems, a Container allows for distribution and control of complete applications using only declarative commands. + +You can read more about Docker here. + +

Container Orchestration (Kubernetes)

+ +For Big Data systems, having lots of Containers is very advantageous to segment purpose and performance profiles. However, dealing with many Container Images, allowing persisted storage, and interconnecting them for network and internetwork communications is a complex task. Kubernetes is an open source Container orchestrator, which can scale Container deployments according to need. The following table defines some important Kubernetes terminology: + + + + + + + + + +
ComponentUsed for
Cluster A Kubernetes cluster is a set of machines, known as nodes. One node controls the cluster and is designated the master node; the remaining nodes are worker nodes. The Kubernetes master is responsible for distributing work between the workers, and for monitoring the health of the cluster.
Node A node runs containerized applications. It can be either a physical machine or a virtual machine. A Kubernetes cluster can contain a mixture of physical machine and virtual machine nodes.
Pod A pod is the atomic deployment unit of Kubernetes. A pod is a logical group of one or more containers-and associated resources-needed to run an application. Each pod runs on a node; a node can run one or more pods. The Kubernetes master automatically assigns pods to nodes in the cluster.
+ +
+

+
+ +You can learn much more about Kubernetes here. We're using the Azure Kubernetes Service (AKS) in this workshop, and they have a great tutorial here. + + +In SQL Server big data clusters, Kubernetes is responsible for the state of the SQL Server big data clusters; Kubernetes builds and configures the cluster nodes, assigns pods to nodes, and monitors the health of the cluster. + +(You'll cover the storage aspects of Kubernetes clusters in a moment.) + +

Activity: Familiarize Yourself with Kubernetes using minikube

+ +To practice with Kubernetes, you will use an online emulator to work with the minikube platform. + +

Steps

+

Open this resource, and complete the first module. (You can return to it later to complete all exercises if you wish)

+ +
+

+
+ +

1.5 Big Data Technologies: Distributed Data Storage

+ +Traditional storage uses a call from the operating system to an underlying I/O system, as you learned earlier. These file systems are either directly connected to the operating system or appear to be connected directly using a Storage Area Network. The blocks of data are stored and managed by the operating system. + +For large scale-out data systems, the mounting point for an I/O is another abstraction. For SQL Server BDC, the most commonly used scale-out file system is the Hadoop Data File System, or HDFS. HDFS is a set of Java code that gathers disparate disk subsystems into a Cluster which is comprised of various Nodes - a NameNode, which manages the cluster's metadata, and DataNodes that physically store the data. Files and directories are represented on the NameNode by a structure called inodes. Inodes record attributes such as permissions, modification and access times, and namespace and diskspace quotas. + +

+ +With an abstraction such as Containers, storage becomes an issue for two reasons: The storage can disappear when the Container is removed, and other Containers and technologies can't access storage easily within a Container. + +To solve this, Docker implemented the concept of Volumes, and Kubernetes extended this concept. Using a specific protocol and command, Kubernetes (and in specific, SQL Server BDC) mounts the storage as a *Persistent Volume* and uses a construct called a *Persistent Volume Claim* to access it. A Kubernetes Volume is a mounted directory which is accessible to the Containers in a Pod within the Node. + +You'll cover Volumes in more depth in a future module as you learn how the SQL Server BDC takes advantage of these constructs. + +You can read more about HDFS here. + +

Activity: Review HDFS Tutorial

+ +There are two primary storage concepts you will work with in SQL Server Big Data Clusters: the HDFS layer, and SQL Server. Fro HDFS, it's important to know the basics of how it works. + +

Steps

+

Open this reference, and review the lessons you see there. Bookmark this reference for later review.

+ +
+

+
+ +

1.6 Big Data Technologies: Command and Control

+ +There are three primary tools and utilities you will use to control the SQL Server big data cluster: + + - kubectl + - mssqlctl + - Azure Data Studio + +

Managing the Kubernetes Cluster(kubectl)

+ +The **kubectl** command accesses the Application Programming Interfaces (API's) from Kubernetes. The utility can be installed your workstation using this process, and it is also available in the Azure Cloud Shell with no installation. + +A full list of the **kubectl** commands is here. You can use these commands for troubleshooting the SQL Server BDC as well. + +You'll explore further operations with these tools in the Management and Monitoring module. + +

Managing and Monitoring the SQL Server big data cluster (mssqlctl)

+ +The **mssqlctl** command-line utility is written in Python and can be installed on your workstation using the **pip** command in Python. You will see how to install this utility in the *Planning, Installation and Configuration* module. + +The **mssqlctl** utility enables cluster administrators to bootstrap and manage big data clusters via the REST APIs exposed by the Controller service. The controller is deployed and hosted in the same Kubernetes namespace where the customer wants to build out a big data cluster. The Controller is responsible for core logic for deploying and managing a big data cluster. + +The Controller service is installed by a Kubernetes administrator during cluster bootstrap, using the mssqlctl command-line utility. + +You'll explore further operations with these tools in the Management and Monitoring module. + +

SQL Server BDC Programming and GUI Surface (Azure Data Studio and Jupyter Notebooks)

+ +

Jupyter Notebooks

+ +A Jupyter *Notebook* is a web-page-based interface consisting of *Cells* that can contain text (using the Markdown specification) or code. The code depends on the Kernel that has been installed for the Notebook. Traditionally, Python and R Kernels are installed by default. + +*Notebook Servers* run **.ipynb** files (the Notebooks). You can install a Notebook Server locally, remotely, or you can use something like Azure Notebooks which provides a free, quick, easy way to work with and share Notebooks. (It's all a bit like a specific kind of web server). + +*Libraries* are a container on your Notebook server where you can have Notebooks, code, directories and other files. + +Notebooks are JSON files that contain areas called *Cells*, which have text or code in them. When you double-click a Notebook, the Notebook server renders and can display text or run code, such as R or Python, using a Kernel. Cells can hold text (such as *Markdown*, *HTML*, or *LaTeX*) which you can mix together, or Code. Double-click a Cell in a Notebook to edit it, and then click the "Run" button to render what you typed. Code runs and displays an output below the cell. You can toggle the result for code to show or hide it. + +*Markdown* is a simplified markup language for text. Use it for general text and simple graphics. You can read more about Markdown here, and there's a great cheat-sheet on Markdown here. + +You'll use Notebooks within Azure Data Studio to work with Spark, which you'll learn about in a moment. Learn more about Jupyter Notebooks here. + +

Azure Data Studio

+ +*Azure Data Studio* is a cross-platform database tool to manage and program on-premises and cloud data platforms on Windows, MacOS, and Linux. It is extensible, and one of these extensions is how you work with Azure Data Studio code and Jupyter Notebooks. It is built on the Visual Studio Code shell. The editor in Azure Data Studio has Intellisense, code snippets, source control integration, and an integrated terminal. + +If you have not completed the prerequisites for this workshop you can install Azure Data Studio from this location, and you will install the Extension to work with SQL Server big data clusters in a future module. + +You can learn more about Azure Data Studio here. + +
+

+
+ +You'll explore further operations with the Azure Data Studio in the Operationalization module. + +
+

Activity: Practice with Notebooks

+ +

Steps

+

Open this reference, and review the instructions you see there. You can clone this Notebook to work with it later.

+ +
+

+
+ +

1.7 Big Data Technologies: Data Ingestion, Processing and Output

+ +In any large data system, you will need a way to bring the data in. In some cases, you will edit the data either on the way in, or after it is staged using a process called "Extract, Transform and Load" (ETL) or leave the data "pure" and unaltered (common in Data Science projects), using a process called "Extract, Load and Transform" (ELT). + +In SQL Server big data clusters, you'll learn about three ways that the system interacts with large sets of data: + + - "Virtualize" the data by pushing down the query to the source system (no data is ingested in this scenario) + - Ingesting data into SQL Server Tables, using the PolyBase feature or into standard SQL Server constructs + - Loading data into HDFS + +In Data Virtualization, no data is brought into storage - it is queried from it's source. It's important to think about the network bandwidth per query in this scenario. The next two scenarios do bring data into the system, either into SQL Server tables within the big data cluster or into the HDFS mount points. + +In both cases, the first considerations for loading data are source-data locality and network bandwidth, utilization, and predictability of the path to the SQL Server BDC destination. Depending on where the data originates, network bandwidth will play a major part in your loading performance. For source data residing on premises, network throughput performance and predictability can be enhanced with a service such as a dedicated network path or "hot potato routing". You must consider the current average bandwidth, utilization, predictability, and maximum capabilities of your current public Internet-facing, source-to-destination route, regardless of the method you are using. + +In this section you'll learn more about working with the last two options for loading data into the SQL Server BDC architecture. In the *Operationalization* module you'll learn more about Data Virtualization, and also see a practical method for working with data ingestion and pipelines. You can use multiple methods to control the pipeline or workflow of your system, depending on the requirements and other parts of the Data Architecture at your location. In general, you will use the Team Data Science Process to define your objectives, identify and explore data sources, perform any transforms and do any Feature Engineering for Machine Learning, and then Operationalize your solution. + +Next you'll explore the two locations you can store data in the system, and then you'll learn about creating a Pipeline system to standardize and automate the process. In the Operationalization Module you'll see practical examples of each of these. + +

Data Ingestion for SQL Server Data Stores

+ +For SQL Server tables (regardless of structure), standard ingestion methods work well: + + - The bcp utility + - SQL Server Integration Services + - The SQLBulkCopy class in ADO.NET + +In the case of PolyBase, statements can not only query data from various sources, but also persist them in SQL Server physical tables. + +

Data Ingestion for HDFS

+ +Since HDFS is a file-system, data transfer is largely a matter of using it as a mount-point. The following methods are generally used, although the platform and location of the HDFS system affects the choices available: + + - If your HDFS mount-point is on-premises, you can use multiple tools to copy or transfer data to it, including mounting it in Linux as a file system + - There is also a Network File System (NFS) gateway you can install to access the HDFS mount point + - Python code use the Fuse library to mount HDFS, allowing you to access the mount point programmatically. + - If the HDFS is located in the cloud, each provider has methods for accessing that data. Microsoft Azure has multiple ways of hosting HDFS, and a common method of transferring data to almost any location within Azure is using Azure Data Factory. + +

Data Pipelines using Azure Data Factory

+ +As described earlier, you can use various methods to ingest data ad-hoc and as-needed for your two data targets (HDFS and SQL Server Tables. A more holistic archicture is to use a Pipeline system that can define sources, triggers and events, transforms, targets, and has logging and tracking capabilities. The Microsoft Azure Data Factory provides all of the capabilities, and often serves as the mechanism to transfer data to and from on-premises, in-cloud, and other sources and targets. ADF can serve as a full data pipeline system, as described here. + +
+ +
+ +A full description of Azure Data Factory is here. + +

Data Pipelines using Apache Spark

+ +Apache Spark is an analytics engine for large-scale data. It can be used with data stored in HDFS, and has connectors to work with data in SQL Server as well. + +
+

+
+ +While Spark is used for all phases of the data processing lifecycle and can compliment and extend the capabilities of SQL Server, it is also often used to ingest and transform data as a data pipeline. An important concept to keep in mind when you ingest data using Spark is that Spark has three main data storage representations it works with once they are ingested: + + - RDD (2011): Distribution of JVM objects, Functional Operators (map, filter, etc) + - DataFrame (2013): Distribution of Row objects, Expression-based operations and UDF’s, Logical plans and an optimizer, Fast, efficient internal representations + - Dataset (2015): Internally rows, externally JVM objects – type-safe + fast, Slower than DF’s, not as suited for interactive analysis + +You can learn more about these data representations here. You'll see an example of ingesting data using Apache Spark in the Operationalization module. + +
+

+
+ +

For Further Study

+
+ + + +

Next Steps

+ +Next, Continue to SQL Server big data cluster Components. diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/02 - SQL Server BDC Components.md b/sqlserver2019bigdataclusters/SQL2019BDC/02 - SQL Server BDC Components.md index 663607f8..4e26726a 100644 --- a/sqlserver2019bigdataclusters/SQL2019BDC/02 - SQL Server BDC Components.md +++ b/sqlserver2019bigdataclusters/SQL2019BDC/02 - SQL Server BDC Components.md @@ -1,225 +1,231 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) - -#### A Microsoft Course from the SQL Server team - -

- -

SQL Server big data cluster Components

- -In this workshop you'll cover using a Process and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. - -(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) - -You'll cover the following topics in this Module: - -
- -
2.0 SQL Server Big Data Capabilities
-
2.1 Data Virtualization
-
2.2 SQL Server 2019 big data cluster Components - Data Virtualization, Data Marts and Data Lakes
- -
- -

- -

2.0 SQL Server Big Data Capabilities

- -SQL Server (starting with version 2019) provides three ways to work with large sets of data: - - - **Data Virtualization**: Query multiple sources of data technologies using the Polybase SQL Server feature (data left at source) - - **Storage Pools**: Create sets of disparate data sources that can be queried as a single "Data Mart" (data ingested into sharded databases using PolyBase) - - **SQL Server big data cluster**: Create, manage and control clusters of SQL Server Instances that co-exist in a Kubernetes cluster with Apache Spark and other technologies to access and process large sets of data (Data left in place, ingested through PolyBase, and into/through HDFS) - -Each of these functions are available separately based on the requirements of your solution. You'll cover each of these components in the sections that follow, and learn more about how each is used within the SQL Server big data cluster (BDC). - -

2.1 Data Virtualization

- -In both a Stand-Alone Instance configuration and within the SQL Server big data cluster (BDC) configuration, you can use a series of *Connectors* to query data using the PolyBase feature. PolyBase enables your SQL Server instance to process Transact-SQL queries that read data from external data sources. Starting in SQL Server 2019, you can access external data in Hadoop, Azure Blob Storage and also external data in SQL Server, Oracle, Teradata, and MongoDB - as well as Generic ODBC sources. PolyBase pushes as much of the query as possible to the source system, which optimizes the query. - -
- -
- -To leverage PolyBase, you first define the external table using a specific set of statements, then configure the connection and security, and then use standard Transact-SQL statements work with the data as if it were an standard SQL Server table. The components used in this configuration are as Follows: - -Components used in Data Virtualization - - - - - - -
The PolyBase Feature in SQL Server 2019Enables your SQL Server instance to process Transact-SQL queries that read data from external data sources.
Oracle Java SE Runtime Environment (JRE)Creates and runs HDFS Java jobs at the external tables
- -
-

Activity: Review PolyBase Solution

- -In this section you will review the solution tutorial you will perform in the 04 Operationalization Module. You'll see how to create a reference to an HDFS file store and query it within SQL Server as if it were a standard internal table. - -
-

Open this reference and locate numbers 4-5 of the steps in the tutorial. This explains the two steps required to create and query an External table.

- -
-

-
- -

2.2 SQL Server 2019 big data cluster Components

- -The Big Data capabilities for SQL Server can be used in a stand-alone Instance by leveraging the Data Virtualization feature described above. To perform scale-out Big Data, SQL Server implements a big data cluster by leveraging Kubernetes with several other components. - -
- -
- -SQL Server big data clusters can be installed in three ways: - - - Locally for Testing - - In a Cloud Service - - On premises - -These architectures are not mutually exclusive - you can install some components on-premises, and others as a service. Your connections can interconnect across these environments. You'll explore more about installing SQL Server BDC in the 03 Planning, Installation and Configuration module. - -

Control Plane: Kubernetes Components

- -As you saw in the Big Data Landscape Module of this workshop, there are multiple components within Kubernetes that work with the SQL Server big data cluster. These components are used to manage and monitor the solution: - - - - - - - - - - -
Kubernetes Master NodeA dedicated Node within the Kubernetes Cluster that Manages and Controls the Kubernetes Cluster. In addition to the Master Node, controlling services installed on each Node include kublet, kube-proxy and the Docker runtime engine.
Apache KnoxThe Apache Knox Gateway is an Application Gateway for interacting with the REST APIs and UIs of the cluster. The Knox Gateway provides a single access point for all REST interactions in BDC's.
Apache LivyApache Livy is used to submit Jobs to Apache Spark.
Apache HIVE A distributed storage database used for Spark meta-data.
GrafanaVisualization and dashboard system used by the SQL Cluster Administration Portal.
KibanaKibana is an open source data visualization plugin used by the SQL Cluster Administration Portal.
- -

Control Plane: Controller Service

- -The Controller in a SQL Server BDC is a service that is deployed with the mssqlctl utility. It bridges the interactions with SQL Server, Kubernetes, Spark and HDFS. - -The controller service provides the following core functionality: - - - Manage cluster lifecycle: cluster bootstrap & delete, update configurations - - Manage master SQL Server instances - - Manage compute, data, and storage pools - - Expose monitoring tools to observe the state of the cluster - - Expose troubleshooting tools to detect and repair unexpected issues - - Manage cluster security: ensure secure cluster endpoints, manage users and roles, configure credentials for intra-cluster communication - - Manage the workflow of upgrades so that they are implemented safely - - Manage high availability and DR for statefull services in the cluster - -You have two ways of working with the Controller service: the mssqlctl utility, and the Cluster Adminnstration Portal. All communication to the controller service is conducted via a REST API over HTTPS. A self-signed certificate will be automatically generated for you at bootstrap time. Authentication to the controller service endpoint is based on username and password. These credentials are provisioned at cluster bootstrap time using the input for environment variables CONTROLLER_USERNAME and CONTROLLER_PASSWORD. - -These components are used in the Controller of the SQL Server big data cluster: - - - - - -
SQL Server 2019 Controller ServiceThe controller hosts the core logic for deploying and managing a big data cluster.
- -

Control Plane: SQL Server Master Instance

- -The SQL Server Master Instance is an installation of SQL Server 2019 in a Pod on a Node in the Kubernetes cluster. You access it the same way as any SQL Server Instance, and use it for high-value, OLTP, OLAP or other types of workloads. It has Machine Learning Services already configured, so you have the full range of R, Python, and Java to work with on the data in the Cluster environment. - -In addition, the Master Instance stores meta-data which is outside the scope of the meta-data HIVE is storing. It also contains the PolyBase definition tables. - -These components are used in the Controller of the SQL Server Master Instance: - - - - - - -
SQL Server 2019 Master InstanceThe SQL Server master instance provides an externally accessible TDS endpoint for the cluster.
SQL Server extensibility frameworkUsed for executing Machine Learning and other functionality in Java, R and Python code in SQL Server.
- - -

Compute Plane: Compute Pool

- -The Compute Pool holds one or more SQL Server Pods used for distributed processing under the direction of the SQL Server Master Instance. It makes the calls out to the PolyBase connectors for a distributed Compute layer of the BDC. - -These components are used in the Compute Pool of the SQL Server big data cluster: - - - - - -
SQL Server 2019Provides scale-out computational resources for a big data cluster.
- -

Compute Plane: App Pool

- -The App Pool is a set of Pods within a Node that hold multiple types of end-points into the system. SQL Server Integration Services lives in the App Pool, and other Job systems are possible. You could instatiate a long-running job (such as IoT streaming) or Machine Learning (ML) endpoints used for scoring a prediction or returning a classification. - -These components are used in the Compute Pool of the SQL Server big data cluster: - - - - - -
Kubernetes NodeProvides computational resources for Operationalizing a big data cluster.
- -

Data Plane: Data Pool

- -The Data Pool in a SQL Server big data cluster consists of one or more SQL Server data pool instances. SQL data pool instances provide persistent SQL Server storage for the cluster. A data pool is used to ingest data from SQL queries or Spark jobs. To provide better performance across large data sets, data in a data pool is distributed into shards across the member SQL data pool instances. - -
- -
- -These components are used in the Data Pool of the SQL Server big data cluster: - - - - - - -
SQL ServerProvides scaled data storage a big data cluster.
Polybase FeatureUsed for working with external tables.
- -

Data Plane: Storage Pool

- -The storage pool consists of storage nodes comprised of SQL Server on Linux, Spark, and HDFS. All the storage nodes in a SQL big data cluster are members of an HDFS cluster. You can use these as a "Data Lake" construct to work with large sets of data stored on disparate data sources. - -Inside the Storage Pool, the Storage nodes are responsible for data ingestion through Spark, data storage in HDFS (Parquet format). HDFS also provides data persistency, as HDFS data is spread across all the storage nodes in the SQL big data cluster. The Storage Nodes also provide data access through HDFS and SQL Server endpoints. - -
- -
- -These components are used in the Storage Pool of the SQL Server big data cluster: - - - - - - -
HDFSThe distributed data storage system used by SQL Server and Apache Spark.
Apache SparkApache Spark is an analytics engine for processing large-scale data. It can be used with data stored in HDFS, and has connectors to work with data in SQL Server as well.
- -
-

Activity: Review Data Pool Solution

- -In this section you will review the solution tutorial you will perform in the 04 Operationalization Module. You'll see how to load data into the Data Pool. - -
-

Open this reference and review the steps in the tutorial. This explains the two steps required to create and load an External table in the Data Pool.

- -
-

-
- -

For Further Study

- - -

Next Steps

- -Next, Continue to Planning, Installation and Configuration. +![](../graphics/microsoftlogo.png) + +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) + +#### A Microsoft Course from the SQL Server team + +

+ +

SQL Server big data cluster Components

+ +In this workshop you'll cover using a Process and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. + +(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) + +You'll cover the following topics in this Module: + +
+ +
2.0 SQL Server Big Data Capabilities
+
2.1 Data Virtualization
+
2.2 SQL Server 2019 big data cluster Components - Data Virtualization, Data Marts and Data Lakes
+ +
+ +

+ +

2.0 SQL Server Big Data Capabilities

+ +SQL Server (starting with version 2019) provides three ways to work with large sets of data: + + - **Data Virtualization**: Query multiple sources of data technologies using the Polybase SQL Server feature (data left at source) + - **Storage Pools**: Create sets of disparate data sources that can be queried as a single "Data Mart" (data ingested into sharded databases using PolyBase) + - **SQL Server big data cluster**: Create, manage and control clusters of SQL Server Instances that co-exist in a Kubernetes cluster with Apache Spark and other technologies to access and process large sets of data (Data left in place, ingested through PolyBase, and into/through HDFS) + +Each of these functions are available separately based on the requirements of your solution. You'll cover each of these components in the sections that follow, and learn more about how each is used within the SQL Server big data cluster (BDC). + +

2.1 Data Virtualization

+ +In both a Stand-Alone Instance configuration and within the SQL Server big data cluster (BDC) configuration, you can use a series of *Connectors* to query data using the PolyBase feature. PolyBase enables your SQL Server instance to process Transact-SQL queries that read data from external data sources. Starting in SQL Server 2019, you can access external data in Hadoop, Azure Blob Storage and also external data in SQL Server, Oracle, Teradata, and MongoDB - as well as Generic ODBC sources. PolyBase pushes as much of the query as possible to the source system, which optimizes the query. + +
+ +
+ +To leverage PolyBase, you first define the external table using a specific set of statements, then configure the connection and security, and then use standard Transact-SQL statements work with the data as if it were an standard SQL Server table. The components used in this configuration are as Follows: + +Components used in Data Virtualization + + + + + + +
The PolyBase Feature in SQL Server 2019Enables your SQL Server instance to process Transact-SQL queries that read data from external data sources.
Oracle Java SE Runtime Environment (JRE)Creates and runs HDFS Java jobs at the external tables
+ +
+

Activity: Review PolyBase Solution

+ +In this section you will review the solution tutorial you will perform in the 04 Operationalization Module. You'll see how to create a reference to an HDFS file store and query it within SQL Server as if it were a standard internal table. + +
+

Open this reference and locate numbers 4-5 of the steps in the tutorial. This explains the two steps required to create and query an External table.

+ +
+

+
+ +

2.2 SQL Server 2019 big data cluster Components

+ +The Big Data capabilities for SQL Server can be used in a stand-alone Instance by leveraging the Data Virtualization feature described above. To perform scale-out Big Data, SQL Server implements a big data cluster by leveraging Kubernetes with several other components. + +
+ +
+ +SQL Server big data clusters can be installed in three ways: + + - Locally for Testing + - In a Cloud Service + - On premises + +These architectures are not mutually exclusive - you can install some components on-premises, and others as a service. Your connections can interconnect across these environments. You'll explore more about installing SQL Server BDC in the 03 Planning, Installation and Configuration module. + +

Control Plane: Kubernetes Components

+ +As you saw in the Big Data Landscape Module of this workshop, there are multiple components within Kubernetes that work with the SQL Server big data cluster. These components are used to manage and monitor the solution: + + + + + + + + + + +
Kubernetes Master NodeA dedicated Node within the Kubernetes Cluster that Manages and Controls the Kubernetes Cluster. In addition to the Master Node, controlling services installed on each Node include kublet, kube-proxy and the Docker runtime engine.
Apache KnoxThe Apache Knox Gateway is an Application Gateway for interacting with the REST APIs and UIs of the cluster. The Knox Gateway provides a single access point for all REST interactions in BDC's.
Apache LivyApache Livy is used to submit Jobs to Apache Spark.
Apache HIVE A distributed storage database used for Spark meta-data.
GrafanaVisualization and dashboard system used by the SQL Cluster Administration Portal.
KibanaKibana is an open source log visualization and search plugin used by the SQL Cluster Administration Portal.
+ +

Control Plane: Controller Service

+ +The Controller in a SQL Server BDC is a service that is deployed with the mssqlctl utility. It bridges the interactions with SQL Server, Kubernetes, Spark and HDFS. + +The controller service provides the following core functionality: + + - Manage cluster lifecycle: cluster bootstrap & delete, update configurations + - Manage master SQL Server instances + - Manage compute, data, and storage pools + - Expose monitoring tools to observe the state of the cluster + - Expose troubleshooting tools to detect and repair unexpected issues + - Manage cluster security: ensure secure cluster endpoints, manage users and roles, configure credentials for intra-cluster communication + - Manage the workflow of upgrades so that they are implemented safely + - Manage high availability and DR for statefull services in the cluster + +You have two ways of working with the Controller service: the mssqlctl utility, and the Cluster Adminnstration Portal. All communication to the controller service is conducted via a REST API over HTTPS. A self-signed certificate will be automatically generated for you at bootstrap time. Authentication to the controller service endpoint is based on username and password. These credentials are provisioned at cluster bootstrap time using the input for environment variables CONTROLLER_USERNAME and CONTROLLER_PASSWORD. + +These components are used in the Controller of the SQL Server big data cluster: + + + + + +
SQL Server 2019 Controller ServiceThe controller hosts the core logic for deploying and managing a big data cluster.
+ +

Control Plane: SQL Server Master Instance

+ +The SQL Server Master Instance is an installation of SQL Server 2019 in a Pod on a Node in the Kubernetes cluster. You access it the same way as any SQL Server Instance, and use it for high-value, OLTP, OLAP or other types of workloads. It has Machine Learning Services already configured, so you have the full range of R, Python, and Java to work with on the data in the Cluster environment. + +The Master Instance stores meta-data which is outside the scope of the meta-data HIVE is storing. It also contains the PolyBase definition tables, and in addition to the standard SQL Server system databases, the SQL master instance also contains the following: + +- A metadata database that holds HDFS-table metadata +- A data plane shard map +- Details of external tables that provide access to the cluster data plane. +- PolyBase external data sources and external tables defined in user databases. + + +These components are used in the Controller of the SQL Server Master Instance: + + + + + + +
SQL Server 2019 Master InstanceThe SQL Server master instance provides an externally accessible TDS endpoint for the cluster.
SQL Server extensibility frameworkUsed for executing Machine Learning and other functionality in Java, R and Python code in SQL Server.
+ + +

Compute Plane: Compute Pool

+ +The Compute Pool holds one or more SQL Server Pods used for distributed processing under the direction of the SQL Server Master Instance. It makes the calls out to the PolyBase connectors for a distributed Compute layer of the BDC. + +These components are used in the Compute Pool of the SQL Server big data cluster: + + + + + +
SQL Server 2019Provides scale-out computational resources for a big data cluster.
+ +

Compute Plane: App Pool

+ +The App Pool is a set of Pods within a Node that hold multiple types of end-points into the system. SQL Server Integration Services lives in the App Pool, and other Job systems are possible. You could instatiate a long-running job (such as IoT streaming) or Machine Learning (ML) endpoints used for scoring a prediction or returning a classification. + +These components are used in the Compute Pool of the SQL Server big data cluster: + + + + + +
Kubernetes NodeProvides computational resources for Operationalizing a big data cluster.
+ +

Data Plane: Data Pool

+ +The Data Pool in a SQL Server big data cluster consists of one or more SQL Server data pool instances. SQL data pool instances provide persistent SQL Server storage for the cluster. A data pool is used to ingest data from SQL queries or Spark jobs. To provide better performance across large data sets, data in a data pool is distributed into shards across the member SQL data pool instances. + +
+ +
+ +These components are used in the Data Pool of the SQL Server big data cluster: + + + + + + +
SQL ServerProvides scaled data storage a big data cluster.
Polybase FeatureUsed for working with external tables.
+ +

Data Plane: Storage Pool

+ +The storage pool consists of storage nodes comprised of SQL Server on Linux, Spark, and HDFS. All the storage nodes in a SQL big data cluster are members of an HDFS cluster. You can use these as a "Data Lake" construct to work with large sets of data stored on disparate data sources. + +Inside the Storage Pool, the Storage nodes are responsible for data ingestion through Spark, data storage in HDFS (Parquet format). HDFS also provides data persistency, as HDFS data is spread across all the storage nodes in the SQL big data cluster. The Storage Nodes also provide data access through HDFS and SQL Server endpoints. + +
+ +
+ +These components are used in the Storage Pool of the SQL Server big data cluster: + + + + + + +
HDFSThe distributed data storage system used by SQL Server and Apache Spark.
Apache SparkApache Spark is an analytics engine for processing large-scale data. It can be used with data stored in HDFS, and has connectors to work with data in SQL Server as well.
+ +
+

Activity: Review Data Pool Solution

+ +In this section you will review the solution tutorial you will perform in the 04 Operationalization Module. You'll see how to load data into the Data Pool. + +
+

Open this reference and review the steps in the tutorial. This explains the two steps required to create and load an External table in the Data Pool.

+ +
+

+
+ +

For Further Study

+ + +

Next Steps

+ +Next, Continue to Planning, Installation and Configuration. diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/03 - Planning, Installation and Configuration.md b/sqlserver2019bigdataclusters/SQL2019BDC/03 - Planning, Installation and Configuration.md index b89206b9..670a998c 100644 --- a/sqlserver2019bigdataclusters/SQL2019BDC/03 - Planning, Installation and Configuration.md +++ b/sqlserver2019bigdataclusters/SQL2019BDC/03 - Planning, Installation and Configuration.md @@ -1,147 +1,148 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) - -#### A Microsoft workshop from the SQL Server team - -

- -

Planning, Installation and Configuration

- -In this workshop you'll cover using a Process and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. - -(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) - -You'll cover the following topics in this Module: - -
- -
3.0 Planning your Installation
-
3.1 Installing on Azure Kubernetes Service
-
3.2 Installing locally using KubeADM
-
3.3 Installing locally using minikube
-
Install Class Environment on AKS
- -
- -

- -

3.0 Planning your Installation

- -NOTE: The following Module is based on the Private Preview of the Microsoft SQL Server 2019 big data cluster feature. These instructions will change as the product is updated for the final release. The latest installation instructions are located here. - -A SQL Server big data cluster (BDC) is deployed onto a Kubernetes Cluster using the mssqlctl utility which creates the appropriate Docker Containers and other constructs. The installation uses various switches on the mssqlctl utility, and reads from several environment variables which you will define before you run the command. - -For planning, it is essential that you understand the SQL Server BDC components, and have a firm understanding of Kubernetes and TCP/IP networking. You should also have an understanding of how SQL Server and Apache Spark use the "Big Four" (*CPU, I/O, Memory and Networking*). - -Since the Kubernetes Cluster is often made up of Virtual Machines that host the Docker Images, they must be as large as possible. For the best possible performance, large physical machines that are tuned for optimal performance is a recommended physical architecture. - -You can deploy Kubernetes in three general ways: - - In a Cloud Platform such as Azure Kubernetes Service (AKS) - - - In your own Kubernetes deployment using KubeADM - - - In your own Kubernetes deployment using minikube (*to be used only for training and testing*) - -Regardless of the Kubernetes target, the general steps for setting up the system are: - - - Set up Kubernetes cluster - - - Install the cluster configuration tool mssqlctl on the administration machine - - - Deploy the SQL Server big data cluster on the Kubernetes cluster - -In the sections that follow, you'll cover the general process for each of these deployments. The official documentation referenced above have the specific steps for each deployment, and the Activity section of this Module has the steps for deploying the BDC on AKS for the classroom enviornment. - -

- -

3.1 Installing on Azure Kubernetes Service

- -The Azure Kubernetes Service provides the ability to create a Kubernetes cluster in the Azure portal, with the Azure CLI, or template driven deployment options such as Resource Manager templates and Terraform. When you deploy an AKS cluster, the Kubernetes master and all nodes are deployed and configured for you. Additional features such as advanced networking, Azure Active Directory integration, and monitoring can also be configured during the deployment process. - -An AKS cluster is divided into two components: The *Cluster master nodes* which provide the core Kubernetes services and orchestration of application workloads; and the *Nodes* which run your application workloads. - -
- -
- -The cluster master includes the following core Kubernetes components: - - - *kube-apiserver* - The API server is how the underlying Kubernetes APIs are exposed. This component provides the interaction for management tools, such as kubectl or the Kubernetes dashboard. - - - *etcd* - To maintain the state of your Kubernetes cluster and configuration, the highly available etcd is a key value store within Kubernetes. - - - *kube-scheduler* - When you create or scale applications, the Scheduler determines what nodes can run the workload and starts them. - - - *kube-controller-manager* - The Controller Manager oversees a number of smaller Controllers that perform actions such as replicating pods and handling node operations. - -The Nodes include the following components: - - - The *kubelet* is the Kubernetes agent that processes the orchestration requests from the cluster master and scheduling of running the requested containers. - - - Virtual networking is handled by the *kube-proxy* on each node. The proxy routes network traffic and manages IP addressing for services and pods. - - - The *container runtime* is the component that allows containerized applications to run and interact with additional resources such as the virtual network and storage. In AKS, Docker is used as the container runtime. - -
- -
- -For a SQL Server BDC in an AKS environment, for an optimal experience while validating basic scenarios, you should use at least three agent VMs with at least 4 vCPUs and 32 GB of memory each. - -With this background, you can find the latest specific steps to deploy a SQL Server big data cluster on AKS here. - -

- -

3.2 Installing Locally Using KubeADM

- -The kubeadm toolbox helps you bootstrap a Kubernetes cluster that conforms to best practices. Kubeadm also supports other cluster lifecycle functions, such as upgrades, downgrade, and managing bootstrap tokens. - -The kubeadm toolbox can deploy a Kubernetes cluster to physical or virtual machines. It works by specifying the TCP/IP addresses of the targets. - -With this background, you can find the latest specific steps to deploy a SQL Server big data cluster using kubeadm here. - -

- -

3.3 Installing Locally Using minikube

- -Minikube is a tool that simplifies creating and running Kubernetes locally. Minikube creates a single-node Kubernetes cluster inside a VM. It uses Hyper-V, VirtualBox, or other Hypervisor products to create and operate the cluster. - -While SQL Server BDC can be installed on minikube, it requires at least 32GB of RAM to run, and really needs 64GB of RAM or more to perform any real testing. In any case, it is reserved only for testing or learning. - -Minikube supports the following Kubernetes features: - - - DNS - - NodePorts - - ConfigMaps and Secrets - - Dashboards - - Container Runtime: Docker, rkt, CRI-O and containerd - - Enabling CNI (Container Network Interface) - - Data Ingress - -With this background, you can find the latest specific steps to deploy a SQL Server big data cluster using minikube here. - -

- -

Activity: Check Class Environment on AKS

- -In this lab you will check your deployment you performed in Module 01 of a SQL Server 2019 big data cluster on the Azure Kubernetes Service. - -Using the following steps, you will evaluate your Resource Group in Azure that holds your BDC on AKS that you deployed earlier. When you complete your course you can delete this Resource Group which will stop the Azure charges for this course. - -Steps - -

Log in to the Azure Portal, and locate the Resource Groups deployed for the AKS cluster. How many do you find? What do you think their purposes are?

- -
-

-
- -

For Further Study

- - -

Next Steps

- -Next, Continue to Operationalization. +![](../graphics/microsoftlogo.png) + +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) + +#### A Microsoft workshop from the SQL Server team + +

+ +

Planning, Installation and Configuration

+ +In this workshop you'll cover using a Process and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. + +(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) + +You'll cover the following topics in this Module: + +
+ +
3.0 Planning your Installation
+
3.1 Installing on Azure Kubernetes Service
+
3.2 Installing locally using KubeADM
+
3.3 Installing locally using minikube
+
Install Class Environment on AKS
+ +
+ +

+ +

3.0 Planning your Installation

+ +NOTE: The following Module is based on the Private Preview of the Microsoft SQL Server 2019 big data cluster feature. These instructions will change as the product is updated for the final release. The latest installation instructions are located here. + +A SQL Server big data cluster (BDC) is deployed onto a Kubernetes Cluster using the `mssqlctl` utility which creates the appropriate Docker Containers and other constructs for the system. The installation uses various switches on the `mssqlctl` utility, and reads from several environment variables which you will define before you run the command. Note that these environment variables will be replaced with a different system at General Availability (GA) release. + +For planning, it is essential that you understand the SQL Server BDC components, and have a firm understanding of Kubernetes and TCP/IP networking. You should also have an understanding of how SQL Server and Apache Spark use the "Big Four" (*CPU, I/O, Memory and Networking*). + +Since the Kubernetes Cluster is often made up of Virtual Machines that host the Docker Images, they must be as large as possible. For the best possible performance, large physical machines that are tuned for optimal performance is a recommended physical architecture. The least viable production system is a Minimum of 3 Linux physical machines or virtual machines. The recommended configuration per machine is 8 CPUs, 32 GB of memory and 100GB of storage. This configuration would support only one or two users with a standard workload, and you would want to increase the system for each additional user or heavier workload. + + +You can deploy Kubernetes in three general ways: + - In a Cloud Platform such as Azure Kubernetes Service (AKS) + + - In your own Kubernetes deployment using KubeADM + + - In your own Kubernetes deployment using minikube (*to be used only for training and testing*) + +Regardless of the Kubernetes target, the general steps for setting up the system are: + + - Set up Kubernetes cluster + + - Install the cluster configuration tool `mssqlctl` on the administration machine + + - Deploy the SQL Server big data cluster onto the Kubernetes cluster + +In the sections that follow, you'll cover the general process for each of these deployments. The official documentation referenced above have the specific steps for each deployment, and the Activity section of this Module has the steps for deploying the BDC on AKS for the classroom enviornment. + +

+ +

3.1 Installing on Azure Kubernetes Service

+ +The Azure Kubernetes Service provides the ability to create a Kubernetes cluster in the Azure portal, with the Azure CLI, or template driven deployment options such as Resource Manager templates and Terraform. When you deploy an AKS cluster, the Kubernetes master and all nodes are deployed and configured for you. Additional features such as advanced networking, Azure Active Directory integration, and monitoring can also be configured during the deployment process. + +An AKS cluster is divided into two components: The *Cluster master nodes* which provide the core Kubernetes services and orchestration of application workloads; and the *Nodes* which run your application workloads. + +
+ +
+ +The cluster master includes the following core Kubernetes components: + + - *kube-apiserver* - The API server is how the underlying Kubernetes APIs are exposed. This component provides the interaction for management tools, such as kubectl or the Kubernetes dashboard. + + - *etcd* - To maintain the state of your Kubernetes cluster and configuration, the highly available etcd is a key value store within Kubernetes. + + - *kube-scheduler* - When you create or scale applications, the Scheduler determines what nodes can run the workload and starts them. + + - *kube-controller-manager* - The Controller Manager oversees a number of smaller Controllers that perform actions such as replicating pods and handling node operations. + +The Nodes include the following components: + + - The *kubelet* is the Kubernetes agent that processes the orchestration requests from the cluster master and scheduling of running the requested containers. + + - Virtual networking is handled by the *kube-proxy* on each node. The proxy routes network traffic and manages IP addressing for services and pods. + + - The *container runtime* is the component that allows containerized applications to run and interact with additional resources such as the virtual network and storage. In AKS, Docker is used as the container runtime. + +
+ +
+ +For a SQL Server BDC in an AKS environment, for an optimal experience while validating basic scenarios, you should use at least three agent VMs with at least 4 vCPUs and 32 GB of memory each. + +With this background, you can find the latest specific steps to deploy a SQL Server big data cluster on AKS here. + +

+ +

3.2 Installing Locally Using KubeADM

+ +The kubeadm toolbox helps you bootstrap a Kubernetes cluster that conforms to best practices. Kubeadm also supports other cluster lifecycle functions, such as upgrades, downgrade, and managing bootstrap tokens. + +The kubeadm toolbox can deploy a Kubernetes cluster to physical or virtual machines. It works by specifying the TCP/IP addresses of the targets. + +With this background, you can find the latest specific steps to deploy a SQL Server big data cluster using kubeadm here. + +

+ +

3.3 Installing Locally Using minikube

+ +Minikube is a tool that simplifies creating and running Kubernetes locally. Minikube creates a single-node Kubernetes cluster inside a VM. It uses Hyper-V, VirtualBox, or other Hypervisor products to create and operate the cluster. + +While SQL Server BDC can be installed on minikube, it requires at least 32GB of RAM to run, and really needs 64GB of RAM or more to perform any real testing. In any case, it is reserved only for testing or training. + +Minikube supports the following Kubernetes features: + + - DNS + - NodePorts + - ConfigMaps and Secrets + - Dashboards + - Container Runtime: Docker, rkt, CRI-O and containerd + - Enabling CNI (Container Network Interface) + - Data Ingress + +With this background, you can find the latest specific steps to deploy a SQL Server big data cluster using minikube here. + +

+ +

Activity: Check Class Environment on AKS

+ +In this lab you will check your deployment you performed in Module 01 of a SQL Server 2019 big data cluster on the Azure Kubernetes Service. + +Using the following steps, you will evaluate your Resource Group in Azure that holds your BDC on AKS that you deployed earlier. When you complete your course you can delete this Resource Group which will stop the Azure charges for this course. + +Steps + +

Log in to the Azure Portal, and locate the Resource Groups deployed for the AKS cluster. How many do you find? What do you think their purposes are?

+ +
+

+
+ +

For Further Study

+ + +

Next Steps

+ +Next, Continue to Operationalization. diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/04 - Operationalization.md b/sqlserver2019bigdataclusters/SQL2019BDC/04 - Operationalization.md index b40cf394..9df86ef6 100644 --- a/sqlserver2019bigdataclusters/SQL2019BDC/04 - Operationalization.md +++ b/sqlserver2019bigdataclusters/SQL2019BDC/04 - Operationalization.md @@ -1,156 +1,156 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) - -#### A Microsoft Course from the SQL Server team - -

- -

Operationalization

- -In this workshop you'll cover using a Process and and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. - -(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) - -You'll cover the following topics in this Module: - -
-
4.0 End-To-End Solution for big data clusters
-
4.1 Data Virtualization
-
4.2 Creating a Data Mart using big data clusters
-
4.3 Querying HDFS Data using big data clusters
-
- -
-

-
- -

4.0 End-To-End Solution for big data clusters

- -Recall from The Big Data Landscape module that you learned about the Wide World Importers company. Wide World Importers (WWI) is a traditional brick and mortar business with a long track record of success, generating profits through strong retail store sales of their unique offering of affordable products from around the world. They have a traditional N-tier application that uses a front-end (mobile, web and installed) that interacts with a scale-out middle-tier software product, which in turn stores data in a large SQL Server database that has been scaled-up to meet demand. - -
- -
- -WWI has now added web and mobile commerce to their platform, which has generated a significant amount of additional data, and data formats. These new platforms were added without integrating into the OLTP system data or Business Intelligence infrastructures. As a result, "silos" of data stores have developed, and ingesting all of this data exceeds the scale of their current RDBMS server: - -
- -
- -This presented the following four challenges - the IT team at WWI needs to: - - - Scale data systems to reach more consumers - - - Unlock business insights from multiple sources of structured and unstructured data - - - Apply deep analytics with high-performance responses - - - Enable AI into apps to actively engage with customers - -
-

-
- -

Solution - Challenge 1: Scale Data System

- -To meet these challenges, the following solution is proposed. Using the SQL Server 2019 big data cluster platform you learned about in the 02 - SQL Server BDC Components Module, the solution allows the company to keep it's current codebase, while enabling a flexible scale-out architecture. This answers the first challenge of working with a scale-out system for larger data environments. - -The following diagram illustrates the complete solution that you can use to brief your audience with: - -
- -
- -In the following sections you'll dive deeper into how this scale is used to solve the rest of the challenges. - -

- -

4.1 Data Virtualization - Challenge 2: Multiple Data Sources

- -The next challenge the IT team must solve is to enable a single data query to work across multiple disparate systems, optionally joining to internal SQL Server Tables, and also at scale. - -Using the Data Virtualization capability you saw in the 02 - SQL Server BDC Components Module, the IT team creates External Tables using the PolyBase feature. These External Table definitions are stored in the database on the SQL Server Master Instance within the cluster. When queried by the user, the queries are engaged from the SQL Server Master Instance through the Compute Pool in the SQL Server BDC, which holds Kubernetes Nodes containing the Pods running SQL Server Instances. These Instances send the query to the PolyBase Connector at the target data system, which processes the query based on the type of target system. The results are processed and returned through the PolyBase Connector to the Compute Pool and then on to the Master Instance, and then on to the user. - -
- -
- -This process allows not only a query to disparate systems, but also those remote systems can hold extremely large sets of data. Normally you are querying a subset of that data, so the results are all that are sent back over the network. These results can be joined with internal tables for a single view, and all from within the same Transact-SQL statements. - -

Activity: Load and query data in an External Table

- -In this activity, you will load the sample data into your big data cluster environment, and then create and use an External table to query the data in HDFS. This process is similar to connecting to any Polybase target. - -Steps - -

Open this reference, and perform all of the instructions you see there. This loads your data in preparattion for the next Activity.

-

Open this reference, and perform all of the instructions you see there. This step shows you how to create and query an External table.

-

Open this reference, and review the instructions you see there. (You will not have to perform these steps, unless you wish to set up an Oracle server that your BDC can reach)

- -
-

-
- -

4.2 Creating a Data Mart using big data cluster - Challenge 3: Deep Analytics

- -Ad-hoc queries are very useful for many scenarios. There are times when you would like to bring the data into storage, so that you can create denormalized representations of datasets, aggregated data, and other purpose-specific data tasks. Storing data in this fashion is called a "Data Mart". - -
- -
- -Using the Data Virtualization capability you saw in the 02 - SQL Server BDC Components Module, the IT team creates External Tables using PolyBase statements. These External Table definitions are stored in the database on the SQL Server Master Instance within the cluster. When queried by the user, the queries are engaged from the SQL Server Master Instance through the Compute Pool in the SQL Server BDC, which holds Kubernetes Nodes containing the Pods running SQL Server Instances. These Instances send the query to the PolyBase Connector at the target data system, which processes the query based on the type of target system. The results are processed and returned through the PolyBase Connector to the Compute Pool and then on to the Master Instance, and the PolyBase statements can specify the target of the Data Pool. The SQL Server Instances in the Data Pool store the data in a distributed fashion across multiple databases, called Shards. - -

Activity: Load and query data into the Data Pool

- -In this activity, you will load the sample data into your big data cluster environment, and then create and use an External table to load data into the Data Pool. - -Steps - -

Open this reference, and perform the instructions you see there. This loads data into the Data Pool.

-
-

-
- -

4.3 Querying HDFS Data using big data cluster - Challenge 4: Enable AI

- -There are three primary uses for a large cluster of data processing systems for Machine Learning and AI applications. The first is that the users will involved in the creation of the Features used in various ML and AI algorithms, and are often tasked to Label the data. These users can access the Data Pool and Data Storage data stores directly to query and assist with this task. - -The SQL Server Master Instance in the BDC installs with Machine Learning Services, which allow creation, training, evaluation and presisting of Machine Learning Models. Data from all parts of the BDC are available, and Data Science oriented languages and libraries in R, Python and Java are enabled. In this scenario, the Data Scientist creates the R or Python code, and the Transact-SQL Developer wraps that code in a Stored Procedure. This code can be used to train, evaluate and create Machine Learning Models. The Models can be stored in the Master Instance for scoring, or sent on to the App Pool where the Machine Learning Server is running, waiting to accept REST-based calls from applications. - -
- -
- -The Data Scientist has another option to create and train ML and AI models. The Spark platform within the Storage Pool is accessible through the Knox gateway, using Livy to send Spark Jobs as you learned about in the 02 - SQL Server BDC Components Module. This gives access to the full Spark platform, using Jupyter Notebooks (included in Azure Data Studio) or any other standard tools that can access Spark through REST calls. - - -
-

Activity: Load data with Spark, run a Spark Notebook

-
- -In this activity, you will load the sample data into your big data cluster environment using Spark, and use a Notebook in Azure Data Studio to work with it. - -Steps - -

Open this reference, and follow the instructions you see there. This loads the data in preparation for the Notebook operations.

-

Open this reference, and follow the instructions you see there. This simple example shows you how to work with the data you ingested into the Storage Pool using Spark.

- -
-

-
- -

For Further Study

- - -

Next Steps

- +![](../graphics/microsoftlogo.png) + +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) + +#### A Microsoft Course from the SQL Server team + +

+ +

Operationalization

+ +In this workshop you'll cover using a Process and and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. + +(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) + +You'll cover the following topics in this Module: + +
+
4.0 End-To-End Solution for big data clusters
+
4.1 Data Virtualization
+
4.2 Creating a Data Mart using big data clusters
+
4.3 Querying HDFS Data using big data clusters
+
+ +
+

+
+ +

4.0 End-To-End Solution for big data clusters

+ +Recall from The Big Data Landscape module that you learned about the Wide World Importers company. Wide World Importers (WWI) is a traditional brick and mortar business with a long track record of success, generating profits through strong retail store sales of their unique offering of affordable products from around the world. They have a traditional N-tier application that uses a front-end (mobile, web and installed) that interacts with a scale-out middle-tier software product, which in turn stores data in a large SQL Server database that has been scaled-up to meet demand. + +
+ +
+ +WWI has now added web and mobile commerce to their platform, which has generated a significant amount of additional data, and data formats. These new platforms were added without integrating into the OLTP system data or Business Intelligence infrastructures. As a result, "silos" of data stores have developed, and ingesting all of this data exceeds the scale of their current RDBMS server: + +
+ +
+ +This presented the following four challenges - the IT team at WWI needs to: + + - Scale data systems to reach more consumers + + - Unlock business insights from multiple sources of structured and unstructured data + + - Apply deep analytics with high-performance responses + + - Enable AI into apps to actively engage with customers + +
+

+
+ +

Solution - Challenge 1: Scale Data System

+ +To meet these challenges, the following solution is proposed. Using the SQL Server 2019 big data cluster platform you learned about in the 02 - SQL Server BDC Components Module, the solution allows the company to keep it's current codebase, while enabling a flexible scale-out architecture. This answers the first challenge of working with a scale-out system for larger data environments. + +The following diagram illustrates the complete solution that you can use to brief your audience with: + +
+ +
+ +In the following sections you'll dive deeper into how this scale is used to solve the rest of the challenges. + +

+ +

4.1 Data Virtualization - Challenge 2: Multiple Data Sources

+ +The next challenge the IT team must solve is to enable a single data query to work across multiple disparate systems, optionally joining to internal SQL Server Tables, and also at scale. + +Using the Data Virtualization capability you saw in the 02 - SQL Server BDC Components Module, the IT team creates External Tables using the PolyBase feature. These External Table definitions are stored in the database on the SQL Server Master Instance within the cluster. When queried by the user, the queries are engaged from the SQL Server Master Instance through the Compute Pool in the SQL Server BDC, which holds Kubernetes Nodes containing the Pods running SQL Server Instances. These Instances send the query to the PolyBase Connector at the target data system, which processes the query based on the type of target system. The results are processed and returned through the PolyBase Connector to the Compute Pool and then on to the Master Instance, and then on to the user. + +
+ +
+ +This process allows not only a query to disparate systems, but also those remote systems can hold extremely large sets of data. Normally you are querying a subset of that data, so the results are all that are sent back over the network. These results can be joined with internal tables for a single view, and all from within the same Transact-SQL statements. + +

Activity: Load and query data in an External Table

+ +In this activity, you will load the sample data into your big data cluster environment, and then create and use an External table to query the data in HDFS. This process is similar to connecting to any Polybase target. + +Steps + +

Open this reference, and perform all of the instructions you see there. This loads your data in preparattion for the next Activity.

+

Open this reference, and perform all of the instructions you see there. This step shows you how to create and query an External table.

+

(Optional) Open this reference, and review the instructions you see there. (You You must have an Oracle server that your BDC can reach to perform these steps, although you can review them if you do not)

+ +
+

+
+ +

4.2 Creating a Data Mart using big data cluster - Challenge 3: Deep Analytics

+ +Ad-hoc queries are very useful for many scenarios. There are times when you would like to bring the data into storage, so that you can create denormalized representations of datasets, aggregated data, and other purpose-specific data tasks. Storing data in this fashion is called a "Data Mart". + +
+ +
+ +Using the Data Virtualization capability you saw in the 02 - SQL Server BDC Components Module, the IT team creates External Tables using PolyBase statements. These External Table definitions are stored in the database on the SQL Server Master Instance within the cluster. When queried by the user, the queries are engaged from the SQL Server Master Instance through the Compute Pool in the SQL Server BDC, which holds Kubernetes Nodes containing the Pods running SQL Server Instances. These Instances send the query to the PolyBase Connector at the target data system, which processes the query based on the type of target system. The results are processed and returned through the PolyBase Connector to the Compute Pool and then on to the Master Instance, and the PolyBase statements can specify the target of the Data Pool. The SQL Server Instances in the Data Pool store the data in a distributed fashion across multiple databases, called Shards. + +

Activity: Load and query data into the Data Pool

+ +In this activity, you will load the sample data into your big data cluster environment, and then create and use an External table to load data into the Data Pool. + +Steps + +

Open this reference, and perform the instructions you see there. This loads data into the Data Pool.

+
+

+
+ +

4.3 Querying HDFS Data using big data cluster - Challenge 4: Enable AI

+ +There are three primary uses for a large cluster of data processing systems for Machine Learning and AI applications. The first is that the users will involved in the creation of the Features used in various ML and AI algorithms, and are often tasked to Label the data. These users can access the Data Pool and Data Storage data stores directly to query and assist with this task. + +The SQL Server Master Instance in the BDC installs with Machine Learning Services, which allow creation, training, evaluation and presisting of Machine Learning Models. Data from all parts of the BDC are available, and Data Science oriented languages and libraries in R, Python and Java are enabled. In this scenario, the Data Scientist creates the R or Python code, and the Transact-SQL Developer wraps that code in a Stored Procedure. This code can be used to train, evaluate and create Machine Learning Models. The Models can be stored in the Master Instance for scoring, or sent on to the App Pool where the Machine Learning Server is running, waiting to accept REST-based calls from applications. + +
+ +
+ +The Data Scientist has another option to create and train ML and AI models. The Spark platform within the Storage Pool is accessible through the Knox gateway, using Livy to send Spark Jobs as you learned about in the 02 - SQL Server BDC Components Module. This gives access to the full Spark platform, using Jupyter Notebooks (included in Azure Data Studio) or any other standard tools that can access Spark through REST calls. + + +
+

Activity: Load data with Spark, run a Spark Notebook

+
+ +In this activity, you will load the sample data into your big data cluster environment using Spark, and use a Notebook in Azure Data Studio to work with it. + +Steps + +

Open this reference, and follow the instructions you see there. This loads the data in preparation for the Notebook operations.

+

Open this reference, and follow the instructions you see there. This simple example shows you how to work with the data you ingested into the Storage Pool using Spark.

+ +
+

+
+ +

For Further Study

+ + +

Next Steps

+ Next, Continue to Management and Monitoring. \ No newline at end of file diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/05 - Management and Monitoring.md b/sqlserver2019bigdataclusters/SQL2019BDC/05 - Management and Monitoring.md index dfdd0bc5..3ebbfcba 100644 --- a/sqlserver2019bigdataclusters/SQL2019BDC/05 - Management and Monitoring.md +++ b/sqlserver2019bigdataclusters/SQL2019BDC/05 - Management and Monitoring.md @@ -1,145 +1,145 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) - -#### A Microsoft workshop from the SQL Server team - -

- -

Management and Monitoring

-In this workshop you'll cover using a Process and and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. - -(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) - -You'll cover the following topics in this Module: - -
- -
5.0 Managing and Monitoring Your Solution
-
5.1 Using kubectl commands
-
5.2 Using mssqlctl commands
-
5.3 Using the big data cluster Portal
- -
- -

- -

5.0 Managing and Monitoring Your Solution

- -There are two primary areas for monitoring your SQL Server 2019 big data cluster. The first deals with SQL Server 2019, and the second deals with the set of elements in the Cluster. - -For SQL Server, management is much as you would normally perform for any SQL Server system. You have the same type of services, surface points, security areas and other control vectors as in a stand-alone installation of SQL Server. The tools you have avalaible for managing the Master Instance in the SQL Server BDC are the same as managing a stand-alone installation, including SQL Server Management Studio, command-line interfaces, Azure Data Studio, and third party tools. - -For the cluster components, you have three primary interfaces to use, which you will review next. - -

- -

5.1 Using kubectl commands

- -Since the SQL Server big data cluster lives within a Kubernetes cluster, you'll work with the kubectl command to deal with those specific components. The following list is a short version of some of the commands you can use to manage and monitor the SQL Server BDC implementation of a Kubernetes cluster: - - - - - - - - - - - - - - - -
Command Description
az aks get-credentials --name  --resource-group 
Download the Kubernetes cluster configuration file and set the cluster context
kubectl get pods --all-namespaces
Get the status of pods in the cluster for either all namespaces or the big data cluster namespace
kubectl describe pod   -n 
Get a detailed description of a specific pod in json format output. It includes details, such as the current Kubernetes node that the pod is placed on, the containers running within the pod, and the image used to bootstrap the containers. It also shows other details, such as labels, status, and persisted volumes claims that are associated with the pod
kubectl get svc -n 
Get details for the big data cluster services. These details include their type and the IPs associated with respective services and ports. Note that SQL Server big data cluster services are created in a new namespace created at cluster bootstrap time based on the cluster name specified in the mssqlctl create cluster command
kubectl describe pod   -n 
Get a detailed description of a service in json format output. It will include details like labels, selector, IP, external-IP (if the service is of LoadBalancer type), port, etc.
kubectl exec -it   -c  -n  -- /bin/bash 
If existing tools or the infrastructure does not enable you to perform a certain task without actually being in the context of the container, you can log in to the container using kubectl exec command. For example, you might need to check if a specific file exists, or you might need to restart services in the container
- -
kubectl cp pod_name:source_file_path 
-  -c container_name 
-  -n namespace_name 
-  target_local_file_path
- -
Copy files from the container to your local machine. Reverse the source and destination to copy into the container
kubectl delete pods  -n  --grace-period=0 --force
For testing availability, resiliency, or data persistence, you can delete a pod to simulate a pod failure with the kubectl delete pods command. Not recommended for production, only to simulate failure
kubectl get pods  -o yaml -n  | grep hostIP
Get the IP of the node a pod is currently running on
- -Use this resourceto learn more about these commands for troubleshooting the SQL Server BDC. - -A full list of the **kubectl** commands is here. - -
-

Activity: Discover the IP Address of the BDC Master Installation, and Connect to it with Azure Data Studio

-
- -In this activity, you will Get the IP Address of the Master Instance in your Cluster, and connect with Azure Data Studio. - -Steps - -

Open this resource, and follow the steps there for the AKS deployments: section.

- -
-

-
- -

5.2 Using mssqlctl commands

- -The **mssqlctl** utility enables cluster administrators to bootstrap and manage big data clusters via the REST APIs exposed by the Controller service. The controller is deployed and hosted in the same Kubernetes namespace where the customer wants to build out a big data cluster. The Controller is responsible for core logic for deploying and managing a big data cluster. - -The Controller service is installed by a Kubernetes administrator during cluster bootstrap, using the mssqlctl command-line utility. - -You can find a list of the switches and commands by typing: - -
-mssqlctl --h
-
- -You used the mssqlctl commands to deploy your cluster. - -
-

-
- -

5.3 Using the big data cluster Portal

- -Using Grafana and Kibana systems as you learned about in Module 01, Microsoft created a single portal you can use to interact with both the SQL Server-specific and Kubernetes portions of the BDC. - -
-

-
- -

Activity: Start dashboard when cluster is running in AKS -

- -To launch the Kubernetes dashboard run the following commands: - -
-az aks browse --resource-group  --name 
-
- -Note: - -If you get the following error: - -
Unable to listen on port 8001: All listeners failed to create with the following errors: Unable to create listener: Error listen tcp4 127.0.0.1:8001: >bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. Unable to create listener: Error listen tcp6: address [[::1]]:8001: missing port in >address error: Unable to listen on any of the requested ports: [{8001 9090}]
-
- -make sure you did not start the dashboard already from another window. - -When you launch the dashboard on your browser, you might get permission warnings due to RBAC being enabled by default in AKS clusters, and the service account used by the dashboard does not have enough permissions to access all resources (for example, pods is forbidden: User "system:serviceaccount:kube-system:kubernetes-dasboard" cannot list pods in the namespace "default"). Run the following command to give the necessary permissions to kubernetes-dashboard, and then restart the dashboard: - -
-kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
-
- -

- -

For Further Study

- - -

Next Steps

- -Next, Continue to Security. +![](../graphics/microsoftlogo.png) + +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) + +#### A Microsoft workshop from the SQL Server team + +

+ +

Management and Monitoring

+In this workshop you'll cover using a Process and and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. + +(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) + +You'll cover the following topics in this Module: + +
+ +
5.0 Managing and Monitoring Your Solution
+
5.1 Using kubectl commands
+
5.2 Using mssqlctl commands
+
5.3 Using the big data cluster Portal
+ +
+ +

+ +

5.0 Managing and Monitoring Your Solution

+ +There are two primary areas for monitoring your SQL Server 2019 big data cluster. The first deals with SQL Server 2019, and the second deals with the set of elements in the Cluster. + +For SQL Server, management is much as you would normally perform for any SQL Server system. You have the same type of services, surface points, security areas and other control vectors as in a stand-alone installation of SQL Server. The tools you have avalaible for managing the Master Instance in the SQL Server BDC are the same as managing a stand-alone installation, including SQL Server Management Studio, command-line interfaces, Azure Data Studio, and third party tools. + +For the cluster components, you have three primary interfaces to use, which you will review next. + +

+ +

5.1 Using kubectl commands

+ +Since the SQL Server big data cluster lives within a Kubernetes cluster, you'll work with the kubectl command to deal with those specific components. The following list is a short version of some of the commands you can use to manage and monitor the SQL Server BDC implementation of a Kubernetes cluster: + + + + + + + + + + + + + + + +
Command Description
az aks get-credentials --name  --resource-group 
Download the Kubernetes cluster configuration file and set the cluster context
kubectl get pods --all-namespaces
Get the status of pods in the cluster for either all namespaces or the big data cluster namespace
kubectl describe pod   -n 
Get a detailed description of a specific pod in json format output. It includes details, such as the current Kubernetes node that the pod is placed on, the containers running within the pod, and the image used to bootstrap the containers. It also shows other details, such as labels, status, and persisted volumes claims that are associated with the pod
kubectl get svc -n 
Get details for the big data cluster services. These details include their type and the IPs associated with respective services and ports. Note that SQL Server big data cluster services are created in a new namespace created at cluster bootstrap time based on the cluster name specified in the mssqlctl create cluster command
kubectl describe pod   -n 
Get a detailed description of a service in json format output. It will include details like labels, selector, IP, external-IP (if the service is of LoadBalancer type), port, etc.
kubectl exec -it   -c  -n  -- /bin/bash 
If existing tools or the infrastructure does not enable you to perform a certain task without actually being in the context of the container, you can log in to the container using kubectl exec command. For example, you might need to check if a specific file exists, or you might need to restart services in the container
+ +
kubectl cp pod_name:source_file_path 
+  -c container_name 
+  -n namespace_name 
+  target_local_file_path
+ +
Copy files from the container to your local machine. Reverse the source and destination to copy into the container
kubectl delete pods  -n  --grace-period=0 --force
For testing availability, resiliency, or data persistence, you can delete a pod to simulate a pod failure with the kubectl delete pods command. Not recommended for production, only to simulate failure
kubectl get pods  -o yaml -n  | grep hostIP
Get the IP of the node a pod is currently running on
+ +Use this resourceto learn more about these commands for troubleshooting the SQL Server BDC. + +A full list of the **kubectl** commands is here. + +
+

Activity: Discover the IP Address of the BDC Master Installation, and Connect to it with Azure Data Studio

+
+ +In this activity, you will Get the IP Address of the Master Instance in your Cluster, and connect with Azure Data Studio. + +Steps + +

Open this resource, and follow the steps there for the AKS deployments: section.

+ +
+

+
+ +

5.2 Using mssqlctl commands

+ +The **mssqlctl** utility enables cluster administrators to bootstrap and manage big data clusters via the REST APIs exposed by the Controller service. The controller is deployed and hosted in the same Kubernetes namespace where the customer wants to build out a big data cluster. The Controller is responsible for core logic for deploying and managing a big data cluster. + +The Controller service is installed by a Kubernetes administrator during cluster bootstrap, using the mssqlctl command-line utility. + +You can find a list of the switches and commands by typing: + +
+mssqlctl --h
+
+ +You used the mssqlctl commands to deploy your cluster. + +
+

+
+ +

5.3 Using the big data cluster Portal

+ +Using Grafana and Kibana systems as you learned about in Module 01, Microsoft created a single portal you can use to interact with both the SQL Server-specific and Kubernetes portions of the BDC. + +
+

+
+ +

Activity: Start dashboard when cluster is running in AKS +

+ +To launch the Kubernetes dashboard run the following commands: + +
+az aks browse --resource-group  --name 
+
+ +Note: + +If you get the following error: + +
Unable to listen on port 8001: All listeners failed to create with the following errors: Unable to create listener: Error listen tcp4 127.0.0.1:8001: >bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. Unable to create listener: Error listen tcp6: address [[::1]]:8001: missing port in >address error: Unable to listen on any of the requested ports: [{8001 9090}]
+
+ +make sure you did not start the dashboard already from another window. + +When you launch the dashboard on your browser, you might get permission warnings due to RBAC being enabled by default in AKS clusters, and the service account used by the dashboard does not have enough permissions to access all resources (for example, pods is forbidden: User "system:serviceaccount:kube-system:kubernetes-dasboard" cannot list pods in the namespace "default"). Run the following command to give the necessary permissions to kubernetes-dashboard, and then restart the dashboard: + +
+kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
+
+ +

+ +

For Further Study

+ + +

Next Steps

+ +Next, Continue to Security. diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/06 - Security.md b/sqlserver2019bigdataclusters/SQL2019BDC/06 - Security.md index b2c0304c..4c801e4d 100644 --- a/sqlserver2019bigdataclusters/SQL2019BDC/06 - Security.md +++ b/sqlserver2019bigdataclusters/SQL2019BDC/06 - Security.md @@ -1,102 +1,103 @@ -![](../graphics/microsoftlogo.png) - -# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.2) - -#### A Microsoft workshop from the SQL Server team - -

- -

Security

- -In this workshop you'll cover using a Process and and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. - -(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) - -You'll cover the following topics in this Module: - -
- -
6.0 Managing SQL Server big data cluster Security
-
6.1 Access
-
6.2 Authentication and Authorization
- -
- -

- -

6.0 Managing SQL Server big data cluster Security

- -Authentication is the process of verifying the identity of a user or service and ensuring they are who they are claiming to be. Authorization refers to granting or denying of access to specific resources based on the requesting user's identity. This step is performed after a user is identified through authentication. - -

- -

6.1 Access

- -There are three endpoints for entry points to the big data cluster: - - - - - - - - - -
Endpoint Description
HDFS/Spark (Knox) gatewayAn HTTPS-based endpoint that proxies other endpoints. The HDFS/Spark gateway is used for accessing services like webHDFS and Livy. Wherever you see references to Knox, this is the endpoint
Controller endpointThe endpoint for the big data cluster management service that exposes REST APIs for managing the cluster. Some tools, such as the Admin portal, are also accessed through this endpoint
Master InstanceGet a detailed description of a specific pod in json format output. It includes details, such as the current Kubernetes node that the pod is placed on, the containers running within the pod, and the image used to bootstrap the containers. It also shows other details, such as labels, status, and persisted volumes claims that are associated with the pod
- -You can see these endpoints in this diagram: - -
- -
- -

-
- -

6.2 Authentication and Authorization

- -When you create the cluster, a number of logins are created. Some of these logins are for services to communicate with each other, and others are for end users to access the cluster. -End-user passwords are currently set using environment variables. These are passwords that SQL administrators and cluster administrators use to access services: - - - - - - - - - - -
Use Variable
Controller username
CONTROLLER_USERNAME=controller_username
Controller password
CONTROLLER_PASSWORD=controller_password
SQL Master SA password
MSSQL_SA_PASSWORD=controller_sa_password
Password for accessing the HDFS/Spark endpoint
KNOX_PASSWORD=knox_password
- -Note that in the final release, these will not be stored as environment variables but in a more secure fashion.. - -Intra-cluster authentication -Upon deployment of the cluster, a number of SQL logins are created: - -A special SQL login is created in the Controller SQL instance that is system managed, with sysadmin role. The password for this login is captured as a K8s secret. A sysadmin login is created in all SQL instances in the cluster, that Controller owns and manages. It is required for Controller to perform administrative tasks, such as HA setup or upgrade, on these instances. These logins are also used for intra-cluster communication between SQL instances, such as the SQL master instance communicating with a data pool. - -Note: In current release, only basic authentication is supported. Fine-grained access control to HDFS objects, and SQL big data cluster compute and data pools, is not yet available. - -For Intra-cluster communication with non-SQL services within the big data cluster, such as Livy to Spark or Spark to the storage pool, security uses certificates. All SQL Server to SQL Server communication is secured using SQL logins. - -
-

Activity: Review Security Endpoints

-
- -In this activity, you will review the endpoints exposed on the cluster. - -Steps - -

Open this reference, and follow the instructions you see for the Service Endpoints section. This shows the addresses and ports exposed to the end-users.

- -
-

-
- -

For Further Study

- - -Congratulations! You have completed this workshop on SQL Server big data clusters Architecture. You now have the tools, assets, and processes you need to extrapolate this information into other applications. +![](../graphics/microsoftlogo.png) + +# Workshop: Microsoft SQL Server big data clusters Architecture (CTP 2.3) + +#### A Microsoft workshop from the SQL Server team + +

+ +

Security

+ +In this workshop you'll cover using a Process and and various Platform components to create a SQL Server big data cluster solution you can deploy on premises, in the cloud, or in a hybrid architecture. In each module you'll get more references, which you should follow up on to learn more. Also watch for links within the text - click on each one to explore that topic. + +(Make sure you check out the prerequisites page before you start. You'll need all of the items loaded there before you can proceed with the workshop.) + +You'll cover the following topics in this Module: + +
+ +
6.0 Managing SQL Server big data cluster Security
+
6.1 Access
+
6.2 Authentication and Authorization
+ +
+ +

+ +

6.0 Managing SQL Server big data cluster Security

+ +Authentication is the process of verifying the identity of a user or service and ensuring they are who they are claiming to be. Authorization refers to granting or denying of access to specific resources based on the requesting user's identity. This step is performed after a user is identified through authentication. + +*NOTE: Security will change prior to the General Availability (GA) Release. Active Directory integration is planned for production implementations.* + +

+ +

6.1 Access

+ +There are three endpoints for entry points to the big data cluster: + + + + + + + + + +
Endpoint Description
HDFS/Spark (Knox) gatewayAn HTTPS-based endpoint that proxies other endpoints. The HDFS/Spark gateway is used for accessing services like webHDFS and Livy. Wherever you see references to Knox, this is the endpoint
Controller endpointThe endpoint for the big data cluster management service that exposes REST APIs for managing the cluster. Some tools, such as the Admin portal, are also accessed through this endpoint
Master InstanceGet a detailed description of a specific pod in json format output. It includes details, such as the current Kubernetes node that the pod is placed on, the containers running within the pod, and the image used to bootstrap the containers. It also shows other details, such as labels, status, and persisted volumes claims that are associated with the pod
+ +You can see these endpoints in this diagram: + +
+ +
+ +

+
+ +

6.2 Authentication and Authorization

+ +When you create the cluster, a number of logins are created. Some of these logins are for services to communicate with each other, and others are for end users to access the cluster. +Non-SQL Server End-user passwords currently are set using environment variables. These are passwords that cluster administrators use to access services: + + + + + + + + + + +
Use Variable
Controller username
CONTROLLER_USERNAME=controller_username
Controller password
CONTROLLER_PASSWORD=controller_password
SQL Master SA password
MSSQL_SA_PASSWORD=controller_sa_password
Password for accessing the HDFS/Spark endpoint
KNOX_PASSWORD=knox_password
+ + +Intra-cluster authentication +Upon deployment of the cluster, a number of SQL logins are created: + +A special SQL login is created in the Controller SQL instance that is system managed, with sysadmin role. The password for this login is captured as a K8s secret. A sysadmin login is created in all SQL instances in the cluster, that Controller owns and manages. It is required for Controller to perform administrative tasks, such as HA setup or upgrade, on these instances. These logins are also used for intra-cluster communication between SQL instances, such as the SQL master instance communicating with a data pool. + +Note: In current release, only basic authentication is supported. Fine-grained access control to HDFS objects, and SQL big data cluster compute and data pools, is not yet available. + +For Intra-cluster communication with non-SQL services within the big data cluster, such as Livy to Spark or Spark to the storage pool, security uses certificates. All SQL Server to SQL Server communication is secured using SQL logins. + +
+

Activity: Review Security Endpoints

+
+ +In this activity, you will review the endpoints exposed on the cluster. + +Steps + +

Open this reference, and read the information you see for the Service Endpoints section. This shows the addresses and ports exposed to the end-users.

+ +
+

+
+ +

For Further Study

+ + +Congratulations! You have completed this workshop on SQL Server big data clusters Architecture. You now have the tools, assets, and processes you need to extrapolate this information into other applications. diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/data/adventureworksproducts.csv b/sqlserver2019bigdataclusters/SQL2019BDC/data/adventureworksproducts.csv deleted file mode 100644 index 01d4e69b..00000000 --- a/sqlserver2019bigdataclusters/SQL2019BDC/data/adventureworksproducts.csv +++ /dev/null @@ -1,296 +0,0 @@ -ProductID,Name,ProductNumber,Color,StandardCost,ListPrice,Size,Weight -680,"HL Road Frame - Black, 58",FR-R92B-58,Black,1059.3100,1431.5000,58,1016.04 -706,"HL Road Frame - Red, 58",FR-R92R-58,Red,1059.3100,1431.5000,58,1016.04 -707,"Sport-100 Helmet, Red",HL-U509-R,Red,13.0863,34.9900,NULL,NULL -708,"Sport-100 Helmet, Black",HL-U509,Black,13.0863,34.9900,NULL,NULL -709,"Mountain Bike Socks, M",SO-B909-M,White,3.3963,9.5000,M,NULL -710,"Mountain Bike Socks, L",SO-B909-L,White,3.3963,9.5000,L,NULL -711,"Sport-100 Helmet, Blue",HL-U509-B,Blue,13.0863,34.9900,NULL,NULL -712,AWC Logo Cap,CA-1098,Multi,6.9223,8.9900,NULL,NULL -713,"Long-Sleeve Logo Jersey, S",LJ-0192-S,Multi,38.4923,49.9900,S,NULL -714,"Long-Sleeve Logo Jersey, M",LJ-0192-M,Multi,38.4923,49.9900,M,NULL -715,"Long-Sleeve Logo Jersey, L",LJ-0192-L,Multi,38.4923,49.9900,L,NULL -716,"Long-Sleeve Logo Jersey, XL",LJ-0192-X,Multi,38.4923,49.9900,XL,NULL -717,"HL Road Frame - Red, 62",FR-R92R-62,Red,868.6342,1431.5000,62,1043.26 -718,"HL Road Frame - Red, 44",FR-R92R-44,Red,868.6342,1431.5000,44,961.61 -719,"HL Road Frame - Red, 48",FR-R92R-48,Red,868.6342,1431.5000,48,979.75 -720,"HL Road Frame - Red, 52",FR-R92R-52,Red,868.6342,1431.5000,52,997.90 -721,"HL Road Frame - Red, 56",FR-R92R-56,Red,868.6342,1431.5000,56,1016.04 -722,"LL Road Frame - Black, 58",FR-R38B-58,Black,204.6251,337.2200,58,1115.83 -723,"LL Road Frame - Black, 60",FR-R38B-60,Black,204.6251,337.2200,60,1124.90 -724,"LL Road Frame - Black, 62",FR-R38B-62,Black,204.6251,337.2200,62,1133.98 -725,"LL Road Frame - Red, 44",FR-R38R-44,Red,187.1571,337.2200,44,1052.33 -726,"LL Road Frame - Red, 48",FR-R38R-48,Red,187.1571,337.2200,48,1070.47 -727,"LL Road Frame - Red, 52",FR-R38R-52,Red,187.1571,337.2200,52,1088.62 -728,"LL Road Frame - Red, 58",FR-R38R-58,Red,187.1571,337.2200,58,1115.83 -729,"LL Road Frame - Red, 60",FR-R38R-60,Red,187.1571,337.2200,60,1124.90 -730,"LL Road Frame - Red, 62",FR-R38R-62,Red,187.1571,337.2200,62,1133.98 -731,"ML Road Frame - Red, 44",FR-R72R-44,Red,352.1394,594.8300,44,1006.97 -732,"ML Road Frame - Red, 48",FR-R72R-48,Red,352.1394,594.8300,48,1025.11 -733,"ML Road Frame - Red, 52",FR-R72R-52,Red,352.1394,594.8300,52,1043.26 -734,"ML Road Frame - Red, 58",FR-R72R-58,Red,352.1394,594.8300,58,1070.47 -735,"ML Road Frame - Red, 60",FR-R72R-60,Red,352.1394,594.8300,60,1079.54 -736,"LL Road Frame - Black, 44",FR-R38B-44,Black,204.6251,337.2200,44,1052.33 -737,"LL Road Frame - Black, 48",FR-R38B-48,Black,204.6251,337.2200,48,1070.47 -738,"LL Road Frame - Black, 52",FR-R38B-52,Black,204.6251,337.2200,52,1088.62 -739,"HL Mountain Frame - Silver, 42",FR-M94S-42,Silver,747.2002,1364.5000,42,1233.76 -740,"HL Mountain Frame - Silver, 44",FR-M94S-44,Silver,706.8110,1364.5000,44,1251.91 -741,"HL Mountain Frame - Silver, 48",FR-M94S-52,Silver,706.8110,1364.5000,48,1270.05 -742,"HL Mountain Frame - Silver, 46",FR-M94S-46,Silver,747.2002,1364.5000,46,1288.20 -743,"HL Mountain Frame - Black, 42",FR-M94B-42,Black,739.0410,1349.6000,42,1233.76 -744,"HL Mountain Frame - Black, 44",FR-M94B-44,Black,699.0928,1349.6000,44,1251.91 -745,"HL Mountain Frame - Black, 48",FR-M94B-48,Black,699.0928,1349.6000,48,1270.05 -746,"HL Mountain Frame - Black, 46",FR-M94B-46,Black,739.0410,1349.6000,46,1288.20 -747,"HL Mountain Frame - Black, 38",FR-M94B-38,Black,739.0410,1349.6000,38,1215.62 -748,"HL Mountain Frame - Silver, 38",FR-M94S-38,Silver,747.2002,1364.5000,38,1215.62 -749,"Road-150 Red, 62",BK-R93R-62,Red,2171.2942,3578.2700,62,6803.85 -750,"Road-150 Red, 44",BK-R93R-44,Red,2171.2942,3578.2700,44,6245.93 -751,"Road-150 Red, 48",BK-R93R-48,Red,2171.2942,3578.2700,48,6409.23 -752,"Road-150 Red, 52",BK-R93R-52,Red,2171.2942,3578.2700,52,6540.77 -753,"Road-150 Red, 56",BK-R93R-56,Red,2171.2942,3578.2700,56,6658.70 -754,"Road-450 Red, 58",BK-R68R-58,Red,884.7083,1457.9900,58,8069.37 -755,"Road-450 Red, 60",BK-R68R-60,Red,884.7083,1457.9900,60,8119.26 -756,"Road-450 Red, 44",BK-R68R-44,Red,884.7083,1457.9900,44,7606.70 -757,"Road-450 Red, 48",BK-R68R-48,Red,884.7083,1457.9900,48,7770.00 -758,"Road-450 Red, 52",BK-R68R-52,Red,884.7083,1457.9900,52,7901.54 -759,"Road-650 Red, 58",BK-R50R-58,Red,486.7066,782.9900,58,8976.55 -760,"Road-650 Red, 60",BK-R50R-60,Red,486.7066,782.9900,60,9026.44 -761,"Road-650 Red, 62",BK-R50R-62,Red,486.7066,782.9900,62,9071.80 -762,"Road-650 Red, 44",BK-R50R-44,Red,486.7066,782.9900,44,8513.88 -763,"Road-650 Red, 48",BK-R50R-48,Red,486.7066,782.9900,48,8677.18 -764,"Road-650 Red, 52",BK-R50R-52,Red,486.7066,782.9900,52,8808.72 -765,"Road-650 Black, 58",BK-R50B-58,Black,486.7066,782.9900,58,8976.55 -766,"Road-650 Black, 60",BK-R50B-60,Black,486.7066,782.9900,60,9026.44 -767,"Road-650 Black, 62",BK-R50B-62,Black,486.7066,782.9900,62,9071.80 -768,"Road-650 Black, 44",BK-R50B-44,Black,486.7066,782.9900,44,8513.88 -769,"Road-650 Black, 48",BK-R50B-48,Black,486.7066,782.9900,48,8677.18 -770,"Road-650 Black, 52",BK-R50B-52,Black,486.7066,782.9900,52,8808.72 -771,"Mountain-100 Silver, 38",BK-M82S-38,Silver,1912.1544,3399.9900,38,9230.56 -772,"Mountain-100 Silver, 42",BK-M82S-42,Silver,1912.1544,3399.9900,42,9421.06 -773,"Mountain-100 Silver, 44",BK-M82S-44,Silver,1912.1544,3399.9900,44,9584.36 -774,"Mountain-100 Silver, 48",BK-M82S-48,Silver,1912.1544,3399.9900,48,9715.90 -775,"Mountain-100 Black, 38",BK-M82B-38,Black,1898.0944,3374.9900,38,9230.56 -776,"Mountain-100 Black, 42",BK-M82B-42,Black,1898.0944,3374.9900,42,9421.06 -777,"Mountain-100 Black, 44",BK-M82B-44,Black,1898.0944,3374.9900,44,9584.36 -778,"Mountain-100 Black, 48",BK-M82B-48,Black,1898.0944,3374.9900,48,9715.90 -779,"Mountain-200 Silver, 38",BK-M68S-38,Silver,1265.6195,2319.9900,38,10591.33 -780,"Mountain-200 Silver, 42",BK-M68S-42,Silver,1265.6195,2319.9900,42,10781.83 -781,"Mountain-200 Silver, 46",BK-M68S-46,Silver,1265.6195,2319.9900,46,10945.13 -782,"Mountain-200 Black, 38",BK-M68B-38,Black,1251.9813,2294.9900,38,10591.33 -783,"Mountain-200 Black, 42",BK-M68B-42,Black,1251.9813,2294.9900,42,10781.83 -784,"Mountain-200 Black, 46",BK-M68B-46,Black,1251.9813,2294.9900,46,10945.13 -785,"Mountain-300 Black, 38",BK-M47B-38,Black,598.4354,1079.9900,38,11498.51 -786,"Mountain-300 Black, 40",BK-M47B-40,Black,598.4354,1079.9900,40,11689.01 -787,"Mountain-300 Black, 44",BK-M47B-44,Black,598.4354,1079.9900,44,11852.31 -788,"Mountain-300 Black, 48",BK-M47B-48,Black,598.4354,1079.9900,48,11983.85 -789,"Road-250 Red, 44",BK-R89R-44,Red,1518.7864,2443.3500,44,6699.52 -790,"Road-250 Red, 48",BK-R89R-48,Red,1518.7864,2443.3500,48,6862.82 -791,"Road-250 Red, 52",BK-R89R-52,Red,1518.7864,2443.3500,52,6994.36 -792,"Road-250 Red, 58",BK-R89R-58,Red,1554.9479,2443.3500,58,7162.19 -793,"Road-250 Black, 44",BK-R89B-44,Black,1554.9479,2443.3500,44,6699.52 -794,"Road-250 Black, 48",BK-R89B-48,Black,1554.9479,2443.3500,48,6862.82 -795,"Road-250 Black, 52",BK-R89B-52,Black,1554.9479,2443.3500,52,6994.36 -796,"Road-250 Black, 58",BK-R89B-58,Black,1554.9479,2443.3500,58,7112.29 -797,"Road-550-W Yellow, 38",BK-R64Y-38,Yellow,713.0798,1120.4900,38,7869.79 -798,"Road-550-W Yellow, 40",BK-R64Y-40,Yellow,713.0798,1120.4900,40,8060.29 -799,"Road-550-W Yellow, 42",BK-R64Y-42,Yellow,713.0798,1120.4900,42,8223.59 -800,"Road-550-W Yellow, 44",BK-R64Y-44,Yellow,713.0798,1120.4900,44,8355.13 -801,"Road-550-W Yellow, 48",BK-R64Y-48,Yellow,713.0798,1120.4900,48,8473.06 -802,LL Fork,FK-1639,NULL,65.8097,148.2200,NULL,NULL -803,ML Fork,FK-5136,NULL,77.9176,175.4900,NULL,NULL -804,HL Fork,FK-9939,NULL,101.8936,229.4900,NULL,NULL -805,LL Headset,HS-0296,NULL,15.1848,34.2000,NULL,NULL -806,ML Headset,HS-2451,NULL,45.4168,102.2900,NULL,NULL -807,HL Headset,HS-3479,NULL,55.3801,124.7300,NULL,NULL -808,LL Mountain Handlebars,HB-M243,NULL,19.7758,44.5400,NULL,NULL -809,ML Mountain Handlebars,HB-M763,NULL,27.4925,61.9200,NULL,NULL -810,HL Mountain Handlebars,HB-M918,NULL,53.3999,120.2700,NULL,NULL -811,LL Road Handlebars,HB-R504,NULL,19.7758,44.5400,NULL,NULL -812,ML Road Handlebars,HB-R720,NULL,27.4925,61.9200,NULL,NULL -813,HL Road Handlebars,HB-R956,NULL,53.3999,120.2700,NULL,NULL -814,"ML Mountain Frame - Black, 38",FR-M63B-38,Black,185.8193,348.7600,38,1238.30 -815,LL Mountain Front Wheel,FW-M423,Black,26.9708,60.7450,NULL,NULL -816,ML Mountain Front Wheel,FW-M762,Black,92.8071,209.0250,NULL,NULL -817,HL Mountain Front Wheel,FW-M928,Black,133.2955,300.2150,NULL,NULL -818,LL Road Front Wheel,FW-R623,Black,37.9909,85.5650,NULL,900.00 -819,ML Road Front Wheel,FW-R762,Black,110.2829,248.3850,NULL,850.00 -820,HL Road Front Wheel,FW-R820,Black,146.5466,330.0600,NULL,650.00 -821,Touring Front Wheel,FW-T905,Black,96.7964,218.0100,NULL,NULL -822,"ML Road Frame-W - Yellow, 38",FR-R72Y-38,Yellow,360.9428,594.8300,38,988.83 -823,LL Mountain Rear Wheel,RW-M423,Black,38.9588,87.7450,NULL,NULL -824,ML Mountain Rear Wheel,RW-M762,Black,104.7951,236.0250,NULL,NULL -825,HL Mountain Rear Wheel,RW-M928,Black,145.2835,327.2150,NULL,NULL -826,LL Road Rear Wheel,RW-R623,Black,49.9789,112.5650,NULL,1050.00 -827,ML Road Rear Wheel,RW-R762,Black,122.2709,275.3850,NULL,1000.00 -828,HL Road Rear Wheel,RW-R820,Black,158.5346,357.0600,NULL,890.00 -829,Touring Rear Wheel,RW-T905,Black,108.7844,245.0100,NULL,NULL -830,"ML Mountain Frame - Black, 40",FR-M63B-40,Black,185.8193,348.7600,40,1256.44 -831,"ML Mountain Frame - Black, 44",FR-M63B-44,Black,185.8193,348.7600,44,1274.59 -832,"ML Mountain Frame - Black, 48",FR-M63B-48,Black,185.8193,348.7600,48,1292.73 -833,"ML Road Frame-W - Yellow, 40",FR-R72Y-40,Yellow,360.9428,594.8300,40,1006.97 -834,"ML Road Frame-W - Yellow, 42",FR-R72Y-42,Yellow,360.9428,594.8300,42,1025.11 -835,"ML Road Frame-W - Yellow, 44",FR-R72Y-44,Yellow,360.9428,594.8300,44,1043.26 -836,"ML Road Frame-W - Yellow, 48",FR-R72Y-48,Yellow,360.9428,594.8300,48,1061.40 -837,"HL Road Frame - Black, 62",FR-R92B-62,Black,868.6342,1431.5000,62,1043.26 -838,"HL Road Frame - Black, 44",FR-R92B-44,Black,868.6342,1431.5000,44,961.61 -839,"HL Road Frame - Black, 48",FR-R92B-48,Black,868.6342,1431.5000,48,979.75 -840,"HL Road Frame - Black, 52",FR-R92B-52,Black,868.6342,1431.5000,52,997.90 -841,"Men's Sports Shorts, S",SH-M897-S,Black,24.7459,59.9900,S,NULL -842,"Touring-Panniers, Large",PA-T100,Grey,51.5625,125.0000,NULL,NULL -843,Cable Lock,LO-C100,NULL,10.3125,25.0000,NULL,NULL -844,Minipump,PU-0452,NULL,8.2459,19.9900,NULL,NULL -845,Mountain Pump,PU-M044,NULL,10.3084,24.9900,NULL,NULL -846,Taillights - Battery-Powered,LT-T990,NULL,5.7709,13.9900,NULL,NULL -847,Headlights - Dual-Beam,LT-H902,NULL,14.4334,34.9900,NULL,NULL -848,Headlights - Weatherproof,LT-H903,NULL,18.5584,44.9900,NULL,NULL -849,"Men's Sports Shorts, M",SH-M897-M,Black,24.7459,59.9900,M,NULL -850,"Men's Sports Shorts, L",SH-M897-L,Black,24.7459,59.9900,L,NULL -851,"Men's Sports Shorts, XL",SH-M897-X,Black,24.7459,59.9900,XL,NULL -852,"Women's Tights, S",TG-W091-S,Black,30.9334,74.9900,S,NULL -853,"Women's Tights, M",TG-W091-M,Black,30.9334,74.9900,M,NULL -854,"Women's Tights, L",TG-W091-L,Black,30.9334,74.9900,L,NULL -855,"Men's Bib-Shorts, S",SB-M891-S,Multi,37.1209,89.9900,S,NULL -856,"Men's Bib-Shorts, M",SB-M891-M,Multi,37.1209,89.9900,M,NULL -857,"Men's Bib-Shorts, L",SB-M891-L,Multi,37.1209,89.9900,L,NULL -858,"Half-Finger Gloves, S",GL-H102-S,Black,9.1593,24.4900,S,NULL -859,"Half-Finger Gloves, M",GL-H102-M,Black,9.1593,24.4900,M,NULL -860,"Half-Finger Gloves, L",GL-H102-L,Black,9.1593,24.4900,L,NULL -861,"Full-Finger Gloves, S",GL-F110-S,Black,15.6709,37.9900,S,NULL -862,"Full-Finger Gloves, M",GL-F110-M,Black,15.6709,37.9900,M,NULL -863,"Full-Finger Gloves, L",GL-F110-L,Black,15.6709,37.9900,L,NULL -864,"Classic Vest, S",VE-C304-S,Blue,23.7490,63.5000,S,NULL -865,"Classic Vest, M",VE-C304-M,Blue,23.7490,63.5000,M,NULL -866,"Classic Vest, L",VE-C304-L,Blue,23.7490,63.5000,L,NULL -867,"Women's Mountain Shorts, S",SH-W890-S,Black,26.1763,69.9900,S,NULL -868,"Women's Mountain Shorts, M",SH-W890-M,Black,26.1763,69.9900,M,NULL -869,"Women's Mountain Shorts, L",SH-W890-L,Black,26.1763,69.9900,L,NULL -870,Water Bottle - 30 oz.,WB-H098,NULL,1.8663,4.9900,NULL,NULL -871,Mountain Bottle Cage,BC-M005,NULL,3.7363,9.9900,NULL,NULL -872,Road Bottle Cage,BC-R205,NULL,3.3623,8.9900,NULL,NULL -873,Patch Kit/8 Patches,PK-7098,NULL,0.8565,2.2900,NULL,NULL -874,"Racing Socks, M",SO-R809-M,White,3.3623,8.9900,M,NULL -875,"Racing Socks, L",SO-R809-L,White,3.3623,8.9900,L,NULL -876,Hitch Rack - 4-Bike,RA-H123,NULL,44.8800,120.0000,NULL,NULL -877,Bike Wash - Dissolver,CL-9009,NULL,2.9733,7.9500,NULL,NULL -878,Fender Set - Mountain,FE-6654,NULL,8.2205,21.9800,NULL,NULL -879,All-Purpose Bike Stand,ST-1401,NULL,59.4660,159.0000,NULL,NULL -880,Hydration Pack - 70 oz.,HY-1023-70,Silver,20.5663,54.9900,70,NULL -881,"Short-Sleeve Classic Jersey, S",SJ-0194-S,Yellow,41.5723,53.9900,S,NULL -882,"Short-Sleeve Classic Jersey, M",SJ-0194-M,Yellow,41.5723,53.9900,M,NULL -883,"Short-Sleeve Classic Jersey, L",SJ-0194-L,Yellow,41.5723,53.9900,L,NULL -884,"Short-Sleeve Classic Jersey, XL",SJ-0194-X,Yellow,41.5723,53.9900,XL,NULL -885,"HL Touring Frame - Yellow, 60",FR-T98Y-60,Yellow,601.7437,1003.9100,60,1397.06 -886,"LL Touring Frame - Yellow, 62",FR-T67Y-62,Yellow,199.8519,333.4200,62,1451.49 -887,"HL Touring Frame - Yellow, 46",FR-T98Y-46,Yellow,601.7437,1003.9100,46,1342.63 -888,"HL Touring Frame - Yellow, 50",FR-T98Y-50,Yellow,601.7437,1003.9100,50,1360.77 -889,"HL Touring Frame - Yellow, 54",FR-T98Y-54,Yellow,601.7437,1003.9100,54,1378.91 -890,"HL Touring Frame - Blue, 46",FR-T98U-46,Blue,601.7437,1003.9100,46,1342.63 -891,"HL Touring Frame - Blue, 50",FR-T98U-50,Blue,601.7437,1003.9100,50,1360.77 -892,"HL Touring Frame - Blue, 54",FR-T98U-54,Blue,601.7437,1003.9100,54,1378.91 -893,"HL Touring Frame - Blue, 60",FR-T98U-60,Blue,601.7437,1003.9100,60,1397.06 -894,Rear Derailleur,RD-2308,Silver,53.9282,121.4600,NULL,215.00 -895,"LL Touring Frame - Blue, 50",FR-T67U-50,Blue,199.8519,333.4200,50,1406.13 -896,"LL Touring Frame - Blue, 54",FR-T67U-54,Blue,199.8519,333.4200,54,1424.27 -897,"LL Touring Frame - Blue, 58",FR-T67U-58,Blue,199.8519,333.4200,58,1433.34 -898,"LL Touring Frame - Blue, 62",FR-T67U-62,Blue,199.8519,333.4200,62,1451.49 -899,"LL Touring Frame - Yellow, 44",FR-T67Y-44,Yellow,199.8519,333.4200,44,1369.84 -900,"LL Touring Frame - Yellow, 50",FR-T67Y-50,Yellow,199.8519,333.4200,50,1406.13 -901,"LL Touring Frame - Yellow, 54",FR-T67Y-54,Yellow,199.8519,333.4200,54,1424.27 -902,"LL Touring Frame - Yellow, 58",FR-T67Y-58,Yellow,199.8519,333.4200,58,1433.34 -903,"LL Touring Frame - Blue, 44",FR-T67U-44,Blue,199.8519,333.4200,44,1369.84 -904,"ML Mountain Frame-W - Silver, 40",FR-M63S-40,Silver,199.3757,364.0900,40,1256.44 -905,"ML Mountain Frame-W - Silver, 42",FR-M63S-42,Silver,199.3757,364.0900,42,1274.59 -906,"ML Mountain Frame-W - Silver, 46",FR-M63S-46,Silver,199.3757,364.0900,46,1292.73 -907,Rear Brakes,RB-9231,Silver,47.2860,106.5000,NULL,317.00 -908,LL Mountain Seat/Saddle,SE-M236,NULL,12.0413,27.1200,NULL,NULL -909,ML Mountain Seat/Saddle,SE-M798,NULL,17.3782,39.1400,NULL,NULL -910,HL Mountain Seat/Saddle,SE-M940,NULL,23.3722,52.6400,NULL,NULL -911,LL Road Seat/Saddle,SE-R581,NULL,12.0413,27.1200,NULL,NULL -912,ML Road Seat/Saddle,SE-R908,NULL,17.3782,39.1400,NULL,NULL -913,HL Road Seat/Saddle,SE-R995,NULL,23.3722,52.6400,NULL,NULL -914,LL Touring Seat/Saddle,SE-T312,NULL,12.0413,27.1200,NULL,NULL -915,ML Touring Seat/Saddle,SE-T762,NULL,17.3782,39.1400,NULL,NULL -916,HL Touring Seat/Saddle,SE-T924,NULL,23.3722,52.6400,NULL,NULL -917,"LL Mountain Frame - Silver, 42",FR-M21S-42,Silver,144.5938,264.0500,42,1324.48 -918,"LL Mountain Frame - Silver, 44",FR-M21S-44,Silver,144.5938,264.0500,44,1342.63 -919,"LL Mountain Frame - Silver, 48",FR-M21S-48,Silver,144.5938,264.0500,48,1360.77 -920,"LL Mountain Frame - Silver, 52",FR-M21S-52,Silver,144.5938,264.0500,52,1378.91 -921,Mountain Tire Tube,TT-M928,NULL,1.8663,4.9900,NULL,NULL -922,Road Tire Tube,TT-R982,NULL,1.4923,3.9900,NULL,NULL -923,Touring Tire Tube,TT-T092,NULL,1.8663,4.9900,NULL,NULL -924,"LL Mountain Frame - Black, 42",FR-M21B-42,Black,136.7850,249.7900,42,1324.48 -925,"LL Mountain Frame - Black, 44",FR-M21B-44,Black,136.7850,249.7900,44,1342.63 -926,"LL Mountain Frame - Black, 48",FR-M21B-48,Black,136.7850,249.7900,48,1360.77 -927,"LL Mountain Frame - Black, 52",FR-M21B-52,Black,136.7850,249.7900,52,1378.91 -928,LL Mountain Tire,TI-M267,NULL,9.3463,24.9900,NULL,NULL -929,ML Mountain Tire,TI-M602,NULL,11.2163,29.9900,NULL,NULL -930,HL Mountain Tire,TI-M823,NULL,13.0900,35.0000,NULL,NULL -931,LL Road Tire,TI-R092,NULL,8.0373,21.4900,NULL,NULL -932,ML Road Tire,TI-R628,NULL,9.3463,24.9900,NULL,NULL -933,HL Road Tire,TI-R982,NULL,12.1924,32.6000,NULL,NULL -934,Touring Tire,TI-T723,NULL,10.8423,28.9900,NULL,NULL -935,LL Mountain Pedal,PD-M282,Silver/Black,17.9776,40.4900,NULL,218.00 -936,ML Mountain Pedal,PD-M340,Silver/Black,27.5680,62.0900,NULL,215.00 -937,HL Mountain Pedal,PD-M562,Silver/Black,35.9596,80.9900,NULL,185.00 -938,LL Road Pedal,PD-R347,Silver/Black,17.9776,40.4900,NULL,189.00 -939,ML Road Pedal,PD-R563,Silver/Black,27.5680,62.0900,NULL,168.00 -940,HL Road Pedal,PD-R853,Silver/Black,35.9596,80.9900,NULL,149.00 -941,Touring Pedal,PD-T852,Silver/Black,35.9596,80.9900,NULL,NULL -942,"ML Mountain Frame-W - Silver, 38",FR-M63S-38,Silver,199.3757,364.0900,38,1238.30 -943,"LL Mountain Frame - Black, 40",FR-M21B-40,Black,136.7850,249.7900,40,1306.34 -944,"LL Mountain Frame - Silver, 40",FR-M21S-40,Silver,144.5938,264.0500,40,1306.34 -945,Front Derailleur,FD-2342,Silver,40.6216,91.4900,NULL,88.00 -946,LL Touring Handlebars,HB-T721,NULL,20.4640,46.0900,NULL,NULL -947,HL Touring Handlebars,HB-T928,NULL,40.6571,91.5700,NULL,NULL -948,Front Brakes,FB-9873,Silver,47.2860,106.5000,NULL,317.00 -949,LL Crankset,CS-4759,Black,77.9176,175.4900,NULL,600.00 -950,ML Crankset,CS-6583,Black,113.8816,256.4900,NULL,635.00 -951,HL Crankset,CS-9183,Black,179.8156,404.9900,NULL,575.00 -952,Chain,CH-0234,Silver,8.9866,20.2400,NULL,NULL -953,"Touring-2000 Blue, 60",BK-T44U-60,Blue,755.1508,1214.8500,60,12655.16 -954,"Touring-1000 Yellow, 46",BK-T79Y-46,Yellow,1481.9379,2384.0700,46,11398.72 -955,"Touring-1000 Yellow, 50",BK-T79Y-50,Yellow,1481.9379,2384.0700,50,11530.26 -956,"Touring-1000 Yellow, 54",BK-T79Y-54,Yellow,1481.9379,2384.0700,54,11648.19 -957,"Touring-1000 Yellow, 60",BK-T79Y-60,Yellow,1481.9379,2384.0700,60,11747.98 -958,"Touring-3000 Blue, 54",BK-T18U-54,Blue,461.4448,742.3500,54,13462.55 -959,"Touring-3000 Blue, 58",BK-T18U-58,Blue,461.4448,742.3500,58,13562.34 -960,"Touring-3000 Blue, 62",BK-T18U-62,Blue,461.4448,742.3500,62,13607.70 -961,"Touring-3000 Yellow, 44",BK-T18Y-44,Yellow,461.4448,742.3500,44,13049.78 -962,"Touring-3000 Yellow, 50",BK-T18Y-50,Yellow,461.4448,742.3500,50,13213.08 -963,"Touring-3000 Yellow, 54",BK-T18Y-54,Yellow,461.4448,742.3500,54,13344.62 -964,"Touring-3000 Yellow, 58",BK-T18Y-58,Yellow,461.4448,742.3500,58,13512.45 -965,"Touring-3000 Yellow, 62",BK-T18Y-62,Yellow,461.4448,742.3500,62,13607.70 -966,"Touring-1000 Blue, 46",BK-T79U-46,Blue,1481.9379,2384.0700,46,11398.72 -967,"Touring-1000 Blue, 50",BK-T79U-50,Blue,1481.9379,2384.0700,50,11530.26 -968,"Touring-1000 Blue, 54",BK-T79U-54,Blue,1481.9379,2384.0700,54,11648.19 -969,"Touring-1000 Blue, 60",BK-T79U-60,Blue,1481.9379,2384.0700,60,11747.98 -970,"Touring-2000 Blue, 46",BK-T44U-46,Blue,755.1508,1214.8500,46,12305.90 -971,"Touring-2000 Blue, 50",BK-T44U-50,Blue,755.1508,1214.8500,50,12437.44 -972,"Touring-2000 Blue, 54",BK-T44U-54,Blue,755.1508,1214.8500,54,12555.37 -973,"Road-350-W Yellow, 40",BK-R79Y-40,Yellow,1082.5100,1700.9900,40,6962.61 -974,"Road-350-W Yellow, 42",BK-R79Y-42,Yellow,1082.5100,1700.9900,42,7153.11 -975,"Road-350-W Yellow, 44",BK-R79Y-44,Yellow,1082.5100,1700.9900,44,7316.41 -976,"Road-350-W Yellow, 48",BK-R79Y-48,Yellow,1082.5100,1700.9900,48,7447.95 -977,"Road-750 Black, 58",BK-R19B-58,Black,343.6496,539.9900,58,9430.14 -978,"Touring-3000 Blue, 44",BK-T18U-44,Blue,461.4448,742.3500,44,13049.78 -979,"Touring-3000 Blue, 50",BK-T18U-50,Blue,461.4448,742.3500,50,13213.08 -980,"Mountain-400-W Silver, 38",BK-M38S-38,Silver,419.7784,769.4900,38,11952.10 -981,"Mountain-400-W Silver, 40",BK-M38S-40,Silver,419.7784,769.4900,40,12142.60 -982,"Mountain-400-W Silver, 42",BK-M38S-42,Silver,419.7784,769.4900,42,12305.90 -983,"Mountain-400-W Silver, 46",BK-M38S-46,Silver,419.7784,769.4900,46,12437.44 -984,"Mountain-500 Silver, 40",BK-M18S-40,Silver,308.2179,564.9900,40,12405.69 -985,"Mountain-500 Silver, 42",BK-M18S-42,Silver,308.2179,564.9900,42,12596.19 -986,"Mountain-500 Silver, 44",BK-M18S-44,Silver,308.2179,564.9900,44,12759.49 -987,"Mountain-500 Silver, 48",BK-M18S-48,Silver,308.2179,564.9900,48,12891.03 -988,"Mountain-500 Silver, 52",BK-M18S-52,Silver,308.2179,564.9900,52,13008.96 -989,"Mountain-500 Black, 40",BK-M18B-40,Black,294.5797,539.9900,40,12405.69 -990,"Mountain-500 Black, 42",BK-M18B-42,Black,294.5797,539.9900,42,12596.19 -991,"Mountain-500 Black, 44",BK-M18B-44,Black,294.5797,539.9900,44,12759.49 -992,"Mountain-500 Black, 48",BK-M18B-48,Black,294.5797,539.9900,48,12891.03 -993,"Mountain-500 Black, 52",BK-M18B-52,Black,294.5797,539.9900,52,13008.96 -994,LL Bottom Bracket,BB-7421,NULL,23.9716,53.9900,NULL,223.00 -995,ML Bottom Bracket,BB-8107,NULL,44.9506,101.2400,NULL,168.00 -996,HL Bottom Bracket,BB-9108,NULL,53.9416,121.4900,NULL,170.00 -997,"Road-750 Black, 44",BK-R19B-44,Black,343.6496,539.9900,44,8967.47 -998,"Road-750 Black, 48",BK-R19B-48,Black,343.6496,539.9900,48,9130.77 -999,"Road-750 Black, 52",BK-R19B-52,Black,343.6496,539.9900,52,9262.31 diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/ML_Sample.sql b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/ML_Sample.sql new file mode 100644 index 00000000..67272ca7 --- /dev/null +++ b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/ML_Sample.sql @@ -0,0 +1,265 @@ +/* Enable Machinbe Learning Servicews */ +EXEC sp_configure 'external scripts enabled', 1; +GO +RECONFIGURE WITH OVERRIDE; +GO + +/* Load Prediction Data */ +USE [master] +RESTORE DATABASE [NYC] +FROM DISK = N'/var/opt/mssql/data/NYC.bak' +WITH FILE = 1 +, REPLACE +, MOVE N'NYCTaxi_Sample' TO N'/var/opt/mssql/data/NYC.mdf' +, MOVE N'NYCTaxi_Sample_log' TO N'/var/opt/mssql/data/NYC.ldf' +, NOUNLOAD, STATS = 5; +GO + +/* Run some Python. This just returns a a couple of library versions */ +EXECUTE sp_execute_external_script +@language = N'Python', +@script = N' +import numpy as np +import pandas as pd +print(np.__version__) +print(pd.__version__) +', +@input_data_1 = N'SELECT 1 as Col1'; +GO + +/* Creates Plot Binary data */ +DROP PROCEDURE IF EXISTS PyPlotMatplotlib; +GO + +CREATE PROCEDURE [dbo].[PyPlotMatplotlib] +AS +BEGIN + SET NOCOUNT ON; + DECLARE @query nvarchar(max) = + N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]' + EXECUTE sp_execute_external_script + @language = N'Python', + @script = N' +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import pandas as pd +import pickle + +fig_handle = plt.figure() +plt.hist(InputDataSet.tipped) +plt.xlabel("Tipped") +plt.ylabel("Counts") +plt.title("Histogram, Tipped") +plot0 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) +plt.clf() + +plt.hist(InputDataSet.tip_amount) +plt.xlabel("Tip amount ($)") +plt.ylabel("Counts") +plt.title("Histogram, Tip amount") +plot1 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) +plt.clf() + +plt.hist(InputDataSet.fare_amount) +plt.xlabel("Fare amount ($)") +plt.ylabel("Counts") +plt.title("Histogram, Fare amount") +plot2 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) +plt.clf() + +plt.scatter( InputDataSet.fare_amount, InputDataSet.tip_amount) +plt.xlabel("Fare Amount ($)") +plt.ylabel("Tip Amount ($)") +plt.title("Tip amount by Fare amount") +plot3 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) +plt.clf() + +OutputDataSet = plot0.append(plot1, ignore_index=True).append(plot2, ignore_index=True).append(plot3, ignore_index=True) +', +@input_data_1 = @query +WITH RESULT SETS ((plot varbinary(max))) +END +GO + +/* Call that procedure */ +EXEC [dbo].[PyPlotMatplotlib]; +GO + +/* Split the Sample */ +DROP PROCEDURE IF EXISTS PyTrainTestSplit; +GO + +CREATE PROCEDURE [dbo].[PyTrainTestSplit] (@pct int) +AS + +DROP TABLE IF EXISTS dbo.nyctaxi_sample_training +SELECT * into nyctaxi_sample_training FROM nyctaxi_sample WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) < @pct + +DROP TABLE IF EXISTS dbo.nyctaxi_sample_testing +SELECT * into nyctaxi_sample_testing FROM nyctaxi_sample +WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) > @pct +GO + +/* Call proc using 60% Split */ +EXEC PyTrainTestSplit 60 +GO + +/* Create Linear Regression Model */ +DROP PROCEDURE IF EXISTS PyTrainScikit; +GO + +CREATE PROCEDURE [dbo].[PyTrainScikit] (@trained_model varbinary(max) OUTPUT) +AS +BEGIN +EXEC sp_execute_external_script + @language = N'Python', + @script = N' +import numpy +import pickle +from sklearn.linear_model import LogisticRegression + +##Create SciKit-Learn logistic regression model +X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]] +y = numpy.ravel(InputDataSet[["tipped"]]) + +SKLalgo = LogisticRegression() +logitObj = SKLalgo.fit(X, y) + +##Serialize model +trained_model = pickle.dumps(logitObj) +', +@input_data_1 = N' +select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, +dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance +from nyctaxi_sample_training +', +@input_data_1_name = N'InputDataSet', +@params = N'@trained_model varbinary(max) OUTPUT', +@trained_model = @trained_model OUTPUT; +; +END; +GO + +/* Store the models. You could version, tag, or stamp here if you want */ +DECLARE @model VARBINARY(MAX); +EXEC PyTrainScikit @model OUTPUT; +INSERT INTO nyc_taxi_models (name, model) VALUES('SciKit_model', @model); + +/* Train using RevoScalePy */ +DROP PROCEDURE IF EXISTS TrainTipPredictionModelRxPy; +GO + +CREATE PROCEDURE [dbo].[TrainTipPredictionModelRxPy] (@trained_model varbinary(max) OUTPUT) +AS +BEGIN +EXEC sp_execute_external_script + @language = N'Python', + @script = N' +import numpy +import pickle +from revoscalepy.functions.RxLogit import rx_logit + +## Create a logistic regression model using rx_logit function from revoscalepy package +logitObj = rx_logit("tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance", data = InputDataSet); + +## Serialize model +trained_model = pickle.dumps(logitObj) +', +@input_data_1 = N' +select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, +dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance +from nyctaxi_sample_training +', +@input_data_1_name = N'InputDataSet', +@params = N'@trained_model varbinary(max) OUTPUT', +@trained_model = @trained_model OUTPUT; +; +END; +GO + +/* Now save that model out */ +DECLARE @model VARBINARY(MAX); +EXEC TrainTipPredictionModelRxPy @model OUTPUT; +INSERT INTO nyc_taxi_models (name, model) VALUES('revoscalepy_model', @model); +GO + +/* Create Scoring function from SciKit Learn */ +DROP PROCEDURE IF EXISTS PredictTipSciKitPy; +GO + +CREATE PROCEDURE [dbo].[PredictTipSciKitPy] (@model varchar(50), @inquery nvarchar(max)) +AS +BEGIN +DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model); +EXEC sp_execute_external_script + @language = N'Python', + @script = N' +import pickle; +import numpy; +from sklearn import metrics + +mod = pickle.loads(lmodel2) +X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]] +y = numpy.ravel(InputDataSet[["tipped"]]) + +probArray = mod.predict_proba(X) +probList = [] +for i in range(len(probArray)): + probList.append((probArray[i])[1]) + +probArray = numpy.asarray(probList) +fpr, tpr, thresholds = metrics.roc_curve(y, probArray) +aucResult = metrics.auc(fpr, tpr) +print ("AUC on testing data is: " + str(aucResult)) + +OutputDataSet = pandas.DataFrame(data = probList, columns = ["predictions"]) +', + @input_data_1 = @inquery, + @input_data_1_name = N'InputDataSet', + @params = N'@lmodel2 varbinary(max)', + @lmodel2 = @lmodel2 +WITH RESULT SETS ((Score float)); +END +GO + +/* Score with RevoScalePy */ +DROP PROCEDURE IF EXISTS PredictTipRxPy; +GO + +CREATE PROCEDURE [dbo].[PredictTipRxPy] (@model varchar(50), @inquery nvarchar(max)) +AS +BEGIN +DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model); +EXEC sp_execute_external_script + @language = N'Python', + @script = N' +import pickle; +import numpy; +from sklearn import metrics +from revoscalepy.functions.RxPredict import rx_predict; + +mod = pickle.loads(lmodel2) +X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]] +y = numpy.ravel(InputDataSet[["tipped"]]) + +probArray = rx_predict(mod, X) +probList = probArray["tipped_Pred"].values + +probArray = numpy.asarray(probList) +fpr, tpr, thresholds = metrics.roc_curve(y, probArray) +aucResult = metrics.auc(fpr, tpr) +print ("AUC on testing data is: " + str(aucResult)) + +OutputDataSet = pandas.DataFrame(data = probList, columns = ["predictions"]) +', + @input_data_1 = @inquery, + @input_data_1_name = N'InputDataSet', + @params = N'@lmodel2 varbinary(max)', + @lmodel2 = @lmodel2 +WITH RESULT SETS ((Score float)); +END +GO + + + diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_00.ipynb b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_00.ipynb new file mode 100644 index 00000000..dc009ef6 --- /dev/null +++ b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_00.ipynb @@ -0,0 +1,95 @@ +{ + "metadata": { + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python", + "version": "3.6.6", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "\"Microsoft\"\r\n
\r\n\r\n# SQL Server 2019 big data cluster Tutorial\r\n## 00 - Scenario Overview and System Setup\r\n\r\nIn this set of tutorials you'll work with an end-to-end scenario that uses SQL Server 2019's big data clusters to solve real-world problems. \r\n", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Wide World Importers\r\n\r\nWide World Importers (WWI) is a traditional brick and mortar business that makes specialty items for other companies to use in their products. They design, sell and ship these products worldwide.\r\n\r\nWWI corporate has now added a new partnership with a company called \"AdventureWorks\", which sells bicycles both online and in-store. The AdventureWorks company has asked WWI to produce super-hero themed baskets, seats and other bicycle equipment for a new line of bicycles. WWI corporate has asked the IT department to develop a pilot program with these goals: \r\n\r\n- Integrate the large amounts of data from the AdventureWorks company including customers, products and sales\r\n- Allow a cross-selling strategy so that current WWI customers and AdventureWorks customers see their information without having to re-enter it\r\n- Incorporate their online sales information for deeper analysis\r\n- Provide a historical data set so that the partnership can be evaluated\r\n- Ensure this is a \"framework\" approach, so that it can be re-used with other partners\r\n\r\nWWI has a typical N-Tier application that provides a series of terminals, a Business Logic layer, and a Database back-end. They use on-premises systems, and are interested in linking these to the cloud. \r\n\r\nIn this series of tutorials, you will build a solution using the scale-out features of SQL Server 2019, Data Virtualization, Data Marts, and the Data Lake features. ", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Running these Tutorials\r\n\r\n- You can read through the output of these completed tutorials if you wish - or:\r\n\r\n- You can follow along with the steps you see in these tutorials by copying the code into a SQL Query window and Spark Notebook using the Azure Data Studio tool, or you can click here to download these Jupyter Notebooks and run them in Azure Data Studio for a hands-on experience.\r\n \r\n- If you would like to run the tutorials, you'll need a SQL Server 2019 big data cluster and the client tools installed. If you want to set up your own cluster, click this reference and follow the steps you see there for the server and tools you need.\r\n\r\n- You will need to have the following: \r\n - Your **Knox Password**\r\n - The **Knox IP Address**\r\n - The `sa` **Username** and **Password** to your Master Instance\r\n - The **IP address** to the SQL Server big data cluster Master Instance \r\n - The **name** of your big data cluster\r\n\r\nFor a complete workshop on SQL Server 2019's big data clusters, check out this resource.", + "metadata": {} + }, + { + "cell_type": "markdown", + "source": "## Copy Database backups to the SQL Server 2019 big data cluster Master Instance\r\n\r\nThe first step for the solution is to copy the database backups from WWI from their location on the cloud and then up to your cluster. \r\n\r\nThese commands use the `curl`program to pull the files down. [You can read more about curl here](https://curl.haxx.se/). \r\n\r\nThe next set of commands use the `kubectl` command to copy the files from where you downloaded them to the data directory of the SQL Server 2019 bdc Master Instance. [You can read more about kubectl here](https://kubernetes.io/docs/reference/kubectl/overview/). \r\n\r\nNote that you will need to replace the section of the script marked with `*ReplaceWithClusterName*` with the name of your SQL Server 2019 bdc. (It does not need single or double quotes, just the letters of your cluster name.)\r\n\r\nNotice also that these commands assume a `d:` drive, if you want to use another drive or directory, edit accordingly.\r\n\r\nOnce you have edited these commands, open a Command Prompt on your system and copy and paste each block, one at a time.\r\n\r\nIn the next tutorial you will restore these databases on the Master Instance.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "md d:\\temp\r\nd:\r\ncd \\temp\r\n\r\ncurl -G \"https://cs7a9736a9346a1x44c6xb00.blob.core.windows.net/backups/WWI.bak\" -o WWI.bak", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": "A subdirectory or file d:\\temp already exists.\n" + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "source": "d:\r\ncd \\temp\r\n\r\nkubectl cp WWI.bak mssql-master-pool-0:/var/opt/mssql/data -c mssql-server -n \r\n", + "metadata": {}, + "outputs": [], + "execution_count": 0 + }, + { + "cell_type": "markdown", + "source": "## Copy Exported Data to Storage Pool\r\n\r\nNext, you'll download a few text files that will form the \"external\" data to be ingested into the Storage Pool HDFS store. In production environments, you have multiple options for moving data into HDFS, such as Spark Streaming or the Azure Data Factory.\r\n\r\nThe first code block creates directories in the HDFS store. The second block downloads the source data from a web location. And in the final block, you'll copy the data from your local system to the SQL Server 2019 big data cluster Storage Pool.\r\n\r\nNote that you need to replace the `ReplaceWithKnoxPassword`, `ReplaceWithKnoxwEdnpoint`, and potentially the driver letter and directory values with teh appropriate information.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "curl -i -L -k -u root: -X PUT \"https://:30443/gateway/default/webhdfs/v1/product_review_data?op=MKDIRS\"\r\ncurl -i -L -k -u root: -X PUT \"https://:30443/gateway/default/webhdfs/v1/adventureworks_customers?op=MKDIRS\"\r\ncurl -i -L -k -u root: -X PUT \"https://:30443/gateway/default/webhdfs/v1/adventureworks_products?op=MKDIRS\"", + "metadata": {}, + "outputs": [], + "execution_count": 0 + }, + { + "cell_type": "code", + "source": "curl -G \"https://cs7a9736a9346a1x44c6xb00.blob.core.windows.net/backups/product_reviews_sample.csv\" -o product_reviews.csv\r\ncurl -G \"https://cs7a9736a9346a1x44c6xb00.blob.core.windows.net/backups/customer.csv\" -o customers.csv\r\ncurl -G \"https://cs7a9736a9346a1x44c6xb00.blob.core.windows.net/backups/stockitemholdings.csv\" -o stockitemholdings.csv", + "metadata": {}, + "outputs": [], + "execution_count": 0 + }, + { + "cell_type": "code", + "source": "curl -i -L -k -u root: -X PUT \"https://:30443/gateway/default/webhdfs/v1/product_review_data/product_reviews.csv?op=create&overwrite=true\" -H \"Content-Type: application/octet-stream\" -T \"product_reviews.csv\"\r\ncurl -i -L -k -u root: -X PUT \"https://:30443/gateway/default/webhdfs/v1/adventureworks_customers/customers.csv?op=create&overwrite=true\" -H \"Content-Type: application/octet-stream\" -T \"customers.csv\"\r\ncurl -i -L -k -u root: -X PUT \"https://:30443/gateway/default/webhdfs/v1/adventureworks_products/stockitemholdings.csv?op=create&overwrite=true\" -H \"Content-Type: application/octet-stream\" -T \"stockitemholdings.csv\"", + "metadata": {}, + "outputs": [], + "execution_count": 0 + }, + { + "cell_type": "markdown", + "source": "## Next Step: Working with the SQL Server 2019 big data cluster Master Instance\r\n\r\n**TODO:** Add Link", + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_01.ipynb b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_01.ipynb new file mode 100644 index 00000000..3b54ffce --- /dev/null +++ b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_01.ipynb @@ -0,0 +1,1396 @@ +{ + "metadata": { + "kernelspec": { + "name": "SQL", + "display_name": "SQL", + "language": "sql" + }, + "language_info": { + "name": "sql", + "version": "" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "\"Microsoft\"\r\n
\r\n\r\n# SQL Server 2019 big data cluster Tutorial\r\n## 01 - SQL Server Master Instance Queries\r\n\r\nIn this tutorial you will learn how to run standard SQL Server Queries against the Master Instance (MI) in a SQL Server big data cluster. \r\n\r\nWe'll start with a simple set of queries to explore the Instance: \r\n\r\n", + "metadata": {} + }, + { + "cell_type": "code", + "source": "/* Instance Version */\r\nSELECT @@VERSION; \r\nGO\r\n\r\n/* General Configuration */\r\nUSE master; \r\nGO \r\nEXEC sp_configure;\r\nGO\r\n\r\n/* Databases on this Instance */\r\nSELECT db.name AS 'Database Name'\r\n, Physical_Name AS 'Location on Disk'\r\n, Cast(Cast(Round(cast(mf.size as decimal) * 8.0/1024000.0,2) as decimal(18,2)) as nvarchar) 'Size (GB)'\r\nFROM sys.master_files mf\r\nINNER JOIN \r\n sys.databases db ON db.database_id = mf.database_id\r\nWHERE mf.type_desc = 'ROWS';\r\nGO\r\n\r\nSELECT * from sys.master_files\r\n", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "(1 row affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.1399588" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0121076" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 1, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "(No column name)" + } + ] + }, + "data": [ + { + "0": "Microsoft SQL Server 2019 (CTP2.4) - 15.0.1400.75 (X64) \n\tMar 16 2019 11:53:26 \n\tCopyright (C) 2019 Microsoft Corporation\n\tDeveloper Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS) " + } + ] + }, + "text/html": "
(No column name)
Microsoft SQL Server 2019 (CTP2.4) - 15.0.1400.75 (X64) \n\tMar 16 2019 11:53:26 \n\tCopyright (C) 2019 Microsoft Corporation\n\tDeveloper Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS) <X64>
" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0662367" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(7 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0669921" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(14 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0405191" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 1, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "name" + }, + { + "name": "minimum" + }, + { + "name": "maximum" + }, + { + "name": "config_value" + }, + { + "name": "run_value" + } + ] + }, + "data": [ + { + "0": "allow polybase export", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "allow updates", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "backup checksum default", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "backup compression default", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "clr enabled", + "1": "0", + "2": "1", + "3": "1", + "4": "1" + }, + { + "0": "column encryption enclave type", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "contained database authentication", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "cross db ownership chaining", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "default language", + "1": "0", + "2": "9999", + "3": "0", + "4": "0" + }, + { + "0": "external scripts enabled", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "filestream access level", + "1": "0", + "2": "2", + "3": "0", + "4": "0" + }, + { + "0": "hadoop connectivity", + "1": "0", + "2": "7", + "3": "7", + "4": "7" + }, + { + "0": "max text repl size (B)", + "1": "-1", + "2": "2147483647", + "3": "65536", + "4": "65536" + }, + { + "0": "nested triggers", + "1": "0", + "2": "1", + "3": "1", + "4": "1" + }, + { + "0": "polybase enabled", + "1": "0", + "2": "1", + "3": "1", + "4": "1" + }, + { + "0": "polybase network encryption", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "remote access", + "1": "0", + "2": "1", + "3": "1", + "4": "1" + }, + { + "0": "remote admin connections", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "remote data archive", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "remote login timeout (s)", + "1": "0", + "2": "2147483647", + "3": "10", + "4": "10" + }, + { + "0": "remote proc trans", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "remote query timeout (s)", + "1": "0", + "2": "2147483647", + "3": "600", + "4": "600" + }, + { + "0": "server trigger recursion", + "1": "0", + "2": "1", + "3": "1", + "4": "1" + }, + { + "0": "show advanced options", + "1": "0", + "2": "1", + "3": "0", + "4": "0" + }, + { + "0": "user options", + "1": "0", + "2": "32767", + "3": "0", + "4": "0" + } + ] + }, + "text/html": "
nameminimummaximumconfig_valuerun_value
allow polybase export0100
allow updates0100
backup checksum default0100
backup compression default0100
clr enabled0111
column encryption enclave type0100
contained database authentication0100
cross db ownership chaining0100
default language0999900
external scripts enabled0100
filestream access level0200
hadoop connectivity0777
max text repl size (B)-121474836476553665536
nested triggers0111
polybase enabled0111
polybase network encryption0100
remote access0111
remote admin connections0100
remote data archive0100
remote login timeout (s)021474836471010
remote proc trans0100
remote query timeout (s)02147483647600600
server trigger recursion0111
show advanced options0100
user options03276700
" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 1, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "Database Name" + }, + { + "name": "Location on Disk" + }, + { + "name": "Size (GB)" + } + ] + }, + "data": [ + { + "0": "master", + "1": "/var/opt/mssql/data/master.mdf", + "2": "0.00" + }, + { + "0": "tempdb", + "1": "/var/opt/mssql/data/tempdb.mdf", + "2": "0.01" + }, + { + "0": "model", + "1": "/var/opt/mssql/data/model.mdf", + "2": "0.01" + }, + { + "0": "msdb", + "1": "/var/opt/mssql/data/MSDBData.mdf", + "2": "0.01" + }, + { + "0": "DWDiagnostics", + "1": "/var/opt/mssql/data/DWDiagnostics.mdf", + "2": "0.50" + }, + { + "0": "DWConfiguration", + "1": "/var/opt/mssql/data/DWConfiguration.mdf", + "2": "0.01" + }, + { + "0": "DWQueue", + "1": "/var/opt/mssql/data/DWQueue.mdf", + "2": "0.01" + } + ] + }, + "text/html": "
Database NameLocation on DiskSize (GB)
master/var/opt/mssql/data/master.mdf0.00
tempdb/var/opt/mssql/data/tempdb.mdf0.01
model/var/opt/mssql/data/model.mdf0.01
msdb/var/opt/mssql/data/MSDBData.mdf0.01
DWDiagnostics/var/opt/mssql/data/DWDiagnostics.mdf0.50
DWConfiguration/var/opt/mssql/data/DWConfiguration.mdf0.01
DWQueue/var/opt/mssql/data/DWQueue.mdf0.01
" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 1, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "database_id" + }, + { + "name": "file_id" + }, + { + "name": "file_guid" + }, + { + "name": "type" + }, + { + "name": "type_desc" + }, + { + "name": "data_space_id" + }, + { + "name": "name" + }, + { + "name": "physical_name" + }, + { + "name": "state" + }, + { + "name": "state_desc" + }, + { + "name": "size" + }, + { + "name": "max_size" + }, + { + "name": "growth" + }, + { + "name": "is_media_read_only" + }, + { + "name": "is_read_only" + }, + { + "name": "is_sparse" + }, + { + "name": "is_percent_growth" + }, + { + "name": "is_name_reserved" + }, + { + "name": "is_persistent_log_buffer" + }, + { + "name": "create_lsn" + }, + { + "name": "drop_lsn" + }, + { + "name": "read_only_lsn" + }, + { + "name": "read_write_lsn" + }, + { + "name": "differential_base_lsn" + }, + { + "name": "differential_base_guid" + }, + { + "name": "differential_base_time" + }, + { + "name": "redo_start_lsn" + }, + { + "name": "redo_start_fork_guid" + }, + { + "name": "redo_target_lsn" + }, + { + "name": "redo_target_fork_guid" + }, + { + "name": "backup_lsn" + }, + { + "name": "credential_id" + } + ] + }, + "data": [ + { + "0": "1", + "1": "1", + "2": "NULL", + "3": "0", + "4": "ROWS", + "5": "1", + "6": "master", + "7": "/var/opt/mssql/data/master.mdf", + "8": "0", + "9": "ONLINE", + "10": "512", + "11": "-1", + "12": "10", + "13": "0", + "14": "0", + "15": "0", + "16": "1", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "1", + "1": "2", + "2": "NULL", + "3": "1", + "4": "LOG", + "5": "0", + "6": "mastlog", + "7": "/var/opt/mssql/data/mastlog.ldf", + "8": "0", + "9": "ONLINE", + "10": "256", + "11": "-1", + "12": "10", + "13": "0", + "14": "0", + "15": "0", + "16": "1", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "2", + "1": "1", + "2": "NULL", + "3": "0", + "4": "ROWS", + "5": "1", + "6": "tempdev", + "7": "/var/opt/mssql/data/tempdb.mdf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "-1", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "2", + "1": "2", + "2": "NULL", + "3": "1", + "4": "LOG", + "5": "0", + "6": "templog", + "7": "/var/opt/mssql/data/templog.ldf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "-1", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "3", + "1": "1", + "2": "NULL", + "3": "0", + "4": "ROWS", + "5": "1", + "6": "modeldev", + "7": "/var/opt/mssql/data/model.mdf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "-1", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "3", + "1": "2", + "2": "NULL", + "3": "1", + "4": "LOG", + "5": "0", + "6": "modellog", + "7": "/var/opt/mssql/data/modellog.ldf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "-1", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "4", + "1": "1", + "2": "8fcf842e-a342-414e-a894-f45196a9db85", + "3": "0", + "4": "ROWS", + "5": "1", + "6": "MSDBData", + "7": "/var/opt/mssql/data/MSDBData.mdf", + "8": "0", + "9": "ONLINE", + "10": "1712", + "11": "-1", + "12": "10", + "13": "0", + "14": "0", + "15": "0", + "16": "1", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "4", + "1": "2", + "2": "2f169600-e65f-41b4-b9f0-348866a58fe8", + "3": "1", + "4": "LOG", + "5": "0", + "6": "MSDBLog", + "7": "/var/opt/mssql/data/MSDBLog.ldf", + "8": "0", + "9": "ONLINE", + "10": "64", + "11": "268435456", + "12": "10", + "13": "0", + "14": "0", + "15": "0", + "16": "1", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "5", + "1": "1", + "2": "bd6a15ac-29cf-40ed-ab8b-0f4617f5b39b", + "3": "0", + "4": "ROWS", + "5": "1", + "6": "DWDiagnostics", + "7": "/var/opt/mssql/data/DWDiagnostics.mdf", + "8": "0", + "9": "ONLINE", + "10": "64000", + "11": "256000", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "5", + "1": "2", + "2": "0a35d259-b590-4338-9ebe-04b814c522f4", + "3": "1", + "4": "LOG", + "5": "0", + "6": "DWDiagnostics_log", + "7": "/var/opt/mssql/data/DWDiagnostics_log.ldf", + "8": "0", + "9": "ONLINE", + "10": "9216", + "11": "268435456", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "6", + "1": "1", + "2": "102c6552-92f3-483f-afd2-806c2b0147d4", + "3": "0", + "4": "ROWS", + "5": "1", + "6": "DWConfiguration", + "7": "/var/opt/mssql/data/DWConfiguration.mdf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "-1", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "6", + "1": "2", + "2": "85c7f32d-c686-4adb-a631-bd9ab5d5493b", + "3": "1", + "4": "LOG", + "5": "0", + "6": "DWConfiguration_log", + "7": "/var/opt/mssql/data/DWConfiguration_log.ldf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "268435456", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "7", + "1": "1", + "2": "c3a66027-97db-45d1-a755-14c74ee47a65", + "3": "0", + "4": "ROWS", + "5": "1", + "6": "DWQueue", + "7": "/var/opt/mssql/data/DWQueue.mdf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "-1", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + }, + { + "0": "7", + "1": "2", + "2": "a83e7399-6476-4e8a-9bd2-73cea36548fd", + "3": "1", + "4": "LOG", + "5": "0", + "6": "DWQueue_log", + "7": "/var/opt/mssql/data/DWQueue_log.ldf", + "8": "0", + "9": "ONLINE", + "10": "1024", + "11": "268435456", + "12": "8192", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "NULL", + "20": "NULL", + "21": "NULL", + "22": "NULL", + "23": "NULL", + "24": "NULL", + "25": "NULL", + "26": "NULL", + "27": "NULL", + "28": "NULL", + "29": "NULL", + "30": "NULL", + "31": "NULL" + } + ] + }, + "text/html": "
database_idfile_idfile_guidtypetype_descdata_space_idnamephysical_namestatestate_descsizemax_sizegrowthis_media_read_onlyis_read_onlyis_sparseis_percent_growthis_name_reservedis_persistent_log_buffercreate_lsndrop_lsnread_only_lsnread_write_lsndifferential_base_lsndifferential_base_guiddifferential_base_timeredo_start_lsnredo_start_fork_guidredo_target_lsnredo_target_fork_guidbackup_lsncredential_id
11NULL0ROWS1master/var/opt/mssql/data/master.mdf0ONLINE512-110000100NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
12NULL1LOG0mastlog/var/opt/mssql/data/mastlog.ldf0ONLINE256-110000100NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
21NULL0ROWS1tempdev/var/opt/mssql/data/tempdb.mdf0ONLINE1024-18192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
22NULL1LOG0templog/var/opt/mssql/data/templog.ldf0ONLINE1024-18192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
31NULL0ROWS1modeldev/var/opt/mssql/data/model.mdf0ONLINE1024-18192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
32NULL1LOG0modellog/var/opt/mssql/data/modellog.ldf0ONLINE1024-18192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
418fcf842e-a342-414e-a894-f45196a9db850ROWS1MSDBData/var/opt/mssql/data/MSDBData.mdf0ONLINE1712-110000100NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
422f169600-e65f-41b4-b9f0-348866a58fe81LOG0MSDBLog/var/opt/mssql/data/MSDBLog.ldf0ONLINE6426843545610000100NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
51bd6a15ac-29cf-40ed-ab8b-0f4617f5b39b0ROWS1DWDiagnostics/var/opt/mssql/data/DWDiagnostics.mdf0ONLINE640002560008192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
520a35d259-b590-4338-9ebe-04b814c522f41LOG0DWDiagnostics_log/var/opt/mssql/data/DWDiagnostics_log.ldf0ONLINE92162684354568192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
61102c6552-92f3-483f-afd2-806c2b0147d40ROWS1DWConfiguration/var/opt/mssql/data/DWConfiguration.mdf0ONLINE1024-18192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
6285c7f32d-c686-4adb-a631-bd9ab5d5493b1LOG0DWConfiguration_log/var/opt/mssql/data/DWConfiguration_log.ldf0ONLINE10242684354568192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
71c3a66027-97db-45d1-a755-14c74ee47a650ROWS1DWQueue/var/opt/mssql/data/DWQueue.mdf0ONLINE1024-18192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
72a83e7399-6476-4e8a-9bd2-73cea36548fd1LOG0DWQueue_log/var/opt/mssql/data/DWQueue_log.ldf0ONLINE10242684354568192000000NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
" + }, + "metadata": {} + } + ], + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": "## Ingest data into the SQL Server Databases\r\n\r\nBefore we start working with data, we need to bring it in to the system. We have several options to do that, from the `bcp` utility to SQL Server Integration Services, the Azure Data Factory and more. \r\n\r\nFor the structured data, we'll use the SQL Server `RESTORE` command to bring in two databases from the location we specified earlier with the `kubectl` command.\r\n\r\nThe Code below shows all of that: ", + "metadata": {} + }, + { + "cell_type": "code", + "source": "/* Add the Customer Databases for Wide World Importers */\r\nUSE [master]\r\nRESTORE DATABASE [WideWorldImporters] \r\nFROM DISK = N'/var/opt/mssql/data/WWI.bak' \r\nWITH FILE = 1\r\n, REPLACE\r\n, MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf'\r\n, MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf'\r\n, MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf'\r\n, MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1'\r\n, NOUNLOAD, STATS = 5;\r\nGO\r\n", + "metadata": {}, + "outputs": [ + { + "output_type": "error", + "ename": "", + "evalue": "Msg 3101, Level 16, State 1, Line 3\r\nExclusive access could not be obtained because the database is in use.", + "traceback": [] + }, + { + "output_type": "error", + "ename": "", + "evalue": "Msg 3013, Level 16, State 1, Line 3\r\nRESTORE DATABASE is terminating abnormally.", + "traceback": [] + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:20.3496739" + }, + "metadata": {} + } + ], + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": "## Query Data\r\n\r\nThe SQL Server 2019 big data cluster Master Instance is a SQL Server Instance - and as such has most all of the query facilities and capabilities of Microsoft SQL Server running on Linux.\r\n\r\n**TODO:** Run some standard queries. Investigate simple ML.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "/* Get some general information about the data in the WWI OLTP system */\r\nUSE WideWorldImporters;\r\nGO\r\n\r\n/* Show the Populations. \r\nWhere do we have the most people?\r\n */\r\nSELECT TOP 10 CityName as 'City Name'\r\n, StateProvinceName as 'State or Province'\r\n, sp.LatestRecordedPopulation as 'Population'\r\n, CountryName\r\nFROM Application.Cities AS city\r\nJOIN Application.StateProvinces AS sp on\r\n city.StateProvinceID = sp.StateProvinceID\r\nJOIN Application.Countries AS ctry on \r\n sp.CountryID=ctry.CountryID\r\n", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0041862" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(10 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.4554272" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 3, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "City Name" + }, + { + "name": "State or Province" + }, + { + "name": "Population" + }, + { + "name": "CountryName" + } + ] + }, + "data": [ + { + "0": "Addison", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Adrian", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Advance", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Ahmeek", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Akron", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Alabaster", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Alanson", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Alba", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Albion", + "1": "Michigan", + "2": "9895622", + "3": "United States" + }, + { + "0": "Alden", + "1": "Michigan", + "2": "9895622", + "3": "United States" + } + ] + }, + "text/html": "
City NameState or ProvincePopulationCountryName
AddisonMichigan9895622United States
AdrianMichigan9895622United States
AdvanceMichigan9895622United States
AhmeekMichigan9895622United States
AkronMichigan9895622United States
AlabasterMichigan9895622United States
AlansonMichigan9895622United States
AlbaMichigan9895622United States
AlbionMichigan9895622United States
AldenMichigan9895622United States
" + }, + "metadata": {} + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "source": "/* Show Customer Sales in WWI OLTP\r\nWhere do we have the most customers?\r\n*/\r\nUSE WideWorldImporters;\r\nGO\r\n\r\nSELECT TOP 10 s.CustomerID\r\n, s.CustomerName\r\n, sc.CustomerCategoryName\r\n, pp.FullName AS PrimaryContact\r\n, ap.FullName AS AlternateContact\r\n, s.PhoneNumber\r\n, s.FaxNumber\r\n, bg.BuyingGroupName\r\n, s.WebsiteURL\r\n, dm.DeliveryMethodName AS DeliveryMethod\r\n, c.CityName AS CityName\r\n, s.DeliveryLocation AS DeliveryLocation\r\n, s.DeliveryRun\r\n, s.RunPosition\r\nFROM Sales.Customers AS s\r\n LEFT OUTER JOIN Sales.CustomerCategories AS sc\r\n ON s.CustomerCategoryID = sc.CustomerCategoryID\r\n LEFT OUTER JOIN [Application].People AS pp\r\n ON s.PrimaryContactPersonID = pp.PersonID\r\n LEFT OUTER JOIN [Application].People AS ap\r\n ON s.AlternateContactPersonID = ap.PersonID\r\n LEFT OUTER JOIN Sales.BuyingGroups AS bg\r\n ON s.BuyingGroupID = bg.BuyingGroupID\r\n LEFT OUTER JOIN [Application].DeliveryMethods AS dm\r\n ON s.DeliveryMethodID = dm.DeliveryMethodID\r\n LEFT OUTER JOIN [Application].Cities AS c\r\n ON s.DeliveryCityID = c.CityID", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0043681" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(10 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.8590423" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 4, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "CustomerID" + }, + { + "name": "CustomerName" + }, + { + "name": "CustomerCategoryName" + }, + { + "name": "PrimaryContact" + }, + { + "name": "AlternateContact" + }, + { + "name": "PhoneNumber" + }, + { + "name": "FaxNumber" + }, + { + "name": "BuyingGroupName" + }, + { + "name": "WebsiteURL" + }, + { + "name": "DeliveryMethod" + }, + { + "name": "CityName" + }, + { + "name": "DeliveryLocation" + }, + { + "name": "DeliveryRun" + }, + { + "name": "RunPosition" + } + ] + }, + "data": [ + { + "0": "47", + "1": "Tailspin Toys (Lake Hughes, CA)", + "2": "Novelty Shop", + "3": "Serhat Akbulut", + "4": "Nadja Johansson", + "5": "(209) 555-0100", + "6": "(209) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/LakeHughes", + "9": "Delivery Van", + "10": "Lake Hughes", + "11": "0xE6100000010CB759619FA556414000FD63C6809C5DC0", + "12": "", + "13": "" + }, + { + "0": "46", + "1": "Tailspin Toys (Jemison, AL)", + "2": "Novelty Shop", + "3": "Didem ozCelik", + "4": "Krista Andrejev", + "5": "(205) 555-0100", + "6": "(205) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/Jemison", + "9": "Delivery Van", + "10": "Jemison", + "11": "0xE6100000010CE9DC4834DC7A4040221F4F26C9AF55C0", + "12": "", + "13": "" + }, + { + "0": "44", + "1": "Tailspin Toys (Amanda Park, WA)", + "2": "Novelty Shop", + "3": "Adrijana Blagojevic", + "4": "Lina Martins", + "5": "(206) 555-0100", + "6": "(206) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/AmandaPark", + "9": "Delivery Van", + "10": "Amanda Park", + "11": "0xE6100000010C22F4D83B48BB474086B82869B4F85EC0", + "12": "", + "13": "" + }, + { + "0": "43", + "1": "Tailspin Toys (Upper Preston, WA)", + "2": "Novelty Shop", + "3": "Ganapati Gadiyaram", + "4": "Parsa Blijleven", + "5": "(206) 555-0100", + "6": "(206) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/UpperPreston", + "9": "Delivery Van", + "10": "Upper Preston", + "11": "0xE6100000010CE0D2D62DA7C04740FB96395D167A5EC0", + "12": "", + "13": "" + }, + { + "0": "42", + "1": "Tailspin Toys (Arietta, NY)", + "2": "Novelty Shop", + "3": "Chandrakanta Raut", + "4": "Ivan Castellanos", + "5": "(212) 555-0100", + "6": "(212) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/Arietta", + "9": "Delivery Van", + "10": "Arietta", + "11": "0xE6100000010CC3F2E7DB829F4540961F5D1121A152C0", + "12": "", + "13": "" + }, + { + "0": "41", + "1": "Tailspin Toys (Olivette, MO)", + "2": "Novelty Shop", + "3": "Lana Rozej", + "4": "Kalpana Mukherjee", + "5": "(314) 555-0100", + "6": "(314) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/Olivette", + "9": "Delivery Van", + "10": "Olivette", + "11": "0xE6100000010C5C470B8629554340CE5B2B900F9856C0", + "12": "", + "13": "" + }, + { + "0": "38", + "1": "Tailspin Toys (Airport Drive, MO)", + "2": "Novelty Shop", + "3": "Nils Kalnins", + "4": "Rajiv Kotadia", + "5": "(314) 555-0100", + "6": "(314) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/AirportDrive", + "9": "Delivery Van", + "10": "Airport Drive", + "11": "0xE6100000010CE6E0E35D3F924240D5D7A9A8B0A057C0", + "12": "", + "13": "" + }, + { + "0": "32", + "1": "Tailspin Toys (Maypearl, TX)", + "2": "Novelty Shop", + "3": "Nikolajs Kalejs", + "4": "Philippe Lamy", + "5": "(210) 555-0100", + "6": "(210) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/Maypearl", + "9": "Delivery Van", + "10": "Maypearl", + "11": "0xE6100000010C77CC8AF216284040ECB7C02FBF4058C0", + "12": "", + "13": "" + }, + { + "0": "31", + "1": "Tailspin Toys (Lake Stevens, WA)", + "2": "Novelty Shop", + "3": "Kimberly Pace", + "4": "Shobha Gupta", + "5": "(206) 555-0100", + "6": "(206) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/LakeStevens", + "9": "Delivery Van", + "10": "Lake Stevens", + "11": "0xE6100000010C151E34BBEE01484061376C5B14845EC0", + "12": "", + "13": "" + }, + { + "0": "30", + "1": "Tailspin Toys (Koontzville, WA)", + "2": "Novelty Shop", + "3": "Odessa Schneider", + "4": "Konrads Sprogis", + "5": "(206) 555-0100", + "6": "(206) 555-0101", + "7": "Tailspin Toys", + "8": "http://www.tailspintoys.com/Koontzville", + "9": "Delivery Van", + "10": "Koontzville", + "11": "0xE6100000010C881F52C2020248404F7633A39FBC5DC0", + "12": "", + "13": "" + } + ] + }, + "text/html": "
CustomerIDCustomerNameCustomerCategoryNamePrimaryContactAlternateContactPhoneNumberFaxNumberBuyingGroupNameWebsiteURLDeliveryMethodCityNameDeliveryLocationDeliveryRunRunPosition
47Tailspin Toys (Lake Hughes, CA)Novelty ShopSerhat AkbulutNadja Johansson(209) 555-0100(209) 555-0101Tailspin Toyshttp://www.tailspintoys.com/LakeHughesDelivery VanLake Hughes0xE6100000010CB759619FA556414000FD63C6809C5DC0
46Tailspin Toys (Jemison, AL)Novelty ShopDidem ozCelikKrista Andrejev(205) 555-0100(205) 555-0101Tailspin Toyshttp://www.tailspintoys.com/JemisonDelivery VanJemison0xE6100000010CE9DC4834DC7A4040221F4F26C9AF55C0
44Tailspin Toys (Amanda Park, WA)Novelty ShopAdrijana BlagojevicLina Martins(206) 555-0100(206) 555-0101Tailspin Toyshttp://www.tailspintoys.com/AmandaParkDelivery VanAmanda Park0xE6100000010C22F4D83B48BB474086B82869B4F85EC0
43Tailspin Toys (Upper Preston, WA)Novelty ShopGanapati GadiyaramParsa Blijleven(206) 555-0100(206) 555-0101Tailspin Toyshttp://www.tailspintoys.com/UpperPrestonDelivery VanUpper Preston0xE6100000010CE0D2D62DA7C04740FB96395D167A5EC0
42Tailspin Toys (Arietta, NY)Novelty ShopChandrakanta RautIvan Castellanos(212) 555-0100(212) 555-0101Tailspin Toyshttp://www.tailspintoys.com/AriettaDelivery VanArietta0xE6100000010CC3F2E7DB829F4540961F5D1121A152C0
41Tailspin Toys (Olivette, MO)Novelty ShopLana RozejKalpana Mukherjee(314) 555-0100(314) 555-0101Tailspin Toyshttp://www.tailspintoys.com/OlivetteDelivery VanOlivette0xE6100000010C5C470B8629554340CE5B2B900F9856C0
38Tailspin Toys (Airport Drive, MO)Novelty ShopNils KalninsRajiv Kotadia(314) 555-0100(314) 555-0101Tailspin Toyshttp://www.tailspintoys.com/AirportDriveDelivery VanAirport Drive0xE6100000010CE6E0E35D3F924240D5D7A9A8B0A057C0
32Tailspin Toys (Maypearl, TX)Novelty ShopNikolajs KalejsPhilippe Lamy(210) 555-0100(210) 555-0101Tailspin Toyshttp://www.tailspintoys.com/MaypearlDelivery VanMaypearl0xE6100000010C77CC8AF216284040ECB7C02FBF4058C0
31Tailspin Toys (Lake Stevens, WA)Novelty ShopKimberly PaceShobha Gupta(206) 555-0100(206) 555-0101Tailspin Toyshttp://www.tailspintoys.com/LakeStevensDelivery VanLake Stevens0xE6100000010C151E34BBEE01484061376C5B14845EC0
30Tailspin Toys (Koontzville, WA)Novelty ShopOdessa SchneiderKonrads Sprogis(206) 555-0100(206) 555-0101Tailspin Toyshttp://www.tailspintoys.com/KoontzvilleDelivery VanKoontzville0xE6100000010C881F52C2020248404F7633A39FBC5DC0
" + }, + "metadata": {} + } + ], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": "## Next Step: Data Virtualization\r\n\r\n**TODO:** Add Link", + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_02.ipynb b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_02.ipynb new file mode 100644 index 00000000..4c0e1372 --- /dev/null +++ b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_02.ipynb @@ -0,0 +1,149 @@ +{ + "metadata": { + "kernelspec": { + "name": "SQL", + "display_name": "SQL", + "language": "sql" + }, + "language_info": { + "name": "sql", + "version": "" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "\"Microsoft\"\r\n
\r\n\r\n# SQL Server 2019 big data cluster Tutorial\r\n## 02 - Data Virtualization\r\n\r\nIn this tutorial you will learn how to create and query Virtualized Data in a SQL Server big data cluster. \r\n\r\n**TODO:** Complete Tutorial \r\n", + "metadata": {} + }, + { + "cell_type": "code", + "source": "/* Create External File Format */\r\n\r\nUSE WideWorldImporters;\r\nGO\r\n\r\nIF NOT EXISTS(SELECT * FROM sys.external_file_formats WHERE name = 'csv_file')\r\nBEGIN\r\n CREATE EXTERNAL FILE FORMAT csv_file\r\n WITH (\r\n FORMAT_TYPE = DELIMITEDTEXT,\r\n FORMAT_OPTIONS(\r\n FIELD_TERMINATOR = ',',\r\n STRING_DELIMITER = '0x22',\r\n FIRST_ROW = 2,\r\n USE_TYPE_DEFAULT = TRUE)\r\n );\r\nEND", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0818304" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.4794854" + }, + "metadata": {} + } + ], + "execution_count": 6 + }, + { + "cell_type": "code", + "source": "/* Create External Data Source to the Storage Pool */\r\nIF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'SqlStoragePool')\r\nBEGIN\r\n CREATE EXTERNAL DATA SOURCE SqlStoragePool\r\n WITH (LOCATION = 'sqlhdfs://service-master-pool:50070');\r\nEND", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.3879082" + }, + "metadata": {} + } + ], + "execution_count": 7 + }, + { + "cell_type": "code", + "source": "/* Create an External Table that can read from the Storage Pool File Location */\r\nIF NOT EXISTS(SELECT * FROM sys.external_tables WHERE name = 'partner_customers_hdfs')\r\nBEGIN\r\n CREATE EXTERNAL TABLE [partner_customers_hdfs]\r\n (\"CustomerSource\" VARCHAR(250) \r\n , \"CustomerName\" VARCHAR(250) \r\n , \"EmailAddress\" VARCHAR(250))\r\n WITH\r\n (\r\n DATA_SOURCE = SqlStoragePool,\r\n LOCATION = '/partner_customers',\r\n FILE_FORMAT = csv_file\r\n );\r\nEND", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.4509022" + }, + "metadata": {} + } + ], + "execution_count": 8 + }, + { + "cell_type": "code", + "source": "/* Read Data from HDFS using only T-SQL */\r\n\r\nSELECT TOP 10 CustomerSource\r\n, CustomerName\r\n, EMailAddress\r\n FROM [partner_customers_hdfs] hdfs\r\nWHERE EmailAddress LIKE '%wingtip%';\r\nGO\r\n", + "metadata": {}, + "outputs": [ + { + "output_type": "error", + "evalue": "Msg 8680, Level 17, State 87, Line 3\r\nInternal Query Processor Error: The query processor encountered an unexpected error during the processing of a remote query phase.", + "ename": "", + "traceback": [] + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.2393277" + }, + "metadata": {} + } + ], + "execution_count": 9 + }, + { + "cell_type": "code", + "source": "/* Now Join Those to show customers we currently have in a SQL Server Database \r\nand the Category they qre in the External Table */\r\n\r\nSELECT TOP 10 a.FullName, b.CustomerSource\r\n FROM [WideWorldImporters].[Application].[People] a\r\n INNER JOIN [WideWorldImporters].[dbo].[partner_customers_hdfs] b ON a.EmailAddress = b.EmailAddress;\r\n GO", + "metadata": {}, + "outputs": [ + { + "output_type": "error", + "evalue": "Msg 8680, Level 17, State 87, Line 4\r\nInternal Query Processor Error: The query processor encountered an unexpected error during the processing of a remote query phase.", + "ename": "", + "traceback": [] + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.2139328" + }, + "metadata": {} + } + ], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": "## Next Steps: Continue on to Working with the SQL Server Data Pool", + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_03.ipynb b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_03.ipynb new file mode 100644 index 00000000..8d9ce722 --- /dev/null +++ b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_03.ipynb @@ -0,0 +1,272 @@ +{ + "metadata": { + "kernelspec": { + "name": "SQL", + "display_name": "SQL", + "language": "sql" + }, + "language_info": { + "name": "sql", + "version": "" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "\"Microsoft\"\r\n
\r\n\r\n# SQL Server 2019 big data cluster Tutorial\r\n## 03 - Creating and Querying a Data Mart\r\n\r\nIn this tutorial you will learn how to create and query a Data Mart using Virtualized Data in a SQL Server big data cluster. \r\n\r\n**TODO:** Complete Tutorial ", + "metadata": {} + }, + { + "cell_type": "code", + "source": "USE WideWorldImporters;\r\nGO\r\n\r\nIF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'SqlDataPool')\r\n CREATE EXTERNAL DATA SOURCE SqlDataPool\r\n WITH (LOCATION = 'sqldatapool://service-mssql-controller:8080/datapools/default');", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0030108" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.2592320" + }, + "metadata": {} + } + ], + "execution_count": 9 + }, + { + "cell_type": "code", + "source": "CREATE EXTERNAL TABLE [web_clickstream_clicks_data_pool]\r\n(\"wcs_click_date_sk\" BIGINT , \"wcs_click_time_sk\" BIGINT , \"wcs_sales_sk\" BIGINT , \"wcs_item_sk\" BIGINT, \"wcs_web_page_sk\" BIGINT , \"wcs_user_sk\" BIGINT)\r\nWITH\r\n(\r\n DATA_SOURCE = SqlDataPool,\r\n DISTRIBUTION = ROUND_ROBIN\r\n);", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:01.8526029" + }, + "metadata": {} + } + ], + "execution_count": 10 + }, + { + "cell_type": "code", + "source": "/* Create an External Table that can read from the Storage Pool File Location */\r\nIF NOT EXISTS(SELECT * FROM sys.external_tables WHERE name = 'web_customers_hdfs')\r\nBEGIN\r\n CREATE EXTERNAL TABLE [web_customers_hdfs]\r\n (FieldName\" VARCHAR(250) \r\n)\r\n WITH\r\n (\r\n DATA_SOURCE = SqlStoragePool,\r\n LOCATION = '/adventureworks_export',\r\n FILE_FORMAT = csv_file\r\n );\r\nEND", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "source": "BEGIN\r\n INSERT INTO web_clickstream_clicks_data_pool\r\n SELECT wcs_user_sk, i_category_id, COUNT_BIG(*) as clicks\r\n FROM web_clickstreams_hdfs\r\nEND", + "metadata": {}, + "outputs": [ + { + "output_type": "error", + "evalue": "Msg 208, Level 16, State 1, Line 2\r\nInvalid object name 'sales.dbo.web_clickstreams_hdfs_parquet'.", + "ename": "", + "traceback": [] + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0044263" + }, + "metadata": {} + } + ], + "execution_count": 12 + }, + { + "cell_type": "code", + "source": "SELECT count(*) FROM [dbo].[web_clickstream_clicks_data_pool]\r\nSELECT TOP 10 * FROM [dbo].[web_clickstream_clicks_data_pool]", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "(1 row affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(10 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:03.4759142" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 22, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "(No column name)" + } + ] + }, + "data": [ + { + "0": "512000" + } + ] + }, + "text/html": "
(No column name)
512000
" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 22, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "wcs_click_date_sk" + }, + { + "name": "wcs_click_time_sk" + }, + { + "name": "wcs_sales_sk" + }, + { + "name": "wcs_item_sk" + }, + { + "name": "wcs_web_page_sk" + }, + { + "name": "wcs_user_sk" + } + ] + }, + "data": [ + { + "0": "37019", + "1": "85961", + "2": "NULL", + "3": "3971", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "24228", + "2": "NULL", + "3": "3716", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "62814", + "2": "NULL", + "3": "3143", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "60131", + "2": "NULL", + "3": "13202", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "48860", + "2": "NULL", + "3": "13714", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "70453", + "2": "NULL", + "3": "248", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "72847", + "2": "NULL", + "3": "6721", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "50429", + "2": "NULL", + "3": "17647", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "60478", + "2": "NULL", + "3": "16914", + "4": "14", + "5": "NULL" + }, + { + "0": "37019", + "1": "63148", + "2": "NULL", + "3": "6664", + "4": "14", + "5": "NULL" + } + ] + }, + "text/html": "
wcs_click_date_skwcs_click_time_skwcs_sales_skwcs_item_skwcs_web_page_skwcs_user_sk
3701985961NULL397114NULL
3701924228NULL371614NULL
3701962814NULL314314NULL
3701960131NULL1320214NULL
3701948860NULL1371414NULL
3701970453NULL24814NULL
3701972847NULL672114NULL
3701950429NULL1764714NULL
3701960478NULL1691414NULL
3701963148NULL666414NULL
" + }, + "metadata": {} + } + ], + "execution_count": 22 + } + ] +} \ No newline at end of file diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_04.ipynb b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_04.ipynb new file mode 100644 index 00000000..05c20fcc --- /dev/null +++ b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_04.ipynb @@ -0,0 +1,72 @@ +{ + "metadata": { + "kernelspec": { + "name": "pyspark3kernel", + "display_name": "PySpark3" + }, + "language_info": { + "name": "pyspark3", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "python", + "version": 3 + }, + "pygments_lexer": "python3" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "\"Microsoft\"\r\n
\r\n\r\n# SQL Server 2019 big data cluster Tutorial\r\n## 04 - Using Spark\r\n\r\nIn this tutorial you will learn how to work with Spark Jobs in a SQL Server big data cluster. \r\n\r\n**TODO:** Complete Tutorial ", + "metadata": {} + }, + { + "cell_type": "code", + "source": "# Read the product reviews CSV files into a spark data frame, print schema & top rows\r\nresults = spark.read.option(\"inferSchema\", \"true\").csv('/product_review_data').toDF(\"Item_ID\", \"Review\")", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "text": "Starting Spark application\n", + "output_type": "stream" + }, + { + "data": { + "text/plain": "", + "text/html": "\n
IDYARN Application IDKindStateSpark UIDriver logCurrent session?
1application_1554980453988_0002pyspark3idleLinkLink
" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "text": "SparkSession available as 'spark'.\n", + "output_type": "stream" + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "source": "# Save results as parquet file and create hive table\r\nresults.write.format(\"parquet\").mode(\"overwrite\").saveAsTable(\"Top_Product_Reviews\")", + "metadata": {}, + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "code", + "source": "# Execute Spark SQL commands\r\nsqlDF = spark.sql(\"SELECT * FROM Top_Product_Reviews LIMIT 10\")\r\nsqlDF.show()", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "text": "+-------+--------------------+\n|Item_ID| Review|\n+-------+--------------------+\n| 72621|Works fine. Easy ...|\n| 89334|great product to ...|\n| 89335|Next time will go...|\n| 84259|Great Gift Great ...|\n| 84398|After trip to Par...|\n| 66434|Simply the best t...|\n| 66501|This is the exact...|\n| 66587|Not super magnet;...|\n| 66680|Installed as bath...|\n| 66694|Our home was buil...|\n+-------+--------------------+", + "output_type": "stream" + } + ], + "execution_count": 9 + } + ] +} \ No newline at end of file diff --git a/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_05.ipynb b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_05.ipynb new file mode 100644 index 00000000..b822cfee --- /dev/null +++ b/sqlserver2019bigdataclusters/SQL2019BDC/notebooks/bdc_tutorial_05.ipynb @@ -0,0 +1,15813 @@ +{ + "metadata": { + "kernelspec": { + "name": "SQL", + "display_name": "SQL", + "language": "sql" + }, + "language_info": { + "name": "sql", + "version": "" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": "\"Microsoft\"\n
\n\n# SQL Server 2019 big data cluster Tutorial\n## 05 - Machine Learning with Python\n\nIn this tutorials you'll set up Machine Learning in SQL Server 2019 and create a Bulk-Scoring Routine.\n\nMore on this at [the Microsoft documentation site for Machine Learning Services.](https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/sqldev-in-database-python-for-sql-developers?view=sql-server-2017)", + "metadata": {} + }, + { + "cell_type": "code", + "source": "/* Enable Machine Learning Services */\nUSE master;\nGO\n\nEXEC sp_configure 'external scripts enabled', 1;\nGO\nRECONFIGURE WITH OVERRIDE;\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0203617" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Configuration option 'external scripts enabled' changed from 0 to 1. Run the RECONFIGURE statement to install." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.1969723" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.8810010" + }, + "metadata": {} + } + ], + "execution_count": 1 + }, + { + "cell_type": "code", + "source": "/* Load Prediction Data */\nUSE master;\nGO\n\nRESTORE DATABASE [NYC]\nFROM DISK = N'/var/opt/mssql/data/NYC.bak' \nWITH FILE = 1\n, REPLACE\n, MOVE N'NYCTaxi_Sample' TO N'/var/opt/mssql/data/NYC.mdf'\n, MOVE N'NYCTaxi_Sample_log' TO N'/var/opt/mssql/data/NYC.ldf'\n, NOUNLOAD, STATS = 5;\nGO", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "source": "/* Run some Python. This just returns a a couple of library versions */\nEXECUTE sp_execute_external_script\n@language = N'Python',\n@script = N'\nimport numpy as np\nimport pandas as pd\nprint(np.__version__)\nprint(pd.__version__)\n',\n@input_data_1 = N'SELECT 1 as Col1';\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "STDOUT message(s) from external script: \n1.12.1\n0.19.2" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:17.8513455" + }, + "metadata": {} + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO\n\n/* Creates Plot Binary data */\nDROP PROCEDURE IF EXISTS PyPlotMatplotlib;\nGO\n\nCREATE PROCEDURE [dbo].[PyPlotMatplotlib]\nAS\nBEGIN\n SET NOCOUNT ON;\n DECLARE @query nvarchar(max) =\n N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]'\n EXECUTE sp_execute_external_script\n @language = N'Python',\n @script = N'\nimport matplotlib\nmatplotlib.use(\"Agg\")\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport pickle\n\nfig_handle = plt.figure()\nplt.hist(InputDataSet.tipped)\nplt.xlabel(\"Tipped\")\nplt.ylabel(\"Counts\")\nplt.title(\"Histogram, Tipped\")\nplot0 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =[\"plot\"])\nplt.clf()\n\nplt.hist(InputDataSet.tip_amount)\nplt.xlabel(\"Tip amount ($)\")\nplt.ylabel(\"Counts\")\nplt.title(\"Histogram, Tip amount\")\nplot1 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =[\"plot\"])\nplt.clf()\n\nplt.hist(InputDataSet.fare_amount)\nplt.xlabel(\"Fare amount ($)\")\nplt.ylabel(\"Counts\")\nplt.title(\"Histogram, Fare amount\")\nplot2 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =[\"plot\"])\nplt.clf()\n\nplt.scatter( InputDataSet.fare_amount, InputDataSet.tip_amount)\nplt.xlabel(\"Fare Amount ($)\")\nplt.ylabel(\"Tip Amount ($)\")\nplt.title(\"Tip amount by Fare amount\")\nplot3 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =[\"plot\"])\nplt.clf()\n\nOutputDataSet = plot0.append(plot1, ignore_index=True).append(plot2, ignore_index=True).append(plot3, ignore_index=True)\n',\n@input_data_1 = @query\nWITH RESULT SETS ((plot varbinary(max)))\nEND\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0736030" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0934020" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0902700" + }, + "metadata": {} + } + ], + "execution_count": 16 + }, + { + "cell_type": "code", + "source": "/* Call that procedure */\nEXEC [dbo].[PyPlotMatplotlib];\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:01:02.2179120" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 17, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "plot" + } + ] + }, + "data": [ + { + "0": "0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B01636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A06B0296270E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A0640C95A70E97F6828298171357D713628682B682C682D4B02682E4B0268267D71378A06B8F76170E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7138298171397D713A2868267D713B58080000005F696E76616C6964713C4B01580A0000005F7472616E73666F726D713D6835682B682C58050000005F62626F78713E636D6174706C6F746C69622E7472616E73666F726D730A42626F780A713F298171407D71412858070000005F6D696E706F737142636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A7143636E756D70790A6E6461727261790A71444B008571454301627146877147527148284B014B02857149636E756D70790A64747970650A714A58020000006638714B4B004B0187714C52714D284B0358010000003C714E4E4E4E4AFFFFFFFF4AFFFFFFFF4B0074714F62894310000000000000F07F000000000000F07F71507471516258070000005F69676E6F726571528868267D71538A06B8F76170E97F683973683C4B01580C0000005F706F696E74735F6F7269677154684368444B008571556846877156527157284B014B024B02867158684D89432000000000000000000000000000000000000000000000F03F000000000000F03F715974715A62682B682C58070000005F706F696E7473715B684368444B0085715C684687715D52715E284B014B024B0286715F684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7160747161627562685B4E75627368306828298171627D716328682B682C682D4B02682E4B0268267D71648A0640C95A70E97F68357368306831298171657D71662868267D71678A06D0C85A70E97F68627358070000005F626F786F75747168683F298171697D716A286842684368444B0085716B684687716C52716D284B014B0285716E684D894310000000000000F07F000000000000F07F716F7471706268528868267D71718A0628C85A70E97F686573683C4B016854684368444B008571726846877173527174284B014B024B02867175684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717674717762682B682C685B684368444B00857178684687717952717A284B014B024B0286717B684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717C74717D627562683C4B0168254E682B682C58090000005F696E766572746564717E4E7562683C4B0158020000005F62717F636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A7180298171817D71822868267D71838A06D0C85A70E97F686273683C4B026825684368444B008571846846877185527186284B014B034B03867187684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F718874718962682B682C687E4E75627562683C4B01687F683275628A0680305B70E97F68282981718A7D718B28682B682C682D4B02682E4B0268267D718C8A0628315B70E97F68382981718D7D718E2868267D718F683C4B01683D688A682B682C683E683F298171907D7191286842684368444B008571926846877193527194284B014B02857195684D894310000000000000F07F000000000000F07F71967471976268528868267D71988A0628315B70E97F688D73683C4B016854684368444B00857199684687719A52719B284B014B024B0286719C684D89432000000000000000000000000000000000000000000000F03F000000000000F03F719D74719E62682B682C685B684368444B0085719F68468771A05271A1284B014B024B028671A2684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71A37471A4627562685B4E75627368306828298171A57D71A628682B682C682D4B02682E4B0268267D71A78A0680305B70E97F688A7368306831298171A87D71A92868267D71AA8A06D0CF5A70E97F68A5736868683F298171AB7D71AC286842684368444B008571AD68468771AE5271AF284B014B028571B0684D894310000000000000F07F000000000000F07F71B17471B26268528868267D71B38A0628CF5A70E97F68A873683C4B016854684368444B008571B468468771B55271B6284B014B024B028671B7684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71B87471B962682B682C685B684368444B008571BA68468771BB5271BC284B014B024B028671BD684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71BE7471BF627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171C07D71C12868267D71C28A06D0CF5A70E97F68A573683C4B026825684368444B008571C368468771C45271C5284B014B034B038671C6684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71C77471C862682B682C687E4E75627562683C4B01687F683275628A06D8FD5D70E97F6828298171C97D71CA28682B682C682D4B02682E4B0268267D71CB8A0680FE5D70E97F6838298171CC7D71CD2868267D71CE683C4B01683D68C9682B682C683E683F298171CF7D71D0286842684368444B008571D168468771D25271D3284B014B028571D4684D894310000000000000F07F000000000000F07F71D57471D66268528868267D71D78A0680FE5D70E97F68CC73683C4B016854684368444B008571D868468771D95271DA284B014B024B028671DB684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71DC7471DD62682B682C685B684368444B008571DE68468771DF5271E0284B014B024B028671E1684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71E27471E3627562685B4E75627368306828298171E47D71E528682B682C682D4B02682E4B0268267D71E68A06D8FD5D70E97F68C97368306831298171E77D71E82868267D71E98A0668FD5D70E97F68E4736868683F298171EA7D71EB286842684368444B008571EC68468771ED5271EE284B014B028571EF684D894310000000000000F07F000000000000F07F71F07471F16268528868267D71F28A06C0FC5D70E97F68E773683C4B016854684368444B008571F368468771F45271F5284B014B024B028671F6684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71F77471F862682B682C685B684368444B008571F968468771FA5271FB284B014B024B028671FC684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71FD7471FE627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171FF7D72000100002868267D72010100008A0668FD5D70E97F68E473683C4B026825684368444B008572020100006846877203010000527204010000284B014B034B03867205010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720601000074720701000062682B682C687E4E75627562683C4B01687F683275628A06483E5B70E97F6828298172080100007D720901000028682B682C682D4B02682E4B0268267D720A0100008A06F03E5B70E97F68382981720B0100007D720C0100002868267D720D010000683C4B01683D6A08010000682B682C683E683F2981720E0100007D720F010000286842684368444B008572100100006846877211010000527212010000284B014B02857213010000684D894310000000000000F07F000000000000F07F72140100007472150100006268528868267D72160100008A06F03E5B70E97F6A0B01000073683C4B016854684368444B008572170100006846877218010000527219010000284B014B024B0286721A010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721B01000074721C01000062682B682C685B684368444B0085721D010000684687721E01000052721F010000284B014B024B02867220010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7221010000747222010000627562685B4E75627368306828298172230100007D722401000028682B682C682D4B02682E4B0268267D72250100008A06483E5B70E97F6A080100007368306831298172260100007D72270100002868267D72280100008A06D83D5B70E97F6A23010000736868683F298172290100007D722A010000286842684368444B0085722B010000684687722C01000052722D010000284B014B0285722E010000684D894310000000000000F07F000000000000F07F722F0100007472300100006268528868267D72310100008A06303D5B70E97F6A2601000073683C4B016854684368444B008572320100006846877233010000527234010000284B014B024B02867235010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723601000074723701000062682B682C685B684368444B00857238010000684687723901000052723A010000284B014B024B0286723B010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723C01000074723D010000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723E0100007D723F0100002868267D72400100008A06D83D5B70E97F6A2301000073683C4B026825684368444B008572410100006846877242010000527243010000284B014B034B03867244010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724501000074724601000062682B682C687E4E75627562683C4B01687F683275628A0670C45670E97F6828298172470100007D724801000028682B682C682D4B02682E4B0268267D72490100008A0618C55670E97F68382981724A0100007D724B0100002868267D724C010000683C4B01683D6A47010000682B682C683E683F2981724D0100007D724E010000286842684368444B0085724F0100006846877250010000527251010000284B014B02857252010000684D894310000000000000F07F000000000000F07F72530100007472540100006268528868267D72550100008A0618C55670E97F6A4A01000073683C4B016854684368444B008572560100006846877257010000527258010000284B014B024B02867259010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725A01000074725B01000062682B682C685B684368444B0085725C010000684687725D01000052725E010000284B014B024B0286725F010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7260010000747261010000627562685B4E75627368306828298172620100007D726301000028682B682C682D4B02682E4B0268267D72640100008A0670C45670E97F6A470100007368306831298172650100007D72660100002868267D72670100008A0600C45670E97F6A62010000736868683F298172680100007D7269010000286842684368444B0085726A010000684687726B01000052726C010000284B014B0285726D010000684D894310000000000000F07F000000000000F07F726E01000074726F0100006268528868267D72700100008A0658C35670E97F6A6501000073683C4B016854684368444B008572710100006846877272010000527273010000284B014B024B02867274010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727501000074727601000062682B682C685B684368444B008572770100006846877278010000527279010000284B014B024B0286727A010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727B01000074727C010000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727D0100007D727E0100002868267D727F0100008A0600C45670E97F6A6201000073683C4B026825684368444B008572800100006846877281010000527282010000284B014B034B03867283010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728401000074728501000062682B682C687E4E75627562683C4B01687F683275628A06B0296270E97F68298A0618355B70E97F6828298172860100007D728701000028682B682C682D4B02682E4B0268267D72880100008A06C0355B70E97F6838298172890100007D728A0100002868267D728B010000683C4B01683D6A86010000682B682C683E683F2981728C0100007D728D010000286842684368444B0085728E010000684687728F010000527290010000284B014B02857291010000684D894310000000000000F07F000000000000F07F72920100007472930100006268528868267D72940100008A06C0355B70E97F6A8901000073683C4B016854684368444B008572950100006846877296010000527297010000284B014B024B02867298010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729901000074729A01000062682B682C685B684368444B0085729B010000684687729C01000052729D010000284B014B024B0286729E010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729F0100007472A0010000627562685B4E75627368306828298172A10100007D72A201000028682B682C682D4B02682E4B0268267D72A30100008A0618355B70E97F6A860100007368306831298172A40100007D72A50100002868267D72A60100008A06A8345B70E97F6AA1010000736868683F298172A70100007D72A8010000286842684368444B008572A901000068468772AA0100005272AB010000284B014B028572AC010000684D894310000000000000F07F000000000000F07F72AD0100007472AE0100006268528868267D72AF0100008A0600345B70E97F6AA401000073683C4B016854684368444B008572B001000068468772B10100005272B2010000284B014B024B028672B3010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B40100007472B501000062682B682C685B684368444B008572B601000068468772B70100005272B8010000284B014B024B028672B9010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0100007472BB010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172BC0100007D72BD0100002868267D72BE0100008A06A8345B70E97F6AA101000073683C4B026825684368444B008572BF01000068468772C00100005272C1010000284B014B034B038672C2010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C30100007472C401000062682B682C687E4E75627562683C4B01687F683275628A06D8565E70E97F6828298172C50100007D72C601000028682B682C682D4B02682E4B0268267D72C70100008A0680575E70E97F6838298172C80100007D72C90100002868267D72CA010000683C4B01683D6AC5010000682B682C683E683F298172CB0100007D72CC010000286842684368444B008572CD01000068468772CE0100005272CF010000284B014B028572D0010000684D894310000000000000F07F000000000000F07F72D10100007472D20100006268528868267D72D30100008A0680575E70E97F6AC801000073683C4B016854684368444B008572D401000068468772D50100005272D6010000284B014B024B028672D7010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D80100007472D901000062682B682C685B684368444B008572DA01000068468772DB0100005272DC010000284B014B024B028672DD010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0100007472DF010000627562685B4E75627368306828298172E00100007D72E101000028682B682C682D4B02682E4B0268267D72E20100008A06D8565E70E97F6AC50100007368306831298172E30100007D72E40100002868267D72E50100008A0668565E70E97F6AE0010000736868683F298172E60100007D72E7010000286842684368444B008572E801000068468772E90100005272EA010000284B014B028572EB010000684D894310000000000000F07F000000000000F07F72EC0100007472ED0100006268528868267D72EE0100008A06C0555E70E97F6AE301000073683C4B016854684368444B008572EF01000068468772F00100005272F1010000284B014B024B028672F2010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F30100007472F401000062682B682C685B684368444B008572F501000068468772F60100005272F7010000284B014B024B028672F8010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F90100007472FA010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172FB0100007D72FC0100002868267D72FD0100008A0668565E70E97F6AE001000073683C4B026825684368444B008572FE01000068468772FF010000527200020000284B014B034B03867201020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720202000074720302000062682B682C687E4E75627562683C4B01687F683275628A06E8A25B70E97F6828298172040200007D720502000028682B682C682D4B02682E4B0268267D72060200008A0690A35B70E97F6838298172070200007D72080200002868267D7209020000683C4B01683D6A04020000682B682C683E683F2981720A0200007D720B020000286842684368444B0085720C020000684687720D02000052720E020000284B014B0285720F020000684D894310000000000000F07F000000000000F07F72100200007472110200006268528868267D72120200008A0690A35B70E97F6A0702000073683C4B016854684368444B008572130200006846877214020000527215020000284B014B024B02867216020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721702000074721802000062682B682C685B684368444B00857219020000684687721A02000052721B020000284B014B024B0286721C020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721D02000074721E020000627562685B4E756273683068282981721F0200007D722002000028682B682C682D4B02682E4B0268267D72210200008A06E8A25B70E97F6A040200007368306831298172220200007D72230200002868267D72240200008A0678A25B70E97F6A1F020000736868683F298172250200007D7226020000286842684368444B008572270200006846877228020000527229020000284B014B0285722A020000684D894310000000000000F07F000000000000F07F722B02000074722C0200006268528868267D722D0200008A06D0A15B70E97F6A2202000073683C4B016854684368444B0085722E020000684687722F020000527230020000284B014B024B02867231020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723202000074723302000062682B682C685B684368444B008572340200006846877235020000527236020000284B014B024B02867237020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7238020000747239020000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723A0200007D723B0200002868267D723C0200008A0678A25B70E97F6A1F02000073683C4B026825684368444B0085723D020000684687723E02000052723F020000284B014B034B03867240020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724102000074724202000062682B682C687E4E75627562683C4B01687F683275628A06B0395B70E97F6828298172430200007D724402000028682B682C682D4B02682E4B0268267D72450200008A06583A5B70E97F6838298172460200007D72470200002868267D7248020000683C4B01683D6A43020000682B682C683E683F298172490200007D724A020000286842684368444B0085724B020000684687724C02000052724D020000284B014B0285724E020000684D894310000000000000F07F000000000000F07F724F0200007472500200006268528868267D72510200008A06583A5B70E97F6A4602000073683C4B016854684368444B008572520200006846877253020000527254020000284B014B024B02867255020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725602000074725702000062682B682C685B684368444B00857258020000684687725902000052725A020000284B014B024B0286725B020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725C02000074725D020000627562685B4E756273683068282981725E0200007D725F02000028682B682C682D4B02682E4B0268267D72600200008A06B0395B70E97F6A430200007368306831298172610200007D72620200002868267D72630200008A0640395B70E97F6A5E020000736868683F298172640200007D7265020000286842684368444B008572660200006846877267020000527268020000284B014B02857269020000684D894310000000000000F07F000000000000F07F726A02000074726B0200006268528868267D726C0200008A0698385B70E97F6A6102000073683C4B016854684368444B0085726D020000684687726E02000052726F020000284B014B024B02867270020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727102000074727202000062682B682C685B684368444B008572730200006846877274020000527275020000284B014B024B02867276020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7277020000747278020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172790200007D727A0200002868267D727B0200008A0640395B70E97F6A5E02000073683C4B026825684368444B0085727C020000684687727D02000052727E020000284B014B034B0386727F020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728002000074728102000062682B682C687E4E75627562683C4B01687F683275628A06302D6070E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A7282020000298172830200007D72840200002858020000005F787285020000683268267D7286020000683C4B0168254E682B682C687E4E58020000005F797287020000636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A7288020000298172890200007D728A0200002868267D728B0200008A06302D6070E97F6A8302000073683C4B01682B682C687E4E756275628A06D02F6270E97F68282981728C0200007D728D02000028682B682C682D4B02682E4B0268267D728E0200008A0680C05A70E97F68382981728F0200007D72900200002868267D7291020000683C4B01683D6A8C020000682B682C683E683F298172920200007D7293020000286842684368444B008572940200006846877295020000527296020000284B014B02857297020000684D894310000000000000F07F000000000000F07F72980200007472990200006268528868267D729A0200008A0680C05A70E97F6A8F02000073683C4B016854684368444B0085729B020000684687729C02000052729D020000284B014B024B0286729E020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729F0200007472A002000062682B682C685B684368444B008572A102000068468772A20200005272A3020000284B014B024B028672A4020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A50200007472A6020000627562685B4E75627368306828298172A70200007D72A802000028682B682C682D4B02682E4B0268267D72A90200008A06D02F6270E97F6A8C0200007368306831298172AA0200007D72AB0200002868267D72AC0200008A06882C6270E97F6AA7020000736868683F298172AD0200007D72AE020000286842684368444B008572AF02000068468772B00200005272B1020000284B014B028572B2020000684D894310000000000000F07F000000000000F07F72B30200007472B40200006268528868267D72B50200008A06282F6270E97F6AAA02000073683C4B016854684368444B008572B602000068468772B70200005272B8020000284B014B024B028672B9020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0200007472BB02000062682B682C685B684368444B008572BC02000068468772BD0200005272BE020000284B014B024B028672BF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C00200007472C1020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C20200007D72C30200002868267D72C40200008A06882C6270E97F6AA702000073683C4B026825684368444B008572C502000068468772C60200005272C7020000284B014B034B038672C8020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C90200007472CA02000062682B682C687E4E75627562683C4B01687F683275628A06580A5F70E97F6A82020000298172CB0200007D72CC020000286A85020000683268267D72CD020000683C4B0168254E682B682C687E4E6A870200006A88020000298172CE0200007D72CF0200002868267D72D00200008A06580A5F70E97F6ACB02000073683C4B01682B682C687E4E756275628A06180C5F70E97F6A82020000298172D10200007D72D2020000286A85020000683268267D72D3020000683C4B0168254E682B682C687E4E6A870200006A88020000298172D40200007D72D50200002868267D72D60200008A06180C5F70E97F6AD102000073683C4B01682B682C687E4E756275628A06B8A75B70E97F6828298172D70200007D72D802000028682B682C682D4B02682E4B0268267D72D90200008A0660A85B70E97F6838298172DA0200007D72DB0200002868267D72DC020000683C4B01683D6AD7020000682B682C683E683F298172DD0200007D72DE020000286842684368444B008572DF02000068468772E00200005272E1020000284B014B028572E2020000684D894310000000000000F07F000000000000F07F72E30200007472E40200006268528868267D72E50200008A0660A85B70E97F6ADA02000073683C4B016854684368444B008572E602000068468772E70200005272E8020000284B014B024B028672E9020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0200007472EB02000062682B682C685B684368444B008572EC02000068468772ED0200005272EE020000284B014B024B028672EF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00200007472F1020000627562685B4E75627368306828298172F20200007D72F302000028682B682C682D4B02682E4B0268267D72F40200008A06B8A75B70E97F6AD70200007368306831298172F50200007D72F60200002868267D72F70200008A0648A75B70E97F6AF2020000736868683F298172F80200007D72F9020000286842684368444B008572FA02000068468772FB0200005272FC020000284B014B028572FD020000684D894310000000000000F07F000000000000F07F72FE0200007472FF0200006268528868267D72000300008A06A0A65B70E97F6AF502000073683C4B016854684368444B008572010300006846877202030000527203030000284B014B024B02867204030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720503000074720603000062682B682C685B684368444B008572070300006846877208030000527209030000284B014B024B0286720A030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720B03000074720C030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720D0300007D720E0300002868267D720F0300008A0648A75B70E97F6AF202000073683C4B026825684368444B008572100300006846877211030000527212030000284B014B034B03867213030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721403000074721503000062682B682C687E4E75627562683C4B01687F683275628A06C8635C70E97F6828298172160300007D721703000028682B682C682D4B02682E4B0268267D72180300008A0670645C70E97F6838298172190300007D721A0300002868267D721B030000683C4B01683D6A16030000682B682C683E683F2981721C0300007D721D030000286842684368444B0085721E030000684687721F030000527220030000284B014B02857221030000684D894310000000000000F07F000000000000F07F72220300007472230300006268528868267D72240300008A0670645C70E97F6A1903000073683C4B016854684368444B008572250300006846877226030000527227030000284B014B024B02867228030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722903000074722A03000062682B682C685B684368444B0085722B030000684687722C03000052722D030000284B014B024B0286722E030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F030000747230030000627562685B4E75627368306828298172310300007D723203000028682B682C682D4B02682E4B0268267D72330300008A06C8635C70E97F6A160300007368306831298172340300007D72350300002868267D72360300008A0658635C70E97F6A31030000736868683F298172370300007D7238030000286842684368444B00857239030000684687723A03000052723B030000284B014B0285723C030000684D894310000000000000F07F000000000000F07F723D03000074723E0300006268528868267D723F0300008A06B0625C70E97F6A3403000073683C4B016854684368444B008572400300006846877241030000527242030000284B014B024B02867243030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724403000074724503000062682B682C685B684368444B008572460300006846877247030000527248030000284B014B024B02867249030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724A03000074724B030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724C0300007D724D0300002868267D724E0300008A0658635C70E97F6A3103000073683C4B026825684368444B0085724F0300006846877250030000527251030000284B014B034B03867252030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725303000074725403000062682B682C687E4E75627562683C4B01687F683275628A06202A6270E97F6828298172550300007D725603000028682B682C682D4B02682E4B0268267D725703000068306832683C4B01687F682375628A06581A5C70E97F6828298172580300007D725903000028682B682C682D4B02682E4B0268267D725A0300008A06001B5C70E97F68382981725B0300007D725C0300002868267D725D030000683C4B01683D6A58030000682B682C683E683F2981725E0300007D725F030000286842684368444B008572600300006846877261030000527262030000284B014B02857263030000684D894310000000000000F07F000000000000F07F72640300007472650300006268528868267D72660300008A06001B5C70E97F6A5B03000073683C4B016854684368444B008572670300006846877268030000527269030000284B014B024B0286726A030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726B03000074726C03000062682B682C685B684368444B0085726D030000684687726E03000052726F030000284B014B024B02867270030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7271030000747272030000627562685B4E75627368306828298172730300007D727403000028682B682C682D4B02682E4B0268267D72750300008A06581A5C70E97F6A580300007368306831298172760300007D72770300002868267D72780300008A06E8195C70E97F6A73030000736868683F298172790300007D727A030000286842684368444B0085727B030000684687727C03000052727D030000284B014B0285727E030000684D894310000000000000F07F000000000000F07F727F0300007472800300006268528868267D72810300008A0640195C70E97F6A7603000073683C4B016854684368444B008572820300006846877283030000527284030000284B014B024B02867285030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728603000074728703000062682B682C685B684368444B00857288030000684687728903000052728A030000284B014B024B0286728B030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728C03000074728D030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981728E0300007D728F0300002868267D72900300008A06E8195C70E97F6A7303000073683C4B026825684368444B008572910300006846877292030000527293030000284B014B034B03867294030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729503000074729603000062682B682C687E4E75627562683C4B01687F683275628A0698A86070E97F6828298172970300007D729803000028682B682C682D4B02682E4B0268267D72990300008A06F0AE6070E97F68382981729A0300007D729B0300002868267D729C030000683C4B01683D6A97030000682B682C683E683F2981729D0300007D729E030000286842684368444B0085729F03000068468772A00300005272A1030000284B014B028572A2030000684D894310000000000000F07F000000000000F07F72A30300007472A40300006268528868267D72A50300008A06F0AE6070E97F6A9A03000073683C4B016854684368444B008572A603000068468772A70300005272A8030000284B014B024B028672A9030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AA0300007472AB03000062682B682C685B684368444B008572AC03000068468772AD0300005272AE030000284B014B024B028672AF030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B00300007472B1030000627562685B4E75627368306828298172B20300007D72B303000028682B682C682D4B02682E4B0268267D72B40300008A0698A86070E97F6A970300007368306831298172B50300007D72B60300002868267D72B70300008A06F0176170E97F6AB2030000736868683F298172B80300007D72B9030000286842684368444B008572BA03000068468772BB0300005272BC030000284B014B028572BD030000684D894310000000000000F07F000000000000F07F72BE0300007472BF0300006268528868267D72C00300008A0640C25F70E97F6AB503000073683C4B016854684368444B008572C103000068468772C20300005272C3030000284B014B024B028672C4030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C50300007472C603000062682B682C685B684368444B008572C703000068468772C80300005272C9030000284B014B024B028672CA030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CB0300007472CC030000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172CD0300007D72CE0300002868267D72CF0300008A06F0176170E97F6AB203000073683C4B026825684368444B008572D003000068468772D10300005272D2030000284B014B034B038672D3030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D40300007472D503000062682B682C687E4E75627562683C4B01687F683275628A06B8206070E97F6828298172D60300007D72D703000028682B682C682D4B02682E4B0268267D72D80300008A06F0206070E97F6838298172D90300007D72DA0300002868267D72DB030000683C4B01683D6AD6030000682B682C683E683F298172DC0300007D72DD030000286842684368444B008572DE03000068468772DF0300005272E0030000284B014B028572E1030000684D894310000000000000F07F000000000000F07F72E20300007472E30300006268528868267D72E40300008A06F0206070E97F6AD903000073683C4B016854684368444B008572E503000068468772E60300005272E7030000284B014B024B028672E8030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E90300007472EA03000062682B682C685B684368444B008572EB03000068468772EC0300005272ED030000284B014B024B028672EE030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EF0300007472F0030000627562685B4E75627368306828298172F10300007D72F203000028682B682C682D4B02682E4B0268267D72F30300008A06B8206070E97F6AD60300007368306831298172F40300007D72F50300002868267D72F60300008A06A00D5F70E97F6AF1030000736868683F298172F70300007D72F8030000286842684368444B008572F903000068468772FA0300005272FB030000284B014B028572FC030000684D894310000000000000F07F000000000000F07F72FD0300007472FE0300006268528868267D72FF0300008A06800E5F70E97F6AF403000073683C4B016854684368444B008572000400006846877201040000527202040000284B014B024B02867203040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720404000074720504000062682B682C685B684368444B008572060400006846877207040000527208040000284B014B024B02867209040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720A04000074720B040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720C0400007D720D0400002868267D720E0400008A06A00D5F70E97F6AF103000073683C4B026825684368444B0085720F0400006846877210040000527211040000284B014B034B03867212040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721304000074721404000062682B682C687E4E75627562683C4B01687F683275628A06F01E5C70E97F6828298172150400007D721604000028682B682C682D4B02682E4B0268267D72170400008A06981F5C70E97F6838298172180400007D72190400002868267D721A040000683C4B01683D6A15040000682B682C683E683F2981721B0400007D721C040000286842684368444B0085721D040000684687721E04000052721F040000284B014B02857220040000684D894310000000000000F07F000000000000F07F72210400007472220400006268528868267D72230400008A06981F5C70E97F6A1804000073683C4B016854684368444B008572240400006846877225040000527226040000284B014B024B02867227040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722804000074722904000062682B682C685B684368444B0085722A040000684687722B04000052722C040000284B014B024B0286722D040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722E04000074722F040000627562685B4E75627368306828298172300400007D723104000028682B682C682D4B02682E4B0268267D72320400008A06F01E5C70E97F6A150400007368306831298172330400007D72340400002868267D72350400008A06801E5C70E97F6A30040000736868683F298172360400007D7237040000286842684368444B00857238040000684687723904000052723A040000284B014B0285723B040000684D894310000000000000F07F000000000000F07F723C04000074723D0400006268528868267D723E0400008A06D81D5C70E97F6A3304000073683C4B016854684368444B0085723F0400006846877240040000527241040000284B014B024B02867242040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724304000074724404000062682B682C685B684368444B008572450400006846877246040000527247040000284B014B024B02867248040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724904000074724A040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724B0400007D724C0400002868267D724D0400008A06801E5C70E97F6A3004000073683C4B026825684368444B0085724E040000684687724F040000527250040000284B014B034B03867251040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725204000074725304000062682B682C687E4E75627562683C4B01687F683275628A0610C76170E97F6828298172540400007D725504000028682B682C682D4B02682E4B0268267D72560400008A06381B6170E97F6838298172570400007D72580400002868267D7259040000683C4B01683D6A54040000682B682C683E683F2981725A0400007D725B040000286842684368444B0085725C040000684687725D04000052725E040000284B014B0285725F040000684D894310000000000000F07F000000000000F07F72600400007472610400006268528868267D72620400008A06381B6170E97F6A5704000073683C4B016854684368444B008572630400006846877264040000527265040000284B014B024B02867266040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726704000074726804000062682B682C685B684368444B00857269040000684687726A04000052726B040000284B014B024B0286726C040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726D04000074726E040000627562685B4E756273683068282981726F0400007D727004000028682B682C682D4B02682E4B0268267D72710400008A0610C76170E97F6A540400007368306831298172720400007D72730400002868267D72740400008A06285F5E70E97F6A6F040000736868683F298172750400007D7276040000286842684368444B008572770400006846877278040000527279040000284B014B0285727A040000684D894310000000000000F07F000000000000F07F727B04000074727C0400006268528868267D727D0400008A06805E5E70E97F6A7204000073683C4B016854684368444B0085727E040000684687727F040000527280040000284B014B024B02867281040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728204000074728304000062682B682C685B684368444B008572840400006846877285040000527286040000284B014B024B02867287040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7288040000747289040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981728A0400007D728B0400002868267D728C0400008A06285F5E70E97F6A6F04000073683C4B026825684368444B0085728D040000684687728E04000052728F040000284B014B034B03867290040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729104000074729204000062682B682C687E4E75627562683C4B01687F683275628A0660685C70E97F6828298172930400007D729404000028682B682C682D4B02682E4B0268267D72950400008A0608695C70E97F6838298172960400007D72970400002868267D7298040000683C4B01683D6A93040000682B682C683E683F298172990400007D729A040000286842684368444B0085729B040000684687729C04000052729D040000284B014B0285729E040000684D894310000000000000F07F000000000000F07F729F0400007472A00400006268528868267D72A10400008A0608695C70E97F6A9604000073683C4B016854684368444B008572A204000068468772A30400005272A4040000284B014B024B028672A5040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A60400007472A704000062682B682C685B684368444B008572A804000068468772A90400005272AA040000284B014B024B028672AB040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AC0400007472AD040000627562685B4E75627368306828298172AE0400007D72AF04000028682B682C682D4B02682E4B0268267D72B00400008A0660685C70E97F6A930400007368306831298172B10400007D72B20400002868267D72B30400008A06F0675C70E97F6AAE040000736868683F298172B40400007D72B5040000286842684368444B008572B604000068468772B70400005272B8040000284B014B028572B9040000684D894310000000000000F07F000000000000F07F72BA0400007472BB0400006268528868267D72BC0400008A0648675C70E97F6AB104000073683C4B016854684368444B008572BD04000068468772BE0400005272BF040000284B014B024B028672C0040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C10400007472C204000062682B682C685B684368444B008572C304000068468772C40400005272C5040000284B014B024B028672C6040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C70400007472C8040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C90400007D72CA0400002868267D72CB0400008A06F0675C70E97F6AAE04000073683C4B026825684368444B008572CC04000068468772CD0400005272CE040000284B014B034B038672CF040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D00400007472D104000062682B682C687E4E75627562683C4B01687F683275628A0650AC5B70E97F6828298172D20400007D72D304000028682B682C682D4B02682E4B0268267D72D40400008A06F8AC5B70E97F6838298172D50400007D72D60400002868267D72D7040000683C4B01683D6AD2040000682B682C683E683F298172D80400007D72D9040000286842684368444B008572DA04000068468772DB0400005272DC040000284B014B028572DD040000684D894310000000000000F07F000000000000F07F72DE0400007472DF0400006268528868267D72E00400008A06F8AC5B70E97F6AD504000073683C4B016854684368444B008572E104000068468772E20400005272E3040000284B014B024B028672E4040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E50400007472E604000062682B682C685B684368444B008572E704000068468772E80400005272E9040000284B014B024B028672EA040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EB0400007472EC040000627562685B4E75627368306828298172ED0400007D72EE04000028682B682C682D4B02682E4B0268267D72EF0400008A0650AC5B70E97F6AD20400007368306831298172F00400007D72F10400002868267D72F20400008A06E0AB5B70E97F6AED040000736868683F298172F30400007D72F4040000286842684368444B008572F504000068468772F60400005272F7040000284B014B028572F8040000684D894310000000000000F07F000000000000F07F72F90400007472FA0400006268528868267D72FB0400008A0638AB5B70E97F6AF004000073683C4B016854684368444B008572FC04000068468772FD0400005272FE040000284B014B024B028672FF040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720005000074720105000062682B682C685B684368444B008572020500006846877203050000527204050000284B014B024B02867205050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7206050000747207050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172080500007D72090500002868267D720A0500008A06E0AB5B70E97F6AED04000073683C4B026825684368444B0085720B050000684687720C05000052720D050000284B014B034B0386720E050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720F05000074721005000062682B682C687E4E75627562683C4B01687F683275628A0688C55F70E97F6828298172110500007D721205000028682B682C682D4B02682E4B0268267D72130500008A0628CF5F70E97F6838298172140500007D72150500002868267D7216050000683C4B01683D6A11050000682B682C683E683F298172170500007D7218050000286842684368444B00857219050000684687721A05000052721B050000284B014B0285721C050000684D894310000000000000F07F000000000000F07F721D05000074721E0500006268528868267D721F0500008A0628CF5F70E97F6A1405000073683C4B016854684368444B008572200500006846877221050000527222050000284B014B024B02867223050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722405000074722505000062682B682C685B684368444B008572260500006846877227050000527228050000284B014B024B02867229050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722A05000074722B050000627562685B4E756273683068282981722C0500007D722D05000028682B682C682D4B02682E4B0268267D722E0500008A0688C55F70E97F6A1105000073683068312981722F0500007D72300500002868267D72310500008A0608C25F70E97F6A2C050000736868683F298172320500007D7233050000286842684368444B008572340500006846877235050000527236050000284B014B02857237050000684D894310000000000000F07F000000000000F07F72380500007472390500006268528868267D723A0500008A06F0C05F70E97F6A2F05000073683C4B016854684368444B0085723B050000684687723C05000052723D050000284B014B024B0286723E050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723F05000074724005000062682B682C685B684368444B008572410500006846877242050000527243050000284B014B024B02867244050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7245050000747246050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172470500007D72480500002868267D72490500008A0608C25F70E97F6A2C05000073683C4B026825684368444B0085724A050000684687724B05000052724C050000284B014B034B0386724D050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724E05000074724F05000062682B682C687E4E75627562683C4B01687F683275628A06A8CB5A70E97F6828298172500500007D725105000028682B682C682D4B02682E4B0268267D72520500008A0650CC5A70E97F6838298172530500007D72540500002868267D7255050000683C4B01683D6A50050000682B682C683E683F298172560500007D7257050000286842684368444B00857258050000684687725905000052725A050000284B014B0285725B050000684D894310000000000000F07F000000000000F07F725C05000074725D0500006268528868267D725E0500008A0650CC5A70E97F6A5305000073683C4B016854684368444B0085725F0500006846877260050000527261050000284B014B024B02867262050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726305000074726405000062682B682C685B684368444B008572650500006846877266050000527267050000284B014B024B02867268050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726905000074726A050000627562685B4E756273683068282981726B0500007D726C05000028682B682C682D4B02682E4B0268267D726D0500008A06A8CB5A70E97F6A5005000073683068312981726E0500007D726F0500002868267D72700500008A0638CB5A70E97F6A6B050000736868683F298172710500007D7272050000286842684368444B008572730500006846877274050000527275050000284B014B02857276050000684D894310000000000000F07F000000000000F07F72770500007472780500006268528868267D72790500008A0690CA5A70E97F6A6E05000073683C4B016854684368444B0085727A050000684687727B05000052727C050000284B014B024B0286727D050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727E05000074727F05000062682B682C685B684368444B008572800500006846877281050000527282050000284B014B024B02867283050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7284050000747285050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172860500007D72870500002868267D72880500008A0638CB5A70E97F6A6B05000073683C4B026825684368444B00857289050000684687728A05000052728B050000284B014B034B0386728C050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728D05000074728E05000062682B682C687E4E75627562683C4B01687F683275628A06282FBB73E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A728F050000298172900500007D7291050000286A85020000683268267D7292050000288A06605F6170E97F6828298172930500007D729405000028682B682C682D4B02682E4B0268267D729505000068306A90050000683C4B02687F6822298172960500007D72970500002868254E68267D72980500008A06605F6170E97F6A9305000073683C4B01580C0000005F7363616C655F7472616E73729905000068802981729A0500007D729B0500002868267D729C050000288A0640C26170E97F68222981729D0500007D729E0500002868254E68267D729F0500008A0648C06170E97F6828298172A00500007D72A105000028682B682C682D4B02682E4B0268267D72A205000068306A90050000683C4B02687F6A9D050000756273683C4B016A990500006A9A050000682B682C687E4E58020000005F7472A3050000473FB8E38E38E38E394B008672A405000075628A0620CA6170E97F6822298172A50500007D72A60500002868254E68267D72A70500008A06C8CA6170E97F6828298172A80500007D72A905000028682B682C682D4B02682E4B0268267D72AA05000068306A90050000683C4B02687F6AA5050000756273683C4B016A990500006A9A050000682B682C687E4E6AA305000047BFB8E38E38E38E394B008672AB05000075628A06B0126170E97F6822298172AC0500007D72AD0500002868254E68267D72AE0500008A0640126170E97F6828298172AF0500007D72B005000028682B682C682D4B02682E4B0268267D72B105000068306A8F050000298172B20500007D72B3050000286A850200006828298172B40500007D72B505000028682B682C682D4B02682E4B0268267D72B6050000288A06B82EBB73E97F6AB20500008A06282FBB73E97F6A90050000756830636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A72B7050000298172B80500007D72B905000028682E4B0258050000006368696C6472BA0500006A82020000298172BB0500007D72BC050000286A850200006A88020000298172BD0500007D72BE0500002868267D72BF0500008A0680276270E97F6ABB05000073683C4B01682B682C687E4E756268267D72C00500008A06C02CBB73E97F6AB805000073683C4B006825684368444B008572C105000068468772C20500005272C3050000284B014B034B038672C4050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50500007472C605000062682B682C687E4E6A870200006A88020000298172C70500007D72C80500002868267D72C90500008A0680276270E97F6ABB05000073683C4B01682B682C687E4E756275625807000000706172656E747372CA0500007D72CB050000288A06102EBB73E97F6AB40500008A06C82ABB73E97F6838298172CC0500007D72CD0500002868267D72CE0500008A06582ABB73E97F636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A72CF050000298172D00500007D72D10500002868267D72D20500008A06A02DBB73E97F6828298172D30500007D72D405000028682B682C682D4B02682E4B0268267D72D50500008A06102EBB73E97F6AB40500007368306AD0050000683C4B02687F683275627358060000005F626F78696E72D60500006ACC050000683C4B026825684368444B008572D705000068468772D80500005272D9050000284B014B034B038672DA050000684D894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F72DB0500007472DC05000062682B682C687E4E756273683C4B02683D6AB8050000682B682C683E683F298172DD0500007D72DE050000286842684368444B008572DF05000068468772E00500005272E1050000284B014B028572E2050000684D894310000000000000F07F000000000000F07F72E30500007472E40500006268528868267D72E50500008A06C82ABB73E97F6ACC05000073683C4B026854684368444B008572E605000068468772E70500005272E8050000284B014B024B028672E9050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0500007472EB05000062682B682C685B684368444B008572EC05000068468772ED0500005272EE050000284B014B024B028672EF050000684D894320999999999999A9BF0000000000000000CCCCCCCCCCCCF03F33333333B39A2C4172F00500007472F1050000627562685B684368444B008572F205000068468772F30500005272F4050000284B014B024B028672F5050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F60500007472F705000062756275682D4B027562683C4B02687F6AD3050000756268267D72F8050000288A0640126170E97F6AAF0500008A0650156170E97F6828298172F90500007D72FA05000028682B682C682D4B02682E4B0268267D72FB05000068306AB2050000683C4B02687F6822298172FC0500007D72FD0500002868254E68267D72FE0500008A0650156170E97F6AF905000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB8E38E38E38E398672FF050000756275628A06A0CD5F70E97F6828298172000600007D720106000028682B682C682D4B02682E4B0268267D720206000068306AB2050000683C4B02687F6822298172030600007D72040600002868254E68267D72050600008A06A0CD5F70E97F6A0006000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB3333333333334867206060000756275628A0698CF5F70E97F6828298172070600007D720806000028682B682C682D4B02682E4B0268267D720906000068306AB2050000683C4B02687F68222981720A0600007D720B0600002868254E68267D720C0600008A0698CF5F70E97F6A0706000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB333333333333486720D060000756275628A0670246270E97F68282981720E0600007D720F06000028682B682C682D4B02682E4B0268267D721006000068306AB2050000683C4B02687F6822298172110600007D72120600002868254E68267D72130600008A0670246270E97F6A0E06000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB3333333333334867214060000756275628A0660F86170E97F6828298172150600007D721606000028682B682C682D4B02682E4B0268267D721706000068306AB2050000683C4B02687F6822298172180600007D72190600002868254E68267D721A0600008A0660F86170E97F6A1506000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB8E38E38E38E3986721B060000756275628A06B0F96170E97F68282981721C0600007D721D06000028682B682C682D4B02682E4B0268267D721E06000068306AB2050000683C4B02687F68222981721F0600007D72200600002868254E68267D72210600008A06B0F96170E97F6A1C06000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB8E38E38E38E39867222060000756275628A0620236270E97F6828298172230600007D722406000028682B682C682D4B02682E4B0268267D722506000068306AB2050000683C4B02687F6822298172260600007D72270600002868254E68267D72280600008A0620236270E97F6A2306000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB33333333333348672290600007562756275683C4B0258070000005F616666696E65722A0600004E682B682C6A8702000068327562683C4B02687F6AAC050000756273683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB8E38E38E38E3986722B06000075628A06485E6170E97F6A960500008A0600246270E97F6A110600008A0608226270E97F6A260600008A0678C25F70E97F6A0A0600008A06D0F86170E97F6A180600008A06601F6170E97F6AFC0500008A0650F56170E97F68222981722C0600007D722D0600002868254E68267D722E0600008A06C0F56170E97F68282981722F0600007D723006000028682B682C682D4B02682E4B0268267D723106000068306A90050000683C4B02687F6A2C060000756273683C4B016A990500006A9A050000682B682C687E4E6AA3050000473FB33333333333344B0086723206000075628A06D01F6170E97F68238A0608F96170E97F6A1F0600008A06B8A06070E97F6822298172330600007D72340600002868254E68267D72350600008A06D0A16070E97F6828298172360600007D723706000028682B682C682D4B02682E4B0268267D723806000068306A90050000683C4B02687F6A33060000756273683C4B016A990500006A9A050000682B682C687E4E6AA3050000473FB8E38E38E38E394B0086723906000075628A06F0106170E97F68222981723A0600007D723B0600002868254E68267D723C0600008A0688C56170E97F68282981723D0600007D723E06000028682B682C682D4B02682E4B0268267D723F06000068306A90050000683C4B02687F6A3A060000756273683C4B016A990500006A9A050000682B682C687E4E6AA305000047BFB33333333333344B0086724006000075628A06980FBA73E97F6838298172410600007D72420600002868267D72430600008A066021BB73E97F6831298172440600007D72450600002868267D72460600008A066028BB73E97F6838298172470600007D72480600002868267D72490600008A06382BBB73E97F683273683C4B01683D6A44060000682B682C683E683F2981724A0600007D724B060000286842684368444B0085724C060000684687724D06000052724E060000284B014B0285724F060000684D894310000000000000F07F000000000000F07F72500600007472510600006268528868267D72520600008A066028BB73E97F6A4706000073683C4B006854684368444B008572530600006846877254060000527255060000284B014B024B02867256060000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F725706000074725806000062682B682C685B684368444B00857259060000684687725A06000052725B060000284B014B024B0286725C060000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F725D06000074725E060000627562685B4E75627368686A41060000683C4B0168254E682B682C687E4E756273683C4B01683D6A9A050000682B682C683E683F2981725F0600007D7260060000286842684368444B008572610600006846877262060000527263060000284B014B02857264060000684D894310000000000000F07F000000000000F07F72650600007472660600006268528868267D72670600008A06980FBA73E97F6A4106000073683C4B016854684368444B00857268060000684687726906000052726A060000284B014B024B0286726B060000684D894320000000000000000000000000000000009A999999999919403333333333331340726C06000074726D06000062682B682C685B684368444B0085726E060000684687726F060000527270060000284B014B024B02867271060000684D894320000000000000000000000000000000009A9999999999194033333333333313407272060000747273060000627562685B4E75628A06A0C66170E97F6822298172740600007D72750600002868254E68267D72760600008A0658C36170E97F6828298172770600007D727806000028682B682C682D4B02682E4B0268267D727906000068306A90050000683C4B02687F6A74060000756273683C4B016A990500006A9A050000682B682C687E4E6AA3050000473FB33333333333344B0086727A06000075628A06F8CC5F70E97F6A030600008A0620F36170E97F68222981727B0600007D727C0600002868254E68267D727D0600008A0670F46170E97F68282981727E0600007D727F06000028682B682C682D4B02682E4B0268267D728006000068306A90050000683C4B02687F6A7B060000756273683C4B016A990500006A9A050000682B682C687E4E6AA305000047BFB33333333333344B00867281060000756275683C4B026825684368444B008572820600006846877283060000527284060000284B014B034B03867285060000684D89434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F728606000074728706000062682B682C687E4E7562682B682C687E4E6AA305000047BFB8E38E38E38E394B00867288060000756275628A06D0A16070E97F6A360600008A06C0F56170E97F6A2F0600008A0688C56170E97F6A3D0600008A0648C06170E97F6AA00500008A0670F46170E97F6A7E0600008A06C8CA6170E97F6AA80500008A0658C36170E97F6A7706000075683C4B026A2A0600004E682B682C6A870200006AB405000075628A06702B6070E97F6A82020000298172890600007D728A060000286A850200006A880200002981728B0600007D728C0600002868267D728D0600008A06702B6070E97F6A8906000073683C4B01682B682C687E4E756268267D728E060000683C4B0168254E682B682C687E4E6A87020000683275628A06A8C45A70E97F68282981728F0600007D729006000028682B682C682D4B02682E4B0268267D72910600008A0650C55A70E97F6838298172920600007D72930600002868267D7294060000683C4B01683D6A8F060000682B682C683E683F298172950600007D7296060000286842684368444B008572970600006846877298060000527299060000284B014B0285729A060000684D894310000000000000F07F000000000000F07F729B06000074729C0600006268528868267D729D0600008A0650C55A70E97F6A9206000073683C4B016854684368444B0085729E060000684687729F0600005272A0060000284B014B024B028672A1060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A20600007472A306000062682B682C685B684368444B008572A406000068468772A50600005272A6060000284B014B024B028672A7060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A80600007472A9060000627562685B4E75627368306828298172AA0600007D72AB06000028682B682C682D4B02682E4B0268267D72AC0600008A06A8C45A70E97F6A8F0600007368306831298172AD0600007D72AE0600002868267D72AF0600008A0638C45A70E97F6AAA060000736868683F298172B00600007D72B1060000286842684368444B008572B206000068468772B30600005272B4060000284B014B028572B5060000684D894310000000000000F07F000000000000F07F72B60600007472B70600006268528868267D72B80600008A0690C35A70E97F6AAD06000073683C4B016854684368444B008572B906000068468772BA0600005272BB060000284B014B024B028672BC060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0600007472BE06000062682B682C685B684368444B008572BF06000068468772C00600005272C1060000284B014B024B028672C2060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C30600007472C4060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C50600007D72C60600002868267D72C70600008A0638C45A70E97F6AAA06000073683C4B026825684368444B008572C806000068468772C90600005272CA060000284B014B034B038672CB060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72CC0600007472CD06000062682B682C687E4E75627562683C4B01687F683275628A06A02DBB73E97F6AD30500008A06C0155C70E97F6828298172CE0600007D72CF06000028682B682C682D4B02682E4B0268267D72D00600008A0668165C70E97F6838298172D10600007D72D20600002868267D72D3060000683C4B01683D6ACE060000682B682C683E683F298172D40600007D72D5060000286842684368444B008572D606000068468772D70600005272D8060000284B014B028572D9060000684D894310000000000000F07F000000000000F07F72DA0600007472DB0600006268528868267D72DC0600008A0668165C70E97F6AD106000073683C4B016854684368444B008572DD06000068468772DE0600005272DF060000284B014B024B028672E0060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E10600007472E206000062682B682C685B684368444B008572E306000068468772E40600005272E5060000284B014B024B028672E6060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E70600007472E8060000627562685B4E75627368306828298172E90600007D72EA06000028682B682C682D4B02682E4B0268267D72EB0600008A06C0155C70E97F6ACE0600007368306831298172EC0600007D72ED0600002868267D72EE0600008A0650155C70E97F6AE9060000736868683F298172EF0600007D72F0060000286842684368444B008572F106000068468772F20600005272F3060000284B014B028572F4060000684D894310000000000000F07F000000000000F07F72F50600007472F60600006268528868267D72F70600008A06A8145C70E97F6AEC06000073683C4B016854684368444B008572F806000068468772F90600005272FA060000284B014B024B028672FB060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0600007472FD06000062682B682C685B684368444B008572FE06000068468772FF060000527200070000284B014B024B02867201070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7202070000747203070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172040700007D72050700002868267D72060700008A0650155C70E97F6AE906000073683C4B026825684368444B008572070700006846877208070000527209070000284B014B034B0386720A070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720B07000074720C07000062682B682C687E4E75627562683C4B01687F683275628A06183C5D70E97F68282981720D0700007D720E07000028682B682C682D4B02682E4B0268267D720F0700008A06C03C5D70E97F6838298172100700007D72110700002868267D7212070000683C4B01683D6A0D070000682B682C683E683F298172130700007D7214070000286842684368444B008572150700006846877216070000527217070000284B014B02857218070000684D894310000000000000F07F000000000000F07F721907000074721A0700006268528868267D721B0700008A06C03C5D70E97F6A1007000073683C4B016854684368444B0085721C070000684687721D07000052721E070000284B014B024B0286721F070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722007000074722107000062682B682C685B684368444B008572220700006846877223070000527224070000284B014B024B02867225070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7226070000747227070000627562685B4E75627368306828298172280700007D722907000028682B682C682D4B02682E4B0268267D722A0700008A06183C5D70E97F6A0D07000073683068312981722B0700007D722C0700002868267D722D0700008A06A83B5D70E97F6A28070000736868683F2981722E0700007D722F070000286842684368444B008572300700006846877231070000527232070000284B014B02857233070000684D894310000000000000F07F000000000000F07F72340700007472350700006268528868267D72360700008A06003B5D70E97F6A2B07000073683C4B016854684368444B008572370700006846877238070000527239070000284B014B024B0286723A070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723B07000074723C07000062682B682C685B684368444B0085723D070000684687723E07000052723F070000284B014B024B02867240070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7241070000747242070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172430700007D72440700002868267D72450700008A06A83B5D70E97F6A2807000073683C4B026825684368444B008572460700006846877247070000527248070000284B014B034B03867249070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724A07000074724B07000062682B682C687E4E75627562683C4B01687F683275628A06B82EBB73E97F6AB20500008A0628115C70E97F68282981724C0700007D724D07000028682B682C682D4B02682E4B0268267D724E0700008A06D0115C70E97F68382981724F0700007D72500700002868267D7251070000683C4B01683D6A4C070000682B682C683E683F298172520700007D7253070000286842684368444B008572540700006846877255070000527256070000284B014B02857257070000684D894310000000000000F07F000000000000F07F72580700007472590700006268528868267D725A0700008A06D0115C70E97F6A4F07000073683C4B016854684368444B0085725B070000684687725C07000052725D070000284B014B024B0286725E070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725F07000074726007000062682B682C685B684368444B008572610700006846877262070000527263070000284B014B024B02867264070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7265070000747266070000627562685B4E75627368306828298172670700007D726807000028682B682C682D4B02682E4B0268267D72690700008A0628115C70E97F6A4C07000073683068312981726A0700007D726B0700002868267D726C0700008A06B8105C70E97F6A67070000736868683F2981726D0700007D726E070000286842684368444B0085726F0700006846877270070000527271070000284B014B02857272070000684D894310000000000000F07F000000000000F07F72730700007472740700006268528868267D72750700008A06D0AF5B70E97F6A6A07000073683C4B016854684368444B008572760700006846877277070000527278070000284B014B024B02867279070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727A07000074727B07000062682B682C685B684368444B0085727C070000684687727D07000052727E070000284B014B024B0286727F070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7280070000747281070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172820700007D72830700002868267D72840700008A06B8105C70E97F6A6707000073683C4B026825684368444B008572850700006846877286070000527287070000284B014B034B03867288070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728907000074728A07000062682B682C687E4E75627562683C4B01687F683275628A06902A6270E97F68282981728B0700007D728C07000028682B682C682D4B02682E4B0268267D728D07000068306832683C4B01687F682375628A0658335D70E97F68282981728E0700007D728F07000028682B682C682D4B02682E4B0268267D72900700008A0600345D70E97F6838298172910700007D72920700002868267D7293070000683C4B01683D6A8E070000682B682C683E683F298172940700007D7295070000286842684368444B008572960700006846877297070000527298070000284B014B02857299070000684D894310000000000000F07F000000000000F07F729A07000074729B0700006268528868267D729C0700008A0600345D70E97F6A9107000073683C4B016854684368444B0085729D070000684687729E07000052729F070000284B014B024B028672A0070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A10700007472A207000062682B682C685B684368444B008572A307000068468772A40700005272A5070000284B014B024B028672A6070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A70700007472A8070000627562685B4E75627368306828298172A90700007D72AA07000028682B682C682D4B02682E4B0268267D72AB0700008A0658335D70E97F6A8E0700007368306831298172AC0700007D72AD0700002868267D72AE0700008A06E8325D70E97F6AA9070000736868683F298172AF0700007D72B0070000286842684368444B008572B107000068468772B20700005272B3070000284B014B028572B4070000684D894310000000000000F07F000000000000F07F72B50700007472B60700006268528868267D72B70700008A0640325D70E97F6AAC07000073683C4B016854684368444B008572B807000068468772B90700005272BA070000284B014B024B028672BB070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BC0700007472BD07000062682B682C685B684368444B008572BE07000068468772BF0700005272C0070000284B014B024B028672C1070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C20700007472C3070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C40700007D72C50700002868267D72C60700008A06E8325D70E97F6AA907000073683C4B026825684368444B008572C707000068468772C80700005272C9070000284B014B034B038672CA070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72CB0700007472CC07000062682B682C687E4E75627562683C4B01687F683275628A0618F55D70E97F6828298172CD0700007D72CE07000028682B682C682D4B02682E4B0268267D72CF0700008A06C0F55D70E97F6838298172D00700007D72D10700002868267D72D2070000683C4B01683D6ACD070000682B682C683E683F298172D30700007D72D4070000286842684368444B008572D507000068468772D60700005272D7070000284B014B028572D8070000684D894310000000000000F07F000000000000F07F72D90700007472DA0700006268528868267D72DB0700008A06C0F55D70E97F6AD007000073683C4B016854684368444B008572DC07000068468772DD0700005272DE070000284B014B024B028672DF070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E00700007472E107000062682B682C685B684368444B008572E207000068468772E30700005272E4070000284B014B024B028672E5070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E60700007472E7070000627562685B4E75627368306828298172E80700007D72E907000028682B682C682D4B02682E4B0268267D72EA0700008A0618F55D70E97F6ACD0700007368306831298172EB0700007D72EC0700002868267D72ED0700008A06A8F45D70E97F6AE8070000736868683F298172EE0700007D72EF070000286842684368444B008572F007000068468772F10700005272F2070000284B014B028572F3070000684D894310000000000000F07F000000000000F07F72F40700007472F50700006268528868267D72F60700008A0600F45D70E97F6AEB07000073683C4B016854684368444B008572F707000068468772F80700005272F9070000284B014B024B028672FA070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72FB0700007472FC07000062682B682C685B684368444B008572FD07000068468772FE0700005272FF070000284B014B024B02867200080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7201080000747202080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172030800007D72040800002868267D72050800008A06A8F45D70E97F6AE807000073683C4B026825684368444B008572060800006846877207080000527208080000284B014B034B03867209080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720A08000074720B08000062682B682C687E4E75627562683C4B01687F683275628A0630CD5670E97F68282981720C0800007D720D08000028682B682C682D4B02682E4B0268267D720E0800008A06D8CD5670E97F68382981720F0800007D72100800002868267D7211080000683C4B01683D6A0C080000682B682C683E683F298172120800007D7213080000286842684368444B008572140800006846877215080000527216080000284B014B02857217080000684D894310000000000000F07F000000000000F07F72180800007472190800006268528868267D721A0800008A06D8CD5670E97F6A0F08000073683C4B016854684368444B0085721B080000684687721C08000052721D080000284B014B024B0286721E080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721F08000074722008000062682B682C685B684368444B008572210800006846877222080000527223080000284B014B024B02867224080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7225080000747226080000627562685B4E75627368306828298172270800007D722808000028682B682C682D4B02682E4B0268267D72290800008A0630CD5670E97F6A0C08000073683068312981722A0800007D722B0800002868267D722C0800008A06C0CC5670E97F6A27080000736868683F2981722D0800007D722E080000286842684368444B0085722F0800006846877230080000527231080000284B014B02857232080000684D894310000000000000F07F000000000000F07F72330800007472340800006268528868267D72350800008A0618CC5670E97F6A2A08000073683C4B016854684368444B008572360800006846877237080000527238080000284B014B024B02867239080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723A08000074723B08000062682B682C685B684368444B0085723C080000684687723D08000052723E080000284B014B024B0286723F080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7240080000747241080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172420800007D72430800002868267D72440800008A06C0CC5670E97F6A2708000073683C4B026825684368444B008572450800006846877246080000527247080000284B014B034B03867248080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724908000074724A08000062682B682C687E4E75627562683C4B01687F683275627568686A47060000683C4B0168254E682B682C687E4E7562683C4B01687F682375628A06202A6270E97F6A550300008A06902A6270E97F6A8B07000075683C4B016A990500006A9A050000682B682C687E4E6AA3050000470000000000000000473FB555555555555586724B0800007562580700000070617463686573724C0800005D724D08000028636D6174706C6F746C69622E706174636865730A52656374616E676C650A724E0800002981724F0800007D72500800002868034E6805896806680168074E68086A910700006809680A5D72510800005D7252080000636E756D70792E636F72652E6D756C746961727261790A7363616C61720A7253080000684D4308000000000000000072540800008672550800005272560800006186725708000081725808000058090000005F636C69707061746872590800004E58060000005F7374616C65725A08000088580D0000005F7472616E73666F726D536574725B0800008858060000005F616E676C65725C080000470000000000000000580C0000005F616E7469616C6961736564725D08000088580A0000005F75735F646173686573725E0800004E4E86725F08000058050000005F66696C6C7260080000886A8702000047000000000000000058050000005F736E617072610800004E58080000005F76697369626C65726208000088580E0000005F70726F706F627365727665727372630800007D7264080000580A0000005F6C696E657374796C6572650800005805000000736F6C6964726608000058060000005F77696474687267080000473FB999999999999A58070000005F6865696768747268080000474128C22A0000000058060000005F6C6162656C7269080000580A0000005F6E6F6C6567656E645F726A08000058060000005F6861746368726B0800004E580F0000005F726563745F7472616E73666F726D726C08000068282981726D0800007D726E08000028682B682C682D4B02682E4B0268267D726F08000068306831298172700800007D72710800002868267D72720800008A06606F5C70E97F6A6D080000736868683F298172730800007D7274080000286842684368444B008572750800006846877276080000527277080000284B014B02857278080000684D894310000000000000F07F000000000000F07F727908000074727A0800006268528868267D727B0800008A0628385D70E97F6A7008000073683C4B016854684368444B0085727C080000684687727D08000052727E080000284B014B024B0286727F080000684D894320000000000000000000000000000000009A9999999999B93F000000002AC22841728008000074728108000062682B682C685B684368444B008572820800006846877283080000527284080000284B014B024B02867285080000684D894320000000000000000000000000000000009A9999999999B93F000000002AC228417286080000747287080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172880800007D72890800002868267D728A0800008A06606F5C70E97F6A6D08000073683C4B006825684368444B0085728B080000684687728C08000052728D080000284B014B034B0386728E080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728F08000074729008000062682B682C687E4E7562756258070000005F64617368657372910800004E58040000005F75726C72920800004E58040000005F67696472930800004E683D6AB4050000580A0000005F6C696E6577696474687294080000473FF00000000000006A85020000470000000000000000580B0000005F646173686F666673657472950800004E58070000005F636C69706F6E72960800008858090000005F636F6E7461696E7372970800004E58130000005F6F726967696E616C5F65646765636F6C6F7272980800004E58090000005F6361707374796C657299080000580400000062757474729A080000580D0000005F706174685F65666665637473729B0800005D729C080000580E0000005F72656D6F76655F6D6574686F64729D0800004E58130000005F636F6D62696E65645F7472616E73666F726D729E0800006A880200002981729F0800007D72A00800002868267D72A1080000683C4B01682B682C687E4E756258040000005F6F696472A20800004B00580A0000005F6A6F696E7374796C6572A308000058050000006D6974657272A4080000580E0000007374616C655F63616C6C6261636B72A50800004E580A0000005F65646765636F6C6F7272A6080000284700000000000000004700000000000000004700000000000000004700000000000000007472A708000058060000005F616C70686172A80800004E580B0000005F6167675F66696C74657272A90800004E58130000005F6F726967696E616C5F66616365636F6C6F7272AA080000684368444B008572AB08000068468772AC0800005272AD080000284B014B048572AE080000684D8943201F1F1F1F1F1FBF3FDEDDDDDDDDDDDD3F979696969696E63F000000000000F03F72AF0800007472B008000062580A0000005F66616365636F6C6F7272B108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472B208000058050000005F6178657372B3080000681D58090000005F616E696D6174656472B408000089580A0000005F6D6F7573656F76657272B508000089580B0000005F726173746572697A656472B60800004E75626A4E080000298172B70800007D72B80800002868034E6805896806680168074E68086A100700006809680A5D72B90800005D72BA0800006A53080000684D4308000000000000000072BB0800008672BC0800005272BD080000618672BE0800008172BF0800006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672C00800006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72C10800006A650800006A660800006A67080000473FB999999999999A6A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172C20800007D72C308000028682B682C682D4B02682E4B0268267D72C408000068306831298172C50800007D72C60800002868267D72C70800008A0678395D70E97F6AC2080000736868683F298172C80800007D72C9080000286842684368444B008572CA08000068468772CB0800005272CC080000284B014B028572CD080000684D894310000000000000F07F000000000000F07F72CE0800007472CF0800006268528868267D72D00800008A0628F15D70E97F6AC508000073683C4B016854684368444B008572D108000068468772D20800005272D3080000284B014B024B028672D4080000684D8943209B9999999999B93F00000000000000009A9999999999C93F000000000000000072D50800007472D608000062682B682C685B684368444B008572D708000068468772D80800005272D9080000284B014B024B028672DA080000684D8943209B9999999999B93F00000000000000009A9999999999C93F000000000000000072DB0800007472DC080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172DD0800007D72DE0800002868267D72DF0800008A0678395D70E97F6AC208000073683C4B006825684368444B008572E008000068468772E10800005272E2080000284B014B034B038672E3080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E40800007472E508000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FB999999999999B6A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472E60800006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172E70800007D72E80800002868267D72E9080000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272EA0800006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472EB0800006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172EC0800007D72ED0800002868034E6805896806680168074E68086AD00700006809680A5D72EE0800005D72EF0800006A53080000684D4308000000000000000072F00800008672F10800005272F2080000618672F30800008172F40800006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672F50800006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72F60800006A650800006A660800006A67080000473FB999999999999C6A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172F70800007D72F808000028682B682C682D4B02682E4B0268267D72F908000068306831298172FA0800007D72FB0800002868267D72FC0800008A06E8395D70E97F6AF7080000736868683F298172FD0800007D72FE080000286842684368444B008572FF0800006846877200090000527201090000284B014B02857202090000684D894310000000000000F07F000000000000F07F72030900007472040900006268528868267D72050900008A06E8F95D70E97F6AFA08000073683C4B016854684368444B008572060900006846877207090000527208090000284B014B024B02867209090000684D894320999999999999C93F0000000000000000343333333333D33F0000000000000000720A09000074720B09000062682B682C685B684368444B0085720C090000684687720D09000052720E090000284B014B024B0286720F090000684D894320999999999999C93F0000000000000000343333333333D33F00000000000000007210090000747211090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172120900007D72130900002868267D72140900008A06E8395D70E97F6AF708000073683C4B006825684368444B008572150900006846877216090000527217090000284B014B034B03867218090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721909000074721A09000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FC99999999999996A950800004E6A96080000886A970800004E6A980800004E6A99080000580400000062757474721B0900006A9B0800006A9C0800006A9D0800004E6A9E0800006A880200002981721C0900007D721D0900002868267D721E090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D69746572721F0900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472200900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172210900007D72220900002868034E6805896806680168074E680868CC6809680A5D72230900005D72240900006A53080000684D430800000000000000007225090000867226090000527227090000618672280900008172290900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E86722A0900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D722B0900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C08000068282981722C0900007D722D09000028682B682C682D4B02682E4B0268267D722E090000683068312981722F0900007D72300900002868267D72310900008A0638FB5D70E97F6A2C090000736868683F298172320900007D7233090000286842684368444B008572340900006846877235090000527236090000284B014B02857237090000684D894310000000000000F07F000000000000F07F72380900007472390900006268528868267D723A0900008A06E8525E70E97F6A2F09000073683C4B016854684368444B0085723B090000684687723C09000052723D090000284B014B024B0286723E090000684D894320343333333333D33F00000000000000009A9999999999D93F0000000000000000723F09000074724009000062682B682C685B684368444B008572410900006846877242090000527243090000284B014B024B02867244090000684D894320343333333333D33F00000000000000009A9999999999D93F00000000000000007245090000747246090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172470900007D72480900002868267D72490900008A0638FB5D70E97F6A2C09000073683C4B006825684368444B0085724A090000684687724B09000052724C090000284B014B034B0386724D090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724E09000074724F09000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FD33333333333346A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472500900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172510900007D72520900002868267D7253090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272540900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472550900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172560900007D72570900002868034E6805896806680168074E68086AC80100006809680A5D72580900005D72590900006A53080000684D43080000000000000000725A09000086725B09000052725C0900006186725D09000081725E0900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E86725F0900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72600900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172610900007D726209000028682B682C682D4B02682E4B0268267D726309000068306831298172640900007D72650900002868267D72660900008A0600545E70E97F6A61090000736868683F298172670900007D7268090000286842684368444B00857269090000684687726A09000052726B090000284B014B0285726C090000684D894310000000000000F07F000000000000F07F726D09000074726E0900006268528868267D726F0900008A06A85B5E70E97F6A6409000073683C4B016854684368444B008572700900006846877271090000527272090000284B014B024B02867273090000684D8943209A9999999999D93F0000000000000000000000000000E03F0000000000000000727409000074727509000062682B682C685B684368444B008572760900006846877277090000527278090000284B014B024B02867279090000684D8943209A9999999999D93F0000000000000000000000000000E03F0000000000000000727A09000074727B090000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727C0900007D727D0900002868267D727E0900008A0600545E70E97F6A6109000073683C4B006825684368444B0085727F0900006846877280090000527281090000284B014B034B03867282090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728309000074728409000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FD999999999999A6A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472850900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172860900007D72870900002868267D7288090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272890900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074728A0900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E0800002981728B0900007D728C0900002868034E6805896806680168074E68086A570400006809680A5D728D0900005D728E0900006A53080000684D43080000000000000000728F090000867290090000527291090000618672920900008172930900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672940900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72950900006A650800006A660800006A67080000473FB99999999999A06A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172960900007D729709000028682B682C682D4B02682E4B0268267D729809000068306831298172990900007D729A0900002868267D729B0900008A0630166170E97F6A96090000736868683F2981729C0900007D729D090000286842684368444B0085729E090000684687729F0900005272A0090000284B014B028572A1090000684D894310000000000000F07F000000000000F07F72A20900007472A30900006268528868267D72A40900008A0680AE6070E97F6A9909000073683C4B016854684368444B008572A509000068468772A60900005272A7090000284B014B024B028672A8090000684D894320000000000000E03F0000000000000000343333333333E33F000000000000000072A90900007472AA09000062682B682C685B684368444B008572AB09000068468772AC0900005272AD090000284B014B024B028672AE090000684D894320000000000000E03F0000000000000000343333333333E33F000000000000000072AF0900007472B0090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B10900007D72B20900002868267D72B30900008A0630166170E97F6A9609000073683C4B006825684368444B008572B409000068468772B50900005272B6090000284B014B034B038672B7090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B80900007472B909000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE00000000000006A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472BA0900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172BB0900007D72BC0900002868267D72BD090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272BE0900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472BF0900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172C00900007D72C10900002868034E6805896806680168074E68086AD90300006809680A5D72C20900005D72C30900006A53080000684D4308000000000000000072C40900008672C50900005272C6090000618672C70900008172C80900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672C90900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72CA0900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172CB0900007D72CC09000028682B682C682D4B02682E4B0268267D72CD09000068306831298172CE0900007D72CF0900002868267D72D00900008A06D0A86070E97F6ACB090000736868683F298172D10900007D72D2090000286842684368444B008572D309000068468772D40900005272D5090000284B014B028572D6090000684D894310000000000000F07F000000000000F07F72D70900007472D80900006268528868267D72D90900008A0668CD5F70E97F6ACE09000073683C4B016854684368444B008572DA09000068468772DB0900005272DC090000284B014B024B028672DD090000684D894320343333333333E33F0000000000000000676666666666E63F000000000000000072DE0900007472DF09000062682B682C685B684368444B008572E009000068468772E10900005272E2090000284B014B024B028672E3090000684D894320343333333333E33F0000000000000000676666666666E63F000000000000000072E40900007472E5090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E60900007D72E70900002868267D72E80900008A06D0A86070E97F6ACB09000073683C4B006825684368444B008572E909000068468772EA0900005272EB090000284B014B034B038672EC090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72ED0900007472EE09000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE33333333333346A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472EF0900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172F00900007D72F10900002868267D72F2090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272F30900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472F40900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172F50900007D72F60900002868034E6805896806680168074E68086A140500006809680A5D72F70900005D72F80900006A53080000684D4308000000000000000072F90900008672FA0900005272FB090000618672FC0900008172FD0900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672FE0900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72FF0900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172000A00007D72010A000028682B682C682D4B02682E4B0268267D72020A000068306831298172030A00007D72040A00002868267D72050A00008A0608226070E97F6A000A0000736868683F298172060A00007D72070A0000286842684368444B008572080A000068468772090A000052720A0A0000284B014B0285720B0A0000684D894310000000000000F07F000000000000F07F720C0A000074720D0A00006268528868267D720E0A00008A0680C05670E97F6A030A000073683C4B016854684368444B0085720F0A000068468772100A00005272110A0000284B014B024B028672120A0000684D894320666666666666E63F0000000000000000999999999999E93F000000000000000072130A00007472140A000062682B682C685B684368444B008572150A000068468772160A00005272170A0000284B014B024B028672180A0000684D894320666666666666E63F0000000000000000999999999999E93F000000000000000072190A000074721A0A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981721B0A00007D721C0A00002868267D721D0A00008A0608226070E97F6A000A000073683C4B006825684368444B0085721E0A0000684687721F0A00005272200A0000284B014B034B038672210A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72220A00007472230A000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE66666666666666A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472240A00006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172250A00007D72260A00002868267D72270A0000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272280A00006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472290A00006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E0800002981722A0A00007D722B0A00002868034E6805896806680168074E68086A4A0100006809680A5D722C0A00005D722D0A00006A53080000684D43080000000000000000722E0A000086722F0A00005272300A0000618672310A00008172320A00006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672330A00006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72340A00006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172350A00007D72360A000028682B682C682D4B02682E4B0268267D72370A000068306831298172380A00007D72390A00002868267D723A0A00008A06C0CC5F70E97F6A350A0000736868683F2981723B0A00007D723C0A0000286842684368444B0085723D0A0000684687723E0A000052723F0A0000284B014B028572400A0000684D894310000000000000F07F000000000000F07F72410A00007472420A00006268528868267D72430A00008A0640C95670E97F6A380A000073683C4B016854684368444B008572440A000068468772450A00005272460A0000284B014B024B028672470A0000684D8943209A9999999999E93F0000000000000000CDCCCCCCCCCCEC3F000000000000000072480A00007472490A000062682B682C685B684368444B0085724A0A0000684687724B0A000052724C0A0000284B014B024B0286724D0A0000684D8943209A9999999999E93F0000000000000000CDCCCCCCCCCCEC3F0000000000000000724E0A000074724F0A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172500A00007D72510A00002868267D72520A00008A06C0CC5F70E97F6A350A000073683C4B006825684368444B008572530A000068468772540A00005272550A0000284B014B034B038672560A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72570A00007472580A000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE999999999999A6A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472590A00006A9B0800006A9C0800006A9D0800004E6A9E0800006A880200002981725A0A00007D725B0A00002868267D725C0A0000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D69746572725D0A00006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074725E0A00006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E0800002981725F0A00007D72600A00002868034E6805896806680168074E68086A0F0800006809680A5D72610A00005D72620A00006A53080000684D4308000000000000000072630A00008672640A00005272650A0000618672660A00008172670A00006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672680A00006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72690A00006A650800006A660800006A67080000473FB99999999999986A6808000047412B3E00000000006A690800006A6A0800006A6B0800004E6A6C08000068282981726A0A00007D726B0A000028682B682C682D4B02682E4B0268267D726C0A0000683068312981726D0A00007D726E0A00002868267D726F0A00008A0690CA5670E97F6A6A0A0000736868683F298172700A00007D72710A0000286842684368444B008572720A000068468772730A00005272740A0000284B014B028572750A0000684D894310000000000000F07F000000000000F07F72760A00007472770A00006268528868267D72780A00008A0640325770E97F6A6D0A000073683C4B016854684368444B008572790A0000684687727A0A000052727B0A0000284B014B024B0286727C0A0000684D894320CCCCCCCCCCCCEC3F0000000000000000FFFFFFFFFFFFEF3F00000000003E2B41727D0A000074727E0A000062682B682C685B684368444B0085727F0A000068468772800A00005272810A0000284B014B024B028672820A0000684D894320CCCCCCCCCCCCEC3F0000000000000000FFFFFFFFFFFFEF3F00000000003E2B4172830A00007472840A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172850A00007D72860A00002868267D72870A00008A0690CA5670E97F6A6A0A000073683C4B006825684368444B008572880A000068468772890A000052728A0A0000284B014B034B0386728B0A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728C0A000074728D0A000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FECCCCCCCCCCCCC6A950800004E6A96080000886A970800004E6A980800004E6A99080000580400000062757474728E0A00006A9B0800006A9C0800006A9D0800004E6A9E0800006A880200002981728F0A00007D72900A00002868267D72910A0000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272920A00006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472930A00006AB3080000681D6AB4080000896AB5080000896AB60800004E7562655805000000746578747372940A00005D72950A00006A5A080000886A5B08000089580D0000005F6175746F7363616C65596F6E72960A00008858050000005F7863696472970A00004B0158090000007472616E734178657372980A00006832580A0000005F6178697362656C6F7772990A000058040000006C696E65729A0A0000580D0000006D6F7573656F7665725F736574729B0A0000636275696C74696E730A7365740A729C0A00005D729D0A000085729E0A000052729F0A00006A620800008858070000005F616E63686F7272A00A000058010000004372A10A00005805000000796178697372A20A0000636D6174706C6F746C69622E617869730A59417869730A72A30A0000298172A40A00007D72A50A00002868034E5805000000756E69747372A60A00004E58140000006F66667365745F746578745F706F736974696F6E72A70A000058040000006C65667472A80A0000580C0000005F677269644F6E4D616A6F7272A90A0000896805896806680168074E580A0000006F66667365745465787472AA0A0000636D6174706C6F746C69622E746578740A546578740A72AB0A0000298172AC0A00007D72AD0A000028580B0000005F62626F785F706174636872AE0A00004E68034E58140000005F686F72697A6F6E74616C616C69676E6D656E7472AF0A00006AA80A00006A930800004E58050000005F7772617072B00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72B10A00005D72B20A00008672B30A00008172B40A0000580E0000005F726F746174696F6E5F6D6F646572B50A00004E58090000005F726F746174696F6E72B60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E58070000005F75736574657872B70A0000896AA20800004B006A630800007D72B80A00006AB40800008958090000005F72656E646572657272B90A00004E6AA80800004E580F0000005F666F6E7470726F7065727469657372BA0A0000636D6174706C6F746C69622E666F6E745F6D616E616765720A466F6E7450726F706572746965730A72BB0A0000298172BC0A00007D72BD0A00002858070000005F77656967687472BE0A00004D900158050000005F66696C6572BF0A00004E58080000005F76617269616E7472C00A000058060000006E6F726D616C72C10A000058050000005F73697A6572C20A000047402400000000000058070000005F66616D696C7972C30A00005D72C40A0000580A00000073616E732D736572696672C50A00006158060000005F736C616E7472C60A00006AC10A000058080000005F7374726574636872C70A00006AC10A000075626AA90800004E6A87020000473FE00000000000006A610800004E6A620800008868074E683D6A8302000058120000005F766572746963616C616C69676E6D656E7472C80A00005808000000626173656C696E6572C90A00006A9D0800004E6A69080000682C58060000005F636F6C6F7272CA0A000058010000006B72CB0A0000580C0000005F6C696E6573706163696E6772CC0A0000473FF3333333333333580F0000005F6D756C7469616C69676E6D656E7472CD0A00004E6AB30800004E6A920800004E6AA50800004E6AB50800008958050000005F7465787472CE0A0000682C6AB60800004E7562580D0000005F6175746F6C6162656C706F7372CF0A0000886809680A5D72D00A00005D72D10A00008672D20A00008172D30A000058050000006D696E6F7272D40A0000636D6174706C6F746C69622E617869730A5469636B65720A72D50A0000298172D60A00007D72D70A00002858070000006C6F6361746F7272D80A0000636D6174706C6F746C69622E7469636B65720A4E756C6C4C6F6361746F720A72D90A0000298172DA0A00007D72DB0A000058040000006178697372DC0A00006AA40A000073625809000000666F726D617474657272DD0A0000636D6174706C6F746C69622E7469636B65720A4E756C6C466F726D61747465720A72DE0A0000298172DF0A00007D72E00A00006ADC0A00006AA40A0000736275625810000000697344656661756C745F6D616A666D7472E10A0000886A5A080000886A5B080000895809000000636F6E76657274657272E20A00004E58120000005F6C6173744E756D4D696E6F725469636B7372E30A00004B016A590800004E580D0000005F736D6172745F626F756E647372E40A0000895810000000697344656661756C745F6D696E6C6F6372E50A0000886A610800004E6A620800008858060000005F7363616C6572E60A0000636D6174706C6F746C69622E7363616C650A4C696E6561725363616C650A72E70A0000298172E80A0000580A0000007069636B72616469757372E90A00004B0F6A69080000682C5810000000697344656661756C745F6D616A6C6F6372EA0A000088580E0000005F6D696E6F725F7469636B5F6B7772EB0A00007D72EC0A00002858070000007469636B314F6E72ED0A00008858070000007469636B324F6E72EE0A0000897558050000006D616A6F7272EF0A00006AD50A0000298172F00A00007D72F10A0000286AD80A0000636D6174706C6F746C69622E7469636B65720A4175746F4C6F6361746F720A72F20A0000298172F30A00007D72F40A00002858080000005F696E746567657272F50A00008958060000005F737465707372F60A0000684368444B008572F70A000068468772F80A00005272F90A0000284B014B058572FA0A0000684D894328000000000000F03F000000000000004000000000000004400000000000001440000000000000244072FB0A00007472FC0A000062580A0000005F73796D6D657472696372FD0A00008958060000005F6E62696E7372FE0A000058040000006175746F72FF0A00006ADC0A00006AA40A000058060000005F7072756E6572000B00004E580F0000005F657874656E6465645F737465707372010B0000684368444B008572020B000068468772030B00005272040B0000284B014B0A8572050B0000684D8943509A9999999999B93F9A9999999999C93F000000000000D03F000000000000E03F000000000000F03F0000000000000040000000000000044000000000000014400000000000002440000000000000344072060B00007472070B000062580C0000005F6D696E5F6E5F7469636B7372080B00004B0275626ADD0A0000636D6174706C6F746C69622E7469636B65720A5363616C6172466F726D61747465720A72090B00002981720A0B00007D720B0B00002858110000005F6F66667365745F7468726573686F6C64720C0B00004B04580C0000005F7573654D61746854657874720D0B000089580A0000005F7573654F6666736574720E0B000088580A0000005F7573654C6F63616C65720F0B000089580B0000005F736369656E746966696372100B00008858100000006F726465724F664D61676E697475646572110B00004B0058060000006F666673657472120B00004B006AB70A0000896ADC0A00006AA40A0000580C0000005F706F7765726C696D69747372130B00005D72140B0000284AF9FFFFFF4B07655806000000666F726D617472150B0000682C7562756258120000005F6C6173744E756D4D616A6F725469636B7372160B00004B01580F000000697344656661756C745F6C6162656C72170B0000896A920800004E580C0000005F677269644F6E4D696E6F7272180B0000896A930800004E683D4E580E0000005F6D616A6F725F7469636B5F6B7772190B00007D721A0B0000285806000000677269644F6E721B0B0000896AED0A0000886AEE0A0000897568086A070200005810000000697344656661756C745F6D696E666D74721C0B0000886A96080000886A9B0800006A9C0800006A9D0800004E580900000063616C6C6261636B73721D0B0000636D6174706C6F746C69622E63626F6F6B0A43616C6C6261636B52656769737472790A721E0B00002981721F0B00007D72200B0000626A970800004E6AA20800004B006A630800007D72210B000058050000006C6162656C72220B00006AAB0A0000298172230B00007D72240B0000286AAE0A00004E68034E6AAF0A0000580600000063656E74657272250B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72260B00005D72270B00008672280B00008172290B00006AB50A00005806000000616E63686F72722A0B00006AB60A00005808000000766572746963616C722B0B00006A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D722C0B00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981722D0B00007D722E0B0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D722F0B00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A87020000473FE00000000000006A610800004E6A620800008868074E683D6A890600006AC80A00005806000000626F74746F6D72300B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A00005806000000436F756E747372310B00006AB60800004E75626AA80800004E6AA90800004E580A0000006D616A6F725469636B7372320B00005D72330B000028636D6174706C6F746C69622E617869730A595469636B0A72340B0000298172350B00007D72360B00002868034E6805896806680168074E68086ADA0200006809680A5D72370B00005D72380B00008672390B000081723A0B000058090000007469636B316C696E65723B0B0000636D6174706C6F746C69622E6C696E65730A4C696E6532440A723C0B00002981723D0B00007D723E0B00002868034E6805896806680168074E58090000005F696E76616C696478723F0B00008868084E6809680A5D72400B00005D72410B00008672420B00008172430B000058060000005F786F72696772440B00004B008572450B0000580E0000005F736F6C69646361707374796C6572460B0000580A00000070726F6A656374696E6772470B00006AE90A00004B056A5D080000886A5A080000886A5B0800008858070000005F6D61726B657272480B0000636D6174706C6F746C69622E6D61726B6572730A4D61726B65725374796C650A72490B00002981724A0B00007D724B0B000028580A0000005F66696C6C7374796C65724C0B0000580400000066756C6C724D0B000058070000005F66696C6C6564724E0B0000896AA30800005805000000726F756E64724F0B0000580E0000005F616C745F7472616E73666F726D72500B00004E6A480B00004B00580F0000005F736E61705F7468726573686F6C6472510B0000473FF000000000000058090000005F616C745F7061746872520B00004E683D6880298172530B00007D72540B00002868267D72550B0000683C4B026825684368444B008572560B000068468772570B00005272580B0000284B014B034B038672590B0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725A0B000074725B0B000062682B682C687E4E756258050000005F70617468725C0B0000636D6174706C6F746C69622E706174680A506174680A725D0B00002981725E0B00007D725F0B000028580E0000005F6861735F6E6F6E66696E69746572600B00008958130000005F73696D706C6966795F7468726573686F6C6472610B0000473FBC71C71C71C71C58100000005F73686F756C645F73696D706C69667972620B00008958090000005F726561646F6E6C7972630B00008958090000005F766572746963657372640B0000684368444B008572650B000068468772660B00005272670B0000284B014B024B028672680B0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072690B000074726A0B00006258060000005F636F646573726B0B00004E58140000005F696E746572706F6C6174696F6E5F7374657073726C0B00004B0175626A99080000580400000062757474726D0B000075626A590800004E58030000005F7879726E0B00004E580E0000005F75735F646173684F6666736574726F0B00004E580B0000005F646173684F666673657472700B00004E6A610800004E6A620800008858060000007A6F7264657272710B0000474000147AE147AE146A630800007D72720B00006A6508000058040000004E6F6E6572730B0000580B0000005F6C696E657374796C657372740B00004E58100000005F6D61726B657266616365636F6C6F7272750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A0000580F0000005F736F6C69646A6F696E7374796C6572760B00005805000000726F756E6472770B0000580A0000005F647261777374796C6572780B0000580700000064656661756C7472790B000058100000005F6D61726B6572656467657769647468727A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E58130000005F6D61726B657266616365636F6C6F72616C74727B0B000058040000006E6F6E65727C0B0000580A000000696E645F6F6666736574727D0B00004B006A960800008858090000005F696E76616C696479727E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E580E000000766572746963616C4F6666736574727F0B00004E6A970800004E58080000005F6461736853657172800B00004E58100000005F6D61726B657265646765636F6C6F7272810B00006AFF0A00006AA20800004B00580D0000005F646173686361707374796C6572820B000058040000006275747472830B00006AA50800004E6AA80800004E6AA90800004E58060000005F796F72696772840B00004B008572850B0000580E0000005F646173686A6F696E7374796C6572860B00005805000000726F756E6472870B00006AB50800008958090000005F737562736C69636572880B000089580A0000005F6D61726B657665727972890B00004E580B0000005F6D61726B657273697A65728A0B000047400C00000000000058110000005F7472616E73666F726D65645F70617468728B0B00004E6AB30800004E6AB40800008958090000005F785F66696C6C6564728C0B00004E580B0000005F75735F64617368536571728D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B0800008958080000006C6162656C314F6E728E0B0000886A590800004E6AED0A00008858090000005F626173655F706164728F0B000047400C00000000000058060000006C6162656C3272900B00006AAB0A0000298172910B00007D72920B0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D72930B00005D72940B00008672950B00008172960B00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72970B00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172980B00007D72990B0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D729A0B00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A360600006AC80A0000580F00000063656E7465725F626173656C696E65729B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A00002981729C0B00007D729D0B0000286AAE0A00004E68034E6AAF0A000058050000007269676874729E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D729F0B00005D72A00B00008672A10B00008172A20B00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72A30B00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172A40B00007D72A50B0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72A60B00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A930500006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A620800008858080000005F7469636B64697272A70B000058030000006F757472A80B00006A67080000473FE999999999999A6A69080000682C6ACA0A00006ACB0A000058080000006C6162656C324F6E72A90B000089580A0000005F6C6162656C73697A6572AA0B000058060000006D656469756D72AB0B00006A920800004E6A930800004E683D4E580C0000005F7469636B6D61726B65727372AC0B00004B004B018672AD0B00006AEE0A00008958060000006C6162656C3172AE0B00006A9C0B00006A960800008858050000005F6E616D6572AF0B00005805000000797469636B72B00B00006A9B0800006A9C0800006A9D0800004E6A970800004E6A1B0B0000896AA20800004B006A630800007D72B10B000058040000005F6C6F6372B20B00004B006AA80800004E6AA90800004E6AA50800004E58090000007469636B326C696E6572B30B00006A3C0B0000298172B40B00007D72B50B00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72B60B00005D72B70B00008672B80B00008172B90B00006A440B00004B018572BA0B00006A460B0000580A00000070726F6A656374696E6772BB0B00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172BC0B00007D72BD0B0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B016A510B0000473FF00000000000006A520B00004E683D6880298172BE0B00007D72BF0B00002868267D72C00B0000683C4B026825684368444B008572C10B000068468772C20B00005272C30B0000284B014B034B038672C40B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50B00007472C60B000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B0000474000147AE147AE146A630800007D72C70B00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472C80B00006A780B00006A790B00006A7A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472C90B00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572CA0B00006A860B00005805000000726F756E6472CB0B00006AB5080000896A880B0000896A890B00004E6A8A0B000047400C0000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E7562580B0000005F6C6162656C636F6C6F7272CC0B00006ACB0A000058070000005F7A6F7264657272CD0B0000474000147AE147AE146AC20A000047400C0000000000005808000000677269646C696E6572CE0B00006A3C0B0000298172CF0B00007D72D00B00002868034E6805896806680168074E6A3F0B00008968086AD50400006809680A5D72D10B00005D72D20B00008672D30B00008172D40B00006A440B00004B004B018672D50B00006A460B0000580A00000070726F6A656374696E6772D60B00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172D70B00007D72D80B0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00006A730B00006A510B00004E6A520B00004E683D6A88020000298172D90B00007D72DA0B00002868267D72DB0B0000683C4B01682B682C687E4E75626A5C0B00006A5D0B0000298172DC0B00007D72DD0B0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B0000684368444B008572DE0B000068468772DF0B00005272E00B0000284B014B004B028672E10B0000684D89430072E20B00007472E30B0000626A6B0B00004E6A6C0B00004B0175626A990800006A6D0B000075626A590800004E6A6E0B0000684368444B008572E40B000068468772E50B00005272E60B0000284B014B024B028672E70B0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072E80B00007472E90B0000626A6F0B00004E6A700B00004E6A610800004E6A62080000886A630800007D72EA0B00006A6508000058010000002D72EB0B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A000058070000002362306230623072EC0B00006A760B00005805000000726F756E6472ED0B00006A780B00006A790B00006A7A0B0000473FF00000000000006A920800004E6A930800004E683D6A900500006A94080000473FE999999999999A6A85020000684368444B008572EE0B000068468772EF0B00005272F00B0000284B014B028572F10B0000684D8943100000000000000000000000000000F03F72F20B00007472F30B0000626A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000896A9B0800006A9C0800006A9D0800004E6A87020000684368444B008572F40B000068468772F50B00005272F60B0000284B014B028572F70B0000684D8943100000000000000000000000000000000072F80B00007472F90B0000626A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472FA0B00006AA50800004E6AA8080000473FF00000000000006AA90800004E6A840B00004B004B008672FB0B00006A860B00005805000000726F756E6472FC0B00006AB5080000896A880B0000896A890B00004E6A8A0B00004700000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00006A5D0B0000298172FD0B00007D72FE0B0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B00006AE60B00006A6B0B00004E6A6C0B00004BB475626AB60800004E756258040000005F70616472FF0B000047401C0000000000006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A340B0000298172000C00007D72010C00002868034E6805896806680168074E68086A4F0700006809680A5D72020C00005D72030C00008672040C00008172050C00006A3B0B00006A3C0B0000298172060C00007D72070C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72080C00005D72090C000086720A0C000081720B0C00006A440B00006A450B00006A460B0000580A00000070726F6A656374696E67720C0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B00002981720D0C00007D720E0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B006A510B0000473FF00000000000006A520B00004E683D68802981720F0C00007D72100C00002868267D72110C0000683C4B026825684368444B008572120C000068468772130C00005272140C0000284B014B034B038672150C0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72160C00007472170C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B0000474000147AE147AE146A630800007D72180C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472190C00006A780B00006A790B00006A7A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B0000580400000062757474721A0C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B0085721B0C00006A860B00005805000000726F756E64721C0C00006AB5080000896A880B0000896A890B00004E6A8A0B000047400C0000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B080000896A8E0B0000886A590800004E6AED0A0000886A8F0B000047400C0000000000006A900B00006AAB0A00002981721D0C00007D721E0C0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D721F0C00005D72200C00008672210C00008172220C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72230C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172240C00007D72250C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72260C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6AA00500006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A0000298172270C00007D72280C0000286AAE0A00004E68034E6AAF0A00006A9E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72290C00005D722A0C000086722B0C000081722C0C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D722D0C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981722E0C00007D722F0C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72300C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6AA80500006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A62080000886AA70B00006AA80B00006A67080000473FE999999999999A6A69080000682C6ACA0A00006ACB0A00006AA90B0000896AAA0B00006AAB0B00006A920800004E6A930800004E683D4E6AAC0B00004B004B018672310C00006AEE0A0000896AAE0B00006A270C00006A96080000886AAF0B00005805000000797469636B72320C00006A9B0800006A9C0800006A9D0800004E6A970800004E6A1B0B0000896AA20800004B006A630800007D72330C00006AB20B00004B006AA80800004E6AA90800004E6AA50800004E6AB30B00006A3C0B0000298172340C00007D72350C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72360C00005D72370C00008672380C00008172390C00006A440B00006ABA0B00006A460B0000580A00000070726F6A656374696E67723A0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B00002981723B0C00007D723C0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B016A510B0000473FF00000000000006A520B00004E683D68802981723D0C00007D723E0C00002868267D723F0C0000683C4B026825684368444B008572400C000068468772410C00005272420C0000284B014B034B038672430C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72440C00007472450C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B0000474000147AE147AE146A630800007D72460C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472470C00006A780B00006A790B00006A7A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472480C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572490C00006A860B00005805000000726F756E64724A0C00006AB5080000896A880B0000896A890B00004E6A8A0B000047400C0000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626ACC0B00006ACB0A00006ACD0B0000474000147AE147AE146AC20A000047400C0000000000006ACE0B00006A3C0B00002981724B0C00007D724C0C00002868034E6805896806680168074E6A3F0B00008968086AD10600006809680A5D724D0C00005D724E0C000086724F0C00008172500C00006A440B00006AD50B00006A460B0000580A00000070726F6A656374696E6772510C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172520C00007D72530C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00006A730B00006A510B00004E6A520B00004E683D6A88020000298172540C00007D72550C00002868267D72560C0000683C4B01682B682C687E4E75626A5C0B00006A5D0B0000298172570C00007D72580C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B0000684368444B008572590C0000684687725A0C000052725B0C0000284B014B004B0286725C0C0000684D896AE20B000074725D0C0000626A6B0B00004E6A6C0B00004B0175626A990800006A6D0B000075626A590800004E6A6E0B0000684368444B0085725E0C0000684687725F0C00005272600C0000284B014B024B028672610C0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072620C00007472630C0000626A6F0B00004E6A700B00004E6A610800004E6A62080000886A630800007D72640C00006A650800006AEB0B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006AEC0B00006A760B00005805000000726F756E6472650C00006A780B00006A790B00006A7A0B0000473FF00000000000006A920800004E6A930800004E683D6A900500006A94080000473FE999999999999A6A85020000684368444B008572660C000068468772670C00005272680C0000284B014B028572690C0000684D8943100000000000000000000000000000F03F726A0C000074726B0C0000626A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000896A9B0800006A9C0800006A9D0800004E6A87020000684368444B0085726C0C0000684687726D0C000052726E0C0000284B014B0285726F0C0000684D8943100000000000000000000000000000000072700C00007472710C0000626A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472720C00006AA50800004E6AA8080000473FF00000000000006AA90800004E6A840B00006AFB0B00006A860B00005805000000726F756E6472730C00006AB5080000896A880B0000896A890B00004E6A8A0B00004700000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00006A5D0B0000298172740C00007D72750C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B00006A600C00006A6B0B00004E6A6C0B00004BB475626AB60800004E75626AFF0B000047401C0000000000006AB3080000681D6AB4080000896AB5080000896AB60800004E7562656AA50800004E58080000006C6162656C70616472760C0000474010000000000000580A0000006D696E6F725469636B7372770C00005D72780C0000286A340B0000298172790C00007D727A0C00002868034E6805896806680168074E68086A5B0300006809680A5D727B0C00005D727C0C000086727D0C000081727E0C00006A3B0B00006A3C0B00002981727F0C00007D72800C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72810C00005D72820C00008672830C00008172840C00006A440B00006A450B00006A460B0000580A00000070726F6A656374696E6772850C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172860C00007D72870C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B006A510B0000473FF00000000000006A520B00004E683D6880298172880C00007D72890C00002868267D728A0C0000683C4B026825684368444B0085728B0C0000684687728C0C000052728D0C0000284B014B034B0386728E0C0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728F0C00007472900C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B00004B026A630800007D72910C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472920C00006A780B00006A790B00006A7A0B0000473FE33333333333336A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472930C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572940C00006A860B00005805000000726F756E6472950C00006AB5080000896A880B0000896A890B00004E6A8A0B00004740000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B080000896A8E0B0000886A590800004E6AED0A0000886A8F0B000047400B3333333333336A900B00006AAB0A0000298172960C00007D72970C0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D72980C00005D72990C000086729A0C000081729B0C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D729C0C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981729D0C00007D729E0C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D729F0C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A770600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A0000298172A00C00007D72A10C0000286AAE0A00004E68034E6AAF0A00006A9E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72A20C00005D72A30C00008672A40C00008172A50C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72A60C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172A70C00007D72A80C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72A90C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A3D0600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A62080000886AA70B00006AA80B00006A67080000473FE33333333333336A69080000682C6ACA0A00006ACB0A00006AA90B0000896AAA0B00006AAB0B00006A920800004E6A930800004E683D4E6AAC0B00004B004B018672AA0C00006AEE0A0000896AAE0B00006AA00C00006A96080000886AAF0B00005805000000797469636B72AB0C00006A9B0800006A9C0800006A9D0800004E6A970800004E6A1B0B0000896AA20800004B006A630800007D72AC0C00006AB20B00004B006AA80800004E6AA90800004E6AA50800004E6AB30B00006A3C0B0000298172AD0C00007D72AE0C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72AF0C00005D72B00C00008672B10C00008172B20C00006A440B00006ABA0B00006A460B0000580A00000070726F6A656374696E6772B30C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172B40C00007D72B50C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B016A510B0000473FF00000000000006A520B00004E683D6880298172B60C00007D72B70C00002868267D72B80C0000683C4B026825684368444B008572B90C000068468772BA0C00005272BB0C0000284B014B034B038672BC0C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BD0C00007472BE0C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B00004B026A630800007D72BF0C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472C00C00006A780B00006A790B00006A7A0B0000473FE33333333333336A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472C10C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572C20C00006A860B00005805000000726F756E6472C30C00006AB5080000896A880B0000896A890B00004E6A8A0B00004740000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626ACC0B00006ACB0A00006ACD0B00004B026AC20A00004740000000000000006ACE0B00006A3C0B0000298172C40C00007D72C50C00002868034E6805896806680168074E6A3F0B00008968086A180400006809680A5D72C60C00005D72C70C00008672C80C00008172C90C00006A440B00006AD50B00006A460B0000580A00000070726F6A656374696E6772CA0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172CB0C00007D72CC0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00006A730B00006A510B00004E6A520B00004E683D6A88020000298172CD0C00007D72CE0C00002868267D72CF0C0000683C4B01682B682C687E4E75626A5C0B00006A5D0B0000298172D00C00007D72D10C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B0000684368444B008572D20C000068468772D30C00005272D40C0000284B014B004B028672D50C0000684D896AE20B00007472D60C0000626A6B0B00004E6A6C0B00004B0175626A990800006A6D0B000075626A590800004E6A6E0B0000684368444B008572D70C000068468772D80C00005272D90C0000284B014B024B028672DA0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072DB0C00007472DC0C0000626A6F0B00004E6A700B00004E6A610800004E6A62080000886A630800007D72DD0C00006A650800006AEB0B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006AEC0B00006A760B00005805000000726F756E6472DE0C00006A780B00006A790B00006A7A0B0000473FF00000000000006A920800004E6A930800004E683D6A900500006A94080000473FE999999999999A6A85020000684368444B008572DF0C000068468772E00C00005272E10C0000284B014B028572E20C0000684D8943100000000000000000000000000000F03F72E30C00007472E40C0000626A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000896A9B0800006A9C0800006A9D0800004E6A87020000684368444B008572E50C000068468772E60C00005272E70C0000284B014B028572E80C0000684D8943100000000000000000000000000000000072E90C00007472EA0C0000626A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472EB0C00006AA50800004E6AA8080000473FF00000000000006AA90800004E6A840B00006AFB0B00006A860B00005805000000726F756E6472EC0C00006AB5080000896A880B0000896A890B00004E6A8A0B00004700000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00006A5D0B0000298172ED0C00007D72EE0C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B00006AD90C00006A6B0B00004E6A6C0B00004BB475626AB60800004E75626AFF0B000047401599999999999A6AB3080000681D6AB4080000896AB5080000896AB60800004E75626A340B0000298172EF0C00007D72F00C00002868034E6805896806680168074E68086A190300006809680A5D72F10C00005D72F20C00008672F30C00008172F40C00006A3B0B00006A3C0B0000298172F50C00007D72F60C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72F70C00005D72F80C00008672F90C00008172FA0C00006A440B00006A450B00006A460B0000580A00000070726F6A656374696E6772FB0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172FC0C00007D72FD0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B006A510B0000473FF00000000000006A520B00004E683D6880298172FE0C00007D72FF0C00002868267D72000D0000683C4B026825684368444B008572010D000068468772020D00005272030D0000284B014B034B038672040D0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72050D00007472060D000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B00004B026A630800007D72070D00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472080D00006A780B00006A790B00006A7A0B0000473FE33333333333336A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472090D00006AA50800004E6AA80800004E6AA90800004E6A840B00004B0085720A0D00006A860B00005805000000726F756E64720B0D00006AB5080000896A880B0000896A890B00004E6A8A0B00004740000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B080000896A8E0B0000886A590800004E6AED0A0000886A8F0B000047400B3333333333336A900B00006AAB0A00002981720C0D00007D720D0D0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D720E0D00005D720F0D00008672100D00008172110D00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72120D00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172130D00007D72140D0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72150D00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A2F0600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A0000298172160D00007D72170D0000286AAE0A00004E68034E6AAF0A00006A9E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72180D00005D72190D000086721A0D000081721B0D00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D721C0D00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981721D0D00007D721E0D0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D721F0D00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A7E0600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A62080000886AA70B00006AA80B00006A67080000473FE33333333333336A69080000682C6ACA0A00006ACB0A00006AA90B0000896AAA0B00006AAB" + }, + { + "0": "0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B02636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A06C02C5B70E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A06C02C5B70E97F68298A0660D15470E97F6828298171357D713628682B682C682D4B02682E4B0268267D71378A06D0D15470E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7138298171397D713A2868267D713B58080000005F696E76616C6964713C4B01580A0000005F7472616E73666F726D713D6835682B682C58050000005F62626F78713E636D6174706C6F746C69622E7472616E73666F726D730A42626F780A713F298171407D71412858070000005F6D696E706F737142636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A7143636E756D70790A6E6461727261790A71444B008571454301627146877147527148284B014B02857149636E756D70790A64747970650A714A58020000006638714B4B004B0187714C52714D284B0358010000003C714E4E4E4E4AFFFFFFFF4AFFFFFFFF4B0074714F62894310000000000000F07F000000000000F07F71507471516258070000005F69676E6F726571528868267D71538A06D0D15470E97F683973683C4B01580C0000005F706F696E74735F6F7269677154684368444B008571556846877156527157284B014B024B02867158684D89432000000000000000000000000000000000000000000000F03F000000000000F03F715974715A62682B682C58070000005F706F696E7473715B684368444B0085715C684687715D52715E284B014B024B0286715F684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7160747161627562685B4E75627368306828298171627D716328682B682C682D4B02682E4B0268267D71648A0660D15470E97F68357368306831298171657D71662868267D71678A06F0D05470E97F68627358070000005F626F786F75747168683F298171697D716A286842684368444B0085716B684687716C52716D284B014B0285716E684D894310000000000000F07F000000000000F07F716F7471706268528868267D71718A0680D05470E97F686573683C4B016854684368444B008571726846877173527174284B014B024B02867175684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717674717762682B682C685B684368444B00857178684687717952717A284B014B024B0286717B684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717C74717D627562683C4B0168254E682B682C58090000005F696E766572746564717E4E7562683C4B0158020000005F62717F636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A7180298171817D71822868267D71838A06F0D05470E97F686273683C4B026825684368444B008571846846877185527186284B014B034B03867187684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F718874718962682B682C687E4E75627562683C4B01687F683275628A0658535570E97F68282981718A7D718B28682B682C682D4B02682E4B0268267D718C8A06C8535570E97F68382981718D7D718E2868267D718F683C4B01683D688A682B682C683E683F298171907D7191286842684368444B008571926846877193527194284B014B02857195684D894310000000000000F07F000000000000F07F71967471976268528868267D71988A06C8535570E97F688D73683C4B016854684368444B00857199684687719A52719B284B014B024B0286719C684D89432000000000000000000000000000000000000000000000F03F000000000000F03F719D74719E62682B682C685B684368444B0085719F68468771A05271A1284B014B024B028671A2684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71A37471A4627562685B4E75627368306828298171A57D71A628682B682C682D4B02682E4B0268267D71A78A0658535570E97F688A7368306831298171A87D71A92868267D71AA8A06E8525570E97F68A5736868683F298171AB7D71AC286842684368444B008571AD68468771AE5271AF284B014B028571B0684D894310000000000000F07F000000000000F07F71B17471B26268528868267D71B38A0678525570E97F68A873683C4B016854684368444B008571B468468771B55271B6284B014B024B028671B7684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71B87471B962682B682C685B684368444B008571BA68468771BB5271BC284B014B024B028671BD684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71BE7471BF627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171C07D71C12868267D71C28A06E8525570E97F68A573683C4B026825684368444B008571C368468771C45271C5284B014B034B038671C6684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71C77471C862682B682C687E4E75627562683C4B01687F683275628A0648D75470E97F6828298171C97D71CA28682B682C682D4B02682E4B0268267D71CB8A06B8D75470E97F6838298171CC7D71CD2868267D71CE683C4B01683D68C9682B682C683E683F298171CF7D71D0286842684368444B008571D168468771D25271D3284B014B028571D4684D894310000000000000F07F000000000000F07F71D57471D66268528868267D71D78A06B8D75470E97F68CC73683C4B016854684368444B008571D868468771D95271DA284B014B024B028671DB684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71DC7471DD62682B682C685B684368444B008571DE68468771DF5271E0284B014B024B028671E1684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71E27471E3627562685B4E75627368306828298171E47D71E528682B682C682D4B02682E4B0268267D71E68A0648D75470E97F68C97368306831298171E77D71E82868267D71E98A06D8D65470E97F68E4736868683F298171EA7D71EB286842684368444B008571EC68468771ED5271EE284B014B028571EF684D894310000000000000F07F000000000000F07F71F07471F16268528868267D71F28A0668D65470E97F68E773683C4B016854684368444B008571F368468771F45271F5284B014B024B028671F6684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71F77471F862682B682C685B684368444B008571F968468771FA5271FB284B014B024B028671FC684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71FD7471FE627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171FF7D72000100002868267D72010100008A06D8D65470E97F68E473683C4B026825684368444B008572020100006846877203010000527204010000284B014B034B03867205010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720601000074720701000062682B682C687E4E75627562683C4B01687F683275628A06387B5270E97F6828298172080100007D720901000028682B682C682D4B02682E4B0268267D720A0100008A06A87B5270E97F68382981720B0100007D720C0100002868267D720D010000683C4B01683D6A08010000682B682C683E683F2981720E0100007D720F010000286842684368444B008572100100006846877211010000527212010000284B014B02857213010000684D894310000000000000F07F000000000000F07F72140100007472150100006268528868267D72160100008A06A87B5270E97F6A0B01000073683C4B016854684368444B008572170100006846877218010000527219010000284B014B024B0286721A010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721B01000074721C01000062682B682C685B684368444B0085721D010000684687721E01000052721F010000284B014B024B02867220010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7221010000747222010000627562685B4E75627368306828298172230100007D722401000028682B682C682D4B02682E4B0268267D72250100008A06387B5270E97F6A080100007368306831298172260100007D72270100002868267D72280100008A06C87A5270E97F6A23010000736868683F298172290100007D722A010000286842684368444B0085722B010000684687722C01000052722D010000284B014B0285722E010000684D894310000000000000F07F000000000000F07F722F0100007472300100006268528868267D72310100008A06587A5270E97F6A2601000073683C4B016854684368444B008572320100006846877233010000527234010000284B014B024B02867235010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723601000074723701000062682B682C685B684368444B00857238010000684687723901000052723A010000284B014B024B0286723B010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723C01000074723D010000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723E0100007D723F0100002868267D72400100008A06C87A5270E97F6A2301000073683C4B026825684368444B008572410100006846877242010000527243010000284B014B034B03867244010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724501000074724601000062682B682C687E4E75627562683C4B01687F683275628A06A02D5B70E97F6828298172470100007D724801000028682B682C682D4B02682E4B0268267D724901000068306832683C4B01687F682375628A06C83A5370E97F68282981724A0100007D724B01000028682B682C682D4B02682E4B0268267D724C0100008A06383B5370E97F68382981724D0100007D724E0100002868267D724F010000683C4B01683D6A4A010000682B682C683E683F298172500100007D7251010000286842684368444B008572520100006846877253010000527254010000284B014B02857255010000684D894310000000000000F07F000000000000F07F72560100007472570100006268528868267D72580100008A06383B5370E97F6A4D01000073683C4B016854684368444B00857259010000684687725A01000052725B010000284B014B024B0286725C010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725D01000074725E01000062682B682C685B684368444B0085725F0100006846877260010000527261010000284B014B024B02867262010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7263010000747264010000627562685B4E75627368306828298172650100007D726601000028682B682C682D4B02682E4B0268267D72670100008A06C83A5370E97F6A4A0100007368306831298172680100007D72690100002868267D726A0100008A06583A5370E97F6A65010000736868683F2981726B0100007D726C010000286842684368444B0085726D010000684687726E01000052726F010000284B014B02857270010000684D894310000000000000F07F000000000000F07F72710100007472720100006268528868267D72730100008A06E8395370E97F6A6801000073683C4B016854684368444B008572740100006846877275010000527276010000284B014B024B02867277010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727801000074727901000062682B682C685B684368444B0085727A010000684687727B01000052727C010000284B014B024B0286727D010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727E01000074727F010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172800100007D72810100002868267D72820100008A06583A5370E97F6A6501000073683C4B026825684368444B008572830100006846877284010000527285010000284B014B034B03867286010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728701000074728801000062682B682C687E4E75627562683C4B01687F683275628A06302D5B70E97F6828298172890100007D728A01000028682B682C682D4B02682E4B0268267D728B01000068306832683C4B01687F682375628A0690A35B70E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A728C0100002981728D0100007D728E0100002858020000005F78728F010000683268267D7290010000683C4B0168254E682B682C687E4E58020000005F797291010000636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A7292010000298172930100007D72940100002868267D72950100008A0690A35B70E97F6A8D01000073683C4B01682B682C687E4E756275628A06D8A65B70E97F6828298172960100007D729701000028682B682C682D4B02682E4B0268267D72980100008A06A0A65B70E97F6838298172990100007D729A0100002868267D729B010000683C4B01683D6A96010000682B682C683E683F2981729C0100007D729D010000286842684368444B0085729E010000684687729F0100005272A0010000284B014B028572A1010000684D894310000000000000F07F000000000000F07F72A20100007472A30100006268528868267D72A40100008A06A0A65B70E97F6A9901000073683C4B016854684368444B008572A501000068468772A60100005272A7010000284B014B024B028672A8010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A90100007472AA01000062682B682C685B684368444B008572AB01000068468772AC0100005272AD010000284B014B024B028672AE010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AF0100007472B0010000627562685B4E75627368306828298172B10100007D72B201000028682B682C682D4B02682E4B0268267D72B30100008A06D8A65B70E97F6A960100007368306831298172B40100007D72B50100002868267D72B60100008A0690135870E97F6AB1010000736868683F298172B70100007D72B8010000286842684368444B008572B901000068468772BA0100005272BB010000284B014B028572BC010000684D894310000000000000F07F000000000000F07F72BD0100007472BE0100006268528868267D72BF0100008A06181C5870E97F6AB401000073683C4B016854684368444B008572C001000068468772C10100005272C2010000284B014B024B028672C3010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C40100007472C501000062682B682C685B684368444B008572C601000068468772C70100005272C8010000284B014B024B028672C9010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CA0100007472CB010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172CC0100007D72CD0100002868267D72CE0100008A0690135870E97F6AB101000073683C4B026825684368444B008572CF01000068468772D00100005272D1010000284B014B034B038672D2010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D30100007472D401000062682B682C687E4E75627562683C4B01687F683275628A06B8375370E97F6828298172D50100007D72D601000028682B682C682D4B02682E4B0268267D72D70100008A0628385370E97F6838298172D80100007D72D90100002868267D72DA010000683C4B01683D6AD5010000682B682C683E683F298172DB0100007D72DC010000286842684368444B008572DD01000068468772DE0100005272DF010000284B014B028572E0010000684D894310000000000000F07F000000000000F07F72E10100007472E20100006268528868267D72E30100008A0628385370E97F6AD801000073683C4B016854684368444B008572E401000068468772E50100005272E6010000284B014B024B028672E7010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E80100007472E901000062682B682C685B684368444B008572EA01000068468772EB0100005272EC010000284B014B024B028672ED010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EE0100007472EF010000627562685B4E75627368306828298172F00100007D72F101000028682B682C682D4B02682E4B0268267D72F20100008A06B8375370E97F6AD50100007368306831298172F30100007D72F40100002868267D72F50100008A0648375370E97F6AF0010000736868683F298172F60100007D72F7010000286842684368444B008572F801000068468772F90100005272FA010000284B014B028572FB010000684D894310000000000000F07F000000000000F07F72FC0100007472FD0100006268528868267D72FE0100008A06D8365370E97F6AF301000073683C4B016854684368444B008572FF0100006846877200020000527201020000284B014B024B02867202020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720302000074720402000062682B682C685B684368444B008572050200006846877206020000527207020000284B014B024B02867208020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720902000074720A020000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720B0200007D720C0200002868267D720D0200008A0648375370E97F6AF001000073683C4B026825684368444B0085720E020000684687720F020000527210020000284B014B034B03867211020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721202000074721302000062682B682C687E4E75627562683C4B01687F683275628A0640126170E97F6828298172140200007D721502000028682B682C682D4B02682E4B0268267D72160200008A0668266070E97F6838298172170200007D72180200002868267D7219020000683C4B01683D6A14020000682B682C683E683F2981721A0200007D721B020000286842684368444B0085721C020000684687721D02000052721E020000284B014B0285721F020000684D894310000000000000F07F000000000000F07F72200200007472210200006268528868267D72220200008A0668266070E97F6A1702000073683C4B016854684368444B008572230200006846877224020000527225020000284B014B024B02867226020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722702000074722802000062682B682C685B684368444B00857229020000684687722A02000052722B020000284B014B024B0286722C020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722D02000074722E020000627562685B4E756273683068282981722F0200007D723002000028682B682C682D4B02682E4B0268267D72310200008A0640126170E97F6A140200007368306831298172320200007D72330200002868267D72340200008A0648176170E97F6A2F020000736868683F298172350200007D7236020000286842684368444B008572370200006846877238020000527239020000284B014B0285723A020000684D894310000000000000F07F000000000000F07F723B02000074723C0200006268528868267D723D0200008A06F8C56170E97F6A3202000073683C4B016854684368444B0085723E020000684687723F020000527240020000284B014B024B02867241020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724202000074724302000062682B682C685B684368444B008572440200006846877245020000527246020000284B014B024B02867247020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7248020000747249020000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724A0200007D724B0200002868267D724C0200008A0648176170E97F6A2F02000073683C4B026825684368444B0085724D020000684687724E02000052724F020000284B014B034B03867250020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725102000074725202000062682B682C687E4E75627562683C4B01687F683275628A06D83D5370E97F6828298172530200007D725402000028682B682C682D4B02682E4B0268267D72550200008A06483E5370E97F6838298172560200007D72570200002868267D7258020000683C4B01683D6A53020000682B682C683E683F298172590200007D725A020000286842684368444B0085725B020000684687725C02000052725D020000284B014B0285725E020000684D894310000000000000F07F000000000000F07F725F0200007472600200006268528868267D72610200008A06483E5370E97F6A5602000073683C4B016854684368444B008572620200006846877263020000527264020000284B014B024B02867265020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726602000074726702000062682B682C685B684368444B00857268020000684687726902000052726A020000284B014B024B0286726B020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726C02000074726D020000627562685B4E756273683068282981726E0200007D726F02000028682B682C682D4B02682E4B0268267D72700200008A06D83D5370E97F6A530200007368306831298172710200007D72720200002868267D72730200008A06683D5370E97F6A6E020000736868683F298172740200007D7275020000286842684368444B008572760200006846877277020000527278020000284B014B02857279020000684D894310000000000000F07F000000000000F07F727A02000074727B0200006268528868267D727C0200008A06F83C5370E97F6A7102000073683C4B016854684368444B0085727D020000684687727E02000052727F020000284B014B024B02867280020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728102000074728202000062682B682C685B684368444B008572830200006846877284020000527285020000284B014B024B02867286020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7287020000747288020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172890200007D728A0200002868267D728B0200008A06683D5370E97F6A6E02000073683C4B026825684368444B0085728C020000684687728D02000052728E020000284B014B034B0386728F020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729002000074729102000062682B682C687E4E75627562683C4B01687F683275628A0648C75970E97F6828298172920200007D729302000028682B682C682D4B02682E4B0268267D72940200008A0698CF5970E97F6838298172950200007D72960200002868267D7297020000683C4B01683D6A92020000682B682C683E683F298172980200007D7299020000286842684368444B0085729A020000684687729B02000052729C020000284B014B0285729D020000684D894310000000000000F07F000000000000F07F729E02000074729F0200006268528868267D72A00200008A0698CF5970E97F6A9502000073683C4B016854684368444B008572A102000068468772A20200005272A3020000284B014B024B028672A4020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A50200007472A602000062682B682C685B684368444B008572A702000068468772A80200005272A9020000284B014B024B028672AA020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0200007472AC020000627562685B4E75627368306828298172AD0200007D72AE02000028682B682C682D4B02682E4B0268267D72AF0200008A0648C75970E97F6A920200007368306831298172B00200007D72B10200002868267D72B20200008A0618255970E97F6AAD020000736868683F298172B30200007D72B4020000286842684368444B008572B502000068468772B60200005272B7020000284B014B028572B8020000684D894310000000000000F07F000000000000F07F72B90200007472BA0200006268528868267D72BB0200008A0660415A70E97F6AB002000073683C4B016854684368444B008572BC02000068468772BD0200005272BE020000284B014B024B028672BF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C00200007472C102000062682B682C685B684368444B008572C202000068468772C30200005272C4020000284B014B024B028672C5020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C60200007472C7020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C80200007D72C90200002868267D72CA0200008A0618255970E97F6AAD02000073683C4B026825684368444B008572CB02000068468772CC0200005272CD020000284B014B034B038672CE020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72CF0200007472D002000062682B682C687E4E75627562683C4B01687F683275628A06F00E5F70E97F6A8C010000298172D10200007D72D2020000286A8F010000683268267D72D3020000683C4B0168254E682B682C687E4E6A910100006A92010000298172D40200007D72D50200002868267D72D60200008A06F00E5F70E97F6AD102000073683C4B01682B682C687E4E756275628A0648B75370E97F6828298172D70200007D72D802000028682B682C682D4B02682E4B0268267D72D90200008A06B8B75370E97F6838298172DA0200007D72DB0200002868267D72DC020000683C4B01683D6AD7020000682B682C683E683F298172DD0200007D72DE020000286842684368444B008572DF02000068468772E00200005272E1020000284B014B028572E2020000684D894310000000000000F07F000000000000F07F72E30200007472E40200006268528868267D72E50200008A06B8B75370E97F6ADA02000073683C4B016854684368444B008572E602000068468772E70200005272E8020000284B014B024B028672E9020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0200007472EB02000062682B682C685B684368444B008572EC02000068468772ED0200005272EE020000284B014B024B028672EF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00200007472F1020000627562685B4E75627368306828298172F20200007D72F302000028682B682C682D4B02682E4B0268267D72F40200008A0648B75370E97F6AD70200007368306831298172F50200007D72F60200002868267D72F70200008A06D8B65370E97F6AF2020000736868683F298172F80200007D72F9020000286842684368444B008572FA02000068468772FB0200005272FC020000284B014B028572FD020000684D894310000000000000F07F000000000000F07F72FE0200007472FF0200006268528868267D72000300008A0668B65370E97F6AF502000073683C4B016854684368444B008572010300006846877202030000527203030000284B014B024B02867204030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720503000074720603000062682B682C685B684368444B008572070300006846877208030000527209030000284B014B024B0286720A030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720B03000074720C030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720D0300007D720E0300002868267D720F0300008A06D8B65370E97F6AF202000073683C4B026825684368444B008572100300006846877211030000527212030000284B014B034B03867213030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721403000074721503000062682B682C687E4E75627562683C4B01687F683275628A0660715270E97F6828298172160300007D721703000028682B682C682D4B02682E4B0268267D72180300008A06D0715270E97F6838298172190300007D721A0300002868267D721B030000683C4B01683D6A16030000682B682C683E683F2981721C0300007D721D030000286842684368444B0085721E030000684687721F030000527220030000284B014B02857221030000684D894310000000000000F07F000000000000F07F72220300007472230300006268528868267D72240300008A06D0715270E97F6A1903000073683C4B016854684368444B008572250300006846877226030000527227030000284B014B024B02867228030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722903000074722A03000062682B682C685B684368444B0085722B030000684687722C03000052722D030000284B014B024B0286722E030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F030000747230030000627562685B4E75627368306828298172310300007D723203000028682B682C682D4B02682E4B0268267D72330300008A0660715270E97F6A160300007368306831298172340300007D72350300002868267D72360300008A06F02E5B70E97F6A31030000736868683F298172370300007D7238030000286842684368444B00857239030000684687723A03000052723B030000284B014B0285723C030000684D894310000000000000F07F000000000000F07F723D03000074723E0300006268528868267D723F0300008A06F0705270E97F6A3403000073683C4B016854684368444B008572400300006846877241030000527242030000284B014B024B02867243030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724403000074724503000062682B682C685B684368444B008572460300006846877247030000527248030000284B014B024B02867249030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724A03000074724B030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724C0300007D724D0300002868267D724E0300008A06F02E5B70E97F6A3103000073683C4B026825684368444B0085724F0300006846877250030000527251030000284B014B034B03867252030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725303000074725403000062682B682C687E4E75627562683C4B01687F683275628A0660A86070E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A7255030000298172560300007D7257030000286A8F010000683268267D7258030000288A06A04D5A70E97F6828298172590300007D725A03000028682B682C682D4B02682E4B0268267D725B03000068306A56030000683C4B02687F68222981725C0300007D725D0300002868254E68267D725E0300008A06A04D5A70E97F6A5903000073683C4B01580C0000005F7363616C655F7472616E73725F0300006880298172600300007D72610300002868267D7262030000288A0680F06170E97F6822298172630300007D72640300002868254E68267D72650300008A0688F56170E97F6828298172660300007D726703000028682B682C682D4B02682E4B0268267D726803000068306A55030000298172690300007D726A030000286A8F01000068312981726B0300007D726C0300002868267D726D030000288A0680C05A70E97F68282981726E0300007D726F03000028682B682C682D4B02682E4B0268267D72700300008A06B8C05A70E97F6838298172710300007D72720300002868267D7273030000683C4B01683D6A6E030000682B682C683E683F298172740300007D7275030000286842684368444B008572760300006846877277030000527278030000284B014B02857279030000684D894310000000000000F07F000000000000F07F727A03000074727B0300006268528868267D727C0300008A06B8C05A70E97F6A7103000073683C4B016854684368444B0085727D030000684687727E03000052727F030000284B014B024B02867280030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728103000074728203000062682B682C685B684368444B008572830300006846877284030000527285030000284B014B024B02867286030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7287030000747288030000627562685B4E75627368306828298172890300007D728A03000028682B682C682D4B02682E4B0268267D728B0300008A0680C05A70E97F6A6E03000073683068312981728C0300007D728D0300002868267D728E0300008A06602F6270E97F6A89030000736868683F2981728F0300007D7290030000286842684368444B008572910300006846877292030000527293030000284B014B02857294030000684D894310000000000000F07F000000000000F07F72950300007472960300006268528868267D72970300008A06A02D6270E97F6A8C03000073683C4B016854684368444B00857298030000684687729903000052729A030000284B014B024B0286729B030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729C03000074729D03000062682B682C685B684368444B0085729E030000684687729F0300005272A0030000284B014B024B028672A1030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A20300007472A3030000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172A40300007D72A50300002868267D72A60300008A06602F6270E97F6A8903000073683C4B026825684368444B008572A703000068468772A80300005272A9030000284B014B034B038672AA030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AB0300007472AC03000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0600545E70E97F6828298172AD0300007D72AE03000028682B682C682D4B02682E4B0268267D72AF0300008A06385B5E70E97F6838298172B00300007D72B10300002868267D72B2030000683C4B01683D6AAD030000682B682C683E683F298172B30300007D72B4030000286842684368444B008572B503000068468772B60300005272B7030000284B014B028572B8030000684D894310000000000000F07F000000000000F07F72B90300007472BA0300006268528868267D72BB0300008A06385B5E70E97F6AB003000073683C4B016854684368444B008572BC03000068468772BD0300005272BE030000284B014B024B028672BF030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C00300007472C103000062682B682C685B684368444B008572C203000068468772C30300005272C4030000284B014B024B028672C5030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C60300007472C7030000627562685B4E75627368306828298172C80300007D72C903000028682B682C682D4B02682E4B0268267D72CA0300008A0600545E70E97F6AAD0300007368306831298172CB0300007D72CC0300002868267D72CD0300008A0638545E70E97F6AC8030000736868683F298172CE0300007D72CF030000286842684368444B008572D003000068468772D10300005272D2030000284B014B028572D3030000684D894310000000000000F07F000000000000F07F72D40300007472D50300006268528868267D72D60300008A06D0515E70E97F6ACB03000073683C4B016854684368444B008572D703000068468772D80300005272D9030000284B014B024B028672DA030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DB0300007472DC03000062682B682C685B684368444B008572DD03000068468772DE0300005272DF030000284B014B024B028672E0030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E10300007472E2030000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E30300007D72E40300002868267D72E50300008A0638545E70E97F6AC803000073683C4B026825684368444B008572E603000068468772E70300005272E8030000284B014B034B038672E9030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EA0300007472EB03000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0680C75670E97F6828298172EC0300007D72ED03000028682B682C682D4B02682E4B0268267D72EE0300008A0648C75670E97F6838298172EF0300007D72F00300002868267D72F1030000683C4B01683D6AEC030000682B682C683E683F298172F20300007D72F3030000286842684368444B008572F403000068468772F50300005272F6030000284B014B028572F7030000684D894310000000000000F07F000000000000F07F72F80300007472F90300006268528868267D72FA0300008A0648C75670E97F6AEF03000073683C4B016854684368444B008572FB03000068468772FC0300005272FD030000284B014B024B028672FE030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72FF03000074720004000062682B682C685B684368444B008572010400006846877202040000527203040000284B014B024B02867204040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7205040000747206040000627562685B4E75627368306828298172070400007D720804000028682B682C682D4B02682E4B0268267D72090400008A0680C75670E97F6AEC03000073683068312981720A0400007D720B0400002868267D720C0400008A06A0C65670E97F6A07040000736868683F2981720D0400007D720E040000286842684368444B0085720F0400006846877210040000527211040000284B014B02857212040000684D894310000000000000F07F000000000000F07F72130400007472140400006268528868267D72150400008A06A8C45670E97F6A0A04000073683C4B016854684368444B008572160400006846877217040000527218040000284B014B024B02867219040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721A04000074721B04000062682B682C685B684368444B0085721C040000684687721D04000052721E040000284B014B024B0286721F040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7220040000747221040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172220400007D72230400002868267D72240400008A06A0C65670E97F6A0704000073683C4B026825684368444B008572250400006846877226040000527227040000284B014B034B03867228040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722904000074722A04000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06C82A6270E97F68282981722B0400007D722C04000028682B682C682D4B02682E4B0268267D722D04000068306A6B030000683C4B01687F68222981722E0400007D722F0400002868254E68267D7230040000288A06902A6270E97F6828298172310400007D723204000028682B682C682D4B02682E4B0268267D723304000068306A6B030000683C4B01687F6A2E04000075628A06C82A6270E97F6A2B0400008A06582A6270E97F6828298172340400007D723504000028682B682C682D4B02682E4B0268267D723604000068306A6B030000683C4B01687F6A2E040000756275683C4B016A5F0300006A60030000682B682C687E4E58020000005F747237040000470000000000000000473FB5555555555555867238040000756275628A0660186170E97F6828298172390400007D723A04000028682B682C682D4B02682E4B0268267D723B0400008A06701B6170E97F68382981723C0400007D723D0400002868267D723E040000683C4B01683D6A39040000682B682C683E683F2981723F0400007D7240040000286842684368444B008572410400006846877242040000527243040000284B014B02857244040000684D894310000000000000F07F000000000000F07F72450400007472460400006268528868267D72470400008A06701B6170E97F6A3C04000073683C4B016854684368444B00857248040000684687724904000052724A040000284B014B024B0286724B040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724C04000074724D04000062682B682C685B684368444B0085724E040000684687724F040000527250040000284B014B024B02867251040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7252040000747253040000627562685B4E75627368306828298172540400007D725504000028682B682C682D4B02682E4B0268267D72560400008A0660186170E97F6A390400007368306831298172570400007D72580400002868267D72590400008A06981F6170E97F6A54040000736868683F2981725A0400007D725B040000286842684368444B0085725C040000684687725D04000052725E040000284B014B0285725F040000684D894310000000000000F07F000000000000F07F72600400007472610400006268528868267D72620400008A0610CE5670E97F6A5704000073683C4B016854684368444B008572630400006846877264040000527265040000284B014B024B02867266040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726704000074726804000062682B682C685B684368444B00857269040000684687726A04000052726B040000284B014B024B0286726C040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726D04000074726E040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981726F0400007D72700400002868267D72710400008A06981F6170E97F6A5404000073683C4B026825684368444B008572720400006846877273040000527274040000284B014B034B03867275040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727604000074727704000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06580A5F70E97F6A8C010000298172780400007D7279040000286A8F0100006A6B03000068267D727A040000683C4B0168254E682B682C687E4E6A910100006A920100002981727B0400007D727C0400002868267D727D0400008A06580A5F70E97F6A7804000073683C4B01682B682C687E4E756275628A06902A6270E97F6A310400008A0678F25D70E97F68282981727E0400007D727F04000028682B682C682D4B02682E4B0268267D72800400008A0638F45D70E97F6838298172810400007D72820400002868267D7283040000683C4B01683D6A7E040000682B682C683E683F298172840400007D7285040000286842684368444B008572860400006846877287040000527288040000284B014B02857289040000684D894310000000000000F07F000000000000F07F728A04000074728B0400006268528868267D728C0400008A0638F45D70E97F6A8104000073683C4B016854684368444B0085728D040000684687728E04000052728F040000284B014B024B02867290040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729104000074729204000062682B682C685B684368444B008572930400006846877294040000527295040000284B014B024B02867296040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7297040000747298040000627562685B4E75627368306828298172990400007D729A04000028682B682C682D4B02682E4B0268267D729B0400008A0678F25D70E97F6A7E04000073683068312981729C0400007D729D0400002868267D729E0400008A0690F35D70E97F6A99040000736868683F2981729F0400007D72A0040000286842684368444B008572A104000068468772A20400005272A3040000284B014B028572A4040000684D894310000000000000F07F000000000000F07F72A50400007472A60400006268528868267D72A70400008A06A8F45D70E97F6A9C04000073683C4B016854684368444B008572A804000068468772A90400005272AA040000284B014B024B028672AB040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AC0400007472AD04000062682B682C685B684368444B008572AE04000068468772AF0400005272B0040000284B014B024B028672B1040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B20400007472B3040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B40400007D72B50400002868267D72B60400008A0690F35D70E97F6A9904000073683C4B026825684368444B008572B704000068468772B80400005272B9040000284B014B034B038672BA040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BB0400007472BC04000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06180C5F70E97F6A8C010000298172BD0400007D72BE040000286A8F0100006A6B03000068267D72BF040000683C4B0168254E682B682C687E4E6A910100006A92010000298172C00400007D72C10400002868267D72C20400008A06180C5F70E97F6ABD04000073683C4B01682B682C687E4E756275628A06A05D5E70E97F6828298172C30400007D72C404000028682B682C682D4B02682E4B0268267D72C50400008A06285F5E70E97F6838298172C60400007D72C70400002868267D72C8040000683C4B01683D6AC3040000682B682C683E683F298172C90400007D72CA040000286842684368444B008572CB04000068468772CC0400005272CD040000284B014B028572CE040000684D894310000000000000F07F000000000000F07F72CF0400007472D00400006268528868267D72D10400008A06285F5E70E97F6AC604000073683C4B016854684368444B008572D204000068468772D30400005272D4040000284B014B024B028672D5040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D60400007472D704000062682B682C685B684368444B008572D804000068468772D90400005272DA040000284B014B024B028672DB040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0400007472DD040000627562685B4E75627368306828298172DE0400007D72DF04000028682B682C682D4B02682E4B0268267D72E00400008A06A05D5E70E97F6AC30400007368306831298172E10400007D72E20400002868267D72E30400008A06C05C5E70E97F6ADE040000736868683F298172E40400007D72E5040000286842684368444B008572E604000068468772E70400005272E8040000284B014B028572E9040000684D894310000000000000F07F000000000000F07F72EA0400007472EB0400006268528868267D72EC0400008A06505C5E70E97F6AE104000073683C4B016854684368444B008572ED04000068468772EE0400005272EF040000284B014B024B028672F0040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F10400007472F204000062682B682C685B684368444B008572F304000068468772F40400005272F5040000284B014B024B028672F6040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F70400007472F8040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F90400007D72FA0400002868267D72FB0400008A06C05C5E70E97F6ADE04000073683C4B026825684368444B008572FC04000068468772FD0400005272FE040000284B014B034B038672FF040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720005000074720105000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06582A6270E97F6A340400008A0668CD5F70E97F6828298172020500007D720305000028682B682C682D4B02682E4B0268267D72040500008A0660CF5F70E97F6838298172050500007D72060500002868267D7207050000683C4B01683D6A02050000682B682C683E683F298172080500007D7209050000286842684368444B0085720A050000684687720B05000052720C050000284B014B0285720D050000684D894310000000000000F07F000000000000F07F720E05000074720F0500006268528868267D72100500008A0660CF5F70E97F6A0505000073683C4B016854684368444B008572110500006846877212050000527213050000284B014B024B02867214050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721505000074721605000062682B682C685B684368444B008572170500006846877218050000527219050000284B014B024B0286721A050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721B05000074721C050000627562685B4E756273683068282981721D0500007D721E05000028682B682C682D4B02682E4B0268267D721F0500008A0668CD5F70E97F6A020500007368306831298172200500007D72210500002868267D72220500008A0688156170E97F6A1D050000736868683F298172230500007D7224050000286842684368444B008572250500006846877226050000527227050000284B014B02857228050000684D894310000000000000F07F000000000000F07F722905000074722A0500006268528868267D722B0500008A0620136170E97F6A2005000073683C4B016854684368444B0085722C050000684687722D05000052722E050000284B014B024B0286722F050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723005000074723105000062682B682C685B684368444B008572320500006846877233050000527234050000284B014B024B02867235050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7236050000747237050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172380500007D72390500002868267D723A0500008A0688156170E97F6A1D05000073683C4B026825684368444B0085723B050000684687723C05000052723D050000284B014B034B0386723E050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723F05000074724005000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06702B6070E97F6A8C010000298172410500007D7242050000286A8F0100006A92010000298172430500007D72440500002868267D72450500008A06702B6070E97F6A4105000073683C4B01682B682C687E4E756268267D7246050000683C4B0168254E682B682C687E4E6A910100006A6B03000075628A06E03B5D70E97F6828298172470500007D724805000028682B682C682D4B02682E4B0268267D72490500008A06F83C5D70E97F68382981724A0500007D724B0500002868267D724C050000683C4B01683D6A47050000682B682C683E683F2981724D0500007D724E050000286842684368444B0085724F0500006846877250050000527251050000284B014B02857252050000684D894310000000000000F07F000000000000F07F72530500007472540500006268528868267D72550500008A06F83C5D70E97F6A4A05000073683C4B016854684368444B008572560500006846877257050000527258050000284B014B024B02867259050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725A05000074725B05000062682B682C685B684368444B0085725C050000684687725D05000052725E050000284B014B024B0286725F050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7260050000747261050000627562685B4E75627368306828298172620500007D726305000028682B682C682D4B02682E4B0268267D72640500008A06E03B5D70E97F6A470500007368306831298172650500007D72660500002868267D72670500008A0630365D70E97F6A62050000736868683F298172680500007D7269050000286842684368444B0085726A050000684687726B05000052726C050000284B014B0285726D050000684D894310000000000000F07F000000000000F07F726E05000074726F0500006268528868267D72700500008A06003B5D70E97F6A6505000073683C4B016854684368444B008572710500006846877272050000527273050000284B014B024B02867274050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727505000074727605000062682B682C685B684368444B008572770500006846877278050000527279050000284B014B024B0286727A050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727B05000074727C050000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727D0500007D727E0500002868267D727F0500008A0630365D70E97F6A6205000073683C4B026825684368444B008572800500006846877281050000527282050000284B014B034B03867283050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728405000074728505000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0678F95D70E97F6828298172860500007D728705000028682B682C682D4B02682E4B0268267D72880500008A0698F85D70E97F6838298172890500007D728A0500002868267D728B050000683C4B01683D6A86050000682B682C683E683F2981728C0500007D728D050000286842684368444B0085728E050000684687728F050000527290050000284B014B02857291050000684D894310000000000000F07F000000000000F07F72920500007472930500006268528868267D72940500008A0698F85D70E97F6A8905000073683C4B016854684368444B008572950500006846877296050000527297050000284B014B024B02867298050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729905000074729A05000062682B682C685B684368444B0085729B050000684687729C05000052729D050000284B014B024B0286729E050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729F0500007472A0050000627562685B4E75627368306828298172A10500007D72A205000028682B682C682D4B02682E4B0268267D72A30500008A0678F95D70E97F6A860500007368306831298172A40500007D72A50500002868267D72A60500008A0660F15D70E97F6AA1050000736868683F298172A70500007D72A8050000286842684368444B008572A905000068468772AA0500005272AB050000284B014B028572AC050000684D894310000000000000F07F000000000000F07F72AD0500007472AE0500006268528868267D72AF0500008A06B8F05D70E97F6AA405000073683C4B016854684368444B008572B005000068468772B10500005272B2050000284B014B024B028672B3050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B40500007472B505000062682B682C685B684368444B008572B605000068468772B70500005272B8050000284B014B024B028672B9050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0500007472BB050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172BC0500007D72BD0500002868267D72BE0500008A0660F15D70E97F6AA105000073683C4B026825684368444B008572BF05000068468772C00500005272C1050000284B014B034B038672C2050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C30500007472C405000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0660315D70E97F6828298172C50500007D72C605000028682B682C682D4B02682E4B0268267D72C705000068306828298172C80500007D72C905000028682B682C682D4B02682E4B0268267D72CA0500008A0660315D70E97F6AC50500007368306831298172CB0500007D72CC0500002868267D72CD0500008A0600345D70E97F6AC8050000736868683F298172CE0500007D72CF050000286842684368444B008572D005000068468772D10500005272D2050000284B014B028572D3050000684D894310000000000000F07F000000000000F07F72D40500007472D50500006268528868267D72D60500008A0658335D70E97F6ACB05000073683C4B016854684368444B008572D705000068468772D80500005272D9050000284B014B024B028672DA050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DB0500007472DC05000062682B682C685B684368444B008572DD05000068468772DE0500005272DF050000284B014B024B028672E0050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E10500007472E2050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E30500007D72E40500002868267D72E50500008A0600345D70E97F6AC805000073683C4B026825684368444B008572E605000068468772E70500005272E8050000284B014B034B038672E9050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EA0500007472EB05000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06E0FB5D70E97F6828298172EC0500007D72ED05000028682B682C682D4B02682E4B0268267D72EE05000068306828298172EF0500007D72F005000028682B682C682D4B02682E4B0268267D72F10500008A06E0FB5D70E97F6AEC0500007368306831298172F20500007D72F30500002868267D72F40500008A06D0FF5D70E97F6AEF050000736868683F298172F50500007D72F6050000286842684368444B008572F705000068468772F80500005272F9050000284B014B028572FA050000684D894310000000000000F07F000000000000F07F72FB0500007472FC0500006268528868267D72FD0500008A06F0F75D70E97F6AF205000073683C4B016854684368444B008572FE05000068468772FF050000527200060000284B014B024B02867201060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720206000074720306000062682B682C685B684368444B008572040600006846877205060000527206060000284B014B024B02867207060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7208060000747209060000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720A0600007D720B0600002868267D720C0600008A06D0FF5D70E97F6AEF05000073683C4B026825684368444B0085720D060000684687720E06000052720F060000284B014B034B03867210060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721106000074721206000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0678C95670E97F6828298172130600007D721406000028682B682C682D4B02682E4B0268267D721506000068306828298172160600007D721706000028682B682C682D4B02682E4B0268267D72180600008A0678C95670E97F6A130600007368306831298172190600007D721A0600002868267D721B0600008A06F0C75670E97F6A16060000736868683F2981721C0600007D721D060000286842684368444B0085721E060000684687721F060000527220060000284B014B02857221060000684D894310000000000000F07F000000000000F07F72220600007472230600006268528868267D72240600008A06D0C85670E97F6A1906000073683C4B016854684368444B008572250600006846877226060000527227060000284B014B024B02867228060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722906000074722A06000062682B682C685B684368444B0085722B060000684687722C06000052722D060000284B014B024B0286722E060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F060000747230060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172310600007D72320600002868267D72330600008A06F0C75670E97F6A1606000073683C4B026825684368444B008572340600006846877235060000527236060000284B014B034B03867237060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723806000074723906000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06A8FB5D70E97F68282981723A0600007D723B06000028682B682C682D4B02682E4B0268267D723C060000683068282981723D0600007D723E06000028682B682C682D4B02682E4B0268267D723F0600008A06A8FB5D70E97F6A3A0600007368306831298172400600007D72410600002868267D72420600008A06B8FE5D70E97F6A3D060000736868683F298172430600007D7244060000286842684368444B008572450600006846877246060000527247060000284B014B02857248060000684D894310000000000000F07F000000000000F07F724906000074724A0600006268528868267D724B0600008A06A0FD5D70E97F6A4006000073683C4B016854684368444B0085724C060000684687724D06000052724E060000284B014B024B0286724F060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725006000074725106000062682B682C685B684368444B008572520600006846877253060000527254060000284B014B024B02867255060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7256060000747257060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172580600007D72590600002868267D725A0600008A06B8FE5D70E97F6A3D06000073683C4B026825684368444B0085725B060000684687725C06000052725D060000284B014B034B0386725E060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725F06000074726006000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06983F5D70E97F6828298172610600007D726206000028682B682C682D4B02682E4B0268267D726306000068306828298172640600007D726506000028682B682C682D4B02682E4B0268267D72660600008A06983F5D70E97F6A610600007368306831298172670600007D72680600002868267D72690600008A0688355D70E97F6A64060000736868683F2981726A0600007D726B060000286842684368444B0085726C060000684687726D06000052726E060000284B014B0285726F060000684D894310000000000000F07F000000000000F07F72700600007472710600006268528868267D72720600008A06A8345D70E97F6A6706000073683C4B016854684368444B008572730600006846877274060000527275060000284B014B024B02867276060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727706000074727806000062682B682C685B684368444B00857279060000684687727A06000052727B060000284B014B024B0286727C060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727D06000074727E060000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727F0600007D72800600002868267D72810600008A0688355D70E97F6A6406000073683C4B026825684368444B008572820600006846877283060000527284060000284B014B034B03867285060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728606000074728706000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06282FBB73E97F6A690300008A06302D6070E97F6A8C010000298172880600007D7289060000286A8F0100006A6B03000068267D728A060000683C4B0168254E682B682C687E4E6A910100006A920100002981728B0600007D728C0600002868267D728D0600008A06302D6070E97F6A8806000073683C4B01682B682C687E4E756275628A0648505E70E97F68282981728E0600007D728F06000028682B682C682D4B02682E4B0268267D729006000068306828298172910600007D729206000028682B682C682D4B02682E4B0268267D72930600008A0648505E70E97F6A8E0600007368306831298172940600007D72950600002868267D72960600008A06D8565E70E97F6A91060000736868683F298172970600007D7298060000286842684368444B00857299060000684687729A06000052729B060000284B014B0285729C060000684D894310000000000000F07F000000000000F07F729D06000074729E0600006268528868267D729F0600008A06E0545E70E97F6A9406000073683C4B016854684368444B008572A006000068468772A10600005272A2060000284B014B024B028672A3060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A40600007472A506000062682B682C685B684368444B008572A606000068468772A70600005272A8060000284B014B024B028672A9060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AA0600007472AB060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172AC0600007D72AD0600002868267D72AE0600008A06D8565E70E97F6A9106000073683C4B026825684368444B008572AF06000068468772B00600005272B1060000284B014B034B038672B2060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B30600007472B406000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06A02DBB73E97F6828298172B50600007D72B606000028682B682C682D4B02682E4B0268267D72B70600008A06102EBB73E97F6828298172B80600007D72B906000028682B682C682D4B02682E4B0268267D72BA060000288A06B82EBB73E97F6A55030000298172BB0600007D72BC060000286A8F0100006AB806000068267D72BD060000683C4B0258070000005F616666696E6572BE0600004E682B682C6A910100006A6B03000075628A06282FBB73E97F6A69030000756830636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A72BF060000298172C00600007D72C106000028682E4B0258050000006368696C6472C20600006A8C010000298172C30600007D72C4060000286A8F0100006A92010000298172C50600007D72C60600002868267D72C70600008A06D8A66070E97F6AC306000073683C4B01682B682C687E4E756268267D72C80600008A06C02CBB73E97F6AC006000073683C4B0168254E682B682C687E4E6A910100006A92010000298172C90600007D72CA0600002868267D72CB0600008A06D8A66070E97F6AC306000073683C4B01682B682C687E4E756275625807000000706172656E747372CC0600007D72CD060000288A06102EBB73E97F6AB80600008A06C82ABB73E97F6838298172CE0600007D72CF0600002868267D72D00600008A06582ABB73E97F636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A72D1060000298172D20600007D72D30600002868267D72D40600008A06A02DBB73E97F6AB50600007358060000005F626F78696E72D50600006ACE060000683C4B026825684368444B008572D606000068468772D70600005272D8060000284B014B034B038672D9060000684D894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F72DA0600007472DB06000062682B682C687E4E756273683C4B02683D6AC0060000682B682C683E683F298172DC0600007D72DD060000286842684368444B008572DE06000068468772DF0600005272E0060000284B014B028572E1060000684D894310000000000000F07F000000000000F07F72E20600007472E30600006268528868267D72E40600008A06C82ABB73E97F6ACE06000073683C4B026854684368444B008572E506000068468772E60600005272E7060000284B014B024B028672E8060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E90600007472EA06000062682B682C685B684368444B008572EB06000068468772EC0600005272ED060000284B014B024B028672EE060000684D894320999999999999A9BF0000000000000000CCCCCCCCCCCCF03F33333333B39A2C4172EF0600007472F0060000627562685B684368444B008572F106000068468772F20600005272F3060000284B014B024B028672F4060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F50600007472F606000062756275682D4B027562683C4B02687F6AB506000075627368306AD2060000683C4B02687F6A6B03000075628A06C0256070E97F6828298172F70600007D72F806000028682B682C682D4B02682E4B0268267D72F906000068306828298172FA0600007D72FB06000028682B682C682D4B02682E4B0268267D72FC0600008A06C0256070E97F6AF70600007368306831298172FD0600007D72FE0600002868267D72FF0600008A0680206070E97F6AFA060000736868683F298172000700007D7201070000286842684368444B008572020700006846877203070000527204070000284B014B02857205070000684D894310000000000000F07F000000000000F07F72060700007472070700006268528868267D72080700008A06B8206070E97F6AFD06000073683C4B016854684368444B00857209070000684687720A07000052720B070000284B014B024B0286720C070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720D07000074720E07000062682B682C685B684368444B0085720F0700006846877210070000527211070000284B014B024B02867212070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7213070000747214070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172150700007D72160700002868267D72170700008A0680206070E97F6AFA06000073683C4B026825684368444B00857218070000684687721907000052721A070000284B014B034B0386721B070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721C07000074721D07000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06C0C55670E97F68282981721E0700007D721F07000028682B682C682D4B02682E4B0268267D722007000068306828298172210700007D722207000028682B682C682D4B02682E4B0268267D72230700008A06C0C55670E97F6A1E0700007368306831298172240700007D72250700002868267D72260700008A06F85C5E70E97F6A21070000736868683F298172270700007D7228070000286842684368444B00857229070000684687722A07000052722B070000284B014B0285722C070000684D894310000000000000F07F000000000000F07F722D07000074722E0700006268528868267D722F0700008A06985F5E70E97F6A2407000073683C4B016854684368444B008572300700006846877231070000527232070000284B014B024B02867233070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723407000074723507000062682B682C685B684368444B008572360700006846877237070000527238070000284B014B024B02867239070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723A07000074723B070000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723C0700007D723D0700002868267D723E0700008A06F85C5E70E97F6A2107000073683C4B026825684368444B0085723F0700006846877240070000527241070000284B014B034B03867242070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724307000074724407000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06B82EBB73E97F6ABB0600008A0628C15A70E97F6828298172450700007D724607000028682B682C682D4B02682E4B0268267D724707000068306828298172480700007D724907000028682B682C682D4B02682E4B0268267D724A0700008A0628C15A70E97F6A4507000073683068312981724B0700007D724C0700002868267D724D0700008A0638C45A70E97F6A48070000736868683F2981724E0700007D724F070000286842684368444B008572500700006846877251070000527252070000284B014B02857253070000684D894310000000000000F07F000000000000F07F72540700007472550700006268528868267D72560700008A06B0596170E97F6A4B07000073683C4B016854684368444B008572570700006846877258070000527259070000284B014B024B0286725A070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725B07000074725C07000062682B682C685B684368444B0085725D070000684687725E07000052725F070000284B014B024B02867260070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7261070000747262070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172630700007D72640700002868267D72650700008A0638C45A70E97F6A4807000073683C4B026825684368444B008572660700006846877267070000527268070000284B014B034B03867269070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726A07000074726B07000062682B682C687E4E75627562683C4B01687F6A6B030000756275686868382981726C0700007D726D0700002868267D726E0700008A06382BBB73E97F6A6B03000073683C4B01683D68312981726F0700007D72700700002868267D7271070000288A066028BB73E97F6A6C0700008A0608C25F70E97F6838298172720700007D72730700002868267D72740700008A0620CA5F70E97F683273683C4B01683D6A6F070000682B682C683E683F298172750700007D7276070000286842684368444B008572770700006846877278070000527279070000284B014B0285727A070000684D894310000000000000F07F000000000000F07F727B07000074727C0700006268528868267D727D0700008A0608C25F70E97F6A7207000073683C4B006854684368444B0085727E070000684687727F070000527280070000284B014B024B02867281070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F728207000074728307000062682B682C685B684368444B008572840700006846877285070000527286070000284B014B024B02867287070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F7288070000747289070000627562685B4E756275686868382981728A0700007D728B0700002868267D728C0700008A066021BB73E97F6A6F07000073683C4B01683D6A60030000682B682C683E683F2981728D0700007D728E070000286842684368444B0085728F0700006846877290070000527291070000284B014B02857292070000684D894310000000000000F07F000000000000F07F72930700007472940700006268528868267D72950700008A06980FBA73E97F6A8A07000073683C4B016854684368444B008572960700006846877297070000527298070000284B014B024B02867299070000684D894320000000000000000000000000000000009A999999999919403333333333331340729A07000074729B07000062682B682C685B684368444B0085729C070000684687729D07000052729E070000284B014B024B0286729F070000684D894320000000000000000000000000000000009A99999999991940333333333333134072A00700007472A1070000627562685B4E7562683C4B0168254E682B682C687E4E7562682B682C683E683F298172A20700007D72A3070000286842684368444B008572A407000068468772A50700005272A6070000284B014B028572A7070000684D894310000000000000F07F000000000000F07F72A80700007472A90700006268528868267D72AA0700008A066028BB73E97F6A6C07000073683C4B006854684368444B008572AB07000068468772AC0700005272AD070000284B014B024B028672AE070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72AF0700007472B007000062682B682C685B684368444B008572B107000068468772B20700005272B3070000284B014B024B028672B4070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72B50700007472B6070000627562685B4E7562683C4B0168254E682B682C687E4E756268267D72B7070000288A06A0FD6170E97F6828298172B80700007D72B907000028682B682C682D4B02682E4B0268267D72BA07000068306A69030000683C4B02687F6822298172BB0700007D72BC0700002868254E68267D72BD0700008A06A0FD6170E97F6AB807000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672BE070000756275628A06E0C46170E97F6828298172BF0700007D72C007000028682B682C682D4B02682E4B0268267D72C107000068306A69030000683C4B02687F6822298172C20700007D72C30700002868254E68267D72C40700008A06E0C46170E97F6ABF07000073683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B008672C5070000756275628A0650C55A70E97F6828298172C60700007D72C707000028682B682C682D4B02682E4B0268267D72C807000068306A69030000683C4B02687F6822298172C90700007D72CA0700002868254E68267D72CB0700008A0650C55A70E97F6AC607000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B008672CC070000756275628A06B8276070E97F6828298172CD0700007D72CE07000028682B682C682D4B02682E4B0268267D72CF07000068306A69030000683C4B02687F6822298172D00700007D72D10700002868254E68267D72D20700008A06B8276070E97F6ACD07000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B008672D3070000756275628A06E8C95A70E97F6828298172D40700007D72D507000028682B682C682D4B02682E4B0268267D72D607000068306A69030000683C4B02687F6822298172D70700007D72D80700002868254E68267D72D90700008A06E8C95A70E97F6AD407000073683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB33333333333344B008672DA070000756275628A0688F56170E97F6A660300008A06B82E6070E97F6828298172DB0700007D72DC07000028682B682C682D4B02682E4B0268267D72DD07000068306A69030000683C4B02687F6822298172DE0700007D72DF0700002868254E68267D72E00700008A06B82E6070E97F6ADB07000073683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB33333333333344B008672E1070000756275628A06F8CC6170E97F6828298172E20700007D72E307000028682B682C682D4B02682E4B0268267D72E407000068306A69030000683C4B02687F6822298172E50700007D72E60700002868254E68267D72E70700008A06F8CC6170E97F6AE207000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672E80700007562756275683C4B026ABE0600004E682B682C6A910100006AB80600007562683C4B02687F6A63030000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B008672E907000075628A0680CE6170E97F6AC20700008A06E8395B70E97F6822298172EA0700007D72EB0700002868254E68267D72EC070000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB33333333333348672ED07000075628A0648405A70E97F68238A0660485A70E97F6822298172EE0700007D72EF0700002868254E68267D72F00700008A06204A5A70E97F6828298172F10700007D72F207000028682B682C682D4B02682E4B0268267D72F307000068306A55030000298172F40700007D72F5070000286A8F0100006828298172F60700007D72F707000028682B682C682D4B02682E4B0268267D72F8070000288A0660AF6070E97F6AF40700008A0660A86070E97F6A560300007568306ABF060000298172F90700007D72FA07000028682E4B026AC20600006A8C010000298172FB0700007D72FC070000286A8F0100006A92010000298172FD0700007D72FE0700002868267D72FF0700008A06C82A5B70E97F6AFB07000073683C4B01682B682C687E4E756268267D72000800008A0658CA5F70E97F6AF907000073683C4B006825684368444B008572010800006846877202080000527203080000284B014B034B03867204080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720508000074720608000062682B682C687E4E6A910100006A92010000298172070800007D72080800002868267D72090800008A06C82A5B70E97F6AFB07000073683C4B01682B682C687E4E756275626ACC0600007D720A080000288A0610C75F70E97F68382981720B0800007D720C0800002868267D720D0800008A06D0CF5F70E97F6AD10600002981720E0800007D720F0800002868267D72100800008A0678A96070E97F6828298172110800007D721208000028682B682C682D4B02682E4B0268267D72130800008A0640A26070E97F6AF60700007368306A0E080000683C4B02687F68327562736AD50600006A0B080000683C4B026825684368444B008572140800006846877215080000527216080000284B014B034B03867217080000684D894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F721808000074721908000062682B682C687E4E756273683C4B02683D6AF9070000682B682C683E683F2981721A0800007D721B080000286842684368444B0085721C080000684687721D08000052721E080000284B014B0285721F080000684D894310000000000000F07F000000000000F07F72200800007472210800006268528868267D72220800008A0610C75F70E97F6A0B08000073683C4B026854684368444B008572230800006846877224080000527225080000284B014B024B02867226080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722708000074722808000062682B682C685B684368444B00857229080000684687722A08000052722B080000284B014B024B0286722C080000684D89432000000000000022C000000000000000000000000000A06740000000C0CA473B41722D08000074722E080000627562685B684368444B0085722F0800006846877230080000527231080000284B014B024B02867232080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72330800007472340800006275628A0640A26070E97F6AF607000075682D4B027562683C4B02687F6A11080000756268267D7235080000288A06E0645C70E97F6828298172360800007D723708000028682B682C682D4B02682E4B0268267D723808000068306AF4070000683C4B02687F6822298172390800007D723A0800002868254E68267D723B0800008A06E0645C70E97F6A3608000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986723C080000756275628A06204A5A70E97F6AF10700008A0680275B70E97F68282981723D0800007D723E08000028682B682C682D4B02682E4B0268267D723F08000068306AF4070000683C4B02687F6822298172400800007D72410800002868254E68267D72420800008A0680275B70E97F6A3D08000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB3333333333334867243080000756275628A06B0295C70E97F6828298172440800007D724508000028682B682C682D4B02682E4B0268267D724608000068306AF4070000683C4B02687F6822298172470800007D72480800002868254E68267D72490800008A06B0295C70E97F6A4408000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E3986724A080000756275628A0648205B70E97F68282981724B0800007D724C08000028682B682C682D4B02682E4B0268267D724D08000068306AF4070000683C4B02687F68222981724E0800007D724F0800002868254E68267D72500800008A0648205B70E97F6A4B08000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E39867251080000756275628A0678425A70E97F6828298172520800007D725308000028682B682C682D4B02682E4B0268267D725408000068306AF4070000683C4B02687F6822298172550800007D72560800002868254E68267D72570800008A0678425A70E97F6A5208000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB3333333333334867258080000756275628A06D0285B70E97F6828298172590800007D725A08000028682B682C682D4B02682E4B0268267D725B08000068306AF4070000683C4B02687F68222981725C0800007D725D0800002868254E68267D725E0800008A06D0285B70E97F6A5908000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB333333333333486725F080000756275628A06704B5A70E97F6828298172600800007D726108000028682B682C682D4B02682E4B0268267D726208000068306AF4070000683C4B02687F6822298172630800007D72640800002868254E68267D72650800008A06704B5A70E97F6A6008000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB33333333333348672660800007562756275683C4B026ABE0600004E682B682C6A9101000068327562683C4B02687F6AEE070000756273683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986726708000075628A0680206270E97F6822298172680800007D72690800002868254E68267D726A080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E3986726B08000075628A06B8CE6170E97F6AE50700008A06C8CA5A70E97F6AD70700008A0660285B70E97F6A5C0800008A0650155C70E97F68222981726C0800007D726D0800002868254E68267D726E080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E3986726F08000075628A0678C95A70E97F6AC90700008A06980FBA73E97F6A8A0700008A06B8375D70E97F6A2E0400008A06A8645870E97F6A550800008A0640226070E97F6AD00700008A0698485A70E97F6822298172700800007D72710800002868254E68267D72720800008A06D84D5A70E97F6828298172730800007D727408000028682B682C682D4B02682E4B0268267D727508000068306A56030000683C4B02687F6A70080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B0086727608000075628A06B8605D70E97F6822298172770800007D72780800002868254E68267D72790800008A0698615D70E97F68282981727A0800007D727B08000028682B682C682D4B02682E4B0268267D727C08000068306A56030000683C4B02687F6A77080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B0086727D08000075628A06E01B6170E97F68222981727E0800007D727F0800002868254E68267D7280080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB333333333333486728108000075628A06B0395B70E97F6822298172820800007D72830800002868254E68267D7284080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB333333333333486728508000075628A06D04F5A70E97F6A4E0800008A06F0675C70E97F6A470800008A06283F5B70E97F6822298172860800007D72870800002868254E68267D7288080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986728908000075628A0668665D70E97F68222981728A0800007D728B0800002868254E68267D728C0800008A06D8665D70E97F68282981728D0800007D728E08000028682B682C682D4B02682E4B0268267D728F08000068306A56030000683C4B02687F6A8A080000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B0086729008000075628A0640695D70E97F6822298172910800007D72920800002868254E68267D72930800008A06A8645D70E97F6828298172940800007D729508000028682B682C682D4B02682E4B0268267D729608000068306A56030000683C4B02687F6A91080000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB33333333333344B0086729708000075628A0660F86170E97F6822298172980800007D72990800002868254E68267D729A080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986729B08000075628A0668F66170E97F6ABB0700008A0670245C70E97F68222981729C0800007D729D0800002868254E68267D729E0800008A0618255C70E97F68282981729F0800007D72A008000028682B682C682D4B02682E4B0268267D72A108000068306A56030000683C4B02687F6A9C080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672A208000075628A06284F5A70E97F6A630800008A06D0415A70E97F6A5C0300008A06986F5D70E97F6822298172A30800007D72A40800002868254E68267D72A50800008A06D86D5D70E97F6828298172A60800007D72A708000028682B682C682D4B02682E4B0268267D72A808000068306A56030000683C4B02687F6AA3080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672A908000075628A0638245C70E97F6822298172AA0800007D72AB0800002868254E68267D72AC0800008A06C8235C70E97F6828298172AD0800007D72AE08000028682B682C682D4B02682E4B0268267D72AF08000068306A56030000683C4B02687F6AAA080000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B008672B008000075628A06B81E6170E97F6822298172B10800007D72B20800002868254E68267D72B3080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB33333333333348672B408000075628A06A0265B70E97F6A400800008A0678296070E97F6ADE0700008A06B86E5C70E97F6A3908000075683C4B026825684368444B008572B508000068468772B60800005272B7080000284B014B034B038672B8080000684D89434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F72B90800007472BA08000062682B682C687E4E7562682B682C687E4E6A3704000047BFB33333333333344B008672BB080000756275628A0698615D70E97F6A7A0800008A06D84D5A70E97F6A730800008A06D86D5D70E97F6AA60800008A06A8645D70E97F6A940800008A06D8665D70E97F6A8D0800008A06C8235C70E97F6AAD0800008A0618255C70E97F6A9F08000075683C4B026ABE0600004E682B682C6A910100006AF607000075628A0630DD5470E97F6828298172BC0800007D72BD08000028682B682C682D4B02682E4B0268267D72BE0800008A06A0DD5470E97F6838298172BF0800007D72C00800002868267D72C1080000683C4B01683D6ABC080000682B682C683E683F298172C20800007D72C3080000286842684368444B008572C408000068468772C50800005272C6080000284B014B028572C7080000684D894310000000000000F07F000000000000F07F72C80800007472C90800006268528868267D72CA0800008A06A0DD5470E97F6ABF08000073683C4B016854684368444B008572CB08000068468772CC0800005272CD080000284B014B024B028672CE080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CF0800007472D008000062682B682C685B684368444B008572D108000068468772D20800005272D3080000284B014B024B028672D4080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D50800007472D6080000627562685B4E75627368306828298172D70800007D72D808000028682B682C682D4B02682E4B0268267D72D90800008A0630DD5470E97F6ABC0800007368306831298172DA0800007D72DB0800002868267D72DC0800008A06C0DC5470E97F6AD7080000736868683F298172DD0800007D72DE080000286842684368444B008572DF08000068468772E00800005272E1080000284B014B028572E2080000684D894310000000000000F07F000000000000F07F72E30800007472E40800006268528868267D72E50800008A0650DC5470E97F6ADA08000073683C4B016854684368444B008572E608000068468772E70800005272E8080000284B014B024B028672E9080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0800007472EB08000062682B682C685B684368444B008572EC08000068468772ED0800005272EE080000284B014B024B028672EF080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00800007472F1080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F20800007D72F30800002868267D72F40800008A06C0DC5470E97F6AD708000073683C4B026825684368444B008572F508000068468772F60800005272F7080000284B014B034B038672F8080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F90800007472FA08000062682B682C687E4E75627562683C4B01687F683275628A0698315370E97F6828298172FB0800007D72FC08000028682B682C682D4B02682E4B0268267D72FD0800008A0608325370E97F6838298172FE0800007D72FF0800002868267D7200090000683C4B01683D6AFB080000682B682C683E683F298172010900007D7202090000286842684368444B008572030900006846877204090000527205090000284B014B02857206090000684D894310000000000000F07F000000000000F07F72070900007472080900006268528868267D72090900008A0608325370E97F6AFE08000073683C4B016854684368444B0085720A090000684687720B09000052720C090000284B014B024B0286720D090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720E09000074720F09000062682B682C685B684368444B008572100900006846877211090000527212090000284B014B024B02867213090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7214090000747215090000627562685B4E75627368306828298172160900007D721709000028682B682C682D4B02682E4B0268267D72180900008A0698315370E97F6AFB0800007368306831298172190900007D721A0900002868267D721B0900008A0628315370E97F6A16090000736868683F2981721C0900007D721D090000286842684368444B0085721E090000684687721F090000527220090000284B014B02857221090000684D894310000000000000F07F000000000000F07F72220900007472230900006268528868267D72240900008A06B8305370E97F6A1909000073683C4B016854684368444B008572250900006846877226090000527227090000284B014B024B02867228090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722909000074722A09000062682B682C685B684368444B0085722B090000684687722C09000052722D090000284B014B024B0286722E090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F090000747230090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172310900007D72320900002868267D72330900008A0628315370E97F6A1609000073683C4B026825684368444B008572340900006846877235090000527236090000284B014B034B03867237090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723809000074723909000062682B682C687E4E75627562683C4B01687F683275628A06707B5970E97F6A8C0100002981723A0900007D723B090000286A8F0100006A920100002981723C0900007D723D0900002868267D723E0900008A06707B5970E97F6A3A09000073683C4B01682B682C687E4E756268267D723F090000683C4B0168254E682B682C687E4E6A91010000683275628A06E06B5870E97F6828298172400900007D724109000028682B682C682D4B02682E4B0268267D72420900008A06104E5A70E97F6838298172430900007D72440900002868267D7245090000683C4B01683D6A40090000682B682C683E683F298172460900007D7247090000286842684368444B00857248090000684687724909000052724A090000284B014B0285724B090000684D894310000000000000F07F000000000000F07F724C09000074724D0900006268528868267D724E0900008A06104E5A70E97F6A4309000073683C4B016854684368444B0085724F0900006846877250090000527251090000284B014B024B02867252090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725309000074725409000062682B682C685B684368444B008572550900006846877256090000527257090000284B014B024B02867258090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725909000074725A090000627562685B4E756273683068282981725B0900007D725C09000028682B682C682D4B02682E4B0268267D725D0900008A06E06B5870E97F6A4009000073683068312981725E0900007D725F0900002868267D72600900008A06F0C05970E97F6A5B090000736868683F298172610900007D7262090000286842684368444B008572630900006846877264090000527265090000284B014B02857266090000684D894310000000000000F07F000000000000F07F72670900007472680900006268528868267D72690900008A06D0CF5970E97F6A5E09000073683C4B016854684368444B0085726A090000684687726B09000052726C090000284B014B024B0286726D090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726E09000074726F09000062682B682C685B684368444B008572700900006846877271090000527272090000284B014B024B02867273090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7274090000747275090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172760900007D72770900002868267D72780900008A06F0C05970E97F6A5B09000073683C4B026825684368444B00857279090000684687727A09000052727B090000284B014B034B0386727C090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727D09000074727E09000062682B682C687E4E75627562683C4B01687F683275628A0650555470E97F68282981727F0900007D728009000028682B682C682D4B02682E4B0268267D72810900008A06C0555470E97F6838298172820900007D72830900002868267D7284090000683C4B01683D6A7F090000682B682C683E683F298172850900007D7286090000286842684368444B008572870900006846877288090000527289090000284B014B0285728A090000684D894310000000000000F07F000000000000F07F728B09000074728C0900006268528868267D728D0900008A06C0555470E97F6A8209000073683C4B016854684368444B0085728E090000684687728F090000527290090000284B014B024B02867291090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729209000074729309000062682B682C685B684368444B008572940900006846877295090000527296090000284B014B024B02867297090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7298090000747299090000627562685B4E756273683068282981729A0900007D729B09000028682B682C682D4B02682E4B0268267D729C0900008A0650555470E97F6A7F09000073683068312981729D0900007D729E0900002868267D729F0900008A06E0545470E97F6A9A090000736868683F298172A00900007D72A1090000286842684368444B008572A209000068468772A30900005272A4090000284B014B028572A5090000684D894310000000000000F07F000000000000F07F72A60900007472A70900006268528868267D72A80900008A0670545470E97F6A9D09000073683C4B016854684368444B008572A909000068468772AA0900005272AB090000284B014B024B028672AC090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AD0900007472AE09000062682B682C685B684368444B008572AF09000068468772B00900005272B1090000284B014B024B028672B2090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B30900007472B4090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B50900007D72B60900002868267D72B70900008A06E0545470E97F6A9A09000073683C4B026825684368444B008572B809000068468772B90900005272BA090000284B014B034B038672BB090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BC0900007472BD09000062682B682C687E4E75627562683C4B01687F683275628A0640595570E97F6828298172BE0900007D72BF09000028682B682C682D4B02682E4B0268267D72C00900008A06B0595570E97F6838298172C10900007D72C20900002868267D72C3090000683C4B01683D6ABE090000682B682C683E683F298172C40900007D72C5090000286842684368444B008572C609000068468772C70900005272C8090000284B014B028572C9090000684D894310000000000000F07F000000000000F07F72CA0900007472CB0900006268528868267D72CC0900008A06B0595570E97F6AC109000073683C4B016854684368444B008572CD09000068468772CE0900005272CF090000284B014B024B028672D0090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D10900007472D209000062682B682C685B684368444B008572D309000068468772D40900005272D5090000284B014B024B028672D6090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D70900007472D8090000627562685B4E75627368306828298172D90900007D72DA09000028682B682C682D4B02682E4B0268267D72DB0900008A0640595570E97F6ABE0900007368306831298172DC0900007D72DD0900002868267D72DE0900008A06D0585570E97F6AD9090000736868683F298172DF0900007D72E0090000286842684368444B008572E109000068468772E20900005272E3090000284B014B028572E4090000684D894310000000000000F07F000000000000F07F72E50900007472E60900006268528868267D72E70900008A0660585570E97F6ADC09000073683C4B016854684368444B008572E809000068468772E90900005272EA090000284B014B024B028672EB090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EC0900007472ED09000062682B682C685B684368444B008572EE09000068468772EF0900005272F0090000284B014B024B028672F1090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F20900007472F3090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F40900007D72F50900002868267D72F60900008A06D0585570E97F6AD909000073683C4B026825684368444B008572F709000068468772F80900005272F9090000284B014B034B038672FA090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72FB0900007472FC09000062682B682C687E4E75627562683C4B01687F683275628A0668BD5370E97F6828298172FD0900007D72FE09000028682B682C682D4B02682E4B0268267D72FF0900008A06D8BD5370E97F6838298172000A00007D72010A00002868267D72020A0000683C4B01683D6AFD090000682B682C683E683F298172030A00007D72040A0000286842684368444B008572050A000068468772060A00005272070A0000284B014B028572080A0000684D894310000000000000F07F000000000000F07F72090A000074720A0A00006268528868267D720B0A00008A06D8BD5370E97F6A000A000073683C4B016854684368444B0085720C0A0000684687720D0A000052720E0A0000284B014B024B0286720F0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72100A00007472110A000062682B682C685B684368444B008572120A000068468772130A00005272140A0000284B014B024B028672150A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72160A00007472170A0000627562685B4E75627368306828298172180A00007D72190A000028682B682C682D4B02682E4B0268267D721A0A00008A0668BD5370E97F6AFD09000073683068312981721B0A00007D721C0A00002868267D721D0A00008A06F8BC5370E97F6A180A0000736868683F2981721E0A00007D721F0A0000286842684368444B008572200A000068468772210A00005272220A0000284B014B028572230A0000684D894310000000000000F07F000000000000F07F72240A00007472250A00006268528868267D72260A00008A0688BC5370E97F6A1B0A000073683C4B016854684368444B008572270A000068468772280A00005272290A0000284B014B024B0286722A0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722B0A000074722C0A000062682B682C685B684368444B0085722D0A0000684687722E0A000052722F0A0000284B014B024B028672300A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72310A00007472320A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172330A00007D72340A00002868267D72350A00008A06F8BC5370E97F6A180A000073683C4B026825684368444B008572360A000068468772370A00005272380A0000284B014B034B038672390A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723A0A000074723B0A000062682B682C687E4E75627562683C4B01687F683275628A0638B45370E97F68282981723C0A00007D723D0A000028682B682C682D4B02682E4B0268267D723E0A00008A06A8B45370E97F68382981723F0A00007D72400A00002868267D72410A0000683C4B01683D6A3C0A0000682B682C683E683F298172420A00007D72430A0000286842684368444B008572440A000068468772450A00005272460A0000284B014B028572470A0000684D894310000000000000F07F000000000000F07F72480A00007472490A00006268528868267D724A0A00008A06A8B45370E97F6A3F0A000073683C4B016854684368444B0085724B0A0000684687724C0A000052724D0A0000284B014B024B0286724E0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724F0A00007472500A000062682B682C685B684368444B008572510A000068468772520A00005272530A0000284B014B024B028672540A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72550A00007472560A0000627562685B4E75627368306828298172570A00007D72580A000028682B682C682D4B02682E4B0268267D72590A00008A0638B45370E97F6A3C0A000073683068312981725A0A00007D725B0A00002868267D725C0A00008A06C8B35370E97F6A570A0000736868683F2981725D0A00007D725E0A0000286842684368444B0085725F0A000068468772600A00005272610A0000284B014B028572620A0000684D894310000000000000F07F000000000000F07F72630A00007472640A00006268528868267D72650A00008A0658B35370E97F6A5A0A000073683C4B016854684368444B008572660A000068468772670A00005272680A0000284B014B024B028672690A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726A0A000074726B0A000062682B682C685B684368444B0085726C0A0000684687726D0A000052726E0A0000284B014B024B0286726F0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72700A00007472710A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172720A00007D72730A00002868267D72740A00008A06C8B35370E97F6A570A000073683C4B026825684368444B008572750A000068468772760A00005272770A0000284B014B034B038672780A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72790A000074727A0A000062682B682C687E4E75627562683C4B01687F683275628A06385B5470E97F68282981727B0A00007D727C0A000028682B682C682D4B02682E4B0268267D727D0A00008A06A85B5470E97F68382981727E0A00007D727F0A00002868267D72800A0000683C4B01683D6A7B0A0000682B682C683E683F298172810A00007D72820A0000286842684368444B008572830A000068468772840A00005272850A0000284B014B028572860A0000684D894310000000000000F07F000000000000F07F72870A00007472880A00006268528868267D72890A00008A06A85B5470E97F6A7E0A000073683C4B016854684368444B0085728A0A0000684687728B0A000052728C0A0000284B014B024B0286728D0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728E0A000074728F0A000062682B682C685B684368444B008572900A000068468772910A00005272920A0000284B014B024B028672930A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72940A00007472950A0000627562685B4E75627368306828298172960A00007D72970A000028682B682C682D4B02682E4B0268267D72980A00008A06385B5470E97F6A7B0A00007368306831298172990A00007D729A0A00002868267D729B0A00008A06C85A5470E97F6A960A0000736868683F2981729C0A00007D729D0A0000286842684368444B0085729E0A0000684687729F0A00005272A00A0000284B014B028572A10A0000684D894310000000000000F07F000000000000F07F72A20A00007472A30A00006268528868267D72A40A00008A06585A5470E97F6A990A000073683C4B016854684368444B008572A50A000068468772A60A00005272A70A0000284B014B024B028672A80A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A90A00007472AA0A000062682B682C685B684368444B008572AB0A000068468772AC0A00005272AD0A0000284B014B024B028672AE0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AF0A00007472B00A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B10A00007D72B20A00002868267D72B30A00008A06C85A5470E97F6A960A000073683C4B026825684368444B008572B40A000068468772B50A00005272B60A0000284B014B034B038672B70A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B80A00007472B90A000062682B682C687E4E75627562683C4B01687F683275628A0670345370E97F6828298172BA0A00007D72BB0A000028682B682C682D4B02682E4B0268267D72BC0A00008A06E0345370E97F6838298172BD0A00007D72BE0A00002868267D72BF0A0000683C4B01683D6ABA0A0000682B682C683E683F298172C00A00007D72C10A0000286842684368444B008572C20A000068468772C30A00005272C40A0000284B014B028572C50A0000684D894310000000000000F07F000000000000F07F72C60A00007472C70A00006268528868267D72C80A00008A06E0345370E97F6ABD0A000073683C4B016854684368444B008572C90A000068468772CA0A00005272CB0A0000284B014B024B028672CC0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CD0A00007472CE0A000062682B682C685B684368444B008572CF0A000068468772D00A00005272D10A0000284B014B024B028672D20A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D30A00007472D40A0000627562685B4E75627368306828298172D50A00007D72D60A000028682B682C682D4B02682E4B0268267D72D70A00008A0670345370E97F6ABA0A00007368306831298172D80A00007D72D90A00002868267D72DA0A00008A0600345370E97F6AD50A0000736868683F298172DB0A00007D72DC0A0000286842684368444B008572DD0A000068468772DE0A00005272DF0A0000284B014B028572E00A0000684D894310000000000000F07F000000000000F07F72E10A00007472E20A00006268528868267D72E30A00008A0690335370E97F6AD80A000073683C4B016854684368444B008572E40A000068468772E50A00005272E60A0000284B014B024B028672E70A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E80A00007472E90A000062682B682C685B684368444B008572EA0A000068468772EB0A00005272EC0A0000284B014B024B028672ED0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EE0A00007472EF0A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F00A00007D72F10A00002868267D72F20A00008A0600345370E97F6AD50A000073683C4B026825684368444B008572F30A000068468772F40A00005272F50A0000284B014B034B038672F60A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F70A00007472F80A000062682B682C687E4E75627562683C4B01687F683275628A06487E5270E97F6828298172F90A00007D72FA0A000028682B682C682D4B02682E4B0268267D72FB0A00008A06B87E5270E97F6838298172FC0A00007D72FD0A00002868267D72FE0A0000683C4B01683D6AF90A0000682B682C683E683F298172FF0A00007D72000B0000286842684368444B008572010B000068468772020B00005272030B0000284B014B028572040B0000684D894310000000000000F07F000000000000F07F72050B00007472060B00006268528868267D72070B00008A06B87E5270E97F6AFC0A000073683C4B016854684368444B008572080B000068468772090B000052720A0B0000284B014B024B0286720B0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720C0B000074720D0B000062682B682C685B684368444B0085720E0B0000684687720F0B00005272100B0000284B014B024B028672110B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72120B00007472130B0000627562685B4E75627368306828298172140B00007D72150B000028682B682C682D4B02682E4B0268267D72160B00008A06487E5270E97F6AF90A00007368306831298172170B00007D72180B00002868267D72190B00008A06D87D5270E97F6A140B0000736868683F2981721A0B00007D721B0B0000286842684368444B0085721C0B0000684687721D0B000052721E0B0000284B014B0285721F0B0000684D894310000000000000F07F000000000000F07F72200B00007472210B00006268528868267D72220B00008A06687D5270E97F6A170B000073683C4B016854684368444B008572230B000068468772240B00005272250B0000284B014B024B028672260B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72270B00007472280B000062682B682C685B684368444B008572290B0000684687722A0B000052722B0B0000284B014B024B0286722C0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722D0B000074722E0B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981722F0B00007D72300B00002868267D72310B00008A06D87D5270E97F6A140B000073683C4B026825684368444B008572320B000068468772330B00005272340B0000284B014B034B038672350B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72360B00007472370B000062682B682C687E4E75627562683C4B01687F683275628A0628785270E97F6828298172380B00007D72390B000028682B682C682D4B02682E4B0268267D723A0B00008A0698785270E97F68382981723B0B00007D723C0B00002868267D723D0B0000683C4B01683D6A380B0000682B682C683E683F2981723E0B00007D723F0B0000286842684368444B008572400B000068468772410B00005272420B0000284B014B028572430B0000684D894310000000000000F07F000000000000F07F72440B00007472450B00006268528868267D72460B00008A0698785270E97F6A3B0B000073683C4B016854684368444B008572470B000068468772480B00005272490B0000284B014B024B0286724A0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724B0B000074724C0B000062682B682C685B684368444B0085724D0B0000684687724E0B000052724F0B0000284B014B024B028672500B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72510B00007472520B0000627562685B4E75627368306828298172530B00007D72540B000028682B682C682D4B02682E4B0268267D72550B00008A0628785270E97F6A380B00007368306831298172560B00007D72570B00002868267D72580B00008A06B8775270E97F6A530B0000736868683F298172590B00007D725A0B0000286842684368444B0085725B0B0000684687725C0B000052725D0B0000284B014B0285725E0B0000684D894310000000000000F07F000000000000F07F725F0B00007472600B00006268528868267D72610B00008A0648775270E97F6A560B000073683C4B016854684368444B008572620B000068468772630B00005272640B0000284B014B024B028672650B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72660B00007472670B000062682B682C685B684368444B008572680B000068468772690B000052726A0B0000284B014B024B0286726B0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726C0B000074726D0B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981726E0B00007D726F0B00002868267D72700B00008A06B8775270E97F6A530B000073683C4B026825684368444B008572710B000068468772720B00005272730B0000284B014B034B038672740B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72750B00007472760B000062682B682C687E4E75627562683C4B01687F683275628A06A06D5C70E97F6828298172770B00007D72780B000028682B682C682D4B02682E4B0268267D72790B00008A06B0625C70E97F68382981727A0B00007D727B0B00002868267D727C0B0000683C4B01683D6A770B0000682B682C683E683F2981727D0B00007D727E0B0000286842684368444B0085727F0B000068468772800B00005272810B0000284B014B028572820B0000684D894310000000000000F07F000000000000F07F72830B00007472840B00006268528868267D72850B00008A06B0625C70E97F6A7A0B000073683C4B016854684368444B008572860B000068468772870B00005272880B0000284B014B024B028672890B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728A0B000074728B0B000062682B682C685B684368444B0085728C0B0000684687728D0B000052728E0B0000284B014B024B0286728F0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72900B00007472910B0000627562685B4E75627368306828298172920B00007D72930B000028682B682C682D4B02682E4B0268267D72940B00008A06A06D5C70E97F6A770B00007368306831298172950B00007D72960B00002868267D72970B00008A0670645C70E97F6A920B0000736868683F298172980B00007D72990B0000286842684368444B0085729A0B0000684687729B0B000052729C0B0000284B014B0285729D0B0000684D894310000000000000F07F000000000000F07F729E0B000074729F0B00006268528868267D72A00B00008A06582A5970E97F6A950B000073683C4B016854684368444B008572A10B000068468772A20B00005272A30B0000284B014B024B028672A40B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A50B00007472A60B000062682B682C685B684368444B008572A70B000068468772A80B00005272A90B0000284B014B024B028672AA0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0B00007472AC0B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172AD0B00007D72AE0B00002868267D72AF0B00008A0670645C70E97F6A920B000073683C4B026825684368444B008572B00B000068468772B10B00005272B20B0000284B014B034B038672B30B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B40B00007472B50B000062682B682C687E4E75627562683C4B01687F683275628A06C0755970E97F6A8C010000298172B60B00007D72B70B0000286A8F010000683268267D72B80B0000683C4B0168254E682B682C687E4E6A910100006A92010000298172B90B00007D72BA0B00002868267D72BB0B00008A06C0755970E97F6AB60B000073683C4B01682B682C687E4E756275628A0660AF6070E97F6AF40700008A0678A96070E97F6A110800008A0658BA5370E97F6828298172BC0B00007D72BD0B000028682B682C682D4B02682E4B0268267D72BE0B00008A06C8BA5370E97F6838298172BF0B00007D72C00B00002868267D72C10B0000683C4B01683D6ABC0B0000682B682C683E683F298172C20B00007D72C30B0000286842684368444B008572C40B000068468772C50B00005272C60B0000284B014B028572C70B0000684D894310000000000000F07F000000000000F07F72C80B00007472C90B00006268528868267D72CA0B00008A06C8BA5370E97F6ABF0B000073683C4B016854684368444B008572CB0B000068468772CC0B00005272CD0B0000284B014B024B028672CE0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CF0B00007472D00B000062682B682C685B684368444B008572D10B000068468772D20B00005272D30B0000284B014B024B028672D40B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D50B00007472D60B0000627562685B4E75627368306828298172D70B00007D72D80B000028682B682C682D4B02682E4B0268267D72D90B00008A0658BA5370E97F6ABC0B00007368306831298172DA0B00007D72DB0B00002868267D72DC0B00008A06E8B95370E97F6AD70B0000736868683F298172DD0B00007D72DE0B0000286842684368444B008572DF0B000068468772E00B00005272E10B0000284B014B028572E20B0000684D894310000000000000F07F000000000000F07F72E30B00007472E40B00006268528868267D72E50B00008A0678B95370E97F6ADA0B000073683C4B016854684368444B008572E60B000068468772E70B00005272E80B0000284B014B024B028672E90B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0B00007472EB0B000062682B682C685B684368444B008572EC0B000068468772ED0B00005272EE0B0000284B014B024B028672EF0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00B00007472F10B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F20B00007D72F30B00002868267D72F40B00008A06E8B95370E97F6AD70B000073683C4B026825684368444B008572F50B000068468772F60B00005272F70B0000284B014B034B038672F80B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F90B00007472FA0B000062682B682C687E4E75627562683C4B01687F683275628A06F82C5C70E97F6828298172FB0B00007D72FC0B000028682B682C682D4B02682E4B0268267D72FD0B00008A06682D5C70E97F6838298172FE0B00007D72FF0B00002868267D72000C0000683C4B01683D6AFB0B0000682B682C683E683F298172010C00007D72020C0000286842684368444B008572030C000068468772040C00005272050C0000284B014B028572060C0000684D894310000000000000F07F000000000000F07F72070C00007472080C00006268528868267D72090C00008A06682D5C70E97F6AFE0B000073683C4B016854684368444B0085720A0C0000684687720B0C000052720C0C0000284B014B024B0286720D0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720E0C000074720F0C000062682B682C685B684368444B008572100C000068468772110C00005272120C0000284B014B024B028672130C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72140C00007472150C0000627562685B4E75627368306828298172160C00007D72170C000028682B682C682D4B02682E4B0268267D72180C00008A06F82C5C70E97F6AFB0B00007368306831298172190C00007D721A0C00002868267D721B0C00008A0638745270E97F6A160C0000736868683F2981721C0C00007D721D0C0000286842684368444B0085721E0C0000684687721F0C00005272200C0000284B014B028572210C0000684D894310000000000000F07F000000000000F07F72220C00007472230C00006268528868267D72240C00008A06C8735270E97F6A190C000073683C4B016854684368444B008572250C000068468772260C00005272270C0000284B014B024B028672280C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72290C000074722A0C000062682B682C685B684368444B0085722B0C0000684687722C0C000052722D0C0000284B014B024B0286722E0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F0C00007472300C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172310C00007D72320C00002868267D72330C00008A0638745270E97F6A160C000073683C4B026825684368444B008572340C000068468772350C00005272360C0000284B014B034B038672370C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72380C00007472390C000062682B682C687E4E75627562683C4B01687F683275628A0618755270E97F68282981723A0C00007D723B0C000028682B682C682D4B02682E4B0268267D723C0C00008A0688755270E97F68382981723D0C00007D723E0C00002868267D723F0C0000683C4B01683D6A3A0C0000682B682C683E683F298172400C00007D72410C0000286842684368444B008572420C000068468772430C00005272440C0000284B014B028572450C0000684D894310000000000000F07F000000000000F07F72460C00007472470C00006268528868267D72480C00008A0688755270E97F6A3D0C000073683C4B016854684368444B008572490C0000684687724A0C000052724B0C0000284B014B024B0286724C0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724D0C000074724E0C000062682B682C685B684368444B0085724F0C000068468772500C00005272510C0000284B014B024B028672520C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72530C00007472540C0000627562685B4E75627368306828298172550C00007D72560C000028682B682C682D4B02682E4B0268267D72570C00008A0618755270E97F6A3A0C00007368306831298172580C00007D72590C00002868267D725A0C00008A06A8745270E97F6A550C0000736868683F2981725B0C00007D725C0C0000286842684368444B0085725D0C0000684687725E0C000052725F0C0000284B014B028572600C0000684D894310000000000000F07F000000000000F07F72610C00007472620C00006268528868267D72630C00008A06A84B5A70E97F6A580C000073683C4B016854684368444B008572640C000068468772650C00005272660C0000284B014B024B028672670C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72680C00007472690C000062682B682C685B684368444B0085726A0C0000684687726B0C000052726C0C0000284B014B024B0286726D0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726E0C000074726F0C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172700C00007D72710C00002868267D72720C00008A06A8745270E97F6A550C000073683C4B026825684368444B008572730C000068468772740C00005272750C0000284B014B034B038672760C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72770C00007472780C000062682B682C687E4E75627562683C4B01687F683275628A0628B15370E97F6828298172790C00007D727A0C000028682B682C682D4B02682E4B0268267D727B0C00008A0698B15370E97F68382981727C0C00007D727D0C00002868267D727E0C0000683C4B01683D6A790C0000682B682C683E683F2981727F0C00007D72800C0000286842684368444B008572810C000068468772820C00005272830C0000284B014B028572840C0000684D894310000000000000F07F000000000000F07F72850C00007472860C00006268528868267D72870C00008A0698B15370E97F6A7C0C000073683C4B016854684368444B008572880C000068468772890C000052728A0C0000284B014B024B0286728B0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728C0C000074728D0C000062682B682C685B684368444B0085728E0C0000684687728F0C00005272900C0000284B014B024B028672910C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72920C00007472930C0000627562685B4E75627368306828298172940C00007D72950C000028682B682C682D4B02682E4B0268267D72960C00008A0628B15370E97F6A790C00007368306831298172970C00007D72980C00002868267D72990C00008A06B8B05370E97F6A940C0000736868683F2981729A0C00007D729B0C0000286842684368444B0085729C0C0000684687729D0C000052729E0C0000284B014B0285729F0C0000684D894310000000000000F07F000000000000F07F72A00C00007472A10C00006268528868267D72A20C00008A0648B05370E97F6A970C000073683C4B016854684368444B008572A30C000068468772A40C00005272A50C0000284B014B024B028672A60C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A70C00007472A80C000062682B682C685B684368444B008572A90C000068468772AA0C00005272AB0C0000284B014B024B028672AC0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AD0C00007472AE0C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172AF0C00007D72B00C00002868267D72B10C00008A06B8B05370E97F6A940C000073683C4B026825684368444B008572B20C000068468772B30C00005272B40C0000284B014B034B038672B50C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B60C00007472B70C000062682B682C687E4E75627562683C4B01687F683275627568686A72070000683C4B0168254E682B682C687E4E7562683C4B01687F682375628A06302D5B70E97F6A890100008A06A02D5B70E97F6A4701000075683C4B016A5F0300006A60030000682B682C687E4E6A37040000470000000000000000473FB55555555555558672B80C0000756258070000007061746368657372B90C00005D72BA0C000028636D6174706C6F746C69622E706174636865730A52656374616E676C650A72BB0C0000298172BC0C00007D72BD0C00002868034E6805896806680168074E68086A820900006809680A5D72BE0C00005D72BF0C0000636E756D70792E636F72652E6D756C746961727261790A7363616C61720A72C00C0000684D4308000000000000000072C10C00008672C20C00005272C30C0000618672C40C00008172C50C000058090000005F636C69707061746872C60C00004E58060000005F7374616C6572C70C000088580D0000005F7472616E73666F726D53657472C80C00008858060000005F616E676C6572C90C0000470000000000000000580C0000005F616E7469616C696173656472CA0C000088580A0000005F75735F64617368657372CB0C00004E4E8672CC0C000058050000005F66696C6C72CD0C0000886A9101000047000000000000000058050000005F736E617072CE0C00004E58080000005F76697369626C6572CF0C000088580E0000005F70726F706F627365727665727372D00C00007D72D10C0000580A0000005F6C696E657374796C6572D20C00005805000000736F6C696472D30C000058060000005F776964746872D40C000047403200000000000058070000005F68656967687472D50C0000474139FB3B0000000058060000005F6C6162656C72D60C0000580A0000005F6E6F6C6567656E645F72D70C000058060000005F686174636872D80C00004E580F0000005F726563745F7472616E73666F726D72D90C00006828298172DA0C00007D72DB0C000028682B682C682D4B02682E4B0268267D72DC0C000068306831298172DD0C00007D72DE0C00002868267D72DF0C00008A06B0525470E97F6ADA0C0000736868683F298172E00C00007D72E10C0000286842684368444B008572E20C000068468772E30C00005272E40C0000284B014B028572E50C0000684D894310000000000000F07F000000000000F07F72E60C00007472E70C00006268528868267D72E80C00008A0660585470E97F6ADD0C000073683C4B016854684368444B008572E90C000068468772EA0C00005272EB0C0000284B014B024B028672EC0C0000684D894320000000000000000000000000000000000000000000003240000000003BFB394172ED0C00007472EE0C000062682B682C685B684368444B008572EF0C000068468772F00C00005272F10C0000284B014B024B028672F20C0000684D894320000000000000000000000000000000000000000000003240000000003BFB394172F30C00007472F40C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F50C00007D72F60C00002868267D72F70C00008A06B0525470E97F6ADA0C000073683C4B006825684368444B008572F80C000068468772F90C00005272FA0C0000284B014B034B038672FB0C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72FC0C00007472FD0C000062682B682C687E4E7562756258070000005F64617368657372FE0C00004E58040000005F75726C72FF0C00004E58040000005F67696472000D00004E683D6AF6070000580A0000005F6C696E65776964746872010D0000473FF00000000000006A8F010000470000000000000000580B0000005F646173686F666673657472020D00004E58070000005F636C69706F6E72030D00008858090000005F636F6E7461696E7372040D00004E58130000005F6F726967696E616C5F65646765636F6C6F7272050D00004E58090000005F6361707374796C6572060D000058040000006275747472070D0000580D0000005F706174685F6566666563747372080D00005D72090D0000580E0000005F72656D6F76655F6D6574686F64720A0D00004E58130000005F636F6D62696E65645F7472616E73666F726D720B0D00006A920100002981720C0D00007D720D0D00002868267D720E0D0000683C4B01682B682C687E4E756258040000005F6F6964720F0D00004B00580A0000005F6A6F696E7374796C6572100D000058050000006D6974657272110D0000580E0000007374616C655F63616C6C6261636B72120D00004E580A0000005F65646765636F6C6F7272130D0000284700000000000000004700000000000000004700000000000000004700000000000000007472140D000058060000005F616C70686172150D00004E580B0000005F6167675F66696C74657272160D00004E58130000005F6F726967696E616C5F66616365636F6C6F7272170D0000684368444B008572180D000068468772190D000052721A0D0000284B014B0485721B0D0000684D8943201F1F1F1F1F1FBF3FDEDDDDDDDDDDDD3F979696969696E63F000000000000F03F721C0D000074721D0D000062580A0000005F66616365636F6C6F72721E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074721F0D000058050000005F6178657372200D0000681D58090000005F616E696D6174656472210D000089580A0000005F6D6F7573656F76657272220D000089580B0000005F726173746572697A656472230D00004E75626ABB0C0000298172240D00007D72250D00002868034E6805896806680168074E68086A7E0A00006809680A5D72260D00005D72270D00006AC00C0000684D4308000000000000000072280D00008672290D000052722A0D00006186722B0D000081722C0D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E86722D0D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D722E0D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C0000474090C400000000006AD60C00006AD70C00006AD80C00004E6AD90C000068282981722F0D00007D72300D000028682B682C682D4B02682E4B0268267D72310D000068306831298172320D00007D72330D00002868267D72340D00008A0678595470E97F6A2F0D0000736868683F298172350D00007D72360D0000286842684368444B008572370D000068468772380D00005272390D0000284B014B0285723A0D0000684D894310000000000000F07F000000000000F07F723B0D000074723C0D00006268528868267D723D0D00008A06485E5470E97F6A320D000073683C4B016854684368444B0085723E0D0000684687723F0D00005272400D0000284B014B024B028672410D0000684D8943200000000000003240000000000000000000000000000042400000000000C4904072420D00007472430D000062682B682C685B684368444B008572440D000068468772450D00005272460D0000284B014B024B028672470D0000684D8943200000000000003240000000000000000000000000000042400000000000C4904072480D00007472490D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724A0D00007D724B0D00002868267D724C0D00008A0678595470E97F6A2F0D000073683C4B006825684368444B0085724D0D0000684687724E0D000052724F0D0000284B014B034B038672500D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72510D00007472520D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740320000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472530D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172540D00007D72550D00002868267D72560D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272570D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472580D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172590D00007D725A0D00002868034E6805896806680168074E680868396809680A5D725B0D00005D725C0D00006AC00C0000684D43080000000000000000725D0D000086725E0D000052725F0D0000618672600D00008172610D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672620D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72630D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C0000474058C000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172640D00007D72650D000028682B682C682D4B02682E4B0268267D72660D000068306831298172670D00007D72680D00002868267D72690D00008A06605F5470E97F6A640D0000736868683F2981726A0D00007D726B0D0000286842684368444B0085726C0D0000684687726D0D000052726E0D0000284B014B0285726F0D0000684D894310000000000000F07F000000000000F07F72700D00007472710D00006268528868267D72720D00008A0670D45470E97F6A670D000073683C4B016854684368444B008572730D000068468772740D00005272750D0000284B014B024B028672760D0000684D894320000000000000424000000000000000000000000000004B400000000000C0584072770D00007472780D000062682B682C685B684368444B008572790D0000684687727A0D000052727B0D0000284B014B024B0286727C0D0000684D894320000000000000424000000000000000000000000000004B400000000000C05840727D0D000074727E0D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727F0D00007D72800D00002868267D72810D00008A06605F5470E97F6A640D000073683C4B006825684368444B008572820D000068468772830D00005272840D0000284B014B034B038672850D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72860D00007472870D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740420000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472880D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172890D00007D728A0D00002868267D728B0D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D69746572728C0D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074728D0D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C00002981728E0D00007D728F0D00002868034E6805896806680168074E680868CC6809680A5D72900D00005D72910D00006AC00C0000684D4308000000000000000072920D00008672930D00005272940D0000618672950D00008172960D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672970D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72980D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740438000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172990D00007D729A0D000028682B682C682D4B02682E4B0268267D729B0D0000683068312981729C0D00007D729D0D00002868267D729E0D00008A0688D55470E97F6A990D0000736868683F2981729F0D00007D72A00D0000286842684368444B008572A10D000068468772A20D00005272A30D0000284B014B028572A40D0000684D894310000000000000F07F000000000000F07F72A50D00007472A60D00006268528868267D72A70D00008A0658DA5470E97F6A9C0D000073683C4B016854684368444B008572A80D000068468772A90D00005272AA0D0000284B014B024B028672AB0D0000684D8943200000000000004B4000000000000000000000000000005240000000000080434072AC0D00007472AD0D000062682B682C685B684368444B008572AE0D000068468772AF0D00005272B00D0000284B014B024B028672B10D0000684D8943200000000000004B4000000000000000000000000000005240000000000080434072B20D00007472B30D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B40D00007D72B50D00002868267D72B60D00008A0688D55470E97F6A990D000073683C4B006825684368444B008572B70D000068468772B80D00005272B90D0000284B014B034B038672BA0D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BB0D00007472BC0D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F01000047404B0000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472BD0D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172BE0D00007D72BF0D00002868267D72C00D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272C10D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472C20D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172C30D00007D72C40D00002868034E6805896806680168074E68086ABF0800006809680A5D72C50D00005D72C60D00006AC00C0000684D4308000000000000000072C70D00008672C80D00005272C90D0000618672CA0D00008172CB0D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672CC0D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72CD0D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740280000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172CE0D00007D72CF0D000028682B682C682D4B02682E4B0268267D72D00D000068306831298172D10D00007D72D20D00002868267D72D30D00008A0670DB5470E97F6ACE0D0000736868683F298172D40D00007D72D50D0000286842684368444B008572D60D000068468772D70D00005272D80D0000284B014B028572D90D0000684D894310000000000000F07F000000000000F07F72DA0D00007472DB0D00006268528868267D72DC0D00008A0680505570E97F6AD10D000073683C4B016854684368444B008572DD0D000068468772DE0D00005272DF0D0000284B014B024B028672E00D0000684D894320000000000000524000000000000000000000000000805640000000000000284072E10D00007472E20D000062682B682C685B684368444B008572E30D000068468772E40D00005272E50D0000284B014B024B028672E60D0000684D894320000000000000524000000000000000000000000000805640000000000000284072E70D00007472E80D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E90D00007D72EA0D00002868267D72EB0D00008A0670DB5470E97F6ACE0D000073683C4B006825684368444B008572EC0D000068468772ED0D00005272EE0D0000284B014B034B038672EF0D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F00D00007472F10D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740520000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472F20D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172F30D00007D72F40D00002868267D72F50D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272F60D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472F70D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172F80D00007D72F90D00002868034E6805896806680168074E6808688D6809680A5D72FA0D00005D72FB0D00006AC00C0000684D4308000000000000000072FC0D00008672FD0D00005272FE0D0000618672FF0D00008172000E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672010E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72020E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740260000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172030E00007D72040E000028682B682C682D4B02682E4B0268267D72050E000068306831298172060E00007D72070E00002868267D72080E00008A06A8DB5470E97F6A030E0000736868683F298172090E00007D720A0E0000286842684368444B0085720B0E0000684687720C0E000052720D0E0000284B014B0285720E0E0000684D894310000000000000F07F000000000000F07F720F0E00007472100E00006268528868267D72110E00008A0668565570E97F6A060E000073683C4B016854684368444B008572120E000068468772130E00005272140E0000284B014B024B028672150E0000684D894320000000000080564000000000000000000000000000005B40000000000000264072160E00007472170E000062682B682C685B684368444B008572180E000068468772190E000052721A0E0000284B014B024B0286721B0E0000684D894320000000000080564000000000000000000000000000005B400000000000002640721C0E000074721D0E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981721E0E00007D721F0E00002868267D72200E00008A06A8DB5470E97F6A030E000073683C4B006825684368444B008572210E000068468772220E00005272230E0000284B014B034B038672240E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72250E00007472260E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740568000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472270E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172280E00007D72290E00002868267D722A0E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D69746572722B0E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074722C0E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C00002981722D0E00007D722E0E00002868034E6805896806680168074E68086AC10900006809680A5D722F0E00005D72300E00006AC00C0000684D4308000000000000000072310E00008672320E00005272330E0000618672340E00008172350E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672360E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72370E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740000000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172380E00007D72390E000028682B682C682D4B02682E4B0268267D723A0E0000683068312981723B0E00007D723C0E00002868267D723D0E00008A0680575570E97F6A380E0000736868683F2981723E0E00007D723F0E0000286842684368444B008572400E000068468772410E00005272420E0000284B014B028572430E0000684D894310000000000000F07F000000000000F07F72440E00007472450E00006268528868267D72460E00008A06505C5570E97F6A3B0E000073683C4B016854684368444B008572470E000068468772480E00005272490E0000284B014B024B0286724A0E0000684D8943200000000000005B4000000000000000000000000000805F400000000000000040724B0E000074724C0E000062682B682C685B684368444B0085724D0E0000684687724E0E000052724F0E0000284B014B024B028672500E0000684D8943200000000000005B4000000000000000000000000000805F40000000000000004072510E00007472520E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172530E00007D72540E00002868267D72550E00008A0680575570E97F6A380E000073683C4B006825684368444B008572560E000068468772570E00005272580E0000284B014B034B038672590E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725A0E000074725B0E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F01000047405B0000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D0000580400000062757474725C0E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A920100002981725D0E00007D725E0E00002868267D725F0E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272600E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472610E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172620E00007D72630E00002868034E6805896806680168074E68086A950200006809680A5D72640E00005D72650E00006AC00C0000684D4308000000000000000072660E00008672670E00005272680E0000618672690E000081726A0E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E86726B0E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D726C0E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C0000473FF00000000000006AD60C00006AD70C00006AD80C00004E6AD90C000068282981726D0E00007D726E0E000028682B682C682D4B02682E4B0268267D726F0E000068306831298172700E00007D72710E00002868267D72720E00008A0610675870E97F6A6D0E0000736868683F298172730E00007D72740E0000286842684368444B008572750E000068468772760E00005272770E0000284B014B028572780E0000684D894310000000000000F07F000000000000F07F72790E000074727A0E00006268528868267D727B0E00008A06D0615C70E97F6A700E000073683C4B016854684368444B0085727C0E0000684687727D0E000052727E0E0000284B014B024B0286727F0E0000684D8943200000000000805F4000000000000000000000000000006240000000000000F03F72800E00007472810E000062682B682C685B684368444B008572820E000068468772830E00005272840E0000284B014B024B028672850E0000684D8943200000000000805F4000000000000000000000000000006240000000000000F03F72860E00007472870E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172880E00007D72890E00002868267D728A0E00008A0610675870E97F6A6D0E000073683C4B006825684368444B0085728B0E0000684687728C0E000052728D0E0000284B014B034B0386728E0E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728F0E00007472900E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F01000047405F8000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472910E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172920E00007D72930E00002868267D72940E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272950E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472960E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172970E00007D72980E00002868034E6805896806680168074E68086A990100006809680A5D72990E00005D729A0E00006AC00C0000684D43080000000000000000729B0E000086729C0E000052729D0E00006186729E0E000081729F0E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672A00E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72A10E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740080000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172A20E00007D72A30E000028682B682C682D4B02682E4B0268267D72A40E000068306831298172A50E00007D72A60E00002868267D72A70E00008A0640695C70E97F6AA20E0000736868683F298172A80E00007D72A90E0000286842684368444B008572AA0E000068468772AB0E00005272AC0E0000284B014B028572AD0E0000684D894310000000000000F07F000000000000F07F72AE0E00007472AF0E00006268528868267D72B00E00008A0650A55B70E97F6AA50E000073683C4B016854684368444B008572B10E000068468772B20E00005272B30E0000284B014B024B028672B40E0000684D894320000000000000624000000000000000000000000000406440000000000000084072B50E00007472B60E000062682B682C685B684368444B008572B70E000068468772B80E00005272B90E0000284B014B024B028672BA0E0000684D894320000000000000624000000000000000000000000000406440000000000000084072BB0E00007472BC0E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172BD0E00007D72BE0E00002868267D72BF0E00008A0640695C70E97F6AA20E000073683C4B006825684368444B008572C00E000068468772C10E00005272C20E0000284B014B034B038672C30E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C40E00007472C50E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740620000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472C60E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172C70E00007D72C80E00002868267D72C90E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272CA0E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472CB0E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172CC0E00007D72CD0E00002868034E6805896806680168074E68086A170200006809680A5D72CE0E00005D72CF0E00006AC00C0000684D4308000000000000000072D00E00008672D10E00005272D20E0000618672D30E00008172D40E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672D50E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72D60E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740000000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172D70E00007D72D80E000028682B682C682D4B02682E4B0268267D72D90E000068306831298172DA0E00007D72DB0E00002868267D72DC0E00008A06A0C65F70E97F6AD70E0000736868683F298172DD0E00007D72DE0E0000286842684368444B008572DF0E000068468772E00E00005272E10E0000284B014B028572E20E0000684D894310000000000000F07F000000000000F07F72E30E00007472E40E0000" + }, + { + "0": "0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B03636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A0628216270E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A06C0555570E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A7135298171367D71372858020000005F7871386828298171397D713A28682B682C682D4B02682E4B0268267D713B288A06C0555570E97F68368A06A8545570E97F68352981713C7D713D286838683268267D713E288A06C0B55370E97F68282981713F7D714028682B682C682D4B02682E4B0268267D71416830683C58080000005F696E76616C696471424B0258020000005F6271436822298171447D71452868254E68267D71468A06C0B55370E97F683F7368424B01580C0000005F7363616C655F7472616E737147636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A7148298171497D714A2868267D714B288A06C02CBB73E97F68222981714C7D714D2868254E68267D714E8A06002BBB73E97F68282981714F7D715028682B682C682D4B02682E4B0268267D71516830683668424B026843684C75627368424B0168476849682B682C58090000005F696E76657274656471524E58020000005F7471534B00473FB8E38E38E38E3986715475628A06C0755270E97F6822298171557D71562868254E68267D71578A0688755270E97F6828298171587D715928682B682C682D4B02682E4B0268267D715A683068352981715B7D715C28683868312981715D7D715E2868267D715F288A06802E5B70E97F6828298171607D716128682B682C682D4B02682E4B0268267D71628A06102E5B70E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7163298171647D71652868267D716668424B01580A0000005F7472616E73666F726D71676860682B682C58050000005F62626F787168636D6174706C6F746C69622E7472616E73666F726D730A42626F780A71692981716A7D716B2858070000005F6D696E706F73716C636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A716D636E756D70790A6E6461727261790A716E4B0085716F4301627170877171527172284B014B02857173636E756D70790A64747970650A71745802000000663871754B004B01877176527177284B0358010000003C71784E4E4E4AFFFFFFFF4AFFFFFFFF4B0074717962894310000000000000F07F000000000000F07F717A74717B6258070000005F69676E6F7265717C8868267D717D8A06102E5B70E97F68647368424B01580C0000005F706F696E74735F6F726967717E686D686E4B0085717F6870877180527181284B014B024B02867182687789432000000000000000000000000000000000000000000000F03F000000000000F03F718374718462682B682C58070000005F706F696E74737185686D686E4B008571866870877187527188284B014B024B02867189687789432000000000000000000000000000000000000000000000F03F000000000000F03F718A74718B62756268854E756273683068282981718C7D718D28682B682C682D4B02682E4B0268267D718E8A06802E5B70E97F686073683068312981718F7D71902868267D71918A06B8475A70E97F688C7358070000005F626F786F757471926869298171937D719428686C686D686E4B008571956870877196527197284B014B028571986877894310000000000000F07F000000000000F07F719974719A62687C8868267D719B8A06882C5B70E97F688F7368424B01687E686D686E4B0085719C687087719D52719E284B014B024B0286719F687789432000000000000000000000000000000000000000000000F03F000000000000F03F71A07471A162682B682C6885686D686E4B008571A268708771A35271A4284B014B024B028671A5687789432000000000000000000000000000000000000000000000F03F000000000000F03F71A67471A762756268424B0168254E682B682C68524E756268424B0168436848298171A87D71A92868267D71AA8A06B8475A70E97F688C7368424B026825686D686E4B008571AB68708771AC5271AD284B014B034B038671AE6877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71AF7471B062682B682C68524E7562756268424B016843685D75628A06C0755970E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A71B1298171B27D71B3286838685D68267D71B468424B0168254E682B682C68524E58020000005F7971B5636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A71B6298171B77D71B82868267D71B98A06C0755970E97F68B27368424B01682B682C68524E756275628A06681D6170E97F6828298171BA7D71BB28682B682C682D4B02682E4B0268267D71BC8A06B0126170E97F6863298171BD7D71BE2868267D71BF68424B01686768BA682B682C68686869298171C07D71C128686C686D686E4B008571C268708771C35271C4284B014B028571C56877894310000000000000F07F000000000000F07F71C67471C762687C8868267D71C88A06B0126170E97F68BD7368424B01687E686D686E4B008571C968708771CA5271CB284B014B024B028671CC687789432000000000000000000000000000000000000000000000F03F000000000000F03F71CD7471CE62682B682C6885686D686E4B008571CF68708771D05271D1284B014B024B028671D2687789432000000000000000000000000000000000000000000000F03F000000000000F03F71D37471D462756268854E75627368306828298171D57D71D628682B682C682D4B02682E4B0268267D71D78A06681D6170E97F68BA7368306831298171D87D71D92868267D71DA8A0698116170E97F68D57368926869298171DB7D71DC28686C686D686E4B008571DD68708771DE5271DF284B014B028571E06877894310000000000000F07F000000000000F07F71E17471E262687C8868267D71E38A06801E6170E97F68D87368424B01687E686D686E4B008571E468708771E55271E6284B014B024B028671E7687789432000000000000000000000000000000000000000000000F03F000000000000F03F71E87471E962682B682C6885686D686E4B008571EA68708771EB5271EC284B014B024B028671ED687789432000000000000000000000000000000000000000000000F03F000000000000F03F71EE7471EF62756268424B0168254E682B682C68524E756268424B0168436848298171F07D71F12868267D71F28A0698116170E97F68D57368424B026825686D686E4B008571F368708771F45271F5284B014B034B038671F66877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71F77471F862682B682C68524E7562756268424B016843685D75628A0648A05B70E97F6828298171F97D71FA28682B682C682D4B02682E4B0268267D71FB8A0638AB5B70E97F6863298171FC7D71FD2868267D71FE68424B01686768F9682B682C68686869298171FF7D720001000028686C686D686E4B008572010100006870877202010000527203010000284B014B028572040100006877894310000000000000F07F000000000000F07F720501000074720601000062687C8868267D72070100008A0638AB5B70E97F68FC7368424B01687E686D686E4B00857208010000687087720901000052720A010000284B014B024B0286720B010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F720C01000074720D01000062682B682C6885686D686E4B0085720E010000687087720F010000527210010000284B014B024B02867211010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721201000074721301000062756268854E75627368306828298172140100007D721501000028682B682C682D4B02682E4B0268267D72160100008A0648A05B70E97F68F97368306831298172170100007D72180100002868267D72190100008A06F8AC5B70E97F6A1401000073689268692981721A0100007D721B01000028686C686D686E4B0085721C010000687087721D01000052721E010000284B014B0285721F0100006877894310000000000000F07F000000000000F07F722001000074722101000062687C8868267D72220100008A0670AB5B70E97F6A170100007368424B01687E686D686E4B008572230100006870877224010000527225010000284B014B024B02867226010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F722701000074722801000062682B682C6885686D686E4B00857229010000687087722A01000052722B010000284B014B024B0286722C010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F722D01000074722E01000062756268424B0168254E682B682C68524E756268424B01684368482981722F0100007D72300100002868267D72310100008A06F8AC5B70E97F6A140100007368424B026825686D686E4B008572320100006870877233010000527234010000284B014B034B038672350100006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723601000074723701000062682B682C68524E7562756268424B016843685D75628A0660186170E97F6828298172380100007D723901000028682B682C682D4B02682E4B0268267D723A0100008A06D01F6170E97F68632981723B0100007D723C0100002868267D723D01000068424B0168676A38010000682B682C686868692981723E0100007D723F01000028686C686D686E4B008572400100006870877241010000527242010000284B014B028572430100006877894310000000000000F07F000000000000F07F724401000074724501000062687C8868267D72460100008A06D01F6170E97F6A3B0100007368424B01687E686D686E4B008572470100006870877248010000527249010000284B014B024B0286724A010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724B01000074724C01000062682B682C6885686D686E4B0085724D010000687087724E01000052724F010000284B014B024B02867250010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725101000074725201000062756268854E75627368306828298172530100007D725401000028682B682C682D4B02682E4B0268267D72550100008A0660186170E97F6A380100007368306831298172560100007D72570100002868267D72580100008A06881C6170E97F6A530100007368926869298172590100007D725A01000028686C686D686E4B0085725B010000687087725C01000052725D010000284B014B0285725E0100006877894310000000000000F07F000000000000F07F725F01000074726001000062687C8868267D72610100008A06E8196170E97F6A560100007368424B01687E686D686E4B008572620100006870877263010000527264010000284B014B024B02867265010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726601000074726701000062682B682C6885686D686E4B00857268010000687087726901000052726A010000284B014B024B0286726B010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726C01000074726D01000062756268424B0168254E682B682C68524E756268424B01684368482981726E0100007D726F0100002868267D72700100008A06881C6170E97F6A530100007368424B026825686D686E4B008572710100006870877272010000527273010000284B014B034B038672740100006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727501000074727601000062682B682C68524E7562756268424B016843685D75628A0630CD5670E97F6828298172770100007D727801000028682B682C682D4B02682E4B0268267D72790100008A0610CE5670E97F68632981727A0100007D727B0100002868267D727C01000068424B0168676A77010000682B682C686868692981727D0100007D727E01000028686C686D686E4B0085727F0100006870877280010000527281010000284B014B028572820100006877894310000000000000F07F000000000000F07F728301000074728401000062687C8868267D72850100008A0610CE5670E97F6A7A0100007368424B01687E686D686E4B008572860100006870877287010000527288010000284B014B024B02867289010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F728A01000074728B01000062682B682C6885686D686E4B0085728C010000687087728D01000052728E010000284B014B024B0286728F010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729001000074729101000062756268854E75627368306828298172920100007D729301000028682B682C682D4B02682E4B0268267D72940100008A0630CD5670E97F6A770100007368306831298172950100007D72960100002868267D72970100008A0628C85670E97F6A920100007368926869298172980100007D729901000028686C686D686E4B0085729A010000687087729B01000052729C010000284B014B0285729D0100006877894310000000000000F07F000000000000F07F729E01000074729F01000062687C8868267D72A00100008A06B8C05670E97F6A950100007368424B01687E686D686E4B008572A101000068708772A20100005272A3010000284B014B024B028672A4010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A50100007472A601000062682B682C6885686D686E4B008572A701000068708772A80100005272A9010000284B014B024B028672AA010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0100007472AC01000062756268424B0168254E682B682C68524E756268424B0168436848298172AD0100007D72AE0100002868267D72AF0100008A0628C85670E97F6A920100007368424B026825686D686E4B008572B001000068708772B10100005272B2010000284B014B034B038672B30100006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B40100007472B501000062682B682C68524E7562756268424B016843685D75628A0690A35B70E97F68B1298172B60100007D72B7010000286838685D68267D72B801000068424B0168254E682B682C68524E68B568B6298172B90100007D72BA0100002868267D72BB0100008A0690A35B70E97F6AB60100007368424B01682B682C68524E756275628A0698315770E97F6828298172BC0100007D72BD01000028682B682C682D4B02682E4B0268267D72BE0100006830685D68424B0168436822298172BF0100007D72C00100002868254E68267D72C1010000288A0648C75970E97F6828298172C20100007D72C301000028682B682C682D4B02682E4B0268267D72C40100006830685D68424B0168436ABF01000075628A0658CA5970E97F6828298172C50100007D72C601000028682B682C682D4B02682E4B0268267D72C70100006830685D68424B0168436ABF01000075628A0698315770E97F6ABC0100007568424B0168476849682B682C68524E6853470000000000000000473FB55555555555558672C8010000756275628A0678A96070E97F6828298172C90100007D72CA01000028682B682C682D4B02682E4B0268267D72CB0100008A0640A26070E97F6828298172CC0100007D72CD01000028682B682C682D4B02682E4B0268267D72CE010000288A0660AF6070E97F6835298172CF0100007D72D00100002868386ACC01000068267D72D1010000288A0680305370E97F6828298172D20100007D72D301000028682B682C682D4B02682E4B0268267D72D401000068306ACF01000068424B0268436822298172D50100007D72D60100002868254E68267D72D70100008A0680305370E97F6AD20100007368424B0168476849682B682C68524E68534B00473FB33333333333348672D8010000756275628A0650255C70E97F6828298172D90100007D72DA01000028682B682C682D4B02682E4B0268267D72DB01000068306ACF01000068424B0268436822298172DC0100007D72DD0100002868254E68267D72DE0100008A0650255C70E97F6AD90100007368424B0168476849682B682C68524E68534B00473FB33333333333348672DF010000756275628A06B8775270E97F6828298172E00100007D72E101000028682B682C682D4B02682E4B0268267D72E201000068306ACF01000068424B0268436822298172E30100007D72E40100002868254E68267D72E50100008A06B8775270E97F6AE00100007368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E398672E6010000756275628A06E8395370E97F6828298172E70100007D72E801000028682B682C682D4B02682E4B0268267D72E901000068306ACF01000068424B0268436822298172EA0100007D72EB0100002868254E68267D72EC0100008A06E8395370E97F6AE70100007368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E398672ED010000756275628A06103E5370E97F6828298172EE0100007D72EF01000028682B682C682D4B02682E4B0268267D72F001000068306ACF01000068424B0268436822298172F10100007D72F20100002868254E68267D72F30100008A06103E5370E97F6AEE0100007368424B0168476849682B682C68524E68534B0047BFB33333333333348672F4010000756275628A0630765270E97F6828298172F50100007D72F601000028682B682C682D4B02682E4B0268267D72F701000068306ACF01000068424B0268436822298172F80100007D72F90100002868254E68267D72FA0100008A0630765270E97F6AF50100007368424B0168476849682B682C68524E68534B00473FB8E38E38E38E398672FB010000756275628A06882C5C70E97F6828298172FC0100007D72FD01000028682B682C682D4B02682E4B0268267D72FE01000068306ACF01000068424B0268436822298172FF0100007D72000200002868254E68267D72010200008A06882C5C70E97F6AFC0100007368424B0168476849682B682C68524E68534B0047BFB3333333333334867202020000756275628A0698385370E97F6828298172030200007D720402000028682B682C682D4B02682E4B0268267D720502000068306ACF01000068424B0268436822298172060200007D72070200002868254E68267D72080200008A0698385370E97F6A030200007368424B0168476849682B682C68524E68534B00473FB8E38E38E38E39867209020000756275627568424B0258070000005F616666696E65720A0200004E682B682C68B5685D75628A0660A86070E97F685B756830636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A720B0200002981720C0200007D720D02000028682E4B0258050000006368696C64720E02000068B12981720F0200007D721002000028683868B6298172110200007D72120200002868267D72130200008A06A8145C70E97F6A0F0200007368424B01682B682C68524E756268267D72140200008A0658CA5F70E97F6A0C0200007368424B0168254E682B682C68524E68B568B6298172150200007D72160200002868267D72170200008A06A8145C70E97F6A0F0200007368424B01682B682C68524E756275625807000000706172656E747372180200007D7219020000288A0610C75F70E97F68632981721A0200007D721B0200002868267D721C0200008A06D0CF5F70E97F636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A721D0200002981721E0200007D721F0200002868267D72200200008A0678A96070E97F6AC90100007358060000005F626F78696E72210200006A1A02000068424B026825686D686E4B008572220200006870877223020000527224020000284B014B034B038672250200006877894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F722602000074722702000062682B682C68524E75627368424B0268676A0C020000682B682C68686869298172280200007D722902000028686C686D686E4B0085722A020000687087722B02000052722C020000284B014B0285722D0200006877894310000000000000F07F000000000000F07F722E02000074722F02000062687C8868267D72300200008A0610C75F70E97F6A1A0200007368424B02687E686D686E4B008572310200006870877232020000527233020000284B014B024B02867234020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723502000074723602000062682B682C6885686D686E4B008572370200006870877238020000527239020000284B014B024B0286723A020000687789432000000000000022C000000000000000000000000000A06740000000C0CA473B41723B02000074723C0200006275626885686D686E4B0085723D020000687087723E02000052723F020000284B014B024B02867240020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72410200007472420200006275628A0640A26070E97F6ACC01000075682D4B02756268424B0268436AC901000075627368306A1E02000068424B026843685D75628A0658C35670E97F6828298172430200007D724402000028682B682C682D4B02682E4B0268267D72450200008A0658CA5670E97F6863298172460200007D72470200002868267D724802000068424B0168676A43020000682B682C68686869298172490200007D724A02000028686C686D686E4B0085724B020000687087724C02000052724D020000284B014B0285724E0200006877894310000000000000F07F000000000000F07F724F02000074725002000062687C8868267D72510200008A0658CA5670E97F6A460200007368424B01687E686D686E4B008572520200006870877253020000527254020000284B014B024B02867255020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725602000074725702000062682B682C6885686D686E4B00857258020000687087725902000052725A020000284B014B024B0286725B020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725C02000074725D02000062756268854E756273683068282981725E0200007D725F02000028682B682C682D4B02682E4B0268267D72600200008A0658C35670E97F6A430200007368306831298172610200007D72620200002868267D72630200008A0648C75670E97F6A5E0200007368926869298172640200007D726502000028686C686D686E4B008572660200006870877267020000527268020000284B014B028572690200006877894310000000000000F07F000000000000F07F726A02000074726B02000062687C8868267D726C0200008A0650C55670E97F6A610200007368424B01687E686D686E4B0085726D020000687087726E02000052726F020000284B014B024B02867270020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727102000074727202000062682B682C6885686D686E4B008572730200006870877274020000527275020000284B014B024B02867276020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727702000074727802000062756268424B0168254E682B682C68524E756268424B0168436848298172790200007D727A0200002868267D727B0200008A0648C75670E97F6A5E0200007368424B026825686D686E4B0085727C020000687087727D02000052727E020000284B014B034B0386727F0200006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728002000074728102000062682B682C68524E7562756268424B016843685D75628A06F00E5F70E97F68B1298172820200007D7283020000286838685D68267D728402000068424B0168254E682B682C68524E68B568B6298172850200007D72860200002868267D72870200008A06F00E5F70E97F6A820200007368424B01682B682C68524E756275628A06203A5D70E97F6828298172880200007D728902000028682B682C682D4B02682E4B0268267D728A0200008A06E03B5D70E97F68632981728B0200007D728C0200002868267D728D02000068424B0168676A88020000682B682C686868692981728E0200007D728F02000028686C686D686E4B008572900200006870877291020000527292020000284B014B028572930200006877894310000000000000F07F000000000000F07F729402000074729502000062687C8868267D72960200008A06E03B5D70E97F6A8B0200007368424B01687E686D686E4B008572970200006870877298020000527299020000284B014B024B0286729A020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729B02000074729C02000062682B682C6885686D686E4B0085729D020000687087729E02000052729F020000284B014B024B028672A0020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A10200007472A202000062756268854E75627368306828298172A30200007D72A402000028682B682C682D4B02682E4B0268267D72A50200008A06203A5D70E97F6A880200007368306831298172A60200007D72A70200002868267D72A80200008A0608395D70E97F6AA30200007368926869298172A90200007D72AA02000028686C686D686E4B008572AB02000068708772AC0200005272AD020000284B014B028572AE0200006877894310000000000000F07F000000000000F07F72AF0200007472B002000062687C8868267D72B10200008A06183C5D70E97F6AA60200007368424B01687E686D686E4B008572B202000068708772B30200005272B4020000284B014B024B028672B5020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B60200007472B702000062682B682C6885686D686E4B008572B802000068708772B90200005272BA020000284B014B024B028672BB020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BC0200007472BD02000062756268424B0168254E682B682C68524E756268424B0168436848298172BE0200007D72BF0200002868267D72C00200008A0608395D70E97F6AA30200007368424B026825686D686E4B008572C102000068708772C20200005272C3020000284B014B034B038672C40200006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50200007472C602000062682B682C68524E7562756268424B016843685D75628A06986F5C70E97F6828298172C70200007D72C802000028682B682C682D4B02682E4B0268267D72C90200008A06E0645C70E97F6863298172CA0200007D72CB0200002868267D72CC02000068424B0168676AC7020000682B682C68686869298172CD0200007D72CE02000028686C686D686E4B008572CF02000068708772D00200005272D1020000284B014B028572D20200006877894310000000000000F07F000000000000F07F72D30200007472D402000062687C8868267D72D50200008A06E0645C70E97F6ACA0200007368424B01687E686D686E4B008572D602000068708772D70200005272D8020000284B014B024B028672D9020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0200007472DB02000062682B682C6885686D686E4B008572DC02000068708772DD0200005272DE020000284B014B024B028672DF020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E00200007472E102000062756268854E75627368306828298172E20200007D72E302000028682B682C682D4B02682E4B0268267D72E40200008A06986F5C70E97F6AC70200007368306831298172E50200007D72E60200002868267D72E70200008A06F86C5C70E97F6AE20200007368926869298172E80200007D72E902000028686C686D686E4B008572EA02000068708772EB0200005272EC020000284B014B028572ED0200006877894310000000000000F07F000000000000F07F72EE0200007472EF02000062687C8868267D72F00200008A06A06D5C70E97F6AE50200007368424B01687E686D686E4B008572F102000068708772F20200005272F3020000284B014B024B028672F4020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F50200007472F602000062682B682C6885686D686E4B008572F702000068708772F80200005272F9020000284B014B024B028672FA020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FB0200007472FC02000062756268424B0168254E682B682C68524E756268424B0168436848298172FD0200007D72FE0200002868267D72FF0200008A06F86C5C70E97F6AE20200007368424B026825686D686E4B008572000300006870877201030000527202030000284B014B034B038672030300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720403000074720503000062682B682C68524E7562756268424B016843685D75628A06F02E5B70E97F6828298172060300007D720703000028682B682C682D4B02682E4B0268267D72080300008A06282F5B70E97F6863298172090300007D720A0300002868267D720B03000068424B0168676A06030000682B682C686868692981720C0300007D720D03000028686C686D686E4B0085720E030000687087720F030000527210030000284B014B028572110300006877894310000000000000F07F000000000000F07F721203000074721303000062687C8868267D72140300008A06282F5B70E97F6A090300007368424B01687E686D686E4B008572150300006870877216030000527217030000284B014B024B02867218030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721903000074721A03000062682B682C6885686D686E4B0085721B030000687087721C03000052721D030000284B014B024B0286721E030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721F03000074722003000062756268854E75627368306828298172210300007D722203000028682B682C682D4B02682E4B0268267D72230300008A06F02E5B70E97F6A060300007368306831298172240300007D72250300002868267D72260300008A06602F5B70E97F6A210300007368926869298172270300007D722803000028686C686D686E4B00857229030000687087722A03000052722B030000284B014B0285722C0300006877894310000000000000F07F000000000000F07F722D03000074722E03000062687C8868267D722F0300008A0698715270E97F6A240300007368424B01687E686D686E4B008572300300006870877231030000527232030000284B014B024B02867233030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723403000074723503000062682B682C6885686D686E4B008572360300006870877237030000527238030000284B014B024B02867239030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723A03000074723B03000062756268424B0168254E682B682C68524E756268424B01684368482981723C0300007D723D0300002868267D723E0300008A06602F5B70E97F6A210300007368424B026825686D686E4B0085723F0300006870877240030000527241030000284B014B034B038672420300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724303000074724403000062682B682C68524E7562756268424B016843685D75628A0660315D70E97F6828298172450300007D724603000028682B682C682D4B02682E4B0268267D72470300008A0648305D70E97F6863298172480300007D72490300002868267D724A03000068424B0168676A45030000682B682C686868692981724B0300007D724C03000028686C686D686E4B0085724D030000687087724E03000052724F030000284B014B028572500300006877894310000000000000F07F000000000000F07F725103000074725203000062687C8868267D72530300008A0648305D70E97F6A480300007368424B01687E686D686E4B008572540300006870877255030000527256030000284B014B024B02867257030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725803000074725903000062682B682C6885686D686E4B0085725A030000687087725B03000052725C030000284B014B024B0286725D030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725E03000074725F03000062756268854E75627368306828298172600300007D726103000028682B682C682D4B02682E4B0268267D72620300008A0660315D70E97F6A450300007368306831298172630300007D72640300002868267D72650300008A0658335D70E97F6A600300007368926869298172660300007D726703000028686C686D686E4B00857268030000687087726903000052726A030000284B014B0285726B0300006877894310000000000000F07F000000000000F07F726C03000074726D03000062687C8868267D726E0300008A06F0176170E97F6A630300007368424B01687E686D686E4B0085726F0300006870877270030000527271030000284B014B024B02867272030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727303000074727403000062682B682C6885686D686E4B008572750300006870877276030000527277030000284B014B024B02867278030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727903000074727A03000062756268424B0168254E682B682C68524E756268424B01684368482981727B0300007D727C0300002868267D727D0300008A0658335D70E97F6A600300007368424B026825686D686E4B0085727E030000687087727F030000527280030000284B014B034B038672810300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728203000074728303000062682B682C68524E7562756268424B016843685D75628A0650A55B70E97F6828298172840300007D728503000028682B682C682D4B02682E4B0268267D72860300008A0648A75B70E97F6863298172870300007D72880300002868267D728903000068424B0168676A84030000682B682C686868692981728A0300007D728B03000028686C686D686E4B0085728C030000687087728D03000052728E030000284B014B0285728F0300006877894310000000000000F07F000000000000F07F729003000074729103000062687C8868267D72920300008A0648A75B70E97F6A870300007368424B01687E686D686E4B008572930300006870877294030000527295030000284B014B024B02867296030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729703000074729803000062682B682C6885686D686E4B00857299030000687087729A03000052729B030000284B014B024B0286729C030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729D03000074729E03000062756268854E756273683068282981729F0300007D72A003000028682B682C682D4B02682E4B0268267D72A10300008A0650A55B70E97F6A840300007368306831298172A20300007D72A30300002868267D72A40300008A06C0A55B70E97F6A9F0300007368926869298172A50300007D72A603000028686C686D686E4B008572A703000068708772A80300005272A9030000284B014B028572AA0300006877894310000000000000F07F000000000000F07F72AB0300007472AC03000062687C8868267D72AD0300008A06A0AD5B70E97F6AA20300007368424B01687E686D686E4B008572AE03000068708772AF0300005272B0030000284B014B024B028672B1030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B20300007472B303000062682B682C6885686D686E4B008572B403000068708772B50300005272B6030000284B014B024B028672B7030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B80300007472B903000062756268424B0168254E682B682C68524E756268424B0168436848298172BA0300007D72BB0300002868267D72BC0300008A06C0A55B70E97F6A9F0300007368424B026825686D686E4B008572BD03000068708772BE0300005272BF030000284B014B034B038672C00300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C10300007472C203000062682B682C68524E7562756268424B016843685D75628A0648C75970E97F6AC20100008A06707B5970E97F68B1298172C30300007D72C403000028683868B6298172C50300007D72C60300002868267D72C70300008A06707B5970E97F6AC30300007368424B01682B682C68524E756268267D72C803000068424B0168254E682B682C68524E68B5685D75628A06A81B5C70E97F6828298172C90300007D72CA03000028682B682C682D4B02682E4B0268267D72CB0300008A06C01C5C70E97F6863298172CC0300007D72CD0300002868267D72CE03000068424B0168676AC9030000682B682C68686869298172CF0300007D72D003000028686C686D686E4B008572D103000068708772D20300005272D3030000284B014B028572D40300006877894310000000000000F07F000000000000F07F72D50300007472D603000062687C8868267D72D70300008A06C01C5C70E97F6ACC0300007368424B01687E686D686E4B008572D803000068708772D90300005272DA030000284B014B024B028672DB030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0300007472DD03000062682B682C6885686D686E4B008572DE03000068708772DF0300005272E0030000284B014B024B028672E1030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E20300007472E303000062756268854E75627368306828298172E40300007D72E503000028682B682C682D4B02682E4B0268267D72E60300008A06A81B5C70E97F6AC90300007368306831298172E70300007D72E80300002868267D72E90300008A0608195C70E97F6AE40300007368926869298172EA0300007D72EB03000028686C686D686E4B008572EC03000068708772ED0300005272EE030000284B014B028572EF0300006877894310000000000000F07F000000000000F07F72F00300007472F103000062687C8868267D72F20300008A0668165C70E97F6AE70300007368424B01687E686D686E4B008572F303000068708772F40300005272F5030000284B014B024B028672F6030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F70300007472F803000062682B682C6885686D686E4B008572F903000068708772FA0300005272FB030000284B014B024B028672FC030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FD0300007472FE03000062756268424B0168254E682B682C68524E756268424B0168436848298172FF0300007D72000400002868267D72010400008A0608195C70E97F6AE40300007368424B026825686D686E4B008572020400006870877203040000527204040000284B014B034B038672050400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720604000074720704000062682B682C68524E7562756268424B016843685D75628A0668665D70E97F6828298172080400007D720904000028682B682C682D4B02682E4B0268267D720A0400008A0688CC5970E97F68632981720B0400007D720C0400002868267D720D04000068424B0168676A08040000682B682C686868692981720E0400007D720F04000028686C686D686E4B008572100400006870877211040000527212040000284B014B028572130400006877894310000000000000F07F000000000000F07F721404000074721504000062687C8868267D72160400008A0688CC5970E97F6A0B0400007368424B01687E686D686E4B008572170400006870877218040000527219040000284B014B024B0286721A040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721B04000074721C04000062682B682C6885686D686E4B0085721D040000687087721E04000052721F040000284B014B024B02867220040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F722104000074722204000062756268854E75627368306828298172230400007D722404000028682B682C682D4B02682E4B0268267D72250400008A0668665D70E97F6A080400007368306831298172260400007D72270400002868267D72280400008A06206A5D70E97F6A230400007368926869298172290400007D722A04000028686C686D686E4B0085722B040000687087722C04000052722D040000284B014B0285722E0400006877894310000000000000F07F000000000000F07F722F04000074723004000062687C8868267D72310400008A0640695D70E97F6A260400007368424B01687E686D686E4B008572320400006870877233040000527234040000284B014B024B02867235040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723604000074723704000062682B682C6885686D686E4B00857238040000687087723904000052723A040000284B014B024B0286723B040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723C04000074723D04000062756268424B0168254E682B682C68524E756268424B01684368482981723E0400007D723F0400002868267D72400400008A06206A5D70E97F6A230400007368424B026825686D686E4B008572410400006870877242040000527243040000284B014B034B038672440400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724504000074724604000062682B682C68524E7562756268424B016843685D75628A06C0CC5670E97F6828298172470400007D724804000028682B682C682D4B02682E4B0268267D72490400008A0618CC5670E97F68632981724A0400007D724B0400002868267D724C04000068424B0168676A47040000682B682C686868692981724D0400007D724E04000028686C686D686E4B0085724F0400006870877250040000527251040000284B014B028572520400006877894310000000000000F07F000000000000F07F725304000074725404000062687C8868267D72550400008A0618CC5670E97F6A4A0400007368424B01687E686D686E4B008572560400006870877257040000527258040000284B014B024B02867259040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725A04000074725B04000062682B682C6885686D686E4B0085725C040000687087725D04000052725E040000284B014B024B0286725F040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726004000074726104000062756268854E75627368306828298172620400007D726304000028682B682C682D4B02682E4B0268267D72640400008A06C0CC5670E97F6A470400007368306831298172650400007D72660400002868267D72670400008A0660B8167CE97F6A620400007368926869298172680400007D726904000028686C686D686E4B0085726A040000687087726B04000052726C040000284B014B0285726D0400006877894310000000000000F07F000000000000F07F726E04000074726F04000062687C8868267D72700400008A0640625C70E97F6A650400007368424B01687E686D686E4B008572710400006870877272040000527273040000284B014B024B02867274040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727504000074727604000062682B682C6885686D686E4B008572770400006870877278040000527279040000284B014B024B0286727A040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727B04000074727C04000062756268424B0168254E682B682C68524E756268424B01684368482981727D0400007D727E0400002868267D727F0400008A0660B8167CE97F6A620400007368424B026825686D686E4B008572800400006870877281040000527282040000284B014B034B038672830400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728404000074728504000062682B682C68524E7562756268424B016843685D75628A06902A5B70E97F6828298172860400007D728704000028682B682C682D4B02682E4B0268267D72880400008A0690135870E97F6863298172890400007D728A0400002868267D728B04000068424B0168676A86040000682B682C686868692981728C0400007D728D04000028686C686D686E4B0085728E040000687087728F040000527290040000284B014B028572910400006877894310000000000000F07F000000000000F07F729204000074729304000062687C8868267D72940400008A0690135870E97F6A890400007368424B01687E686D686E4B008572950400006870877296040000527297040000284B014B024B02867298040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729904000074729A04000062682B682C6885686D686E4B0085729B040000687087729C04000052729D040000284B014B024B0286729E040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729F0400007472A004000062756268854E75627368306828298172A10400007D72A204000028682B682C682D4B02682E4B0268267D72A30400008A06902A5B70E97F6A860400007368306831298172A40400007D72A50400002868267D72A60400008A06C02C5B70E97F6AA10400007368926869298172A70400007D72A804000028686C686D686E4B008572A904000068708772AA0400005272AB040000284B014B028572AC0400006877894310000000000000F07F000000000000F07F72AD0400007472AE04000062687C8868267D72AF0400008A06A82B5B70E97F6AA40400007368424B01687E686D686E4B008572B004000068708772B10400005272B2040000284B014B024B028672B3040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B40400007472B504000062682B682C6885686D686E4B008572B604000068708772B70400005272B8040000284B014B024B028672B9040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0400007472BB04000062756268424B0168254E682B682C68524E756268424B0168436848298172BC0400007D72BD0400002868267D72BE0400008A06C02C5B70E97F6AA10400007368424B026825686D686E4B008572BF04000068708772C00400005272C1040000284B014B034B038672C20400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C30400007472C404000062682B682C68524E7562756268424B016843685D75628A0670345D70E97F6828298172C50400007D72C604000028682B682C682D4B02682E4B0268267D72C70400008A06A8345D70E97F6863298172C80400007D72C90400002868267D72CA04000068424B0168676AC5040000682B682C68686869298172CB0400007D72CC04000028686C686D686E4B008572CD04000068708772CE0400005272CF040000284B014B028572D00400006877894310000000000000F07F000000000000F07F72D10400007472D204000062687C8868267D72D30400008A06A8345D70E97F6AC80400007368424B01687E686D686E4B008572D404000068708772D50400005272D6040000284B014B024B028672D7040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D80400007472D904000062682B682C6885686D686E4B008572DA04000068708772DB0400005272DC040000284B014B024B028672DD040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0400007472DF04000062756268854E75627368306828298172E00400007D72E104000028682B682C682D4B02682E4B0268267D72E20400008A0670345D70E97F6AC50400007368306831298172E30400007D72E40400002868267D72E50400008A0638345D70E97F6AE00400007368926869298172E60400007D72E704000028686C686D686E4B008572E804000068708772E90400005272EA040000284B014B028572EB0400006877894310000000000000F07F000000000000F07F72EC0400007472ED04000062687C8868267D72EE0400008A06B8305D70E97F6AE30400007368424B01687E686D686E4B008572EF04000068708772F00400005272F1040000284B014B024B028672F2040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F30400007472F404000062682B682C6885686D686E4B008572F504000068708772F60400005272F7040000284B014B024B028672F8040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F90400007472FA04000062756268424B0168254E682B682C68524E756268424B0168436848298172FB0400007D72FC0400002868267D72FD0400008A0638345D70E97F6AE00400007368424B026825686D686E4B008572FE04000068708772FF040000527200050000284B014B034B038672010500006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720205000074720305000062682B682C68524E7562756268424B016843685D75628A0608625C70E97F6828298172040500007D720505000028682B682C682D4B02682E4B0268267D72060500008A0698685C70E97F6863298172070500007D72080500002868267D720905000068424B0168676A04050000682B682C686868692981720A0500007D720B05000028686C686D686E4B0085720C050000687087720D05000052720E050000284B014B0285720F0500006877894310000000000000F07F000000000000F07F721005000074721105000062687C8868267D72120500008A0698685C70E97F6A070500007368424B01687E686D686E4B008572130500006870877214050000527215050000284B014B024B02867216050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721705000074721805000062682B682C6885686D686E4B00857219050000687087721A05000052721B050000284B014B024B0286721C050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721D05000074721E05000062756268854E756273683068282981721F0500007D722005000028682B682C682D4B02682E4B0268267D72210500008A0608625C70E97F6A040500007368306831298172220500007D72230500002868267D72240500008A0640695C70E97F6A1F0500007368926869298172250500007D722605000028686C686D686E4B008572270500006870877228050000527229050000284B014B0285722A0500006877894310000000000000F07F000000000000F07F722B05000074722C05000062687C8868267D722D0500008A06E8625C70E97F6A220500007368424B01687E686D686E4B0085722E050000687087722F050000527230050000284B014B024B02867231050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723205000074723305000062682B682C6885686D686E4B008572340500006870877235050000527236050000284B014B024B02867237050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723805000074723905000062756268424B0168254E682B682C68524E756268424B01684368482981723A0500007D723B0500002868267D723C0500008A0640695C70E97F6A1F0500007368424B026825686D686E4B0085723D050000687087723E05000052723F050000284B014B034B038672400500006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724105000074724205000062682B682C68524E7562756268424B016843685D75628A0660AF6070E97F6ACF0100008A0638345370E97F6828298172430500007D724405000028682B682C682D4B02682E4B0268267D72450500008A0618355370E97F6863298172460500007D72470500002868267D724805000068424B0168676A43050000682B682C68686869298172490500007D724A05000028686C686D686E4B0085724B050000687087724C05000052724D050000284B014B0285724E0500006877894310000000000000F07F000000000000F07F724F05000074725005000062687C8868267D72510500008A0618355370E97F6A460500007368424B01687E686D686E4B008572520500006870877253050000527254050000284B014B024B02867255050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725605000074725705000062682B682C6885686D686E4B00857258050000687087725905000052725A050000284B014B024B0286725B050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725C05000074725D05000062756268854E756273683068282981725E0500007D725F05000028682B682C682D4B02682E4B0268267D72600500008A0638345370E97F6A430500007368306831298172610500007D72620500002868267D72630500008A06E8325370E97F6A5E0500007368926869298172640500007D726505000028686C686D686E4B008572660500006870877267050000527268050000284B014B028572690500006877894310000000000000F07F000000000000F07F726A05000074726B05000062687C8868267D726C0500008A0690335370E97F6A610500007368424B01687E686D686E4B0085726D050000687087726E05000052726F050000284B014B024B02867270050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727105000074727205000062682B682C6885686D686E4B008572730500006870877274050000527275050000284B014B024B02867276050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727705000074727805000062756268424B0168254E682B682C68524E756268424B0168436848298172790500007D727A0500002868267D727B0500008A06E8325370E97F6A5E0500007368424B026825686D686E4B0085727C050000687087727D05000052727E050000284B014B034B0386727F0500006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728005000074728105000062682B682C68524E7562756268424B016843685D75628A0660A86070E97F685B8A0658CA5970E97F6AC50100007568926863298172820500007D72830500002868267D72840500008A0620CA5F70E97F685D7368424B0168676831298172850500007D72860500002868267D7287050000288A0630AD5B70E97F6863298172880500007D72890500002868267D728A0500008A0658AA5B70E97F68327368424B0168676A85050000682B682C686868692981728B0500007D728C05000028686C686D686E4B0085728D050000687087728E05000052728F050000284B014B028572900500006877894310000000000000F07F000000000000F07F729105000074729205000062687C8868267D72930500008A0630AD5B70E97F6A880500007368424B00687E686D686E4B008572940500006870877295050000527296050000284B014B024B028672970500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F729805000074729905000062682B682C6885686D686E4B0085729A050000687087729B05000052729C050000284B014B024B0286729D0500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F729E05000074729F05000062756268854E75628A0608C25F70E97F6A820500007568926863298172A00500007D72A10500002868267D72A20500008A066021BB73E97F6A850500007368424B0168676849682B682C68686869298172A30500007D72A405000028686C686D686E4B008572A505000068708772A60500005272A7050000284B014B028572A80500006877894310000000000000F07F000000000000F07F72A90500007472AA05000062687C8868267D72AB0500008A06980FBA73E97F6AA00500007368424B01687E686D686E4B008572AC05000068708772AD0500005272AE050000284B014B024B028672AF0500006877894320000000000000000000000000000000009A99999999991940333333333333134072B00500007472B105000062682B682C6885686D686E4B008572B205000068708772B30500005272B4050000284B014B024B028672B50500006877894320000000000000000000000000000000009A99999999991940333333333333134072B60500007472B705000062756268854E756268424B0168254E682B682C68524E7562682B682C68686869298172B80500007D72B905000028686C686D686E4B008572BA05000068708772BB0500005272BC050000284B014B028572BD0500006877894310000000000000F07F000000000000F07F72BE0500007472BF05000062687C8868267D72C00500008A0608C25F70E97F6A820500007368424B00687E686D686E4B008572C105000068708772C20500005272C3050000284B014B024B028672C40500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72C50500007472C605000062682B682C6885686D686E4B008572C705000068708772C80500005272C9050000284B014B024B028672CA0500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72CB0500007472CC05000062756268854E756268424B0168254E682B682C68524E756268267D72CD050000288A06D04F5A70E97F6828298172CE0500007D72CF05000028682B682C682D4B02682E4B0268267D72D00500006830685B68424B0268436822298172D10500007D72D20500002868254E68267D72D30500008A06D04F5A70E97F6ACE0500007368424B0168476849682B682C68524E6853473FB33333333333344B008672D4050000756275628A06B84E5A70E97F6828298172D50500007D72D605000028682B682C682D4B02682E4B0268267D72D70500006830685B68424B0268436822298172D80500007D72D90500002868254E68267D72DA0500008A06B84E5A70E97F6AD50500007368424B0168476849682B682C68524E6853473FB8E38E38E38E394B008672DB050000756275628A06F8655D70E97F6828298172DC0500007D72DD05000028682B682C682D4B02682E4B0268267D72DE0500006830685B68424B0268436822298172DF0500007D72E00500002868254E68267D72E10500008A06F8655D70E97F6ADC0500007368424B0168476849682B682C68524E685347BFB33333333333344B008672E2050000756275628A0648605D70E97F6828298172E30500007D72E405000028682B682C682D4B02682E4B0268267D72E50500006830685B68424B0268436822298172E60500007D72E70500002868254E68267D72E80500008A0648605D70E97F6AE30500007368424B0168476849682B682C68524E6853473FB33333333333344B008672E9050000756275628A0638445A70E97F6828298172EA0500007D72EB05000028682B682C682D4B02682E4B0268267D72EC0500006830685B68424B0268436822298172ED0500007D72EE0500002868254E68267D72EF0500008A0638445A70E97F6AEA0500007368424B0168476849682B682C68524E685347BFB8E38E38E38E394B008672F0050000756275628A0688755270E97F68588A06584A5A70E97F6828298172F10500007D72F205000028682B682C682D4B02682E4B0268267D72F30500006830685B68424B0268436822298172F40500007D72F50500002868254E68267D72F60500008A06584A5A70E97F6AF10500007368424B0168476849682B682C68524E685347BFB33333333333344B008672F7050000756275628A0658735270E97F6828298172F80500007D72F905000028682B682C682D4B02682E4B0268267D72FA0500006830685B68424B0268436822298172FB0500007D72FC0500002868254E68267D72FD0500008A0658735270E97F6AF80500007368424B0168476849682B682C68524E685347BFB8E38E38E38E394B008672FE050000756275627568424B026A0A0200004E682B682C68B56ACC010000756268424B026843685575627368424B0168476849682B682C68524E6853473FB8E38E38E38E394B008672FF05000075628A06D82D5C70E97F6ADC0100008A06E8495A70E97F6AD10500008A0660C15A70E97F6822298172000600007D72010600002868254E68267D72020600008A06A8CB5A70E97F6828298172030600007D720406000028682B682C682D4B02682E4B0268267D72050600006830683668424B0268436A0006000075627368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E3986720606000075628A0688055F70E97F6822298172070600007D72080600002868254E68267D72090600008A06E00B5F70E97F68282981720A0600007D720B06000028682B682C682D4B02682E4B0268267D720C0600006830683C68424B0268436A0706000075627368424B0168476849682B682C68524E6853473FB8E38E38E38E394B0086720D06000075628A06C8AA6070E97F68222981720E0600007D720F0600002868254E68267D72100600008A0620A36070E97F6828298172110600007D721206000028682B682C682D4B02682E4B0268267D72130600006830683668424B0268436A0E06000075627368424B0168476849682B682C68524E68534B00473FB333333333333486721406000075628A06E8025F70E97F6822298172150600007D72160600002868254E68267D72170600008A06880C5F70E97F6828298172180600007D721906000028682B682C682D4B02682E4B0268267D721A0600006830683668424B0268436A1506000075627368424B0168476849682B682C68524E68534B0047BFB333333333333486721B06000075628A06903A5370E97F6A060200008A0638045F70E97F68222981721C0600007D721D0600002868254E68267D721E0600008A0688FC6170E97F68282981721F0600007D722006000028682B682C682D4B02682E4B0268267D72210600006830683668424B0268436A1C06000075627368424B0168476849682B682C68524E68534B00473FB333333333333486722206000075628A06980FBA73E97F6AA00500008A06A82B5C70E97F6AFF0100008A06C8035F70E97F6822298172230600007D72240600002868254E68267D72250600008A06D0015F70E97F6828298172260600007D722706000028682B682C682D4B02682E4B0268267D72280600006830683C68424B0268436A2306000075627368424B0168476849682B682C68524E685347BFB8E38E38E38E394B0086722906000075628A0668BD5370E97F68222981722A0600007D722B0600002868254E68267D722C0600008A0678B25370E97F68282981722D0600007D722E06000028682B682C682D4B02682E4B0268267D722F0600006830683C68424B0268436A2A06000075627368424B0168476849682B682C68524E6853473FB33333333333344B0086723006000075628A0610FE6170E97F68238A06183C5370E97F6AF10100008A0650CC5870E97F6ABF0100008A06A04D5A70E97F6AD80500008A0690536170E97F6822298172310600007D72320600002868254E68267D72330600008A0678526170E97F6828298172340600007D723506000028682B682C682D4B02682E4B0268267D72360600006830683C68424B0268436A3106000075627368424B0168476849682B682C68524E685347BFB33333333333344B0086723706000075628A0698516170E97F6822298172380600007D72390600002868254E68267D723A0600008A0668F66170E97F68282981723B0600007D723C06000028682B682C682D4B02682E4B0268267D723D0600006830683C68424B0268436A3806000075627368424B0168476849682B682C68524E6853473FB33333333333344B0086723E06000075628A06486E5D70E97F6AED0500008A06E829BB73E97F68222981723F0600007D72400600002868254E68267D72410600008A06C82ABB73E97F6828298172420600007D724306000028682B682C682D4B02682E4B0268267D72440600006830683668424B0268436A3F06000075627368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E3986724506000075628A0678725270E97F6AFB0500008A06A0BD5370E97F68448A0648B75370E97F6822298172460600007D72470600002868254E68267D72480600008A06D8B65370E97F6828298172490600007D724A06000028682B682C682D4B02682E4B0268267D724B0600006830683C68424B0268436A4606000075627368424B0168476849682B682C68524E6853473FB8E38E38E38E394B0086724C06000075628A0608225C70E97F6AEA0100008A06A84B5A70E97F6AF40500008A06A07D5270E97F6AE30100008A0638C45A70E97F68222981724D0600007D724E0600002868254E68267D724F0600008A0640C25F70E97F6828298172500600007D725106000028682B682C682D4B02682E4B0268267D72520600006830683668424B0268436A4D06000075627368424B0168476849682B682C68524E68534B00473FB8E38E38E38E3986725306000075628A06B8B05370E97F6822298172540600007D72550600002868254E68267D72560600008A06D0B85370E97F6828298172570600007D725806000028682B682C682D4B02682E4B0268267D72590600006830683C68424B0268436A5406000075627368424B0168476849682B682C68524E685347BFB33333333333344B0086725A06000075628A06A0665D70E97F6ADF0500008A06A0765270E97F6AF80100008A06F8AC6070E97F68222981725B0600007D725C0600002868254E68267D725D0600008A0618A56070E97F68282981725E0600007D725F06000028682B682C682D4B02682E4B0268267D72600600006830683668424B0268436A5B06000075627368424B0168476849682B682C68524E68534B0047BFB333333333333486726106000075628A0608695D70E97F6AE60500008A0628315370E97F6AD50100007568424B026825686D686E4B008572620600006870877263060000527264060000284B014B034B03867265060000687789434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F726606000074726706000062682B682C68524E7562682B682C68524E685347BFB8E38E38E38E394B00867268060000756275628A06E00B5F70E97F6A0A0600008A0678526170E97F6A340600008A06D0015F70E97F6A260600008A0678B25370E97F6A2D0600008A0668F66170E97F6A3B0600008A06D8B65370E97F6A490600008A06D0B85370E97F6A570600007568424B026A0A0200004E682B682C68B5683975627568306A0B020000298172690600007D726A06000028682E4B026A0E02000068B12981726B0600007D726C06000028683868B62981726D0600007D726E0600002868267D726F0600008A06602F6270E97F6A6B0600007368424B01682B682C68524E756268267D72700600008A0680505570E97F6A690600007368424B006825686D686E4B008572710600006870877272060000527273060000284B014B034B038672740600006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727506000074727606000062682B682C68524E68B568B6298172770600007D72780600002868267D72790600008A06602F6270E97F6A6B0600007368424B01682B682C68524E756275626A180200007D727A060000288A06D0AF5B70E97F68632981727B0600007D727C0600002868267D727D0600008A0680A05B70E97F6A1D0200002981727E0600007D727F0600002868267D72800600008A06F8555570E97F6828298172810600007D728206000028682B682C682D4B02682E4B0268267D72830600008A0668565570E97F68397368306A7E06000068424B02684368327562736A210200006A7B06000068424B026825686D686E4B008572840600006870877285060000527286060000284B014B034B038672870600006877894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F728806000074728906000062682B682C68524E75627368424B0268676A69060000682B682C686868692981728A0600007D728B06000028686C686D686E4B0085728C060000687087728D06000052728E060000284B014B0285728F0600006877894310000000000000F07F000000000000F07F729006000074729106000062687C8868267D72920600008A06D0AF5B70E97F6A7B0600007368424B02687E686D686E4B008572930600006870877294060000527295060000284B014B024B02867296060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729706000074729806000062682B682C6885686D686E4B00857299060000687087729A06000052729B060000284B014B024B0286729C06000068778943206666666666E653C00000000000000000CCCCCCCCCC7C8040CDCCCC0C67033B41729D06000074729E0600006275626885686D686E4B0085729F06000068708772A00600005272A1060000284B014B024B028672A2060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A30600007472A40600006275628A0668565570E97F683975682D4B02756268424B0268436A81060000756268267D72A5060000288A0640C25F70E97F6A500600008A06002BBB73E97F684F8A06A8CB5A70E97F6A030600008A06880C5F70E97F6A180600008A0688FC6170E97F6A1F0600008A06C82ABB73E97F6A420600008A0618A56070E97F6A5E0600008A0620A36070E97F6A110600007568424B026A0A0200004E682B682C68B5683275628A066028BB73E97F6828298172A60600007D72A706000028682B682C682D4B02682E4B0268267D72A80600008A06282FBB73E97F6863298172A90600007D72AA0600002868267D72AB06000068424B0168676AA6060000682B682C68686869298172AC0600007D72AD06000028686C686D686E4B008572AE06000068708772AF0600005272B0060000284B014B028572B10600006877894310000000000000F07F000000000000F07F72B20600007472B306000062687C8868267D72B40600008A06282FBB73E97F6AA90600007368424B01687E686D686E4B008572B506000068708772B60600005272B7060000284B014B024B028672B8060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B90600007472BA06000062682B682C6885686D686E4B008572BB06000068708772BC0600005272BD060000284B014B024B028672BE060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0600007472C006000062756268854E75627368306828298172C10600007D72C206000028682B682C682D4B02682E4B0268267D72C30600008A066028BB73E97F6AA60600007368306831298172C40600007D72C50600002868267D72C60600008A06A02DBB73E97F6AC10600007368926869298172C70600007D72C806000028686C686D686E4B008572C906000068708772CA0600005272CB060000284B014B028572CC0600006877894310000000000000F07F000000000000F07F72CD0600007472CE06000062687C8868267D72CF0600008A06D0286270E97F6AC40600007368424B01687E686D686E4B008572D006000068708772D10600005272D2060000284B014B024B028672D3060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D40600007472D506000062682B682C6885686D686E4B008572D606000068708772D70600005272D8060000284B014B024B028672D9060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0600007472DB06000062756268424B0168254E682B682C68524E756268424B0168436848298172DC0600007D72DD0600002868267D72DE0600008A06A02DBB73E97F6AC10600007368424B026825686D686E4B008572DF06000068708772E00600005272E1060000284B014B034B038672E20600006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E30600007472E406000062682B682C68524E7562756268424B016843683275628A06F8555570E97F6A810600008A0608226270E97F6828298172E50600007D72E606000028682B682C682D4B02682E4B0268267D72E70600008A0600246270E97F6863298172E80600007D72E90600002868267D72EA06000068424B0168676AE5060000682B682C68686869298172EB0600007D72EC06000028686C686D686E4B008572ED06000068708772EE0600005272EF060000284B014B028572F00600006877894310000000000000F07F000000000000F07F72F10600007472F206000062687C8868267D72F30600008A0600246270E97F6AE80600007368424B01687E686D686E4B008572F406000068708772F50600005272F6060000284B014B024B028672F7060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F80600007472F906000062682B682C6885686D686E4B008572FA06000068708772FB0600005272FC060000284B014B024B028672FD060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0600007472FF06000062756268854E75627368306828298172000700007D720107000028682B682C682D4B02682E4B0268267D72020700008A0608226270E97F6AE50600007368306831298172030700007D72040700002868267D72050700008A06D0216270E97F6A000700007368926869298172060700007D720707000028686C686D686E4B00857208070000687087720907000052720A070000284B014B0285720B0700006877894310000000000000F07F000000000000F07F720C07000074720D07000062687C8868267D720E0700008A06A8246270E97F6A030700007368424B01687E686D686E4B0085720F0700006870877210070000527211070000284B014B024B02867212070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721307000074721407000062682B682C6885686D686E4B008572150700006870877216070000527217070000284B014B024B02867218070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721907000074721A07000062756268424B0168254E682B682C68524E756268424B01684368482981721B0700007D721C0700002868267D721D0700008A06D0216270E97F6A000700007368424B026825686D686E4B0085721E070000687087721F070000527220070000284B014B034B038672210700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722207000074722307000062682B682C68524E7562756268424B016843683275628A0660286270E97F6828298172240700007D722507000028682B682C682D4B02682E4B0268267D72260700008A06D8266270E97F6863298172270700007D72280700002868267D722907000068424B0168676A24070000682B682C686868692981722A0700007D722B07000028686C686D686E4B0085722C070000687087722D07000052722E070000284B014B0285722F0700006877894310000000000000F07F000000000000F07F723007000074723107000062687C8868267D72320700008A06D8266270E97F6A270700007368424B01687E686D686E4B008572330700006870877234070000527235070000284B014B024B02867236070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723707000074723807000062682B682C6885686D686E4B00857239070000687087723A07000052723B070000284B014B024B0286723C070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723D07000074723E07000062756268854E756273683068282981723F0700007D724007000028682B682C682D4B02682E4B0268267D72410700008A0660286270E97F6A240700007368306831298172420700007D72430700002868267D72440700008A0610276270E97F6A3F0700007368926869298172450700007D724607000028686C686D686E4B008572470700006870877248070000527249070000284B014B0285724A0700006877894310000000000000F07F000000000000F07F724B07000074724C07000062687C8868267D724D0700008A0640296270E97F6A420700007368424B01687E686D686E4B0085724E070000687087724F070000527250070000284B014B024B02867251070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725207000074725307000062682B682C6885686D686E4B008572540700006870877255070000527256070000284B014B024B02867257070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725807000074725907000062756268424B0168254E682B682C68524E756268424B01684368482981725A0700007D725B0700002868267D725C0700008A0610276270E97F6A3F0700007368424B026825686D686E4B0085725D070000687087725E07000052725F070000284B014B034B038672600700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726107000074726207000062682B682C68524E7562756268424B016843683275628A0680905570E97F6828298172630700007D726407000028682B682C682D4B02682E4B0268267D72650700008A06F0905570E97F6863298172660700007D72670700002868267D726807000068424B0168676A63070000682B682C68686869298172690700007D726A07000028686C686D686E4B0085726B070000687087726C07000052726D070000284B014B0285726E0700006877894310000000000000F07F000000000000F07F726F07000074727007000062687C8868267D72710700008A06F0905570E97F6A660700007368424B01687E686D686E4B008572720700006870877273070000527274070000284B014B024B02867275070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727607000074727707000062682B682C6885686D686E4B00857278070000687087727907000052727A070000284B014B024B0286727B070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727C07000074727D07000062756268854E756273683068282981727E0700007D727F07000028682B682C682D4B02682E4B0268267D72800700008A0680905570E97F6A630700007368306831298172810700007D72820700002868267D72830700008A06D07F5F70E97F6A7E0700007368926869298172840700007D728507000028686C686D686E4B008572860700006870877287070000527288070000284B014B028572890700006877894310000000000000F07F000000000000F07F728A07000074728B07000062687C8868267D728C0700008A06607F5F70E97F6A810700007368424B01687E686D686E4B0085728D070000687087728E07000052728F070000284B014B024B02867290070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729107000074729207000062682B682C6885686D686E4B008572930700006870877294070000527295070000284B014B024B02867296070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729707000074729807000062756268424B0168254E682B682C68524E756268424B0168436848298172990700007D729A0700002868267D729B0700008A06D07F5F70E97F6A7E0700007368424B026825686D686E4B0085729C070000687087729D07000052729E070000284B014B034B0386729F0700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A00700007472A107000062682B682C68524E7562756268424B016843683275628A06A02D5670E97F6828298172A20700007D72A307000028682B682C682D4B02682E4B0268267D72A40700008A06102E5670E97F6863298172A50700007D72A60700002868267D72A707000068424B0168676AA2070000682B682C68686869298172A80700007D72A907000028686C686D686E4B008572AA07000068708772AB0700005272AC070000284B014B028572AD0700006877894310000000000000F07F000000000000F07F72AE0700007472AF07000062687C8868267D72B00700008A06102E5670E97F6AA50700007368424B01687E686D686E4B008572B107000068708772B20700005272B3070000284B014B024B028672B4070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B50700007472B607000062682B682C6885686D686E4B008572B707000068708772B80700005272B9070000284B014B024B028672BA070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BB0700007472BC07000062756268854E75627368306828298172BD0700007D72BE07000028682B682C682D4B02682E4B0268267D72BF0700008A06A02D5670E97F6AA20700007368306831298172C00700007D72C10700002868267D72C20700008A06302D5670E97F6ABD0700007368926869298172C30700007D72C407000028686C686D686E4B008572C507000068708772C60700005272C7070000284B014B028572C80700006877894310000000000000F07F000000000000F07F72C90700007472CA07000062687C8868267D72CB0700008A06C02C5670E97F6AC00700007368424B01687E686D686E4B008572CC07000068708772CD0700005272CE070000284B014B024B028672CF070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D00700007472D107000062682B682C6885686D686E4B008572D207000068708772D30700005272D4070000284B014B024B028672D5070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D60700007472D707000062756268424B0168254E682B682C68524E756268424B0168436848298172D80700007D72D90700002868267D72DA0700008A06302D5670E97F6ABD0700007368424B026825686D686E4B008572DB07000068708772DC0700005272DD070000284B014B034B038672DE0700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72DF0700007472E007000062682B682C68524E7562756268424B016843683275628A06A0965570E97F6828298172E10700007D72E207000028682B682C682D4B02682E4B0268267D72E30700008A0610975570E97F6863298172E40700007D72E50700002868267D72E607000068424B0168676AE1070000682B682C68686869298172E70700007D72E807000028686C686D686E4B008572E907000068708772EA0700005272EB070000284B014B028572EC0700006877894310000000000000F07F000000000000F07F72ED0700007472EE07000062687C8868267D72EF0700008A0610975570E97F6AE40700007368424B01687E686D686E4B008572F007000068708772F10700005272F2070000284B014B024B028672F3070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F40700007472F507000062682B682C6885686D686E4B008572F607000068708772F70700005272F8070000284B014B024B028672F9070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FA0700007472FB07000062756268854E75627368306828298172FC0700007D72FD07000028682B682C682D4B02682E4B0268267D72FE0700008A06A0965570E97F6AE10700007368306831298172FF0700007D72000800002868267D72010800008A0630965570E97F6AFC0700007368926869298172020800007D720308000028686C686D686E4B008572040800006870877205080000527206080000284B014B028572070800006877894310000000000000F07F000000000000F07F720808000074720908000062687C8868267D720A0800008A06C0955570E97F6AFF0700007368424B01687E686D686E4B0085720B080000687087720C08000052720D080000284B014B024B0286720E080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F720F08000074721008000062682B682C6885686D686E4B008572110800006870877212080000527213080000284B014B024B02867214080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721508000074721608000062756268424B0168254E682B682C68524E756268424B0168436848298172170800007D72180800002868267D72190800008A0630965570E97F6AFC0700007368424B026825686D686E4B0085721A080000687087721B08000052721C080000284B014B034B0386721D0800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721E08000074721F08000062682B682C68524E7562756268424B016843683275628A06D0215670E97F6828298172200800007D722108000028682B682C682D4B02682E4B0268267D72220800008A0640225670E97F6863298172230800007D72240800002868267D722508000068424B0168676A20080000682B682C68686869298172260800007D722708000028686C686D686E4B00857228080000687087722908000052722A080000284B014B0285722B0800006877894310000000000000F07F000000000000F07F722C08000074722D08000062687C8868267D722E0800008A0640225670E97F6A230800007368424B01687E686D686E4B0085722F0800006870877230080000527231080000284B014B024B02867232080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723308000074723408000062682B682C6885686D686E4B008572350800006870877236080000527237080000284B014B024B02867238080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723908000074723A08000062756268854E756273683068282981723B0800007D723C08000028682B682C682D4B02682E4B0268267D723D0800008A06D0215670E97F6A2008000073683068312981723E0800007D723F0800002868267D72400800008A0660215670E97F6A3B0800007368926869298172410800007D724208000028686C686D686E4B008572430800006870877244080000527245080000284B014B028572460800006877894310000000000000F07F000000000000F07F724708000074724808000062687C8868267D72490800008A06F0205670E97F6A3E0800007368424B01687E686D686E4B0085724A080000687087724B08000052724C080000284B014B024B0286724D080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724E08000074724F08000062682B682C6885686D686E4B008572500800006870877251080000527252080000284B014B024B02867253080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725408000074725508000062756268424B0168254E682B682C68524E756268424B0168436848298172560800007D72570800002868267D72580800008A0660215670E97F6A3B0800007368424B026825686D686E4B00857259080000687087725A08000052725B080000284B014B034B0386725C0800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725D08000074725E08000062682B682C68524E7562756268424B016843683275628A0698286270E97F68282981725F0800007D726008000028682B682C682D4B02682E4B0268267D72610800006830683268424B016843682375628A06984F5570E97F6828298172620800007D726308000028682B682C682D4B02682E4B0268267D72640800008A0648705370E97F6863298172650800007D72660800002868267D726708000068424B0168676A62080000682B682C68686869298172680800007D726908000028686C686D686E4B0085726A080000687087726B08000052726C080000284B014B0285726D0800006877894310000000000000F07F000000000000F07F726E08000074726F08000062687C8868267D72700800008A0648705370E97F6A650800007368424B01687E686D686E4B008572710800006870877272080000527273080000284B014B024B02867274080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727508000074727608000062682B682C6885686D686E4B008572770800006870877278080000527279080000284B014B024B0286727A080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727B08000074727C08000062756268854E756273683068282981727D0800007D727E08000028682B682C682D4B02682E4B0268267D727F0800008A06984F5570E97F6A620800007368306831298172800800007D72810800002868267D72820800008A06284F5570E97F6A7D0800007368926869298172830800007D728408000028686C686D686E4B008572850800006870877286080000527287080000284B014B028572880800006877894310000000000000F07F000000000000F07F728908000074728A08000062687C8868267D728B0800008A06B84E5570E97F6A800800007368424B01687E686D686E4B0085728C080000687087728D08000052728E080000284B014B024B0286728F080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729008000074729108000062682B682C6885686D686E4B008572920800006870877293080000527294080000284B014B024B02867295080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729608000074729708000062756268424B0168254E682B682C68524E756268424B0168436848298172980800007D72990800002868267D729A0800008A06284F5570E97F6A7D0800007368424B026825686D686E4B0085729B080000687087729C08000052729D080000284B014B034B0386729E0800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729F0800007472A008000062682B682C68524E7562756268424B016843683275628A06B8276270E97F6828298172A10800007D72A208000028682B682C682D4B02682E4B0268267D72A30800006830683268424B016843682375628A06207A5F70E97F6828298172A40800007D72A508000028682B682C682D4B02682E4B0268267D72A60800008A06907A5F70E97F6863298172A70800007D72A80800002868267D72A908000068424B0168676AA4080000682B682C68686869298172AA0800007D72AB08000028686C686D686E4B008572AC08000068708772AD0800005272AE080000284B014B028572AF0800006877894310000000000000F07F000000000000F07F72B00800007472B108000062687C8868267D72B20800008A06907A5F70E97F6AA70800007368424B01687E686D686E4B008572B308000068708772B40800005272B5080000284B014B024B028672B6080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B70800007472B808000062682B682C6885686D686E4B008572B908000068708772BA0800005272BB080000284B014B024B028672BC080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0800007472BE08000062756268854E75627368306828298172BF0800007D72C008000028682B682C682D4B02682E4B0268267D72C10800008A06207A5F70E97F6AA40800007368306831298172C20800007D72C30800002868267D72C40800008A06B0795F70E97F6ABF0800007368926869298172C50800007D72C608000028686C686D686E4B008572C708000068708772C80800005272C9080000284B014B028572CA0800006877894310000000000000F07F000000000000F07F72CB0800007472CC08000062687C8868267D72CD0800008A0640795F70E97F6AC20800007368424B01687E686D686E4B008572CE08000068708772CF0800005272D0080000284B014B024B028672D1080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D20800007472D308000062682B682C6885686D686E4B008572D408000068708772D50800005272D6080000284B014B024B028672D7080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D80800007472D908000062756268424B0168254E682B682C68524E756268424B0168436848298172DA0800007D72DB0800002868267D72DC0800008A06B0795F70E97F6ABF0800007368424B026825686D686E4B008572DD08000068708772DE0800005272DF080000284B014B034B038672E00800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E10800007472E208000062682B682C68524E7562756268424B016843683275628A06D8765F70E97F6828298172E30800007D72E408000028682B682C682D4B02682E4B0268267D72E50800008A0648775F70E97F6863298172E60800007D72E70800002868267D72E808000068424B0168676AE3080000682B682C68686869298172E90800007D72EA08000028686C686D686E4B008572EB08000068708772EC0800005272ED080000284B014B028572EE0800006877894310000000000000F07F000000000000F07F72EF0800007472F008000062687C8868267D72F10800008A0648775F70E97F6AE60800007368424B01687E686D686E4B008572F208000068708772F30800005272F4080000284B014B024B028672F5080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F60800007472F708000062682B682C6885686D686E4B008572F808000068708772F90800005272FA080000284B014B024B028672FB080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0800007472FD08000062756268854E75627368306828298172FE0800007D72FF08000028682B682C682D4B02682E4B0268267D72000900008A06D8765F70E97F6AE30800007368306831298172010900007D72020900002868267D72030900008A0668765F70E97F6AFE0800007368926869298172040900007D720509000028686C686D686E4B008572060900006870877207090000527208090000284B014B028572090900006877894310000000000000F07F000000000000F07F720A09000074720B09000062687C8868267D720C0900008A06F8755F70E97F6A010900007368424B01687E686D686E4B0085720D090000687087720E09000052720F090000284B014B024B02867210090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721109000074721209000062682B682C6885686D686E4B008572130900006870877214090000527215090000284B014B024B02867216090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721709000074721809000062756268424B0168254E682B682C68524E756268424B0168436848298172190900007D721A0900002868267D721B0900008A0668765F70E97F6AFE0800007368424B026825686D686E4B0085721C090000687087721D09000052721E090000284B014B034B0386721F0900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722009000074722109000062682B682C68524E7562756268424B016843683275628A0698585570E97F68B1298172220900007D7223090000286838683268267D722409000068424B0168254E682B682C68524E68B568B6298172250900007D72260900002868267D72270900008A0698585570E97F6A220900007368424B01682B682C68524E756275628A06005B5570E97F68B1298172280900007D7229090000286838683268267D722A09000068424B0168254E682B682C68524E68B568B62981722B0900007D722C0900002868267D722D0900008A06005B5570E97F6A280900007368424B01682B682C68524E756275628A0620535E70E97F68B12981722E0900007D722F09000028683868B6298172300900007D72310900002868267D72320900008A0620535E70E97F6A2E0900007368424B01682B682C68524E756268267D723309000068424B0168254E682B682C68524E68B5683275628A06A06D4E70E97F6828298172340900007D723509000028682B682C682D4B02682E4B0268267D72360900008A06106E4E70E97F6863298172370900007D72380900002868267D723909000068424B0168676A34090000682B682C686868692981723A0900007D723B09000028686C686D686E4B0085723C090000687087723D09000052723E090000284B014B0285723F0900006877894310000000000000F07F000000000000F07F724009000074724109000062687C8868267D72420900008A06106E4E70E97F6A370900007368424B01687E686D686E4B008572430900006870877244090000527245090000284B014B024B02867246090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724709000074724809000062682B682C6885686D686E4B00857249090000687087724A09000052724B090000284B014B024B0286724C090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724D09000074724E09000062756268854E756273683068282981724F0900007D725009000028682B682C682D4B02682E4B0268267D72510900008A06A06D4E70E97F6A340900007368306831298172520900007D72530900002868267D72540900008A06306D4E70E97F6A4F0900007368926869298172550900007D725609000028686C686D686E4B008572570900006870877258090000527259090000284B014B0285725A0900006877894310000000000000F07F000000000000F07F725B09000074725C09000062687C8868267D725D0900008A06C06C4E70E97F6A520900007368424B01687E686D686E4B0085725E090000687087725F090000527260090000284B014B024B02867261090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726209000074726309000062682B682C6885686D686E4B008572640900006870877265090000527266090000284B014B024B02867267090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726809000074726909000062756268424B0168254E682B682C68524E756268424B01684368482981726A0900007D726B0900002868267D726C0900008A06306D4E70E97F6A4F0900007368424B026825686D686E4B0085726D090000687087726E09000052726F090000284B014B034B038672700900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727109000074727209000062682B682C68524E7562756268424B016843683275628A0690935570E97F6828298172730900007D727409000028682B682C682D4B02682E4B0268267D72750900008A0600945570E97F6863298172760900007D72770900002868267D727809000068424B0168676A73090000682B682C68686869298172790900007D727A09000028686C686D686E4B0085727B090000687087727C09000052727D090000284B014B0285727E0900006877894310000000000000F07F000000000000F07F727F09000074728009000062687C8868267D72810900008A0600945570E97F6A760900007368424B01687E686D686E4B008572820900006870877283090000527284090000284B014B024B02867285090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F728609000074728709000062682B682C6885686D686E4B00857288090000687087728909000052728A090000284B014B024B0286728B090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F728C09000074728D09000062756268854E756273683068282981728E0900007D728F09000028682B682C682D4B02682E4B0268267D72900900008A0690935570E97F6A730900007368306831298172910900007D72920900002868267D72930900008A0620935570E97F6A8E0900007368926869298172940900007D729509000028686C686D686E4B008572960900006870877297090000527298090000284B014B028572990900006877894310000000000000F07F000000000000F07F729A09000074729B09000062687C8868267D729C0900008A06B0925570E97F6A910900007368424B01687E686D686E4B0085729D090000687087729E09000052729F090000284B014B024B028672A0090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A10900007472A209000062682B682C6885686D686E4B008572A309000068708772A40900005272A5090000284B014B024B028672A6090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A70900007472A809000062756268424B0168254E682B682C68524E756268424B0168436848298172A90900007D72AA0900002868267D72AB0900008A0620935570E97F6A8E0900007368424B026825686D686E4B008572AC09000068708772AD0900005272AE090000284B014B034B038672AF0900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B00900007472B109000062682B682C68524E7562756268424B016843683275628A06D09F5570E97F6828298172B20900007D72B309000028682B682C682D4B02682E4B0268267D72B40900008A0680905470E97F6863298172B50900007D72B60900002868267D72B709000068424B0168676AB2090000682B682C68686869298172B80900007D72B909000028686C686D686E4B008572BA09000068708772BB0900005272BC090000284B014B028572BD0900006877894310000000000000F07F000000000000F07F72BE0900007472BF09000062687C8868267D72C00900008A0680905470E97F6AB50900007368424B01687E686D686E4B008572C109000068708772C20900005272C3090000284B014B024B028672C4090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C50900007472C609000062682B682C6885686D686E4B008572C709000068708772C80900005272C9090000284B014B024B028672CA090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72CB0900007472CC09000062756268854E75627368306828298172CD0900007D72CE09000028682B682C682D4B02682E4B0268267D72CF0900008A06D09F5570E97F6AB20900007368306831298172D00900007D72D10900002868267D72D20900008A06609F5570E97F6ACD0900007368926869298172D30900007D72D409000028686C686D686E4B008572D509000068708772D60900005272D7090000284B014B028572D80900006877894310000000000000F07F000000000000F07F72D90900007472DA09000062687C8868267D72DB0900008A06F09E5570E97F6AD00900007368424B01687E686D686E4B008572DC09000068708772DD0900005272DE090000284B014B024B028672DF090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E00900007472E109000062682B682C6885686D686E4B008572E209000068708772E30900005272E4090000284B014B024B028672E5090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E60900007472E709000062756268424B0168254E682B682C68524E756268424B0168436848298172E80900007D72E90900002868267D72EA0900008A06609F5570E97F6ACD0900007368424B026825686D686E4B008572EB09000068708772EC0900005272ED090000284B014B034B038672EE0900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EF0900007472F009000062682B682C68524E7562756268424B016843683275628A0600745F70E97F6828298172F10900007D72F209000028682B682C682D4B02682E4B0268267D72F30900008A0670745F70E97F6863298172F40900007D72F50900002868267D72F609000068424B0168676AF1090000682B682C68686869298172F70900007D72F809000028686C686D686E4B008572F909000068708772FA0900005272FB090000284B014B028572FC0900006877894310000000000000F07F000000000000F07F72FD0900007472FE09000062687C8868267D72FF0900008A0670745F70E97F6AF40900007368424B01687E686D686E4B008572000A000068708772010A00005272020A0000284B014B024B028672030A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72040A00007472050A000062682B682C6885686D686E4B008572060A000068708772070A00005272080A0000284B014B024B028672090A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F720A0A000074720B0A000062756268854E756273683068282981720C0A00007D720D0A000028682B682C682D4B02682E4B0268267D720E0A00008A0600745F70E97F6AF109000073683068312981720F0A00007D72100A00002868267D72110A00008A0690735F70E97F6A0C0A00007368926869298172120A00007D72130A000028686C686D686E4B008572140A000068708772150A00005272160A0000284B014B028572170A00006877894310000000000000F07F000000000000F07F72180A00007472190A000062687C8868267D721A0A00008A0620735F70E97F6A0F0A00007368424B01687E686D686E4B0085721B0A0000687087721C0A000052721D0A0000284B014B024B0286721E0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721F0A00007472200A000062682B682C6885686D686E4B008572210A000068708772220A00005272230A0000284B014B024B028672240A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72250A00007472260A000062756268424B0168254E682B682C68524E756268424B0168436848298172270A00007D72280A00002868267D72290A00008A0690735F70E97F6A0C0A00007368424B026825686D686E4B0085722A0A0000687087722B0A000052722C0A0000284B014B034B0386722D0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722E0A000074722F0A000062682B682C68524E7562756268424B016843683275628A06A09D5470E97F6828298172300A00007D72310A000028682B682C682D4B02682E4B0268267D72320A00008A06109E5470E97F6863298172330A00007D72340A00002868267D72350A000068424B0168676A300A0000682B682C68686869298172360A00007D72370A000028686C686D686E4B008572380A000068708772390A000052723A0A0000284B014B0285723B0A00006877894310000000000000F07F000000000000F07F723C0A000074723D0A000062687C8868267D723E0A00008A06109E5470E97F6A330A00007368424B01687E686D686E4B0085723F0A000068708772400A00005272410A0000284B014B024B028672420A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72430A00007472440A000062682B682C6885686D686E4B008572450A000068708772460A00005272470A0000284B014B024B028672480A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72490A000074724A0A000062756268854E756273683068282981724B0A00007D724C0A000028682B682C682D4B02682E4B0268267D724D0A00008A06A09D5470E97F6A300A000073683068312981724E0A00007D724F0A00002868267D72500A00008A06309D5470E97F6A4B0A00007368926869298172510A00007D72520A000028686C686D686E4B008572530A000068708772540A00005272550A0000284B014B028572560A00006877894310000000000000F07F000000000000F07F72570A00007472580A000062687C8868267D72590A00008A06C09C5470E97F6A4E0A00007368424B01687E686D686E4B0085725A0A0000687087725B0A000052725C0A0000284B014B024B0286725D0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725E0A000074725F0A000062682B682C6885686D686E4B008572600A000068708772610A00005272620A0000284B014B024B028672630A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72640A00007472650A000062756268424B0168254E682B682C68524E756268424B0168436848298172660A00007D72670A00002868267D72680A00008A06309D5470E97F6A4B0A00007368424B026825686D686E4B008572690A0000687087726A0A000052726B0A0000284B014B034B0386726C0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726D0A000074726E0A000062682B682C68524E7562756268424B016843683275628A06A8545570E97F683C8A06B8275670E97F68282981726F0A00007D72700A000028682B682C682D4B02682E4B0268267D72710A00008A0628285670E97F6863298172720A00007D72730A00002868267D72740A000068424B0168676A6F0A0000682B682C68686869298172750A00007D72760A000028686C686D686E4B008572770A000068708772780A00005272790A0000284B014B0285727A0A00006877894310000000000000F07F000000000000F07F727B0A000074727C0A000062687C8868267D727D0A00008A0628285670E97F6A720A00007368424B01687E686D686E4B0085727E0A0000687087727F0A00005272800A0000284B014B024B028672810A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72820A00007472830A000062682B682C6885686D686E4B008572840A000068708772850A00005272860A0000284B014B024B028672870A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72880A00007472890A000062756268854E756273683068282981728A0A00007D728B0A000028682B682C682D4B02682E4B0268267D728C0A00008A06B8275670E97F6A6F0A000073683068312981728D0A00007D728E0A00002868267D728F0A00008A0648275670E97F6A8A0A00007368926869298172900A00007D72910A000028686C686D686E4B008572920A000068708772930A00005272940A0000284B014B028572950A00006877894310000000000000F07F000000000000F07F72960A00007472970A000062687C8868267D72980A00008A06D8265670E97F6A8D0A00007368424B01687E686D686E4B008572990A0000687087729A0A000052729B0A0000284B014B024B0286729C0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729D0A000074729E0A000062682B682C6885686D686E4B0085729F0A000068708772A00A00005272A10A0000284B014B024B028672A20A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A30A00007472A40A000062756268424B0168254E682B682C68524E756268424B0168436848298172A50A00007D72A60A00002868267D72A70A00008A0648275670E97F6A8A0A00007368424B026825686D686E4B008572A80A000068708772A90A00005272AA0A0000284B014B034B038672AB0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AC0A00007472AD0A000062682B682C68524E7562756268424B016843683275628A06B0995570E97F6828298172AE0A00007D72AF0A000028682B682C682D4B02682E4B0268267D72B00A00008A06209A5570E97F6863298172B10A00007D72B20A00002868267D72B30A000068424B0168676AAE0A0000682B682C68686869298172B40A00007D72B50A000028686C686D686E4B008572B60A000068708772B70A00005272B80A0000284B014B028572B90A00006877894310000000000000F07F000000000000F07F72BA0A00007472BB0A000062687C8868267D72BC0A00008A06209A5570E97F6AB10A00007368424B01687E686D686E4B008572BD0A000068708772BE0A00005272BF0A0000284B014B024B028672C00A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C10A00007472C20A000062682B682C6885686D686E4B008572C30A000068708772C40A00005272C50A0000284B014B024B028672C60A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C70A00007472C80A000062756268854E75627368306828298172C90A00007D72CA0A000028682B682C682D4B02682E4B0268267D72CB0A00008A06B0995570E97F6AAE0A00007368306831298172CC0A00007D72CD0A00002868267D72CE0A00008A0640995570E97F6AC90A00007368926869298172CF0A00007D72D00A000028686C686D686E4B008572D10A000068708772D20A00005272D30A0000284B014B028572D40A00006877894310000000000000F07F000000000000F07F72D50A00007472D60A000062687C8868267D72D70A00008A06D0985570E97F6ACC0A00007368424B01687E686D686E4B008572D80A000068708772D90A00005272DA0A0000284B014B024B028672DB0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0A00007472DD0A000062682B682C6885686D686E4B008572DE0A000068708772DF0A00005272E00A0000284B014B024B028672E10A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E20A00007472E30A000062756268424B0168254E682B682C68524E756268424B0168436848298172E40A00007D72E50A00002868267D72E60A00008A0640995570E97F6AC90A00007368424B026825686D686E4B008572E70A000068708772E80A00005272E90A0000284B014B034B038672EA0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EB0A00007472EC0A000062682B682C68524E7562756268424B016843683275628A06C09C5570E97F6828298172ED0A00007D72EE0A000028682B682C682D4B02682E4B0268267D72EF0A00008A06309D5570E97F6863298172F00A00007D72F10A00002868267D72F20A000068424B0168676AED0A0000682B682C68686869298172F30A00007D72F40A000028686C686D686E4B008572F50A000068708772F60A00005272F70A0000284B014B028572F80A00006877894310000000000000F07F000000000000F07F72F90A00007472FA0A000062687C8868267D72FB0A00008A06309D5570E97F6AF00A00007368424B01687E686D686E4B008572FC0A000068708772FD0A00005272FE0A0000284B014B024B028672FF0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72000B00007472010B000062682B682C6885686D686E4B008572020B000068708772030B00005272040B0000284B014B024B028672050B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72060B00007472070B000062756268854E75627368306828298172080B00007D72090B000028682B682C682D4B02682E4B0268267D720A0B00008A06C09C5570E97F6AED0A000073683068312981720B0B00007D720C0B00002868267D720D0B00008A06509C5570E97F6A080B000073689268692981720E0B00007D720F0B000028686C686D686E4B008572100B000068708772110B00005272120B0000284B014B028572130B00006877894310000000000000F07F000000000000F07F72140B00007472150B000062687C8868267D72160B00008A06E09B5570E97F6A0B0B00007368424B01687E686D686E4B008572170B000068708772180B00005272190B0000284B014B024B0286721A0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721B0B000074721C0B000062682B682C6885686D686E4B0085721D0B0000687087721E0B000052721F0B0000284B014B024B028672200B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72210B00007472220B000062756268424B0168254E682B682C68524E756268424B0168436848298172230B00007D72240B00002868267D72250B00008A06509C5570E97F6A080B00007368424B026825686D686E4B008572260B000068708772270B00005272280B0000284B014B034B038672290B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722A0B000074722B0B000062682B682C68524E7562756268424B016843683275628A06F0705F70E97F68282981722C0B00007D722D0B000028682B682C682D4B02682E4B0268267D722E0B00008A0660715F70E97F68632981722F0B00007D72300B00002868267D72310B000068424B0168676A2C0B0000682B682C68686869298172320B00007D72330B000028686C686D686E4B008572340B000068708772350B00005272360B0000284B014B028572370B00006877894310000000000000F07F000000000000F07F72380B00007472390B000062687C8868267D723A0B00008A0660715F70E97F6A2F0B00007368424B01687E686D686E4B0085723B0B0000687087723C0B000052723D0B0000284B014B024B0286723E0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723F0B00007472400B000062682B682C6885686D686E4B008572410B000068708772420B00005272430B0000284B014B024B028672440B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72450B00007472460B000062756268854E75627368306828298172470B00007D72480B000028682B682C682D4B02682E4B0268267D72490B00008A06F0705F70E97F6A2C0B000073683068312981724A0B00007D724B0B00002868267D724C0B00008A0680705F70E97F6A470B000073689268692981724D0B00007D724E0B000028686C686D686E4B0085724F0B000068708772500B00005272510B0000284B014B028572520B00006877894310000000000000F07F000000000000F07F72530B00007472540B000062687C8868267D72550B00008A06D06F4E70E97F6A4A0B00007368424B01687E686D686E4B008572560B000068708772570B00005272580B0000284B014B024B028672590B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725A0B000074725B0B000062682B682C6885686D686E4B0085725C0B0000687087725D0B000052725E0B0000284B014B024B0286725F0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72600B00007472610B000062756268424B0168254E682B682C68524E756268424B0168436848298172620B00007D72630B00002868267D72640B00008A0680705F70E97F6A470B00007368424B026825686D686E4B008572650B000068708772660B00005272670B0000284B014B034B038672680B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72690B000074726A0B000062682B682C68524E7562756268424B016843683275628A06307D5F70E97F68282981726B0B00007D726C0B000028682B682C682D4B02682E4B0268267D726D0B00008A06A07D5F70E97F68632981726E0B00007D726F0B00002868267D72700B000068424B0168676A6B0B0000682B682C68686869298172710B00007D72720B000028686C686D686E4B008572730B000068708772740B00005272750B0000284B014B028572760B00006877894310000000000000F07F000000000000F07F72770B00007472780B000062687C8868267D72790B00008A06A07D5F70E97F6A6E0B00007368424B01687E686D686E4B0085727A0B0000687087727B0B000052727C0B0000284B014B024B0286727D0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727E0B000074727F0B000062682B682C6885686D686E4B008572800B000068708772810B00005272820B0000284B014B024B028672830B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72840B00007472850B000062756268854E75627368306828298172860B00007D72870B000028682B682C682D4B02682E4B0268267D72880B00008A06307D5F70E97F6A6B0B00007368306831298172890B00007D728A0B00002868267D728B0B00008A06C07C5F70E97F6A860B000073689268692981728C0B00007D728D0B000028686C686D686E4B0085728E0B0000687087728F0B00005272900B0000284B014B028572910B00006877894310000000000000F07F000000000000F07F72920B00007472930B000062687C8868267D72940B00008A06507C5F70E97F6A890B00007368424B01687E686D686E4B008572950B000068708772960B00005272970B0000284B014B024B028672980B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72990B000074729A0B000062682B682C6885686D686E4B0085729B0B0000687087729C0B000052729D0B0000284B014B024B0286729E0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729F0B00007472A00B000062756268424B0168254E682B682C68524E756268424B0168436848298172A10B00007D72A20B00002868267D72A30B00008A06C07C5F70E97F6A860B00007368424B026825686D686E4B008572A40B000068708772A50B00005272A60B0000284B014B034B038672A70B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A80B00007472A90B000062682B682C68524E7562756268424B016843683275628A06C8435570E97F6828298172AA0B00007D72AB0B000028682B682C682D4B02682E4B0268267D72AC0B00008A0638445570E97F6863298172AD0B00007D72AE0B00002868267D72AF0B000068424B0168676AAA0B0000682B682C68686869298172B00B00007D72B10B000028686C686D686E4B008572B20B000068708772B30B00005272B40B0000284B014B028572B50B00006877894310000000000000F07F000000000000F07F72B60B00007472B70B000062687C8868267D72B80B00008A0638445570E97F6AAD0B00007368424B01687E686D686E4B008572B90B000068708772BA0B00005272BB0B0000284B014B024B028672BC0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0B00007472BE0B000062682B682C6885686D686E4B008572BF0B000068708772C00B00005272C10B0000284B014B024B028672C20B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C30B00007472C40B000062756268854E75627368306828298172C50B00007D72C60B000028682B682C682D4B02682E4B0268267D72C70B00008A06C8435570E97F6AAA0B00007368306831298172C80B00007D72C90B00002868267D72CA0B00008A0658435570E97F6AC50B00007368926869298172CB0B00007D72CC0B000028686C686D686E4B008572CD0B000068708772CE0B00005272CF0B0000284B014B028572D00B00006877894310000000000000F07F000000000000F07F72D10B00007472D20B000062687C8868267D72D30B00008A06E8425570E97F6AC80B00007368424B01687E686D686E4B008572D40B000068708772D50B00005272D60B0000284B014B024B028672D70B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D80B00007472D90B000062682B682C6885686D686E4B008572DA0B000068708772DB0B00005272DC0B0000284B014B024B028672DD0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0B00007472DF0B000062756268424B0168254E682B682C68524E756268424B0168436848298172E00B00007D72E10B00002868267D72E20B00008A0658435570E97F6AC50B00007368424B026825686D686E4B008572E30B000068708772E40B00005272E50B0000284B014B034B038672E60B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E70B00007472E80B000062682B682C68524E7562756268424B016843683275628A06B0495570E97F6828298172E90B00007D72EA0B000028682B682C682D4B02682E4B0268267D72EB0B00008A06204A5570E97F6863298172EC0B00007D72ED0B00002868267D72EE0B000068424B0168676AE90B0000682B682C68686869298172EF0B00007D72F00B000028686C686D686E4B008572F10B000068708772F20B00005272F30B0000284B014B028572F40B00006877894310000000000000F07F000000000000F07F72F50B00007472F60B000062687C8868267D72F70B00008A06204A5570E97F6AEC0B00007368424B01687E686D686E4B008572F80B000068708772F90B00005272FA0B0000284B014B024B028672FB0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0B00007472FD0B000062682B682C6885686D686E4B008572FE0B000068708772FF0B00005272000C0000284B014B024B028672010C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72020C00007472030C000062756268854E75627368306828298172040C00007D72050C000028682B682C682D4B02682E4B0268267D72060C00008A06B0495570E97F6AE90B00007368306831298172070C00007D72080C00002868267D72090C00008A0640495570E97F6A040C000073689268692981720A0C00007D720B0C000028686C686D686E4B0085720C0C0000687087720D0C000052720E0C0000284B014B0285720F0C00006877894310000000000000F07F000000000000F07F72100C00007472110C000062687C8868267D72120C00008A06D0485570E97F6A070C00007368424B01687E686D686E4B008572130C000068708772140C00005272150C0000284B014B024B028672160C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72170C00007472180C000062682B682C6885686D686E4B008572190C0000687087721A0C000052721B0C0000284B014B024B0286721C0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721D0C000074721E0C000062756268424B0168254E682B682C68524E756268424B01684368482981721F0C00007D72200C00002868267D72210C00008A0640495570E97F6A040C00007368424B026825686D686E4B008572220C000068708772230C00005272240C0000284B014B034B038672250C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72260C00007472270C000062682B682C68524E7562756268424B016843683275628A06C0755370E97F6828298172280C00007D72290C000028682B682C682D4B02682E4B0268267D722A0C00008A0630765370E97F68632981722B0C00007D722C0C00002868267D722D0C000068424B0168676A280C0000682B682C686868692981722E0C00007D722F0C000028686C686D686E4B008572300C000068708772310C00005272320C0000284B014B028572330C00006877894310000000000000F07F000000000000F07F72340C00007472350C000062687C8868267D72360C00008A0630765370E97F6A2B0C00007368424B01687E686D686E4B008572370C000068708772380C00005272390C0000284B014B024B0286723A0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723B0C000074723C0C000062682B682C6885686D686E4B0085723D0C0000687087723E0C000052723F0C0000284B014B024B028672400C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72410C00007472420C000062756268854E75627368306828298172430C00007D72440C000028682B682C682D4B02682E4B0268267D72450C00008A06C0755370E97F6A280C00007368306831298172460C00007D72470C00002868267D72480C00008A0650755370E97F6A430C00007368926869298172490C00007D724A0C000028686C686D686E4B0085724B0C0000687087724C0C000052724D0C0000284B014B0285724E0C00006877894310000000000000F07F000000000000F07F724F0C00007472500C000062687C8868267D72510C00008A06E0745370E97F6A460C00007368424B01687E686D686E4B008572520C000068708772530C00005272540C0000284B014B024B028672550C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72560C00007472570C000062682B682C6885686D686E4B008572580C000068708772590C000052725A0C0000284B014B024B0286725B0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725C0C000074725D0C000062756268424B0168254E682B682C68524E756268424B01684368482981725E0C00007D725F0C00002868267D72600C00008A0650755370E97F6A430C00007368424B026825686D686E4B008572610C000068708772620C00005272630C0000284B014B034B038672640C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72650C00007472660C000062682B682C68524E7562756268424B016843683275628A06A05D5E70E97F68B1298172670C00007D72680C0000286838683268267D72690C000068424B0168254E682B682C68524E68B568B62981726A0C00007D726B0C00002868267D726C0C00008A06A05D5E70E97F6A670C00007368424B01682B682C68524E756275628A0628585E70E97F68282981726D0C00007D726E0C000028682B682C682D4B02682E4B0268267D726F0C00008A0650C55A70E97F6863298172700C00007D72710C00002868267D72720C000068424B0168676A6D0C0000682B682C68686869298172730C00007D72740C000028686C686D686E4B008572750C000068708772760C00005272770C0000284B014B028572780C00006877894310000000000000F07F000000000000F07F72790C000074727A0C000062687C8868267D727B0C00008A0650C55A70E97F6A700C00007368424B01687E686D686E4B0085727C0C0000687087727D0C000052727E0C0000284B014B024B0286727F0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72800C00007472810C000062682B682C6885686D686E4B008572820C000068708772830C00005272840C0000284B014B024B028672850C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72860C00007472870C000062756268854E75627368306828298172880C00007D72890C000028682B682C682D4B02682E4B0268267D728A0C00008A0628585E70E97F6A6D0C000073683068312981728B0C00007D728C0C00002868267D728D0C00008A06885C5E70E97F6A880C000073689268692981728E0C00007D728F0C000028686C686D686E4B008572900C000068708772910C00005272920C0000284B014B028572930C00006877894310000000000000F07F000000000000F07F72940C00007472950C000062687C8868267D72960C00008A06F8C56170E97F6A8B0C00007368424B01687E686D686E4B008572970C000068708772980C00005272990C0000284B014B024B0286729A0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729B0C000074729C0C000062682B682C6885686D686E4B0085729D0C0000687087729E0C000052729F0C0000284B014B024B028672A00C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A10C00007472A20C000062756268424B0168254E682B682C68524E756268424B0168436848298172A30C00007D72A40C00002868267D72A50C00008A06885C5E70E97F6A880C00007368424B026825686D686E4B008572A60C000068708772A70C00005272A80C0000284B014B034B038672A90C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AA0C00007472AB0C000062682B682C68524E7562756268424B016843683275628A06B8975470E97F6828298172AC0C00007D72AD0C000028682B682C682D4B02682E4B0268267D72AE0C00008A0628985470E97F6863298172AF0C00007D72B00C00002868267D72B10C000068424B0168676AAC0C0000682B682C68686869298172B20C00007D72B30C000028686C686D686E4B008572B40C000068708772B50C00005272B60C0000284B014B028572B70C00006877894310000000000000F07F000000000000F07F72B80C00007472B90C000062687C8868267D72BA0C00008A0628985470E97F6AAF0C00007368424B01687E686D686E4B008572BB0C000068708772BC0C00005272BD0C0000284B014B024B028672BE0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0C00007472C00C000062682B682C6885686D686E4B008572C10C000068708772C20C00005272C30C0000284B014B024B028672C40C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C50C00007472C60C000062756268854E75627368306828298172C70C00007D72C80C000028682B682C682D4B02682E4B0268267D72C90C00008A06B8975470E97F6AAC0C00007368306831298172CA0C00007D72CB0C00002868267D72CC0C00008A0648975470E97F6AC70C00007368926869298172CD0C00007D72CE0C000028686C686D686E4B008572CF0C000068708772D00C00005272D10C0000284B014B028572D20C00006877894310000000000000F07F000000000000F07F72D30C00007472D40C000062687C8868267D72D50C00008A06D8965470E97F6ACA0C00007368424B01687E686D686E4B008572D60C000068708772D70C00005272D80C0000284B014B024B028672D90C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0C00007472DB0C000062682B682C6885686D686E4B008572DC0C000068708772DD0C00005272DE0C0000284B014B024B028672DF0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E00C00007472E10C000062756268424B0168254E682B682C68524E756268424B0168436848298172E20C00007D72E30C00002868267D72E40C00008A0648975470E97F6AC70C00007368424B026825686D686E4B008572E50C000068708772E60C00005272E70C0000284B014B034B038672E80C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E90C00007472EA0C000062682B682C68524E7562756268424B016843683275628A06906A4E70E97F6828298172EB0C00007D72EC0C000028682B682C682D4B02682E4B0268267D72ED0C00008A06006B4E70E97F6863298172EE0C00007D72EF0C00002868267D72F00C000068424B0168676AEB0C0000682B682C68686869298172F10C00007D72F20C000028686C686D686E4B008572F30C000068708772F40C00005272F50C0000284B014B028572F60C00006877894310000000000000F07F000000000000F07F72F70C00007472F80C000062687C8868267D72F90C00008A06006B4E70E97F6AEE0C00007368424B01687E686D686E4B008572FA0C000068708772FB0C00005272FC0C0000284B014B024B028672FD0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0C00007472FF0C000062682B682C6885686D686E4B008572000D000068708772010D00005272020D0000284B014B024B028672030D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72040D00007472050D000062756268854E75627368306828298172060D00007D72070D000028682B682C682D4B02682E4B0268267D72080D00008A06906A4E70E97F6AEB0C00007368306831298172090D00007D720A0D00002868267D720B0D00008A06E8694E70E97F6A060D000073689268692981720C0D00007D720D0D000028686C686D686E4B0085720E0D0000687087720F0D00005272100D0000284B014B028572110D00006877894310000000000000F07F000000000000F07F72120D00007472130D000062687C8868267D72140D00008A06B0694E70E97F6A090D00007368424B01687E686D686E4B008572150D000068708772160D00005272170D0000284B014B024B028672180D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72190D000074721A0D000062682B682C6885686D686E4B0085721B0D0000687087721C0D000052721D0D0000284B014B024B0286721E0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721F0D00007472200D000062756268424B0168254E682B682C68524E756268424B0168436848298172210D00007D72220D00002868267D72230D00008A06E8694E70E97F6A060D00007368424B026825686D686E4B008572240D000068708772250D00005272260D0000284B014B034B038672270D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72280D00007472290D000062682B682C68524E7562756268424B016843683275628A0630F65D70E97F68282981722A0D00007D722B0D000028682B682C682D4B02682E4B0268267D722C0D00008A0650256070E97F68632981722D0D00007D722E0D00002868267D722F0D000068424B0168676A2A0D0000682B682C68686869298172300D00007D72310D000028686C686D686E4B008572320D000068708772330D00005272340D0000284B014B028572350D00006877894310000000000000F07F000000000000F07F72360D00007472370D000062687C8868267D72380D00008A0650256070E97F6A2D0D00007368424B01687E686D686E4B008572390D0000687087723A0D000052723B0D0000284B014B024B0286723C0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723D0D000074723E0D000062682B682C6885686D686E4B0085723F0D000068708772400D00005272410D0000284B014B024B028672420D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72430D00007472440D000062756268854E75627368306828298172450D00007D72460D000028682B682C682D4B02682E4B0268267D72470D00008A0630F65D70E97F6A2A0D00007368306831298172480D00007D72490D00002868267D724A0D00008A0618F55D70E97F6A450D000073689268692981724B0D00007D724C0D000028686C686D686E4B0085724D0D0000687087724E0D000052724F0D0000284B014B028572500D00006877894310000000000000F07F000000000000F07F72510D00007472520D000062687C8868267D72530D00008A0678F95D70E97F6A480D00007368424B01687E686D686E4B008572540D000068708772550D00005272560D0000284B014B024B028672570D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72580D00007472590D000062682B682C6885686D686E4B0085725A0D0000687087725B0D000052725C0D0000284B014B024B0286725D0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725E0D000074725F0D000062756268424B0168254E682B682C68524E756268424B0168436848298172600D00007D72610D00002868267D72620D00008A0618F55D70E97F6A450D00007368424B026825686D686E4B008572630D000068708772640D00005272650D0000284B014B034B038672660D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72670D00007472680D000062682B682C68524E7562756268424B016843683275628A06A87B5370E97F6828298172690D00007D726A0D000028682B682C682D4B02682E4B0268267D726B0D00008A06187C5370E97F68632981726C0D00007D726D0D00002868267D726E0D000068424B0168676A690D0000682B682C686868692981726F0D00007D72700D000028686C686D686E4B008572710D000068708772720D00005272730D0000284B014B028572740D00006877894310000000000000F07F000000000000F07F72750D00007472760D000062687C8868267D72770D00008A06187C5370E97F6A6C0D00007368424B01687E686D686E4B008572780D000068708772790D000052727A0D0000284B014B024B0286727B0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727C0D000074727D0D000062682B682C6885686D686E4B0085727E0D0000687087727F0D00005272800D0000284B014B024B028672810D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72820D00007472830D000062756268854E75627368306828298172840D00007D72850D000028682B682C682D4B02682E4B0268267D72860D00008A06A87B5370E97F6A690D00007368306831298172870D00007D72880D00002868267D72890D00008A06387B5370E97F6A840D000073689268692981728A0D00007D728B0D000028686C686D686E4B0085728C0D0000687087728D0D000052728E0D0000284B014B0285728F0D00006877894310000000000000F07F000000000000F07F72900D00007472910D000062687C8868267D72920D00008A06C87A5370E97F6A870D00007368424B01687E686D686E4B008572930D000068708772940D00005272950D0000284B014B024B028672960D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72970D00007472980D000062682B682C6885686D686E4B008572990D0000687087729A0D000052729B0D0000284B014B024B0286729C0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729D0D000074729E0D000062756268424B0168254E682B682C68524E756268424B01684368482981729F0D00007D72A00D00002868267D72A10D00008A06387B5370E97F6A840D00007368424B026825686D686E4B008572A20D000068708772A30D00005272A40D0000284B014B034B038672A50D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A60D00007472A70D000062682B682C68524E7562756268424B016843683275628A0628216270E97F68297568926A8805000068424B0168254E682B682C68524E756268424B016843682375628A0698286270E97F6A5F0800008A06B8276270E97F6AA10800007568424B0168476849682B682C68524E6853470000000000000000473FB55555555555558672A80D0000756258070000007061746368657372A90D00005D72AA0D000028636D6174706C6F746C69622E706174636865730A52656374616E676C650A72AB0D0000298172AC0D00007D72AD0D00002868034E6805896806680168074E68086AAF0C00006809680A5D72AE0D00005D72AF0D0000636E756D70792E636F72652E6D756C746961727261790A7363616C61720A72B00D000068774308000000000000000072B10D00008672B20D00005272B30D0000618672B40D00008172B50D000058090000005F636C69707061746872B60D00004E58060000005F7374616C6572B70D000088580D0000005F7472616E73666F726D53657472B80D00008858060000005F616E676C6572B90D0000470000000000000000580C0000005F616E7469616C696173656472BA0D000088580A0000005F75735F64617368657372BB0D00004E4E8672BC0D000058050000005F66696C6C72BD0D00008868B547000000000000000058050000005F736E617072BE0D00004E58080000005F76697369626C6572BF0D000088580E0000005F70726F706F627365727665727372C00D00007D72C10D0000580A0000005F6C696E657374796C6572C20D00005805000000736F6C696472C30D000058060000005F776964746872C40D000047404B99999999999A58070000005F68656967687472C50D00004740C870000000000058060000005F6C6162656C72C60D0000580A0000005F6E6F6C6567656E645F72C70D000058060000005F686174636872C80D00004E580F0000005F726563745F7472616E73666F726D72C90D00006828298172CA0D00007D72CB0D000028682B682C682D4B02682E4B0268267D72CC0D000068306831298172CD0D00007D72CE0D00002868267D72CF0D00008A0618955470E97F6ACA0D00007368926869298172D00D00007D72D10D000028686C686D686E4B008572D20D000068708772D30D00005272D40D0000284B014B028572D50D00006877894310000000000000F07F000000000000F07F72D60D00007472D70D000062687C8868267D72D80D00008A06C89A5470E97F6ACD0D00007368424B01687E686D686E4B008572D90D000068708772DA0D00005272DB0D0000284B014B024B028672DC0D000068778943200000000000004AC00000000000000000A099999999990940000000000070C84072DD0D00007472DE0D000062682B682C6885686D686E4B008572DF0D000068708772E00D00005272E10D0000284B014B024B028672E20D000068778943200000000000004AC00000000000000000A099999999990940000000000070C84072E30D00007472E40D000062756268424B0168254E682B682C68524E756268424B0168436848298172E50D00007D72E60D00002868267D72E70D00008A0618955470E97F6ACA0D00007368424B006825686D686E4B008572E80D000068708772E90D00005272EA0D0000284B014B034B038672EB0D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EC0D00007472ED0D000062682B682C68524E7562756258070000005F64617368657372EE0D00004E58040000005F75726C72EF0D00004E58040000005F67696472F00D00004E68676839580A0000005F6C696E65776964746872F10D0000473FF0000000000000683847C04A000000000000580B0000005F646173686F666673657472F20D00004E58070000005F636C69706F6E72F30D00008858090000005F636F6E7461696E7372F40D00004E58130000005F6F726967696E616C5F65646765636F6C6F7272F50D00004E58090000005F6361707374796C6572F60D000058040000006275747472F70D0000580D0000005F706174685F6566666563747372F80D00005D72F90D0000580E0000005F72656D6F76655F6D6574686F6472FA0D00004E58130000005F636F6D62696E65645F7472616E73666F726D72FB0D000068B6298172FC0D00007D72FD0D00002868267D72FE0D000068424B01682B682C68524E756258040000005F6F696472FF0D00004B00580A0000005F6A6F696E7374796C6572000E000058050000006D6974657272010E0000580E0000007374616C655F63616C6C6261636B72020E00004E580A0000005F65646765636F6C6F7272030E0000284700000000000000004700000000000000004700000000000000004700000000000000007472040E000058060000005F616C70686172050E00004E580B0000005F6167675F66696C74657272060E00004E58130000005F6F726967696E616C5F66616365636F6C6F7272070E0000686D686E4B008572080E000068708772090E000052720A0E0000284B014B0485720B0E000068778943201F1F1F1F1F1FBF3FDEDDDDDDDDDDDD3F979696969696E63F000000000000F03F720C0E000074720D0E000062580A0000005F66616365636F6C6F72720E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074720F0E000058050000005F6178657372100E0000681D58090000005F616E696D6174656472110E000089580A0000005F6D6F7573656F76657272120E000089580B0000005F726173746572697A656472130E00004E75626AAB0D0000298172140E00007D72150E00002868034E6805896806680168074E68086A330A00006809680A5D72160E00005D72170E00006AB00D000068774308000000000000000072180E00008672190E000052721A0E00006186721B0E000081721C0E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E86721D0E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D721E0E00006AC20D00006AC30D00006AC40D000047404B99999999999A6AC50D0000474139BA19000000006AC60D00006AC70D00006AC80D00004E6AC90D000068282981721F0E00007D72200E000028682B682C682D4B02682E4B0268267D72210E000068306831298172220E00007D72230E00002868267D72240E00008A06E09B5470E97F6A1F0E00007368926869298172250E00007D72260E000028686C686D686E4B008572270E000068708772280E00005272290E0000284B014B0285722A0E00006877894310000000000000F07F000000000000F07F722B0E000074722C0E000062687C8868267D722D0E00008A06F0405570E97F6A220E00007368424B01687E686D686E4B0085722E0E0000687087722F0E00005272300E0000284B014B024B028672310E00006877894320A09999999999094000000000000000003433333333334D400000000019BA394172320E00007472330E000062682B682C6885686D686E4B008572340E000068708772350E00005272360E0000284B014B024B028672370E00006877894320A09999999999094000000000000000003433333333334D400000000019BA394172380E00007472390E000062756268424B0168254E682B682C68524E756268424B01684368482981723A0E00007D723B0E00002868267D723C0E00008A06E09B5470E97F6A1F0E00007368424B006825686D686E4B0085723D0E0000687087723E0E000052723F0E0000284B014B034B038672400E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72410E00007472420E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF000000000000068384740099999999999A06AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472430E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172440E00007D72450E00002868267D72460E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D6974657272470E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472480E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D0000298172490E00007D724A0E00002868034E6805896806680168074E68086AAD0B00006809680A5D724B0E00005D724C0E00006AB00D0000687743080000000000000000724D0E000086724E0E000052724F0E0000618672500E00008172510E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672520E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72530E00006AC20D00006AC30D00006AC40D000047404B99999999999C6AC50D00004740B39600000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172540E00007D72550E000028682B682C682D4B02682E4B0268267D72560E000068306831298172570E00007D72580E00002868267D72590E00008A06189C5470E97F6A540E000073689268692981725A0E00007D725B0E000028686C686D686E4B0085725C0E0000687087725D0E000052725E0E0000284B014B0285725F0E00006877894310000000000000F07F000000000000F07F72600E00007472610E000062687C8868267D72620E00008A06D8465570E97F6A570E00007368424B01687E686D686E4B008572630E000068708772640E00005272650E0000284B014B024B028672660E000068778943203433333333334D4000000000000000006866666666665C40000000000096B34072670E00007472680E000062682B682C6885686D686E4B008572690E0000687087726A0E000052726B0E0000284B014B024B0286726C0E000068778943203433333333334D4000000000000000006866666666665C40000000000096B340726D0E000074726E0E000062756268424B0168254E682B682C68524E756268424B01684368482981726F0E00007D72700E00002868267D72710E00008A06189C5470E97F6A540E00007368424B006825686D686E4B008572720E000068708772730E00005272740E0000284B014B034B038672750E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72760E00007472770E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847404D3333333333346AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472780E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172790E00007D727A0E00002868267D727B0E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D69746572727C0E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074727D0E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D00002981727E0E00007D727F0E00002868034E6805896806680168074E68086AEC0B00006809680A5D72800E00005D72810E00006AB00D000068774308000000000000000072820E00008672830E00005272840E0000618672850E00008172860E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672870E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72880E00006AC20D00006AC30D00006AC40D000047404B9999999999986AC50D00004740720000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172890E00007D728A0E000028682B682C682D4B02682E4B0268267D728B0E0000683068312981728C0E00007D728D0E00002868267D728E0E00008A06F0475570E97F6A890E000073689268692981728F0E00007D72900E000028686C686D686E4B008572910E000068708772920E00005272930E0000284B014B028572940E00006877894310000000000000F07F000000000000F07F72950E00007472960E000062687C8868267D72970E00008A06C04C5570E97F6A8C0E00007368424B01687E686D686E4B008572980E000068708772990E000052729A0E0000284B014B024B0286729B0E000068778943206866666666665C4000000000000000009A999999991965400000000000007240729C0E000074729D0E000062682B682C6885686D686E4B0085729E0E0000687087729F0E00005272A00E0000284B014B024B028672A10E000068778943206866666666665C4000000000000000009A99999999196540000000000000724072A20E00007472A30E000062756268424B0168254E682B682C68524E756268424B0168436848298172A40E00007D72A50E00002868267D72A60E00008A06F0475570E97F6A890E00007368424B006825686D686E4B008572A70E000068708772A80E00005272A90E0000284B014B034B038672AA0E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AB0E00007472AC0E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847405C6666666666686AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472AD0E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172AE0E00007D72AF0E00002868267D72B00E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D6974657272B10E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472B20E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D0000298172B30E00007D72B40E00002868034E6805896806680168074E68086A650800006809680A5D72B50E00005D72B60E00006AB00D000068774308000000000000000072B70E00008672B80E00005272B90E0000618672BA0E00008172BB0E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672BC0E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72BD0E00006AC20D00006AC30D00006AC40D000047404B9999999999986AC50D0000474051C000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172BE0E00007D72BF0E000028682B682C682D4B02682E4B0268267D72C00E000068306831298172C10E00007D72C20E00002868267D72C30E00008A06D84D5570E97F6ABE0E00007368926869298172C40E00007D72C50E000028686C686D686E4B008572C60E000068708772C70E00005272C80E0000284B014B028572C90E00006877894310000000000000F07F000000000000F07F72CA0E00007472CB0E000062687C8868267D72CC0E00008A06E8725370E97F6AC10E00007368424B01687E686D686E4B008572CD0E000068708772CE0E00005272CF0E0000284B014B024B028672D00E000068778943209A9999999919654000000000000000000000000000006C400000000000C0514072D10E00007472D20E000062682B682C6885686D686E4B008572D30E000068708772D40E00005272D50E0000284B014B024B028672D60E000068778943209A9999999919654000000000000000000000000000006C400000000000C0514072D70E00007472D80E000062756268424B0168254E682B682C68524E756268424B0168436848298172D90E00007D72DA0E00002868267D72DB0E00008A06D84D5570E97F6ABE0E00007368424B006825686D686E4B008572DC0E000068708772DD0E00005272DE0E0000284B014B034B038672DF0E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E00E00007472E10E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847406519999999999A6AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472E20E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172E30E00007D72E40E00002868267D72E50E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D6974657272E60E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472E70E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D0000298172E80E00007D72E90E00002868034E6805896806680168074E68086A2B0C00006809680A5D72EA0E00005D72EB0E00006AB00D000068774308000000000000000072EC0E00008672ED0E00005272EE0E0000618672EF0E00008172F00E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672F10E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72F20E00006AC20D00006AC30D00006AC40D000047404B9999999999A06AC50D00004740320000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172F30E00007D72F40E000028682B682C682D4B02682E4B0268267D72F50E000068306831298172F60E00007D72F70E00002868267D72F80E00008A0600745370E97F6AF30E00007368926869298172F90E00007D72FA0E000028686C686D686E4B008572FB0E000068708772FC0E00005272FD0E0000284B014B028572FE0E00006877894310000000000000F07F000000000000F07F72FF0E00007472000F000062687C8868267D72010F00008A06D0785370E97F6AF60E00007368424B01687E686D686E4B008572020F000068708772030F00005272040F0000284B014B024B028672050F000068778943200000000000006C4000000000000000003433333333737140000000000000324072060F00007472070F000062682B682C6885686D686E4B008572080F000068708772090F000052720A0F0000284B014B024B0286720B0F000068778943200000000000006C40000000000000000034333333337371400000000000003240720C0F000074720D0F000062756268424B0168254E682B682C68524E756268424B01684368482981720E0F00007D720F0F00002868267D72100F00008A0600745370E97F6AF30E00007368424B006825686D686E4B008572110F000068708772120F00005272130F0000284B014B034B038672140F00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72150F00007472160F000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847406C0000000000006AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472170F00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172180F00007D72190F00002868267D721A0F000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D69746572721B0F00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074721C0F00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D00002981721D0F00007D721E0F00002868034E6805896806680168074E68086A6C0D00006809680A5D721F0F00005D72200F00006AB00D000068774308000000000000000072210F00008672220F00005272230F0000618672240F00008172250F00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672260F00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72270F00006AC20D00006AC30D00006AC40D000047404B9999999999986AC50D000047401C0000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172280F00007D72290F000028682B682C682D4B02682E4B0268267D722A0F0000683068312981722B0F00007D722C0F00002868267D722D0F00008A06E8795370E97F6A280F000073689268692981722E0F00007D722F0F000028686C686D686E4B008572300F000068708772310F00005272320F0000284B014B028572330F00006877894310000000000000F07F000000000000F07F72340F00007472350F000062687C8868267D72360F00008A06B87E5370E97F6A2B0F00007368424B01687E686D686E4B008572370F000068708772380F00005272390F0000284B014B024B0286723A0F00006877894320343333333373714000000000000000006766666666E674400000000000001C40723B0F000074723C0F000062682B682C6885686D686E4B0085723D0F0000687087723E0F000052723F0F0000284B014B024B028672400F00006877894320343333333373714000000000000000006766666666E674400000000000001C4072410F00007472420F000062756268424B0168254E682B682C68524E756268424B0168436848298172430F00007D72440F00002868267D72450F00008A06E8" + }, + { + "0": "0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B04636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A0678E94F70E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A0640925370E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A7135298171367D71372858020000005F787138683268267D713958080000005F696E76616C6964713A4B0168254E682B682C58090000005F696E766572746564713B4E58020000005F79713C636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A713D2981713E7D713F2868267D71408A0640925370E97F683673683A4B01682B682C683B4E756275628A0680E75070E97F6828298171417D714228682B682C682D4B02682E4B0268267D71438A06F0E75070E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7144298171457D71462868267D7147683A4B01580A0000005F7472616E73666F726D71486841682B682C58050000005F62626F787149636D6174706C6F746C69622E7472616E73666F726D730A42626F780A714A2981714B7D714C2858070000005F6D696E706F73714D636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A714E636E756D70790A6E6461727261790A714F4B008571504301627151877152527153284B014B02857154636E756D70790A64747970650A71555802000000663871564B004B01877157527158284B0358010000003C71594E4E4E4AFFFFFFFF4AFFFFFFFF4B0074715A62894310000000000000F07F000000000000F07F715B74715C6258070000005F69676E6F7265715D8868267D715E8A06F0E75070E97F684573683A4B01580C0000005F706F696E74735F6F726967715F684E684F4B008571606851877161527162284B014B024B02867163685889432000000000000000000000000000000000000000000000F03F000000000000F03F716474716562682B682C58070000005F706F696E74737166684E684F4B008571676851877168527169284B014B024B0286716A685889432000000000000000000000000000000000000000000000F03F000000000000F03F716B74716C62756268664E756273683068282981716D7D716E28682B682C682D4B02682E4B0268267D716F8A0680E75070E97F68417368306831298171707D71712868267D71728A0610E75070E97F686D7358070000005F626F786F75747173684A298171747D717528684D684E684F4B008571766851877177527178284B014B028571796858894310000000000000F07F000000000000F07F717A74717B62685D8868267D717C8A06A0E65070E97F687073683A4B01685F684E684F4B0085717D685187717E52717F284B014B024B02867180685889432000000000000000000000000000000000000000000000F03F000000000000F03F718174718262682B682C6866684E684F4B008571836851877184527185284B014B024B02867186685889432000000000000000000000000000000000000000000000F03F000000000000F03F7187747188627562683A4B0168254E682B682C683B4E7562683A4B0158020000005F627189636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A718A2981718B7D718C2868267D718D8A0610E75070E97F686D73683A4B026825684E684F4B0085718E685187718F527190284B014B034B038671916858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F719274719362682B682C683B4E75627562683A4B016889683275628A0678E94F70E97F68298A0608995070E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A7194298171957D71962868386828298171977D719828682B682C682D4B02682E4B0268267D7199288A0608995070E97F68958A0678995070E97F68942981719A7D719B286838683268267D719C288A06A0365470E97F68282981719D7D719E28682B682C682D4B02682E4B0268267D719F6830689A683A4B0268896822298171A07D71A12868254E68267D71A28A06A0365470E97F689D73683A4B01580C0000005F7363616C655F7472616E7371A3688A298171A47D71A52868267D71A6288A0680E05370E97F6822298171A77D71A82868254E68267D71A98A0668E65370E97F6828298171AA7D71AB28682B682C682D4B02682E4B0268267D71AC68306895683A4B02688968A7756273683A4B0168A368A4682B682C683B4E58020000005F7471AD4B0047BFB33333333333348671AE75628A0680305470E97F6822298171AF7D71B02868254E68267D71B18A0660EF5370E97F6828298171B27D71B328682B682C682D4B02682E4B0268267D71B46830689A683A4B02688968AF756273683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008671B575628A06506C4E70E97F6822298171B67D71B72868254E68267D71B88A06C06C4E70E97F6828298171B97D71BA28682B682C682D4B02682E4B0268267D71BB68306894298171BC7D71BD2868386828298171BE7D71BF28682B682C682D4B02682E4B0268267D71C0288A06C0555570E97F68BC8A06A8545570E97F6894298171C17D71C22868386831298171C37D71C42868267D71C5288A06C0555570E97F68BC8A06009B5470E97F6828298171C67D71C728682B682C682D4B02682E4B0268267D71C88A0628985470E97F6844298171C97D71CA2868267D71CB683A4B01684868C6682B682C6849684A298171CC7D71CD28684D684E684F4B008571CE68518771CF5271D0284B014B028571D16858894310000000000000F07F000000000000F07F71D27471D362685D8868267D71D48A0628985470E97F68C973683A4B01685F684E684F4B008571D568518771D65271D7284B014B024B028671D8685889432000000000000000000000000000000000000000000000F03F000000000000F03F71D97471DA62682B682C6866684E684F4B008571DB68518771DC5271DD284B014B024B028671DE685889432000000000000000000000000000000000000000000000F03F000000000000F03F71DF7471E062756268664E75627368306828298171E17D71E228682B682C682D4B02682E4B0268267D71E38A06009B5470E97F68C67368306831298171E47D71E52868267D71E68A06589A5470E97F68E1736873684A298171E77D71E828684D684E684F4B008571E968518771EA5271EB284B014B028571EC6858894310000000000000F07F000000000000F07F71ED7471EE62685D8868267D71EF8A06E8995470E97F68E473683A4B01685F684E684F4B008571F068518771F15271F2284B014B024B028671F3685889432000000000000000000000000000000000000000000000F03F000000000000F03F71F47471F562682B682C6866684E684F4B008571F668518771F75271F8284B014B024B028671F9685889432000000000000000000000000000000000000000000000F03F000000000000F03F71FA7471FB627562683A4B0168254E682B682C683B4E7562683A4B016889688A298171FC7D71FD2868267D71FE8A06589A5470E97F68E173683A4B026825684E684F4B008571FF6851877200010000527201010000284B014B034B038672020100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720301000074720401000062682B682C683B4E75627562683A4B01688968C375628A0690F35D70E97F6828298172050100007D720601000028682B682C682D4B02682E4B0268267D72070100008A0620FA5D70E97F6844298172080100007D72090100002868267D720A010000683A4B0168486A05010000682B682C6849684A2981720B0100007D720C01000028684D684E684F4B0085720D010000685187720E01000052720F010000284B014B028572100100006858894310000000000000F07F000000000000F07F721101000074721201000062685D8868267D72130100008A0620FA5D70E97F6A0801000073683A4B01685F684E684F4B008572140100006851877215010000527216010000284B014B024B02867217010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721801000074721901000062682B682C6866684E684F4B0085721A010000685187721B01000052721C010000284B014B024B0286721D010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721E01000074721F01000062756268664E75627368306828298172200100007D722101000028682B682C682D4B02682E4B0268267D72220100008A0690F35D70E97F6A050100007368306831298172230100007D72240100002868267D72250100008A0678F95D70E97F6A20010000736873684A298172260100007D722701000028684D684E684F4B00857228010000685187722901000052722A010000284B014B0285722B0100006858894310000000000000F07F000000000000F07F722C01000074722D01000062685D8868267D722E0100008A0618F55D70E97F6A2301000073683A4B01685F684E684F4B0085722F0100006851877230010000527231010000284B014B024B02867232010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723301000074723401000062682B682C6866684E684F4B008572350100006851877236010000527237010000284B014B024B02867238010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723901000074723A010000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981723B0100007D723C0100002868267D723D0100008A0678F95D70E97F6A2001000073683A4B026825684E684F4B0085723E010000685187723F010000527240010000284B014B034B038672410100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724201000074724301000062682B682C683B4E75627562683A4B01688968C375628A06F8555570E97F6828298172440100007D724501000028682B682C682D4B02682E4B0268267D72460100008A0668565570E97F68BE736830636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A7247010000298172480100007D72490100002868267D724A0100008A06F8555570E97F6A440100007358060000005F626F78696E724B01000068442981724C0100007D724D0100002868267D724E0100008A0680A05B70E97F6A4801000073683A4B026848636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A724F010000298172500100007D725101000028682E4B0258050000006368696C6472520100006835298172530100007D7254010000286838683D298172550100007D72560100002868267D72570100008A06005B5E70E97F6A5301000073683A4B01682B682C683B4E756268267D72580100008A0680505570E97F6A5001000073683A4B0168254E682B682C683B4E683C683D298172590100007D725A0100002868267D725B0100008A06005B5E70E97F6A5301000073683A4B01682B682C683B4E756275625807000000706172656E7473725C0100007D725D010000288A06D0AF5B70E97F6A4C0100008A0668565570E97F68BE75682D4B027562682B682C6849684A2981725E0100007D725F01000028684D684E684F4B008572600100006851877261010000527262010000284B014B028572630100006858894310000000000000F07F000000000000F07F726401000074726501000062685D8868267D72660100008A06D0AF5B70E97F6A4C01000073683A4B02685F684E684F4B008572670100006851877268010000527269010000284B014B024B0286726A010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726B01000074726C01000062682B682C6866684E684F4B0085726D010000685187726E01000052726F010000284B014B024B0286727001000068588943206666666666E653C00000000000000000CCCCCCCCCC7C8040CDCCCC0C67033B4172710100007472720100006275626866684E684F4B008572730100006851877274010000527275010000284B014B024B02867276010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7277010000747278010000627562683A4B026825684E684F4B00857279010000685187727A01000052727B010000284B014B034B0386727C0100006858894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F727D01000074727E01000062682B682C683B4E7562683A4B02688968C375628A0688CC6170E97F68282981727F0100007D728001000028682B682C682D4B02682E4B0268267D72810100008A0610C76170E97F6844298172820100007D72830100002868267D7284010000683A4B0168486A7F010000682B682C6849684A298172850100007D728601000028684D684E684F4B008572870100006851877288010000527289010000284B014B0285728A0100006858894310000000000000F07F000000000000F07F728B01000074728C01000062685D8868267D728D0100008A0610C76170E97F6A8201000073683A4B01685F684E684F4B0085728E010000685187728F010000527290010000284B014B024B02867291010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729201000074729301000062682B682C6866684E684F4B008572940100006851877295010000527296010000284B014B024B02867297010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729801000074729901000062756268664E756273683068282981729A0100007D729B01000028682B682C682D4B02682E4B0268267D729C0100008A0688CC6170E97F6A7F01000073683068312981729D0100007D729E0100002868267D729F0100008A06B8CE6170E97F6A9A010000736873684A298172A00100007D72A101000028684D684E684F4B008572A201000068518772A30100005272A4010000284B014B028572A50100006858894310000000000000F07F000000000000F07F72A60100007472A701000062685D8868267D72A80100008A0668CD6170E97F6A9D01000073683A4B01685F684E684F4B008572A901000068518772AA0100005272AB010000284B014B024B028672AC010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72AD0100007472AE01000062682B682C6866684E684F4B008572AF01000068518772B00100005272B1010000284B014B024B028672B2010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B30100007472B4010000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172B50100007D72B60100002868267D72B70100008A06B8CE6170E97F6A9A01000073683A4B026825684E684F4B008572B801000068518772B90100005272BA010000284B014B034B038672BB0100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BC0100007472BD01000062682B682C683B4E75627562683A4B01688968C375628A0648C05A70E97F6828298172BE0100007D72BF01000028682B682C682D4B02682E4B0268267D72C00100008A06C8CA5A70E97F6844298172C10100007D72C20100002868267D72C3010000683A4B0168486ABE010000682B682C6849684A298172C40100007D72C501000028684D684E684F4B008572C601000068518772C70100005272C8010000284B014B028572C90100006858894310000000000000F07F000000000000F07F72CA0100007472CB01000062685D8868267D72CC0100008A06C8CA5A70E97F6AC101000073683A4B01685F684E684F4B008572CD01000068518772CE0100005272CF010000284B014B024B028672D0010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D10100007472D201000062682B682C6866684E684F4B008572D301000068518772D40100005272D5010000284B014B024B028672D6010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D70100007472D801000062756268664E75627368306828298172D90100007D72DA01000028682B682C682D4B02682E4B0268267D72DB0100008A0648C05A70E97F6ABE0100007368306831298172DC0100007D72DD0100002868267D72DE0100008A06B0C25A70E97F6AD9010000736873684A298172DF0100007D72E001000028684D684E684F4B008572E101000068518772E20100005272E3010000284B014B028572E40100006858894310000000000000F07F000000000000F07F72E50100007472E601000062685D8868267D72E70100008A0608C95A70E97F6ADC01000073683A4B01685F684E684F4B008572E801000068518772E90100005272EA010000284B014B024B028672EB010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72EC0100007472ED01000062682B682C6866684E684F4B008572EE01000068518772EF0100005272F0010000284B014B024B028672F1010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F20100007472F3010000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172F40100007D72F50100002868267D72F60100008A06B0C25A70E97F6AD901000073683A4B026825684E684F4B008572F701000068518772F80100005272F9010000284B014B034B038672FA0100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72FB0100007472FC01000062682B682C683B4E75627562683A4B01688968C375628A0690335B70E97F6828298172FD0100007D72FE01000028682B682C682D4B02682E4B0268267D72FF0100008A06E0345B70E97F6844298172000200007D72010200002868267D7202020000683A4B0168486AFD010000682B682C6849684A298172030200007D720402000028684D684E684F4B008572050200006851877206020000527207020000284B014B028572080200006858894310000000000000F07F000000000000F07F720902000074720A02000062685D8868267D720B0200008A06E0345B70E97F6A0002000073683A4B01685F684E684F4B0085720C020000685187720D02000052720E020000284B014B024B0286720F020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721002000074721102000062682B682C6866684E684F4B008572120200006851877213020000527214020000284B014B024B02867215020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721602000074721702000062756268664E75627368306828298172180200007D721902000028682B682C682D4B02682E4B0268267D721A0200008A0690335B70E97F6AFD01000073683068312981721B0200007D721C0200002868267D721D0200008A06B0395B70E97F6A18020000736873684A2981721E0200007D721F02000028684D684E684F4B008572200200006851877221020000527222020000284B014B028572230200006858894310000000000000F07F000000000000F07F722402000074722502000062685D8868267D72260200008A0678C95A70E97F6A1B02000073683A4B01685F684E684F4B008572270200006851877228020000527229020000284B014B024B0286722A020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722B02000074722C02000062682B682C6866684E684F4B0085722D020000685187722E02000052722F020000284B014B024B02867230020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7231020000747232020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172330200007D72340200002868267D72350200008A06B0395B70E97F6A1802000073683A4B026825684E684F4B008572360200006851877237020000527238020000284B014B034B038672390200006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723A02000074723B02000062682B682C683B4E75627562683A4B01688968C375628A0678226270E97F68282981723C0200007D723D02000028682B682C682D4B02682E4B0268267D723E0200008A0618256270E97F68442981723F0200007D72400200002868267D7241020000683A4B0168486A3C020000682B682C6849684A298172420200007D724302000028684D684E684F4B008572440200006851877245020000527246020000284B014B028572470200006858894310000000000000F07F000000000000F07F724802000074724902000062685D8868267D724A0200008A0618256270E97F6A3F02000073683A4B01685F684E684F4B0085724B020000685187724C02000052724D020000284B014B024B0286724E020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724F02000074725002000062682B682C6866684E684F4B008572510200006851877252020000527253020000284B014B024B02867254020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725502000074725602000062756268664E75627368306828298172570200007D725802000028682B682C682D4B02682E4B0268267D72590200008A0678226270E97F6A3C02000073683068312981725A0200007D725B0200002868267D725C0200008A0640226270E97F6A57020000736873684A2981725D0200007D725E02000028684D684E684F4B0085725F0200006851877260020000527261020000284B014B028572620200006858894310000000000000F07F000000000000F07F726302000074726402000062685D8868267D72650200008A06A8246270E97F6A5A02000073683A4B01685F684E684F4B008572660200006851877267020000527268020000284B014B024B02867269020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726A02000074726B02000062682B682C6866684E684F4B0085726C020000685187726D02000052726E020000284B014B024B0286726F020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7270020000747271020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172720200007D72730200002868267D72740200008A0640226270E97F6A5702000073683A4B026825684E684F4B008572750200006851877276020000527277020000284B014B034B038672780200006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727902000074727A02000062682B682C683B4E75627562683A4B01688968C375628A06B8276270E97F68282981727B0200007D727C02000028682B682C682D4B02682E4B0268267D727D020000683068C3683A4B01688968222981727E0200007D727F0200002868254E68267D7280020000288A06B8276270E97F6A7B0200008A06F82C6270E97F6828298172810200007D728202000028682B682C682D4B02682E4B0268267D7283020000683068C3683A4B0168896A7E02000075628A06902A6270E97F6828298172840200007D728502000028682B682C682D4B02682E4B0268267D7286020000683068C3683A4B0168896A7E020000756275683A4B0168A368A4682B682C683B4E68AD470000000000000000473FB5555555555555867287020000756275628A06703B5370E97F6828298172880200007D728902000028682B682C682D4B02682E4B0268267D728A0200008A0628915070E97F68442981728B0200007D728C0200002868267D728D020000683A4B0168486A88020000682B682C6849684A2981728E0200007D728F02000028684D684E684F4B008572900200006851877291020000527292020000284B014B028572930200006858894310000000000000F07F000000000000F07F729402000074729502000062685D8868267D72960200008A0628915070E97F6A8B02000073683A4B01685F684E684F4B008572970200006851877298020000527299020000284B014B024B0286729A020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729B02000074729C02000062682B682C6866684E684F4B0085729D020000685187729E02000052729F020000284B014B024B028672A0020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A10200007472A202000062756268664E75627368306828298172A30200007D72A402000028682B682C682D4B02682E4B0268267D72A50200008A06703B5370E97F6A880200007368306831298172A60200007D72A70200002868267D72A80200008A06D00F4F70E97F6AA3020000736873684A298172A90200007D72AA02000028684D684E684F4B008572AB02000068518772AC0200005272AD020000284B014B028572AE0200006858894310000000000000F07F000000000000F07F72AF0200007472B002000062685D8868267D72B10200008A06D80D4F70E97F6AA602000073683A4B01685F684E684F4B008572B202000068518772B30200005272B4020000284B014B024B028672B5020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B60200007472B702000062682B682C6866684E684F4B008572B802000068518772B90200005272BA020000284B014B024B028672BB020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BC0200007472BD020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172BE0200007D72BF0200002868267D72C00200008A06D00F4F70E97F6AA302000073683A4B026825684E684F4B008572C102000068518772C20200005272C3020000284B014B034B038672C40200006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50200007472C602000062682B682C683B4E75627562683A4B01688968C375628A0600FB6170E97F6828298172C70200007D72C802000028682B682C682D4B02682E4B0268267D72C90200008A06A0FD6170E97F6844298172CA0200007D72CB0200002868267D72CC020000683A4B0168486AC7020000682B682C6849684A298172CD0200007D72CE02000028684D684E684F4B008572CF02000068518772D00200005272D1020000284B014B028572D20200006858894310000000000000F07F000000000000F07F72D30200007472D402000062685D8868267D72D50200008A06A0FD6170E97F6ACA02000073683A4B01685F684E684F4B008572D602000068518772D70200005272D8020000284B014B024B028672D9020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0200007472DB02000062682B682C6866684E684F4B008572DC02000068518772DD0200005272DE020000284B014B024B028672DF020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E00200007472E102000062756268664E75627368306828298172E20200007D72E302000028682B682C682D4B02682E4B0268267D72E40200008A0600FB6170E97F6AC70200007368306831298172E50200007D72E60200002868267D72E70200008A0680F06170E97F6AE2020000736873684A298172E80200007D72E902000028684D684E684F4B008572EA02000068518772EB0200005272EC020000284B014B028572ED0200006858894310000000000000F07F000000000000F07F72EE0200007472EF02000062685D8868267D72F00200008A0628FF6170E97F6AE502000073683A4B01685F684E684F4B008572F102000068518772F20200005272F3020000284B014B024B028672F4020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F50200007472F602000062682B682C6866684E684F4B008572F702000068518772F80200005272F9020000284B014B024B028672FA020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FB0200007472FC020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172FD0200007D72FE0200002868267D72FF0200008A0680F06170E97F6AE202000073683A4B026825684E684F4B008572000300006851877201030000527202030000284B014B034B038672030300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720403000074720503000062682B682C683B4E75627562683A4B01688968C375628A0698585570E97F6835298172060300007D720703000028683868C368267D7208030000683A4B0168254E682B682C683B4E683C683D298172090300007D720A0300002868267D720B0300008A0698585570E97F6A0603000073683A4B01682B682C683B4E756275628A06005B5570E97F68352981720C0300007D720D03000028683868C368267D720E030000683A4B0168254E682B682C683B4E683C683D2981720F0300007D72100300002868267D72110300008A06005B5570E97F6A0C03000073683A4B01682B682C683B4E756275628A0620535E70E97F6835298172120300007D7213030000286838683D298172140300007D72150300002868267D72160300008A0620535E70E97F6A1203000073683A4B01682B682C683B4E756268267D7217030000683A4B0168254E682B682C683B4E683C68C375628A0660985470E97F6828298172180300007D721903000028682B682C682D4B02682E4B0268267D721A0300008A06389B5470E97F68442981721B0300007D721C0300002868267D721D030000683A4B0168486A18030000682B682C6849684A2981721E0300007D721F03000028684D684E684F4B008572200300006851877221030000527222030000284B014B028572230300006858894310000000000000F07F000000000000F07F722403000074722503000062685D8868267D72260300008A06389B5470E97F6A1B03000073683A4B01685F684E684F4B008572270300006851877228030000527229030000284B014B024B0286722A030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722B03000074722C03000062682B682C6866684E684F4B0085722D030000685187722E03000052722F030000284B014B024B02867230030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723103000074723203000062756268664E75627368306828298172330300007D723403000028682B682C682D4B02682E4B0268267D72350300008A0660985470E97F6A180300007368306831298172360300007D72370300002868267D72380300008A0680975470E97F6A33030000736873684A298172390300007D723A03000028684D684E684F4B0085723B030000685187723C03000052723D030000284B014B0285723E0300006858894310000000000000F07F000000000000F07F723F03000074724003000062685D8868267D72410300008A0630965470E97F6A3603000073683A4B01685F684E684F4B008572420300006851877243030000527244030000284B014B024B02867245030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724603000074724703000062682B682C6866684E684F4B00857248030000685187724903000052724A030000284B014B024B0286724B030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724C03000074724D030000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981724E0300007D724F0300002868267D72500300008A0680975470E97F6A3303000073683A4B026825684E684F4B008572510300006851877252030000527253030000284B014B034B038672540300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725503000074725603000062682B682C683B4E75627562683A4B01688968C375628A06D05F5570E97F6828298172570300007D725803000028682B682C682D4B02682E4B0268267D72590300008A06A0C66170E97F68442981725A0300007D725B0300002868267D725C030000683A4B0168486A57030000682B682C6849684A2981725D0300007D725E03000028684D684E684F4B0085725F0300006851877260030000527261030000284B014B028572620300006858894310000000000000F07F000000000000F07F726303000074726403000062685D8868267D72650300008A06A0C66170E97F6A5A03000073683A4B01685F684E684F4B008572660300006851877267030000527268030000284B014B024B02867269030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726A03000074726B03000062682B682C6866684E684F4B0085726C030000685187726D03000052726E030000284B014B024B0286726F030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727003000074727103000062756268664E75627368306828298172720300007D727303000028682B682C682D4B02682E4B0268267D72740300008A06D05F5570E97F6A570300007368306831298172750300007D72760300002868267D72770300008A06205A5570E97F6A72030000736873684A298172780300007D727903000028684D684E684F4B0085727A030000685187727B03000052727C030000284B014B0285727D0300006858894310000000000000F07F000000000000F07F727E03000074727F03000062685D8868267D72800300008A0648505570E97F6A7503000073683A4B01685F684E684F4B008572810300006851877282030000527283030000284B014B024B02867284030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728503000074728603000062682B682C6866684E684F4B008572870300006851877288030000527289030000284B014B024B0286728A030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728B03000074728C030000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981728D0300007D728E0300002868267D728F0300008A06205A5570E97F6A7203000073683A4B026825684E684F4B008572900300006851877291030000527292030000284B014B034B038672930300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729403000074729503000062682B682C683B4E75627562683A4B01688968C375628A06D0FF6170E97F6828298172960300007D729703000028682B682C682D4B02682E4B0268267D72980300008A0628F86170E97F6844298172990300007D729A0300002868267D729B030000683A4B0168486A96030000682B682C6849684A2981729C0300007D729D03000028684D684E684F4B0085729E030000685187729F0300005272A0030000284B014B028572A10300006858894310000000000000F07F000000000000F07F72A20300007472A303000062685D8868267D72A40300008A0628F86170E97F6A9903000073683A4B01685F684E684F4B008572A503000068518772A60300005272A7030000284B014B024B028672A8030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A90300007472AA03000062682B682C6866684E684F4B008572AB03000068518772AC0300005272AD030000284B014B024B028672AE030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72AF0300007472B003000062756268664E75627368306828298172B10300007D72B203000028682B682C682D4B02682E4B0268267D72B30300008A06D0FF6170E97F6A960300007368306831298172B40300007D72B50300002868267D72B60300008A06E8F95D70E97F6AB1030000736873684A298172B70300007D72B803000028684D684E684F4B008572B903000068518772BA0300005272BB030000284B014B028572BC0300006858894310000000000000F07F000000000000F07F72BD0300007472BE03000062685D8868267D72BF0300008A0610FE5D70E97F6AB403000073683A4B01685F684E684F4B008572C003000068518772C10300005272C2030000284B014B024B028672C3030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C40300007472C503000062682B682C6866684E684F4B008572C603000068518772C70300005272C8030000284B014B024B028672C9030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72CA0300007472CB030000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172CC0300007D72CD0300002868267D72CE0300008A06E8F95D70E97F6AB103000073683A4B026825684E684F4B008572CF03000068518772D00300005272D1030000284B014B034B038672D20300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D30300007472D403000062682B682C683B4E75627562683A4B01688968C375628A06A8545570E97F68C18A06D0985470E97F6828298172D50300007D72D603000028682B682C682D4B02682E4B0268267D72D70300008A06C09C5470E97F6844298172D80300007D72D90300002868267D72DA030000683A4B0168486AD5030000682B682C6849684A298172DB0300007D72DC03000028684D684E684F4B008572DD03000068518772DE0300005272DF030000284B014B028572E00300006858894310000000000000F07F000000000000F07F72E10300007472E203000062685D8868267D72E30300008A06C09C5470E97F6AD803000073683A4B01685F684E684F4B008572E403000068518772E50300005272E6030000284B014B024B028672E7030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E80300007472E903000062682B682C6866684E684F4B008572EA03000068518772EB0300005272EC030000284B014B024B028672ED030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72EE0300007472EF03000062756268664E75627368306828298172F00300007D72F103000028682B682C682D4B02682E4B0268267D72F20300008A06D0985470E97F6AD50300007368306831298172F30300007D72F40300002868267D72F50300008A06A09D5470E97F6AF0030000736873684A298172F60300007D72F703000028684D684E684F4B008572F803000068518772F90300005272FA030000284B014B028572FB0300006858894310000000000000F07F000000000000F07F72FC0300007472FD03000062685D8868267D72FE0300008A06509C5470E97F6AF303000073683A4B01685F684E684F4B008572FF0300006851877200040000527201040000284B014B024B02867202040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720304000074720404000062682B682C6866684E684F4B008572050400006851877206040000527207040000284B014B024B02867208040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720904000074720A040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981720B0400007D720C0400002868267D720D0400008A06A09D5470E97F6AF003000073683A4B026825684E684F4B0085720E040000685187720F040000527210040000284B014B034B038672110400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721204000074721304000062682B682C683B4E75627562683A4B01688968C375628A0670044F70E97F6828298172140400007D721504000028682B682C682D4B02682E4B0268267D72160400008A06E0044F70E97F6844298172170400007D72180400002868267D7219040000683A4B0168486A14040000682B682C6849684A2981721A0400007D721B04000028684D684E684F4B0085721C040000685187721D04000052721E040000284B014B0285721F0400006858894310000000000000F07F000000000000F07F722004000074722104000062685D8868267D72220400008A06E0044F70E97F6A1704000073683A4B01685F684E684F4B008572230400006851877224040000527225040000284B014B024B02867226040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722704000074722804000062682B682C6866684E684F4B00857229040000685187722A04000052722B040000284B014B024B0286722C040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722D04000074722E04000062756268664E756273683068282981722F0400007D723004000028682B682C682D4B02682E4B0268267D72310400008A0670044F70E97F6A140400007368306831298172320400007D72330400002868267D72340400008A0600044F70E97F6A2F040000736873684A298172350400007D723604000028684D684E684F4B008572370400006851877238040000527239040000284B014B0285723A0400006858894310000000000000F07F000000000000F07F723B04000074723C04000062685D8868267D723D0400008A0658034F70E97F6A3204000073683A4B01685F684E684F4B0085723E040000685187723F040000527240040000284B014B024B02867241040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724204000074724304000062682B682C6866684E684F4B008572440400006851877245040000527246040000284B014B024B02867247040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7248040000747249040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981724A0400007D724B0400002868267D724C0400008A0600044F70E97F6A2F04000073683A4B026825684E684F4B0085724D040000685187724E04000052724F040000284B014B034B038672500400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725104000074725204000062682B682C683B4E75627562683A4B01688968C375628A0648004F70E97F6828298172530400007D725404000028682B682C682D4B02682E4B0268267D72550400008A0640024F70E97F6844298172560400007D72570400002868267D7258040000683A4B0168486A53040000682B682C6849684A298172590400007D725A04000028684D684E684F4B0085725B040000685187725C04000052725D040000284B014B0285725E0400006858894310000000000000F07F000000000000F07F725F04000074726004000062685D8868267D72610400008A0640024F70E97F6A5604000073683A4B01685F684E684F4B008572620400006851877263040000527264040000284B014B024B02867265040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726604000074726704000062682B682C6866684E684F4B00857268040000685187726904000052726A040000284B014B024B0286726B040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726C04000074726D04000062756268664E756273683068282981726E0400007D726F04000028682B682C682D4B02682E4B0268267D72700400008A0648004F70E97F6A530400007368306831298172710400007D72720400002868267D72730400008A06B8004F70E97F6A6E040000736873684A298172740400007D727504000028684D684E684F4B008572760400006851877277040000527278040000284B014B028572790400006858894310000000000000F07F000000000000F07F727A04000074727B04000062685D8868267D727C0400008A06700B4F70E97F6A7104000073683A4B01685F684E684F4B0085727D040000685187727E04000052727F040000284B014B024B02867280040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728104000074728204000062682B682C6866684E684F4B008572830400006851877284040000527285040000284B014B024B02867286040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7287040000747288040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172890400007D728A0400002868267D728B0400008A06B8004F70E97F6A6E04000073683A4B026825684E684F4B0085728C040000685187728D04000052728E040000284B014B034B0386728F0400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729004000074729104000062682B682C683B4E75627562683A4B01688968C375628A06A05D5E70E97F6835298172920400007D729304000028683868C368267D7294040000683A4B0168254E682B682C683B4E683C683D298172950400007D72960400002868267D72970400008A06A05D5E70E97F6A9204000073683A4B01682B682C683B4E756275628A06189C5470E97F6828298172980400007D729904000028682B682C682D4B02682E4B0268267D729A0400008A0620B35370E97F68442981729B0400007D729C0400002868267D729D040000683A4B0168486A98040000682B682C6849684A2981729E0400007D729F04000028684D684E684F4B008572A004000068518772A10400005272A2040000284B014B028572A30400006858894310000000000000F07F000000000000F07F72A40400007472A504000062685D8868267D72A60400008A0620B35370E97F6A9B04000073683A4B01685F684E684F4B008572A704000068518772A80400005272A9040000284B014B024B028672AA040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0400007472AC04000062682B682C6866684E684F4B008572AD04000068518772AE0400005272AF040000284B014B024B028672B0040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B10400007472B204000062756268664E75627368306828298172B30400007D72B404000028682B682C682D4B02682E4B0268267D72B50400008A06189C5470E97F6A980400007368306831298172B60400007D72B70400002868267D72B80400008A06989F5470E97F6AB3040000736873684A298172B90400007D72BA04000028684D684E684F4B008572BB04000068518772BC0400005272BD040000284B014B028572BE0400006858894310000000000000F07F000000000000F07F72BF0400007472C004000062685D8868267D72C10400008A06809E5470E97F6AB604000073683A4B01685F684E684F4B008572C204000068518772C30400005272C4040000284B014B024B028672C5040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C60400007472C704000062682B682C6866684E684F4B008572C804000068518772C90400005272CA040000284B014B024B028672CB040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72CC0400007472CD040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172CE0400007D72CF0400002868267D72D00400008A06989F5470E97F6AB304000073683A4B026825684E684F4B008572D104000068518772D20400005272D3040000284B014B034B038672D40400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D50400007472D604000062682B682C683B4E75627562683A4B01688968C375628A06F8F55D70E97F6828298172D70400007D72D804000028682B682C682D4B02682E4B0268267D72D90400008A06F0F75D70E97F6844298172DA0400007D72DB0400002868267D72DC040000683A4B0168486AD7040000682B682C6849684A298172DD0400007D72DE04000028684D684E684F4B008572DF04000068518772E00400005272E1040000284B014B028572E20400006858894310000000000000F07F000000000000F07F72E30400007472E404000062685D8868267D72E50400008A06F0F75D70E97F6ADA04000073683A4B01685F684E684F4B008572E604000068518772E70400005272E8040000284B014B024B028672E9040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0400007472EB04000062682B682C6866684E684F4B008572EC04000068518772ED0400005272EE040000284B014B024B028672EF040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F00400007472F104000062756268664E75627368306828298172F20400007D72F304000028682B682C682D4B02682E4B0268267D72F40400008A06F8F55D70E97F6AD70400007368306831298172F50400007D72F60400002868267D72F70400008A06C8FA5D70E97F6AF2040000736873684A298172F80400007D72F904000028684D684E684F4B008572FA04000068518772FB0400005272FC040000284B014B028572FD0400006858894310000000000000F07F000000000000F07F72FE0400007472FF04000062685D8868267D72000500008A0680F05D70E97F6AF504000073683A4B01685F684E684F4B008572010500006851877202050000527203050000284B014B024B02867204050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720505000074720605000062682B682C6866684E684F4B008572070500006851877208050000527209050000284B014B024B0286720A050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720B05000074720C050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981720D0500007D720E0500002868267D720F0500008A06C8FA5D70E97F6AF204000073683A4B026825684E684F4B008572100500006851877211050000527212050000284B014B034B038672130500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721405000074721505000062682B682C683B4E75627562683A4B01688968C375628A06902A6270E97F6A840200008A06A0765F70E97F6828298172160500007D721705000028682B682C682D4B02682E4B0268267D72180500008A0680775F70E97F6844298172190500007D721A0500002868267D721B050000683A4B0168486A16050000682B682C6849684A2981721C0500007D721D05000028684D684E684F4B0085721E050000685187721F050000527220050000284B014B028572210500006858894310000000000000F07F000000000000F07F722205000074722305000062685D8868267D72240500008A0680775F70E97F6A1905000073683A4B01685F684E684F4B008572250500006851877226050000527227050000284B014B024B02867228050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722905000074722A05000062682B682C6866684E684F4B0085722B050000685187722C05000052722D050000284B014B024B0286722E050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722F05000074723005000062756268664E75627368306828298172310500007D723205000028682B682C682D4B02682E4B0268267D72330500008A06A0765F70E97F6A160500007368306831298172340500007D72350500002868267D72360500008A0650755F70E97F6A31050000736873684A298172370500007D723805000028684D684E684F4B00857239050000685187723A05000052723B050000284B014B0285723C0500006858894310000000000000F07F000000000000F07F723D05000074723E05000062685D8868267D723F0500008A06F8755F70E97F6A3405000073683A4B01685F684E684F4B008572400500006851877241050000527242050000284B014B024B02867243050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724405000074724505000062682B682C6866684E684F4B008572460500006851877247050000527248050000284B014B024B02867249050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724A05000074724B050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981724C0500007D724D0500002868267D724E0500008A0650755F70E97F6A3105000073683A4B026825684E684F4B0085724F0500006851877250050000527251050000284B014B034B038672520500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725305000074725405000062682B682C683B4E75627562683A4B01688968C375628A06F82C6270E97F6A810200008A0648B75370E97F6828298172550500007D725605000028682B682C682D4B02682E4B0268267D72570500008A0640395B70E97F6844298172580500007D72590500002868267D725A050000683A4B0168486A55050000682B682C6849684A2981725B0500007D725C05000028684D684E684F4B0085725D050000685187725E05000052725F050000284B014B028572600500006858894310000000000000F07F000000000000F07F726105000074726205000062685D8868267D72630500008A0640395B70E97F6A5805000073683A4B01685F684E684F4B008572640500006851877265050000527266050000284B014B024B02867267050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726805000074726905000062682B682C6866684E684F4B0085726A050000685187726B05000052726C050000284B014B024B0286726D050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726E05000074726F05000062756268664E75627368306828298172700500007D727105000028682B682C682D4B02682E4B0268267D72720500008A0648B75370E97F6A550500007368306831298172730500007D72740500002868267D72750500008A0680B05370E97F6A70050000736873684A298172760500007D727705000028684D684E684F4B00857278050000685187727905000052727A050000284B014B0285727B0500006858894310000000000000F07F000000000000F07F727C05000074727D05000062685D8868267D727E0500008A06C0B55370E97F6A7305000073683A4B01685F684E684F4B0085727F0500006851877280050000527281050000284B014B024B02867282050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728305000074728405000062682B682C6866684E684F4B008572850500006851877286050000527287050000284B014B024B02867288050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728905000074728A050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981728B0500007D728C0500002868267D728D0500008A0680B05370E97F6A7005000073683A4B026825684E684F4B0085728E050000685187728F050000527290050000284B014B034B038672910500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729205000074729305000062682B682C683B4E75627562683A4B01688968C375627568736844298172940500007D72950500002868267D72960500008A0658AA5B70E97F68C373683A4B0168486831298172970500007D72980500002868267D7299050000288A0630AD5B70E97F6A940500008A0608C25F70E97F68442981729A0500007D729B0500002868267D729C0500008A0620CA5F70E97F68312981729D0500007D729E0500002868267D729F050000288A06802E5B70E97F6828298172A00500007D72A105000028682B682C682D4B02682E4B0268267D72A20500008A06102E5B70E97F6844298172A30500007D72A40500002868267D72A5050000683A4B0168486AA0050000682B682C6849684A298172A60500007D72A705000028684D684E684F4B008572A805000068518772A90500005272AA050000284B014B028572AB0500006858894310000000000000F07F000000000000F07F72AC0500007472AD05000062685D8868267D72AE0500008A06102E5B70E97F6AA305000073683A4B01685F684E684F4B008572AF05000068518772B00500005272B1050000284B014B024B028672B2050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B30500007472B405000062682B682C6866684E684F4B008572B505000068518772B60500005272B7050000284B014B024B028672B8050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B90500007472BA05000062756268664E75627368306828298172BB0500007D72BC05000028682B682C682D4B02682E4B0268267D72BD0500008A06802E5B70E97F6AA00500007368306831298172BE0500007D72BF0500002868267D72C00500008A06B8475A70E97F6ABB050000736873684A298172C10500007D72C205000028684D684E684F4B008572C305000068518772C40500005272C5050000284B014B028572C60500006858894310000000000000F07F000000000000F07F72C70500007472C805000062685D8868267D72C90500008A06882C5B70E97F6ABE05000073683A4B01685F684E684F4B008572CA05000068518772CB0500005272CC050000284B014B024B028672CD050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72CE0500007472CF05000062682B682C6866684E684F4B008572D005000068518772D10500005272D2050000284B014B024B028672D3050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D40500007472D5050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172D60500007D72D70500002868267D72D80500008A06B8475A70E97F6ABB05000073683A4B026825684E684F4B008572D905000068518772DA0500005272DB050000284B014B034B038672DC0500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72DD0500007472DE05000062682B682C683B4E75627562683A4B0168896A9D05000075628A06C0755970E97F6835298172DF0500007D72E00500002868386A9D05000068267D72E1050000683A4B0168254E682B682C683B4E683C683D298172E20500007D72E30500002868267D72E40500008A06C0755970E97F6ADF05000073683A4B01682B682C683B4E756275628A06681D6170E97F6828298172E50500007D72E605000028682B682C682D4B02682E4B0268267D72E70500008A06B0126170E97F6844298172E80500007D72E90500002868267D72EA050000683A4B0168486AE5050000682B682C6849684A298172EB0500007D72EC05000028684D684E684F4B008572ED05000068518772EE0500005272EF050000284B014B028572F00500006858894310000000000000F07F000000000000F07F72F10500007472F205000062685D8868267D72F30500008A06B0126170E97F6AE805000073683A4B01685F684E684F4B008572F405000068518772F50500005272F6050000284B014B024B028672F7050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F80500007472F905000062682B682C6866684E684F4B008572FA05000068518772FB0500005272FC050000284B014B024B028672FD050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0500007472FF05000062756268664E75627368306828298172000600007D720106000028682B682C682D4B02682E4B0268267D72020600008A06681D6170E97F6AE50500007368306831298172030600007D72040600002868267D72050600008A0698116170E97F6A00060000736873684A298172060600007D720706000028684D684E684F4B00857208060000685187720906000052720A060000284B014B0285720B0600006858894310000000000000F07F000000000000F07F720C06000074720D06000062685D8868267D720E0600008A06801E6170E97F6A0306000073683A4B01685F684E684F4B0085720F0600006851877210060000527211060000284B014B024B02867212060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721306000074721406000062682B682C6866684E684F4B008572150600006851877216060000527217060000284B014B024B02867218060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721906000074721A060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721B0600007D721C0600002868267D721D0600008A0698116170E97F6A0006000073683A4B026825684E684F4B0085721E060000685187721F060000527220060000284B014B034B038672210600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722206000074722306000062682B682C683B4E75627562683A4B0168896A9D05000075628A0648A05B70E97F6828298172240600007D722506000028682B682C682D4B02682E4B0268267D72260600008A0638AB5B70E97F6844298172270600007D72280600002868267D7229060000683A4B0168486A24060000682B682C6849684A2981722A0600007D722B06000028684D684E684F4B0085722C060000685187722D06000052722E060000284B014B0285722F0600006858894310000000000000F07F000000000000F07F723006000074723106000062685D8868267D72320600008A0638AB5B70E97F6A2706000073683A4B01685F684E684F4B008572330600006851877234060000527235060000284B014B024B02867236060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723706000074723806000062682B682C6866684E684F4B00857239060000685187723A06000052723B060000284B014B024B0286723C060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723D06000074723E06000062756268664E756273683068282981723F0600007D724006000028682B682C682D4B02682E4B0268267D72410600008A0648A05B70E97F6A240600007368306831298172420600007D72430600002868267D72440600008A06F8AC5B70E97F6A3F060000736873684A298172450600007D724606000028684D684E684F4B008572470600006851877248060000527249060000284B014B0285724A0600006858894310000000000000F07F000000000000F07F724B06000074724C06000062685D8868267D724D0600008A0670AB5B70E97F6A4206000073683A4B01685F684E684F4B0085724E060000685187724F060000527250060000284B014B024B02867251060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725206000074725306000062682B682C6866684E684F4B008572540600006851877255060000527256060000284B014B024B02867257060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7258060000747259060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981725A0600007D725B0600002868267D725C0600008A06F8AC5B70E97F6A3F06000073683A4B026825684E684F4B0085725D060000685187725E06000052725F060000284B014B034B038672600600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726106000074726206000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660186170E97F6828298172630600007D726406000028682B682C682D4B02682E4B0268267D72650600008A06D01F6170E97F6844298172660600007D72670600002868267D7268060000683A4B0168486A63060000682B682C6849684A298172690600007D726A06000028684D684E684F4B0085726B060000685187726C06000052726D060000284B014B0285726E0600006858894310000000000000F07F000000000000F07F726F06000074727006000062685D8868267D72710600008A06D01F6170E97F6A6606000073683A4B01685F684E684F4B008572720600006851877273060000527274060000284B014B024B02867275060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727606000074727706000062682B682C6866684E684F4B00857278060000685187727906000052727A060000284B014B024B0286727B060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727C06000074727D06000062756268664E756273683068282981727E0600007D727F06000028682B682C682D4B02682E4B0268267D72800600008A0660186170E97F6A630600007368306831298172810600007D72820600002868267D72830600008A06881C6170E97F6A7E060000736873684A298172840600007D728506000028684D684E684F4B008572860600006851877287060000527288060000284B014B028572890600006858894310000000000000F07F000000000000F07F728A06000074728B06000062685D8868267D728C0600008A06E8196170E97F6A8106000073683A4B01685F684E684F4B0085728D060000685187728E06000052728F060000284B014B024B02867290060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729106000074729206000062682B682C6866684E684F4B008572930600006851877294060000527295060000284B014B024B02867296060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7297060000747298060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172990600007D729A0600002868267D729B0600008A06881C6170E97F6A7E06000073683A4B026825684E684F4B0085729C060000685187729D06000052729E060000284B014B034B0386729F0600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A00600007472A106000062682B682C683B4E75627562683A4B0168896A9D05000075628A0630CD5670E97F6828298172A20600007D72A306000028682B682C682D4B02682E4B0268267D72A40600008A0610CE5670E97F6844298172A50600007D72A60600002868267D72A7060000683A4B0168486AA2060000682B682C6849684A298172A80600007D72A906000028684D684E684F4B008572AA06000068518772AB0600005272AC060000284B014B028572AD0600006858894310000000000000F07F000000000000F07F72AE0600007472AF06000062685D8868267D72B00600008A0610CE5670E97F6AA506000073683A4B01685F684E684F4B008572B106000068518772B20600005272B3060000284B014B024B028672B4060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B50600007472B606000062682B682C6866684E684F4B008572B706000068518772B80600005272B9060000284B014B024B028672BA060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BB0600007472BC06000062756268664E75627368306828298172BD0600007D72BE06000028682B682C682D4B02682E4B0268267D72BF0600008A0630CD5670E97F6AA20600007368306831298172C00600007D72C10600002868267D72C20600008A0628C85670E97F6ABD060000736873684A298172C30600007D72C406000028684D684E684F4B008572C506000068518772C60600005272C7060000284B014B028572C80600006858894310000000000000F07F000000000000F07F72C90600007472CA06000062685D8868267D72CB0600008A06B8C05670E97F6AC006000073683A4B01685F684E684F4B008572CC06000068518772CD0600005272CE060000284B014B024B028672CF060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D00600007472D106000062682B682C6866684E684F4B008572D206000068518772D30600005272D4060000284B014B024B028672D5060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D60600007472D7060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172D80600007D72D90600002868267D72DA0600008A0628C85670E97F6ABD06000073683A4B026825684E684F4B008572DB06000068518772DC0600005272DD060000284B014B034B038672DE0600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72DF0600007472E006000062682B682C683B4E75627562683A4B0168896A9D05000075628A0690A35B70E97F6835298172E10600007D72E20600002868386A9D05000068267D72E3060000683A4B0168254E682B682C683B4E683C683D298172E40600007D72E50600002868267D72E60600008A0690A35B70E97F6AE106000073683A4B01682B682C683B4E756275628A0698315770E97F6828298172E70600007D72E806000028682B682C682D4B02682E4B0268267D72E906000068306A9D050000683A4B0168896822298172EA0600007D72EB0600002868254E68267D72EC060000288A0648C75970E97F6828298172ED0600007D72EE06000028682B682C682D4B02682E4B0268267D72EF06000068306A9D050000683A4B0168896AEA06000075628A0658CA5970E97F6828298172F00600007D72F106000028682B682C682D4B02682E4B0268267D72F206000068306A9D050000683A4B0168896AEA06000075628A0698315770E97F6AE706000075683A4B0168A368A4682B682C683B4E68AD470000000000000000473FB55555555555558672F3060000756275628A0678A96070E97F6828298172F40600007D72F506000028682B682C682D4B02682E4B0268267D72F60600008A0640A26070E97F6828298172F70600007D72F806000028682B682C682D4B02682E4B0268267D72F9060000288A0660AF6070E97F6894298172FA0600007D72FB0600002868386AF706000068267D72FC060000288A0680305370E97F6828298172FD0600007D72FE06000028682B682C682D4B02682E4B0268267D72FF06000068306AFA060000683A4B0268896822298172000700007D72010700002868254E68267D72020700008A0680305370E97F6AFD06000073683A4B0168A368A4682B682C683B4E68AD4B00473FB3333333333334867203070000756275628A0650255C70E97F6828298172040700007D720507000028682B682C682D4B02682E4B0268267D720607000068306AFA060000683A4B0268896822298172070700007D72080700002868254E68267D72090700008A0650255C70E97F6A0407000073683A4B0168A368A4682B682C683B4E68AD4B00473FB333333333333486720A070000756275628A06B8775270E97F68282981720B0700007D720C07000028682B682C682D4B02682E4B0268267D720D07000068306AFA060000683A4B02688968222981720E0700007D720F0700002868254E68267D72100700008A06B8775270E97F6A0B07000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E39867211070000756275628A06E8395370E97F6828298172120700007D721307000028682B682C682D4B02682E4B0268267D721407000068306AFA060000683A4B0268896822298172150700007D72160700002868254E68267D72170700008A06E8395370E97F6A1207000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E39867218070000756275628A06103E5370E97F6828298172190700007D721A07000028682B682C682D4B02682E4B0268267D721B07000068306AFA060000683A4B02688968222981721C0700007D721D0700002868254E68267D721E0700008A06103E5370E97F6A1907000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB333333333333486721F070000756275628A0630765270E97F6828298172200700007D722107000028682B682C682D4B02682E4B0268267D722207000068306AFA060000683A4B0268896822298172230700007D72240700002868254E68267D72250700008A0630765270E97F6A2007000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E39867226070000756275628A06882C5C70E97F6828298172270700007D722807000028682B682C682D4B02682E4B0268267D722907000068306AFA060000683A4B02688968222981722A0700007D722B0700002868254E68267D722C0700008A06882C5C70E97F6A2707000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB333333333333486722D070000756275628A0698385370E97F68282981722E0700007D722F07000028682B682C682D4B02682E4B0268267D723007000068306AFA060000683A4B0268896822298172310700007D72320700002868254E68267D72330700008A0698385370E97F6A2E07000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672340700007562756275683A4B0258070000005F616666696E6572350700004E682B682C683C6A9D05000075628A0660A86070E97F6894298172360700007D72370700002868386A9D05000068267D7238070000288A06D04F5A70E97F6828298172390700007D723A07000028682B682C682D4B02682E4B0268267D723B07000068306A36070000683A4B02688968222981723C0700007D723D0700002868254E68267D723E0700008A06D04F5A70E97F6A3907000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B0086723F070000756275628A06B84E5A70E97F6828298172400700007D724107000028682B682C682D4B02682E4B0268267D724207000068306A36070000683A4B0268896822298172430700007D72440700002868254E68267D72450700008A06B84E5A70E97F6A4007000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B00867246070000756275628A06F8655D70E97F6828298172470700007D724807000028682B682C682D4B02682E4B0268267D724907000068306A36070000683A4B02688968222981724A0700007D724B0700002868254E68267D724C0700008A06F8655D70E97F6A4707000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B0086724D070000756275628A0648605D70E97F68282981724E0700007D724F07000028682B682C682D4B02682E4B0268267D725007000068306A36070000683A4B0268896822298172510700007D72520700002868254E68267D72530700008A0648605D70E97F6A4E07000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B00867254070000756275628A0638445A70E97F6828298172550700007D725607000028682B682C682D4B02682E4B0268267D725707000068306A36070000683A4B0268896822298172580700007D72590700002868254E68267D725A0700008A0638445A70E97F6A5507000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B0086725B070000756275628A0688755270E97F68282981725C0700007D725D07000028682B682C682D4B02682E4B0268267D725E07000068306A36070000683A4B02688968222981725F0700007D72600700002868254E68267D72610700008A0688755270E97F6A5C07000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B00867262070000756275628A06584A5A70E97F6828298172630700007D726407000028682B682C682D4B02682E4B0268267D726507000068306A36070000683A4B0268896822298172660700007D72670700002868254E68267D72680700008A06584A5A70E97F6A6307000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B00867269070000756275628A0658735270E97F68282981726A0700007D726B07000028682B682C682D4B02682E4B0268267D726C07000068306A36070000683A4B02688968222981726D0700007D726E0700002868254E68267D726F0700008A0658735270E97F6A6A07000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672700700007562756275683A4B026A350700004E682B682C683C6AF706000075627568306A4F010000298172710700007D727207000028682E4B026A520100006835298172730700007D7274070000286838683D298172750700007D72760700002868267D72770700008A06A8145C70E97F6A7307000073683A4B01682B682C683B4E756268267D72780700008A0658CA5F70E97F6A7107000073683A4B0168254E682B682C683B4E683C683D298172790700007D727A0700002868267D727B0700008A06A8145C70E97F6A7307000073683A4B01682B682C683B4E756275626A5C0100007D727C070000288A0610C75F70E97F68442981727D0700007D727E0700002868267D727F0700008A06D0CF5F70E97F6A47010000298172800700007D72810700002868267D72820700008A0678A96070E97F6AF4060000736A4B0100006A7D070000683A4B026825684E684F4B008572830700006851877284070000527285070000284B014B034B038672860700006858894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F728707000074728807000062682B682C683B4E756273683A4B0268486A71070000682B682C6849684A298172890700007D728A07000028684D684E684F4B0085728B070000685187728C07000052728D070000284B014B0285728E0700006858894310000000000000F07F000000000000F07F728F07000074729007000062685D8868267D72910700008A0610C75F70E97F6A7D07000073683A4B02685F684E684F4B008572920700006851877293070000527294070000284B014B024B02867295070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729607000074729707000062682B682C6866684E684F4B00857298070000685187729907000052729A070000284B014B024B0286729B070000685889432000000000000022C000000000000000000000000000A06740000000C0CA473B41729C07000074729D0700006275626866684E684F4B0085729E070000685187729F0700005272A0070000284B014B024B028672A1070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A20700007472A30700006275628A0640A26070E97F6AF706000075682D4B027562683A4B0268896AF406000075627368306A80070000683A4B0268896A9D05000075628A0658C35670E97F6828298172A40700007D72A507000028682B682C682D4B02682E4B0268267D72A60700008A0658CA5670E97F6844298172A70700007D72A80700002868267D72A9070000683A4B0168486AA4070000682B682C6849684A298172AA0700007D72AB07000028684D684E684F4B008572AC07000068518772AD0700005272AE070000284B014B028572AF0700006858894310000000000000F07F000000000000F07F72B00700007472B107000062685D8868267D72B20700008A0658CA5670E97F6AA707000073683A4B01685F684E684F4B008572B307000068518772B40700005272B5070000284B014B024B028672B6070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B70700007472B807000062682B682C6866684E684F4B008572B907000068518772BA0700005272BB070000284B014B024B028672BC070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0700007472BE07000062756268664E75627368306828298172BF0700007D72C007000028682B682C682D4B02682E4B0268267D72C10700008A0658C35670E97F6AA40700007368306831298172C20700007D72C30700002868267D72C40700008A0648C75670E97F6ABF070000736873684A298172C50700007D72C607000028684D684E684F4B008572C707000068518772C80700005272C9070000284B014B028572CA0700006858894310000000000000F07F000000000000F07F72CB0700007472CC07000062685D8868267D72CD0700008A0650C55670E97F6AC207000073683A4B01685F684E684F4B008572CE07000068518772CF0700005272D0070000284B014B024B028672D1070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D20700007472D307000062682B682C6866684E684F4B008572D407000068518772D50700005272D6070000284B014B024B028672D7070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D80700007472D9070000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DA0700007D72DB0700002868267D72DC0700008A0648C75670E97F6ABF07000073683A4B026825684E684F4B008572DD07000068518772DE0700005272DF070000284B014B034B038672E00700006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E10700007472E207000062682B682C683B4E75627562683A4B0168896A9D05000075628A06F00E5F70E97F6835298172E30700007D72E40700002868386A9D05000068267D72E5070000683A4B0168254E682B682C683B4E683C683D298172E60700007D72E70700002868267D72E80700008A06F00E5F70E97F6AE307000073683A4B01682B682C683B4E756275628A06203A5D70E97F6828298172E90700007D72EA07000028682B682C682D4B02682E4B0268267D72EB0700008A06E03B5D70E97F6844298172EC0700007D72ED0700002868267D72EE070000683A4B0168486AE9070000682B682C6849684A298172EF0700007D72F007000028684D684E684F4B008572F107000068518772F20700005272F3070000284B014B028572F40700006858894310000000000000F07F000000000000F07F72F50700007472F607000062685D8868267D72F70700008A06E03B5D70E97F6AEC07000073683A4B01685F684E684F4B008572F807000068518772F90700005272FA070000284B014B024B028672FB070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0700007472FD07000062682B682C6866684E684F4B008572FE07000068518772FF070000527200080000284B014B024B02867201080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720208000074720308000062756268664E75627368306828298172040800007D720508000028682B682C682D4B02682E4B0268267D72060800008A06203A5D70E97F6AE90700007368306831298172070800007D72080800002868267D72090800008A0608395D70E97F6A04080000736873684A2981720A0800007D720B08000028684D684E684F4B0085720C080000685187720D08000052720E080000284B014B0285720F0800006858894310000000000000F07F000000000000F07F721008000074721108000062685D8868267D72120800008A06183C5D70E97F6A0708000073683A4B01685F684E684F4B008572130800006851877214080000527215080000284B014B024B02867216080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721708000074721808000062682B682C6866684E684F4B00857219080000685187721A08000052721B080000284B014B024B0286721C080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721D08000074721E080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721F0800007D72200800002868267D72210800008A0608395D70E97F6A0408000073683A4B026825684E684F4B008572220800006851877223080000527224080000284B014B034B038672250800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722608000074722708000062682B682C683B4E75627562683A4B0168896A9D05000075628A06986F5C70E97F6828298172280800007D722908000028682B682C682D4B02682E4B0268267D722A0800008A06E0645C70E97F68442981722B0800007D722C0800002868267D722D080000683A4B0168486A28080000682B682C6849684A2981722E0800007D722F08000028684D684E684F4B008572300800006851877231080000527232080000284B014B028572330800006858894310000000000000F07F000000000000F07F723408000074723508000062685D8868267D72360800008A06E0645C70E97F6A2B08000073683A4B01685F684E684F4B008572370800006851877238080000527239080000284B014B024B0286723A080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723B08000074723C08000062682B682C6866684E684F4B0085723D080000685187723E08000052723F080000284B014B024B02867240080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724108000074724208000062756268664E75627368306828298172430800007D724408000028682B682C682D4B02682E4B0268267D72450800008A06986F5C70E97F6A280800007368306831298172460800007D72470800002868267D72480800008A06F86C5C70E97F6A43080000736873684A298172490800007D724A08000028684D684E684F4B0085724B080000685187724C08000052724D080000284B014B0285724E0800006858894310000000000000F07F000000000000F07F724F08000074725008000062685D8868267D72510800008A06A06D5C70E97F6A4608000073683A4B01685F684E684F4B008572520800006851877253080000527254080000284B014B024B02867255080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725608000074725708000062682B682C6866684E684F4B00857258080000685187725908000052725A080000284B014B024B0286725B080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725C08000074725D080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981725E0800007D725F0800002868267D72600800008A06F86C5C70E97F6A4308000073683A4B026825684E684F4B008572610800006851877262080000527263080000284B014B034B038672640800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726508000074726608000062682B682C683B4E75627562683A4B0168896A9D05000075628A06F02E5B70E97F6828298172670800007D726808000028682B682C682D4B02682E4B0268267D72690800008A06282F5B70E97F68442981726A0800007D726B0800002868267D726C080000683A4B0168486A67080000682B682C6849684A2981726D0800007D726E08000028684D684E684F4B0085726F0800006851877270080000527271080000284B014B028572720800006858894310000000000000F07F000000000000F07F727308000074727408000062685D8868267D72750800008A06282F5B70E97F6A6A08000073683A4B01685F684E684F4B008572760800006851877277080000527278080000284B014B024B02867279080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727A08000074727B08000062682B682C6866684E684F4B0085727C080000685187727D08000052727E080000284B014B024B0286727F080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728008000074728108000062756268664E75627368306828298172820800007D728308000028682B682C682D4B02682E4B0268267D72840800008A06F02E5B70E97F6A670800007368306831298172850800007D72860800002868267D72870800008A06602F5B70E97F6A82080000736873684A298172880800007D728908000028684D684E684F4B0085728A080000685187728B08000052728C080000284B014B0285728D0800006858894310000000000000F07F000000000000F07F728E08000074728F08000062685D8868267D72900800008A0698715270E97F6A8508000073683A4B01685F684E684F4B008572910800006851877292080000527293080000284B014B024B02867294080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729508000074729608000062682B682C6866684E684F4B008572970800006851877298080000527299080000284B014B024B0286729A080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729B08000074729C080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981729D0800007D729E0800002868267D729F0800008A06602F5B70E97F6A8208000073683A4B026825684E684F4B008572A008000068518772A10800005272A2080000284B014B034B038672A30800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A40800007472A508000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660315D70E97F6828298172A60800007D72A708000028682B682C682D4B02682E4B0268267D72A80800008A0648305D70E97F6844298172A90800007D72AA0800002868267D72AB080000683A4B0168486AA6080000682B682C6849684A298172AC0800007D72AD08000028684D684E684F4B008572AE08000068518772AF0800005272B0080000284B014B028572B10800006858894310000000000000F07F000000000000F07F72B20800007472B308000062685D8868267D72B40800008A0648305D70E97F6AA908000073683A4B01685F684E684F4B008572B508000068518772B60800005272B7080000284B014B024B028672B8080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B90800007472BA08000062682B682C6866684E684F4B008572BB08000068518772BC0800005272BD080000284B014B024B028672BE080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0800007472C008000062756268664E75627368306828298172C10800007D72C208000028682B682C682D4B02682E4B0268267D72C30800008A0660315D70E97F6AA60800007368306831298172C40800007D72C50800002868267D72C60800008A0658335D70E97F6AC1080000736873684A298172C70800007D72C808000028684D684E684F4B008572C908000068518772CA0800005272CB080000284B014B028572CC0800006858894310000000000000F07F000000000000F07F72CD0800007472CE08000062685D8868267D72CF0800008A06F0176170E97F6AC408000073683A4B01685F684E684F4B008572D008000068518772D10800005272D2080000284B014B024B028672D3080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D40800007472D508000062682B682C6866684E684F4B008572D608000068518772D70800005272D8080000284B014B024B028672D9080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0800007472DB080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DC0800007D72DD0800002868267D72DE0800008A0658335D70E97F6AC108000073683A4B026825684E684F4B008572DF08000068518772E00800005272E1080000284B014B034B038672E20800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E30800007472E408000062682B682C683B4E75627562683A4B0168896A9D05000075628A0650A55B70E97F6828298172E50800007D72E608000028682B682C682D4B02682E4B0268267D72E70800008A0648A75B70E97F6844298172E80800007D72E90800002868267D72EA080000683A4B0168486AE5080000682B682C6849684A298172EB0800007D72EC08000028684D684E684F4B008572ED08000068518772EE0800005272EF080000284B014B028572F00800006858894310000000000000F07F000000000000F07F72F10800007472F208000062685D8868267D72F30800008A0648A75B70E97F6AE808000073683A4B01685F684E684F4B008572F408000068518772F50800005272F6080000284B014B024B028672F7080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F80800007472F908000062682B682C6866684E684F4B008572FA08000068518772FB0800005272FC080000284B014B024B028672FD080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0800007472FF08000062756268664E75627368306828298172000900007D720109000028682B682C682D4B02682E4B0268267D72020900008A0650A55B70E97F6AE50800007368306831298172030900007D72040900002868267D72050900008A06C0A55B70E97F6A00090000736873684A298172060900007D720709000028684D684E684F4B00857208090000685187720909000052720A090000284B014B0285720B0900006858894310000000000000F07F000000000000F07F720C09000074720D09000062685D8868267D720E0900008A06A0AD5B70E97F6A0309000073683A4B01685F684E684F4B0085720F0900006851877210090000527211090000284B014B024B02867212090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721309000074721409000062682B682C6866684E684F4B008572150900006851877216090000527217090000284B014B024B02867218090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721909000074721A090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721B0900007D721C0900002868267D721D0900008A06C0A55B70E97F6A0009000073683A4B026825684E684F4B0085721E090000685187721F090000527220090000284B014B034B038672210900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722209000074722309000062682B682C683B4E75627562683A4B0168896A9D05000075628A0648C75970E97F6AED0600008A06707B5970E97F6835298172240900007D7225090000286838683D298172260900007D72270900002868267D72280900008A06707B5970E97F6A2409000073683A4B01682B682C683B4E756268267D7229090000683A4B0168254E682B682C683B4E683C6A9D05000075628A06A81B5C70E97F68282981722A0900007D722B09000028682B682C682D4B02682E4B0268267D722C0900008A06C01C5C70E97F68442981722D0900007D722E0900002868267D722F090000683A4B0168486A2A090000682B682C6849684A298172300900007D723109000028684D684E684F4B008572320900006851877233090000527234090000284B014B028572350900006858894310000000000000F07F000000000000F07F723609000074723709000062685D8868267D72380900008A06C01C5C70E97F6A2D09000073683A4B01685F684E684F4B00857239090000685187723A09000052723B090000284B014B024B0286723C090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723D09000074723E09000062682B682C6866684E684F4B0085723F0900006851877240090000527241090000284B014B024B02867242090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724309000074724409000062756268664E75627368306828298172450900007D724609000028682B682C682D4B02682E4B0268267D72470900008A06A81B5C70E97F6A2A0900007368306831298172480900007D72490900002868267D724A0900008A0608195C70E97F6A45090000736873684A2981724B0900007D724C09000028684D684E684F4B0085724D090000685187724E09000052724F090000284B014B028572500900006858894310000000000000F07F000000000000F07F725109000074725209000062685D8868267D72530900008A0668165C70E97F6A4809000073683A4B01685F684E684F4B008572540900006851877255090000527256090000284B014B024B02867257090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725809000074725909000062682B682C6866684E684F4B0085725A090000685187725B09000052725C090000284B014B024B0286725D090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725E09000074725F090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172600900007D72610900002868267D72620900008A0608195C70E97F6A4509000073683A4B026825684E684F4B008572630900006851877264090000527265090000284B014B034B038672660900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726709000074726809000062682B682C683B4E75627562683A4B0168896A9D05000075628A0668665D70E97F6828298172690900007D726A09000028682B682C682D4B02682E4B0268267D726B0900008A0688CC5970E97F68442981726C0900007D726D0900002868267D726E090000683A4B0168486A69090000682B682C6849684A2981726F0900007D727009000028684D684E684F4B008572710900006851877272090000527273090000284B014B028572740900006858894310000000000000F07F000000000000F07F727509000074727609000062685D8868267D72770900008A0688CC5970E97F6A6C09000073683A4B01685F684E684F4B00857278090000685187727909000052727A090000284B014B024B0286727B090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727C09000074727D09000062682B682C6866684E684F4B0085727E090000685187727F090000527280090000284B014B024B02867281090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728209000074728309000062756268664E75627368306828298172840900007D728509000028682B682C682D4B02682E4B0268267D72860900008A0668665D70E97F6A690900007368306831298172870900007D72880900002868267D72890900008A06206A5D70E97F6A84090000736873684A2981728A0900007D728B09000028684D684E684F4B0085728C090000685187728D09000052728E090000284B014B0285728F0900006858894310000000000000F07F000000000000F07F729009000074729109000062685D8868267D72920900008A0640695D70E97F6A8709000073683A4B01685F684E684F4B008572930900006851877294090000527295090000284B014B024B02867296090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729709000074729809000062682B682C6866684E684F4B00857299090000685187729A09000052729B090000284B014B024B0286729C090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729D09000074729E090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981729F0900007D72A00900002868267D72A10900008A06206A5D70E97F6A8409000073683A4B026825684E684F4B008572A209000068518772A30900005272A4090000284B014B034B038672A50900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A60900007472A709000062682B682C683B4E75627562683A4B0168896A9D05000075628A06C0CC5670E97F6828298172A80900007D72A909000028682B682C682D4B02682E4B0268267D72AA0900008A0618CC5670E97F6844298172AB0900007D72AC0900002868267D72AD090000683A4B0168486AA8090000682B682C6849684A298172AE0900007D72AF09000028684D684E684F4B008572B009000068518772B10900005272B2090000284B014B028572B30900006858894310000000000000F07F000000000000F07F72B40900007472B509000062685D8868267D72B60900008A0618CC5670E97F6AAB09000073683A4B01685F684E684F4B008572B709000068518772B80900005272B9090000284B014B024B028672BA090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BB0900007472BC09000062682B682C6866684E684F4B008572BD09000068518772BE0900005272BF090000284B014B024B028672C0090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C10900007472C209000062756268664E75627368306828298172C30900007D72C409000028682B682C682D4B02682E4B0268267D72C50900008A06C0CC5670E97F6AA80900007368306831298172C60900007D72C70900002868267D72C80900008A0660B8167CE97F6AC3090000736873684A298172C90900007D72CA09000028684D684E684F4B008572CB09000068518772CC0900005272CD090000284B014B028572CE0900006858894310000000000000F07F000000000000F07F72CF0900007472D009000062685D8868267D72D10900008A0640625C70E97F6AC609000073683A4B01685F684E684F4B008572D209000068518772D30900005272D4090000284B014B024B028672D5090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D60900007472D709000062682B682C6866684E684F4B008572D809000068518772D90900005272DA090000284B014B024B028672DB090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0900007472DD090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DE0900007D72DF0900002868267D72E00900008A0660B8167CE97F6AC309000073683A4B026825684E684F4B008572E109000068518772E20900005272E3090000284B014B034B038672E40900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E50900007472E609000062682B682C683B4E75627562683A4B0168896A9D05000075628A06902A5B70E97F6828298172E70900007D72E809000028682B682C682D4B02682E4B0268267D72E90900008A0690135870E97F6844298172EA0900007D72EB0900002868267D72EC090000683A4B0168486AE7090000682B682C6849684A298172ED0900007D72EE09000028684D684E684F4B008572EF09000068518772F00900005272F1090000284B014B028572F20900006858894310000000000000F07F000000000000F07F72F30900007472F409000062685D8868267D72F50900008A0690135870E97F6AEA09000073683A4B01685F684E684F4B008572F609000068518772F70900005272F8090000284B014B024B028672F9090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FA0900007472FB09000062682B682C6866684E684F4B008572FC09000068518772FD0900005272FE090000284B014B024B028672FF090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72000A00007472010A000062756268664E75627368306828298172020A00007D72030A000028682B682C682D4B02682E4B0268267D72040A00008A06902A5B70E97F6AE70900007368306831298172050A00007D72060A00002868267D72070A00008A06C02C5B70E97F6A020A0000736873684A298172080A00007D72090A000028684D684E684F4B0085720A0A0000685187720B0A000052720C0A0000284B014B0285720D0A00006858894310000000000000F07F000000000000F07F720E0A000074720F0A000062685D8868267D72100A00008A06A82B5B70E97F6A050A000073683A4B01685F684E684F4B008572110A000068518772120A00005272130A0000284B014B024B028672140A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72150A00007472160A000062682B682C6866684E684F4B008572170A000068518772180A00005272190A0000284B014B024B0286721A0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721B0A000074721C0A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721D0A00007D721E0A00002868267D721F0A00008A06C02C5B70E97F6A020A000073683A4B026825684E684F4B008572200A000068518772210A00005272220A0000284B014B034B038672230A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72240A00007472250A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0670345D70E97F6828298172260A00007D72270A000028682B682C682D4B02682E4B0268267D72280A00008A06A8345D70E97F6844298172290A00007D722A0A00002868267D722B0A0000683A4B0168486A260A0000682B682C6849684A2981722C0A00007D722D0A000028684D684E684F4B0085722E0A0000685187722F0A00005272300A0000284B014B028572310A00006858894310000000000000F07F000000000000F07F72320A00007472330A000062685D8868267D72340A00008A06A8345D70E97F6A290A000073683A4B01685F684E684F4B008572350A000068518772360A00005272370A0000284B014B024B028672380A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72390A000074723A0A000062682B682C6866684E684F4B0085723B0A0000685187723C0A000052723D0A0000284B014B024B0286723E0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723F0A00007472400A000062756268664E75627368306828298172410A00007D72420A000028682B682C682D4B02682E4B0268267D72430A00008A0670345D70E97F6A260A00007368306831298172440A00007D72450A00002868267D72460A00008A0638345D70E97F6A410A0000736873684A298172470A00007D72480A000028684D684E684F4B008572490A0000685187724A0A000052724B0A0000284B014B0285724C0A00006858894310000000000000F07F000000000000F07F724D0A000074724E0A000062685D8868267D724F0A00008A06B8305D70E97F6A440A000073683A4B01685F684E684F4B008572500A000068518772510A00005272520A0000284B014B024B028672530A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72540A00007472550A000062682B682C6866684E684F4B008572560A000068518772570A00005272580A0000284B014B024B028672590A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725A0A000074725B0A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981725C0A00007D725D0A00002868267D725E0A00008A0638345D70E97F6A410A000073683A4B026825684E684F4B0085725F0A000068518772600A00005272610A0000284B014B034B038672620A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72630A00007472640A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0608625C70E97F6828298172650A00007D72660A000028682B682C682D4B02682E4B0268267D72670A00008A0698685C70E97F6844298172680A00007D72690A00002868267D726A0A0000683A4B0168486A650A0000682B682C6849684A2981726B0A00007D726C0A000028684D684E684F4B0085726D0A0000685187726E0A000052726F0A0000284B014B028572700A00006858894310000000000000F07F000000000000F07F72710A00007472720A000062685D8868267D72730A00008A0698685C70E97F6A680A000073683A4B01685F684E684F4B008572740A000068518772750A00005272760A0000284B014B024B028672770A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72780A00007472790A000062682B682C6866684E684F4B0085727A0A0000685187727B0A000052727C0A0000284B014B024B0286727D0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727E0A000074727F0A000062756268664E75627368306828298172800A00007D72810A000028682B682C682D4B02682E4B0268267D72820A00008A0608625C70E97F6A650A00007368306831298172830A00007D72840A00002868267D72850A00008A0640695C70E97F6A800A0000736873684A298172860A00007D72870A000028684D684E684F4B008572880A000068518772890A000052728A0A0000284B014B0285728B0A00006858894310000000000000F07F000000000000F07F728C0A000074728D0A000062685D8868267D728E0A00008A06E8625C70E97F6A830A000073683A4B01685F684E684F4B0085728F0A000068518772900A00005272910A0000284B014B024B028672920A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72930A00007472940A000062682B682C6866684E684F4B008572950A000068518772960A00005272970A0000284B014B024B028672980A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72990A000074729A0A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981729B0A00007D729C0A00002868267D729D0A00008A0640695C70E97F6A800A000073683A4B026825684E684F4B0085729E0A0000685187729F0A00005272A00A0000284B014B034B038672A10A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A20A00007472A30A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660AF6070E97F6AFA0600008A0638345370E97F6828298172A40A00007D72A50A000028682B682C682D4B02682E4B0268267D72A60A00008A0618355370E97F6844298172A70A00007D72A80A00002868267D72A90A0000683A4B0168486AA40A0000682B682C6849684A298172AA0A00007D72AB0A000028684D684E684F4B008572AC0A000068518772AD0A00005272AE0A0000284B014B028572AF0A00006858894310000000000000F07F000000000000F07F72B00A00007472B10A000062685D8868267D72B20A00008A0618355370E97F6AA70A000073683A4B01685F684E684F4B008572B30A000068518772B40A00005272B50A0000284B014B024B028672B60A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B70A00007472B80A000062682B682C6866684E684F4B008572B90A000068518772BA0A00005272BB0A0000284B014B024B028672BC0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0A00007472BE0A000062756268664E75627368306828298172BF0A00007D72C00A000028682B682C682D4B02682E4B0268267D72C10A00008A0638345370E97F6AA40A00007368306831298172C20A00007D72C30A00002868267D72C40A00008A06E8325370E97F6ABF0A0000736873684A298172C50A00007D72C60A000028684D684E684F4B008572C70A000068518772C80A00005272C90A0000284B014B028572CA0A00006858894310000000000000F07F000000000000F07F72CB0A00007472CC0A000062685D8868267D72CD0A00008A0690335370E97F6AC20A000073683A4B01685F684E684F4B008572CE0A000068518772CF0A00005272D00A0000284B014B024B028672D10A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D20A00007472D30A000062682B682C6866684E684F4B008572D40A000068518772D50A00005272D60A0000284B014B024B028672D70A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D80A00007472D90A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DA0A00007D72DB0A00002868267D72DC0A00008A06E8325370E97F6ABF0A000073683A4B026825684E684F4B008572DD0A000068518772DE0A00005272DF0A0000284B014B034B038672E00A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E10A00007472E20A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660A86070E97F6A360700008A0658CA5970E97F6AF00600007568736A9A050000683A4B0168254E682B682C683B4E756273683A4B0168486A97050000682B682C6849684A298172E30A00007D72E40A000028684D684E684F4B008572E50A000068518772E60A00005272E70A0000284B014B028572E80A00006858894310000000000000F07F000000000000F07F72E90A00007472EA0A000062685D8868267D72EB0A00008A0608C25F70E97F6A9A05000073683A4B00685F684E684F4B008572EC0A000068518772ED0A00005272EE0A0000284B014B024B028672EF0A00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72F00A00007472F10A000062682B682C6866684E684F4B008572F20A000068518772F30A00005272F40A0000284B014B024B028672F50A00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72F60A00007472F70A000062756268664E75628A0638945070E97F6844298172F80A00007D72F90A00002868267D72FA0A00008A06D8965070E97F683273683A4B0068486A97050000682B682C6849684A298172FB0A00007D72FC0A000028684D684E684F4B008572FD0A000068518772FE0A00005272FF0A0000284B014B028572000B00006858894310000000000000F07F000000000000F07F72010B00007472020B000062685D8868267D72030B00008A0638945070E97F6AF80A000073683A4B00685F684E684F4B008572040B000068518772050B00005272060B0000284B014B024B028672070B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72080B00007472090B000062682B682C6866684E684F4B0085720A0B0000685187720B0B000052720C0B0000284B014B024B0286720D0B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F720E0B000074720F0B00006275626866684E684F4B008572100B000068518772110B00005272120B0000284B014B024B028672130B0000685889432000000000000054406666666666664A4000000000000082406666666666667A4072140B00007472150B00006275627568736844298172160B00007D72170B00002868267D72180B00008A066021BB73E97F6A9705000073683A4B00684868A4682B682C6849684A298172190B00007D721A0B000028684D684E684F4B0085721B0B0000685187721C0B000052721D0B0000284B014B0285721E0B00006858894310000000000000F07F000000000000F07F721F0B00007472200B000062685D8868267D72210B00008A06980FBA73E97F6A160B000073683A4B00685F684E684F4B008572220B000068518772230B00005272240B0000284B014B024B028672250B00006858894320000000000000000000000000000000009A99999999991940333333333333134072260B00007472270B000062682B682C6866684E684F4B008572280B000068518772290B000052722A0B0000284B014B024B0286722B0B00006858894320000000000000000000000000000000009A999999999919403333333333331340722C0B000074722D0B00006275626866684E684F4B0085722E0B0000685187722F0B00005272300B0000284B014B024B028672310B000068588943200000000000000000000000000000000000000000000084400000000000007E4072320B00007472330B0000627562683A4B006825684E684F4B008572340B000068518772350B00005272360B0000284B014B034B038672370B0000685889434800000000000084400000000000000000000000000000000000000000000000000000000000007E40000000000000000000000000000000000000000000000000000000000000F03F72380B00007472390B000062682B682C683B4E7562682B682C6849684A2981723A0B00007D723B0B000028684D684E684F4B0085723C0B0000685187723D0B000052723E0B0000284B014B0285723F0B00006858894310000000000000F07F000000000000F07F72400B00007472410B000062685D8868267D72420B00008A0630AD5B70E97F6A9405000073683A4B00685F684E684F4B008572430B000068518772440B00005272450B0000284B014B024B028672460B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72470B00007472480B000062682B682C6866684E684F4B008572490B0000685187724A0B000052724B0B0000284B014B024B0286724C0B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F724D0B000074724E0B000062756268664E7562683A4B0168254E682B682C683B4E756268267D724F0B0000288A068027BB73E97F6828298172500B00007D72510B000028682B682C682D4B02682E4B0268267D72520B0000683068C1683A4B0268896822298172530B00007D72540B00002868254E68267D72550B00008A068027BB73E97F6A500B000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672560B0000756275628A0640795F70E97F6828298172570B00007D72580B000028682B682C682D4B02682E4B0268267D72590B0000683068C1683A4B02688968222981725A0B00007D725B0B00002868254E68267D725C0B00008A0640795F70E97F6A570B000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B0086725D0B0000756275628A06707B5F70E97F68282981725E0B00007D725F0B000028682B682C682D4B02682E4B0268267D72600B0000683068C1683A4B0268896822298172610B00007D72620B00002868254E68267D72630B00008A06707B5F70E97F6A5E0B000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672640B0000756275628A0610CE5F70E97F6828298172650B00007D72660B000028682B682C682D4B02682E4B0268267D72670B0000683068C1683A4B0268896822298172680B00007D72690B00002868254E68267D726A0B00008A0610CE5F70E97F6A650B000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B0086726B0B0000756275628A06D82DBB73E97F68282981726C0B00007D726D0B000028682B682C682D4B02682E4B0268267D726E0B0000683068C1683A4B02688968222981726F0B00007D72700B00002868254E68267D72710B00008A06D82DBB73E97F6A6C0B000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672720B0000756275628A0658735F70E97F6828298172730B00007D72740B000028682B682C682D4B02682E4B0268267D72750B0000683068C1683A4B0268896822298172760B00007D72770B00002868254E68267D72780B00008A0658735F70E97F6A730B000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672790B0000756275628A0670745F70E97F68282981727A0B00007D727B0B000028682B682C682D4B02682E4B0268267D727C0B0000683068C1683A4B02688968222981727D0B00007D727E0B00002868254E68267D727F0B00008A0670745F70E97F6A7A0B000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008672800B0000756275628A0660CF5F70E97F6828298172810B00007D72820B000028682B682C682D4B02682E4B0268267D72830B0000683068C1683A4B0268896822298172840B00007D72850B00002868254E68267D72860B00008A0660CF5F70E97F6A810B000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008672870B00007562756275683A4B026A350700004E682B682C683C68BE75627568306A50010000683A4B0268896A44010000756268267D72880B0000288A06806E4E70E97F6828298172890B00007D728A0B000028682B682C682D4B02682E4B0268267D728B0B0000683068BC683A4B02688968222981728C0B00007D728D0B00002868254E68267D728E0B00008A06806E4E70E97F6A890B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB333333333333486728F0B0000756275628A06C06C4E70E97F68B98A0680276270E97F6828298172900B00007D72910B000028682B682C682D4B02682E4B0268267D72920B0000683068BC683A4B0268896822298172930B00007D72940B00002868254E68267D72950B00008A0680276270E97F6A900B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E398672960B0000756275628A0668B65370E97F6828298172970B00007D72980B000028682B682C682D4B02682E4B0268267D72990B0000683068BC683A4B02688968222981729A0B00007D729B0B00002868254E68267D729C0B00008A0668B65370E97F6A970B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E3986729D0B0000756275628A0640025F70E97F68282981729E0B00007D729F0B000028682B682C682D4B02682E4B0268267D72A00B0000683068BC683A4B0268896822298172A10B00007D72A20B00002868254E68267D72A30B00008A0640025F70E97F6A9E0B000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672A40B0000756275628A06905A5E70E97F6828298172A50B00007D72A60B000028682B682C682D4B02682E4B0268267D72A70B0000683068BC683A4B0268896822298172A80B00007D72A90B00002868254E68267D72AA0B00008A06905A5E70E97F6AA50B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB33333333333348672AB0B0000756275628A06D8565E70E97F6828298172AC0B00007D72AD0B000028682B682C682D4B02682E4B0268267D72AE0B0000683068BC683A4B0268896822298172AF0B00007D72B00B00002868254E68267D72B10B00008A06D8565E70E97F6AAC0B000073683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672B20B0000756275628A06E8B25370E97F6828298172B30B00007D72B40B000028682B682C682D4B02682E4B0268267D72B50B0000683068BC683A4B0268896822298172B60B00007D72B70B00002868254E68267D72B80B00008A06E8B25370E97F6AB30B000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672B90B00007562756275683A4B026A350700004E682B682C683C68C37562683A4B02688968B6756273683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672BA0B000075628A0608225C70E97F6A150700008A06306D4E70E97F6A8C0B00008A0690935470E97F6A680B00008A0658E34F70E97F6822298172BB0B00007D72BC0B00002868254E68267D72BD0B00008A0638E44F70E97F6828298172BE0B00007D72BF0B000028682B682C682D4B02682E4B0268267D72C00B000068306895683A4B0268896ABB0B0000756273683A4B0168A368A4682B682C683B4E68AD4B0047BFB33333333333348672C10B000075628A06A82B6270E97F6A930B00008A06980FBA73E97F6A160B00008A0650CC5870E97F6AEA0600008A06A0665D70E97F6A4A0700008A06705B5470E97F6822298172C20B00007D72C30B00002868254E68267D72C40B00008A06185C5470E97F6828298172C50B00007D72C60B000028682B682C682D4B02682E4B0268267D72C70B000068306895683A4B0268896AC20B0000756273683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E398672C80B000075628A06A83B5470E97F68A08A06F0B05370E97F6AB60B00008A06287F5F70E97F6A7D0B00008A0630365470E97F6822298172C90B00007D72CA0B00002868254E68267D72CB0B00008A0648375470E97F6828298172CC0B00007D72CD0B000028682B682C682D4B02682E4B0268267D72CE0B00006830689A683A4B0268896AC90B0000756273683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008672CF0B000075628A0648505470E97F6822298172D00B00007D72D10B00002868254E68267D72D20B00008A06F0505470E97F6828298172D30B00007D72D40B000028682B682C682D4B02682E4B0268267D72D50B00006830689A683A4B0268896AD00B0000756273683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672D60B000075628A06A07D5270E97F6A0E0700008A06C0755270E97F6A5F0700008A0618CC5F70E97F6A840B00008A06B82EBB73E97F6A6F0B00008A06905A5470E97F6822298172D70B00007D72D80B00002868254E68267D72D90B00008A0608595470E97F6828298172DA0B00007D72DB0B000028682B682C682D4B02682E4B0268267D72DC0B000068306895683A4B0268896AD70B0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672DD0B000075628A06505C5E70E97F6AA80B00008A0608695D70E97F6A510700008A0628315370E97F6A000700008A0640325470E97F6822298172DE0B00007D72DF0B00002868254E68267D72E00B00008A0608325470E97F6828298172E10B00007D72E20B000028682B682C682D4B02682E4B0268267D72E30B00006830689A683A4B0268896ADE0B0000756273683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672E40B000075628A06A04D5A70E97F6A430700008A06D82D5C70E97F6A070700008A06F8555470E97F6822298172E50B00007D72E60B00002868254E68267D72E70B00008A0688555470E97F6828298172E80B00007D72E90B000028682B682C682D4B02682E4B0268267D72EA0B000068306895683A4B0268896AE50B0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672EB0B000075628A06486E5D70E97F6A580700008A0670B45370E97F6A9A0B00008A0650855570E97F6822298172EC0B00007D72ED0B00002868254E68267D72EE0B00008A06188C5570E97F6828298172EF0B00007D72F00B000028682B682C682D4B02682E4B0268267D72F10B000068306895683A4B0268896AEC0B0000756273683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E398672F20B000075628A0678E25370E97F68238A06107E5F70E97F6A5A0B00008A06D8865570E97F6822298172F30B00007D72F40B00002868254E68267D72F50B00008A06304D5570E97F6828298172F60B00007D72F70B000028682B682C682D4B02682E4B0268267D72F80B00006830689A683A4B0268896AF30B0000756273683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672F90B000075628A06903A5370E97F6A310700008A06183C5370E97F6A1C0700008A06E0345470E97F6822298172FA0B00007D72FB0B00002868254E68267D72FC0B00008A0658335470E97F6828298172FD0B00007D72FE0B000028682B682C682D4B02682E4B0268267D72FF0B00006830689A683A4B0268896AFA0B0000756273683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B008672000C000075628A06907A5F70E97F6A610B00008A0698315470E97F6822298172010C00007D72020C00002868254E68267D72030C00008A06B8305470E97F6828298172040C00007D72050C000028682B682C682D4B02682E4B0268267D72060C00006830689A683A4B0268896A010C0000756273683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672070C000075628A06F0075F70E97F6AA10B00008A06E8495A70E97F6A3C0700008A06A82B5C70E97F6A2A0700008A06C02CBB73E97F6A530B00008A06187C5F70E97F6A760B00008A0670945470E97F6A7E0200008A06A8945370E97F6822298172080C00007D72090C00002868254E68267D720A0C00008A0690935370E97F68282981720B0C00007D720C0C000028682B682C682D4B02682E4B0268267D720D0C000068306895683A4B0268896A080C0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E3986720E0C000075628A06A84B5A70E97F6A660700008A0628585E70E97F6AAF0B00008A0678725270E97F6A6D0700008A06A0765270E97F6A230700008A0618E54F70E97F68222981720F0C00007D72100C00002868254E68267D72110C00008A0688E54F70E97F6828298172120C00007D72130C000028682B682C682D4B02682E4B0268267D72140C000068306895683A4B0268896A0F0C0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672150C0000756275683A4B006825684E684F4B008572160C000068518772170C00005272180C0000284B014B034B038672190C0000685889434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F721A0C000074721B0C000062682B682C683B4E7562682B682C683B4E68AD47BFB33333333333344B0086721C0C0000756275628A06304D5570E97F6AF60B00008A06F0505470E97F6AD30B00008A0608325470E97F6AE10B00008A0658335470E97F6AFD0B00008A06B8305470E97F6A040C00008A0660EF5370E97F68B28A0648375470E97F6ACC0B000075683A4B026A350700004E682B682C683C689775627568306A4F0100002981721D0C00007D721E0C000028682E4B026A5201000068352981721F0C00007D72200C0000286838683D298172210C00007D72220C00002868267D72230C00008A0680E74F70E97F6A1F0C000073683A4B01682B682C683B4E756268267D72240C00008A06B8975070E97F6A1D0C000073683A4B006825684E684F4B008572250C000068518772260C00005272270C0000284B014B034B038672280C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72290C000074722A0C000062682B682C683B688A2981722B0C00007D722C0C00002868267D722D0C0000683A4B006825684E684F4B0085722E0C0000685187722F0C00005272300C0000284B014B034B038672310C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72320C00007472330C000062682B682C683B4E7562683C683D298172340C00007D72350C00002868267D72360C00008A0680E74F70E97F6A1F0C000073683A4B01682B682C683B4E756275626A5C0100007D72370C0000288A0668965070E97F6844298172380C00007D72390C00002868267D723A0C00008A0630965070E97F6A470100002981723B0C00007D723C0C00002868267D723D0C00008A0628985070E97F68282981723E0C00007D723F0C000028682B682C682D4B02682E4B0268267D72400C00008A0698985070E97F68977368306A3B0C0000683A4B02688968327562736A4B0100006A380C0000683A4B026825684E684F4B008572410C000068518772420C00005272430C0000284B014B034B038672440C00006858894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F72450C00007472460C000062682B682C683B688A298172470C00007D72480C00002868267D72490C0000683A4B006825684E684F4B0085724A0C0000685187724B0C000052724C0C0000284B014B034B0386724D0C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724E0C000074724F0C000062682B682C683B4E7562756273683A4B0268486A1D0C0000682B682C6849684A298172500C00007D72510C000028684D684E684F4B008572520C000068518772530C00005272540C0000284B014B028572550C00006858894310000000000000F07F000000000000F07F72560C00007472570C000062685D8868267D72580C00008A0668965070E97F6A380C000073683A4B02685F684E684F4B008572590C0000685187725A0C000052725B0C0000284B014B024B0286725C0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725D0C000074725E0C000062682B682C6866684E684F4B0085725F0C000068518772600C00005272610C0000284B014B024B028672620C0000685889432081360D68D3E653C04B922449920422C0D0A6016DDA7C80402649922449A0674072630C00007472640C00006275626866684E684F4B008572650C000068518772660C00005272670C0000284B014B024B028672680C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72690C000074726A0C00006275628A0698985070E97F689775682D4B027562683A4B0268896A3E0C0000756268267D726B0C0000288A0690935370E97F6A0B0C00008A0668E65370E97F68AA8A0688555470E97F6AE80B00008A06188C5570E97F6AEF0B00008A0638E44F70E97F6ABE0B00008A0688E54F70E97F6A120C00008A06185C5470E97F6AC50B00008A0608595470E97F6ADA0B000075683A4B026A350700004E682B682C683C683275628A0670E45070E97F68282981726C0C00007D726D0C000028682B682C682D4B02682E4B0268267D726E0C00008A06E0E45070E97F68442981726F0C00007D72700C00002868267D72710C0000683A4B0168486A6C0C0000682B682C6849684A298172720C00007D72730C000028684D684E684F4B008572740C000068518772750C00005272760C0000284B014B028572770C00006858894310000000000000F07F000000000000F07F72780C00007472790C000062685D8868267D727A0C00008A06E0E45070E97F6A6F0C000073683A4B01685F684E684F4B0085727B0C0000685187727C0C000052727D0C0000284B014B024B0286727E0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727F0C00007472800C000062682B682C6866684E684F4B008572810C000068518772820C00005272830C0000284B014B024B028672840C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72850C00007472860C000062756268664E75627368306828298172870C00007D72880C000028682B682C682D4B02682E4B0268267D72890C00008A0670E45070E97F6A6C0C000073683068312981728A0C00007D728B0C00002868267D728C0C00008A0600E45070E97F6A870C0000736873684A2981728D0C00007D728E0C000028684D684E684F4B0085728F0C000068518772900C00005272910C0000284B014B028572920C00006858894310000000000000F07F000000000000F07F72930C00007472940C000062685D8868267D72950C00008A0690E35070E97F6A8A0C000073683A4B01685F684E684F4B008572960C000068518772970C00005272980C0000284B014B024B028672990C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729A0C000074729B0C000062682B682C6866684E684F4B0085729C0C0000685187729D0C000052729E0C0000284B014B024B0286729F0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A00C00007472A10C0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172A20C00007D72A30C00002868267D72A40C00008A0600E45070E97F6A870C000073683A4B026825684E684F4B008572A50C000068518772A60C00005272A70C0000284B014B034B038672A80C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A90C00007472AA0C000062682B682C683B4E75627562683A4B016889683275628A0680305270E97F6828298172AB0C00007D72AC0C000028682B682C682D4B02682E4B0268267D72AD0C00008A06F0305270E97F6844298172AE0C00007D72AF0C00002868267D72B00C0000683A4B0168486AAB0C0000682B682C6849684A298172B10C00007D72B20C000028684D684E684F4B008572B30C000068518772B40C00005272B50C0000284B014B028572B60C00006858894310000000000000F07F000000000000F07F72B70C00007472B80C000062685D8868267D72B90C00008A06F0305270E97F6AAE0C000073683A4B01685F684E684F4B008572BA0C000068518772BB0C00005272BC0C0000284B014B024B028672BD0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BE0C00007472BF0C000062682B682C6866684E684F4B008572C00C000068518772C10C00005272C20C0000284B014B024B028672C30C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C40C00007472C50C000062756268664E75627368306828298172C60C00007D72C70C000028682B682C682D4B02682E4B0268267D72C80C00008A0680305270E97F6AAB0C00007368306831298172C90C00007D72CA0C00002868267D72CB0C00008A06D07F5170E97F6AC60C0000736873684A298172CC0C00007D72CD0C000028684D684E684F4B008572CE0C000068518772CF0C00005272D00C0000284B014B028572D10C00006858894310000000000000F07F000000000000F07F72D20C00007472D30C000062685D8868267D72D40C00008A06607F5170E97F6AC90C000073683A4B01685F684E684F4B008572D50C000068518772D60C00005272D70C0000284B014B024B028672D80C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D90C00007472DA0C000062682B682C6866684E684F4B008572DB0C000068518772DC0C00005272DD0C0000284B014B024B028672DE0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DF0C00007472E00C0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172E10C00007D72E20C00002868267D72E30C00008A06D07F5170E97F6AC60C000073683A4B026825684E684F4B008572E40C000068518772E50C00005272E60C0000284B014B034B038672E70C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E80C00007472E90C000062682B682C683B4E75627562683A4B016889683275628A0678995070E97F689A8A0600DB4F70E97F6828298172EA0C00007D72EB0C000028682B682C682D4B02682E4B0268267D72EC0C00008A0670DB4F70E97F6844298172ED0C00007D72EE0C00002868267D72EF0C0000683A4B0168486AEA0C0000682B682C6849684A298172F00C00007D72F10C000028684D684E684F4B008572F20C000068518772F30C00005272F40C0000284B014B028572F50C00006858894310000000000000F07F000000000000F07F72F60C00007472F70C000062685D8868267D72F80C00008A0670DB4F70E97F6AED0C000073683A4B01685F684E684F4B008572F90C000068518772FA0C00005272FB0C0000284B014B024B028672FC0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FD0C00007472FE0C000062682B682C6866684E684F4B008572FF0C000068518772000D00005272010D0000284B014B024B028672020D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72030D00007472040D000062756268664E75627368306828298172050D00007D72060D000028682B682C682D4B02682E4B0268267D72070D00008A0600DB4F70E97F6AEA0C00007368306831298172080D00007D72090D00002868267D720A0D00008A0690DA4F70E97F6A050D0000736873684A2981720B0D00007D720C0D000028684D684E684F4B0085720D0D0000685187720E0D000052720F0D0000284B014B028572100D00006858894310000000000000F07F000000000000F07F72110D00007472120D000062685D8868267D72130D00008A0620DA4F70E97F6A080D000073683A4B01685F684E684F4B008572140D000068518772150D00005272160D0000284B014B024B028672170D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72180D00007472190D000062682B682C6866684E684F4B0085721A0D0000685187721B0D000052721C0D0000284B014B024B0286721D0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721E0D000074721F0D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172200D00007D72210D00002868267D72220D00008A0690DA4F70E97F6A050D000073683A4B026825684E684F4B008572230D000068518772240D00005272250D0000284B014B034B038672260D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72270D00007472280D000062682B682C683B4E75627562683A4B016889683275628A06D0415570E97F6835298172290D00007D722A0D0000286838683268267D722B0D0000683A4B0168254E682B682C683B4E683C683D2981722C0D00007D722D0D00002868267D722E0D00008A06D0415570E97F6A290D000073683A4B01682B682C683B4E756275628A0658EA4F70E97F68282981722F0D00007D72300D000028682B682C682D4B02682E4B0268267D72310D000068306832683A4B016889682375628A06207A5170E97F6828298172320D00007D72330D000028682B682C682D4B02682E4B0268267D72340D00008A06907A5170E97F6844298172350D00007D72360D00002868267D72370D0000683A4B0168486A320D0000682B682C6849684A298172380D00007D72390D000028684D684E684F4B0085723A0D0000685187723B0D000052723C0D0000284B014B0285723D0D00006858894310000000000000F07F000000000000F07F723E0D000074723F0D000062685D8868267D72400D00008A06907A5170E97F6A350D000073683A4B01685F684E684F4B008572410D000068518772420D00005272430D0000284B014B024B028672440D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72450D00007472460D000062682B682C6866684E684F4B008572470D000068518772480D00005272490D0000284B014B024B0286724A0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724B0D000074724C0D000062756268664E756273683068282981724D0D00007D724E0D000028682B682C682D4B02682E4B0268267D724F0D00008A06207A5170E97F6A320D00007368306831298172500D00007D72510D00002868267D72520D00008A06B0795170E97F6A4D0D0000736873684A298172530D00007D72540D000028684D684E684F4B008572550D000068518772560D00005272570D0000284B014B028572580D00006858894310000000000000F07F000000000000F07F72590D000074725A0D000062685D8868267D725B0D00008A0640795170E97F6A500D000073683A4B01685F684E684F4B0085725C0D0000685187725D0D000052725E0D0000284B014B024B0286725F0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72600D00007472610D000062682B682C6866684E684F4B008572620D000068518772630D00005272640D0000284B014B024B028672650D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72660D00007472670D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172680D00007D72690D00002868267D726A0D00008A06B0795170E97F6A4D0D000073683A4B026825684E684F4B0085726B0D0000685187726C0D000052726D0D0000284B014B034B0386726E0D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726F0D00007472700D000062682B682C683B4E75627562683A4B016889683275628A0610DE4F70E97F6828298172710D00007D72720D000028682B682C682D4B02682E4B0268267D72730D00008A0680DE4F70E97F6844298172740D00007D72750D00002868267D72760D0000683A4B0168486A710D0000682B682C6849684A298172770D00007D72780D000028684D684E684F4B008572790D0000685187727A0D000052727B0D0000284B014B0285727C0D00006858894310000000000000F07F000000000000F07F727D0D000074727E0D000062685D8868267D727F0D00008A0680DE4F70E97F6A740D000073683A4B01685F684E684F4B008572800D000068518772810D00005272820D0000284B014B024B028672830D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72840D00007472850D000062682B682C6866684E684F4B008572860D000068518772870D00005272880D0000284B014B024B028672890D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728A0D000074728B0D000062756268664E756273683068282981728C0D00007D728D0D000028682B682C682D4B02682E4B0268267D728E0D00008A0610DE4F70E97F6A710D000073683068312981728F0D00007D72900D00002868267D72910D00008A06A0DD4F70E97F6A8C0D0000736873684A298172920D00007D72930D000028684D684E684F4B008572940D000068518772950D00005272960D0000284B014B028572970D00006858894310000000000000F07F000000000000F07F72980D00007472990D000062685D8868267D729A0D00008A0630DD4F70E97F6A8F0D000073683A4B01685F684E684F4B0085729B0D0000685187729C0D000052729D0D0000284B014B024B0286729E0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729F0D00007472A00D000062682B682C6866684E684F4B008572A10D000068518772A20D00005272A30D0000284B014B024B028672A40D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A50D00007472A60D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172A70D00007D72A80D00002868267D72A90D00008A06A0DD4F70E97F6A8C0D000073683A4B026825684E684F4B008572AA0D000068518772AB0D00005272AC0D0000284B014B034B038672AD0D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AE0D00007472AF0D000062682B682C683B4E75627562683A4B016889683275628A06E0D44F70E97F6828298172B00D00007D72B10D000028682B682C682D4B02682E4B0268267D72B20D00008A0650D54F70E97F6844298172B30D00007D72B40D00002868267D72B50D0000683A4B0168486AB00D0000682B682C6849684A298172B60D00007D72B70D000028684D684E684F4B008572B80D000068518772B90D00005272BA0D0000284B014B028572BB0D00006858894310000000000000F07F000000000000F07F72BC0D00007472BD0D000062685D8868267D72BE0D00008A0650D54F70E97F6AB30D000073683A4B01685F684E684F4B008572BF0D000068518772C00D00005272C10D0000284B014B024B028672C20D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C30D00007472C40D000062682B682C6866684E684F4B008572C50D000068518772C60D00005272C70D0000284B014B024B028672C80D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C90D00007472CA0D000062756268664E75627368306828298172CB0D00007D72CC0D000028682B682C682D4B02682E4B0268267D72CD0D00008A06E0D44F70E97F6AB00D00007368306831298172CE0D00007D72CF0D00002868267D72D00D00008A0670D44F70E97F6ACB0D0000736873684A298172D10D00007D72D20D000028684D684E684F4B008572D30D000068518772D40D00005272D50D0000284B014B028572D60D00006858894310000000000000F07F000000000000F07F72D70D00007472D80D000062685D8868267D72D90D00008A0600D44F70E97F6ACE0D000073683A4B01685F684E684F4B008572DA0D000068518772DB0D00005272DC0D0000284B014B024B028672DD0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0D00007472DF0D000062682B682C6866684E684F4B008572E00D000068518772E10D00005272E20D0000284B014B024B028672E30D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E40D00007472E50D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172E60D00007D72E70D00002868267D72E80D00008A0670D44F70E97F6ACB0D000073683A4B026825684E684F4B008572E90D000068518772EA0D00005272EB0D0000284B014B034B038672EC0D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72ED0D00007472EE0D000062682B682C683B4E75627562683A4B016889683275628A06D8ED4F70E97F6828298172EF0D00007D72F00D000028682B682C682D4B02682E4B0268267D72F10D00008A0648EE4F70E97F6844298172F20D00007D72F30D00002868267D72F40D0000683A4B0168486AEF0D0000682B682C6849684A298172F50D00007D72F60D000028684D684E684F4B008572F70D000068518772F80D00005272F90D0000284B014B028572FA0D00006858894310000000000000F07F000000000000F07F72FB0D00007472FC0D000062685D8868267D72FD0D00008A0648EE4F70E97F6AF20D000073683A4B01685F684E684F4B008572FE0D000068518772FF0D00005272000E0000284B014B024B028672010E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72020E00007472030E000062682B682C6866684E684F4B008572040E000068518772050E00005272060E0000284B014B024B028672070E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72080E00007472090E000062756268664E756273683068282981720A0E00007D720B0E000028682B682C682D4B02682E4B0268267D720C0E00008A06D8ED4F70E97F6AEF0D000073683068312981720D0E00007D720E0E00002868267D720F0E00008A06A8EB4F70E97F6A0A0E0000736873684A298172100E00007D72110E000028684D684E684F4B008572120E000068518772130E00005272140E0000284B014B028572150E00006858894310000000000000F07F000000000000F07F72160E00007472170E000062685D8868267D72180E00008A0668ED4F70E97F6A0D0E000073683A4B01685F684E684F4B008572190E0000685187721A0E000052721B0E0000284B014B024B0286721C0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721D0E000074721E0E000062682B682C6866684E684F4B0085721F0E000068518772200E00005272210E0000284B014B024B028672220E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72230E00007472240E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172250E00007D72260E00002868267D72270E00008A06A8EB4F70E97F6A0A0E000073683A4B026825684E684F4B008572280E000068518772290E000052722A0E0000284B014B034B0386722B0E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722C0E000074722D0E000062682B682C683B4E75627562683A4B016889683275628A0610775170E97F68282981722E0E00007D722F0E000028682B682C682D4B02682E4B0268267D72300E00008A0680775170E97F6844298172310E00007D72320E00002868267D72330E0000683A4B0168486A2E0E0000682B682C6849684A298172340E00007D72350E000028684D684E684F4B008572360E000068518772370E00005272380E0000284B014B028572390E00006858894310000000000000F07F000000000000F07F723A0E000074723B0E000062685D8868267D723C0E00008A0680775170E97F6A310E000073683A4B01685F684E684F4B0085723D0E0000685187723E0E000052723F0E0000284B014B024B028672400E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72410E00007472420E000062682B682C6866684E684F4B008572430E000068518772440E00005272450E0000284B014B024B028672460E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72470E00007472480E000062756268664E75627368306828298172490E00007D724A0E000028682B682C682D4B02682E4B0268267D724B0E00008A0610775170E97F6A2E0E000073683068312981724C0E00007D724D0E00002868267D724E0E00008A06A0765170E97F6A490E0000736873684A2981724F0E00007D72500E000028684D684E684F4B008572510E000068518772520E00005272530E0000284B014B028572540E00006858894310000000000000F07F000000000000F07F72550E00007472560E000062685D8868267D72570E00008A0630765170E97F6A4C0E000073683A4B01685F684E684F4B008572580E000068518772590E000052725A0E0000284B014B024B0286725B0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725C0E000074725D0E000062682B682C6866684E684F4B0085725E0E0000685187725F0E00005272600E0000284B014B024B028672610E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72620E00007472630E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172640E00007D72650E00002868267D72660E00008A06A0765170E97F6A490E000073683A4B026825684E684F4B008572670E000068518772680E00005272690E0000284B014B034B0386726A0E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726B0E000074726C0E000062682B682C683B4E75627562683A4B016889683275628A06205A5470E97F68282981726D0E00007D726E0E000028682B682C682D4B02682E4B0268267D726F0E00008A0628585470E97F6844298172700E00007D72710E00002868267D72720E0000683A4B0168486A6D0E0000682B682C6849684A298172730E00007D72740E000028684D684E684F4B008572750E000068518772760E00005272770E0000284B014B028572780E00006858894310000000000000F07F000000000000F07F72790E000074727A0E000062685D8868267D727B0E00008A0628585470E97F6A700E000073683A4B01685F684E684F4B0085727C0E0000685187727D0E000052727E0E0000284B014B024B0286727F0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72800E00007472810E000062682B682C6866684E684F4B008572820E000068518772830E00005272840E0000284B014B024B028672850E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72860E00007472870E000062756268664E75627368306828298172880E00007D72890E000028682B682C682D4B02682E4B0268267D728A0E00008A06205A5470E97F6A6D0E000073683068312981728B0E00007D728C0E00002868267D728D0E00008A06B0595470E97F6A880E0000736873684A2981728E0E00007D728F0E000028684D684E684F4B008572900E000068518772910E00005272920E0000284B014B028572930E00006858894310000000000000F07F000000000000F07F72940E00007472950E000062685D8868267D72960E00008A0680D04F70E97F6A8B0E000073683A4B01685F684E684F4B008572970E000068518772980E00005272990E0000284B014B024B0286729A0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729B0E000074729C0E000062682B682C6866684E684F4B0085729D0E0000685187729E0E000052729F0E0000284B014B024B028672A00E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A10E00007472A20E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172A30E00007D72A40E00002868267D72A50E00008A06B0595470E97F6A880E000073683A4B026825684E684F4B008572A60E000068518772A70E00005272A80E0000284B014B034B038672A90E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AA0E00007472AB0E000062682B682C683B4E75627562683A4B016889683275628A06F0D74F70E97F6828298172AC0E00007D72AD0E000028682B682C682D4B02682E4B0268267D72AE0E00008A0660D84F70E97F6844298172AF0E00007D72B00E00002868267D72B10E0000683A4B0168486AAC0E0000682B682C6849684A298172B20E00007D72B30E000028684D684E684F4B008572B40E000068518772B50E00005272B60E0000284B014B028572B70E00006858894310000000000000F07F000000000000F07F72B80E00007472B90E000062685D8868267D72BA0E00008A0660D84F70E97F6AAF0E000073683A4B01685F684E684F4B008572BB0E000068518772BC0E00005272BD0E0000284B014B024B028672BE0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0E00007472C00E000062682B682C6866684E684F4B008572C10E000068518772C20E00005272C30E0000284B014B024B028672C40E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C50E00007472C60E000062756268664E75627368306828298172C70E00007D72C80E000028682B682C682D4B02682E4B0268267D72C90E00008A06F0D74F70E97F6AAC0E00007368306831298172CA0E00007D72CB0E00002868267D72CC0E00008A0680D74F70E97F6AC70E0000736873684A298172CD0E00007D72CE0E000028684D684E684F4B008572CF0E000068518772D00E00005272D10E0000284B014B028572D20E00006858894310000000000000F07F000000000000F07F72D30E00007472D40E000062685D8868267D72D50E00008A0610D74F70E97F6ACA0E000073683A4B01685F684E684F4B008572D60E000068518772D70E00005272D80E0000284B014B024B028672D90E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0E00007472DB0E000062682B682C6866684E684F4B008572DC0E000068518772DD0E00005272DE0E0000284B014B024B028672DF0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E00E00007472E10E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172E20E00007D72E30E00002868267D72E40E00008A0680D74F70E97F6AC70E000073683A4B026825684E684F4B008572E50E000068518772E60E00005272E70E0000284B014B034B038672E80E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E90E00007472EA0E000062682B682C683B4E75627562683A4B016889683275628A06E09B5370E97F6828298172EB0E00007D72EC0E000028682B682C682D4B02682E4B0268267D72ED0E00008A06284F5570E97F6844298172EE0E00007D72EF0E00002868267D72F00E0000683A4B0168486AEB0E0000682B682C6849684A298172F10E00007D72F20E000028684D684E684F4B008572F30E000068518772F40E00005272F50E0000284B014B028572F60E00006858894310000000000000F07F000000000000F07F72F70E00007472F80E000062685D8868267D72F90E00008A06284F5570E97F6AEE0E000073683A4B01685F684E684F4B008572FA0E000068518772FB0E00005272FC0E0000284B014B024B028672FD0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0E00007472FF0E000062682B682C6866684E684F4B008572000F000068518772010F00005272020F0000284B014B024B028672030F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72040F00007472050F000062756268664E75627368306828298172060F00007D72070F000028682B682C682D4B02682E4B0268267D72080F00008A06E09B5370E97F6AEB0E00007368306831298172090F00007D720A0F00002868267D720B0F00008A06189C5370E97F6A060F0000736873684A2981720C0F00007D720D0F000028684D684E684F4B0085720E0F0000685187720F0F00005272100F0000284B014B028572110F00006858894310000000000000F07F000000000000F07F72120F00007472130F000062685D8868267D72140F00008A06D8965370E97F6A090F000073683A4B01685F684E684F4B008572150F000068518772160F00005272170F0000284B014B024B028672180F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72190F000074721A0F000062682B682C6866684E684F4B0085721B0F0000685187721C0F000052721D0F0000284B014B024B0286721E0F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721F0F00007472200F0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172210F00007D72220F00002868267D72230F00008A06189C5370E97F6A060F000073683A4B026825684E684F4B008572240F000068518772250F00005272260F0000284B014B034B038672270F00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72280F00007472290F000062682B682C683B4E75627562683A4B016889683275628A0600745170E97F68282981722A0F00007D722B0F000028682B682C682D4B02682E4B0268267D722C0F00008A0670745170E97F68442981722D0F00007D722E0F00002868267D722F0F0000683A4B0168486A2A0F0000682B682C6849684A298172300F00007D72310F000028684D684E684F4B008572320F000068518772330F00005272340F0000284B014B028572350F00006858894310000000000000F07F000000000000F07F72360F00007472370F000062685D8868267D72380F00008A0670745170E97F6A2D0F000073683A4B01685F684E684F4B008572390F0000685187723A0F000052723B0F0000284B014B024B0286723C0F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723D0F000074723E0F000062682B682C6866684E684F4B0085723F0F000068518772400F00005272410F0000284B014B024B028672420F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72430F00007472440F000062756268664E75627368306828298172450F00007D72460F000028682B682C682D4B02682E4B0268267D72470F00008A0600745170E97F6A2A0F00007368306831298172480F00007D72490F00002868267D724A0F00008A0690735170E97F6A450F0000736873684A2981724B0F00007D724C0F000028684D684E684F4B0085724D0F0000685187724E0F000052724F0F0000284B014B028572500F00006858894310000000000000F07F000000000000F07F72510F00007472520F000062685D8868267D72530F00008A0620735170E97F6A480F000073683A4B01685F684E684F4B008572540F000068518772550F00005272560F0000284B014B024B028672570F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72580F00007472590F000062682B682C6866684E684F4B0085725A0F0000685187725B0F000052725C0F0000284B014B024B0286725D0F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725E0F000074725F0F0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172600F00007D72610F00002868267D72620F00008A0690735170E97F6A450F000073683A4B026825684E684F4B008572630F000068518772640F00005272650F0000284B014B034B038672660F00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72670F00007472680F000062682B682C683B4E75627562683A4B016889683275628A06E8E94F70E97F6828298172690F00007D726A0F000028682B682C682D4B02682E4B0268267D726B0F000068306832683A4B016889682375628A06E0845570E97F68282981726C0F00007D726D0F000028682B682C682D4B02682E4B0268267D726E0F00008A06A08D5570E97F68442981726F0F00007D72700F00002868267D72710F0000683A4B0168486A6C0F0000682B682C6849684A298172720F00007D72730F000028684D684E684F4B008572740F000068518772750F00005272760F0000284B014B028572770F00006858894310000000000000F07F000000000000F07F72780F00007472790F000062685D8868267D727A0F0000" + } + ] + }, + "text/html": "
plot
0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B01636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A06B0296270E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A0640C95A70E97F6828298171357D713628682B682C682D4B02682E4B0268267D71378A06B8F76170E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7138298171397D713A2868267D713B58080000005F696E76616C6964713C4B01580A0000005F7472616E73666F726D713D6835682B682C58050000005F62626F78713E636D6174706C6F746C69622E7472616E73666F726D730A42626F780A713F298171407D71412858070000005F6D696E706F737142636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A7143636E756D70790A6E6461727261790A71444B008571454301627146877147527148284B014B02857149636E756D70790A64747970650A714A58020000006638714B4B004B0187714C52714D284B0358010000003C714E4E4E4E4AFFFFFFFF4AFFFFFFFF4B0074714F62894310000000000000F07F000000000000F07F71507471516258070000005F69676E6F726571528868267D71538A06B8F76170E97F683973683C4B01580C0000005F706F696E74735F6F7269677154684368444B008571556846877156527157284B014B024B02867158684D89432000000000000000000000000000000000000000000000F03F000000000000F03F715974715A62682B682C58070000005F706F696E7473715B684368444B0085715C684687715D52715E284B014B024B0286715F684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7160747161627562685B4E75627368306828298171627D716328682B682C682D4B02682E4B0268267D71648A0640C95A70E97F68357368306831298171657D71662868267D71678A06D0C85A70E97F68627358070000005F626F786F75747168683F298171697D716A286842684368444B0085716B684687716C52716D284B014B0285716E684D894310000000000000F07F000000000000F07F716F7471706268528868267D71718A0628C85A70E97F686573683C4B016854684368444B008571726846877173527174284B014B024B02867175684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717674717762682B682C685B684368444B00857178684687717952717A284B014B024B0286717B684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717C74717D627562683C4B0168254E682B682C58090000005F696E766572746564717E4E7562683C4B0158020000005F62717F636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A7180298171817D71822868267D71838A06D0C85A70E97F686273683C4B026825684368444B008571846846877185527186284B014B034B03867187684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F718874718962682B682C687E4E75627562683C4B01687F683275628A0680305B70E97F68282981718A7D718B28682B682C682D4B02682E4B0268267D718C8A0628315B70E97F68382981718D7D718E2868267D718F683C4B01683D688A682B682C683E683F298171907D7191286842684368444B008571926846877193527194284B014B02857195684D894310000000000000F07F000000000000F07F71967471976268528868267D71988A0628315B70E97F688D73683C4B016854684368444B00857199684687719A52719B284B014B024B0286719C684D89432000000000000000000000000000000000000000000000F03F000000000000F03F719D74719E62682B682C685B684368444B0085719F68468771A05271A1284B014B024B028671A2684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71A37471A4627562685B4E75627368306828298171A57D71A628682B682C682D4B02682E4B0268267D71A78A0680305B70E97F688A7368306831298171A87D71A92868267D71AA8A06D0CF5A70E97F68A5736868683F298171AB7D71AC286842684368444B008571AD68468771AE5271AF284B014B028571B0684D894310000000000000F07F000000000000F07F71B17471B26268528868267D71B38A0628CF5A70E97F68A873683C4B016854684368444B008571B468468771B55271B6284B014B024B028671B7684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71B87471B962682B682C685B684368444B008571BA68468771BB5271BC284B014B024B028671BD684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71BE7471BF627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171C07D71C12868267D71C28A06D0CF5A70E97F68A573683C4B026825684368444B008571C368468771C45271C5284B014B034B038671C6684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71C77471C862682B682C687E4E75627562683C4B01687F683275628A06D8FD5D70E97F6828298171C97D71CA28682B682C682D4B02682E4B0268267D71CB8A0680FE5D70E97F6838298171CC7D71CD2868267D71CE683C4B01683D68C9682B682C683E683F298171CF7D71D0286842684368444B008571D168468771D25271D3284B014B028571D4684D894310000000000000F07F000000000000F07F71D57471D66268528868267D71D78A0680FE5D70E97F68CC73683C4B016854684368444B008571D868468771D95271DA284B014B024B028671DB684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71DC7471DD62682B682C685B684368444B008571DE68468771DF5271E0284B014B024B028671E1684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71E27471E3627562685B4E75627368306828298171E47D71E528682B682C682D4B02682E4B0268267D71E68A06D8FD5D70E97F68C97368306831298171E77D71E82868267D71E98A0668FD5D70E97F68E4736868683F298171EA7D71EB286842684368444B008571EC68468771ED5271EE284B014B028571EF684D894310000000000000F07F000000000000F07F71F07471F16268528868267D71F28A06C0FC5D70E97F68E773683C4B016854684368444B008571F368468771F45271F5284B014B024B028671F6684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71F77471F862682B682C685B684368444B008571F968468771FA5271FB284B014B024B028671FC684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71FD7471FE627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171FF7D72000100002868267D72010100008A0668FD5D70E97F68E473683C4B026825684368444B008572020100006846877203010000527204010000284B014B034B03867205010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720601000074720701000062682B682C687E4E75627562683C4B01687F683275628A06483E5B70E97F6828298172080100007D720901000028682B682C682D4B02682E4B0268267D720A0100008A06F03E5B70E97F68382981720B0100007D720C0100002868267D720D010000683C4B01683D6A08010000682B682C683E683F2981720E0100007D720F010000286842684368444B008572100100006846877211010000527212010000284B014B02857213010000684D894310000000000000F07F000000000000F07F72140100007472150100006268528868267D72160100008A06F03E5B70E97F6A0B01000073683C4B016854684368444B008572170100006846877218010000527219010000284B014B024B0286721A010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721B01000074721C01000062682B682C685B684368444B0085721D010000684687721E01000052721F010000284B014B024B02867220010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7221010000747222010000627562685B4E75627368306828298172230100007D722401000028682B682C682D4B02682E4B0268267D72250100008A06483E5B70E97F6A080100007368306831298172260100007D72270100002868267D72280100008A06D83D5B70E97F6A23010000736868683F298172290100007D722A010000286842684368444B0085722B010000684687722C01000052722D010000284B014B0285722E010000684D894310000000000000F07F000000000000F07F722F0100007472300100006268528868267D72310100008A06303D5B70E97F6A2601000073683C4B016854684368444B008572320100006846877233010000527234010000284B014B024B02867235010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723601000074723701000062682B682C685B684368444B00857238010000684687723901000052723A010000284B014B024B0286723B010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723C01000074723D010000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723E0100007D723F0100002868267D72400100008A06D83D5B70E97F6A2301000073683C4B026825684368444B008572410100006846877242010000527243010000284B014B034B03867244010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724501000074724601000062682B682C687E4E75627562683C4B01687F683275628A0670C45670E97F6828298172470100007D724801000028682B682C682D4B02682E4B0268267D72490100008A0618C55670E97F68382981724A0100007D724B0100002868267D724C010000683C4B01683D6A47010000682B682C683E683F2981724D0100007D724E010000286842684368444B0085724F0100006846877250010000527251010000284B014B02857252010000684D894310000000000000F07F000000000000F07F72530100007472540100006268528868267D72550100008A0618C55670E97F6A4A01000073683C4B016854684368444B008572560100006846877257010000527258010000284B014B024B02867259010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725A01000074725B01000062682B682C685B684368444B0085725C010000684687725D01000052725E010000284B014B024B0286725F010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7260010000747261010000627562685B4E75627368306828298172620100007D726301000028682B682C682D4B02682E4B0268267D72640100008A0670C45670E97F6A470100007368306831298172650100007D72660100002868267D72670100008A0600C45670E97F6A62010000736868683F298172680100007D7269010000286842684368444B0085726A010000684687726B01000052726C010000284B014B0285726D010000684D894310000000000000F07F000000000000F07F726E01000074726F0100006268528868267D72700100008A0658C35670E97F6A6501000073683C4B016854684368444B008572710100006846877272010000527273010000284B014B024B02867274010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727501000074727601000062682B682C685B684368444B008572770100006846877278010000527279010000284B014B024B0286727A010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727B01000074727C010000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727D0100007D727E0100002868267D727F0100008A0600C45670E97F6A6201000073683C4B026825684368444B008572800100006846877281010000527282010000284B014B034B03867283010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728401000074728501000062682B682C687E4E75627562683C4B01687F683275628A06B0296270E97F68298A0618355B70E97F6828298172860100007D728701000028682B682C682D4B02682E4B0268267D72880100008A06C0355B70E97F6838298172890100007D728A0100002868267D728B010000683C4B01683D6A86010000682B682C683E683F2981728C0100007D728D010000286842684368444B0085728E010000684687728F010000527290010000284B014B02857291010000684D894310000000000000F07F000000000000F07F72920100007472930100006268528868267D72940100008A06C0355B70E97F6A8901000073683C4B016854684368444B008572950100006846877296010000527297010000284B014B024B02867298010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729901000074729A01000062682B682C685B684368444B0085729B010000684687729C01000052729D010000284B014B024B0286729E010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729F0100007472A0010000627562685B4E75627368306828298172A10100007D72A201000028682B682C682D4B02682E4B0268267D72A30100008A0618355B70E97F6A860100007368306831298172A40100007D72A50100002868267D72A60100008A06A8345B70E97F6AA1010000736868683F298172A70100007D72A8010000286842684368444B008572A901000068468772AA0100005272AB010000284B014B028572AC010000684D894310000000000000F07F000000000000F07F72AD0100007472AE0100006268528868267D72AF0100008A0600345B70E97F6AA401000073683C4B016854684368444B008572B001000068468772B10100005272B2010000284B014B024B028672B3010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B40100007472B501000062682B682C685B684368444B008572B601000068468772B70100005272B8010000284B014B024B028672B9010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0100007472BB010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172BC0100007D72BD0100002868267D72BE0100008A06A8345B70E97F6AA101000073683C4B026825684368444B008572BF01000068468772C00100005272C1010000284B014B034B038672C2010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C30100007472C401000062682B682C687E4E75627562683C4B01687F683275628A06D8565E70E97F6828298172C50100007D72C601000028682B682C682D4B02682E4B0268267D72C70100008A0680575E70E97F6838298172C80100007D72C90100002868267D72CA010000683C4B01683D6AC5010000682B682C683E683F298172CB0100007D72CC010000286842684368444B008572CD01000068468772CE0100005272CF010000284B014B028572D0010000684D894310000000000000F07F000000000000F07F72D10100007472D20100006268528868267D72D30100008A0680575E70E97F6AC801000073683C4B016854684368444B008572D401000068468772D50100005272D6010000284B014B024B028672D7010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D80100007472D901000062682B682C685B684368444B008572DA01000068468772DB0100005272DC010000284B014B024B028672DD010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0100007472DF010000627562685B4E75627368306828298172E00100007D72E101000028682B682C682D4B02682E4B0268267D72E20100008A06D8565E70E97F6AC50100007368306831298172E30100007D72E40100002868267D72E50100008A0668565E70E97F6AE0010000736868683F298172E60100007D72E7010000286842684368444B008572E801000068468772E90100005272EA010000284B014B028572EB010000684D894310000000000000F07F000000000000F07F72EC0100007472ED0100006268528868267D72EE0100008A06C0555E70E97F6AE301000073683C4B016854684368444B008572EF01000068468772F00100005272F1010000284B014B024B028672F2010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F30100007472F401000062682B682C685B684368444B008572F501000068468772F60100005272F7010000284B014B024B028672F8010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F90100007472FA010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172FB0100007D72FC0100002868267D72FD0100008A0668565E70E97F6AE001000073683C4B026825684368444B008572FE01000068468772FF010000527200020000284B014B034B03867201020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720202000074720302000062682B682C687E4E75627562683C4B01687F683275628A06E8A25B70E97F6828298172040200007D720502000028682B682C682D4B02682E4B0268267D72060200008A0690A35B70E97F6838298172070200007D72080200002868267D7209020000683C4B01683D6A04020000682B682C683E683F2981720A0200007D720B020000286842684368444B0085720C020000684687720D02000052720E020000284B014B0285720F020000684D894310000000000000F07F000000000000F07F72100200007472110200006268528868267D72120200008A0690A35B70E97F6A0702000073683C4B016854684368444B008572130200006846877214020000527215020000284B014B024B02867216020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721702000074721802000062682B682C685B684368444B00857219020000684687721A02000052721B020000284B014B024B0286721C020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721D02000074721E020000627562685B4E756273683068282981721F0200007D722002000028682B682C682D4B02682E4B0268267D72210200008A06E8A25B70E97F6A040200007368306831298172220200007D72230200002868267D72240200008A0678A25B70E97F6A1F020000736868683F298172250200007D7226020000286842684368444B008572270200006846877228020000527229020000284B014B0285722A020000684D894310000000000000F07F000000000000F07F722B02000074722C0200006268528868267D722D0200008A06D0A15B70E97F6A2202000073683C4B016854684368444B0085722E020000684687722F020000527230020000284B014B024B02867231020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723202000074723302000062682B682C685B684368444B008572340200006846877235020000527236020000284B014B024B02867237020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7238020000747239020000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723A0200007D723B0200002868267D723C0200008A0678A25B70E97F6A1F02000073683C4B026825684368444B0085723D020000684687723E02000052723F020000284B014B034B03867240020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724102000074724202000062682B682C687E4E75627562683C4B01687F683275628A06B0395B70E97F6828298172430200007D724402000028682B682C682D4B02682E4B0268267D72450200008A06583A5B70E97F6838298172460200007D72470200002868267D7248020000683C4B01683D6A43020000682B682C683E683F298172490200007D724A020000286842684368444B0085724B020000684687724C02000052724D020000284B014B0285724E020000684D894310000000000000F07F000000000000F07F724F0200007472500200006268528868267D72510200008A06583A5B70E97F6A4602000073683C4B016854684368444B008572520200006846877253020000527254020000284B014B024B02867255020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725602000074725702000062682B682C685B684368444B00857258020000684687725902000052725A020000284B014B024B0286725B020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725C02000074725D020000627562685B4E756273683068282981725E0200007D725F02000028682B682C682D4B02682E4B0268267D72600200008A06B0395B70E97F6A430200007368306831298172610200007D72620200002868267D72630200008A0640395B70E97F6A5E020000736868683F298172640200007D7265020000286842684368444B008572660200006846877267020000527268020000284B014B02857269020000684D894310000000000000F07F000000000000F07F726A02000074726B0200006268528868267D726C0200008A0698385B70E97F6A6102000073683C4B016854684368444B0085726D020000684687726E02000052726F020000284B014B024B02867270020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727102000074727202000062682B682C685B684368444B008572730200006846877274020000527275020000284B014B024B02867276020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7277020000747278020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172790200007D727A0200002868267D727B0200008A0640395B70E97F6A5E02000073683C4B026825684368444B0085727C020000684687727D02000052727E020000284B014B034B0386727F020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728002000074728102000062682B682C687E4E75627562683C4B01687F683275628A06302D6070E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A7282020000298172830200007D72840200002858020000005F787285020000683268267D7286020000683C4B0168254E682B682C687E4E58020000005F797287020000636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A7288020000298172890200007D728A0200002868267D728B0200008A06302D6070E97F6A8302000073683C4B01682B682C687E4E756275628A06D02F6270E97F68282981728C0200007D728D02000028682B682C682D4B02682E4B0268267D728E0200008A0680C05A70E97F68382981728F0200007D72900200002868267D7291020000683C4B01683D6A8C020000682B682C683E683F298172920200007D7293020000286842684368444B008572940200006846877295020000527296020000284B014B02857297020000684D894310000000000000F07F000000000000F07F72980200007472990200006268528868267D729A0200008A0680C05A70E97F6A8F02000073683C4B016854684368444B0085729B020000684687729C02000052729D020000284B014B024B0286729E020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729F0200007472A002000062682B682C685B684368444B008572A102000068468772A20200005272A3020000284B014B024B028672A4020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A50200007472A6020000627562685B4E75627368306828298172A70200007D72A802000028682B682C682D4B02682E4B0268267D72A90200008A06D02F6270E97F6A8C0200007368306831298172AA0200007D72AB0200002868267D72AC0200008A06882C6270E97F6AA7020000736868683F298172AD0200007D72AE020000286842684368444B008572AF02000068468772B00200005272B1020000284B014B028572B2020000684D894310000000000000F07F000000000000F07F72B30200007472B40200006268528868267D72B50200008A06282F6270E97F6AAA02000073683C4B016854684368444B008572B602000068468772B70200005272B8020000284B014B024B028672B9020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0200007472BB02000062682B682C685B684368444B008572BC02000068468772BD0200005272BE020000284B014B024B028672BF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C00200007472C1020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C20200007D72C30200002868267D72C40200008A06882C6270E97F6AA702000073683C4B026825684368444B008572C502000068468772C60200005272C7020000284B014B034B038672C8020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C90200007472CA02000062682B682C687E4E75627562683C4B01687F683275628A06580A5F70E97F6A82020000298172CB0200007D72CC020000286A85020000683268267D72CD020000683C4B0168254E682B682C687E4E6A870200006A88020000298172CE0200007D72CF0200002868267D72D00200008A06580A5F70E97F6ACB02000073683C4B01682B682C687E4E756275628A06180C5F70E97F6A82020000298172D10200007D72D2020000286A85020000683268267D72D3020000683C4B0168254E682B682C687E4E6A870200006A88020000298172D40200007D72D50200002868267D72D60200008A06180C5F70E97F6AD102000073683C4B01682B682C687E4E756275628A06B8A75B70E97F6828298172D70200007D72D802000028682B682C682D4B02682E4B0268267D72D90200008A0660A85B70E97F6838298172DA0200007D72DB0200002868267D72DC020000683C4B01683D6AD7020000682B682C683E683F298172DD0200007D72DE020000286842684368444B008572DF02000068468772E00200005272E1020000284B014B028572E2020000684D894310000000000000F07F000000000000F07F72E30200007472E40200006268528868267D72E50200008A0660A85B70E97F6ADA02000073683C4B016854684368444B008572E602000068468772E70200005272E8020000284B014B024B028672E9020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0200007472EB02000062682B682C685B684368444B008572EC02000068468772ED0200005272EE020000284B014B024B028672EF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00200007472F1020000627562685B4E75627368306828298172F20200007D72F302000028682B682C682D4B02682E4B0268267D72F40200008A06B8A75B70E97F6AD70200007368306831298172F50200007D72F60200002868267D72F70200008A0648A75B70E97F6AF2020000736868683F298172F80200007D72F9020000286842684368444B008572FA02000068468772FB0200005272FC020000284B014B028572FD020000684D894310000000000000F07F000000000000F07F72FE0200007472FF0200006268528868267D72000300008A06A0A65B70E97F6AF502000073683C4B016854684368444B008572010300006846877202030000527203030000284B014B024B02867204030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720503000074720603000062682B682C685B684368444B008572070300006846877208030000527209030000284B014B024B0286720A030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720B03000074720C030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720D0300007D720E0300002868267D720F0300008A0648A75B70E97F6AF202000073683C4B026825684368444B008572100300006846877211030000527212030000284B014B034B03867213030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721403000074721503000062682B682C687E4E75627562683C4B01687F683275628A06C8635C70E97F6828298172160300007D721703000028682B682C682D4B02682E4B0268267D72180300008A0670645C70E97F6838298172190300007D721A0300002868267D721B030000683C4B01683D6A16030000682B682C683E683F2981721C0300007D721D030000286842684368444B0085721E030000684687721F030000527220030000284B014B02857221030000684D894310000000000000F07F000000000000F07F72220300007472230300006268528868267D72240300008A0670645C70E97F6A1903000073683C4B016854684368444B008572250300006846877226030000527227030000284B014B024B02867228030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722903000074722A03000062682B682C685B684368444B0085722B030000684687722C03000052722D030000284B014B024B0286722E030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F030000747230030000627562685B4E75627368306828298172310300007D723203000028682B682C682D4B02682E4B0268267D72330300008A06C8635C70E97F6A160300007368306831298172340300007D72350300002868267D72360300008A0658635C70E97F6A31030000736868683F298172370300007D7238030000286842684368444B00857239030000684687723A03000052723B030000284B014B0285723C030000684D894310000000000000F07F000000000000F07F723D03000074723E0300006268528868267D723F0300008A06B0625C70E97F6A3403000073683C4B016854684368444B008572400300006846877241030000527242030000284B014B024B02867243030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724403000074724503000062682B682C685B684368444B008572460300006846877247030000527248030000284B014B024B02867249030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724A03000074724B030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724C0300007D724D0300002868267D724E0300008A0658635C70E97F6A3103000073683C4B026825684368444B0085724F0300006846877250030000527251030000284B014B034B03867252030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725303000074725403000062682B682C687E4E75627562683C4B01687F683275628A06202A6270E97F6828298172550300007D725603000028682B682C682D4B02682E4B0268267D725703000068306832683C4B01687F682375628A06581A5C70E97F6828298172580300007D725903000028682B682C682D4B02682E4B0268267D725A0300008A06001B5C70E97F68382981725B0300007D725C0300002868267D725D030000683C4B01683D6A58030000682B682C683E683F2981725E0300007D725F030000286842684368444B008572600300006846877261030000527262030000284B014B02857263030000684D894310000000000000F07F000000000000F07F72640300007472650300006268528868267D72660300008A06001B5C70E97F6A5B03000073683C4B016854684368444B008572670300006846877268030000527269030000284B014B024B0286726A030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726B03000074726C03000062682B682C685B684368444B0085726D030000684687726E03000052726F030000284B014B024B02867270030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7271030000747272030000627562685B4E75627368306828298172730300007D727403000028682B682C682D4B02682E4B0268267D72750300008A06581A5C70E97F6A580300007368306831298172760300007D72770300002868267D72780300008A06E8195C70E97F6A73030000736868683F298172790300007D727A030000286842684368444B0085727B030000684687727C03000052727D030000284B014B0285727E030000684D894310000000000000F07F000000000000F07F727F0300007472800300006268528868267D72810300008A0640195C70E97F6A7603000073683C4B016854684368444B008572820300006846877283030000527284030000284B014B024B02867285030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728603000074728703000062682B682C685B684368444B00857288030000684687728903000052728A030000284B014B024B0286728B030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728C03000074728D030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981728E0300007D728F0300002868267D72900300008A06E8195C70E97F6A7303000073683C4B026825684368444B008572910300006846877292030000527293030000284B014B034B03867294030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729503000074729603000062682B682C687E4E75627562683C4B01687F683275628A0698A86070E97F6828298172970300007D729803000028682B682C682D4B02682E4B0268267D72990300008A06F0AE6070E97F68382981729A0300007D729B0300002868267D729C030000683C4B01683D6A97030000682B682C683E683F2981729D0300007D729E030000286842684368444B0085729F03000068468772A00300005272A1030000284B014B028572A2030000684D894310000000000000F07F000000000000F07F72A30300007472A40300006268528868267D72A50300008A06F0AE6070E97F6A9A03000073683C4B016854684368444B008572A603000068468772A70300005272A8030000284B014B024B028672A9030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AA0300007472AB03000062682B682C685B684368444B008572AC03000068468772AD0300005272AE030000284B014B024B028672AF030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B00300007472B1030000627562685B4E75627368306828298172B20300007D72B303000028682B682C682D4B02682E4B0268267D72B40300008A0698A86070E97F6A970300007368306831298172B50300007D72B60300002868267D72B70300008A06F0176170E97F6AB2030000736868683F298172B80300007D72B9030000286842684368444B008572BA03000068468772BB0300005272BC030000284B014B028572BD030000684D894310000000000000F07F000000000000F07F72BE0300007472BF0300006268528868267D72C00300008A0640C25F70E97F6AB503000073683C4B016854684368444B008572C103000068468772C20300005272C3030000284B014B024B028672C4030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C50300007472C603000062682B682C685B684368444B008572C703000068468772C80300005272C9030000284B014B024B028672CA030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CB0300007472CC030000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172CD0300007D72CE0300002868267D72CF0300008A06F0176170E97F6AB203000073683C4B026825684368444B008572D003000068468772D10300005272D2030000284B014B034B038672D3030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D40300007472D503000062682B682C687E4E75627562683C4B01687F683275628A06B8206070E97F6828298172D60300007D72D703000028682B682C682D4B02682E4B0268267D72D80300008A06F0206070E97F6838298172D90300007D72DA0300002868267D72DB030000683C4B01683D6AD6030000682B682C683E683F298172DC0300007D72DD030000286842684368444B008572DE03000068468772DF0300005272E0030000284B014B028572E1030000684D894310000000000000F07F000000000000F07F72E20300007472E30300006268528868267D72E40300008A06F0206070E97F6AD903000073683C4B016854684368444B008572E503000068468772E60300005272E7030000284B014B024B028672E8030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E90300007472EA03000062682B682C685B684368444B008572EB03000068468772EC0300005272ED030000284B014B024B028672EE030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EF0300007472F0030000627562685B4E75627368306828298172F10300007D72F203000028682B682C682D4B02682E4B0268267D72F30300008A06B8206070E97F6AD60300007368306831298172F40300007D72F50300002868267D72F60300008A06A00D5F70E97F6AF1030000736868683F298172F70300007D72F8030000286842684368444B008572F903000068468772FA0300005272FB030000284B014B028572FC030000684D894310000000000000F07F000000000000F07F72FD0300007472FE0300006268528868267D72FF0300008A06800E5F70E97F6AF403000073683C4B016854684368444B008572000400006846877201040000527202040000284B014B024B02867203040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720404000074720504000062682B682C685B684368444B008572060400006846877207040000527208040000284B014B024B02867209040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720A04000074720B040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720C0400007D720D0400002868267D720E0400008A06A00D5F70E97F6AF103000073683C4B026825684368444B0085720F0400006846877210040000527211040000284B014B034B03867212040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721304000074721404000062682B682C687E4E75627562683C4B01687F683275628A06F01E5C70E97F6828298172150400007D721604000028682B682C682D4B02682E4B0268267D72170400008A06981F5C70E97F6838298172180400007D72190400002868267D721A040000683C4B01683D6A15040000682B682C683E683F2981721B0400007D721C040000286842684368444B0085721D040000684687721E04000052721F040000284B014B02857220040000684D894310000000000000F07F000000000000F07F72210400007472220400006268528868267D72230400008A06981F5C70E97F6A1804000073683C4B016854684368444B008572240400006846877225040000527226040000284B014B024B02867227040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722804000074722904000062682B682C685B684368444B0085722A040000684687722B04000052722C040000284B014B024B0286722D040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722E04000074722F040000627562685B4E75627368306828298172300400007D723104000028682B682C682D4B02682E4B0268267D72320400008A06F01E5C70E97F6A150400007368306831298172330400007D72340400002868267D72350400008A06801E5C70E97F6A30040000736868683F298172360400007D7237040000286842684368444B00857238040000684687723904000052723A040000284B014B0285723B040000684D894310000000000000F07F000000000000F07F723C04000074723D0400006268528868267D723E0400008A06D81D5C70E97F6A3304000073683C4B016854684368444B0085723F0400006846877240040000527241040000284B014B024B02867242040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724304000074724404000062682B682C685B684368444B008572450400006846877246040000527247040000284B014B024B02867248040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724904000074724A040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724B0400007D724C0400002868267D724D0400008A06801E5C70E97F6A3004000073683C4B026825684368444B0085724E040000684687724F040000527250040000284B014B034B03867251040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725204000074725304000062682B682C687E4E75627562683C4B01687F683275628A0610C76170E97F6828298172540400007D725504000028682B682C682D4B02682E4B0268267D72560400008A06381B6170E97F6838298172570400007D72580400002868267D7259040000683C4B01683D6A54040000682B682C683E683F2981725A0400007D725B040000286842684368444B0085725C040000684687725D04000052725E040000284B014B0285725F040000684D894310000000000000F07F000000000000F07F72600400007472610400006268528868267D72620400008A06381B6170E97F6A5704000073683C4B016854684368444B008572630400006846877264040000527265040000284B014B024B02867266040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726704000074726804000062682B682C685B684368444B00857269040000684687726A04000052726B040000284B014B024B0286726C040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726D04000074726E040000627562685B4E756273683068282981726F0400007D727004000028682B682C682D4B02682E4B0268267D72710400008A0610C76170E97F6A540400007368306831298172720400007D72730400002868267D72740400008A06285F5E70E97F6A6F040000736868683F298172750400007D7276040000286842684368444B008572770400006846877278040000527279040000284B014B0285727A040000684D894310000000000000F07F000000000000F07F727B04000074727C0400006268528868267D727D0400008A06805E5E70E97F6A7204000073683C4B016854684368444B0085727E040000684687727F040000527280040000284B014B024B02867281040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728204000074728304000062682B682C685B684368444B008572840400006846877285040000527286040000284B014B024B02867287040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7288040000747289040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981728A0400007D728B0400002868267D728C0400008A06285F5E70E97F6A6F04000073683C4B026825684368444B0085728D040000684687728E04000052728F040000284B014B034B03867290040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729104000074729204000062682B682C687E4E75627562683C4B01687F683275628A0660685C70E97F6828298172930400007D729404000028682B682C682D4B02682E4B0268267D72950400008A0608695C70E97F6838298172960400007D72970400002868267D7298040000683C4B01683D6A93040000682B682C683E683F298172990400007D729A040000286842684368444B0085729B040000684687729C04000052729D040000284B014B0285729E040000684D894310000000000000F07F000000000000F07F729F0400007472A00400006268528868267D72A10400008A0608695C70E97F6A9604000073683C4B016854684368444B008572A204000068468772A30400005272A4040000284B014B024B028672A5040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A60400007472A704000062682B682C685B684368444B008572A804000068468772A90400005272AA040000284B014B024B028672AB040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AC0400007472AD040000627562685B4E75627368306828298172AE0400007D72AF04000028682B682C682D4B02682E4B0268267D72B00400008A0660685C70E97F6A930400007368306831298172B10400007D72B20400002868267D72B30400008A06F0675C70E97F6AAE040000736868683F298172B40400007D72B5040000286842684368444B008572B604000068468772B70400005272B8040000284B014B028572B9040000684D894310000000000000F07F000000000000F07F72BA0400007472BB0400006268528868267D72BC0400008A0648675C70E97F6AB104000073683C4B016854684368444B008572BD04000068468772BE0400005272BF040000284B014B024B028672C0040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C10400007472C204000062682B682C685B684368444B008572C304000068468772C40400005272C5040000284B014B024B028672C6040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C70400007472C8040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C90400007D72CA0400002868267D72CB0400008A06F0675C70E97F6AAE04000073683C4B026825684368444B008572CC04000068468772CD0400005272CE040000284B014B034B038672CF040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D00400007472D104000062682B682C687E4E75627562683C4B01687F683275628A0650AC5B70E97F6828298172D20400007D72D304000028682B682C682D4B02682E4B0268267D72D40400008A06F8AC5B70E97F6838298172D50400007D72D60400002868267D72D7040000683C4B01683D6AD2040000682B682C683E683F298172D80400007D72D9040000286842684368444B008572DA04000068468772DB0400005272DC040000284B014B028572DD040000684D894310000000000000F07F000000000000F07F72DE0400007472DF0400006268528868267D72E00400008A06F8AC5B70E97F6AD504000073683C4B016854684368444B008572E104000068468772E20400005272E3040000284B014B024B028672E4040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E50400007472E604000062682B682C685B684368444B008572E704000068468772E80400005272E9040000284B014B024B028672EA040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EB0400007472EC040000627562685B4E75627368306828298172ED0400007D72EE04000028682B682C682D4B02682E4B0268267D72EF0400008A0650AC5B70E97F6AD20400007368306831298172F00400007D72F10400002868267D72F20400008A06E0AB5B70E97F6AED040000736868683F298172F30400007D72F4040000286842684368444B008572F504000068468772F60400005272F7040000284B014B028572F8040000684D894310000000000000F07F000000000000F07F72F90400007472FA0400006268528868267D72FB0400008A0638AB5B70E97F6AF004000073683C4B016854684368444B008572FC04000068468772FD0400005272FE040000284B014B024B028672FF040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720005000074720105000062682B682C685B684368444B008572020500006846877203050000527204050000284B014B024B02867205050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7206050000747207050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172080500007D72090500002868267D720A0500008A06E0AB5B70E97F6AED04000073683C4B026825684368444B0085720B050000684687720C05000052720D050000284B014B034B0386720E050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720F05000074721005000062682B682C687E4E75627562683C4B01687F683275628A0688C55F70E97F6828298172110500007D721205000028682B682C682D4B02682E4B0268267D72130500008A0628CF5F70E97F6838298172140500007D72150500002868267D7216050000683C4B01683D6A11050000682B682C683E683F298172170500007D7218050000286842684368444B00857219050000684687721A05000052721B050000284B014B0285721C050000684D894310000000000000F07F000000000000F07F721D05000074721E0500006268528868267D721F0500008A0628CF5F70E97F6A1405000073683C4B016854684368444B008572200500006846877221050000527222050000284B014B024B02867223050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722405000074722505000062682B682C685B684368444B008572260500006846877227050000527228050000284B014B024B02867229050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722A05000074722B050000627562685B4E756273683068282981722C0500007D722D05000028682B682C682D4B02682E4B0268267D722E0500008A0688C55F70E97F6A1105000073683068312981722F0500007D72300500002868267D72310500008A0608C25F70E97F6A2C050000736868683F298172320500007D7233050000286842684368444B008572340500006846877235050000527236050000284B014B02857237050000684D894310000000000000F07F000000000000F07F72380500007472390500006268528868267D723A0500008A06F0C05F70E97F6A2F05000073683C4B016854684368444B0085723B050000684687723C05000052723D050000284B014B024B0286723E050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723F05000074724005000062682B682C685B684368444B008572410500006846877242050000527243050000284B014B024B02867244050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7245050000747246050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172470500007D72480500002868267D72490500008A0608C25F70E97F6A2C05000073683C4B026825684368444B0085724A050000684687724B05000052724C050000284B014B034B0386724D050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724E05000074724F05000062682B682C687E4E75627562683C4B01687F683275628A06A8CB5A70E97F6828298172500500007D725105000028682B682C682D4B02682E4B0268267D72520500008A0650CC5A70E97F6838298172530500007D72540500002868267D7255050000683C4B01683D6A50050000682B682C683E683F298172560500007D7257050000286842684368444B00857258050000684687725905000052725A050000284B014B0285725B050000684D894310000000000000F07F000000000000F07F725C05000074725D0500006268528868267D725E0500008A0650CC5A70E97F6A5305000073683C4B016854684368444B0085725F0500006846877260050000527261050000284B014B024B02867262050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726305000074726405000062682B682C685B684368444B008572650500006846877266050000527267050000284B014B024B02867268050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726905000074726A050000627562685B4E756273683068282981726B0500007D726C05000028682B682C682D4B02682E4B0268267D726D0500008A06A8CB5A70E97F6A5005000073683068312981726E0500007D726F0500002868267D72700500008A0638CB5A70E97F6A6B050000736868683F298172710500007D7272050000286842684368444B008572730500006846877274050000527275050000284B014B02857276050000684D894310000000000000F07F000000000000F07F72770500007472780500006268528868267D72790500008A0690CA5A70E97F6A6E05000073683C4B016854684368444B0085727A050000684687727B05000052727C050000284B014B024B0286727D050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727E05000074727F05000062682B682C685B684368444B008572800500006846877281050000527282050000284B014B024B02867283050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7284050000747285050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172860500007D72870500002868267D72880500008A0638CB5A70E97F6A6B05000073683C4B026825684368444B00857289050000684687728A05000052728B050000284B014B034B0386728C050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728D05000074728E05000062682B682C687E4E75627562683C4B01687F683275628A06282FBB73E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A728F050000298172900500007D7291050000286A85020000683268267D7292050000288A06605F6170E97F6828298172930500007D729405000028682B682C682D4B02682E4B0268267D729505000068306A90050000683C4B02687F6822298172960500007D72970500002868254E68267D72980500008A06605F6170E97F6A9305000073683C4B01580C0000005F7363616C655F7472616E73729905000068802981729A0500007D729B0500002868267D729C050000288A0640C26170E97F68222981729D0500007D729E0500002868254E68267D729F0500008A0648C06170E97F6828298172A00500007D72A105000028682B682C682D4B02682E4B0268267D72A205000068306A90050000683C4B02687F6A9D050000756273683C4B016A990500006A9A050000682B682C687E4E58020000005F7472A3050000473FB8E38E38E38E394B008672A405000075628A0620CA6170E97F6822298172A50500007D72A60500002868254E68267D72A70500008A06C8CA6170E97F6828298172A80500007D72A905000028682B682C682D4B02682E4B0268267D72AA05000068306A90050000683C4B02687F6AA5050000756273683C4B016A990500006A9A050000682B682C687E4E6AA305000047BFB8E38E38E38E394B008672AB05000075628A06B0126170E97F6822298172AC0500007D72AD0500002868254E68267D72AE0500008A0640126170E97F6828298172AF0500007D72B005000028682B682C682D4B02682E4B0268267D72B105000068306A8F050000298172B20500007D72B3050000286A850200006828298172B40500007D72B505000028682B682C682D4B02682E4B0268267D72B6050000288A06B82EBB73E97F6AB20500008A06282FBB73E97F6A90050000756830636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A72B7050000298172B80500007D72B905000028682E4B0258050000006368696C6472BA0500006A82020000298172BB0500007D72BC050000286A850200006A88020000298172BD0500007D72BE0500002868267D72BF0500008A0680276270E97F6ABB05000073683C4B01682B682C687E4E756268267D72C00500008A06C02CBB73E97F6AB805000073683C4B006825684368444B008572C105000068468772C20500005272C3050000284B014B034B038672C4050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50500007472C605000062682B682C687E4E6A870200006A88020000298172C70500007D72C80500002868267D72C90500008A0680276270E97F6ABB05000073683C4B01682B682C687E4E756275625807000000706172656E747372CA0500007D72CB050000288A06102EBB73E97F6AB40500008A06C82ABB73E97F6838298172CC0500007D72CD0500002868267D72CE0500008A06582ABB73E97F636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A72CF050000298172D00500007D72D10500002868267D72D20500008A06A02DBB73E97F6828298172D30500007D72D405000028682B682C682D4B02682E4B0268267D72D50500008A06102EBB73E97F6AB40500007368306AD0050000683C4B02687F683275627358060000005F626F78696E72D60500006ACC050000683C4B026825684368444B008572D705000068468772D80500005272D9050000284B014B034B038672DA050000684D894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F72DB0500007472DC05000062682B682C687E4E756273683C4B02683D6AB8050000682B682C683E683F298172DD0500007D72DE050000286842684368444B008572DF05000068468772E00500005272E1050000284B014B028572E2050000684D894310000000000000F07F000000000000F07F72E30500007472E40500006268528868267D72E50500008A06C82ABB73E97F6ACC05000073683C4B026854684368444B008572E605000068468772E70500005272E8050000284B014B024B028672E9050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0500007472EB05000062682B682C685B684368444B008572EC05000068468772ED0500005272EE050000284B014B024B028672EF050000684D894320999999999999A9BF0000000000000000CCCCCCCCCCCCF03F33333333B39A2C4172F00500007472F1050000627562685B684368444B008572F205000068468772F30500005272F4050000284B014B024B028672F5050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F60500007472F705000062756275682D4B027562683C4B02687F6AD3050000756268267D72F8050000288A0640126170E97F6AAF0500008A0650156170E97F6828298172F90500007D72FA05000028682B682C682D4B02682E4B0268267D72FB05000068306AB2050000683C4B02687F6822298172FC0500007D72FD0500002868254E68267D72FE0500008A0650156170E97F6AF905000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB8E38E38E38E398672FF050000756275628A06A0CD5F70E97F6828298172000600007D720106000028682B682C682D4B02682E4B0268267D720206000068306AB2050000683C4B02687F6822298172030600007D72040600002868254E68267D72050600008A06A0CD5F70E97F6A0006000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB3333333333334867206060000756275628A0698CF5F70E97F6828298172070600007D720806000028682B682C682D4B02682E4B0268267D720906000068306AB2050000683C4B02687F68222981720A0600007D720B0600002868254E68267D720C0600008A0698CF5F70E97F6A0706000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB333333333333486720D060000756275628A0670246270E97F68282981720E0600007D720F06000028682B682C682D4B02682E4B0268267D721006000068306AB2050000683C4B02687F6822298172110600007D72120600002868254E68267D72130600008A0670246270E97F6A0E06000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB3333333333334867214060000756275628A0660F86170E97F6828298172150600007D721606000028682B682C682D4B02682E4B0268267D721706000068306AB2050000683C4B02687F6822298172180600007D72190600002868254E68267D721A0600008A0660F86170E97F6A1506000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB8E38E38E38E3986721B060000756275628A06B0F96170E97F68282981721C0600007D721D06000028682B682C682D4B02682E4B0268267D721E06000068306AB2050000683C4B02687F68222981721F0600007D72200600002868254E68267D72210600008A06B0F96170E97F6A1C06000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B00473FB8E38E38E38E39867222060000756275628A0620236270E97F6828298172230600007D722406000028682B682C682D4B02682E4B0268267D722506000068306AB2050000683C4B02687F6822298172260600007D72270600002868254E68267D72280600008A0620236270E97F6A2306000073683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB33333333333348672290600007562756275683C4B0258070000005F616666696E65722A0600004E682B682C6A8702000068327562683C4B02687F6AAC050000756273683C4B016A990500006A9A050000682B682C687E4E6AA30500004B0047BFB8E38E38E38E3986722B06000075628A06485E6170E97F6A960500008A0600246270E97F6A110600008A0608226270E97F6A260600008A0678C25F70E97F6A0A0600008A06D0F86170E97F6A180600008A06601F6170E97F6AFC0500008A0650F56170E97F68222981722C0600007D722D0600002868254E68267D722E0600008A06C0F56170E97F68282981722F0600007D723006000028682B682C682D4B02682E4B0268267D723106000068306A90050000683C4B02687F6A2C060000756273683C4B016A990500006A9A050000682B682C687E4E6AA3050000473FB33333333333344B0086723206000075628A06D01F6170E97F68238A0608F96170E97F6A1F0600008A06B8A06070E97F6822298172330600007D72340600002868254E68267D72350600008A06D0A16070E97F6828298172360600007D723706000028682B682C682D4B02682E4B0268267D723806000068306A90050000683C4B02687F6A33060000756273683C4B016A990500006A9A050000682B682C687E4E6AA3050000473FB8E38E38E38E394B0086723906000075628A06F0106170E97F68222981723A0600007D723B0600002868254E68267D723C0600008A0688C56170E97F68282981723D0600007D723E06000028682B682C682D4B02682E4B0268267D723F06000068306A90050000683C4B02687F6A3A060000756273683C4B016A990500006A9A050000682B682C687E4E6AA305000047BFB33333333333344B0086724006000075628A06980FBA73E97F6838298172410600007D72420600002868267D72430600008A066021BB73E97F6831298172440600007D72450600002868267D72460600008A066028BB73E97F6838298172470600007D72480600002868267D72490600008A06382BBB73E97F683273683C4B01683D6A44060000682B682C683E683F2981724A0600007D724B060000286842684368444B0085724C060000684687724D06000052724E060000284B014B0285724F060000684D894310000000000000F07F000000000000F07F72500600007472510600006268528868267D72520600008A066028BB73E97F6A4706000073683C4B006854684368444B008572530600006846877254060000527255060000284B014B024B02867256060000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F725706000074725806000062682B682C685B684368444B00857259060000684687725A06000052725B060000284B014B024B0286725C060000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F725D06000074725E060000627562685B4E75627368686A41060000683C4B0168254E682B682C687E4E756273683C4B01683D6A9A050000682B682C683E683F2981725F0600007D7260060000286842684368444B008572610600006846877262060000527263060000284B014B02857264060000684D894310000000000000F07F000000000000F07F72650600007472660600006268528868267D72670600008A06980FBA73E97F6A4106000073683C4B016854684368444B00857268060000684687726906000052726A060000284B014B024B0286726B060000684D894320000000000000000000000000000000009A999999999919403333333333331340726C06000074726D06000062682B682C685B684368444B0085726E060000684687726F060000527270060000284B014B024B02867271060000684D894320000000000000000000000000000000009A9999999999194033333333333313407272060000747273060000627562685B4E75628A06A0C66170E97F6822298172740600007D72750600002868254E68267D72760600008A0658C36170E97F6828298172770600007D727806000028682B682C682D4B02682E4B0268267D727906000068306A90050000683C4B02687F6A74060000756273683C4B016A990500006A9A050000682B682C687E4E6AA3050000473FB33333333333344B0086727A06000075628A06F8CC5F70E97F6A030600008A0620F36170E97F68222981727B0600007D727C0600002868254E68267D727D0600008A0670F46170E97F68282981727E0600007D727F06000028682B682C682D4B02682E4B0268267D728006000068306A90050000683C4B02687F6A7B060000756273683C4B016A990500006A9A050000682B682C687E4E6AA305000047BFB33333333333344B00867281060000756275683C4B026825684368444B008572820600006846877283060000527284060000284B014B034B03867285060000684D89434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F728606000074728706000062682B682C687E4E7562682B682C687E4E6AA305000047BFB8E38E38E38E394B00867288060000756275628A06D0A16070E97F6A360600008A06C0F56170E97F6A2F0600008A0688C56170E97F6A3D0600008A0648C06170E97F6AA00500008A0670F46170E97F6A7E0600008A06C8CA6170E97F6AA80500008A0658C36170E97F6A7706000075683C4B026A2A0600004E682B682C6A870200006AB405000075628A06702B6070E97F6A82020000298172890600007D728A060000286A850200006A880200002981728B0600007D728C0600002868267D728D0600008A06702B6070E97F6A8906000073683C4B01682B682C687E4E756268267D728E060000683C4B0168254E682B682C687E4E6A87020000683275628A06A8C45A70E97F68282981728F0600007D729006000028682B682C682D4B02682E4B0268267D72910600008A0650C55A70E97F6838298172920600007D72930600002868267D7294060000683C4B01683D6A8F060000682B682C683E683F298172950600007D7296060000286842684368444B008572970600006846877298060000527299060000284B014B0285729A060000684D894310000000000000F07F000000000000F07F729B06000074729C0600006268528868267D729D0600008A0650C55A70E97F6A9206000073683C4B016854684368444B0085729E060000684687729F0600005272A0060000284B014B024B028672A1060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A20600007472A306000062682B682C685B684368444B008572A406000068468772A50600005272A6060000284B014B024B028672A7060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A80600007472A9060000627562685B4E75627368306828298172AA0600007D72AB06000028682B682C682D4B02682E4B0268267D72AC0600008A06A8C45A70E97F6A8F0600007368306831298172AD0600007D72AE0600002868267D72AF0600008A0638C45A70E97F6AAA060000736868683F298172B00600007D72B1060000286842684368444B008572B206000068468772B30600005272B4060000284B014B028572B5060000684D894310000000000000F07F000000000000F07F72B60600007472B70600006268528868267D72B80600008A0690C35A70E97F6AAD06000073683C4B016854684368444B008572B906000068468772BA0600005272BB060000284B014B024B028672BC060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0600007472BE06000062682B682C685B684368444B008572BF06000068468772C00600005272C1060000284B014B024B028672C2060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C30600007472C4060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C50600007D72C60600002868267D72C70600008A0638C45A70E97F6AAA06000073683C4B026825684368444B008572C806000068468772C90600005272CA060000284B014B034B038672CB060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72CC0600007472CD06000062682B682C687E4E75627562683C4B01687F683275628A06A02DBB73E97F6AD30500008A06C0155C70E97F6828298172CE0600007D72CF06000028682B682C682D4B02682E4B0268267D72D00600008A0668165C70E97F6838298172D10600007D72D20600002868267D72D3060000683C4B01683D6ACE060000682B682C683E683F298172D40600007D72D5060000286842684368444B008572D606000068468772D70600005272D8060000284B014B028572D9060000684D894310000000000000F07F000000000000F07F72DA0600007472DB0600006268528868267D72DC0600008A0668165C70E97F6AD106000073683C4B016854684368444B008572DD06000068468772DE0600005272DF060000284B014B024B028672E0060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E10600007472E206000062682B682C685B684368444B008572E306000068468772E40600005272E5060000284B014B024B028672E6060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E70600007472E8060000627562685B4E75627368306828298172E90600007D72EA06000028682B682C682D4B02682E4B0268267D72EB0600008A06C0155C70E97F6ACE0600007368306831298172EC0600007D72ED0600002868267D72EE0600008A0650155C70E97F6AE9060000736868683F298172EF0600007D72F0060000286842684368444B008572F106000068468772F20600005272F3060000284B014B028572F4060000684D894310000000000000F07F000000000000F07F72F50600007472F60600006268528868267D72F70600008A06A8145C70E97F6AEC06000073683C4B016854684368444B008572F806000068468772F90600005272FA060000284B014B024B028672FB060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0600007472FD06000062682B682C685B684368444B008572FE06000068468772FF060000527200070000284B014B024B02867201070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7202070000747203070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172040700007D72050700002868267D72060700008A0650155C70E97F6AE906000073683C4B026825684368444B008572070700006846877208070000527209070000284B014B034B0386720A070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720B07000074720C07000062682B682C687E4E75627562683C4B01687F683275628A06183C5D70E97F68282981720D0700007D720E07000028682B682C682D4B02682E4B0268267D720F0700008A06C03C5D70E97F6838298172100700007D72110700002868267D7212070000683C4B01683D6A0D070000682B682C683E683F298172130700007D7214070000286842684368444B008572150700006846877216070000527217070000284B014B02857218070000684D894310000000000000F07F000000000000F07F721907000074721A0700006268528868267D721B0700008A06C03C5D70E97F6A1007000073683C4B016854684368444B0085721C070000684687721D07000052721E070000284B014B024B0286721F070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722007000074722107000062682B682C685B684368444B008572220700006846877223070000527224070000284B014B024B02867225070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7226070000747227070000627562685B4E75627368306828298172280700007D722907000028682B682C682D4B02682E4B0268267D722A0700008A06183C5D70E97F6A0D07000073683068312981722B0700007D722C0700002868267D722D0700008A06A83B5D70E97F6A28070000736868683F2981722E0700007D722F070000286842684368444B008572300700006846877231070000527232070000284B014B02857233070000684D894310000000000000F07F000000000000F07F72340700007472350700006268528868267D72360700008A06003B5D70E97F6A2B07000073683C4B016854684368444B008572370700006846877238070000527239070000284B014B024B0286723A070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723B07000074723C07000062682B682C685B684368444B0085723D070000684687723E07000052723F070000284B014B024B02867240070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7241070000747242070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172430700007D72440700002868267D72450700008A06A83B5D70E97F6A2807000073683C4B026825684368444B008572460700006846877247070000527248070000284B014B034B03867249070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724A07000074724B07000062682B682C687E4E75627562683C4B01687F683275628A06B82EBB73E97F6AB20500008A0628115C70E97F68282981724C0700007D724D07000028682B682C682D4B02682E4B0268267D724E0700008A06D0115C70E97F68382981724F0700007D72500700002868267D7251070000683C4B01683D6A4C070000682B682C683E683F298172520700007D7253070000286842684368444B008572540700006846877255070000527256070000284B014B02857257070000684D894310000000000000F07F000000000000F07F72580700007472590700006268528868267D725A0700008A06D0115C70E97F6A4F07000073683C4B016854684368444B0085725B070000684687725C07000052725D070000284B014B024B0286725E070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725F07000074726007000062682B682C685B684368444B008572610700006846877262070000527263070000284B014B024B02867264070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7265070000747266070000627562685B4E75627368306828298172670700007D726807000028682B682C682D4B02682E4B0268267D72690700008A0628115C70E97F6A4C07000073683068312981726A0700007D726B0700002868267D726C0700008A06B8105C70E97F6A67070000736868683F2981726D0700007D726E070000286842684368444B0085726F0700006846877270070000527271070000284B014B02857272070000684D894310000000000000F07F000000000000F07F72730700007472740700006268528868267D72750700008A06D0AF5B70E97F6A6A07000073683C4B016854684368444B008572760700006846877277070000527278070000284B014B024B02867279070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727A07000074727B07000062682B682C685B684368444B0085727C070000684687727D07000052727E070000284B014B024B0286727F070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7280070000747281070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172820700007D72830700002868267D72840700008A06B8105C70E97F6A6707000073683C4B026825684368444B008572850700006846877286070000527287070000284B014B034B03867288070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728907000074728A07000062682B682C687E4E75627562683C4B01687F683275628A06902A6270E97F68282981728B0700007D728C07000028682B682C682D4B02682E4B0268267D728D07000068306832683C4B01687F682375628A0658335D70E97F68282981728E0700007D728F07000028682B682C682D4B02682E4B0268267D72900700008A0600345D70E97F6838298172910700007D72920700002868267D7293070000683C4B01683D6A8E070000682B682C683E683F298172940700007D7295070000286842684368444B008572960700006846877297070000527298070000284B014B02857299070000684D894310000000000000F07F000000000000F07F729A07000074729B0700006268528868267D729C0700008A0600345D70E97F6A9107000073683C4B016854684368444B0085729D070000684687729E07000052729F070000284B014B024B028672A0070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A10700007472A207000062682B682C685B684368444B008572A307000068468772A40700005272A5070000284B014B024B028672A6070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A70700007472A8070000627562685B4E75627368306828298172A90700007D72AA07000028682B682C682D4B02682E4B0268267D72AB0700008A0658335D70E97F6A8E0700007368306831298172AC0700007D72AD0700002868267D72AE0700008A06E8325D70E97F6AA9070000736868683F298172AF0700007D72B0070000286842684368444B008572B107000068468772B20700005272B3070000284B014B028572B4070000684D894310000000000000F07F000000000000F07F72B50700007472B60700006268528868267D72B70700008A0640325D70E97F6AAC07000073683C4B016854684368444B008572B807000068468772B90700005272BA070000284B014B024B028672BB070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BC0700007472BD07000062682B682C685B684368444B008572BE07000068468772BF0700005272C0070000284B014B024B028672C1070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C20700007472C3070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C40700007D72C50700002868267D72C60700008A06E8325D70E97F6AA907000073683C4B026825684368444B008572C707000068468772C80700005272C9070000284B014B034B038672CA070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72CB0700007472CC07000062682B682C687E4E75627562683C4B01687F683275628A0618F55D70E97F6828298172CD0700007D72CE07000028682B682C682D4B02682E4B0268267D72CF0700008A06C0F55D70E97F6838298172D00700007D72D10700002868267D72D2070000683C4B01683D6ACD070000682B682C683E683F298172D30700007D72D4070000286842684368444B008572D507000068468772D60700005272D7070000284B014B028572D8070000684D894310000000000000F07F000000000000F07F72D90700007472DA0700006268528868267D72DB0700008A06C0F55D70E97F6AD007000073683C4B016854684368444B008572DC07000068468772DD0700005272DE070000284B014B024B028672DF070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E00700007472E107000062682B682C685B684368444B008572E207000068468772E30700005272E4070000284B014B024B028672E5070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E60700007472E7070000627562685B4E75627368306828298172E80700007D72E907000028682B682C682D4B02682E4B0268267D72EA0700008A0618F55D70E97F6ACD0700007368306831298172EB0700007D72EC0700002868267D72ED0700008A06A8F45D70E97F6AE8070000736868683F298172EE0700007D72EF070000286842684368444B008572F007000068468772F10700005272F2070000284B014B028572F3070000684D894310000000000000F07F000000000000F07F72F40700007472F50700006268528868267D72F60700008A0600F45D70E97F6AEB07000073683C4B016854684368444B008572F707000068468772F80700005272F9070000284B014B024B028672FA070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72FB0700007472FC07000062682B682C685B684368444B008572FD07000068468772FE0700005272FF070000284B014B024B02867200080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7201080000747202080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172030800007D72040800002868267D72050800008A06A8F45D70E97F6AE807000073683C4B026825684368444B008572060800006846877207080000527208080000284B014B034B03867209080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720A08000074720B08000062682B682C687E4E75627562683C4B01687F683275628A0630CD5670E97F68282981720C0800007D720D08000028682B682C682D4B02682E4B0268267D720E0800008A06D8CD5670E97F68382981720F0800007D72100800002868267D7211080000683C4B01683D6A0C080000682B682C683E683F298172120800007D7213080000286842684368444B008572140800006846877215080000527216080000284B014B02857217080000684D894310000000000000F07F000000000000F07F72180800007472190800006268528868267D721A0800008A06D8CD5670E97F6A0F08000073683C4B016854684368444B0085721B080000684687721C08000052721D080000284B014B024B0286721E080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721F08000074722008000062682B682C685B684368444B008572210800006846877222080000527223080000284B014B024B02867224080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7225080000747226080000627562685B4E75627368306828298172270800007D722808000028682B682C682D4B02682E4B0268267D72290800008A0630CD5670E97F6A0C08000073683068312981722A0800007D722B0800002868267D722C0800008A06C0CC5670E97F6A27080000736868683F2981722D0800007D722E080000286842684368444B0085722F0800006846877230080000527231080000284B014B02857232080000684D894310000000000000F07F000000000000F07F72330800007472340800006268528868267D72350800008A0618CC5670E97F6A2A08000073683C4B016854684368444B008572360800006846877237080000527238080000284B014B024B02867239080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723A08000074723B08000062682B682C685B684368444B0085723C080000684687723D08000052723E080000284B014B024B0286723F080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7240080000747241080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172420800007D72430800002868267D72440800008A06C0CC5670E97F6A2708000073683C4B026825684368444B008572450800006846877246080000527247080000284B014B034B03867248080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724908000074724A08000062682B682C687E4E75627562683C4B01687F683275627568686A47060000683C4B0168254E682B682C687E4E7562683C4B01687F682375628A06202A6270E97F6A550300008A06902A6270E97F6A8B07000075683C4B016A990500006A9A050000682B682C687E4E6AA3050000470000000000000000473FB555555555555586724B0800007562580700000070617463686573724C0800005D724D08000028636D6174706C6F746C69622E706174636865730A52656374616E676C650A724E0800002981724F0800007D72500800002868034E6805896806680168074E68086A910700006809680A5D72510800005D7252080000636E756D70792E636F72652E6D756C746961727261790A7363616C61720A7253080000684D4308000000000000000072540800008672550800005272560800006186725708000081725808000058090000005F636C69707061746872590800004E58060000005F7374616C65725A08000088580D0000005F7472616E73666F726D536574725B0800008858060000005F616E676C65725C080000470000000000000000580C0000005F616E7469616C6961736564725D08000088580A0000005F75735F646173686573725E0800004E4E86725F08000058050000005F66696C6C7260080000886A8702000047000000000000000058050000005F736E617072610800004E58080000005F76697369626C65726208000088580E0000005F70726F706F627365727665727372630800007D7264080000580A0000005F6C696E657374796C6572650800005805000000736F6C6964726608000058060000005F77696474687267080000473FB999999999999A58070000005F6865696768747268080000474128C22A0000000058060000005F6C6162656C7269080000580A0000005F6E6F6C6567656E645F726A08000058060000005F6861746368726B0800004E580F0000005F726563745F7472616E73666F726D726C08000068282981726D0800007D726E08000028682B682C682D4B02682E4B0268267D726F08000068306831298172700800007D72710800002868267D72720800008A06606F5C70E97F6A6D080000736868683F298172730800007D7274080000286842684368444B008572750800006846877276080000527277080000284B014B02857278080000684D894310000000000000F07F000000000000F07F727908000074727A0800006268528868267D727B0800008A0628385D70E97F6A7008000073683C4B016854684368444B0085727C080000684687727D08000052727E080000284B014B024B0286727F080000684D894320000000000000000000000000000000009A9999999999B93F000000002AC22841728008000074728108000062682B682C685B684368444B008572820800006846877283080000527284080000284B014B024B02867285080000684D894320000000000000000000000000000000009A9999999999B93F000000002AC228417286080000747287080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172880800007D72890800002868267D728A0800008A06606F5C70E97F6A6D08000073683C4B006825684368444B0085728B080000684687728C08000052728D080000284B014B034B0386728E080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728F08000074729008000062682B682C687E4E7562756258070000005F64617368657372910800004E58040000005F75726C72920800004E58040000005F67696472930800004E683D6AB4050000580A0000005F6C696E6577696474687294080000473FF00000000000006A85020000470000000000000000580B0000005F646173686F666673657472950800004E58070000005F636C69706F6E72960800008858090000005F636F6E7461696E7372970800004E58130000005F6F726967696E616C5F65646765636F6C6F7272980800004E58090000005F6361707374796C657299080000580400000062757474729A080000580D0000005F706174685F65666665637473729B0800005D729C080000580E0000005F72656D6F76655F6D6574686F64729D0800004E58130000005F636F6D62696E65645F7472616E73666F726D729E0800006A880200002981729F0800007D72A00800002868267D72A1080000683C4B01682B682C687E4E756258040000005F6F696472A20800004B00580A0000005F6A6F696E7374796C6572A308000058050000006D6974657272A4080000580E0000007374616C655F63616C6C6261636B72A50800004E580A0000005F65646765636F6C6F7272A6080000284700000000000000004700000000000000004700000000000000004700000000000000007472A708000058060000005F616C70686172A80800004E580B0000005F6167675F66696C74657272A90800004E58130000005F6F726967696E616C5F66616365636F6C6F7272AA080000684368444B008572AB08000068468772AC0800005272AD080000284B014B048572AE080000684D8943201F1F1F1F1F1FBF3FDEDDDDDDDDDDDD3F979696969696E63F000000000000F03F72AF0800007472B008000062580A0000005F66616365636F6C6F7272B108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472B208000058050000005F6178657372B3080000681D58090000005F616E696D6174656472B408000089580A0000005F6D6F7573656F76657272B508000089580B0000005F726173746572697A656472B60800004E75626A4E080000298172B70800007D72B80800002868034E6805896806680168074E68086A100700006809680A5D72B90800005D72BA0800006A53080000684D4308000000000000000072BB0800008672BC0800005272BD080000618672BE0800008172BF0800006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672C00800006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72C10800006A650800006A660800006A67080000473FB999999999999A6A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172C20800007D72C308000028682B682C682D4B02682E4B0268267D72C408000068306831298172C50800007D72C60800002868267D72C70800008A0678395D70E97F6AC2080000736868683F298172C80800007D72C9080000286842684368444B008572CA08000068468772CB0800005272CC080000284B014B028572CD080000684D894310000000000000F07F000000000000F07F72CE0800007472CF0800006268528868267D72D00800008A0628F15D70E97F6AC508000073683C4B016854684368444B008572D108000068468772D20800005272D3080000284B014B024B028672D4080000684D8943209B9999999999B93F00000000000000009A9999999999C93F000000000000000072D50800007472D608000062682B682C685B684368444B008572D708000068468772D80800005272D9080000284B014B024B028672DA080000684D8943209B9999999999B93F00000000000000009A9999999999C93F000000000000000072DB0800007472DC080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172DD0800007D72DE0800002868267D72DF0800008A0678395D70E97F6AC208000073683C4B006825684368444B008572E008000068468772E10800005272E2080000284B014B034B038672E3080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E40800007472E508000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FB999999999999B6A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472E60800006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172E70800007D72E80800002868267D72E9080000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272EA0800006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472EB0800006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172EC0800007D72ED0800002868034E6805896806680168074E68086AD00700006809680A5D72EE0800005D72EF0800006A53080000684D4308000000000000000072F00800008672F10800005272F2080000618672F30800008172F40800006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672F50800006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72F60800006A650800006A660800006A67080000473FB999999999999C6A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172F70800007D72F808000028682B682C682D4B02682E4B0268267D72F908000068306831298172FA0800007D72FB0800002868267D72FC0800008A06E8395D70E97F6AF7080000736868683F298172FD0800007D72FE080000286842684368444B008572FF0800006846877200090000527201090000284B014B02857202090000684D894310000000000000F07F000000000000F07F72030900007472040900006268528868267D72050900008A06E8F95D70E97F6AFA08000073683C4B016854684368444B008572060900006846877207090000527208090000284B014B024B02867209090000684D894320999999999999C93F0000000000000000343333333333D33F0000000000000000720A09000074720B09000062682B682C685B684368444B0085720C090000684687720D09000052720E090000284B014B024B0286720F090000684D894320999999999999C93F0000000000000000343333333333D33F00000000000000007210090000747211090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172120900007D72130900002868267D72140900008A06E8395D70E97F6AF708000073683C4B006825684368444B008572150900006846877216090000527217090000284B014B034B03867218090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721909000074721A09000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FC99999999999996A950800004E6A96080000886A970800004E6A980800004E6A99080000580400000062757474721B0900006A9B0800006A9C0800006A9D0800004E6A9E0800006A880200002981721C0900007D721D0900002868267D721E090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D69746572721F0900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472200900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172210900007D72220900002868034E6805896806680168074E680868CC6809680A5D72230900005D72240900006A53080000684D430800000000000000007225090000867226090000527227090000618672280900008172290900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E86722A0900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D722B0900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C08000068282981722C0900007D722D09000028682B682C682D4B02682E4B0268267D722E090000683068312981722F0900007D72300900002868267D72310900008A0638FB5D70E97F6A2C090000736868683F298172320900007D7233090000286842684368444B008572340900006846877235090000527236090000284B014B02857237090000684D894310000000000000F07F000000000000F07F72380900007472390900006268528868267D723A0900008A06E8525E70E97F6A2F09000073683C4B016854684368444B0085723B090000684687723C09000052723D090000284B014B024B0286723E090000684D894320343333333333D33F00000000000000009A9999999999D93F0000000000000000723F09000074724009000062682B682C685B684368444B008572410900006846877242090000527243090000284B014B024B02867244090000684D894320343333333333D33F00000000000000009A9999999999D93F00000000000000007245090000747246090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172470900007D72480900002868267D72490900008A0638FB5D70E97F6A2C09000073683C4B006825684368444B0085724A090000684687724B09000052724C090000284B014B034B0386724D090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724E09000074724F09000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FD33333333333346A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472500900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172510900007D72520900002868267D7253090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272540900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472550900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172560900007D72570900002868034E6805896806680168074E68086AC80100006809680A5D72580900005D72590900006A53080000684D43080000000000000000725A09000086725B09000052725C0900006186725D09000081725E0900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E86725F0900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72600900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172610900007D726209000028682B682C682D4B02682E4B0268267D726309000068306831298172640900007D72650900002868267D72660900008A0600545E70E97F6A61090000736868683F298172670900007D7268090000286842684368444B00857269090000684687726A09000052726B090000284B014B0285726C090000684D894310000000000000F07F000000000000F07F726D09000074726E0900006268528868267D726F0900008A06A85B5E70E97F6A6409000073683C4B016854684368444B008572700900006846877271090000527272090000284B014B024B02867273090000684D8943209A9999999999D93F0000000000000000000000000000E03F0000000000000000727409000074727509000062682B682C685B684368444B008572760900006846877277090000527278090000284B014B024B02867279090000684D8943209A9999999999D93F0000000000000000000000000000E03F0000000000000000727A09000074727B090000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727C0900007D727D0900002868267D727E0900008A0600545E70E97F6A6109000073683C4B006825684368444B0085727F0900006846877280090000527281090000284B014B034B03867282090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728309000074728409000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FD999999999999A6A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472850900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172860900007D72870900002868267D7288090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272890900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074728A0900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E0800002981728B0900007D728C0900002868034E6805896806680168074E68086A570400006809680A5D728D0900005D728E0900006A53080000684D43080000000000000000728F090000867290090000527291090000618672920900008172930900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672940900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72950900006A650800006A660800006A67080000473FB99999999999A06A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172960900007D729709000028682B682C682D4B02682E4B0268267D729809000068306831298172990900007D729A0900002868267D729B0900008A0630166170E97F6A96090000736868683F2981729C0900007D729D090000286842684368444B0085729E090000684687729F0900005272A0090000284B014B028572A1090000684D894310000000000000F07F000000000000F07F72A20900007472A30900006268528868267D72A40900008A0680AE6070E97F6A9909000073683C4B016854684368444B008572A509000068468772A60900005272A7090000284B014B024B028672A8090000684D894320000000000000E03F0000000000000000343333333333E33F000000000000000072A90900007472AA09000062682B682C685B684368444B008572AB09000068468772AC0900005272AD090000284B014B024B028672AE090000684D894320000000000000E03F0000000000000000343333333333E33F000000000000000072AF0900007472B0090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B10900007D72B20900002868267D72B30900008A0630166170E97F6A9609000073683C4B006825684368444B008572B409000068468772B50900005272B6090000284B014B034B038672B7090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B80900007472B909000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE00000000000006A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472BA0900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172BB0900007D72BC0900002868267D72BD090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272BE0900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472BF0900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172C00900007D72C10900002868034E6805896806680168074E68086AD90300006809680A5D72C20900005D72C30900006A53080000684D4308000000000000000072C40900008672C50900005272C6090000618672C70900008172C80900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672C90900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72CA0900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172CB0900007D72CC09000028682B682C682D4B02682E4B0268267D72CD09000068306831298172CE0900007D72CF0900002868267D72D00900008A06D0A86070E97F6ACB090000736868683F298172D10900007D72D2090000286842684368444B008572D309000068468772D40900005272D5090000284B014B028572D6090000684D894310000000000000F07F000000000000F07F72D70900007472D80900006268528868267D72D90900008A0668CD5F70E97F6ACE09000073683C4B016854684368444B008572DA09000068468772DB0900005272DC090000284B014B024B028672DD090000684D894320343333333333E33F0000000000000000676666666666E63F000000000000000072DE0900007472DF09000062682B682C685B684368444B008572E009000068468772E10900005272E2090000284B014B024B028672E3090000684D894320343333333333E33F0000000000000000676666666666E63F000000000000000072E40900007472E5090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E60900007D72E70900002868267D72E80900008A06D0A86070E97F6ACB09000073683C4B006825684368444B008572E909000068468772EA0900005272EB090000284B014B034B038672EC090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72ED0900007472EE09000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE33333333333346A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472EF0900006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172F00900007D72F10900002868267D72F2090000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272F30900006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472F40900006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E080000298172F50900007D72F60900002868034E6805896806680168074E68086A140500006809680A5D72F70900005D72F80900006A53080000684D4308000000000000000072F90900008672FA0900005272FB090000618672FC0900008172FD0900006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672FE0900006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72FF0900006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172000A00007D72010A000028682B682C682D4B02682E4B0268267D72020A000068306831298172030A00007D72040A00002868267D72050A00008A0608226070E97F6A000A0000736868683F298172060A00007D72070A0000286842684368444B008572080A000068468772090A000052720A0A0000284B014B0285720B0A0000684D894310000000000000F07F000000000000F07F720C0A000074720D0A00006268528868267D720E0A00008A0680C05670E97F6A030A000073683C4B016854684368444B0085720F0A000068468772100A00005272110A0000284B014B024B028672120A0000684D894320666666666666E63F0000000000000000999999999999E93F000000000000000072130A00007472140A000062682B682C685B684368444B008572150A000068468772160A00005272170A0000284B014B024B028672180A0000684D894320666666666666E63F0000000000000000999999999999E93F000000000000000072190A000074721A0A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981721B0A00007D721C0A00002868267D721D0A00008A0608226070E97F6A000A000073683C4B006825684368444B0085721E0A0000684687721F0A00005272200A0000284B014B034B038672210A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72220A00007472230A000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE66666666666666A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472240A00006A9B0800006A9C0800006A9D0800004E6A9E0800006A88020000298172250A00007D72260A00002868267D72270A0000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272280A00006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472290A00006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E0800002981722A0A00007D722B0A00002868034E6805896806680168074E68086A4A0100006809680A5D722C0A00005D722D0A00006A53080000684D43080000000000000000722E0A000086722F0A00005272300A0000618672310A00008172320A00006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672330A00006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72340A00006A650800006A660800006A67080000473FB99999999999986A680800004700000000000000006A690800006A6A0800006A6B0800004E6A6C0800006828298172350A00007D72360A000028682B682C682D4B02682E4B0268267D72370A000068306831298172380A00007D72390A00002868267D723A0A00008A06C0CC5F70E97F6A350A0000736868683F2981723B0A00007D723C0A0000286842684368444B0085723D0A0000684687723E0A000052723F0A0000284B014B028572400A0000684D894310000000000000F07F000000000000F07F72410A00007472420A00006268528868267D72430A00008A0640C95670E97F6A380A000073683C4B016854684368444B008572440A000068468772450A00005272460A0000284B014B024B028672470A0000684D8943209A9999999999E93F0000000000000000CDCCCCCCCCCCEC3F000000000000000072480A00007472490A000062682B682C685B684368444B0085724A0A0000684687724B0A000052724C0A0000284B014B024B0286724D0A0000684D8943209A9999999999E93F0000000000000000CDCCCCCCCCCCEC3F0000000000000000724E0A000074724F0A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172500A00007D72510A00002868267D72520A00008A06C0CC5F70E97F6A350A000073683C4B006825684368444B008572530A000068468772540A00005272550A0000284B014B034B038672560A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72570A00007472580A000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FE999999999999A6A950800004E6A96080000886A970800004E6A980800004E6A9908000058040000006275747472590A00006A9B0800006A9C0800006A9D0800004E6A9E0800006A880200002981725A0A00007D725B0A00002868267D725C0A0000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D69746572725D0A00006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074725E0A00006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A4E0800002981725F0A00007D72600A00002868034E6805896806680168074E68086A0F0800006809680A5D72610A00005D72620A00006A53080000684D4308000000000000000072630A00008672640A00005272650A0000618672660A00008172670A00006A590800004E6A5A080000886A5B080000886A5C0800004700000000000000006A5D080000886A5E0800004E4E8672680A00006A60080000886A870200004700000000000000006A610800004E6A62080000886A630800007D72690A00006A650800006A660800006A67080000473FB99999999999986A6808000047412B3E00000000006A690800006A6A0800006A6B0800004E6A6C08000068282981726A0A00007D726B0A000028682B682C682D4B02682E4B0268267D726C0A0000683068312981726D0A00007D726E0A00002868267D726F0A00008A0690CA5670E97F6A6A0A0000736868683F298172700A00007D72710A0000286842684368444B008572720A000068468772730A00005272740A0000284B014B028572750A0000684D894310000000000000F07F000000000000F07F72760A00007472770A00006268528868267D72780A00008A0640325770E97F6A6D0A000073683C4B016854684368444B008572790A0000684687727A0A000052727B0A0000284B014B024B0286727C0A0000684D894320CCCCCCCCCCCCEC3F0000000000000000FFFFFFFFFFFFEF3F00000000003E2B41727D0A000074727E0A000062682B682C685B684368444B0085727F0A000068468772800A00005272810A0000284B014B024B028672820A0000684D894320CCCCCCCCCCCCEC3F0000000000000000FFFFFFFFFFFFEF3F00000000003E2B4172830A00007472840A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172850A00007D72860A00002868267D72870A00008A0690CA5670E97F6A6A0A000073683C4B006825684368444B008572880A000068468772890A000052728A0A0000284B014B034B0386728B0A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728C0A000074728D0A000062682B682C687E4E756275626A910800004E6A920800004E6A930800004E683D6AB40500006A94080000473FF00000000000006A85020000473FECCCCCCCCCCCCC6A950800004E6A96080000886A970800004E6A980800004E6A99080000580400000062757474728E0A00006A9B0800006A9C0800006A9D0800004E6A9E0800006A880200002981728F0A00007D72900A00002868267D72910A0000683C4B01682B682C687E4E75626AA20800004B006AA308000058050000006D6974657272920A00006AA50800004E6AA60800006AA70800006AA80800004E6AA90800004E6AAA0800006AAD0800006AB108000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472930A00006AB3080000681D6AB4080000896AB5080000896AB60800004E7562655805000000746578747372940A00005D72950A00006A5A080000886A5B08000089580D0000005F6175746F7363616C65596F6E72960A00008858050000005F7863696472970A00004B0158090000007472616E734178657372980A00006832580A0000005F6178697362656C6F7772990A000058040000006C696E65729A0A0000580D0000006D6F7573656F7665725F736574729B0A0000636275696C74696E730A7365740A729C0A00005D729D0A000085729E0A000052729F0A00006A620800008858070000005F616E63686F7272A00A000058010000004372A10A00005805000000796178697372A20A0000636D6174706C6F746C69622E617869730A59417869730A72A30A0000298172A40A00007D72A50A00002868034E5805000000756E69747372A60A00004E58140000006F66667365745F746578745F706F736974696F6E72A70A000058040000006C65667472A80A0000580C0000005F677269644F6E4D616A6F7272A90A0000896805896806680168074E580A0000006F66667365745465787472AA0A0000636D6174706C6F746C69622E746578740A546578740A72AB0A0000298172AC0A00007D72AD0A000028580B0000005F62626F785F706174636872AE0A00004E68034E58140000005F686F72697A6F6E74616C616C69676E6D656E7472AF0A00006AA80A00006A930800004E58050000005F7772617072B00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72B10A00005D72B20A00008672B30A00008172B40A0000580E0000005F726F746174696F6E5F6D6F646572B50A00004E58090000005F726F746174696F6E72B60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E58070000005F75736574657872B70A0000896AA20800004B006A630800007D72B80A00006AB40800008958090000005F72656E646572657272B90A00004E6AA80800004E580F0000005F666F6E7470726F7065727469657372BA0A0000636D6174706C6F746C69622E666F6E745F6D616E616765720A466F6E7450726F706572746965730A72BB0A0000298172BC0A00007D72BD0A00002858070000005F77656967687472BE0A00004D900158050000005F66696C6572BF0A00004E58080000005F76617269616E7472C00A000058060000006E6F726D616C72C10A000058050000005F73697A6572C20A000047402400000000000058070000005F66616D696C7972C30A00005D72C40A0000580A00000073616E732D736572696672C50A00006158060000005F736C616E7472C60A00006AC10A000058080000005F7374726574636872C70A00006AC10A000075626AA90800004E6A87020000473FE00000000000006A610800004E6A620800008868074E683D6A8302000058120000005F766572746963616C616C69676E6D656E7472C80A00005808000000626173656C696E6572C90A00006A9D0800004E6A69080000682C58060000005F636F6C6F7272CA0A000058010000006B72CB0A0000580C0000005F6C696E6573706163696E6772CC0A0000473FF3333333333333580F0000005F6D756C7469616C69676E6D656E7472CD0A00004E6AB30800004E6A920800004E6AA50800004E6AB50800008958050000005F7465787472CE0A0000682C6AB60800004E7562580D0000005F6175746F6C6162656C706F7372CF0A0000886809680A5D72D00A00005D72D10A00008672D20A00008172D30A000058050000006D696E6F7272D40A0000636D6174706C6F746C69622E617869730A5469636B65720A72D50A0000298172D60A00007D72D70A00002858070000006C6F6361746F7272D80A0000636D6174706C6F746C69622E7469636B65720A4E756C6C4C6F6361746F720A72D90A0000298172DA0A00007D72DB0A000058040000006178697372DC0A00006AA40A000073625809000000666F726D617474657272DD0A0000636D6174706C6F746C69622E7469636B65720A4E756C6C466F726D61747465720A72DE0A0000298172DF0A00007D72E00A00006ADC0A00006AA40A0000736275625810000000697344656661756C745F6D616A666D7472E10A0000886A5A080000886A5B080000895809000000636F6E76657274657272E20A00004E58120000005F6C6173744E756D4D696E6F725469636B7372E30A00004B016A590800004E580D0000005F736D6172745F626F756E647372E40A0000895810000000697344656661756C745F6D696E6C6F6372E50A0000886A610800004E6A620800008858060000005F7363616C6572E60A0000636D6174706C6F746C69622E7363616C650A4C696E6561725363616C650A72E70A0000298172E80A0000580A0000007069636B72616469757372E90A00004B0F6A69080000682C5810000000697344656661756C745F6D616A6C6F6372EA0A000088580E0000005F6D696E6F725F7469636B5F6B7772EB0A00007D72EC0A00002858070000007469636B314F6E72ED0A00008858070000007469636B324F6E72EE0A0000897558050000006D616A6F7272EF0A00006AD50A0000298172F00A00007D72F10A0000286AD80A0000636D6174706C6F746C69622E7469636B65720A4175746F4C6F6361746F720A72F20A0000298172F30A00007D72F40A00002858080000005F696E746567657272F50A00008958060000005F737465707372F60A0000684368444B008572F70A000068468772F80A00005272F90A0000284B014B058572FA0A0000684D894328000000000000F03F000000000000004000000000000004400000000000001440000000000000244072FB0A00007472FC0A000062580A0000005F73796D6D657472696372FD0A00008958060000005F6E62696E7372FE0A000058040000006175746F72FF0A00006ADC0A00006AA40A000058060000005F7072756E6572000B00004E580F0000005F657874656E6465645F737465707372010B0000684368444B008572020B000068468772030B00005272040B0000284B014B0A8572050B0000684D8943509A9999999999B93F9A9999999999C93F000000000000D03F000000000000E03F000000000000F03F0000000000000040000000000000044000000000000014400000000000002440000000000000344072060B00007472070B000062580C0000005F6D696E5F6E5F7469636B7372080B00004B0275626ADD0A0000636D6174706C6F746C69622E7469636B65720A5363616C6172466F726D61747465720A72090B00002981720A0B00007D720B0B00002858110000005F6F66667365745F7468726573686F6C64720C0B00004B04580C0000005F7573654D61746854657874720D0B000089580A0000005F7573654F6666736574720E0B000088580A0000005F7573654C6F63616C65720F0B000089580B0000005F736369656E746966696372100B00008858100000006F726465724F664D61676E697475646572110B00004B0058060000006F666673657472120B00004B006AB70A0000896ADC0A00006AA40A0000580C0000005F706F7765726C696D69747372130B00005D72140B0000284AF9FFFFFF4B07655806000000666F726D617472150B0000682C7562756258120000005F6C6173744E756D4D616A6F725469636B7372160B00004B01580F000000697344656661756C745F6C6162656C72170B0000896A920800004E580C0000005F677269644F6E4D696E6F7272180B0000896A930800004E683D4E580E0000005F6D616A6F725F7469636B5F6B7772190B00007D721A0B0000285806000000677269644F6E721B0B0000896AED0A0000886AEE0A0000897568086A070200005810000000697344656661756C745F6D696E666D74721C0B0000886A96080000886A9B0800006A9C0800006A9D0800004E580900000063616C6C6261636B73721D0B0000636D6174706C6F746C69622E63626F6F6B0A43616C6C6261636B52656769737472790A721E0B00002981721F0B00007D72200B0000626A970800004E6AA20800004B006A630800007D72210B000058050000006C6162656C72220B00006AAB0A0000298172230B00007D72240B0000286AAE0A00004E68034E6AAF0A0000580600000063656E74657272250B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72260B00005D72270B00008672280B00008172290B00006AB50A00005806000000616E63686F72722A0B00006AB60A00005808000000766572746963616C722B0B00006A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D722C0B00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981722D0B00007D722E0B0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D722F0B00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A87020000473FE00000000000006A610800004E6A620800008868074E683D6A890600006AC80A00005806000000626F74746F6D72300B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A00005806000000436F756E747372310B00006AB60800004E75626AA80800004E6AA90800004E580A0000006D616A6F725469636B7372320B00005D72330B000028636D6174706C6F746C69622E617869730A595469636B0A72340B0000298172350B00007D72360B00002868034E6805896806680168074E68086ADA0200006809680A5D72370B00005D72380B00008672390B000081723A0B000058090000007469636B316C696E65723B0B0000636D6174706C6F746C69622E6C696E65730A4C696E6532440A723C0B00002981723D0B00007D723E0B00002868034E6805896806680168074E58090000005F696E76616C696478723F0B00008868084E6809680A5D72400B00005D72410B00008672420B00008172430B000058060000005F786F72696772440B00004B008572450B0000580E0000005F736F6C69646361707374796C6572460B0000580A00000070726F6A656374696E6772470B00006AE90A00004B056A5D080000886A5A080000886A5B0800008858070000005F6D61726B657272480B0000636D6174706C6F746C69622E6D61726B6572730A4D61726B65725374796C650A72490B00002981724A0B00007D724B0B000028580A0000005F66696C6C7374796C65724C0B0000580400000066756C6C724D0B000058070000005F66696C6C6564724E0B0000896AA30800005805000000726F756E64724F0B0000580E0000005F616C745F7472616E73666F726D72500B00004E6A480B00004B00580F0000005F736E61705F7468726573686F6C6472510B0000473FF000000000000058090000005F616C745F7061746872520B00004E683D6880298172530B00007D72540B00002868267D72550B0000683C4B026825684368444B008572560B000068468772570B00005272580B0000284B014B034B038672590B0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725A0B000074725B0B000062682B682C687E4E756258050000005F70617468725C0B0000636D6174706C6F746C69622E706174680A506174680A725D0B00002981725E0B00007D725F0B000028580E0000005F6861735F6E6F6E66696E69746572600B00008958130000005F73696D706C6966795F7468726573686F6C6472610B0000473FBC71C71C71C71C58100000005F73686F756C645F73696D706C69667972620B00008958090000005F726561646F6E6C7972630B00008958090000005F766572746963657372640B0000684368444B008572650B000068468772660B00005272670B0000284B014B024B028672680B0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072690B000074726A0B00006258060000005F636F646573726B0B00004E58140000005F696E746572706F6C6174696F6E5F7374657073726C0B00004B0175626A99080000580400000062757474726D0B000075626A590800004E58030000005F7879726E0B00004E580E0000005F75735F646173684F6666736574726F0B00004E580B0000005F646173684F666673657472700B00004E6A610800004E6A620800008858060000007A6F7264657272710B0000474000147AE147AE146A630800007D72720B00006A6508000058040000004E6F6E6572730B0000580B0000005F6C696E657374796C657372740B00004E58100000005F6D61726B657266616365636F6C6F7272750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A0000580F0000005F736F6C69646A6F696E7374796C6572760B00005805000000726F756E6472770B0000580A0000005F647261777374796C6572780B0000580700000064656661756C7472790B000058100000005F6D61726B6572656467657769647468727A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E58130000005F6D61726B657266616365636F6C6F72616C74727B0B000058040000006E6F6E65727C0B0000580A000000696E645F6F6666736574727D0B00004B006A960800008858090000005F696E76616C696479727E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E580E000000766572746963616C4F6666736574727F0B00004E6A970800004E58080000005F6461736853657172800B00004E58100000005F6D61726B657265646765636F6C6F7272810B00006AFF0A00006AA20800004B00580D0000005F646173686361707374796C6572820B000058040000006275747472830B00006AA50800004E6AA80800004E6AA90800004E58060000005F796F72696772840B00004B008572850B0000580E0000005F646173686A6F696E7374796C6572860B00005805000000726F756E6472870B00006AB50800008958090000005F737562736C69636572880B000089580A0000005F6D61726B657665727972890B00004E580B0000005F6D61726B657273697A65728A0B000047400C00000000000058110000005F7472616E73666F726D65645F70617468728B0B00004E6AB30800004E6AB40800008958090000005F785F66696C6C6564728C0B00004E580B0000005F75735F64617368536571728D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B0800008958080000006C6162656C314F6E728E0B0000886A590800004E6AED0A00008858090000005F626173655F706164728F0B000047400C00000000000058060000006C6162656C3272900B00006AAB0A0000298172910B00007D72920B0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D72930B00005D72940B00008672950B00008172960B00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72970B00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172980B00007D72990B0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D729A0B00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A360600006AC80A0000580F00000063656E7465725F626173656C696E65729B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A00002981729C0B00007D729D0B0000286AAE0A00004E68034E6AAF0A000058050000007269676874729E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D729F0B00005D72A00B00008672A10B00008172A20B00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72A30B00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172A40B00007D72A50B0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72A60B00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A930500006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A620800008858080000005F7469636B64697272A70B000058030000006F757472A80B00006A67080000473FE999999999999A6A69080000682C6ACA0A00006ACB0A000058080000006C6162656C324F6E72A90B000089580A0000005F6C6162656C73697A6572AA0B000058060000006D656469756D72AB0B00006A920800004E6A930800004E683D4E580C0000005F7469636B6D61726B65727372AC0B00004B004B018672AD0B00006AEE0A00008958060000006C6162656C3172AE0B00006A9C0B00006A960800008858050000005F6E616D6572AF0B00005805000000797469636B72B00B00006A9B0800006A9C0800006A9D0800004E6A970800004E6A1B0B0000896AA20800004B006A630800007D72B10B000058040000005F6C6F6372B20B00004B006AA80800004E6AA90800004E6AA50800004E58090000007469636B326C696E6572B30B00006A3C0B0000298172B40B00007D72B50B00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72B60B00005D72B70B00008672B80B00008172B90B00006A440B00004B018572BA0B00006A460B0000580A00000070726F6A656374696E6772BB0B00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172BC0B00007D72BD0B0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B016A510B0000473FF00000000000006A520B00004E683D6880298172BE0B00007D72BF0B00002868267D72C00B0000683C4B026825684368444B008572C10B000068468772C20B00005272C30B0000284B014B034B038672C40B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50B00007472C60B000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B0000474000147AE147AE146A630800007D72C70B00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472C80B00006A780B00006A790B00006A7A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472C90B00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572CA0B00006A860B00005805000000726F756E6472CB0B00006AB5080000896A880B0000896A890B00004E6A8A0B000047400C0000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E7562580B0000005F6C6162656C636F6C6F7272CC0B00006ACB0A000058070000005F7A6F7264657272CD0B0000474000147AE147AE146AC20A000047400C0000000000005808000000677269646C696E6572CE0B00006A3C0B0000298172CF0B00007D72D00B00002868034E6805896806680168074E6A3F0B00008968086AD50400006809680A5D72D10B00005D72D20B00008672D30B00008172D40B00006A440B00004B004B018672D50B00006A460B0000580A00000070726F6A656374696E6772D60B00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172D70B00007D72D80B0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00006A730B00006A510B00004E6A520B00004E683D6A88020000298172D90B00007D72DA0B00002868267D72DB0B0000683C4B01682B682C687E4E75626A5C0B00006A5D0B0000298172DC0B00007D72DD0B0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B0000684368444B008572DE0B000068468772DF0B00005272E00B0000284B014B004B028672E10B0000684D89430072E20B00007472E30B0000626A6B0B00004E6A6C0B00004B0175626A990800006A6D0B000075626A590800004E6A6E0B0000684368444B008572E40B000068468772E50B00005272E60B0000284B014B024B028672E70B0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072E80B00007472E90B0000626A6F0B00004E6A700B00004E6A610800004E6A62080000886A630800007D72EA0B00006A6508000058010000002D72EB0B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A000058070000002362306230623072EC0B00006A760B00005805000000726F756E6472ED0B00006A780B00006A790B00006A7A0B0000473FF00000000000006A920800004E6A930800004E683D6A900500006A94080000473FE999999999999A6A85020000684368444B008572EE0B000068468772EF0B00005272F00B0000284B014B028572F10B0000684D8943100000000000000000000000000000F03F72F20B00007472F30B0000626A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000896A9B0800006A9C0800006A9D0800004E6A87020000684368444B008572F40B000068468772F50B00005272F60B0000284B014B028572F70B0000684D8943100000000000000000000000000000000072F80B00007472F90B0000626A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472FA0B00006AA50800004E6AA8080000473FF00000000000006AA90800004E6A840B00004B004B008672FB0B00006A860B00005805000000726F756E6472FC0B00006AB5080000896A880B0000896A890B00004E6A8A0B00004700000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00006A5D0B0000298172FD0B00007D72FE0B0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B00006AE60B00006A6B0B00004E6A6C0B00004BB475626AB60800004E756258040000005F70616472FF0B000047401C0000000000006AB3080000681D6AB4080000896AB5080000896AB60800004E75626A340B0000298172000C00007D72010C00002868034E6805896806680168074E68086A4F0700006809680A5D72020C00005D72030C00008672040C00008172050C00006A3B0B00006A3C0B0000298172060C00007D72070C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72080C00005D72090C000086720A0C000081720B0C00006A440B00006A450B00006A460B0000580A00000070726F6A656374696E67720C0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B00002981720D0C00007D720E0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B006A510B0000473FF00000000000006A520B00004E683D68802981720F0C00007D72100C00002868267D72110C0000683C4B026825684368444B008572120C000068468772130C00005272140C0000284B014B034B038672150C0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72160C00007472170C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B0000474000147AE147AE146A630800007D72180C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472190C00006A780B00006A790B00006A7A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B0000580400000062757474721A0C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B0085721B0C00006A860B00005805000000726F756E64721C0C00006AB5080000896A880B0000896A890B00004E6A8A0B000047400C0000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B080000896A8E0B0000886A590800004E6AED0A0000886A8F0B000047400C0000000000006A900B00006AAB0A00002981721D0C00007D721E0C0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D721F0C00005D72200C00008672210C00008172220C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72230C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172240C00007D72250C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72260C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6AA00500006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A0000298172270C00007D72280C0000286AAE0A00004E68034E6AAF0A00006A9E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72290C00005D722A0C000086722B0C000081722C0C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D722D0C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981722E0C00007D722F0C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72300C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6AA80500006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A62080000886AA70B00006AA80B00006A67080000473FE999999999999A6A69080000682C6ACA0A00006ACB0A00006AA90B0000896AAA0B00006AAB0B00006A920800004E6A930800004E683D4E6AAC0B00004B004B018672310C00006AEE0A0000896AAE0B00006A270C00006A96080000886AAF0B00005805000000797469636B72320C00006A9B0800006A9C0800006A9D0800004E6A970800004E6A1B0B0000896AA20800004B006A630800007D72330C00006AB20B00004B006AA80800004E6AA90800004E6AA50800004E6AB30B00006A3C0B0000298172340C00007D72350C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72360C00005D72370C00008672380C00008172390C00006A440B00006ABA0B00006A460B0000580A00000070726F6A656374696E67723A0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B00002981723B0C00007D723C0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B016A510B0000473FF00000000000006A520B00004E683D68802981723D0C00007D723E0C00002868267D723F0C0000683C4B026825684368444B008572400C000068468772410C00005272420C0000284B014B034B038672430C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72440C00007472450C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B0000474000147AE147AE146A630800007D72460C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472470C00006A780B00006A790B00006A7A0B0000473FE999999999999A6A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472480C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572490C00006A860B00005805000000726F756E64724A0C00006AB5080000896A880B0000896A890B00004E6A8A0B000047400C0000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626ACC0B00006ACB0A00006ACD0B0000474000147AE147AE146AC20A000047400C0000000000006ACE0B00006A3C0B00002981724B0C00007D724C0C00002868034E6805896806680168074E6A3F0B00008968086AD10600006809680A5D724D0C00005D724E0C000086724F0C00008172500C00006A440B00006AD50B00006A460B0000580A00000070726F6A656374696E6772510C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172520C00007D72530C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00006A730B00006A510B00004E6A520B00004E683D6A88020000298172540C00007D72550C00002868267D72560C0000683C4B01682B682C687E4E75626A5C0B00006A5D0B0000298172570C00007D72580C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B0000684368444B008572590C0000684687725A0C000052725B0C0000284B014B004B0286725C0C0000684D896AE20B000074725D0C0000626A6B0B00004E6A6C0B00004B0175626A990800006A6D0B000075626A590800004E6A6E0B0000684368444B0085725E0C0000684687725F0C00005272600C0000284B014B024B028672610C0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072620C00007472630C0000626A6F0B00004E6A700B00004E6A610800004E6A62080000886A630800007D72640C00006A650800006AEB0B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006AEC0B00006A760B00005805000000726F756E6472650C00006A780B00006A790B00006A7A0B0000473FF00000000000006A920800004E6A930800004E683D6A900500006A94080000473FE999999999999A6A85020000684368444B008572660C000068468772670C00005272680C0000284B014B028572690C0000684D8943100000000000000000000000000000F03F726A0C000074726B0C0000626A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000896A9B0800006A9C0800006A9D0800004E6A87020000684368444B0085726C0C0000684687726D0C000052726E0C0000284B014B0285726F0C0000684D8943100000000000000000000000000000000072700C00007472710C0000626A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472720C00006AA50800004E6AA8080000473FF00000000000006AA90800004E6A840B00006AFB0B00006A860B00005805000000726F756E6472730C00006AB5080000896A880B0000896A890B00004E6A8A0B00004700000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00006A5D0B0000298172740C00007D72750C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B00006A600C00006A6B0B00004E6A6C0B00004BB475626AB60800004E75626AFF0B000047401C0000000000006AB3080000681D6AB4080000896AB5080000896AB60800004E7562656AA50800004E58080000006C6162656C70616472760C0000474010000000000000580A0000006D696E6F725469636B7372770C00005D72780C0000286A340B0000298172790C00007D727A0C00002868034E6805896806680168074E68086A5B0300006809680A5D727B0C00005D727C0C000086727D0C000081727E0C00006A3B0B00006A3C0B00002981727F0C00007D72800C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72810C00005D72820C00008672830C00008172840C00006A440B00006A450B00006A460B0000580A00000070726F6A656374696E6772850C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172860C00007D72870C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B006A510B0000473FF00000000000006A520B00004E683D6880298172880C00007D72890C00002868267D728A0C0000683C4B026825684368444B0085728B0C0000684687728C0C000052728D0C0000284B014B034B0386728E0C0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728F0C00007472900C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B00004B026A630800007D72910C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472920C00006A780B00006A790B00006A7A0B0000473FE33333333333336A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472930C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572940C00006A860B00005805000000726F756E6472950C00006AB5080000896A880B0000896A890B00004E6A8A0B00004740000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B080000896A8E0B0000886A590800004E6AED0A0000886A8F0B000047400B3333333333336A900B00006AAB0A0000298172960C00007D72970C0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D72980C00005D72990C000086729A0C000081729B0C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D729C0C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981729D0C00007D729E0C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D729F0C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A770600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A0000298172A00C00007D72A10C0000286AAE0A00004E68034E6AAF0A00006A9E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72A20C00005D72A30C00008672A40C00008172A50C00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72A60C00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172A70C00007D72A80C0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72A90C00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A3D0600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A62080000886AA70B00006AA80B00006A67080000473FE33333333333336A69080000682C6ACA0A00006ACB0A00006AA90B0000896AAA0B00006AAB0B00006A920800004E6A930800004E683D4E6AAC0B00004B004B018672AA0C00006AEE0A0000896AAE0B00006AA00C00006A96080000886AAF0B00005805000000797469636B72AB0C00006A9B0800006A9C0800006A9D0800004E6A970800004E6A1B0B0000896AA20800004B006A630800007D72AC0C00006AB20B00004B006AA80800004E6AA90800004E6AA50800004E6AB30B00006A3C0B0000298172AD0C00007D72AE0C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72AF0C00005D72B00C00008672B10C00008172B20C00006A440B00006ABA0B00006A460B0000580A00000070726F6A656374696E6772B30C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172B40C00007D72B50C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B016A510B0000473FF00000000000006A520B00004E683D6880298172B60C00007D72B70C00002868267D72B80C0000683C4B026825684368444B008572B90C000068468772BA0C00005272BB0C0000284B014B034B038672BC0C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BD0C00007472BE0C000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B00004B026A630800007D72BF0C00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472C00C00006A780B00006A790B00006A7A0B0000473FE33333333333336A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472C10C00006AA50800004E6AA80800004E6AA90800004E6A840B00004B008572C20C00006A860B00005805000000726F756E6472C30C00006AB5080000896A880B0000896A890B00004E6A8A0B00004740000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626ACC0B00006ACB0A00006ACD0B00004B026AC20A00004740000000000000006ACE0B00006A3C0B0000298172C40C00007D72C50C00002868034E6805896806680168074E6A3F0B00008968086A180400006809680A5D72C60C00005D72C70C00008672C80C00008172C90C00006A440B00006AD50B00006A460B0000580A00000070726F6A656374696E6772CA0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172CB0C00007D72CC0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00006A730B00006A510B00004E6A520B00004E683D6A88020000298172CD0C00007D72CE0C00002868267D72CF0C0000683C4B01682B682C687E4E75626A5C0B00006A5D0B0000298172D00C00007D72D10C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B0000684368444B008572D20C000068468772D30C00005272D40C0000284B014B004B028672D50C0000684D896AE20B00007472D60C0000626A6B0B00004E6A6C0B00004B0175626A990800006A6D0B000075626A590800004E6A6E0B0000684368444B008572D70C000068468772D80C00005272D90C0000284B014B024B028672DA0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000000072DB0C00007472DC0C0000626A6F0B00004E6A700B00004E6A610800004E6A62080000886A630800007D72DD0C00006A650800006AEB0B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006AEC0B00006A760B00005805000000726F756E6472DE0C00006A780B00006A790B00006A7A0B0000473FF00000000000006A920800004E6A930800004E683D6A900500006A94080000473FE999999999999A6A85020000684368444B008572DF0C000068468772E00C00005272E10C0000284B014B028572E20C0000684D8943100000000000000000000000000000F03F72E30C00007472E40C0000626A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000896A9B0800006A9C0800006A9D0800004E6A87020000684368444B008572E50C000068468772E60C00005272E70C0000284B014B028572E80C0000684D8943100000000000000000000000000000000072E90C00007472EA0C0000626A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472EB0C00006AA50800004E6AA8080000473FF00000000000006AA90800004E6A840B00006AFB0B00006A860B00005805000000726F756E6472EC0C00006AB5080000896A880B0000896A890B00004E6A8A0B00004700000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00006A5D0B0000298172ED0C00007D72EE0C0000286A600B0000896A610B0000473FBC71C71C71C71C6A620B0000896A630B0000896A640B00006AD90C00006A6B0B00004E6A6C0B00004BB475626AB60800004E75626AFF0B000047401599999999999A6AB3080000681D6AB4080000896AB5080000896AB60800004E75626A340B0000298172EF0C00007D72F00C00002868034E6805896806680168074E68086A190300006809680A5D72F10C00005D72F20C00008672F30C00008172F40C00006A3B0B00006A3C0B0000298172F50C00007D72F60C00002868034E6805896806680168074E6A3F0B00008868084E6809680A5D72F70C00005D72F80C00008672F90C00008172FA0C00006A440B00006A450B00006A460B0000580A00000070726F6A656374696E6772FB0C00006AE90A00004B056A5D080000886A5A080000886A5B080000886A480B00006A490B0000298172FC0C00007D72FD0C0000286A4C0B00006A4D0B00006A4E0B0000896AA30800006A4F0B00006A500B00004E6A480B00004B006A510B0000473FF00000000000006A520B00004E683D6880298172FE0C00007D72FF0C00002868267D72000D0000683C4B026825684368444B008572010D000068468772020D00005272030D0000284B014B034B038672040D0000684D894348000000000000F0BF000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72050D00007472060D000062682B682C687E4E75626A5C0B00006A5E0B00006A990800006A6D0B000075626A590800004E6A6E0B00004E6A6F0B00004E6A700B00004E6A610800004E6A62080000886A710B00004B026A630800007D72070D00006A650800006A730B00006A740B00004E6A750B00006AFF0A00006A69080000682C6ACA0A00006ACB0A00006A760B00005805000000726F756E6472080D00006A780B00006A790B00006A7A0B0000473FE33333333333336A920800004E6A930800004E683D6A900500006A94080000473FF80000000000006A850200004E6A7B0B00006A7C0B00006A7D0B00004B006A96080000886A7E0B0000886A9B0800006A9C0800006A9D0800004E6A870200004E6A7F0B00004E6A970800004E6A800B00004E6A810B00006AFF0A00006AA20800004B006A820B000058040000006275747472090D00006AA50800004E6AA80800004E6AA90800004E6A840B00004B0085720A0D00006A860B00005805000000726F756E64720B0D00006AB5080000896A880B0000896A890B00004E6A8A0B00004740000000000000006A8B0B00004E6AB30800004E6AB4080000896A8C0B00004E6A8D0B00004E6A5C0B00004E6AB60800004E75626A5A080000886A5B080000896A8E0B0000886A590800004E6AED0A0000886A8F0B000047400B3333333333336A900B00006AAB0A00002981720C0D00007D720D0D0000286AAE0A00004E68034E6AAF0A00006AA80A00006A930800004E6AB00A0000896805896A850200004B01680668016A960800008868084E6809680A5D720E0D00005D720F0D00008672100D00008172110D00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D72120D00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A0000298172130D00007D72140D0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D72150D00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A2F0600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A220B00006AAB0A0000298172160D00007D72170D0000286AAE0A00004E68034E6AAF0A00006A9E0B00006A930800004E6AB00A0000896805896A850200004B00680668016A960800008868084E6809680A5D72180D00005D72190D000086721A0D000081721B0D00006AB50A00004E6AB60A00004E6A9B0800006A9C0800006A5A080000886A5B080000886A970800004E6A590800004E6AB70A0000896AA20800004B006A630800007D721C0D00006AB4080000896AB90A00004E6AA80800004E6ABA0A00006ABB0A00002981721D0D00007D721E0D0000286ABE0A00004D90016ABF0A00004E6AC00A00006AC10A00006AC20A00004740240000000000006AC30A00005D721F0D00006AC50A0000616AC60A00006AC10A00006AC70A00006AC10A000075626AA90800004E6A870200004B006A610800004E6A620800008868074E683D6A7E0600006AC80A00006A9B0B00006A9D0800004E6A69080000682C6ACA0A00006ACB0A00006ACC0A0000473FF33333333333336ACD0A00004E6AB30800004E6A920800004E6AA50800004E6AB5080000896ACE0A0000682C6AB60800004E75626A610800004E6A62080000886AA70B00006AA80B00006A67080000473FE33333333333336A69080000682C6ACA0A00006ACB0A00006AA90B0000896AAA0B00006AAB
0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B02636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A06C02C5B70E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A06C02C5B70E97F68298A0660D15470E97F6828298171357D713628682B682C682D4B02682E4B0268267D71378A06D0D15470E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7138298171397D713A2868267D713B58080000005F696E76616C6964713C4B01580A0000005F7472616E73666F726D713D6835682B682C58050000005F62626F78713E636D6174706C6F746C69622E7472616E73666F726D730A42626F780A713F298171407D71412858070000005F6D696E706F737142636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A7143636E756D70790A6E6461727261790A71444B008571454301627146877147527148284B014B02857149636E756D70790A64747970650A714A58020000006638714B4B004B0187714C52714D284B0358010000003C714E4E4E4E4AFFFFFFFF4AFFFFFFFF4B0074714F62894310000000000000F07F000000000000F07F71507471516258070000005F69676E6F726571528868267D71538A06D0D15470E97F683973683C4B01580C0000005F706F696E74735F6F7269677154684368444B008571556846877156527157284B014B024B02867158684D89432000000000000000000000000000000000000000000000F03F000000000000F03F715974715A62682B682C58070000005F706F696E7473715B684368444B0085715C684687715D52715E284B014B024B0286715F684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7160747161627562685B4E75627368306828298171627D716328682B682C682D4B02682E4B0268267D71648A0660D15470E97F68357368306831298171657D71662868267D71678A06F0D05470E97F68627358070000005F626F786F75747168683F298171697D716A286842684368444B0085716B684687716C52716D284B014B0285716E684D894310000000000000F07F000000000000F07F716F7471706268528868267D71718A0680D05470E97F686573683C4B016854684368444B008571726846877173527174284B014B024B02867175684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717674717762682B682C685B684368444B00857178684687717952717A284B014B024B0286717B684D89432000000000000000000000000000000000000000000000F03F000000000000F03F717C74717D627562683C4B0168254E682B682C58090000005F696E766572746564717E4E7562683C4B0158020000005F62717F636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A7180298171817D71822868267D71838A06F0D05470E97F686273683C4B026825684368444B008571846846877185527186284B014B034B03867187684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F718874718962682B682C687E4E75627562683C4B01687F683275628A0658535570E97F68282981718A7D718B28682B682C682D4B02682E4B0268267D718C8A06C8535570E97F68382981718D7D718E2868267D718F683C4B01683D688A682B682C683E683F298171907D7191286842684368444B008571926846877193527194284B014B02857195684D894310000000000000F07F000000000000F07F71967471976268528868267D71988A06C8535570E97F688D73683C4B016854684368444B00857199684687719A52719B284B014B024B0286719C684D89432000000000000000000000000000000000000000000000F03F000000000000F03F719D74719E62682B682C685B684368444B0085719F68468771A05271A1284B014B024B028671A2684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71A37471A4627562685B4E75627368306828298171A57D71A628682B682C682D4B02682E4B0268267D71A78A0658535570E97F688A7368306831298171A87D71A92868267D71AA8A06E8525570E97F68A5736868683F298171AB7D71AC286842684368444B008571AD68468771AE5271AF284B014B028571B0684D894310000000000000F07F000000000000F07F71B17471B26268528868267D71B38A0678525570E97F68A873683C4B016854684368444B008571B468468771B55271B6284B014B024B028671B7684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71B87471B962682B682C685B684368444B008571BA68468771BB5271BC284B014B024B028671BD684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71BE7471BF627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171C07D71C12868267D71C28A06E8525570E97F68A573683C4B026825684368444B008571C368468771C45271C5284B014B034B038671C6684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71C77471C862682B682C687E4E75627562683C4B01687F683275628A0648D75470E97F6828298171C97D71CA28682B682C682D4B02682E4B0268267D71CB8A06B8D75470E97F6838298171CC7D71CD2868267D71CE683C4B01683D68C9682B682C683E683F298171CF7D71D0286842684368444B008571D168468771D25271D3284B014B028571D4684D894310000000000000F07F000000000000F07F71D57471D66268528868267D71D78A06B8D75470E97F68CC73683C4B016854684368444B008571D868468771D95271DA284B014B024B028671DB684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71DC7471DD62682B682C685B684368444B008571DE68468771DF5271E0284B014B024B028671E1684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71E27471E3627562685B4E75627368306828298171E47D71E528682B682C682D4B02682E4B0268267D71E68A0648D75470E97F68C97368306831298171E77D71E82868267D71E98A06D8D65470E97F68E4736868683F298171EA7D71EB286842684368444B008571EC68468771ED5271EE284B014B028571EF684D894310000000000000F07F000000000000F07F71F07471F16268528868267D71F28A0668D65470E97F68E773683C4B016854684368444B008571F368468771F45271F5284B014B024B028671F6684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71F77471F862682B682C685B684368444B008571F968468771FA5271FB284B014B024B028671FC684D89432000000000000000000000000000000000000000000000F03F000000000000F03F71FD7471FE627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298171FF7D72000100002868267D72010100008A06D8D65470E97F68E473683C4B026825684368444B008572020100006846877203010000527204010000284B014B034B03867205010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720601000074720701000062682B682C687E4E75627562683C4B01687F683275628A06387B5270E97F6828298172080100007D720901000028682B682C682D4B02682E4B0268267D720A0100008A06A87B5270E97F68382981720B0100007D720C0100002868267D720D010000683C4B01683D6A08010000682B682C683E683F2981720E0100007D720F010000286842684368444B008572100100006846877211010000527212010000284B014B02857213010000684D894310000000000000F07F000000000000F07F72140100007472150100006268528868267D72160100008A06A87B5270E97F6A0B01000073683C4B016854684368444B008572170100006846877218010000527219010000284B014B024B0286721A010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721B01000074721C01000062682B682C685B684368444B0085721D010000684687721E01000052721F010000284B014B024B02867220010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7221010000747222010000627562685B4E75627368306828298172230100007D722401000028682B682C682D4B02682E4B0268267D72250100008A06387B5270E97F6A080100007368306831298172260100007D72270100002868267D72280100008A06C87A5270E97F6A23010000736868683F298172290100007D722A010000286842684368444B0085722B010000684687722C01000052722D010000284B014B0285722E010000684D894310000000000000F07F000000000000F07F722F0100007472300100006268528868267D72310100008A06587A5270E97F6A2601000073683C4B016854684368444B008572320100006846877233010000527234010000284B014B024B02867235010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723601000074723701000062682B682C685B684368444B00857238010000684687723901000052723A010000284B014B024B0286723B010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723C01000074723D010000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723E0100007D723F0100002868267D72400100008A06C87A5270E97F6A2301000073683C4B026825684368444B008572410100006846877242010000527243010000284B014B034B03867244010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724501000074724601000062682B682C687E4E75627562683C4B01687F683275628A06A02D5B70E97F6828298172470100007D724801000028682B682C682D4B02682E4B0268267D724901000068306832683C4B01687F682375628A06C83A5370E97F68282981724A0100007D724B01000028682B682C682D4B02682E4B0268267D724C0100008A06383B5370E97F68382981724D0100007D724E0100002868267D724F010000683C4B01683D6A4A010000682B682C683E683F298172500100007D7251010000286842684368444B008572520100006846877253010000527254010000284B014B02857255010000684D894310000000000000F07F000000000000F07F72560100007472570100006268528868267D72580100008A06383B5370E97F6A4D01000073683C4B016854684368444B00857259010000684687725A01000052725B010000284B014B024B0286725C010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725D01000074725E01000062682B682C685B684368444B0085725F0100006846877260010000527261010000284B014B024B02867262010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7263010000747264010000627562685B4E75627368306828298172650100007D726601000028682B682C682D4B02682E4B0268267D72670100008A06C83A5370E97F6A4A0100007368306831298172680100007D72690100002868267D726A0100008A06583A5370E97F6A65010000736868683F2981726B0100007D726C010000286842684368444B0085726D010000684687726E01000052726F010000284B014B02857270010000684D894310000000000000F07F000000000000F07F72710100007472720100006268528868267D72730100008A06E8395370E97F6A6801000073683C4B016854684368444B008572740100006846877275010000527276010000284B014B024B02867277010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727801000074727901000062682B682C685B684368444B0085727A010000684687727B01000052727C010000284B014B024B0286727D010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727E01000074727F010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172800100007D72810100002868267D72820100008A06583A5370E97F6A6501000073683C4B026825684368444B008572830100006846877284010000527285010000284B014B034B03867286010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728701000074728801000062682B682C687E4E75627562683C4B01687F683275628A06302D5B70E97F6828298172890100007D728A01000028682B682C682D4B02682E4B0268267D728B01000068306832683C4B01687F682375628A0690A35B70E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A728C0100002981728D0100007D728E0100002858020000005F78728F010000683268267D7290010000683C4B0168254E682B682C687E4E58020000005F797291010000636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A7292010000298172930100007D72940100002868267D72950100008A0690A35B70E97F6A8D01000073683C4B01682B682C687E4E756275628A06D8A65B70E97F6828298172960100007D729701000028682B682C682D4B02682E4B0268267D72980100008A06A0A65B70E97F6838298172990100007D729A0100002868267D729B010000683C4B01683D6A96010000682B682C683E683F2981729C0100007D729D010000286842684368444B0085729E010000684687729F0100005272A0010000284B014B028572A1010000684D894310000000000000F07F000000000000F07F72A20100007472A30100006268528868267D72A40100008A06A0A65B70E97F6A9901000073683C4B016854684368444B008572A501000068468772A60100005272A7010000284B014B024B028672A8010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A90100007472AA01000062682B682C685B684368444B008572AB01000068468772AC0100005272AD010000284B014B024B028672AE010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AF0100007472B0010000627562685B4E75627368306828298172B10100007D72B201000028682B682C682D4B02682E4B0268267D72B30100008A06D8A65B70E97F6A960100007368306831298172B40100007D72B50100002868267D72B60100008A0690135870E97F6AB1010000736868683F298172B70100007D72B8010000286842684368444B008572B901000068468772BA0100005272BB010000284B014B028572BC010000684D894310000000000000F07F000000000000F07F72BD0100007472BE0100006268528868267D72BF0100008A06181C5870E97F6AB401000073683C4B016854684368444B008572C001000068468772C10100005272C2010000284B014B024B028672C3010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C40100007472C501000062682B682C685B684368444B008572C601000068468772C70100005272C8010000284B014B024B028672C9010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CA0100007472CB010000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172CC0100007D72CD0100002868267D72CE0100008A0690135870E97F6AB101000073683C4B026825684368444B008572CF01000068468772D00100005272D1010000284B014B034B038672D2010000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D30100007472D401000062682B682C687E4E75627562683C4B01687F683275628A06B8375370E97F6828298172D50100007D72D601000028682B682C682D4B02682E4B0268267D72D70100008A0628385370E97F6838298172D80100007D72D90100002868267D72DA010000683C4B01683D6AD5010000682B682C683E683F298172DB0100007D72DC010000286842684368444B008572DD01000068468772DE0100005272DF010000284B014B028572E0010000684D894310000000000000F07F000000000000F07F72E10100007472E20100006268528868267D72E30100008A0628385370E97F6AD801000073683C4B016854684368444B008572E401000068468772E50100005272E6010000284B014B024B028672E7010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E80100007472E901000062682B682C685B684368444B008572EA01000068468772EB0100005272EC010000284B014B024B028672ED010000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EE0100007472EF010000627562685B4E75627368306828298172F00100007D72F101000028682B682C682D4B02682E4B0268267D72F20100008A06B8375370E97F6AD50100007368306831298172F30100007D72F40100002868267D72F50100008A0648375370E97F6AF0010000736868683F298172F60100007D72F7010000286842684368444B008572F801000068468772F90100005272FA010000284B014B028572FB010000684D894310000000000000F07F000000000000F07F72FC0100007472FD0100006268528868267D72FE0100008A06D8365370E97F6AF301000073683C4B016854684368444B008572FF0100006846877200020000527201020000284B014B024B02867202020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720302000074720402000062682B682C685B684368444B008572050200006846877206020000527207020000284B014B024B02867208020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720902000074720A020000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720B0200007D720C0200002868267D720D0200008A0648375370E97F6AF001000073683C4B026825684368444B0085720E020000684687720F020000527210020000284B014B034B03867211020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721202000074721302000062682B682C687E4E75627562683C4B01687F683275628A0640126170E97F6828298172140200007D721502000028682B682C682D4B02682E4B0268267D72160200008A0668266070E97F6838298172170200007D72180200002868267D7219020000683C4B01683D6A14020000682B682C683E683F2981721A0200007D721B020000286842684368444B0085721C020000684687721D02000052721E020000284B014B0285721F020000684D894310000000000000F07F000000000000F07F72200200007472210200006268528868267D72220200008A0668266070E97F6A1702000073683C4B016854684368444B008572230200006846877224020000527225020000284B014B024B02867226020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722702000074722802000062682B682C685B684368444B00857229020000684687722A02000052722B020000284B014B024B0286722C020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722D02000074722E020000627562685B4E756273683068282981722F0200007D723002000028682B682C682D4B02682E4B0268267D72310200008A0640126170E97F6A140200007368306831298172320200007D72330200002868267D72340200008A0648176170E97F6A2F020000736868683F298172350200007D7236020000286842684368444B008572370200006846877238020000527239020000284B014B0285723A020000684D894310000000000000F07F000000000000F07F723B02000074723C0200006268528868267D723D0200008A06F8C56170E97F6A3202000073683C4B016854684368444B0085723E020000684687723F020000527240020000284B014B024B02867241020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724202000074724302000062682B682C685B684368444B008572440200006846877245020000527246020000284B014B024B02867247020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7248020000747249020000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724A0200007D724B0200002868267D724C0200008A0648176170E97F6A2F02000073683C4B026825684368444B0085724D020000684687724E02000052724F020000284B014B034B03867250020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725102000074725202000062682B682C687E4E75627562683C4B01687F683275628A06D83D5370E97F6828298172530200007D725402000028682B682C682D4B02682E4B0268267D72550200008A06483E5370E97F6838298172560200007D72570200002868267D7258020000683C4B01683D6A53020000682B682C683E683F298172590200007D725A020000286842684368444B0085725B020000684687725C02000052725D020000284B014B0285725E020000684D894310000000000000F07F000000000000F07F725F0200007472600200006268528868267D72610200008A06483E5370E97F6A5602000073683C4B016854684368444B008572620200006846877263020000527264020000284B014B024B02867265020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726602000074726702000062682B682C685B684368444B00857268020000684687726902000052726A020000284B014B024B0286726B020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726C02000074726D020000627562685B4E756273683068282981726E0200007D726F02000028682B682C682D4B02682E4B0268267D72700200008A06D83D5370E97F6A530200007368306831298172710200007D72720200002868267D72730200008A06683D5370E97F6A6E020000736868683F298172740200007D7275020000286842684368444B008572760200006846877277020000527278020000284B014B02857279020000684D894310000000000000F07F000000000000F07F727A02000074727B0200006268528868267D727C0200008A06F83C5370E97F6A7102000073683C4B016854684368444B0085727D020000684687727E02000052727F020000284B014B024B02867280020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728102000074728202000062682B682C685B684368444B008572830200006846877284020000527285020000284B014B024B02867286020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7287020000747288020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172890200007D728A0200002868267D728B0200008A06683D5370E97F6A6E02000073683C4B026825684368444B0085728C020000684687728D02000052728E020000284B014B034B0386728F020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729002000074729102000062682B682C687E4E75627562683C4B01687F683275628A0648C75970E97F6828298172920200007D729302000028682B682C682D4B02682E4B0268267D72940200008A0698CF5970E97F6838298172950200007D72960200002868267D7297020000683C4B01683D6A92020000682B682C683E683F298172980200007D7299020000286842684368444B0085729A020000684687729B02000052729C020000284B014B0285729D020000684D894310000000000000F07F000000000000F07F729E02000074729F0200006268528868267D72A00200008A0698CF5970E97F6A9502000073683C4B016854684368444B008572A102000068468772A20200005272A3020000284B014B024B028672A4020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A50200007472A602000062682B682C685B684368444B008572A702000068468772A80200005272A9020000284B014B024B028672AA020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0200007472AC020000627562685B4E75627368306828298172AD0200007D72AE02000028682B682C682D4B02682E4B0268267D72AF0200008A0648C75970E97F6A920200007368306831298172B00200007D72B10200002868267D72B20200008A0618255970E97F6AAD020000736868683F298172B30200007D72B4020000286842684368444B008572B502000068468772B60200005272B7020000284B014B028572B8020000684D894310000000000000F07F000000000000F07F72B90200007472BA0200006268528868267D72BB0200008A0660415A70E97F6AB002000073683C4B016854684368444B008572BC02000068468772BD0200005272BE020000284B014B024B028672BF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C00200007472C102000062682B682C685B684368444B008572C202000068468772C30200005272C4020000284B014B024B028672C5020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C60200007472C7020000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172C80200007D72C90200002868267D72CA0200008A0618255970E97F6AAD02000073683C4B026825684368444B008572CB02000068468772CC0200005272CD020000284B014B034B038672CE020000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72CF0200007472D002000062682B682C687E4E75627562683C4B01687F683275628A06F00E5F70E97F6A8C010000298172D10200007D72D2020000286A8F010000683268267D72D3020000683C4B0168254E682B682C687E4E6A910100006A92010000298172D40200007D72D50200002868267D72D60200008A06F00E5F70E97F6AD102000073683C4B01682B682C687E4E756275628A0648B75370E97F6828298172D70200007D72D802000028682B682C682D4B02682E4B0268267D72D90200008A06B8B75370E97F6838298172DA0200007D72DB0200002868267D72DC020000683C4B01683D6AD7020000682B682C683E683F298172DD0200007D72DE020000286842684368444B008572DF02000068468772E00200005272E1020000284B014B028572E2020000684D894310000000000000F07F000000000000F07F72E30200007472E40200006268528868267D72E50200008A06B8B75370E97F6ADA02000073683C4B016854684368444B008572E602000068468772E70200005272E8020000284B014B024B028672E9020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0200007472EB02000062682B682C685B684368444B008572EC02000068468772ED0200005272EE020000284B014B024B028672EF020000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00200007472F1020000627562685B4E75627368306828298172F20200007D72F302000028682B682C682D4B02682E4B0268267D72F40200008A0648B75370E97F6AD70200007368306831298172F50200007D72F60200002868267D72F70200008A06D8B65370E97F6AF2020000736868683F298172F80200007D72F9020000286842684368444B008572FA02000068468772FB0200005272FC020000284B014B028572FD020000684D894310000000000000F07F000000000000F07F72FE0200007472FF0200006268528868267D72000300008A0668B65370E97F6AF502000073683C4B016854684368444B008572010300006846877202030000527203030000284B014B024B02867204030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720503000074720603000062682B682C685B684368444B008572070300006846877208030000527209030000284B014B024B0286720A030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720B03000074720C030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720D0300007D720E0300002868267D720F0300008A06D8B65370E97F6AF202000073683C4B026825684368444B008572100300006846877211030000527212030000284B014B034B03867213030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721403000074721503000062682B682C687E4E75627562683C4B01687F683275628A0660715270E97F6828298172160300007D721703000028682B682C682D4B02682E4B0268267D72180300008A06D0715270E97F6838298172190300007D721A0300002868267D721B030000683C4B01683D6A16030000682B682C683E683F2981721C0300007D721D030000286842684368444B0085721E030000684687721F030000527220030000284B014B02857221030000684D894310000000000000F07F000000000000F07F72220300007472230300006268528868267D72240300008A06D0715270E97F6A1903000073683C4B016854684368444B008572250300006846877226030000527227030000284B014B024B02867228030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722903000074722A03000062682B682C685B684368444B0085722B030000684687722C03000052722D030000284B014B024B0286722E030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F030000747230030000627562685B4E75627368306828298172310300007D723203000028682B682C682D4B02682E4B0268267D72330300008A0660715270E97F6A160300007368306831298172340300007D72350300002868267D72360300008A06F02E5B70E97F6A31030000736868683F298172370300007D7238030000286842684368444B00857239030000684687723A03000052723B030000284B014B0285723C030000684D894310000000000000F07F000000000000F07F723D03000074723E0300006268528868267D723F0300008A06F0705270E97F6A3403000073683C4B016854684368444B008572400300006846877241030000527242030000284B014B024B02867243030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724403000074724503000062682B682C685B684368444B008572460300006846877247030000527248030000284B014B024B02867249030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724A03000074724B030000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724C0300007D724D0300002868267D724E0300008A06F02E5B70E97F6A3103000073683C4B026825684368444B0085724F0300006846877250030000527251030000284B014B034B03867252030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725303000074725403000062682B682C687E4E75627562683C4B01687F683275628A0660A86070E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A7255030000298172560300007D7257030000286A8F010000683268267D7258030000288A06A04D5A70E97F6828298172590300007D725A03000028682B682C682D4B02682E4B0268267D725B03000068306A56030000683C4B02687F68222981725C0300007D725D0300002868254E68267D725E0300008A06A04D5A70E97F6A5903000073683C4B01580C0000005F7363616C655F7472616E73725F0300006880298172600300007D72610300002868267D7262030000288A0680F06170E97F6822298172630300007D72640300002868254E68267D72650300008A0688F56170E97F6828298172660300007D726703000028682B682C682D4B02682E4B0268267D726803000068306A55030000298172690300007D726A030000286A8F01000068312981726B0300007D726C0300002868267D726D030000288A0680C05A70E97F68282981726E0300007D726F03000028682B682C682D4B02682E4B0268267D72700300008A06B8C05A70E97F6838298172710300007D72720300002868267D7273030000683C4B01683D6A6E030000682B682C683E683F298172740300007D7275030000286842684368444B008572760300006846877277030000527278030000284B014B02857279030000684D894310000000000000F07F000000000000F07F727A03000074727B0300006268528868267D727C0300008A06B8C05A70E97F6A7103000073683C4B016854684368444B0085727D030000684687727E03000052727F030000284B014B024B02867280030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728103000074728203000062682B682C685B684368444B008572830300006846877284030000527285030000284B014B024B02867286030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7287030000747288030000627562685B4E75627368306828298172890300007D728A03000028682B682C682D4B02682E4B0268267D728B0300008A0680C05A70E97F6A6E03000073683068312981728C0300007D728D0300002868267D728E0300008A06602F6270E97F6A89030000736868683F2981728F0300007D7290030000286842684368444B008572910300006846877292030000527293030000284B014B02857294030000684D894310000000000000F07F000000000000F07F72950300007472960300006268528868267D72970300008A06A02D6270E97F6A8C03000073683C4B016854684368444B00857298030000684687729903000052729A030000284B014B024B0286729B030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729C03000074729D03000062682B682C685B684368444B0085729E030000684687729F0300005272A0030000284B014B024B028672A1030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A20300007472A3030000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172A40300007D72A50300002868267D72A60300008A06602F6270E97F6A8903000073683C4B026825684368444B008572A703000068468772A80300005272A9030000284B014B034B038672AA030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AB0300007472AC03000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0600545E70E97F6828298172AD0300007D72AE03000028682B682C682D4B02682E4B0268267D72AF0300008A06385B5E70E97F6838298172B00300007D72B10300002868267D72B2030000683C4B01683D6AAD030000682B682C683E683F298172B30300007D72B4030000286842684368444B008572B503000068468772B60300005272B7030000284B014B028572B8030000684D894310000000000000F07F000000000000F07F72B90300007472BA0300006268528868267D72BB0300008A06385B5E70E97F6AB003000073683C4B016854684368444B008572BC03000068468772BD0300005272BE030000284B014B024B028672BF030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C00300007472C103000062682B682C685B684368444B008572C203000068468772C30300005272C4030000284B014B024B028672C5030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72C60300007472C7030000627562685B4E75627368306828298172C80300007D72C903000028682B682C682D4B02682E4B0268267D72CA0300008A0600545E70E97F6AAD0300007368306831298172CB0300007D72CC0300002868267D72CD0300008A0638545E70E97F6AC8030000736868683F298172CE0300007D72CF030000286842684368444B008572D003000068468772D10300005272D2030000284B014B028572D3030000684D894310000000000000F07F000000000000F07F72D40300007472D50300006268528868267D72D60300008A06D0515E70E97F6ACB03000073683C4B016854684368444B008572D703000068468772D80300005272D9030000284B014B024B028672DA030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DB0300007472DC03000062682B682C685B684368444B008572DD03000068468772DE0300005272DF030000284B014B024B028672E0030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E10300007472E2030000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E30300007D72E40300002868267D72E50300008A0638545E70E97F6AC803000073683C4B026825684368444B008572E603000068468772E70300005272E8030000284B014B034B038672E9030000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EA0300007472EB03000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0680C75670E97F6828298172EC0300007D72ED03000028682B682C682D4B02682E4B0268267D72EE0300008A0648C75670E97F6838298172EF0300007D72F00300002868267D72F1030000683C4B01683D6AEC030000682B682C683E683F298172F20300007D72F3030000286842684368444B008572F403000068468772F50300005272F6030000284B014B028572F7030000684D894310000000000000F07F000000000000F07F72F80300007472F90300006268528868267D72FA0300008A0648C75670E97F6AEF03000073683C4B016854684368444B008572FB03000068468772FC0300005272FD030000284B014B024B028672FE030000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72FF03000074720004000062682B682C685B684368444B008572010400006846877202040000527203040000284B014B024B02867204040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7205040000747206040000627562685B4E75627368306828298172070400007D720804000028682B682C682D4B02682E4B0268267D72090400008A0680C75670E97F6AEC03000073683068312981720A0400007D720B0400002868267D720C0400008A06A0C65670E97F6A07040000736868683F2981720D0400007D720E040000286842684368444B0085720F0400006846877210040000527211040000284B014B02857212040000684D894310000000000000F07F000000000000F07F72130400007472140400006268528868267D72150400008A06A8C45670E97F6A0A04000073683C4B016854684368444B008572160400006846877217040000527218040000284B014B024B02867219040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721A04000074721B04000062682B682C685B684368444B0085721C040000684687721D04000052721E040000284B014B024B0286721F040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7220040000747221040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172220400007D72230400002868267D72240400008A06A0C65670E97F6A0704000073683C4B026825684368444B008572250400006846877226040000527227040000284B014B034B03867228040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722904000074722A04000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06C82A6270E97F68282981722B0400007D722C04000028682B682C682D4B02682E4B0268267D722D04000068306A6B030000683C4B01687F68222981722E0400007D722F0400002868254E68267D7230040000288A06902A6270E97F6828298172310400007D723204000028682B682C682D4B02682E4B0268267D723304000068306A6B030000683C4B01687F6A2E04000075628A06C82A6270E97F6A2B0400008A06582A6270E97F6828298172340400007D723504000028682B682C682D4B02682E4B0268267D723604000068306A6B030000683C4B01687F6A2E040000756275683C4B016A5F0300006A60030000682B682C687E4E58020000005F747237040000470000000000000000473FB5555555555555867238040000756275628A0660186170E97F6828298172390400007D723A04000028682B682C682D4B02682E4B0268267D723B0400008A06701B6170E97F68382981723C0400007D723D0400002868267D723E040000683C4B01683D6A39040000682B682C683E683F2981723F0400007D7240040000286842684368444B008572410400006846877242040000527243040000284B014B02857244040000684D894310000000000000F07F000000000000F07F72450400007472460400006268528868267D72470400008A06701B6170E97F6A3C04000073683C4B016854684368444B00857248040000684687724904000052724A040000284B014B024B0286724B040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724C04000074724D04000062682B682C685B684368444B0085724E040000684687724F040000527250040000284B014B024B02867251040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7252040000747253040000627562685B4E75627368306828298172540400007D725504000028682B682C682D4B02682E4B0268267D72560400008A0660186170E97F6A390400007368306831298172570400007D72580400002868267D72590400008A06981F6170E97F6A54040000736868683F2981725A0400007D725B040000286842684368444B0085725C040000684687725D04000052725E040000284B014B0285725F040000684D894310000000000000F07F000000000000F07F72600400007472610400006268528868267D72620400008A0610CE5670E97F6A5704000073683C4B016854684368444B008572630400006846877264040000527265040000284B014B024B02867266040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726704000074726804000062682B682C685B684368444B00857269040000684687726A04000052726B040000284B014B024B0286726C040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726D04000074726E040000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981726F0400007D72700400002868267D72710400008A06981F6170E97F6A5404000073683C4B026825684368444B008572720400006846877273040000527274040000284B014B034B03867275040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727604000074727704000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06580A5F70E97F6A8C010000298172780400007D7279040000286A8F0100006A6B03000068267D727A040000683C4B0168254E682B682C687E4E6A910100006A920100002981727B0400007D727C0400002868267D727D0400008A06580A5F70E97F6A7804000073683C4B01682B682C687E4E756275628A06902A6270E97F6A310400008A0678F25D70E97F68282981727E0400007D727F04000028682B682C682D4B02682E4B0268267D72800400008A0638F45D70E97F6838298172810400007D72820400002868267D7283040000683C4B01683D6A7E040000682B682C683E683F298172840400007D7285040000286842684368444B008572860400006846877287040000527288040000284B014B02857289040000684D894310000000000000F07F000000000000F07F728A04000074728B0400006268528868267D728C0400008A0638F45D70E97F6A8104000073683C4B016854684368444B0085728D040000684687728E04000052728F040000284B014B024B02867290040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729104000074729204000062682B682C685B684368444B008572930400006846877294040000527295040000284B014B024B02867296040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7297040000747298040000627562685B4E75627368306828298172990400007D729A04000028682B682C682D4B02682E4B0268267D729B0400008A0678F25D70E97F6A7E04000073683068312981729C0400007D729D0400002868267D729E0400008A0690F35D70E97F6A99040000736868683F2981729F0400007D72A0040000286842684368444B008572A104000068468772A20400005272A3040000284B014B028572A4040000684D894310000000000000F07F000000000000F07F72A50400007472A60400006268528868267D72A70400008A06A8F45D70E97F6A9C04000073683C4B016854684368444B008572A804000068468772A90400005272AA040000284B014B024B028672AB040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AC0400007472AD04000062682B682C685B684368444B008572AE04000068468772AF0400005272B0040000284B014B024B028672B1040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B20400007472B3040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B40400007D72B50400002868267D72B60400008A0690F35D70E97F6A9904000073683C4B026825684368444B008572B704000068468772B80400005272B9040000284B014B034B038672BA040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BB0400007472BC04000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06180C5F70E97F6A8C010000298172BD0400007D72BE040000286A8F0100006A6B03000068267D72BF040000683C4B0168254E682B682C687E4E6A910100006A92010000298172C00400007D72C10400002868267D72C20400008A06180C5F70E97F6ABD04000073683C4B01682B682C687E4E756275628A06A05D5E70E97F6828298172C30400007D72C404000028682B682C682D4B02682E4B0268267D72C50400008A06285F5E70E97F6838298172C60400007D72C70400002868267D72C8040000683C4B01683D6AC3040000682B682C683E683F298172C90400007D72CA040000286842684368444B008572CB04000068468772CC0400005272CD040000284B014B028572CE040000684D894310000000000000F07F000000000000F07F72CF0400007472D00400006268528868267D72D10400008A06285F5E70E97F6AC604000073683C4B016854684368444B008572D204000068468772D30400005272D4040000284B014B024B028672D5040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D60400007472D704000062682B682C685B684368444B008572D804000068468772D90400005272DA040000284B014B024B028672DB040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0400007472DD040000627562685B4E75627368306828298172DE0400007D72DF04000028682B682C682D4B02682E4B0268267D72E00400008A06A05D5E70E97F6AC30400007368306831298172E10400007D72E20400002868267D72E30400008A06C05C5E70E97F6ADE040000736868683F298172E40400007D72E5040000286842684368444B008572E604000068468772E70400005272E8040000284B014B028572E9040000684D894310000000000000F07F000000000000F07F72EA0400007472EB0400006268528868267D72EC0400008A06505C5E70E97F6AE104000073683C4B016854684368444B008572ED04000068468772EE0400005272EF040000284B014B024B028672F0040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F10400007472F204000062682B682C685B684368444B008572F304000068468772F40400005272F5040000284B014B024B028672F6040000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F70400007472F8040000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F90400007D72FA0400002868267D72FB0400008A06C05C5E70E97F6ADE04000073683C4B026825684368444B008572FC04000068468772FD0400005272FE040000284B014B034B038672FF040000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720005000074720105000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06582A6270E97F6A340400008A0668CD5F70E97F6828298172020500007D720305000028682B682C682D4B02682E4B0268267D72040500008A0660CF5F70E97F6838298172050500007D72060500002868267D7207050000683C4B01683D6A02050000682B682C683E683F298172080500007D7209050000286842684368444B0085720A050000684687720B05000052720C050000284B014B0285720D050000684D894310000000000000F07F000000000000F07F720E05000074720F0500006268528868267D72100500008A0660CF5F70E97F6A0505000073683C4B016854684368444B008572110500006846877212050000527213050000284B014B024B02867214050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721505000074721605000062682B682C685B684368444B008572170500006846877218050000527219050000284B014B024B0286721A050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F721B05000074721C050000627562685B4E756273683068282981721D0500007D721E05000028682B682C682D4B02682E4B0268267D721F0500008A0668CD5F70E97F6A020500007368306831298172200500007D72210500002868267D72220500008A0688156170E97F6A1D050000736868683F298172230500007D7224050000286842684368444B008572250500006846877226050000527227050000284B014B02857228050000684D894310000000000000F07F000000000000F07F722905000074722A0500006268528868267D722B0500008A0620136170E97F6A2005000073683C4B016854684368444B0085722C050000684687722D05000052722E050000284B014B024B0286722F050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723005000074723105000062682B682C685B684368444B008572320500006846877233050000527234050000284B014B024B02867235050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7236050000747237050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172380500007D72390500002868267D723A0500008A0688156170E97F6A1D05000073683C4B026825684368444B0085723B050000684687723C05000052723D050000284B014B034B0386723E050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723F05000074724005000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06702B6070E97F6A8C010000298172410500007D7242050000286A8F0100006A92010000298172430500007D72440500002868267D72450500008A06702B6070E97F6A4105000073683C4B01682B682C687E4E756268267D7246050000683C4B0168254E682B682C687E4E6A910100006A6B03000075628A06E03B5D70E97F6828298172470500007D724805000028682B682C682D4B02682E4B0268267D72490500008A06F83C5D70E97F68382981724A0500007D724B0500002868267D724C050000683C4B01683D6A47050000682B682C683E683F2981724D0500007D724E050000286842684368444B0085724F0500006846877250050000527251050000284B014B02857252050000684D894310000000000000F07F000000000000F07F72530500007472540500006268528868267D72550500008A06F83C5D70E97F6A4A05000073683C4B016854684368444B008572560500006846877257050000527258050000284B014B024B02867259050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725A05000074725B05000062682B682C685B684368444B0085725C050000684687725D05000052725E050000284B014B024B0286725F050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7260050000747261050000627562685B4E75627368306828298172620500007D726305000028682B682C682D4B02682E4B0268267D72640500008A06E03B5D70E97F6A470500007368306831298172650500007D72660500002868267D72670500008A0630365D70E97F6A62050000736868683F298172680500007D7269050000286842684368444B0085726A050000684687726B05000052726C050000284B014B0285726D050000684D894310000000000000F07F000000000000F07F726E05000074726F0500006268528868267D72700500008A06003B5D70E97F6A6505000073683C4B016854684368444B008572710500006846877272050000527273050000284B014B024B02867274050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727505000074727605000062682B682C685B684368444B008572770500006846877278050000527279050000284B014B024B0286727A050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727B05000074727C050000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727D0500007D727E0500002868267D727F0500008A0630365D70E97F6A6205000073683C4B026825684368444B008572800500006846877281050000527282050000284B014B034B03867283050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728405000074728505000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0678F95D70E97F6828298172860500007D728705000028682B682C682D4B02682E4B0268267D72880500008A0698F85D70E97F6838298172890500007D728A0500002868267D728B050000683C4B01683D6A86050000682B682C683E683F2981728C0500007D728D050000286842684368444B0085728E050000684687728F050000527290050000284B014B02857291050000684D894310000000000000F07F000000000000F07F72920500007472930500006268528868267D72940500008A0698F85D70E97F6A8905000073683C4B016854684368444B008572950500006846877296050000527297050000284B014B024B02867298050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729905000074729A05000062682B682C685B684368444B0085729B050000684687729C05000052729D050000284B014B024B0286729E050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729F0500007472A0050000627562685B4E75627368306828298172A10500007D72A205000028682B682C682D4B02682E4B0268267D72A30500008A0678F95D70E97F6A860500007368306831298172A40500007D72A50500002868267D72A60500008A0660F15D70E97F6AA1050000736868683F298172A70500007D72A8050000286842684368444B008572A905000068468772AA0500005272AB050000284B014B028572AC050000684D894310000000000000F07F000000000000F07F72AD0500007472AE0500006268528868267D72AF0500008A06B8F05D70E97F6AA405000073683C4B016854684368444B008572B005000068468772B10500005272B2050000284B014B024B028672B3050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B40500007472B505000062682B682C685B684368444B008572B605000068468772B70500005272B8050000284B014B024B028672B9050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0500007472BB050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172BC0500007D72BD0500002868267D72BE0500008A0660F15D70E97F6AA105000073683C4B026825684368444B008572BF05000068468772C00500005272C1050000284B014B034B038672C2050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C30500007472C405000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0660315D70E97F6828298172C50500007D72C605000028682B682C682D4B02682E4B0268267D72C705000068306828298172C80500007D72C905000028682B682C682D4B02682E4B0268267D72CA0500008A0660315D70E97F6AC50500007368306831298172CB0500007D72CC0500002868267D72CD0500008A0600345D70E97F6AC8050000736868683F298172CE0500007D72CF050000286842684368444B008572D005000068468772D10500005272D2050000284B014B028572D3050000684D894310000000000000F07F000000000000F07F72D40500007472D50500006268528868267D72D60500008A0658335D70E97F6ACB05000073683C4B016854684368444B008572D705000068468772D80500005272D9050000284B014B024B028672DA050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72DB0500007472DC05000062682B682C685B684368444B008572DD05000068468772DE0500005272DF050000284B014B024B028672E0050000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E10500007472E2050000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E30500007D72E40500002868267D72E50500008A0600345D70E97F6AC805000073683C4B026825684368444B008572E605000068468772E70500005272E8050000284B014B034B038672E9050000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EA0500007472EB05000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06E0FB5D70E97F6828298172EC0500007D72ED05000028682B682C682D4B02682E4B0268267D72EE05000068306828298172EF0500007D72F005000028682B682C682D4B02682E4B0268267D72F10500008A06E0FB5D70E97F6AEC0500007368306831298172F20500007D72F30500002868267D72F40500008A06D0FF5D70E97F6AEF050000736868683F298172F50500007D72F6050000286842684368444B008572F705000068468772F80500005272F9050000284B014B028572FA050000684D894310000000000000F07F000000000000F07F72FB0500007472FC0500006268528868267D72FD0500008A06F0F75D70E97F6AF205000073683C4B016854684368444B008572FE05000068468772FF050000527200060000284B014B024B02867201060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720206000074720306000062682B682C685B684368444B008572040600006846877205060000527206060000284B014B024B02867207060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7208060000747209060000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981720A0600007D720B0600002868267D720C0600008A06D0FF5D70E97F6AEF05000073683C4B026825684368444B0085720D060000684687720E06000052720F060000284B014B034B03867210060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721106000074721206000062682B682C687E4E75627562683C4B01687F6A6B03000075628A0678C95670E97F6828298172130600007D721406000028682B682C682D4B02682E4B0268267D721506000068306828298172160600007D721706000028682B682C682D4B02682E4B0268267D72180600008A0678C95670E97F6A130600007368306831298172190600007D721A0600002868267D721B0600008A06F0C75670E97F6A16060000736868683F2981721C0600007D721D060000286842684368444B0085721E060000684687721F060000527220060000284B014B02857221060000684D894310000000000000F07F000000000000F07F72220600007472230600006268528868267D72240600008A06D0C85670E97F6A1906000073683C4B016854684368444B008572250600006846877226060000527227060000284B014B024B02867228060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722906000074722A06000062682B682C685B684368444B0085722B060000684687722C06000052722D060000284B014B024B0286722E060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F060000747230060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172310600007D72320600002868267D72330600008A06F0C75670E97F6A1606000073683C4B026825684368444B008572340600006846877235060000527236060000284B014B034B03867237060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723806000074723906000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06A8FB5D70E97F68282981723A0600007D723B06000028682B682C682D4B02682E4B0268267D723C060000683068282981723D0600007D723E06000028682B682C682D4B02682E4B0268267D723F0600008A06A8FB5D70E97F6A3A0600007368306831298172400600007D72410600002868267D72420600008A06B8FE5D70E97F6A3D060000736868683F298172430600007D7244060000286842684368444B008572450600006846877246060000527247060000284B014B02857248060000684D894310000000000000F07F000000000000F07F724906000074724A0600006268528868267D724B0600008A06A0FD5D70E97F6A4006000073683C4B016854684368444B0085724C060000684687724D06000052724E060000284B014B024B0286724F060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725006000074725106000062682B682C685B684368444B008572520600006846877253060000527254060000284B014B024B02867255060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7256060000747257060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172580600007D72590600002868267D725A0600008A06B8FE5D70E97F6A3D06000073683C4B026825684368444B0085725B060000684687725C06000052725D060000284B014B034B0386725E060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725F06000074726006000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06983F5D70E97F6828298172610600007D726206000028682B682C682D4B02682E4B0268267D726306000068306828298172640600007D726506000028682B682C682D4B02682E4B0268267D72660600008A06983F5D70E97F6A610600007368306831298172670600007D72680600002868267D72690600008A0688355D70E97F6A64060000736868683F2981726A0600007D726B060000286842684368444B0085726C060000684687726D06000052726E060000284B014B0285726F060000684D894310000000000000F07F000000000000F07F72700600007472710600006268528868267D72720600008A06A8345D70E97F6A6706000073683C4B016854684368444B008572730600006846877274060000527275060000284B014B024B02867276060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727706000074727806000062682B682C685B684368444B00857279060000684687727A06000052727B060000284B014B024B0286727C060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F727D06000074727E060000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727F0600007D72800600002868267D72810600008A0688355D70E97F6A6406000073683C4B026825684368444B008572820600006846877283060000527284060000284B014B034B03867285060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728606000074728706000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06282FBB73E97F6A690300008A06302D6070E97F6A8C010000298172880600007D7289060000286A8F0100006A6B03000068267D728A060000683C4B0168254E682B682C687E4E6A910100006A920100002981728B0600007D728C0600002868267D728D0600008A06302D6070E97F6A8806000073683C4B01682B682C687E4E756275628A0648505E70E97F68282981728E0600007D728F06000028682B682C682D4B02682E4B0268267D729006000068306828298172910600007D729206000028682B682C682D4B02682E4B0268267D72930600008A0648505E70E97F6A8E0600007368306831298172940600007D72950600002868267D72960600008A06D8565E70E97F6A91060000736868683F298172970600007D7298060000286842684368444B00857299060000684687729A06000052729B060000284B014B0285729C060000684D894310000000000000F07F000000000000F07F729D06000074729E0600006268528868267D729F0600008A06E0545E70E97F6A9406000073683C4B016854684368444B008572A006000068468772A10600005272A2060000284B014B024B028672A3060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A40600007472A506000062682B682C685B684368444B008572A606000068468772A70600005272A8060000284B014B024B028672A9060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AA0600007472AB060000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172AC0600007D72AD0600002868267D72AE0600008A06D8565E70E97F6A9106000073683C4B026825684368444B008572AF06000068468772B00600005272B1060000284B014B034B038672B2060000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B30600007472B406000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06A02DBB73E97F6828298172B50600007D72B606000028682B682C682D4B02682E4B0268267D72B70600008A06102EBB73E97F6828298172B80600007D72B906000028682B682C682D4B02682E4B0268267D72BA060000288A06B82EBB73E97F6A55030000298172BB0600007D72BC060000286A8F0100006AB806000068267D72BD060000683C4B0258070000005F616666696E6572BE0600004E682B682C6A910100006A6B03000075628A06282FBB73E97F6A69030000756830636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A72BF060000298172C00600007D72C106000028682E4B0258050000006368696C6472C20600006A8C010000298172C30600007D72C4060000286A8F0100006A92010000298172C50600007D72C60600002868267D72C70600008A06D8A66070E97F6AC306000073683C4B01682B682C687E4E756268267D72C80600008A06C02CBB73E97F6AC006000073683C4B0168254E682B682C687E4E6A910100006A92010000298172C90600007D72CA0600002868267D72CB0600008A06D8A66070E97F6AC306000073683C4B01682B682C687E4E756275625807000000706172656E747372CC0600007D72CD060000288A06102EBB73E97F6AB80600008A06C82ABB73E97F6838298172CE0600007D72CF0600002868267D72D00600008A06582ABB73E97F636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A72D1060000298172D20600007D72D30600002868267D72D40600008A06A02DBB73E97F6AB50600007358060000005F626F78696E72D50600006ACE060000683C4B026825684368444B008572D606000068468772D70600005272D8060000284B014B034B038672D9060000684D894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F72DA0600007472DB06000062682B682C687E4E756273683C4B02683D6AC0060000682B682C683E683F298172DC0600007D72DD060000286842684368444B008572DE06000068468772DF0600005272E0060000284B014B028572E1060000684D894310000000000000F07F000000000000F07F72E20600007472E30600006268528868267D72E40600008A06C82ABB73E97F6ACE06000073683C4B026854684368444B008572E506000068468772E60600005272E7060000284B014B024B028672E8060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E90600007472EA06000062682B682C685B684368444B008572EB06000068468772EC0600005272ED060000284B014B024B028672EE060000684D894320999999999999A9BF0000000000000000CCCCCCCCCCCCF03F33333333B39A2C4172EF0600007472F0060000627562685B684368444B008572F106000068468772F20600005272F3060000284B014B024B028672F4060000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F50600007472F606000062756275682D4B027562683C4B02687F6AB506000075627368306AD2060000683C4B02687F6A6B03000075628A06C0256070E97F6828298172F70600007D72F806000028682B682C682D4B02682E4B0268267D72F906000068306828298172FA0600007D72FB06000028682B682C682D4B02682E4B0268267D72FC0600008A06C0256070E97F6AF70600007368306831298172FD0600007D72FE0600002868267D72FF0600008A0680206070E97F6AFA060000736868683F298172000700007D7201070000286842684368444B008572020700006846877203070000527204070000284B014B02857205070000684D894310000000000000F07F000000000000F07F72060700007472070700006268528868267D72080700008A06B8206070E97F6AFD06000073683C4B016854684368444B00857209070000684687720A07000052720B070000284B014B024B0286720C070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720D07000074720E07000062682B682C685B684368444B0085720F0700006846877210070000527211070000284B014B024B02867212070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7213070000747214070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172150700007D72160700002868267D72170700008A0680206070E97F6AFA06000073683C4B026825684368444B00857218070000684687721907000052721A070000284B014B034B0386721B070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721C07000074721D07000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06C0C55670E97F68282981721E0700007D721F07000028682B682C682D4B02682E4B0268267D722007000068306828298172210700007D722207000028682B682C682D4B02682E4B0268267D72230700008A06C0C55670E97F6A1E0700007368306831298172240700007D72250700002868267D72260700008A06F85C5E70E97F6A21070000736868683F298172270700007D7228070000286842684368444B00857229070000684687722A07000052722B070000284B014B0285722C070000684D894310000000000000F07F000000000000F07F722D07000074722E0700006268528868267D722F0700008A06985F5E70E97F6A2407000073683C4B016854684368444B008572300700006846877231070000527232070000284B014B024B02867233070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723407000074723507000062682B682C685B684368444B008572360700006846877237070000527238070000284B014B024B02867239070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F723A07000074723B070000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981723C0700007D723D0700002868267D723E0700008A06F85C5E70E97F6A2107000073683C4B026825684368444B0085723F0700006846877240070000527241070000284B014B034B03867242070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724307000074724407000062682B682C687E4E75627562683C4B01687F6A6B03000075628A06B82EBB73E97F6ABB0600008A0628C15A70E97F6828298172450700007D724607000028682B682C682D4B02682E4B0268267D724707000068306828298172480700007D724907000028682B682C682D4B02682E4B0268267D724A0700008A0628C15A70E97F6A4507000073683068312981724B0700007D724C0700002868267D724D0700008A0638C45A70E97F6A48070000736868683F2981724E0700007D724F070000286842684368444B008572500700006846877251070000527252070000284B014B02857253070000684D894310000000000000F07F000000000000F07F72540700007472550700006268528868267D72560700008A06B0596170E97F6A4B07000073683C4B016854684368444B008572570700006846877258070000527259070000284B014B024B0286725A070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725B07000074725C07000062682B682C685B684368444B0085725D070000684687725E07000052725F070000284B014B024B02867260070000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7261070000747262070000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172630700007D72640700002868267D72650700008A0638C45A70E97F6A4807000073683C4B026825684368444B008572660700006846877267070000527268070000284B014B034B03867269070000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726A07000074726B07000062682B682C687E4E75627562683C4B01687F6A6B030000756275686868382981726C0700007D726D0700002868267D726E0700008A06382BBB73E97F6A6B03000073683C4B01683D68312981726F0700007D72700700002868267D7271070000288A066028BB73E97F6A6C0700008A0608C25F70E97F6838298172720700007D72730700002868267D72740700008A0620CA5F70E97F683273683C4B01683D6A6F070000682B682C683E683F298172750700007D7276070000286842684368444B008572770700006846877278070000527279070000284B014B0285727A070000684D894310000000000000F07F000000000000F07F727B07000074727C0700006268528868267D727D0700008A0608C25F70E97F6A7207000073683C4B006854684368444B0085727E070000684687727F070000527280070000284B014B024B02867281070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F728207000074728307000062682B682C685B684368444B008572840700006846877285070000527286070000284B014B024B02867287070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F7288070000747289070000627562685B4E756275686868382981728A0700007D728B0700002868267D728C0700008A066021BB73E97F6A6F07000073683C4B01683D6A60030000682B682C683E683F2981728D0700007D728E070000286842684368444B0085728F0700006846877290070000527291070000284B014B02857292070000684D894310000000000000F07F000000000000F07F72930700007472940700006268528868267D72950700008A06980FBA73E97F6A8A07000073683C4B016854684368444B008572960700006846877297070000527298070000284B014B024B02867299070000684D894320000000000000000000000000000000009A999999999919403333333333331340729A07000074729B07000062682B682C685B684368444B0085729C070000684687729D07000052729E070000284B014B024B0286729F070000684D894320000000000000000000000000000000009A99999999991940333333333333134072A00700007472A1070000627562685B4E7562683C4B0168254E682B682C687E4E7562682B682C683E683F298172A20700007D72A3070000286842684368444B008572A407000068468772A50700005272A6070000284B014B028572A7070000684D894310000000000000F07F000000000000F07F72A80700007472A90700006268528868267D72AA0700008A066028BB73E97F6A6C07000073683C4B006854684368444B008572AB07000068468772AC0700005272AD070000284B014B024B028672AE070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72AF0700007472B007000062682B682C685B684368444B008572B107000068468772B20700005272B3070000284B014B024B028672B4070000684D894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72B50700007472B6070000627562685B4E7562683C4B0168254E682B682C687E4E756268267D72B7070000288A06A0FD6170E97F6828298172B80700007D72B907000028682B682C682D4B02682E4B0268267D72BA07000068306A69030000683C4B02687F6822298172BB0700007D72BC0700002868254E68267D72BD0700008A06A0FD6170E97F6AB807000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672BE070000756275628A06E0C46170E97F6828298172BF0700007D72C007000028682B682C682D4B02682E4B0268267D72C107000068306A69030000683C4B02687F6822298172C20700007D72C30700002868254E68267D72C40700008A06E0C46170E97F6ABF07000073683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B008672C5070000756275628A0650C55A70E97F6828298172C60700007D72C707000028682B682C682D4B02682E4B0268267D72C807000068306A69030000683C4B02687F6822298172C90700007D72CA0700002868254E68267D72CB0700008A0650C55A70E97F6AC607000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B008672CC070000756275628A06B8276070E97F6828298172CD0700007D72CE07000028682B682C682D4B02682E4B0268267D72CF07000068306A69030000683C4B02687F6822298172D00700007D72D10700002868254E68267D72D20700008A06B8276070E97F6ACD07000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B008672D3070000756275628A06E8C95A70E97F6828298172D40700007D72D507000028682B682C682D4B02682E4B0268267D72D607000068306A69030000683C4B02687F6822298172D70700007D72D80700002868254E68267D72D90700008A06E8C95A70E97F6AD407000073683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB33333333333344B008672DA070000756275628A0688F56170E97F6A660300008A06B82E6070E97F6828298172DB0700007D72DC07000028682B682C682D4B02682E4B0268267D72DD07000068306A69030000683C4B02687F6822298172DE0700007D72DF0700002868254E68267D72E00700008A06B82E6070E97F6ADB07000073683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB33333333333344B008672E1070000756275628A06F8CC6170E97F6828298172E20700007D72E307000028682B682C682D4B02682E4B0268267D72E407000068306A69030000683C4B02687F6822298172E50700007D72E60700002868254E68267D72E70700008A06F8CC6170E97F6AE207000073683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672E80700007562756275683C4B026ABE0600004E682B682C6A910100006AB80600007562683C4B02687F6A63030000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B008672E907000075628A0680CE6170E97F6AC20700008A06E8395B70E97F6822298172EA0700007D72EB0700002868254E68267D72EC070000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB33333333333348672ED07000075628A0648405A70E97F68238A0660485A70E97F6822298172EE0700007D72EF0700002868254E68267D72F00700008A06204A5A70E97F6828298172F10700007D72F207000028682B682C682D4B02682E4B0268267D72F307000068306A55030000298172F40700007D72F5070000286A8F0100006828298172F60700007D72F707000028682B682C682D4B02682E4B0268267D72F8070000288A0660AF6070E97F6AF40700008A0660A86070E97F6A560300007568306ABF060000298172F90700007D72FA07000028682E4B026AC20600006A8C010000298172FB0700007D72FC070000286A8F0100006A92010000298172FD0700007D72FE0700002868267D72FF0700008A06C82A5B70E97F6AFB07000073683C4B01682B682C687E4E756268267D72000800008A0658CA5F70E97F6AF907000073683C4B006825684368444B008572010800006846877202080000527203080000284B014B034B03867204080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720508000074720608000062682B682C687E4E6A910100006A92010000298172070800007D72080800002868267D72090800008A06C82A5B70E97F6AFB07000073683C4B01682B682C687E4E756275626ACC0600007D720A080000288A0610C75F70E97F68382981720B0800007D720C0800002868267D720D0800008A06D0CF5F70E97F6AD10600002981720E0800007D720F0800002868267D72100800008A0678A96070E97F6828298172110800007D721208000028682B682C682D4B02682E4B0268267D72130800008A0640A26070E97F6AF60700007368306A0E080000683C4B02687F68327562736AD50600006A0B080000683C4B026825684368444B008572140800006846877215080000527216080000284B014B034B03867217080000684D894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F721808000074721908000062682B682C687E4E756273683C4B02683D6AF9070000682B682C683E683F2981721A0800007D721B080000286842684368444B0085721C080000684687721D08000052721E080000284B014B0285721F080000684D894310000000000000F07F000000000000F07F72200800007472210800006268528868267D72220800008A0610C75F70E97F6A0B08000073683C4B026854684368444B008572230800006846877224080000527225080000284B014B024B02867226080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722708000074722808000062682B682C685B684368444B00857229080000684687722A08000052722B080000284B014B024B0286722C080000684D89432000000000000022C000000000000000000000000000A06740000000C0CA473B41722D08000074722E080000627562685B684368444B0085722F0800006846877230080000527231080000284B014B024B02867232080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72330800007472340800006275628A0640A26070E97F6AF607000075682D4B027562683C4B02687F6A11080000756268267D7235080000288A06E0645C70E97F6828298172360800007D723708000028682B682C682D4B02682E4B0268267D723808000068306AF4070000683C4B02687F6822298172390800007D723A0800002868254E68267D723B0800008A06E0645C70E97F6A3608000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986723C080000756275628A06204A5A70E97F6AF10700008A0680275B70E97F68282981723D0800007D723E08000028682B682C682D4B02682E4B0268267D723F08000068306AF4070000683C4B02687F6822298172400800007D72410800002868254E68267D72420800008A0680275B70E97F6A3D08000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB3333333333334867243080000756275628A06B0295C70E97F6828298172440800007D724508000028682B682C682D4B02682E4B0268267D724608000068306AF4070000683C4B02687F6822298172470800007D72480800002868254E68267D72490800008A06B0295C70E97F6A4408000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E3986724A080000756275628A0648205B70E97F68282981724B0800007D724C08000028682B682C682D4B02682E4B0268267D724D08000068306AF4070000683C4B02687F68222981724E0800007D724F0800002868254E68267D72500800008A0648205B70E97F6A4B08000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E39867251080000756275628A0678425A70E97F6828298172520800007D725308000028682B682C682D4B02682E4B0268267D725408000068306AF4070000683C4B02687F6822298172550800007D72560800002868254E68267D72570800008A0678425A70E97F6A5208000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB3333333333334867258080000756275628A06D0285B70E97F6828298172590800007D725A08000028682B682C682D4B02682E4B0268267D725B08000068306AF4070000683C4B02687F68222981725C0800007D725D0800002868254E68267D725E0800008A06D0285B70E97F6A5908000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB333333333333486725F080000756275628A06704B5A70E97F6828298172600800007D726108000028682B682C682D4B02682E4B0268267D726208000068306AF4070000683C4B02687F6822298172630800007D72640800002868254E68267D72650800008A06704B5A70E97F6A6008000073683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB33333333333348672660800007562756275683C4B026ABE0600004E682B682C6A9101000068327562683C4B02687F6AEE070000756273683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986726708000075628A0680206270E97F6822298172680800007D72690800002868254E68267D726A080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E3986726B08000075628A06B8CE6170E97F6AE50700008A06C8CA5A70E97F6AD70700008A0660285B70E97F6A5C0800008A0650155C70E97F68222981726C0800007D726D0800002868254E68267D726E080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB8E38E38E38E3986726F08000075628A0678C95A70E97F6AC90700008A06980FBA73E97F6A8A0700008A06B8375D70E97F6A2E0400008A06A8645870E97F6A550800008A0640226070E97F6AD00700008A0698485A70E97F6822298172700800007D72710800002868254E68267D72720800008A06D84D5A70E97F6828298172730800007D727408000028682B682C682D4B02682E4B0268267D727508000068306A56030000683C4B02687F6A70080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B0086727608000075628A06B8605D70E97F6822298172770800007D72780800002868254E68267D72790800008A0698615D70E97F68282981727A0800007D727B08000028682B682C682D4B02682E4B0268267D727C08000068306A56030000683C4B02687F6A77080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB33333333333344B0086727D08000075628A06E01B6170E97F68222981727E0800007D727F0800002868254E68267D7280080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB333333333333486728108000075628A06B0395B70E97F6822298172820800007D72830800002868254E68267D7284080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB333333333333486728508000075628A06D04F5A70E97F6A4E0800008A06F0675C70E97F6A470800008A06283F5B70E97F6822298172860800007D72870800002868254E68267D7288080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986728908000075628A0668665D70E97F68222981728A0800007D728B0800002868254E68267D728C0800008A06D8665D70E97F68282981728D0800007D728E08000028682B682C682D4B02682E4B0268267D728F08000068306A56030000683C4B02687F6A8A080000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B0086729008000075628A0640695D70E97F6822298172910800007D72920800002868254E68267D72930800008A06A8645D70E97F6828298172940800007D729508000028682B682C682D4B02682E4B0268267D729608000068306A56030000683C4B02687F6A91080000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB33333333333344B0086729708000075628A0660F86170E97F6822298172980800007D72990800002868254E68267D729A080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B0047BFB8E38E38E38E3986729B08000075628A0668F66170E97F6ABB0700008A0670245C70E97F68222981729C0800007D729D0800002868254E68267D729E0800008A0618255C70E97F68282981729F0800007D72A008000028682B682C682D4B02682E4B0268267D72A108000068306A56030000683C4B02687F6A9C080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672A208000075628A06284F5A70E97F6A630800008A06D0415A70E97F6A5C0300008A06986F5D70E97F6822298172A30800007D72A40800002868254E68267D72A50800008A06D86D5D70E97F6828298172A60800007D72A708000028682B682C682D4B02682E4B0268267D72A808000068306A56030000683C4B02687F6AA3080000756273683C4B016A5F0300006A60030000682B682C687E4E6A37040000473FB8E38E38E38E394B008672A908000075628A0638245C70E97F6822298172AA0800007D72AB0800002868254E68267D72AC0800008A06C8235C70E97F6828298172AD0800007D72AE08000028682B682C682D4B02682E4B0268267D72AF08000068306A56030000683C4B02687F6AAA080000756273683C4B016A5F0300006A60030000682B682C687E4E6A3704000047BFB8E38E38E38E394B008672B008000075628A06B81E6170E97F6822298172B10800007D72B20800002868254E68267D72B3080000683C4B016A5F0300006A60030000682B682C687E4E6A370400004B00473FB33333333333348672B408000075628A06A0265B70E97F6A400800008A0678296070E97F6ADE0700008A06B86E5C70E97F6A3908000075683C4B026825684368444B008572B508000068468772B60800005272B7080000284B014B034B038672B8080000684D89434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F72B90800007472BA08000062682B682C687E4E7562682B682C687E4E6A3704000047BFB33333333333344B008672BB080000756275628A0698615D70E97F6A7A0800008A06D84D5A70E97F6A730800008A06D86D5D70E97F6AA60800008A06A8645D70E97F6A940800008A06D8665D70E97F6A8D0800008A06C8235C70E97F6AAD0800008A0618255C70E97F6A9F08000075683C4B026ABE0600004E682B682C6A910100006AF607000075628A0630DD5470E97F6828298172BC0800007D72BD08000028682B682C682D4B02682E4B0268267D72BE0800008A06A0DD5470E97F6838298172BF0800007D72C00800002868267D72C1080000683C4B01683D6ABC080000682B682C683E683F298172C20800007D72C3080000286842684368444B008572C408000068468772C50800005272C6080000284B014B028572C7080000684D894310000000000000F07F000000000000F07F72C80800007472C90800006268528868267D72CA0800008A06A0DD5470E97F6ABF08000073683C4B016854684368444B008572CB08000068468772CC0800005272CD080000284B014B024B028672CE080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CF0800007472D008000062682B682C685B684368444B008572D108000068468772D20800005272D3080000284B014B024B028672D4080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D50800007472D6080000627562685B4E75627368306828298172D70800007D72D808000028682B682C682D4B02682E4B0268267D72D90800008A0630DD5470E97F6ABC0800007368306831298172DA0800007D72DB0800002868267D72DC0800008A06C0DC5470E97F6AD7080000736868683F298172DD0800007D72DE080000286842684368444B008572DF08000068468772E00800005272E1080000284B014B028572E2080000684D894310000000000000F07F000000000000F07F72E30800007472E40800006268528868267D72E50800008A0650DC5470E97F6ADA08000073683C4B016854684368444B008572E608000068468772E70800005272E8080000284B014B024B028672E9080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0800007472EB08000062682B682C685B684368444B008572EC08000068468772ED0800005272EE080000284B014B024B028672EF080000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00800007472F1080000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F20800007D72F30800002868267D72F40800008A06C0DC5470E97F6AD708000073683C4B026825684368444B008572F508000068468772F60800005272F7080000284B014B034B038672F8080000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F90800007472FA08000062682B682C687E4E75627562683C4B01687F683275628A0698315370E97F6828298172FB0800007D72FC08000028682B682C682D4B02682E4B0268267D72FD0800008A0608325370E97F6838298172FE0800007D72FF0800002868267D7200090000683C4B01683D6AFB080000682B682C683E683F298172010900007D7202090000286842684368444B008572030900006846877204090000527205090000284B014B02857206090000684D894310000000000000F07F000000000000F07F72070900007472080900006268528868267D72090900008A0608325370E97F6AFE08000073683C4B016854684368444B0085720A090000684687720B09000052720C090000284B014B024B0286720D090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720E09000074720F09000062682B682C685B684368444B008572100900006846877211090000527212090000284B014B024B02867213090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7214090000747215090000627562685B4E75627368306828298172160900007D721709000028682B682C682D4B02682E4B0268267D72180900008A0698315370E97F6AFB0800007368306831298172190900007D721A0900002868267D721B0900008A0628315370E97F6A16090000736868683F2981721C0900007D721D090000286842684368444B0085721E090000684687721F090000527220090000284B014B02857221090000684D894310000000000000F07F000000000000F07F72220900007472230900006268528868267D72240900008A06B8305370E97F6A1909000073683C4B016854684368444B008572250900006846877226090000527227090000284B014B024B02867228090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722909000074722A09000062682B682C685B684368444B0085722B090000684687722C09000052722D090000284B014B024B0286722E090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F090000747230090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172310900007D72320900002868267D72330900008A0628315370E97F6A1609000073683C4B026825684368444B008572340900006846877235090000527236090000284B014B034B03867237090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723809000074723909000062682B682C687E4E75627562683C4B01687F683275628A06707B5970E97F6A8C0100002981723A0900007D723B090000286A8F0100006A920100002981723C0900007D723D0900002868267D723E0900008A06707B5970E97F6A3A09000073683C4B01682B682C687E4E756268267D723F090000683C4B0168254E682B682C687E4E6A91010000683275628A06E06B5870E97F6828298172400900007D724109000028682B682C682D4B02682E4B0268267D72420900008A06104E5A70E97F6838298172430900007D72440900002868267D7245090000683C4B01683D6A40090000682B682C683E683F298172460900007D7247090000286842684368444B00857248090000684687724909000052724A090000284B014B0285724B090000684D894310000000000000F07F000000000000F07F724C09000074724D0900006268528868267D724E0900008A06104E5A70E97F6A4309000073683C4B016854684368444B0085724F0900006846877250090000527251090000284B014B024B02867252090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725309000074725409000062682B682C685B684368444B008572550900006846877256090000527257090000284B014B024B02867258090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F725909000074725A090000627562685B4E756273683068282981725B0900007D725C09000028682B682C682D4B02682E4B0268267D725D0900008A06E06B5870E97F6A4009000073683068312981725E0900007D725F0900002868267D72600900008A06F0C05970E97F6A5B090000736868683F298172610900007D7262090000286842684368444B008572630900006846877264090000527265090000284B014B02857266090000684D894310000000000000F07F000000000000F07F72670900007472680900006268528868267D72690900008A06D0CF5970E97F6A5E09000073683C4B016854684368444B0085726A090000684687726B09000052726C090000284B014B024B0286726D090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726E09000074726F09000062682B682C685B684368444B008572700900006846877271090000527272090000284B014B024B02867273090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7274090000747275090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172760900007D72770900002868267D72780900008A06F0C05970E97F6A5B09000073683C4B026825684368444B00857279090000684687727A09000052727B090000284B014B034B0386727C090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727D09000074727E09000062682B682C687E4E75627562683C4B01687F683275628A0650555470E97F68282981727F0900007D728009000028682B682C682D4B02682E4B0268267D72810900008A06C0555470E97F6838298172820900007D72830900002868267D7284090000683C4B01683D6A7F090000682B682C683E683F298172850900007D7286090000286842684368444B008572870900006846877288090000527289090000284B014B0285728A090000684D894310000000000000F07F000000000000F07F728B09000074728C0900006268528868267D728D0900008A06C0555470E97F6A8209000073683C4B016854684368444B0085728E090000684687728F090000527290090000284B014B024B02867291090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F729209000074729309000062682B682C685B684368444B008572940900006846877295090000527296090000284B014B024B02867297090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F7298090000747299090000627562685B4E756273683068282981729A0900007D729B09000028682B682C682D4B02682E4B0268267D729C0900008A0650555470E97F6A7F09000073683068312981729D0900007D729E0900002868267D729F0900008A06E0545470E97F6A9A090000736868683F298172A00900007D72A1090000286842684368444B008572A209000068468772A30900005272A4090000284B014B028572A5090000684D894310000000000000F07F000000000000F07F72A60900007472A70900006268528868267D72A80900008A0670545470E97F6A9D09000073683C4B016854684368444B008572A909000068468772AA0900005272AB090000284B014B024B028672AC090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AD0900007472AE09000062682B682C685B684368444B008572AF09000068468772B00900005272B1090000284B014B024B028672B2090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72B30900007472B4090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B50900007D72B60900002868267D72B70900008A06E0545470E97F6A9A09000073683C4B026825684368444B008572B809000068468772B90900005272BA090000284B014B034B038672BB090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BC0900007472BD09000062682B682C687E4E75627562683C4B01687F683275628A0640595570E97F6828298172BE0900007D72BF09000028682B682C682D4B02682E4B0268267D72C00900008A06B0595570E97F6838298172C10900007D72C20900002868267D72C3090000683C4B01683D6ABE090000682B682C683E683F298172C40900007D72C5090000286842684368444B008572C609000068468772C70900005272C8090000284B014B028572C9090000684D894310000000000000F07F000000000000F07F72CA0900007472CB0900006268528868267D72CC0900008A06B0595570E97F6AC109000073683C4B016854684368444B008572CD09000068468772CE0900005272CF090000284B014B024B028672D0090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D10900007472D209000062682B682C685B684368444B008572D309000068468772D40900005272D5090000284B014B024B028672D6090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D70900007472D8090000627562685B4E75627368306828298172D90900007D72DA09000028682B682C682D4B02682E4B0268267D72DB0900008A0640595570E97F6ABE0900007368306831298172DC0900007D72DD0900002868267D72DE0900008A06D0585570E97F6AD9090000736868683F298172DF0900007D72E0090000286842684368444B008572E109000068468772E20900005272E3090000284B014B028572E4090000684D894310000000000000F07F000000000000F07F72E50900007472E60900006268528868267D72E70900008A0660585570E97F6ADC09000073683C4B016854684368444B008572E809000068468772E90900005272EA090000284B014B024B028672EB090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EC0900007472ED09000062682B682C685B684368444B008572EE09000068468772EF0900005272F0090000284B014B024B028672F1090000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F20900007472F3090000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F40900007D72F50900002868267D72F60900008A06D0585570E97F6AD909000073683C4B026825684368444B008572F709000068468772F80900005272F9090000284B014B034B038672FA090000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72FB0900007472FC09000062682B682C687E4E75627562683C4B01687F683275628A0668BD5370E97F6828298172FD0900007D72FE09000028682B682C682D4B02682E4B0268267D72FF0900008A06D8BD5370E97F6838298172000A00007D72010A00002868267D72020A0000683C4B01683D6AFD090000682B682C683E683F298172030A00007D72040A0000286842684368444B008572050A000068468772060A00005272070A0000284B014B028572080A0000684D894310000000000000F07F000000000000F07F72090A000074720A0A00006268528868267D720B0A00008A06D8BD5370E97F6A000A000073683C4B016854684368444B0085720C0A0000684687720D0A000052720E0A0000284B014B024B0286720F0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72100A00007472110A000062682B682C685B684368444B008572120A000068468772130A00005272140A0000284B014B024B028672150A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72160A00007472170A0000627562685B4E75627368306828298172180A00007D72190A000028682B682C682D4B02682E4B0268267D721A0A00008A0668BD5370E97F6AFD09000073683068312981721B0A00007D721C0A00002868267D721D0A00008A06F8BC5370E97F6A180A0000736868683F2981721E0A00007D721F0A0000286842684368444B008572200A000068468772210A00005272220A0000284B014B028572230A0000684D894310000000000000F07F000000000000F07F72240A00007472250A00006268528868267D72260A00008A0688BC5370E97F6A1B0A000073683C4B016854684368444B008572270A000068468772280A00005272290A0000284B014B024B0286722A0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722B0A000074722C0A000062682B682C685B684368444B0085722D0A0000684687722E0A000052722F0A0000284B014B024B028672300A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72310A00007472320A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172330A00007D72340A00002868267D72350A00008A06F8BC5370E97F6A180A000073683C4B026825684368444B008572360A000068468772370A00005272380A0000284B014B034B038672390A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723A0A000074723B0A000062682B682C687E4E75627562683C4B01687F683275628A0638B45370E97F68282981723C0A00007D723D0A000028682B682C682D4B02682E4B0268267D723E0A00008A06A8B45370E97F68382981723F0A00007D72400A00002868267D72410A0000683C4B01683D6A3C0A0000682B682C683E683F298172420A00007D72430A0000286842684368444B008572440A000068468772450A00005272460A0000284B014B028572470A0000684D894310000000000000F07F000000000000F07F72480A00007472490A00006268528868267D724A0A00008A06A8B45370E97F6A3F0A000073683C4B016854684368444B0085724B0A0000684687724C0A000052724D0A0000284B014B024B0286724E0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724F0A00007472500A000062682B682C685B684368444B008572510A000068468772520A00005272530A0000284B014B024B028672540A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72550A00007472560A0000627562685B4E75627368306828298172570A00007D72580A000028682B682C682D4B02682E4B0268267D72590A00008A0638B45370E97F6A3C0A000073683068312981725A0A00007D725B0A00002868267D725C0A00008A06C8B35370E97F6A570A0000736868683F2981725D0A00007D725E0A0000286842684368444B0085725F0A000068468772600A00005272610A0000284B014B028572620A0000684D894310000000000000F07F000000000000F07F72630A00007472640A00006268528868267D72650A00008A0658B35370E97F6A5A0A000073683C4B016854684368444B008572660A000068468772670A00005272680A0000284B014B024B028672690A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726A0A000074726B0A000062682B682C685B684368444B0085726C0A0000684687726D0A000052726E0A0000284B014B024B0286726F0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72700A00007472710A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172720A00007D72730A00002868267D72740A00008A06C8B35370E97F6A570A000073683C4B026825684368444B008572750A000068468772760A00005272770A0000284B014B034B038672780A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72790A000074727A0A000062682B682C687E4E75627562683C4B01687F683275628A06385B5470E97F68282981727B0A00007D727C0A000028682B682C682D4B02682E4B0268267D727D0A00008A06A85B5470E97F68382981727E0A00007D727F0A00002868267D72800A0000683C4B01683D6A7B0A0000682B682C683E683F298172810A00007D72820A0000286842684368444B008572830A000068468772840A00005272850A0000284B014B028572860A0000684D894310000000000000F07F000000000000F07F72870A00007472880A00006268528868267D72890A00008A06A85B5470E97F6A7E0A000073683C4B016854684368444B0085728A0A0000684687728B0A000052728C0A0000284B014B024B0286728D0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728E0A000074728F0A000062682B682C685B684368444B008572900A000068468772910A00005272920A0000284B014B024B028672930A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72940A00007472950A0000627562685B4E75627368306828298172960A00007D72970A000028682B682C682D4B02682E4B0268267D72980A00008A06385B5470E97F6A7B0A00007368306831298172990A00007D729A0A00002868267D729B0A00008A06C85A5470E97F6A960A0000736868683F2981729C0A00007D729D0A0000286842684368444B0085729E0A0000684687729F0A00005272A00A0000284B014B028572A10A0000684D894310000000000000F07F000000000000F07F72A20A00007472A30A00006268528868267D72A40A00008A06585A5470E97F6A990A000073683C4B016854684368444B008572A50A000068468772A60A00005272A70A0000284B014B024B028672A80A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A90A00007472AA0A000062682B682C685B684368444B008572AB0A000068468772AC0A00005272AD0A0000284B014B024B028672AE0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AF0A00007472B00A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B10A00007D72B20A00002868267D72B30A00008A06C85A5470E97F6A960A000073683C4B026825684368444B008572B40A000068468772B50A00005272B60A0000284B014B034B038672B70A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B80A00007472B90A000062682B682C687E4E75627562683C4B01687F683275628A0670345370E97F6828298172BA0A00007D72BB0A000028682B682C682D4B02682E4B0268267D72BC0A00008A06E0345370E97F6838298172BD0A00007D72BE0A00002868267D72BF0A0000683C4B01683D6ABA0A0000682B682C683E683F298172C00A00007D72C10A0000286842684368444B008572C20A000068468772C30A00005272C40A0000284B014B028572C50A0000684D894310000000000000F07F000000000000F07F72C60A00007472C70A00006268528868267D72C80A00008A06E0345370E97F6ABD0A000073683C4B016854684368444B008572C90A000068468772CA0A00005272CB0A0000284B014B024B028672CC0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CD0A00007472CE0A000062682B682C685B684368444B008572CF0A000068468772D00A00005272D10A0000284B014B024B028672D20A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D30A00007472D40A0000627562685B4E75627368306828298172D50A00007D72D60A000028682B682C682D4B02682E4B0268267D72D70A00008A0670345370E97F6ABA0A00007368306831298172D80A00007D72D90A00002868267D72DA0A00008A0600345370E97F6AD50A0000736868683F298172DB0A00007D72DC0A0000286842684368444B008572DD0A000068468772DE0A00005272DF0A0000284B014B028572E00A0000684D894310000000000000F07F000000000000F07F72E10A00007472E20A00006268528868267D72E30A00008A0690335370E97F6AD80A000073683C4B016854684368444B008572E40A000068468772E50A00005272E60A0000284B014B024B028672E70A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72E80A00007472E90A000062682B682C685B684368444B008572EA0A000068468772EB0A00005272EC0A0000284B014B024B028672ED0A0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EE0A00007472EF0A0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F00A00007D72F10A00002868267D72F20A00008A0600345370E97F6AD50A000073683C4B026825684368444B008572F30A000068468772F40A00005272F50A0000284B014B034B038672F60A0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F70A00007472F80A000062682B682C687E4E75627562683C4B01687F683275628A06487E5270E97F6828298172F90A00007D72FA0A000028682B682C682D4B02682E4B0268267D72FB0A00008A06B87E5270E97F6838298172FC0A00007D72FD0A00002868267D72FE0A0000683C4B01683D6AF90A0000682B682C683E683F298172FF0A00007D72000B0000286842684368444B008572010B000068468772020B00005272030B0000284B014B028572040B0000684D894310000000000000F07F000000000000F07F72050B00007472060B00006268528868267D72070B00008A06B87E5270E97F6AFC0A000073683C4B016854684368444B008572080B000068468772090B000052720A0B0000284B014B024B0286720B0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720C0B000074720D0B000062682B682C685B684368444B0085720E0B0000684687720F0B00005272100B0000284B014B024B028672110B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72120B00007472130B0000627562685B4E75627368306828298172140B00007D72150B000028682B682C682D4B02682E4B0268267D72160B00008A06487E5270E97F6AF90A00007368306831298172170B00007D72180B00002868267D72190B00008A06D87D5270E97F6A140B0000736868683F2981721A0B00007D721B0B0000286842684368444B0085721C0B0000684687721D0B000052721E0B0000284B014B0285721F0B0000684D894310000000000000F07F000000000000F07F72200B00007472210B00006268528868267D72220B00008A06687D5270E97F6A170B000073683C4B016854684368444B008572230B000068468772240B00005272250B0000284B014B024B028672260B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72270B00007472280B000062682B682C685B684368444B008572290B0000684687722A0B000052722B0B0000284B014B024B0286722C0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722D0B000074722E0B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981722F0B00007D72300B00002868267D72310B00008A06D87D5270E97F6A140B000073683C4B026825684368444B008572320B000068468772330B00005272340B0000284B014B034B038672350B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72360B00007472370B000062682B682C687E4E75627562683C4B01687F683275628A0628785270E97F6828298172380B00007D72390B000028682B682C682D4B02682E4B0268267D723A0B00008A0698785270E97F68382981723B0B00007D723C0B00002868267D723D0B0000683C4B01683D6A380B0000682B682C683E683F2981723E0B00007D723F0B0000286842684368444B008572400B000068468772410B00005272420B0000284B014B028572430B0000684D894310000000000000F07F000000000000F07F72440B00007472450B00006268528868267D72460B00008A0698785270E97F6A3B0B000073683C4B016854684368444B008572470B000068468772480B00005272490B0000284B014B024B0286724A0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724B0B000074724C0B000062682B682C685B684368444B0085724D0B0000684687724E0B000052724F0B0000284B014B024B028672500B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72510B00007472520B0000627562685B4E75627368306828298172530B00007D72540B000028682B682C682D4B02682E4B0268267D72550B00008A0628785270E97F6A380B00007368306831298172560B00007D72570B00002868267D72580B00008A06B8775270E97F6A530B0000736868683F298172590B00007D725A0B0000286842684368444B0085725B0B0000684687725C0B000052725D0B0000284B014B0285725E0B0000684D894310000000000000F07F000000000000F07F725F0B00007472600B00006268528868267D72610B00008A0648775270E97F6A560B000073683C4B016854684368444B008572620B000068468772630B00005272640B0000284B014B024B028672650B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72660B00007472670B000062682B682C685B684368444B008572680B000068468772690B000052726A0B0000284B014B024B0286726B0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726C0B000074726D0B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981726E0B00007D726F0B00002868267D72700B00008A06B8775270E97F6A530B000073683C4B026825684368444B008572710B000068468772720B00005272730B0000284B014B034B038672740B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72750B00007472760B000062682B682C687E4E75627562683C4B01687F683275628A06A06D5C70E97F6828298172770B00007D72780B000028682B682C682D4B02682E4B0268267D72790B00008A06B0625C70E97F68382981727A0B00007D727B0B00002868267D727C0B0000683C4B01683D6A770B0000682B682C683E683F2981727D0B00007D727E0B0000286842684368444B0085727F0B000068468772800B00005272810B0000284B014B028572820B0000684D894310000000000000F07F000000000000F07F72830B00007472840B00006268528868267D72850B00008A06B0625C70E97F6A7A0B000073683C4B016854684368444B008572860B000068468772870B00005272880B0000284B014B024B028672890B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728A0B000074728B0B000062682B682C685B684368444B0085728C0B0000684687728D0B000052728E0B0000284B014B024B0286728F0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72900B00007472910B0000627562685B4E75627368306828298172920B00007D72930B000028682B682C682D4B02682E4B0268267D72940B00008A06A06D5C70E97F6A770B00007368306831298172950B00007D72960B00002868267D72970B00008A0670645C70E97F6A920B0000736868683F298172980B00007D72990B0000286842684368444B0085729A0B0000684687729B0B000052729C0B0000284B014B0285729D0B0000684D894310000000000000F07F000000000000F07F729E0B000074729F0B00006268528868267D72A00B00008A06582A5970E97F6A950B000073683C4B016854684368444B008572A10B000068468772A20B00005272A30B0000284B014B024B028672A40B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A50B00007472A60B000062682B682C685B684368444B008572A70B000068468772A80B00005272A90B0000284B014B024B028672AA0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0B00007472AC0B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172AD0B00007D72AE0B00002868267D72AF0B00008A0670645C70E97F6A920B000073683C4B026825684368444B008572B00B000068468772B10B00005272B20B0000284B014B034B038672B30B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B40B00007472B50B000062682B682C687E4E75627562683C4B01687F683275628A06C0755970E97F6A8C010000298172B60B00007D72B70B0000286A8F010000683268267D72B80B0000683C4B0168254E682B682C687E4E6A910100006A92010000298172B90B00007D72BA0B00002868267D72BB0B00008A06C0755970E97F6AB60B000073683C4B01682B682C687E4E756275628A0660AF6070E97F6AF40700008A0678A96070E97F6A110800008A0658BA5370E97F6828298172BC0B00007D72BD0B000028682B682C682D4B02682E4B0268267D72BE0B00008A06C8BA5370E97F6838298172BF0B00007D72C00B00002868267D72C10B0000683C4B01683D6ABC0B0000682B682C683E683F298172C20B00007D72C30B0000286842684368444B008572C40B000068468772C50B00005272C60B0000284B014B028572C70B0000684D894310000000000000F07F000000000000F07F72C80B00007472C90B00006268528868267D72CA0B00008A06C8BA5370E97F6ABF0B000073683C4B016854684368444B008572CB0B000068468772CC0B00005272CD0B0000284B014B024B028672CE0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72CF0B00007472D00B000062682B682C685B684368444B008572D10B000068468772D20B00005272D30B0000284B014B024B028672D40B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72D50B00007472D60B0000627562685B4E75627368306828298172D70B00007D72D80B000028682B682C682D4B02682E4B0268267D72D90B00008A0658BA5370E97F6ABC0B00007368306831298172DA0B00007D72DB0B00002868267D72DC0B00008A06E8B95370E97F6AD70B0000736868683F298172DD0B00007D72DE0B0000286842684368444B008572DF0B000068468772E00B00005272E10B0000284B014B028572E20B0000684D894310000000000000F07F000000000000F07F72E30B00007472E40B00006268528868267D72E50B00008A0678B95370E97F6ADA0B000073683C4B016854684368444B008572E60B000068468772E70B00005272E80B0000284B014B024B028672E90B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0B00007472EB0B000062682B682C685B684368444B008572EC0B000068468772ED0B00005272EE0B0000284B014B024B028672EF0B0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72F00B00007472F10B0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F20B00007D72F30B00002868267D72F40B00008A06E8B95370E97F6AD70B000073683C4B026825684368444B008572F50B000068468772F60B00005272F70B0000284B014B034B038672F80B0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F90B00007472FA0B000062682B682C687E4E75627562683C4B01687F683275628A06F82C5C70E97F6828298172FB0B00007D72FC0B000028682B682C682D4B02682E4B0268267D72FD0B00008A06682D5C70E97F6838298172FE0B00007D72FF0B00002868267D72000C0000683C4B01683D6AFB0B0000682B682C683E683F298172010C00007D72020C0000286842684368444B008572030C000068468772040C00005272050C0000284B014B028572060C0000684D894310000000000000F07F000000000000F07F72070C00007472080C00006268528868267D72090C00008A06682D5C70E97F6AFE0B000073683C4B016854684368444B0085720A0C0000684687720B0C000052720C0C0000284B014B024B0286720D0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F720E0C000074720F0C000062682B682C685B684368444B008572100C000068468772110C00005272120C0000284B014B024B028672130C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72140C00007472150C0000627562685B4E75627368306828298172160C00007D72170C000028682B682C682D4B02682E4B0268267D72180C00008A06F82C5C70E97F6AFB0B00007368306831298172190C00007D721A0C00002868267D721B0C00008A0638745270E97F6A160C0000736868683F2981721C0C00007D721D0C0000286842684368444B0085721E0C0000684687721F0C00005272200C0000284B014B028572210C0000684D894310000000000000F07F000000000000F07F72220C00007472230C00006268528868267D72240C00008A06C8735270E97F6A190C000073683C4B016854684368444B008572250C000068468772260C00005272270C0000284B014B024B028672280C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72290C000074722A0C000062682B682C685B684368444B0085722B0C0000684687722C0C000052722D0C0000284B014B024B0286722E0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F722F0C00007472300C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172310C00007D72320C00002868267D72330C00008A0638745270E97F6A160C000073683C4B026825684368444B008572340C000068468772350C00005272360C0000284B014B034B038672370C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72380C00007472390C000062682B682C687E4E75627562683C4B01687F683275628A0618755270E97F68282981723A0C00007D723B0C000028682B682C682D4B02682E4B0268267D723C0C00008A0688755270E97F68382981723D0C00007D723E0C00002868267D723F0C0000683C4B01683D6A3A0C0000682B682C683E683F298172400C00007D72410C0000286842684368444B008572420C000068468772430C00005272440C0000284B014B028572450C0000684D894310000000000000F07F000000000000F07F72460C00007472470C00006268528868267D72480C00008A0688755270E97F6A3D0C000073683C4B016854684368444B008572490C0000684687724A0C000052724B0C0000284B014B024B0286724C0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F724D0C000074724E0C000062682B682C685B684368444B0085724F0C000068468772500C00005272510C0000284B014B024B028672520C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72530C00007472540C0000627562685B4E75627368306828298172550C00007D72560C000028682B682C682D4B02682E4B0268267D72570C00008A0618755270E97F6A3A0C00007368306831298172580C00007D72590C00002868267D725A0C00008A06A8745270E97F6A550C0000736868683F2981725B0C00007D725C0C0000286842684368444B0085725D0C0000684687725E0C000052725F0C0000284B014B028572600C0000684D894310000000000000F07F000000000000F07F72610C00007472620C00006268528868267D72630C00008A06A84B5A70E97F6A580C000073683C4B016854684368444B008572640C000068468772650C00005272660C0000284B014B024B028672670C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72680C00007472690C000062682B682C685B684368444B0085726A0C0000684687726B0C000052726C0C0000284B014B024B0286726D0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F726E0C000074726F0C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172700C00007D72710C00002868267D72720C00008A06A8745270E97F6A550C000073683C4B026825684368444B008572730C000068468772740C00005272750C0000284B014B034B038672760C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72770C00007472780C000062682B682C687E4E75627562683C4B01687F683275628A0628B15370E97F6828298172790C00007D727A0C000028682B682C682D4B02682E4B0268267D727B0C00008A0698B15370E97F68382981727C0C00007D727D0C00002868267D727E0C0000683C4B01683D6A790C0000682B682C683E683F2981727F0C00007D72800C0000286842684368444B008572810C000068468772820C00005272830C0000284B014B028572840C0000684D894310000000000000F07F000000000000F07F72850C00007472860C00006268528868267D72870C00008A0698B15370E97F6A7C0C000073683C4B016854684368444B008572880C000068468772890C000052728A0C0000284B014B024B0286728B0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F728C0C000074728D0C000062682B682C685B684368444B0085728E0C0000684687728F0C00005272900C0000284B014B024B028672910C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72920C00007472930C0000627562685B4E75627368306828298172940C00007D72950C000028682B682C682D4B02682E4B0268267D72960C00008A0628B15370E97F6A790C00007368306831298172970C00007D72980C00002868267D72990C00008A06B8B05370E97F6A940C0000736868683F2981729A0C00007D729B0C0000286842684368444B0085729C0C0000684687729D0C000052729E0C0000284B014B0285729F0C0000684D894310000000000000F07F000000000000F07F72A00C00007472A10C00006268528868267D72A20C00008A0648B05370E97F6A970C000073683C4B016854684368444B008572A30C000068468772A40C00005272A50C0000284B014B024B028672A60C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72A70C00007472A80C000062682B682C685B684368444B008572A90C000068468772AA0C00005272AB0C0000284B014B024B028672AC0C0000684D89432000000000000000000000000000000000000000000000F03F000000000000F03F72AD0C00007472AE0C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172AF0C00007D72B00C00002868267D72B10C00008A06B8B05370E97F6A940C000073683C4B026825684368444B008572B20C000068468772B30C00005272B40C0000284B014B034B038672B50C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B60C00007472B70C000062682B682C687E4E75627562683C4B01687F683275627568686A72070000683C4B0168254E682B682C687E4E7562683C4B01687F682375628A06302D5B70E97F6A890100008A06A02D5B70E97F6A4701000075683C4B016A5F0300006A60030000682B682C687E4E6A37040000470000000000000000473FB55555555555558672B80C0000756258070000007061746368657372B90C00005D72BA0C000028636D6174706C6F746C69622E706174636865730A52656374616E676C650A72BB0C0000298172BC0C00007D72BD0C00002868034E6805896806680168074E68086A820900006809680A5D72BE0C00005D72BF0C0000636E756D70792E636F72652E6D756C746961727261790A7363616C61720A72C00C0000684D4308000000000000000072C10C00008672C20C00005272C30C0000618672C40C00008172C50C000058090000005F636C69707061746872C60C00004E58060000005F7374616C6572C70C000088580D0000005F7472616E73666F726D53657472C80C00008858060000005F616E676C6572C90C0000470000000000000000580C0000005F616E7469616C696173656472CA0C000088580A0000005F75735F64617368657372CB0C00004E4E8672CC0C000058050000005F66696C6C72CD0C0000886A9101000047000000000000000058050000005F736E617072CE0C00004E58080000005F76697369626C6572CF0C000088580E0000005F70726F706F627365727665727372D00C00007D72D10C0000580A0000005F6C696E657374796C6572D20C00005805000000736F6C696472D30C000058060000005F776964746872D40C000047403200000000000058070000005F68656967687472D50C0000474139FB3B0000000058060000005F6C6162656C72D60C0000580A0000005F6E6F6C6567656E645F72D70C000058060000005F686174636872D80C00004E580F0000005F726563745F7472616E73666F726D72D90C00006828298172DA0C00007D72DB0C000028682B682C682D4B02682E4B0268267D72DC0C000068306831298172DD0C00007D72DE0C00002868267D72DF0C00008A06B0525470E97F6ADA0C0000736868683F298172E00C00007D72E10C0000286842684368444B008572E20C000068468772E30C00005272E40C0000284B014B028572E50C0000684D894310000000000000F07F000000000000F07F72E60C00007472E70C00006268528868267D72E80C00008A0660585470E97F6ADD0C000073683C4B016854684368444B008572E90C000068468772EA0C00005272EB0C0000284B014B024B028672EC0C0000684D894320000000000000000000000000000000000000000000003240000000003BFB394172ED0C00007472EE0C000062682B682C685B684368444B008572EF0C000068468772F00C00005272F10C0000284B014B024B028672F20C0000684D894320000000000000000000000000000000000000000000003240000000003BFB394172F30C00007472F40C0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172F50C00007D72F60C00002868267D72F70C00008A06B0525470E97F6ADA0C000073683C4B006825684368444B008572F80C000068468772F90C00005272FA0C0000284B014B034B038672FB0C0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72FC0C00007472FD0C000062682B682C687E4E7562756258070000005F64617368657372FE0C00004E58040000005F75726C72FF0C00004E58040000005F67696472000D00004E683D6AF6070000580A0000005F6C696E65776964746872010D0000473FF00000000000006A8F010000470000000000000000580B0000005F646173686F666673657472020D00004E58070000005F636C69706F6E72030D00008858090000005F636F6E7461696E7372040D00004E58130000005F6F726967696E616C5F65646765636F6C6F7272050D00004E58090000005F6361707374796C6572060D000058040000006275747472070D0000580D0000005F706174685F6566666563747372080D00005D72090D0000580E0000005F72656D6F76655F6D6574686F64720A0D00004E58130000005F636F6D62696E65645F7472616E73666F726D720B0D00006A920100002981720C0D00007D720D0D00002868267D720E0D0000683C4B01682B682C687E4E756258040000005F6F6964720F0D00004B00580A0000005F6A6F696E7374796C6572100D000058050000006D6974657272110D0000580E0000007374616C655F63616C6C6261636B72120D00004E580A0000005F65646765636F6C6F7272130D0000284700000000000000004700000000000000004700000000000000004700000000000000007472140D000058060000005F616C70686172150D00004E580B0000005F6167675F66696C74657272160D00004E58130000005F6F726967696E616C5F66616365636F6C6F7272170D0000684368444B008572180D000068468772190D000052721A0D0000284B014B0485721B0D0000684D8943201F1F1F1F1F1FBF3FDEDDDDDDDDDDDD3F979696969696E63F000000000000F03F721C0D000074721D0D000062580A0000005F66616365636F6C6F72721E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074721F0D000058050000005F6178657372200D0000681D58090000005F616E696D6174656472210D000089580A0000005F6D6F7573656F76657272220D000089580B0000005F726173746572697A656472230D00004E75626ABB0C0000298172240D00007D72250D00002868034E6805896806680168074E68086A7E0A00006809680A5D72260D00005D72270D00006AC00C0000684D4308000000000000000072280D00008672290D000052722A0D00006186722B0D000081722C0D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E86722D0D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D722E0D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C0000474090C400000000006AD60C00006AD70C00006AD80C00004E6AD90C000068282981722F0D00007D72300D000028682B682C682D4B02682E4B0268267D72310D000068306831298172320D00007D72330D00002868267D72340D00008A0678595470E97F6A2F0D0000736868683F298172350D00007D72360D0000286842684368444B008572370D000068468772380D00005272390D0000284B014B0285723A0D0000684D894310000000000000F07F000000000000F07F723B0D000074723C0D00006268528868267D723D0D00008A06485E5470E97F6A320D000073683C4B016854684368444B0085723E0D0000684687723F0D00005272400D0000284B014B024B028672410D0000684D8943200000000000003240000000000000000000000000000042400000000000C4904072420D00007472430D000062682B682C685B684368444B008572440D000068468772450D00005272460D0000284B014B024B028672470D0000684D8943200000000000003240000000000000000000000000000042400000000000C4904072480D00007472490D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981724A0D00007D724B0D00002868267D724C0D00008A0678595470E97F6A2F0D000073683C4B006825684368444B0085724D0D0000684687724E0D000052724F0D0000284B014B034B038672500D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72510D00007472520D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740320000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472530D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172540D00007D72550D00002868267D72560D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272570D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472580D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172590D00007D725A0D00002868034E6805896806680168074E680868396809680A5D725B0D00005D725C0D00006AC00C0000684D43080000000000000000725D0D000086725E0D000052725F0D0000618672600D00008172610D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672620D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72630D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C0000474058C000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172640D00007D72650D000028682B682C682D4B02682E4B0268267D72660D000068306831298172670D00007D72680D00002868267D72690D00008A06605F5470E97F6A640D0000736868683F2981726A0D00007D726B0D0000286842684368444B0085726C0D0000684687726D0D000052726E0D0000284B014B0285726F0D0000684D894310000000000000F07F000000000000F07F72700D00007472710D00006268528868267D72720D00008A0670D45470E97F6A670D000073683C4B016854684368444B008572730D000068468772740D00005272750D0000284B014B024B028672760D0000684D894320000000000000424000000000000000000000000000004B400000000000C0584072770D00007472780D000062682B682C685B684368444B008572790D0000684687727A0D000052727B0D0000284B014B024B0286727C0D0000684D894320000000000000424000000000000000000000000000004B400000000000C05840727D0D000074727E0D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981727F0D00007D72800D00002868267D72810D00008A06605F5470E97F6A640D000073683C4B006825684368444B008572820D000068468772830D00005272840D0000284B014B034B038672850D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72860D00007472870D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740420000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472880D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172890D00007D728A0D00002868267D728B0D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D69746572728C0D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074728D0D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C00002981728E0D00007D728F0D00002868034E6805896806680168074E680868CC6809680A5D72900D00005D72910D00006AC00C0000684D4308000000000000000072920D00008672930D00005272940D0000618672950D00008172960D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672970D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72980D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740438000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172990D00007D729A0D000028682B682C682D4B02682E4B0268267D729B0D0000683068312981729C0D00007D729D0D00002868267D729E0D00008A0688D55470E97F6A990D0000736868683F2981729F0D00007D72A00D0000286842684368444B008572A10D000068468772A20D00005272A30D0000284B014B028572A40D0000684D894310000000000000F07F000000000000F07F72A50D00007472A60D00006268528868267D72A70D00008A0658DA5470E97F6A9C0D000073683C4B016854684368444B008572A80D000068468772A90D00005272AA0D0000284B014B024B028672AB0D0000684D8943200000000000004B4000000000000000000000000000005240000000000080434072AC0D00007472AD0D000062682B682C685B684368444B008572AE0D000068468772AF0D00005272B00D0000284B014B024B028672B10D0000684D8943200000000000004B4000000000000000000000000000005240000000000080434072B20D00007472B30D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172B40D00007D72B50D00002868267D72B60D00008A0688D55470E97F6A990D000073683C4B006825684368444B008572B70D000068468772B80D00005272B90D0000284B014B034B038672BA0D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BB0D00007472BC0D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F01000047404B0000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472BD0D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172BE0D00007D72BF0D00002868267D72C00D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272C10D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472C20D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172C30D00007D72C40D00002868034E6805896806680168074E68086ABF0800006809680A5D72C50D00005D72C60D00006AC00C0000684D4308000000000000000072C70D00008672C80D00005272C90D0000618672CA0D00008172CB0D00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672CC0D00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72CD0D00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740280000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172CE0D00007D72CF0D000028682B682C682D4B02682E4B0268267D72D00D000068306831298172D10D00007D72D20D00002868267D72D30D00008A0670DB5470E97F6ACE0D0000736868683F298172D40D00007D72D50D0000286842684368444B008572D60D000068468772D70D00005272D80D0000284B014B028572D90D0000684D894310000000000000F07F000000000000F07F72DA0D00007472DB0D00006268528868267D72DC0D00008A0680505570E97F6AD10D000073683C4B016854684368444B008572DD0D000068468772DE0D00005272DF0D0000284B014B024B028672E00D0000684D894320000000000000524000000000000000000000000000805640000000000000284072E10D00007472E20D000062682B682C685B684368444B008572E30D000068468772E40D00005272E50D0000284B014B024B028672E60D0000684D894320000000000000524000000000000000000000000000805640000000000000284072E70D00007472E80D0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172E90D00007D72EA0D00002868267D72EB0D00008A0670DB5470E97F6ACE0D000073683C4B006825684368444B008572EC0D000068468772ED0D00005272EE0D0000284B014B034B038672EF0D0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72F00D00007472F10D000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740520000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472F20D00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172F30D00007D72F40D00002868267D72F50D0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272F60D00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472F70D00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172F80D00007D72F90D00002868034E6805896806680168074E6808688D6809680A5D72FA0D00005D72FB0D00006AC00C0000684D4308000000000000000072FC0D00008672FD0D00005272FE0D0000618672FF0D00008172000E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672010E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72020E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740260000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172030E00007D72040E000028682B682C682D4B02682E4B0268267D72050E000068306831298172060E00007D72070E00002868267D72080E00008A06A8DB5470E97F6A030E0000736868683F298172090E00007D720A0E0000286842684368444B0085720B0E0000684687720C0E000052720D0E0000284B014B0285720E0E0000684D894310000000000000F07F000000000000F07F720F0E00007472100E00006268528868267D72110E00008A0668565570E97F6A060E000073683C4B016854684368444B008572120E000068468772130E00005272140E0000284B014B024B028672150E0000684D894320000000000080564000000000000000000000000000005B40000000000000264072160E00007472170E000062682B682C685B684368444B008572180E000068468772190E000052721A0E0000284B014B024B0286721B0E0000684D894320000000000080564000000000000000000000000000005B400000000000002640721C0E000074721D0E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F68802981721E0E00007D721F0E00002868267D72200E00008A06A8DB5470E97F6A030E000073683C4B006825684368444B008572210E000068468772220E00005272230E0000284B014B034B038672240E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72250E00007472260E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740568000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472270E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172280E00007D72290E00002868267D722A0E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D69746572722B0E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074722C0E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C00002981722D0E00007D722E0E00002868034E6805896806680168074E68086AC10900006809680A5D722F0E00005D72300E00006AC00C0000684D4308000000000000000072310E00008672320E00005272330E0000618672340E00008172350E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672360E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72370E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740000000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172380E00007D72390E000028682B682C682D4B02682E4B0268267D723A0E0000683068312981723B0E00007D723C0E00002868267D723D0E00008A0680575570E97F6A380E0000736868683F2981723E0E00007D723F0E0000286842684368444B008572400E000068468772410E00005272420E0000284B014B028572430E0000684D894310000000000000F07F000000000000F07F72440E00007472450E00006268528868267D72460E00008A06505C5570E97F6A3B0E000073683C4B016854684368444B008572470E000068468772480E00005272490E0000284B014B024B0286724A0E0000684D8943200000000000005B4000000000000000000000000000805F400000000000000040724B0E000074724C0E000062682B682C685B684368444B0085724D0E0000684687724E0E000052724F0E0000284B014B024B028672500E0000684D8943200000000000005B4000000000000000000000000000805F40000000000000004072510E00007472520E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172530E00007D72540E00002868267D72550E00008A0680575570E97F6A380E000073683C4B006825684368444B008572560E000068468772570E00005272580E0000284B014B034B038672590E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725A0E000074725B0E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F01000047405B0000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D0000580400000062757474725C0E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A920100002981725D0E00007D725E0E00002868267D725F0E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272600E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472610E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172620E00007D72630E00002868034E6805896806680168074E68086A950200006809680A5D72640E00005D72650E00006AC00C0000684D4308000000000000000072660E00008672670E00005272680E0000618672690E000081726A0E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E86726B0E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D726C0E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C0000473FF00000000000006AD60C00006AD70C00006AD80C00004E6AD90C000068282981726D0E00007D726E0E000028682B682C682D4B02682E4B0268267D726F0E000068306831298172700E00007D72710E00002868267D72720E00008A0610675870E97F6A6D0E0000736868683F298172730E00007D72740E0000286842684368444B008572750E000068468772760E00005272770E0000284B014B028572780E0000684D894310000000000000F07F000000000000F07F72790E000074727A0E00006268528868267D727B0E00008A06D0615C70E97F6A700E000073683C4B016854684368444B0085727C0E0000684687727D0E000052727E0E0000284B014B024B0286727F0E0000684D8943200000000000805F4000000000000000000000000000006240000000000000F03F72800E00007472810E000062682B682C685B684368444B008572820E000068468772830E00005272840E0000284B014B024B028672850E0000684D8943200000000000805F4000000000000000000000000000006240000000000000F03F72860E00007472870E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172880E00007D72890E00002868267D728A0E00008A0610675870E97F6A6D0E000073683C4B006825684368444B0085728B0E0000684687728C0E000052728D0E0000284B014B034B0386728E0E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728F0E00007472900E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F01000047405F8000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472910E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172920E00007D72930E00002868267D72940E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272950E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472960E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172970E00007D72980E00002868034E6805896806680168074E68086A990100006809680A5D72990E00005D729A0E00006AC00C0000684D43080000000000000000729B0E000086729C0E000052729D0E00006186729E0E000081729F0E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672A00E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72A10E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740080000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172A20E00007D72A30E000028682B682C682D4B02682E4B0268267D72A40E000068306831298172A50E00007D72A60E00002868267D72A70E00008A0640695C70E97F6AA20E0000736868683F298172A80E00007D72A90E0000286842684368444B008572AA0E000068468772AB0E00005272AC0E0000284B014B028572AD0E0000684D894310000000000000F07F000000000000F07F72AE0E00007472AF0E00006268528868267D72B00E00008A0650A55B70E97F6AA50E000073683C4B016854684368444B008572B10E000068468772B20E00005272B30E0000284B014B024B028672B40E0000684D894320000000000000624000000000000000000000000000406440000000000000084072B50E00007472B60E000062682B682C685B684368444B008572B70E000068468772B80E00005272B90E0000284B014B024B028672BA0E0000684D894320000000000000624000000000000000000000000000406440000000000000084072BB0E00007472BC0E0000627562683C4B0168254E682B682C687E4E7562683C4B01687F6880298172BD0E00007D72BE0E00002868267D72BF0E00008A0640695C70E97F6AA20E000073683C4B006825684368444B008572C00E000068468772C10E00005272C20E0000284B014B034B038672C30E0000684D894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C40E00007472C50E000062682B682C687E4E756275626AFE0C00004E6AFF0C00004E6A000D00004E683D6AF60700006A010D0000473FF00000000000006A8F0100004740620000000000006A020D00004E6A030D0000886A040D00004E6A050D00004E6A060D000058040000006275747472C60E00006A080D00006A090D00006A0A0D00004E6A0B0D00006A92010000298172C70E00007D72C80E00002868267D72C90E0000683C4B01682B682C687E4E75626A0F0D00004B006A100D000058050000006D6974657272CA0E00006A120D00004E6A130D00006A140D00006A150D00004E6A160D00004E6A170D00006A1A0D00006A1E0D000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472CB0E00006A200D0000681D6A210D0000896A220D0000896A230D00004E75626ABB0C0000298172CC0E00007D72CD0E00002868034E6805896806680168074E68086A170200006809680A5D72CE0E00005D72CF0E00006AC00C0000684D4308000000000000000072D00E00008672D10E00005272D20E0000618672D30E00008172D40E00006AC60C00004E6AC70C0000886AC80C0000886AC90C00004700000000000000006ACA0C0000886ACB0C00004E4E8672D50E00006ACD0C0000886A910100004700000000000000006ACE0C00004E6ACF0C0000886AD00C00007D72D60E00006AD20C00006AD30C00006AD40C00004740320000000000006AD50C00004740000000000000006AD60C00006AD70C00006AD80C00004E6AD90C00006828298172D70E00007D72D80E000028682B682C682D4B02682E4B0268267D72D90E000068306831298172DA0E00007D72DB0E00002868267D72DC0E00008A06A0C65F70E97F6AD70E0000736868683F298172DD0E00007D72DE0E0000286842684368444B008572DF0E000068468772E00E00005272E10E0000284B014B028572E20E0000684D894310000000000000F07F000000000000F07F72E30E00007472E40E0000
0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B03636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A0628216270E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A06C0555570E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A7135298171367D71372858020000005F7871386828298171397D713A28682B682C682D4B02682E4B0268267D713B288A06C0555570E97F68368A06A8545570E97F68352981713C7D713D286838683268267D713E288A06C0B55370E97F68282981713F7D714028682B682C682D4B02682E4B0268267D71416830683C58080000005F696E76616C696471424B0258020000005F6271436822298171447D71452868254E68267D71468A06C0B55370E97F683F7368424B01580C0000005F7363616C655F7472616E737147636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A7148298171497D714A2868267D714B288A06C02CBB73E97F68222981714C7D714D2868254E68267D714E8A06002BBB73E97F68282981714F7D715028682B682C682D4B02682E4B0268267D71516830683668424B026843684C75627368424B0168476849682B682C58090000005F696E76657274656471524E58020000005F7471534B00473FB8E38E38E38E3986715475628A06C0755270E97F6822298171557D71562868254E68267D71578A0688755270E97F6828298171587D715928682B682C682D4B02682E4B0268267D715A683068352981715B7D715C28683868312981715D7D715E2868267D715F288A06802E5B70E97F6828298171607D716128682B682C682D4B02682E4B0268267D71628A06102E5B70E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7163298171647D71652868267D716668424B01580A0000005F7472616E73666F726D71676860682B682C58050000005F62626F787168636D6174706C6F746C69622E7472616E73666F726D730A42626F780A71692981716A7D716B2858070000005F6D696E706F73716C636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A716D636E756D70790A6E6461727261790A716E4B0085716F4301627170877171527172284B014B02857173636E756D70790A64747970650A71745802000000663871754B004B01877176527177284B0358010000003C71784E4E4E4AFFFFFFFF4AFFFFFFFF4B0074717962894310000000000000F07F000000000000F07F717A74717B6258070000005F69676E6F7265717C8868267D717D8A06102E5B70E97F68647368424B01580C0000005F706F696E74735F6F726967717E686D686E4B0085717F6870877180527181284B014B024B02867182687789432000000000000000000000000000000000000000000000F03F000000000000F03F718374718462682B682C58070000005F706F696E74737185686D686E4B008571866870877187527188284B014B024B02867189687789432000000000000000000000000000000000000000000000F03F000000000000F03F718A74718B62756268854E756273683068282981718C7D718D28682B682C682D4B02682E4B0268267D718E8A06802E5B70E97F686073683068312981718F7D71902868267D71918A06B8475A70E97F688C7358070000005F626F786F757471926869298171937D719428686C686D686E4B008571956870877196527197284B014B028571986877894310000000000000F07F000000000000F07F719974719A62687C8868267D719B8A06882C5B70E97F688F7368424B01687E686D686E4B0085719C687087719D52719E284B014B024B0286719F687789432000000000000000000000000000000000000000000000F03F000000000000F03F71A07471A162682B682C6885686D686E4B008571A268708771A35271A4284B014B024B028671A5687789432000000000000000000000000000000000000000000000F03F000000000000F03F71A67471A762756268424B0168254E682B682C68524E756268424B0168436848298171A87D71A92868267D71AA8A06B8475A70E97F688C7368424B026825686D686E4B008571AB68708771AC5271AD284B014B034B038671AE6877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71AF7471B062682B682C68524E7562756268424B016843685D75628A06C0755970E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A71B1298171B27D71B3286838685D68267D71B468424B0168254E682B682C68524E58020000005F7971B5636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A71B6298171B77D71B82868267D71B98A06C0755970E97F68B27368424B01682B682C68524E756275628A06681D6170E97F6828298171BA7D71BB28682B682C682D4B02682E4B0268267D71BC8A06B0126170E97F6863298171BD7D71BE2868267D71BF68424B01686768BA682B682C68686869298171C07D71C128686C686D686E4B008571C268708771C35271C4284B014B028571C56877894310000000000000F07F000000000000F07F71C67471C762687C8868267D71C88A06B0126170E97F68BD7368424B01687E686D686E4B008571C968708771CA5271CB284B014B024B028671CC687789432000000000000000000000000000000000000000000000F03F000000000000F03F71CD7471CE62682B682C6885686D686E4B008571CF68708771D05271D1284B014B024B028671D2687789432000000000000000000000000000000000000000000000F03F000000000000F03F71D37471D462756268854E75627368306828298171D57D71D628682B682C682D4B02682E4B0268267D71D78A06681D6170E97F68BA7368306831298171D87D71D92868267D71DA8A0698116170E97F68D57368926869298171DB7D71DC28686C686D686E4B008571DD68708771DE5271DF284B014B028571E06877894310000000000000F07F000000000000F07F71E17471E262687C8868267D71E38A06801E6170E97F68D87368424B01687E686D686E4B008571E468708771E55271E6284B014B024B028671E7687789432000000000000000000000000000000000000000000000F03F000000000000F03F71E87471E962682B682C6885686D686E4B008571EA68708771EB5271EC284B014B024B028671ED687789432000000000000000000000000000000000000000000000F03F000000000000F03F71EE7471EF62756268424B0168254E682B682C68524E756268424B0168436848298171F07D71F12868267D71F28A0698116170E97F68D57368424B026825686D686E4B008571F368708771F45271F5284B014B034B038671F66877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F71F77471F862682B682C68524E7562756268424B016843685D75628A0648A05B70E97F6828298171F97D71FA28682B682C682D4B02682E4B0268267D71FB8A0638AB5B70E97F6863298171FC7D71FD2868267D71FE68424B01686768F9682B682C68686869298171FF7D720001000028686C686D686E4B008572010100006870877202010000527203010000284B014B028572040100006877894310000000000000F07F000000000000F07F720501000074720601000062687C8868267D72070100008A0638AB5B70E97F68FC7368424B01687E686D686E4B00857208010000687087720901000052720A010000284B014B024B0286720B010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F720C01000074720D01000062682B682C6885686D686E4B0085720E010000687087720F010000527210010000284B014B024B02867211010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721201000074721301000062756268854E75627368306828298172140100007D721501000028682B682C682D4B02682E4B0268267D72160100008A0648A05B70E97F68F97368306831298172170100007D72180100002868267D72190100008A06F8AC5B70E97F6A1401000073689268692981721A0100007D721B01000028686C686D686E4B0085721C010000687087721D01000052721E010000284B014B0285721F0100006877894310000000000000F07F000000000000F07F722001000074722101000062687C8868267D72220100008A0670AB5B70E97F6A170100007368424B01687E686D686E4B008572230100006870877224010000527225010000284B014B024B02867226010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F722701000074722801000062682B682C6885686D686E4B00857229010000687087722A01000052722B010000284B014B024B0286722C010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F722D01000074722E01000062756268424B0168254E682B682C68524E756268424B01684368482981722F0100007D72300100002868267D72310100008A06F8AC5B70E97F6A140100007368424B026825686D686E4B008572320100006870877233010000527234010000284B014B034B038672350100006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723601000074723701000062682B682C68524E7562756268424B016843685D75628A0660186170E97F6828298172380100007D723901000028682B682C682D4B02682E4B0268267D723A0100008A06D01F6170E97F68632981723B0100007D723C0100002868267D723D01000068424B0168676A38010000682B682C686868692981723E0100007D723F01000028686C686D686E4B008572400100006870877241010000527242010000284B014B028572430100006877894310000000000000F07F000000000000F07F724401000074724501000062687C8868267D72460100008A06D01F6170E97F6A3B0100007368424B01687E686D686E4B008572470100006870877248010000527249010000284B014B024B0286724A010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724B01000074724C01000062682B682C6885686D686E4B0085724D010000687087724E01000052724F010000284B014B024B02867250010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725101000074725201000062756268854E75627368306828298172530100007D725401000028682B682C682D4B02682E4B0268267D72550100008A0660186170E97F6A380100007368306831298172560100007D72570100002868267D72580100008A06881C6170E97F6A530100007368926869298172590100007D725A01000028686C686D686E4B0085725B010000687087725C01000052725D010000284B014B0285725E0100006877894310000000000000F07F000000000000F07F725F01000074726001000062687C8868267D72610100008A06E8196170E97F6A560100007368424B01687E686D686E4B008572620100006870877263010000527264010000284B014B024B02867265010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726601000074726701000062682B682C6885686D686E4B00857268010000687087726901000052726A010000284B014B024B0286726B010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726C01000074726D01000062756268424B0168254E682B682C68524E756268424B01684368482981726E0100007D726F0100002868267D72700100008A06881C6170E97F6A530100007368424B026825686D686E4B008572710100006870877272010000527273010000284B014B034B038672740100006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727501000074727601000062682B682C68524E7562756268424B016843685D75628A0630CD5670E97F6828298172770100007D727801000028682B682C682D4B02682E4B0268267D72790100008A0610CE5670E97F68632981727A0100007D727B0100002868267D727C01000068424B0168676A77010000682B682C686868692981727D0100007D727E01000028686C686D686E4B0085727F0100006870877280010000527281010000284B014B028572820100006877894310000000000000F07F000000000000F07F728301000074728401000062687C8868267D72850100008A0610CE5670E97F6A7A0100007368424B01687E686D686E4B008572860100006870877287010000527288010000284B014B024B02867289010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F728A01000074728B01000062682B682C6885686D686E4B0085728C010000687087728D01000052728E010000284B014B024B0286728F010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729001000074729101000062756268854E75627368306828298172920100007D729301000028682B682C682D4B02682E4B0268267D72940100008A0630CD5670E97F6A770100007368306831298172950100007D72960100002868267D72970100008A0628C85670E97F6A920100007368926869298172980100007D729901000028686C686D686E4B0085729A010000687087729B01000052729C010000284B014B0285729D0100006877894310000000000000F07F000000000000F07F729E01000074729F01000062687C8868267D72A00100008A06B8C05670E97F6A950100007368424B01687E686D686E4B008572A101000068708772A20100005272A3010000284B014B024B028672A4010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A50100007472A601000062682B682C6885686D686E4B008572A701000068708772A80100005272A9010000284B014B024B028672AA010000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0100007472AC01000062756268424B0168254E682B682C68524E756268424B0168436848298172AD0100007D72AE0100002868267D72AF0100008A0628C85670E97F6A920100007368424B026825686D686E4B008572B001000068708772B10100005272B2010000284B014B034B038672B30100006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B40100007472B501000062682B682C68524E7562756268424B016843685D75628A0690A35B70E97F68B1298172B60100007D72B7010000286838685D68267D72B801000068424B0168254E682B682C68524E68B568B6298172B90100007D72BA0100002868267D72BB0100008A0690A35B70E97F6AB60100007368424B01682B682C68524E756275628A0698315770E97F6828298172BC0100007D72BD01000028682B682C682D4B02682E4B0268267D72BE0100006830685D68424B0168436822298172BF0100007D72C00100002868254E68267D72C1010000288A0648C75970E97F6828298172C20100007D72C301000028682B682C682D4B02682E4B0268267D72C40100006830685D68424B0168436ABF01000075628A0658CA5970E97F6828298172C50100007D72C601000028682B682C682D4B02682E4B0268267D72C70100006830685D68424B0168436ABF01000075628A0698315770E97F6ABC0100007568424B0168476849682B682C68524E6853470000000000000000473FB55555555555558672C8010000756275628A0678A96070E97F6828298172C90100007D72CA01000028682B682C682D4B02682E4B0268267D72CB0100008A0640A26070E97F6828298172CC0100007D72CD01000028682B682C682D4B02682E4B0268267D72CE010000288A0660AF6070E97F6835298172CF0100007D72D00100002868386ACC01000068267D72D1010000288A0680305370E97F6828298172D20100007D72D301000028682B682C682D4B02682E4B0268267D72D401000068306ACF01000068424B0268436822298172D50100007D72D60100002868254E68267D72D70100008A0680305370E97F6AD20100007368424B0168476849682B682C68524E68534B00473FB33333333333348672D8010000756275628A0650255C70E97F6828298172D90100007D72DA01000028682B682C682D4B02682E4B0268267D72DB01000068306ACF01000068424B0268436822298172DC0100007D72DD0100002868254E68267D72DE0100008A0650255C70E97F6AD90100007368424B0168476849682B682C68524E68534B00473FB33333333333348672DF010000756275628A06B8775270E97F6828298172E00100007D72E101000028682B682C682D4B02682E4B0268267D72E201000068306ACF01000068424B0268436822298172E30100007D72E40100002868254E68267D72E50100008A06B8775270E97F6AE00100007368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E398672E6010000756275628A06E8395370E97F6828298172E70100007D72E801000028682B682C682D4B02682E4B0268267D72E901000068306ACF01000068424B0268436822298172EA0100007D72EB0100002868254E68267D72EC0100008A06E8395370E97F6AE70100007368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E398672ED010000756275628A06103E5370E97F6828298172EE0100007D72EF01000028682B682C682D4B02682E4B0268267D72F001000068306ACF01000068424B0268436822298172F10100007D72F20100002868254E68267D72F30100008A06103E5370E97F6AEE0100007368424B0168476849682B682C68524E68534B0047BFB33333333333348672F4010000756275628A0630765270E97F6828298172F50100007D72F601000028682B682C682D4B02682E4B0268267D72F701000068306ACF01000068424B0268436822298172F80100007D72F90100002868254E68267D72FA0100008A0630765270E97F6AF50100007368424B0168476849682B682C68524E68534B00473FB8E38E38E38E398672FB010000756275628A06882C5C70E97F6828298172FC0100007D72FD01000028682B682C682D4B02682E4B0268267D72FE01000068306ACF01000068424B0268436822298172FF0100007D72000200002868254E68267D72010200008A06882C5C70E97F6AFC0100007368424B0168476849682B682C68524E68534B0047BFB3333333333334867202020000756275628A0698385370E97F6828298172030200007D720402000028682B682C682D4B02682E4B0268267D720502000068306ACF01000068424B0268436822298172060200007D72070200002868254E68267D72080200008A0698385370E97F6A030200007368424B0168476849682B682C68524E68534B00473FB8E38E38E38E39867209020000756275627568424B0258070000005F616666696E65720A0200004E682B682C68B5685D75628A0660A86070E97F685B756830636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A720B0200002981720C0200007D720D02000028682E4B0258050000006368696C64720E02000068B12981720F0200007D721002000028683868B6298172110200007D72120200002868267D72130200008A06A8145C70E97F6A0F0200007368424B01682B682C68524E756268267D72140200008A0658CA5F70E97F6A0C0200007368424B0168254E682B682C68524E68B568B6298172150200007D72160200002868267D72170200008A06A8145C70E97F6A0F0200007368424B01682B682C68524E756275625807000000706172656E747372180200007D7219020000288A0610C75F70E97F68632981721A0200007D721B0200002868267D721C0200008A06D0CF5F70E97F636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A721D0200002981721E0200007D721F0200002868267D72200200008A0678A96070E97F6AC90100007358060000005F626F78696E72210200006A1A02000068424B026825686D686E4B008572220200006870877223020000527224020000284B014B034B038672250200006877894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F722602000074722702000062682B682C68524E75627368424B0268676A0C020000682B682C68686869298172280200007D722902000028686C686D686E4B0085722A020000687087722B02000052722C020000284B014B0285722D0200006877894310000000000000F07F000000000000F07F722E02000074722F02000062687C8868267D72300200008A0610C75F70E97F6A1A0200007368424B02687E686D686E4B008572310200006870877232020000527233020000284B014B024B02867234020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723502000074723602000062682B682C6885686D686E4B008572370200006870877238020000527239020000284B014B024B0286723A020000687789432000000000000022C000000000000000000000000000A06740000000C0CA473B41723B02000074723C0200006275626885686D686E4B0085723D020000687087723E02000052723F020000284B014B024B02867240020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72410200007472420200006275628A0640A26070E97F6ACC01000075682D4B02756268424B0268436AC901000075627368306A1E02000068424B026843685D75628A0658C35670E97F6828298172430200007D724402000028682B682C682D4B02682E4B0268267D72450200008A0658CA5670E97F6863298172460200007D72470200002868267D724802000068424B0168676A43020000682B682C68686869298172490200007D724A02000028686C686D686E4B0085724B020000687087724C02000052724D020000284B014B0285724E0200006877894310000000000000F07F000000000000F07F724F02000074725002000062687C8868267D72510200008A0658CA5670E97F6A460200007368424B01687E686D686E4B008572520200006870877253020000527254020000284B014B024B02867255020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725602000074725702000062682B682C6885686D686E4B00857258020000687087725902000052725A020000284B014B024B0286725B020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725C02000074725D02000062756268854E756273683068282981725E0200007D725F02000028682B682C682D4B02682E4B0268267D72600200008A0658C35670E97F6A430200007368306831298172610200007D72620200002868267D72630200008A0648C75670E97F6A5E0200007368926869298172640200007D726502000028686C686D686E4B008572660200006870877267020000527268020000284B014B028572690200006877894310000000000000F07F000000000000F07F726A02000074726B02000062687C8868267D726C0200008A0650C55670E97F6A610200007368424B01687E686D686E4B0085726D020000687087726E02000052726F020000284B014B024B02867270020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727102000074727202000062682B682C6885686D686E4B008572730200006870877274020000527275020000284B014B024B02867276020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727702000074727802000062756268424B0168254E682B682C68524E756268424B0168436848298172790200007D727A0200002868267D727B0200008A0648C75670E97F6A5E0200007368424B026825686D686E4B0085727C020000687087727D02000052727E020000284B014B034B0386727F0200006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728002000074728102000062682B682C68524E7562756268424B016843685D75628A06F00E5F70E97F68B1298172820200007D7283020000286838685D68267D728402000068424B0168254E682B682C68524E68B568B6298172850200007D72860200002868267D72870200008A06F00E5F70E97F6A820200007368424B01682B682C68524E756275628A06203A5D70E97F6828298172880200007D728902000028682B682C682D4B02682E4B0268267D728A0200008A06E03B5D70E97F68632981728B0200007D728C0200002868267D728D02000068424B0168676A88020000682B682C686868692981728E0200007D728F02000028686C686D686E4B008572900200006870877291020000527292020000284B014B028572930200006877894310000000000000F07F000000000000F07F729402000074729502000062687C8868267D72960200008A06E03B5D70E97F6A8B0200007368424B01687E686D686E4B008572970200006870877298020000527299020000284B014B024B0286729A020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729B02000074729C02000062682B682C6885686D686E4B0085729D020000687087729E02000052729F020000284B014B024B028672A0020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A10200007472A202000062756268854E75627368306828298172A30200007D72A402000028682B682C682D4B02682E4B0268267D72A50200008A06203A5D70E97F6A880200007368306831298172A60200007D72A70200002868267D72A80200008A0608395D70E97F6AA30200007368926869298172A90200007D72AA02000028686C686D686E4B008572AB02000068708772AC0200005272AD020000284B014B028572AE0200006877894310000000000000F07F000000000000F07F72AF0200007472B002000062687C8868267D72B10200008A06183C5D70E97F6AA60200007368424B01687E686D686E4B008572B202000068708772B30200005272B4020000284B014B024B028672B5020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B60200007472B702000062682B682C6885686D686E4B008572B802000068708772B90200005272BA020000284B014B024B028672BB020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BC0200007472BD02000062756268424B0168254E682B682C68524E756268424B0168436848298172BE0200007D72BF0200002868267D72C00200008A0608395D70E97F6AA30200007368424B026825686D686E4B008572C102000068708772C20200005272C3020000284B014B034B038672C40200006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50200007472C602000062682B682C68524E7562756268424B016843685D75628A06986F5C70E97F6828298172C70200007D72C802000028682B682C682D4B02682E4B0268267D72C90200008A06E0645C70E97F6863298172CA0200007D72CB0200002868267D72CC02000068424B0168676AC7020000682B682C68686869298172CD0200007D72CE02000028686C686D686E4B008572CF02000068708772D00200005272D1020000284B014B028572D20200006877894310000000000000F07F000000000000F07F72D30200007472D402000062687C8868267D72D50200008A06E0645C70E97F6ACA0200007368424B01687E686D686E4B008572D602000068708772D70200005272D8020000284B014B024B028672D9020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0200007472DB02000062682B682C6885686D686E4B008572DC02000068708772DD0200005272DE020000284B014B024B028672DF020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E00200007472E102000062756268854E75627368306828298172E20200007D72E302000028682B682C682D4B02682E4B0268267D72E40200008A06986F5C70E97F6AC70200007368306831298172E50200007D72E60200002868267D72E70200008A06F86C5C70E97F6AE20200007368926869298172E80200007D72E902000028686C686D686E4B008572EA02000068708772EB0200005272EC020000284B014B028572ED0200006877894310000000000000F07F000000000000F07F72EE0200007472EF02000062687C8868267D72F00200008A06A06D5C70E97F6AE50200007368424B01687E686D686E4B008572F102000068708772F20200005272F3020000284B014B024B028672F4020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F50200007472F602000062682B682C6885686D686E4B008572F702000068708772F80200005272F9020000284B014B024B028672FA020000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FB0200007472FC02000062756268424B0168254E682B682C68524E756268424B0168436848298172FD0200007D72FE0200002868267D72FF0200008A06F86C5C70E97F6AE20200007368424B026825686D686E4B008572000300006870877201030000527202030000284B014B034B038672030300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720403000074720503000062682B682C68524E7562756268424B016843685D75628A06F02E5B70E97F6828298172060300007D720703000028682B682C682D4B02682E4B0268267D72080300008A06282F5B70E97F6863298172090300007D720A0300002868267D720B03000068424B0168676A06030000682B682C686868692981720C0300007D720D03000028686C686D686E4B0085720E030000687087720F030000527210030000284B014B028572110300006877894310000000000000F07F000000000000F07F721203000074721303000062687C8868267D72140300008A06282F5B70E97F6A090300007368424B01687E686D686E4B008572150300006870877216030000527217030000284B014B024B02867218030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721903000074721A03000062682B682C6885686D686E4B0085721B030000687087721C03000052721D030000284B014B024B0286721E030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721F03000074722003000062756268854E75627368306828298172210300007D722203000028682B682C682D4B02682E4B0268267D72230300008A06F02E5B70E97F6A060300007368306831298172240300007D72250300002868267D72260300008A06602F5B70E97F6A210300007368926869298172270300007D722803000028686C686D686E4B00857229030000687087722A03000052722B030000284B014B0285722C0300006877894310000000000000F07F000000000000F07F722D03000074722E03000062687C8868267D722F0300008A0698715270E97F6A240300007368424B01687E686D686E4B008572300300006870877231030000527232030000284B014B024B02867233030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723403000074723503000062682B682C6885686D686E4B008572360300006870877237030000527238030000284B014B024B02867239030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723A03000074723B03000062756268424B0168254E682B682C68524E756268424B01684368482981723C0300007D723D0300002868267D723E0300008A06602F5B70E97F6A210300007368424B026825686D686E4B0085723F0300006870877240030000527241030000284B014B034B038672420300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724303000074724403000062682B682C68524E7562756268424B016843685D75628A0660315D70E97F6828298172450300007D724603000028682B682C682D4B02682E4B0268267D72470300008A0648305D70E97F6863298172480300007D72490300002868267D724A03000068424B0168676A45030000682B682C686868692981724B0300007D724C03000028686C686D686E4B0085724D030000687087724E03000052724F030000284B014B028572500300006877894310000000000000F07F000000000000F07F725103000074725203000062687C8868267D72530300008A0648305D70E97F6A480300007368424B01687E686D686E4B008572540300006870877255030000527256030000284B014B024B02867257030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725803000074725903000062682B682C6885686D686E4B0085725A030000687087725B03000052725C030000284B014B024B0286725D030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725E03000074725F03000062756268854E75627368306828298172600300007D726103000028682B682C682D4B02682E4B0268267D72620300008A0660315D70E97F6A450300007368306831298172630300007D72640300002868267D72650300008A0658335D70E97F6A600300007368926869298172660300007D726703000028686C686D686E4B00857268030000687087726903000052726A030000284B014B0285726B0300006877894310000000000000F07F000000000000F07F726C03000074726D03000062687C8868267D726E0300008A06F0176170E97F6A630300007368424B01687E686D686E4B0085726F0300006870877270030000527271030000284B014B024B02867272030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727303000074727403000062682B682C6885686D686E4B008572750300006870877276030000527277030000284B014B024B02867278030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727903000074727A03000062756268424B0168254E682B682C68524E756268424B01684368482981727B0300007D727C0300002868267D727D0300008A0658335D70E97F6A600300007368424B026825686D686E4B0085727E030000687087727F030000527280030000284B014B034B038672810300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728203000074728303000062682B682C68524E7562756268424B016843685D75628A0650A55B70E97F6828298172840300007D728503000028682B682C682D4B02682E4B0268267D72860300008A0648A75B70E97F6863298172870300007D72880300002868267D728903000068424B0168676A84030000682B682C686868692981728A0300007D728B03000028686C686D686E4B0085728C030000687087728D03000052728E030000284B014B0285728F0300006877894310000000000000F07F000000000000F07F729003000074729103000062687C8868267D72920300008A0648A75B70E97F6A870300007368424B01687E686D686E4B008572930300006870877294030000527295030000284B014B024B02867296030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729703000074729803000062682B682C6885686D686E4B00857299030000687087729A03000052729B030000284B014B024B0286729C030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729D03000074729E03000062756268854E756273683068282981729F0300007D72A003000028682B682C682D4B02682E4B0268267D72A10300008A0650A55B70E97F6A840300007368306831298172A20300007D72A30300002868267D72A40300008A06C0A55B70E97F6A9F0300007368926869298172A50300007D72A603000028686C686D686E4B008572A703000068708772A80300005272A9030000284B014B028572AA0300006877894310000000000000F07F000000000000F07F72AB0300007472AC03000062687C8868267D72AD0300008A06A0AD5B70E97F6AA20300007368424B01687E686D686E4B008572AE03000068708772AF0300005272B0030000284B014B024B028672B1030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B20300007472B303000062682B682C6885686D686E4B008572B403000068708772B50300005272B6030000284B014B024B028672B7030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B80300007472B903000062756268424B0168254E682B682C68524E756268424B0168436848298172BA0300007D72BB0300002868267D72BC0300008A06C0A55B70E97F6A9F0300007368424B026825686D686E4B008572BD03000068708772BE0300005272BF030000284B014B034B038672C00300006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C10300007472C203000062682B682C68524E7562756268424B016843685D75628A0648C75970E97F6AC20100008A06707B5970E97F68B1298172C30300007D72C403000028683868B6298172C50300007D72C60300002868267D72C70300008A06707B5970E97F6AC30300007368424B01682B682C68524E756268267D72C803000068424B0168254E682B682C68524E68B5685D75628A06A81B5C70E97F6828298172C90300007D72CA03000028682B682C682D4B02682E4B0268267D72CB0300008A06C01C5C70E97F6863298172CC0300007D72CD0300002868267D72CE03000068424B0168676AC9030000682B682C68686869298172CF0300007D72D003000028686C686D686E4B008572D103000068708772D20300005272D3030000284B014B028572D40300006877894310000000000000F07F000000000000F07F72D50300007472D603000062687C8868267D72D70300008A06C01C5C70E97F6ACC0300007368424B01687E686D686E4B008572D803000068708772D90300005272DA030000284B014B024B028672DB030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0300007472DD03000062682B682C6885686D686E4B008572DE03000068708772DF0300005272E0030000284B014B024B028672E1030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E20300007472E303000062756268854E75627368306828298172E40300007D72E503000028682B682C682D4B02682E4B0268267D72E60300008A06A81B5C70E97F6AC90300007368306831298172E70300007D72E80300002868267D72E90300008A0608195C70E97F6AE40300007368926869298172EA0300007D72EB03000028686C686D686E4B008572EC03000068708772ED0300005272EE030000284B014B028572EF0300006877894310000000000000F07F000000000000F07F72F00300007472F103000062687C8868267D72F20300008A0668165C70E97F6AE70300007368424B01687E686D686E4B008572F303000068708772F40300005272F5030000284B014B024B028672F6030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F70300007472F803000062682B682C6885686D686E4B008572F903000068708772FA0300005272FB030000284B014B024B028672FC030000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FD0300007472FE03000062756268424B0168254E682B682C68524E756268424B0168436848298172FF0300007D72000400002868267D72010400008A0608195C70E97F6AE40300007368424B026825686D686E4B008572020400006870877203040000527204040000284B014B034B038672050400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720604000074720704000062682B682C68524E7562756268424B016843685D75628A0668665D70E97F6828298172080400007D720904000028682B682C682D4B02682E4B0268267D720A0400008A0688CC5970E97F68632981720B0400007D720C0400002868267D720D04000068424B0168676A08040000682B682C686868692981720E0400007D720F04000028686C686D686E4B008572100400006870877211040000527212040000284B014B028572130400006877894310000000000000F07F000000000000F07F721404000074721504000062687C8868267D72160400008A0688CC5970E97F6A0B0400007368424B01687E686D686E4B008572170400006870877218040000527219040000284B014B024B0286721A040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721B04000074721C04000062682B682C6885686D686E4B0085721D040000687087721E04000052721F040000284B014B024B02867220040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F722104000074722204000062756268854E75627368306828298172230400007D722404000028682B682C682D4B02682E4B0268267D72250400008A0668665D70E97F6A080400007368306831298172260400007D72270400002868267D72280400008A06206A5D70E97F6A230400007368926869298172290400007D722A04000028686C686D686E4B0085722B040000687087722C04000052722D040000284B014B0285722E0400006877894310000000000000F07F000000000000F07F722F04000074723004000062687C8868267D72310400008A0640695D70E97F6A260400007368424B01687E686D686E4B008572320400006870877233040000527234040000284B014B024B02867235040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723604000074723704000062682B682C6885686D686E4B00857238040000687087723904000052723A040000284B014B024B0286723B040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723C04000074723D04000062756268424B0168254E682B682C68524E756268424B01684368482981723E0400007D723F0400002868267D72400400008A06206A5D70E97F6A230400007368424B026825686D686E4B008572410400006870877242040000527243040000284B014B034B038672440400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724504000074724604000062682B682C68524E7562756268424B016843685D75628A06C0CC5670E97F6828298172470400007D724804000028682B682C682D4B02682E4B0268267D72490400008A0618CC5670E97F68632981724A0400007D724B0400002868267D724C04000068424B0168676A47040000682B682C686868692981724D0400007D724E04000028686C686D686E4B0085724F0400006870877250040000527251040000284B014B028572520400006877894310000000000000F07F000000000000F07F725304000074725404000062687C8868267D72550400008A0618CC5670E97F6A4A0400007368424B01687E686D686E4B008572560400006870877257040000527258040000284B014B024B02867259040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725A04000074725B04000062682B682C6885686D686E4B0085725C040000687087725D04000052725E040000284B014B024B0286725F040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726004000074726104000062756268854E75627368306828298172620400007D726304000028682B682C682D4B02682E4B0268267D72640400008A06C0CC5670E97F6A470400007368306831298172650400007D72660400002868267D72670400008A0660B8167CE97F6A620400007368926869298172680400007D726904000028686C686D686E4B0085726A040000687087726B04000052726C040000284B014B0285726D0400006877894310000000000000F07F000000000000F07F726E04000074726F04000062687C8868267D72700400008A0640625C70E97F6A650400007368424B01687E686D686E4B008572710400006870877272040000527273040000284B014B024B02867274040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727504000074727604000062682B682C6885686D686E4B008572770400006870877278040000527279040000284B014B024B0286727A040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727B04000074727C04000062756268424B0168254E682B682C68524E756268424B01684368482981727D0400007D727E0400002868267D727F0400008A0660B8167CE97F6A620400007368424B026825686D686E4B008572800400006870877281040000527282040000284B014B034B038672830400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728404000074728504000062682B682C68524E7562756268424B016843685D75628A06902A5B70E97F6828298172860400007D728704000028682B682C682D4B02682E4B0268267D72880400008A0690135870E97F6863298172890400007D728A0400002868267D728B04000068424B0168676A86040000682B682C686868692981728C0400007D728D04000028686C686D686E4B0085728E040000687087728F040000527290040000284B014B028572910400006877894310000000000000F07F000000000000F07F729204000074729304000062687C8868267D72940400008A0690135870E97F6A890400007368424B01687E686D686E4B008572950400006870877296040000527297040000284B014B024B02867298040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729904000074729A04000062682B682C6885686D686E4B0085729B040000687087729C04000052729D040000284B014B024B0286729E040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729F0400007472A004000062756268854E75627368306828298172A10400007D72A204000028682B682C682D4B02682E4B0268267D72A30400008A06902A5B70E97F6A860400007368306831298172A40400007D72A50400002868267D72A60400008A06C02C5B70E97F6AA10400007368926869298172A70400007D72A804000028686C686D686E4B008572A904000068708772AA0400005272AB040000284B014B028572AC0400006877894310000000000000F07F000000000000F07F72AD0400007472AE04000062687C8868267D72AF0400008A06A82B5B70E97F6AA40400007368424B01687E686D686E4B008572B004000068708772B10400005272B2040000284B014B024B028672B3040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B40400007472B504000062682B682C6885686D686E4B008572B604000068708772B70400005272B8040000284B014B024B028672B9040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BA0400007472BB04000062756268424B0168254E682B682C68524E756268424B0168436848298172BC0400007D72BD0400002868267D72BE0400008A06C02C5B70E97F6AA10400007368424B026825686D686E4B008572BF04000068708772C00400005272C1040000284B014B034B038672C20400006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C30400007472C404000062682B682C68524E7562756268424B016843685D75628A0670345D70E97F6828298172C50400007D72C604000028682B682C682D4B02682E4B0268267D72C70400008A06A8345D70E97F6863298172C80400007D72C90400002868267D72CA04000068424B0168676AC5040000682B682C68686869298172CB0400007D72CC04000028686C686D686E4B008572CD04000068708772CE0400005272CF040000284B014B028572D00400006877894310000000000000F07F000000000000F07F72D10400007472D204000062687C8868267D72D30400008A06A8345D70E97F6AC80400007368424B01687E686D686E4B008572D404000068708772D50400005272D6040000284B014B024B028672D7040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D80400007472D904000062682B682C6885686D686E4B008572DA04000068708772DB0400005272DC040000284B014B024B028672DD040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0400007472DF04000062756268854E75627368306828298172E00400007D72E104000028682B682C682D4B02682E4B0268267D72E20400008A0670345D70E97F6AC50400007368306831298172E30400007D72E40400002868267D72E50400008A0638345D70E97F6AE00400007368926869298172E60400007D72E704000028686C686D686E4B008572E804000068708772E90400005272EA040000284B014B028572EB0400006877894310000000000000F07F000000000000F07F72EC0400007472ED04000062687C8868267D72EE0400008A06B8305D70E97F6AE30400007368424B01687E686D686E4B008572EF04000068708772F00400005272F1040000284B014B024B028672F2040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F30400007472F404000062682B682C6885686D686E4B008572F504000068708772F60400005272F7040000284B014B024B028672F8040000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F90400007472FA04000062756268424B0168254E682B682C68524E756268424B0168436848298172FB0400007D72FC0400002868267D72FD0400008A0638345D70E97F6AE00400007368424B026825686D686E4B008572FE04000068708772FF040000527200050000284B014B034B038672010500006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720205000074720305000062682B682C68524E7562756268424B016843685D75628A0608625C70E97F6828298172040500007D720505000028682B682C682D4B02682E4B0268267D72060500008A0698685C70E97F6863298172070500007D72080500002868267D720905000068424B0168676A04050000682B682C686868692981720A0500007D720B05000028686C686D686E4B0085720C050000687087720D05000052720E050000284B014B0285720F0500006877894310000000000000F07F000000000000F07F721005000074721105000062687C8868267D72120500008A0698685C70E97F6A070500007368424B01687E686D686E4B008572130500006870877214050000527215050000284B014B024B02867216050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721705000074721805000062682B682C6885686D686E4B00857219050000687087721A05000052721B050000284B014B024B0286721C050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721D05000074721E05000062756268854E756273683068282981721F0500007D722005000028682B682C682D4B02682E4B0268267D72210500008A0608625C70E97F6A040500007368306831298172220500007D72230500002868267D72240500008A0640695C70E97F6A1F0500007368926869298172250500007D722605000028686C686D686E4B008572270500006870877228050000527229050000284B014B0285722A0500006877894310000000000000F07F000000000000F07F722B05000074722C05000062687C8868267D722D0500008A06E8625C70E97F6A220500007368424B01687E686D686E4B0085722E050000687087722F050000527230050000284B014B024B02867231050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723205000074723305000062682B682C6885686D686E4B008572340500006870877235050000527236050000284B014B024B02867237050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723805000074723905000062756268424B0168254E682B682C68524E756268424B01684368482981723A0500007D723B0500002868267D723C0500008A0640695C70E97F6A1F0500007368424B026825686D686E4B0085723D050000687087723E05000052723F050000284B014B034B038672400500006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724105000074724205000062682B682C68524E7562756268424B016843685D75628A0660AF6070E97F6ACF0100008A0638345370E97F6828298172430500007D724405000028682B682C682D4B02682E4B0268267D72450500008A0618355370E97F6863298172460500007D72470500002868267D724805000068424B0168676A43050000682B682C68686869298172490500007D724A05000028686C686D686E4B0085724B050000687087724C05000052724D050000284B014B0285724E0500006877894310000000000000F07F000000000000F07F724F05000074725005000062687C8868267D72510500008A0618355370E97F6A460500007368424B01687E686D686E4B008572520500006870877253050000527254050000284B014B024B02867255050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725605000074725705000062682B682C6885686D686E4B00857258050000687087725905000052725A050000284B014B024B0286725B050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725C05000074725D05000062756268854E756273683068282981725E0500007D725F05000028682B682C682D4B02682E4B0268267D72600500008A0638345370E97F6A430500007368306831298172610500007D72620500002868267D72630500008A06E8325370E97F6A5E0500007368926869298172640500007D726505000028686C686D686E4B008572660500006870877267050000527268050000284B014B028572690500006877894310000000000000F07F000000000000F07F726A05000074726B05000062687C8868267D726C0500008A0690335370E97F6A610500007368424B01687E686D686E4B0085726D050000687087726E05000052726F050000284B014B024B02867270050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727105000074727205000062682B682C6885686D686E4B008572730500006870877274050000527275050000284B014B024B02867276050000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727705000074727805000062756268424B0168254E682B682C68524E756268424B0168436848298172790500007D727A0500002868267D727B0500008A06E8325370E97F6A5E0500007368424B026825686D686E4B0085727C050000687087727D05000052727E050000284B014B034B0386727F0500006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F728005000074728105000062682B682C68524E7562756268424B016843685D75628A0660A86070E97F685B8A0658CA5970E97F6AC50100007568926863298172820500007D72830500002868267D72840500008A0620CA5F70E97F685D7368424B0168676831298172850500007D72860500002868267D7287050000288A0630AD5B70E97F6863298172880500007D72890500002868267D728A0500008A0658AA5B70E97F68327368424B0168676A85050000682B682C686868692981728B0500007D728C05000028686C686D686E4B0085728D050000687087728E05000052728F050000284B014B028572900500006877894310000000000000F07F000000000000F07F729105000074729205000062687C8868267D72930500008A0630AD5B70E97F6A880500007368424B00687E686D686E4B008572940500006870877295050000527296050000284B014B024B028672970500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F729805000074729905000062682B682C6885686D686E4B0085729A050000687087729B05000052729C050000284B014B024B0286729D0500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F729E05000074729F05000062756268854E75628A0608C25F70E97F6A820500007568926863298172A00500007D72A10500002868267D72A20500008A066021BB73E97F6A850500007368424B0168676849682B682C68686869298172A30500007D72A405000028686C686D686E4B008572A505000068708772A60500005272A7050000284B014B028572A80500006877894310000000000000F07F000000000000F07F72A90500007472AA05000062687C8868267D72AB0500008A06980FBA73E97F6AA00500007368424B01687E686D686E4B008572AC05000068708772AD0500005272AE050000284B014B024B028672AF0500006877894320000000000000000000000000000000009A99999999991940333333333333134072B00500007472B105000062682B682C6885686D686E4B008572B205000068708772B30500005272B4050000284B014B024B028672B50500006877894320000000000000000000000000000000009A99999999991940333333333333134072B60500007472B705000062756268854E756268424B0168254E682B682C68524E7562682B682C68686869298172B80500007D72B905000028686C686D686E4B008572BA05000068708772BB0500005272BC050000284B014B028572BD0500006877894310000000000000F07F000000000000F07F72BE0500007472BF05000062687C8868267D72C00500008A0608C25F70E97F6A820500007368424B00687E686D686E4B008572C105000068708772C20500005272C3050000284B014B024B028672C40500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72C50500007472C605000062682B682C6885686D686E4B008572C705000068708772C80500005272C9050000284B014B024B028672CA0500006877894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72CB0500007472CC05000062756268854E756268424B0168254E682B682C68524E756268267D72CD050000288A06D04F5A70E97F6828298172CE0500007D72CF05000028682B682C682D4B02682E4B0268267D72D00500006830685B68424B0268436822298172D10500007D72D20500002868254E68267D72D30500008A06D04F5A70E97F6ACE0500007368424B0168476849682B682C68524E6853473FB33333333333344B008672D4050000756275628A06B84E5A70E97F6828298172D50500007D72D605000028682B682C682D4B02682E4B0268267D72D70500006830685B68424B0268436822298172D80500007D72D90500002868254E68267D72DA0500008A06B84E5A70E97F6AD50500007368424B0168476849682B682C68524E6853473FB8E38E38E38E394B008672DB050000756275628A06F8655D70E97F6828298172DC0500007D72DD05000028682B682C682D4B02682E4B0268267D72DE0500006830685B68424B0268436822298172DF0500007D72E00500002868254E68267D72E10500008A06F8655D70E97F6ADC0500007368424B0168476849682B682C68524E685347BFB33333333333344B008672E2050000756275628A0648605D70E97F6828298172E30500007D72E405000028682B682C682D4B02682E4B0268267D72E50500006830685B68424B0268436822298172E60500007D72E70500002868254E68267D72E80500008A0648605D70E97F6AE30500007368424B0168476849682B682C68524E6853473FB33333333333344B008672E9050000756275628A0638445A70E97F6828298172EA0500007D72EB05000028682B682C682D4B02682E4B0268267D72EC0500006830685B68424B0268436822298172ED0500007D72EE0500002868254E68267D72EF0500008A0638445A70E97F6AEA0500007368424B0168476849682B682C68524E685347BFB8E38E38E38E394B008672F0050000756275628A0688755270E97F68588A06584A5A70E97F6828298172F10500007D72F205000028682B682C682D4B02682E4B0268267D72F30500006830685B68424B0268436822298172F40500007D72F50500002868254E68267D72F60500008A06584A5A70E97F6AF10500007368424B0168476849682B682C68524E685347BFB33333333333344B008672F7050000756275628A0658735270E97F6828298172F80500007D72F905000028682B682C682D4B02682E4B0268267D72FA0500006830685B68424B0268436822298172FB0500007D72FC0500002868254E68267D72FD0500008A0658735270E97F6AF80500007368424B0168476849682B682C68524E685347BFB8E38E38E38E394B008672FE050000756275627568424B026A0A0200004E682B682C68B56ACC010000756268424B026843685575627368424B0168476849682B682C68524E6853473FB8E38E38E38E394B008672FF05000075628A06D82D5C70E97F6ADC0100008A06E8495A70E97F6AD10500008A0660C15A70E97F6822298172000600007D72010600002868254E68267D72020600008A06A8CB5A70E97F6828298172030600007D720406000028682B682C682D4B02682E4B0268267D72050600006830683668424B0268436A0006000075627368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E3986720606000075628A0688055F70E97F6822298172070600007D72080600002868254E68267D72090600008A06E00B5F70E97F68282981720A0600007D720B06000028682B682C682D4B02682E4B0268267D720C0600006830683C68424B0268436A0706000075627368424B0168476849682B682C68524E6853473FB8E38E38E38E394B0086720D06000075628A06C8AA6070E97F68222981720E0600007D720F0600002868254E68267D72100600008A0620A36070E97F6828298172110600007D721206000028682B682C682D4B02682E4B0268267D72130600006830683668424B0268436A0E06000075627368424B0168476849682B682C68524E68534B00473FB333333333333486721406000075628A06E8025F70E97F6822298172150600007D72160600002868254E68267D72170600008A06880C5F70E97F6828298172180600007D721906000028682B682C682D4B02682E4B0268267D721A0600006830683668424B0268436A1506000075627368424B0168476849682B682C68524E68534B0047BFB333333333333486721B06000075628A06903A5370E97F6A060200008A0638045F70E97F68222981721C0600007D721D0600002868254E68267D721E0600008A0688FC6170E97F68282981721F0600007D722006000028682B682C682D4B02682E4B0268267D72210600006830683668424B0268436A1C06000075627368424B0168476849682B682C68524E68534B00473FB333333333333486722206000075628A06980FBA73E97F6AA00500008A06A82B5C70E97F6AFF0100008A06C8035F70E97F6822298172230600007D72240600002868254E68267D72250600008A06D0015F70E97F6828298172260600007D722706000028682B682C682D4B02682E4B0268267D72280600006830683C68424B0268436A2306000075627368424B0168476849682B682C68524E685347BFB8E38E38E38E394B0086722906000075628A0668BD5370E97F68222981722A0600007D722B0600002868254E68267D722C0600008A0678B25370E97F68282981722D0600007D722E06000028682B682C682D4B02682E4B0268267D722F0600006830683C68424B0268436A2A06000075627368424B0168476849682B682C68524E6853473FB33333333333344B0086723006000075628A0610FE6170E97F68238A06183C5370E97F6AF10100008A0650CC5870E97F6ABF0100008A06A04D5A70E97F6AD80500008A0690536170E97F6822298172310600007D72320600002868254E68267D72330600008A0678526170E97F6828298172340600007D723506000028682B682C682D4B02682E4B0268267D72360600006830683C68424B0268436A3106000075627368424B0168476849682B682C68524E685347BFB33333333333344B0086723706000075628A0698516170E97F6822298172380600007D72390600002868254E68267D723A0600008A0668F66170E97F68282981723B0600007D723C06000028682B682C682D4B02682E4B0268267D723D0600006830683C68424B0268436A3806000075627368424B0168476849682B682C68524E6853473FB33333333333344B0086723E06000075628A06486E5D70E97F6AED0500008A06E829BB73E97F68222981723F0600007D72400600002868254E68267D72410600008A06C82ABB73E97F6828298172420600007D724306000028682B682C682D4B02682E4B0268267D72440600006830683668424B0268436A3F06000075627368424B0168476849682B682C68524E68534B0047BFB8E38E38E38E3986724506000075628A0678725270E97F6AFB0500008A06A0BD5370E97F68448A0648B75370E97F6822298172460600007D72470600002868254E68267D72480600008A06D8B65370E97F6828298172490600007D724A06000028682B682C682D4B02682E4B0268267D724B0600006830683C68424B0268436A4606000075627368424B0168476849682B682C68524E6853473FB8E38E38E38E394B0086724C06000075628A0608225C70E97F6AEA0100008A06A84B5A70E97F6AF40500008A06A07D5270E97F6AE30100008A0638C45A70E97F68222981724D0600007D724E0600002868254E68267D724F0600008A0640C25F70E97F6828298172500600007D725106000028682B682C682D4B02682E4B0268267D72520600006830683668424B0268436A4D06000075627368424B0168476849682B682C68524E68534B00473FB8E38E38E38E3986725306000075628A06B8B05370E97F6822298172540600007D72550600002868254E68267D72560600008A06D0B85370E97F6828298172570600007D725806000028682B682C682D4B02682E4B0268267D72590600006830683C68424B0268436A5406000075627368424B0168476849682B682C68524E685347BFB33333333333344B0086725A06000075628A06A0665D70E97F6ADF0500008A06A0765270E97F6AF80100008A06F8AC6070E97F68222981725B0600007D725C0600002868254E68267D725D0600008A0618A56070E97F68282981725E0600007D725F06000028682B682C682D4B02682E4B0268267D72600600006830683668424B0268436A5B06000075627368424B0168476849682B682C68524E68534B0047BFB333333333333486726106000075628A0608695D70E97F6AE60500008A0628315370E97F6AD50100007568424B026825686D686E4B008572620600006870877263060000527264060000284B014B034B03867265060000687789434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F726606000074726706000062682B682C68524E7562682B682C68524E685347BFB8E38E38E38E394B00867268060000756275628A06E00B5F70E97F6A0A0600008A0678526170E97F6A340600008A06D0015F70E97F6A260600008A0678B25370E97F6A2D0600008A0668F66170E97F6A3B0600008A06D8B65370E97F6A490600008A06D0B85370E97F6A570600007568424B026A0A0200004E682B682C68B5683975627568306A0B020000298172690600007D726A06000028682E4B026A0E02000068B12981726B0600007D726C06000028683868B62981726D0600007D726E0600002868267D726F0600008A06602F6270E97F6A6B0600007368424B01682B682C68524E756268267D72700600008A0680505570E97F6A690600007368424B006825686D686E4B008572710600006870877272060000527273060000284B014B034B038672740600006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727506000074727606000062682B682C68524E68B568B6298172770600007D72780600002868267D72790600008A06602F6270E97F6A6B0600007368424B01682B682C68524E756275626A180200007D727A060000288A06D0AF5B70E97F68632981727B0600007D727C0600002868267D727D0600008A0680A05B70E97F6A1D0200002981727E0600007D727F0600002868267D72800600008A06F8555570E97F6828298172810600007D728206000028682B682C682D4B02682E4B0268267D72830600008A0668565570E97F68397368306A7E06000068424B02684368327562736A210200006A7B06000068424B026825686D686E4B008572840600006870877285060000527286060000284B014B034B038672870600006877894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F728806000074728906000062682B682C68524E75627368424B0268676A69060000682B682C686868692981728A0600007D728B06000028686C686D686E4B0085728C060000687087728D06000052728E060000284B014B0285728F0600006877894310000000000000F07F000000000000F07F729006000074729106000062687C8868267D72920600008A06D0AF5B70E97F6A7B0600007368424B02687E686D686E4B008572930600006870877294060000527295060000284B014B024B02867296060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729706000074729806000062682B682C6885686D686E4B00857299060000687087729A06000052729B060000284B014B024B0286729C06000068778943206666666666E653C00000000000000000CCCCCCCCCC7C8040CDCCCC0C67033B41729D06000074729E0600006275626885686D686E4B0085729F06000068708772A00600005272A1060000284B014B024B028672A2060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A30600007472A40600006275628A0668565570E97F683975682D4B02756268424B0268436A81060000756268267D72A5060000288A0640C25F70E97F6A500600008A06002BBB73E97F684F8A06A8CB5A70E97F6A030600008A06880C5F70E97F6A180600008A0688FC6170E97F6A1F0600008A06C82ABB73E97F6A420600008A0618A56070E97F6A5E0600008A0620A36070E97F6A110600007568424B026A0A0200004E682B682C68B5683275628A066028BB73E97F6828298172A60600007D72A706000028682B682C682D4B02682E4B0268267D72A80600008A06282FBB73E97F6863298172A90600007D72AA0600002868267D72AB06000068424B0168676AA6060000682B682C68686869298172AC0600007D72AD06000028686C686D686E4B008572AE06000068708772AF0600005272B0060000284B014B028572B10600006877894310000000000000F07F000000000000F07F72B20600007472B306000062687C8868267D72B40600008A06282FBB73E97F6AA90600007368424B01687E686D686E4B008572B506000068708772B60600005272B7060000284B014B024B028672B8060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B90600007472BA06000062682B682C6885686D686E4B008572BB06000068708772BC0600005272BD060000284B014B024B028672BE060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0600007472C006000062756268854E75627368306828298172C10600007D72C206000028682B682C682D4B02682E4B0268267D72C30600008A066028BB73E97F6AA60600007368306831298172C40600007D72C50600002868267D72C60600008A06A02DBB73E97F6AC10600007368926869298172C70600007D72C806000028686C686D686E4B008572C906000068708772CA0600005272CB060000284B014B028572CC0600006877894310000000000000F07F000000000000F07F72CD0600007472CE06000062687C8868267D72CF0600008A06D0286270E97F6AC40600007368424B01687E686D686E4B008572D006000068708772D10600005272D2060000284B014B024B028672D3060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D40600007472D506000062682B682C6885686D686E4B008572D606000068708772D70600005272D8060000284B014B024B028672D9060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0600007472DB06000062756268424B0168254E682B682C68524E756268424B0168436848298172DC0600007D72DD0600002868267D72DE0600008A06A02DBB73E97F6AC10600007368424B026825686D686E4B008572DF06000068708772E00600005272E1060000284B014B034B038672E20600006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E30600007472E406000062682B682C68524E7562756268424B016843683275628A06F8555570E97F6A810600008A0608226270E97F6828298172E50600007D72E606000028682B682C682D4B02682E4B0268267D72E70600008A0600246270E97F6863298172E80600007D72E90600002868267D72EA06000068424B0168676AE5060000682B682C68686869298172EB0600007D72EC06000028686C686D686E4B008572ED06000068708772EE0600005272EF060000284B014B028572F00600006877894310000000000000F07F000000000000F07F72F10600007472F206000062687C8868267D72F30600008A0600246270E97F6AE80600007368424B01687E686D686E4B008572F406000068708772F50600005272F6060000284B014B024B028672F7060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F80600007472F906000062682B682C6885686D686E4B008572FA06000068708772FB0600005272FC060000284B014B024B028672FD060000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0600007472FF06000062756268854E75627368306828298172000700007D720107000028682B682C682D4B02682E4B0268267D72020700008A0608226270E97F6AE50600007368306831298172030700007D72040700002868267D72050700008A06D0216270E97F6A000700007368926869298172060700007D720707000028686C686D686E4B00857208070000687087720907000052720A070000284B014B0285720B0700006877894310000000000000F07F000000000000F07F720C07000074720D07000062687C8868267D720E0700008A06A8246270E97F6A030700007368424B01687E686D686E4B0085720F0700006870877210070000527211070000284B014B024B02867212070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721307000074721407000062682B682C6885686D686E4B008572150700006870877216070000527217070000284B014B024B02867218070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721907000074721A07000062756268424B0168254E682B682C68524E756268424B01684368482981721B0700007D721C0700002868267D721D0700008A06D0216270E97F6A000700007368424B026825686D686E4B0085721E070000687087721F070000527220070000284B014B034B038672210700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722207000074722307000062682B682C68524E7562756268424B016843683275628A0660286270E97F6828298172240700007D722507000028682B682C682D4B02682E4B0268267D72260700008A06D8266270E97F6863298172270700007D72280700002868267D722907000068424B0168676A24070000682B682C686868692981722A0700007D722B07000028686C686D686E4B0085722C070000687087722D07000052722E070000284B014B0285722F0700006877894310000000000000F07F000000000000F07F723007000074723107000062687C8868267D72320700008A06D8266270E97F6A270700007368424B01687E686D686E4B008572330700006870877234070000527235070000284B014B024B02867236070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723707000074723807000062682B682C6885686D686E4B00857239070000687087723A07000052723B070000284B014B024B0286723C070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723D07000074723E07000062756268854E756273683068282981723F0700007D724007000028682B682C682D4B02682E4B0268267D72410700008A0660286270E97F6A240700007368306831298172420700007D72430700002868267D72440700008A0610276270E97F6A3F0700007368926869298172450700007D724607000028686C686D686E4B008572470700006870877248070000527249070000284B014B0285724A0700006877894310000000000000F07F000000000000F07F724B07000074724C07000062687C8868267D724D0700008A0640296270E97F6A420700007368424B01687E686D686E4B0085724E070000687087724F070000527250070000284B014B024B02867251070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725207000074725307000062682B682C6885686D686E4B008572540700006870877255070000527256070000284B014B024B02867257070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725807000074725907000062756268424B0168254E682B682C68524E756268424B01684368482981725A0700007D725B0700002868267D725C0700008A0610276270E97F6A3F0700007368424B026825686D686E4B0085725D070000687087725E07000052725F070000284B014B034B038672600700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726107000074726207000062682B682C68524E7562756268424B016843683275628A0680905570E97F6828298172630700007D726407000028682B682C682D4B02682E4B0268267D72650700008A06F0905570E97F6863298172660700007D72670700002868267D726807000068424B0168676A63070000682B682C68686869298172690700007D726A07000028686C686D686E4B0085726B070000687087726C07000052726D070000284B014B0285726E0700006877894310000000000000F07F000000000000F07F726F07000074727007000062687C8868267D72710700008A06F0905570E97F6A660700007368424B01687E686D686E4B008572720700006870877273070000527274070000284B014B024B02867275070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727607000074727707000062682B682C6885686D686E4B00857278070000687087727907000052727A070000284B014B024B0286727B070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727C07000074727D07000062756268854E756273683068282981727E0700007D727F07000028682B682C682D4B02682E4B0268267D72800700008A0680905570E97F6A630700007368306831298172810700007D72820700002868267D72830700008A06D07F5F70E97F6A7E0700007368926869298172840700007D728507000028686C686D686E4B008572860700006870877287070000527288070000284B014B028572890700006877894310000000000000F07F000000000000F07F728A07000074728B07000062687C8868267D728C0700008A06607F5F70E97F6A810700007368424B01687E686D686E4B0085728D070000687087728E07000052728F070000284B014B024B02867290070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729107000074729207000062682B682C6885686D686E4B008572930700006870877294070000527295070000284B014B024B02867296070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729707000074729807000062756268424B0168254E682B682C68524E756268424B0168436848298172990700007D729A0700002868267D729B0700008A06D07F5F70E97F6A7E0700007368424B026825686D686E4B0085729C070000687087729D07000052729E070000284B014B034B0386729F0700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A00700007472A107000062682B682C68524E7562756268424B016843683275628A06A02D5670E97F6828298172A20700007D72A307000028682B682C682D4B02682E4B0268267D72A40700008A06102E5670E97F6863298172A50700007D72A60700002868267D72A707000068424B0168676AA2070000682B682C68686869298172A80700007D72A907000028686C686D686E4B008572AA07000068708772AB0700005272AC070000284B014B028572AD0700006877894310000000000000F07F000000000000F07F72AE0700007472AF07000062687C8868267D72B00700008A06102E5670E97F6AA50700007368424B01687E686D686E4B008572B107000068708772B20700005272B3070000284B014B024B028672B4070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B50700007472B607000062682B682C6885686D686E4B008572B707000068708772B80700005272B9070000284B014B024B028672BA070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BB0700007472BC07000062756268854E75627368306828298172BD0700007D72BE07000028682B682C682D4B02682E4B0268267D72BF0700008A06A02D5670E97F6AA20700007368306831298172C00700007D72C10700002868267D72C20700008A06302D5670E97F6ABD0700007368926869298172C30700007D72C407000028686C686D686E4B008572C507000068708772C60700005272C7070000284B014B028572C80700006877894310000000000000F07F000000000000F07F72C90700007472CA07000062687C8868267D72CB0700008A06C02C5670E97F6AC00700007368424B01687E686D686E4B008572CC07000068708772CD0700005272CE070000284B014B024B028672CF070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D00700007472D107000062682B682C6885686D686E4B008572D207000068708772D30700005272D4070000284B014B024B028672D5070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D60700007472D707000062756268424B0168254E682B682C68524E756268424B0168436848298172D80700007D72D90700002868267D72DA0700008A06302D5670E97F6ABD0700007368424B026825686D686E4B008572DB07000068708772DC0700005272DD070000284B014B034B038672DE0700006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72DF0700007472E007000062682B682C68524E7562756268424B016843683275628A06A0965570E97F6828298172E10700007D72E207000028682B682C682D4B02682E4B0268267D72E30700008A0610975570E97F6863298172E40700007D72E50700002868267D72E607000068424B0168676AE1070000682B682C68686869298172E70700007D72E807000028686C686D686E4B008572E907000068708772EA0700005272EB070000284B014B028572EC0700006877894310000000000000F07F000000000000F07F72ED0700007472EE07000062687C8868267D72EF0700008A0610975570E97F6AE40700007368424B01687E686D686E4B008572F007000068708772F10700005272F2070000284B014B024B028672F3070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F40700007472F507000062682B682C6885686D686E4B008572F607000068708772F70700005272F8070000284B014B024B028672F9070000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FA0700007472FB07000062756268854E75627368306828298172FC0700007D72FD07000028682B682C682D4B02682E4B0268267D72FE0700008A06A0965570E97F6AE10700007368306831298172FF0700007D72000800002868267D72010800008A0630965570E97F6AFC0700007368926869298172020800007D720308000028686C686D686E4B008572040800006870877205080000527206080000284B014B028572070800006877894310000000000000F07F000000000000F07F720808000074720908000062687C8868267D720A0800008A06C0955570E97F6AFF0700007368424B01687E686D686E4B0085720B080000687087720C08000052720D080000284B014B024B0286720E080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F720F08000074721008000062682B682C6885686D686E4B008572110800006870877212080000527213080000284B014B024B02867214080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721508000074721608000062756268424B0168254E682B682C68524E756268424B0168436848298172170800007D72180800002868267D72190800008A0630965570E97F6AFC0700007368424B026825686D686E4B0085721A080000687087721B08000052721C080000284B014B034B0386721D0800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721E08000074721F08000062682B682C68524E7562756268424B016843683275628A06D0215670E97F6828298172200800007D722108000028682B682C682D4B02682E4B0268267D72220800008A0640225670E97F6863298172230800007D72240800002868267D722508000068424B0168676A20080000682B682C68686869298172260800007D722708000028686C686D686E4B00857228080000687087722908000052722A080000284B014B0285722B0800006877894310000000000000F07F000000000000F07F722C08000074722D08000062687C8868267D722E0800008A0640225670E97F6A230800007368424B01687E686D686E4B0085722F0800006870877230080000527231080000284B014B024B02867232080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723308000074723408000062682B682C6885686D686E4B008572350800006870877236080000527237080000284B014B024B02867238080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723908000074723A08000062756268854E756273683068282981723B0800007D723C08000028682B682C682D4B02682E4B0268267D723D0800008A06D0215670E97F6A2008000073683068312981723E0800007D723F0800002868267D72400800008A0660215670E97F6A3B0800007368926869298172410800007D724208000028686C686D686E4B008572430800006870877244080000527245080000284B014B028572460800006877894310000000000000F07F000000000000F07F724708000074724808000062687C8868267D72490800008A06F0205670E97F6A3E0800007368424B01687E686D686E4B0085724A080000687087724B08000052724C080000284B014B024B0286724D080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724E08000074724F08000062682B682C6885686D686E4B008572500800006870877251080000527252080000284B014B024B02867253080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725408000074725508000062756268424B0168254E682B682C68524E756268424B0168436848298172560800007D72570800002868267D72580800008A0660215670E97F6A3B0800007368424B026825686D686E4B00857259080000687087725A08000052725B080000284B014B034B0386725C0800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725D08000074725E08000062682B682C68524E7562756268424B016843683275628A0698286270E97F68282981725F0800007D726008000028682B682C682D4B02682E4B0268267D72610800006830683268424B016843682375628A06984F5570E97F6828298172620800007D726308000028682B682C682D4B02682E4B0268267D72640800008A0648705370E97F6863298172650800007D72660800002868267D726708000068424B0168676A62080000682B682C68686869298172680800007D726908000028686C686D686E4B0085726A080000687087726B08000052726C080000284B014B0285726D0800006877894310000000000000F07F000000000000F07F726E08000074726F08000062687C8868267D72700800008A0648705370E97F6A650800007368424B01687E686D686E4B008572710800006870877272080000527273080000284B014B024B02867274080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727508000074727608000062682B682C6885686D686E4B008572770800006870877278080000527279080000284B014B024B0286727A080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727B08000074727C08000062756268854E756273683068282981727D0800007D727E08000028682B682C682D4B02682E4B0268267D727F0800008A06984F5570E97F6A620800007368306831298172800800007D72810800002868267D72820800008A06284F5570E97F6A7D0800007368926869298172830800007D728408000028686C686D686E4B008572850800006870877286080000527287080000284B014B028572880800006877894310000000000000F07F000000000000F07F728908000074728A08000062687C8868267D728B0800008A06B84E5570E97F6A800800007368424B01687E686D686E4B0085728C080000687087728D08000052728E080000284B014B024B0286728F080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729008000074729108000062682B682C6885686D686E4B008572920800006870877293080000527294080000284B014B024B02867295080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729608000074729708000062756268424B0168254E682B682C68524E756268424B0168436848298172980800007D72990800002868267D729A0800008A06284F5570E97F6A7D0800007368424B026825686D686E4B0085729B080000687087729C08000052729D080000284B014B034B0386729E0800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729F0800007472A008000062682B682C68524E7562756268424B016843683275628A06B8276270E97F6828298172A10800007D72A208000028682B682C682D4B02682E4B0268267D72A30800006830683268424B016843682375628A06207A5F70E97F6828298172A40800007D72A508000028682B682C682D4B02682E4B0268267D72A60800008A06907A5F70E97F6863298172A70800007D72A80800002868267D72A908000068424B0168676AA4080000682B682C68686869298172AA0800007D72AB08000028686C686D686E4B008572AC08000068708772AD0800005272AE080000284B014B028572AF0800006877894310000000000000F07F000000000000F07F72B00800007472B108000062687C8868267D72B20800008A06907A5F70E97F6AA70800007368424B01687E686D686E4B008572B308000068708772B40800005272B5080000284B014B024B028672B6080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72B70800007472B808000062682B682C6885686D686E4B008572B908000068708772BA0800005272BB080000284B014B024B028672BC080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0800007472BE08000062756268854E75627368306828298172BF0800007D72C008000028682B682C682D4B02682E4B0268267D72C10800008A06207A5F70E97F6AA40800007368306831298172C20800007D72C30800002868267D72C40800008A06B0795F70E97F6ABF0800007368926869298172C50800007D72C608000028686C686D686E4B008572C708000068708772C80800005272C9080000284B014B028572CA0800006877894310000000000000F07F000000000000F07F72CB0800007472CC08000062687C8868267D72CD0800008A0640795F70E97F6AC20800007368424B01687E686D686E4B008572CE08000068708772CF0800005272D0080000284B014B024B028672D1080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D20800007472D308000062682B682C6885686D686E4B008572D408000068708772D50800005272D6080000284B014B024B028672D7080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D80800007472D908000062756268424B0168254E682B682C68524E756268424B0168436848298172DA0800007D72DB0800002868267D72DC0800008A06B0795F70E97F6ABF0800007368424B026825686D686E4B008572DD08000068708772DE0800005272DF080000284B014B034B038672E00800006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E10800007472E208000062682B682C68524E7562756268424B016843683275628A06D8765F70E97F6828298172E30800007D72E408000028682B682C682D4B02682E4B0268267D72E50800008A0648775F70E97F6863298172E60800007D72E70800002868267D72E808000068424B0168676AE3080000682B682C68686869298172E90800007D72EA08000028686C686D686E4B008572EB08000068708772EC0800005272ED080000284B014B028572EE0800006877894310000000000000F07F000000000000F07F72EF0800007472F008000062687C8868267D72F10800008A0648775F70E97F6AE60800007368424B01687E686D686E4B008572F208000068708772F30800005272F4080000284B014B024B028672F5080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72F60800007472F708000062682B682C6885686D686E4B008572F808000068708772F90800005272FA080000284B014B024B028672FB080000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0800007472FD08000062756268854E75627368306828298172FE0800007D72FF08000028682B682C682D4B02682E4B0268267D72000900008A06D8765F70E97F6AE30800007368306831298172010900007D72020900002868267D72030900008A0668765F70E97F6AFE0800007368926869298172040900007D720509000028686C686D686E4B008572060900006870877207090000527208090000284B014B028572090900006877894310000000000000F07F000000000000F07F720A09000074720B09000062687C8868267D720C0900008A06F8755F70E97F6A010900007368424B01687E686D686E4B0085720D090000687087720E09000052720F090000284B014B024B02867210090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721109000074721209000062682B682C6885686D686E4B008572130900006870877214090000527215090000284B014B024B02867216090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721709000074721809000062756268424B0168254E682B682C68524E756268424B0168436848298172190900007D721A0900002868267D721B0900008A0668765F70E97F6AFE0800007368424B026825686D686E4B0085721C090000687087721D09000052721E090000284B014B034B0386721F0900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722009000074722109000062682B682C68524E7562756268424B016843683275628A0698585570E97F68B1298172220900007D7223090000286838683268267D722409000068424B0168254E682B682C68524E68B568B6298172250900007D72260900002868267D72270900008A0698585570E97F6A220900007368424B01682B682C68524E756275628A06005B5570E97F68B1298172280900007D7229090000286838683268267D722A09000068424B0168254E682B682C68524E68B568B62981722B0900007D722C0900002868267D722D0900008A06005B5570E97F6A280900007368424B01682B682C68524E756275628A0620535E70E97F68B12981722E0900007D722F09000028683868B6298172300900007D72310900002868267D72320900008A0620535E70E97F6A2E0900007368424B01682B682C68524E756268267D723309000068424B0168254E682B682C68524E68B5683275628A06A06D4E70E97F6828298172340900007D723509000028682B682C682D4B02682E4B0268267D72360900008A06106E4E70E97F6863298172370900007D72380900002868267D723909000068424B0168676A34090000682B682C686868692981723A0900007D723B09000028686C686D686E4B0085723C090000687087723D09000052723E090000284B014B0285723F0900006877894310000000000000F07F000000000000F07F724009000074724109000062687C8868267D72420900008A06106E4E70E97F6A370900007368424B01687E686D686E4B008572430900006870877244090000527245090000284B014B024B02867246090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724709000074724809000062682B682C6885686D686E4B00857249090000687087724A09000052724B090000284B014B024B0286724C090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F724D09000074724E09000062756268854E756273683068282981724F0900007D725009000028682B682C682D4B02682E4B0268267D72510900008A06A06D4E70E97F6A340900007368306831298172520900007D72530900002868267D72540900008A06306D4E70E97F6A4F0900007368926869298172550900007D725609000028686C686D686E4B008572570900006870877258090000527259090000284B014B0285725A0900006877894310000000000000F07F000000000000F07F725B09000074725C09000062687C8868267D725D0900008A06C06C4E70E97F6A520900007368424B01687E686D686E4B0085725E090000687087725F090000527260090000284B014B024B02867261090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726209000074726309000062682B682C6885686D686E4B008572640900006870877265090000527266090000284B014B024B02867267090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F726809000074726909000062756268424B0168254E682B682C68524E756268424B01684368482981726A0900007D726B0900002868267D726C0900008A06306D4E70E97F6A4F0900007368424B026825686D686E4B0085726D090000687087726E09000052726F090000284B014B034B038672700900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727109000074727209000062682B682C68524E7562756268424B016843683275628A0690935570E97F6828298172730900007D727409000028682B682C682D4B02682E4B0268267D72750900008A0600945570E97F6863298172760900007D72770900002868267D727809000068424B0168676A73090000682B682C68686869298172790900007D727A09000028686C686D686E4B0085727B090000687087727C09000052727D090000284B014B0285727E0900006877894310000000000000F07F000000000000F07F727F09000074728009000062687C8868267D72810900008A0600945570E97F6A760900007368424B01687E686D686E4B008572820900006870877283090000527284090000284B014B024B02867285090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F728609000074728709000062682B682C6885686D686E4B00857288090000687087728909000052728A090000284B014B024B0286728B090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F728C09000074728D09000062756268854E756273683068282981728E0900007D728F09000028682B682C682D4B02682E4B0268267D72900900008A0690935570E97F6A730900007368306831298172910900007D72920900002868267D72930900008A0620935570E97F6A8E0900007368926869298172940900007D729509000028686C686D686E4B008572960900006870877297090000527298090000284B014B028572990900006877894310000000000000F07F000000000000F07F729A09000074729B09000062687C8868267D729C0900008A06B0925570E97F6A910900007368424B01687E686D686E4B0085729D090000687087729E09000052729F090000284B014B024B028672A0090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A10900007472A209000062682B682C6885686D686E4B008572A309000068708772A40900005272A5090000284B014B024B028672A6090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A70900007472A809000062756268424B0168254E682B682C68524E756268424B0168436848298172A90900007D72AA0900002868267D72AB0900008A0620935570E97F6A8E0900007368424B026825686D686E4B008572AC09000068708772AD0900005272AE090000284B014B034B038672AF0900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72B00900007472B109000062682B682C68524E7562756268424B016843683275628A06D09F5570E97F6828298172B20900007D72B309000028682B682C682D4B02682E4B0268267D72B40900008A0680905470E97F6863298172B50900007D72B60900002868267D72B709000068424B0168676AB2090000682B682C68686869298172B80900007D72B909000028686C686D686E4B008572BA09000068708772BB0900005272BC090000284B014B028572BD0900006877894310000000000000F07F000000000000F07F72BE0900007472BF09000062687C8868267D72C00900008A0680905470E97F6AB50900007368424B01687E686D686E4B008572C109000068708772C20900005272C3090000284B014B024B028672C4090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C50900007472C609000062682B682C6885686D686E4B008572C709000068708772C80900005272C9090000284B014B024B028672CA090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72CB0900007472CC09000062756268854E75627368306828298172CD0900007D72CE09000028682B682C682D4B02682E4B0268267D72CF0900008A06D09F5570E97F6AB20900007368306831298172D00900007D72D10900002868267D72D20900008A06609F5570E97F6ACD0900007368926869298172D30900007D72D409000028686C686D686E4B008572D509000068708772D60900005272D7090000284B014B028572D80900006877894310000000000000F07F000000000000F07F72D90900007472DA09000062687C8868267D72DB0900008A06F09E5570E97F6AD00900007368424B01687E686D686E4B008572DC09000068708772DD0900005272DE090000284B014B024B028672DF090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E00900007472E109000062682B682C6885686D686E4B008572E209000068708772E30900005272E4090000284B014B024B028672E5090000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E60900007472E709000062756268424B0168254E682B682C68524E756268424B0168436848298172E80900007D72E90900002868267D72EA0900008A06609F5570E97F6ACD0900007368424B026825686D686E4B008572EB09000068708772EC0900005272ED090000284B014B034B038672EE0900006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EF0900007472F009000062682B682C68524E7562756268424B016843683275628A0600745F70E97F6828298172F10900007D72F209000028682B682C682D4B02682E4B0268267D72F30900008A0670745F70E97F6863298172F40900007D72F50900002868267D72F609000068424B0168676AF1090000682B682C68686869298172F70900007D72F809000028686C686D686E4B008572F909000068708772FA0900005272FB090000284B014B028572FC0900006877894310000000000000F07F000000000000F07F72FD0900007472FE09000062687C8868267D72FF0900008A0670745F70E97F6AF40900007368424B01687E686D686E4B008572000A000068708772010A00005272020A0000284B014B024B028672030A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72040A00007472050A000062682B682C6885686D686E4B008572060A000068708772070A00005272080A0000284B014B024B028672090A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F720A0A000074720B0A000062756268854E756273683068282981720C0A00007D720D0A000028682B682C682D4B02682E4B0268267D720E0A00008A0600745F70E97F6AF109000073683068312981720F0A00007D72100A00002868267D72110A00008A0690735F70E97F6A0C0A00007368926869298172120A00007D72130A000028686C686D686E4B008572140A000068708772150A00005272160A0000284B014B028572170A00006877894310000000000000F07F000000000000F07F72180A00007472190A000062687C8868267D721A0A00008A0620735F70E97F6A0F0A00007368424B01687E686D686E4B0085721B0A0000687087721C0A000052721D0A0000284B014B024B0286721E0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721F0A00007472200A000062682B682C6885686D686E4B008572210A000068708772220A00005272230A0000284B014B024B028672240A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72250A00007472260A000062756268424B0168254E682B682C68524E756268424B0168436848298172270A00007D72280A00002868267D72290A00008A0690735F70E97F6A0C0A00007368424B026825686D686E4B0085722A0A0000687087722B0A000052722C0A0000284B014B034B0386722D0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722E0A000074722F0A000062682B682C68524E7562756268424B016843683275628A06A09D5470E97F6828298172300A00007D72310A000028682B682C682D4B02682E4B0268267D72320A00008A06109E5470E97F6863298172330A00007D72340A00002868267D72350A000068424B0168676A300A0000682B682C68686869298172360A00007D72370A000028686C686D686E4B008572380A000068708772390A000052723A0A0000284B014B0285723B0A00006877894310000000000000F07F000000000000F07F723C0A000074723D0A000062687C8868267D723E0A00008A06109E5470E97F6A330A00007368424B01687E686D686E4B0085723F0A000068708772400A00005272410A0000284B014B024B028672420A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72430A00007472440A000062682B682C6885686D686E4B008572450A000068708772460A00005272470A0000284B014B024B028672480A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72490A000074724A0A000062756268854E756273683068282981724B0A00007D724C0A000028682B682C682D4B02682E4B0268267D724D0A00008A06A09D5470E97F6A300A000073683068312981724E0A00007D724F0A00002868267D72500A00008A06309D5470E97F6A4B0A00007368926869298172510A00007D72520A000028686C686D686E4B008572530A000068708772540A00005272550A0000284B014B028572560A00006877894310000000000000F07F000000000000F07F72570A00007472580A000062687C8868267D72590A00008A06C09C5470E97F6A4E0A00007368424B01687E686D686E4B0085725A0A0000687087725B0A000052725C0A0000284B014B024B0286725D0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725E0A000074725F0A000062682B682C6885686D686E4B008572600A000068708772610A00005272620A0000284B014B024B028672630A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72640A00007472650A000062756268424B0168254E682B682C68524E756268424B0168436848298172660A00007D72670A00002868267D72680A00008A06309D5470E97F6A4B0A00007368424B026825686D686E4B008572690A0000687087726A0A000052726B0A0000284B014B034B0386726C0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726D0A000074726E0A000062682B682C68524E7562756268424B016843683275628A06A8545570E97F683C8A06B8275670E97F68282981726F0A00007D72700A000028682B682C682D4B02682E4B0268267D72710A00008A0628285670E97F6863298172720A00007D72730A00002868267D72740A000068424B0168676A6F0A0000682B682C68686869298172750A00007D72760A000028686C686D686E4B008572770A000068708772780A00005272790A0000284B014B0285727A0A00006877894310000000000000F07F000000000000F07F727B0A000074727C0A000062687C8868267D727D0A00008A0628285670E97F6A720A00007368424B01687E686D686E4B0085727E0A0000687087727F0A00005272800A0000284B014B024B028672810A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72820A00007472830A000062682B682C6885686D686E4B008572840A000068708772850A00005272860A0000284B014B024B028672870A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72880A00007472890A000062756268854E756273683068282981728A0A00007D728B0A000028682B682C682D4B02682E4B0268267D728C0A00008A06B8275670E97F6A6F0A000073683068312981728D0A00007D728E0A00002868267D728F0A00008A0648275670E97F6A8A0A00007368926869298172900A00007D72910A000028686C686D686E4B008572920A000068708772930A00005272940A0000284B014B028572950A00006877894310000000000000F07F000000000000F07F72960A00007472970A000062687C8868267D72980A00008A06D8265670E97F6A8D0A00007368424B01687E686D686E4B008572990A0000687087729A0A000052729B0A0000284B014B024B0286729C0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729D0A000074729E0A000062682B682C6885686D686E4B0085729F0A000068708772A00A00005272A10A0000284B014B024B028672A20A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A30A00007472A40A000062756268424B0168254E682B682C68524E756268424B0168436848298172A50A00007D72A60A00002868267D72A70A00008A0648275670E97F6A8A0A00007368424B026825686D686E4B008572A80A000068708772A90A00005272AA0A0000284B014B034B038672AB0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AC0A00007472AD0A000062682B682C68524E7562756268424B016843683275628A06B0995570E97F6828298172AE0A00007D72AF0A000028682B682C682D4B02682E4B0268267D72B00A00008A06209A5570E97F6863298172B10A00007D72B20A00002868267D72B30A000068424B0168676AAE0A0000682B682C68686869298172B40A00007D72B50A000028686C686D686E4B008572B60A000068708772B70A00005272B80A0000284B014B028572B90A00006877894310000000000000F07F000000000000F07F72BA0A00007472BB0A000062687C8868267D72BC0A00008A06209A5570E97F6AB10A00007368424B01687E686D686E4B008572BD0A000068708772BE0A00005272BF0A0000284B014B024B028672C00A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C10A00007472C20A000062682B682C6885686D686E4B008572C30A000068708772C40A00005272C50A0000284B014B024B028672C60A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C70A00007472C80A000062756268854E75627368306828298172C90A00007D72CA0A000028682B682C682D4B02682E4B0268267D72CB0A00008A06B0995570E97F6AAE0A00007368306831298172CC0A00007D72CD0A00002868267D72CE0A00008A0640995570E97F6AC90A00007368926869298172CF0A00007D72D00A000028686C686D686E4B008572D10A000068708772D20A00005272D30A0000284B014B028572D40A00006877894310000000000000F07F000000000000F07F72D50A00007472D60A000062687C8868267D72D70A00008A06D0985570E97F6ACC0A00007368424B01687E686D686E4B008572D80A000068708772D90A00005272DA0A0000284B014B024B028672DB0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0A00007472DD0A000062682B682C6885686D686E4B008572DE0A000068708772DF0A00005272E00A0000284B014B024B028672E10A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E20A00007472E30A000062756268424B0168254E682B682C68524E756268424B0168436848298172E40A00007D72E50A00002868267D72E60A00008A0640995570E97F6AC90A00007368424B026825686D686E4B008572E70A000068708772E80A00005272E90A0000284B014B034B038672EA0A00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EB0A00007472EC0A000062682B682C68524E7562756268424B016843683275628A06C09C5570E97F6828298172ED0A00007D72EE0A000028682B682C682D4B02682E4B0268267D72EF0A00008A06309D5570E97F6863298172F00A00007D72F10A00002868267D72F20A000068424B0168676AED0A0000682B682C68686869298172F30A00007D72F40A000028686C686D686E4B008572F50A000068708772F60A00005272F70A0000284B014B028572F80A00006877894310000000000000F07F000000000000F07F72F90A00007472FA0A000062687C8868267D72FB0A00008A06309D5570E97F6AF00A00007368424B01687E686D686E4B008572FC0A000068708772FD0A00005272FE0A0000284B014B024B028672FF0A0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72000B00007472010B000062682B682C6885686D686E4B008572020B000068708772030B00005272040B0000284B014B024B028672050B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72060B00007472070B000062756268854E75627368306828298172080B00007D72090B000028682B682C682D4B02682E4B0268267D720A0B00008A06C09C5570E97F6AED0A000073683068312981720B0B00007D720C0B00002868267D720D0B00008A06509C5570E97F6A080B000073689268692981720E0B00007D720F0B000028686C686D686E4B008572100B000068708772110B00005272120B0000284B014B028572130B00006877894310000000000000F07F000000000000F07F72140B00007472150B000062687C8868267D72160B00008A06E09B5570E97F6A0B0B00007368424B01687E686D686E4B008572170B000068708772180B00005272190B0000284B014B024B0286721A0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721B0B000074721C0B000062682B682C6885686D686E4B0085721D0B0000687087721E0B000052721F0B0000284B014B024B028672200B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72210B00007472220B000062756268424B0168254E682B682C68524E756268424B0168436848298172230B00007D72240B00002868267D72250B00008A06509C5570E97F6A080B00007368424B026825686D686E4B008572260B000068708772270B00005272280B0000284B014B034B038672290B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722A0B000074722B0B000062682B682C68524E7562756268424B016843683275628A06F0705F70E97F68282981722C0B00007D722D0B000028682B682C682D4B02682E4B0268267D722E0B00008A0660715F70E97F68632981722F0B00007D72300B00002868267D72310B000068424B0168676A2C0B0000682B682C68686869298172320B00007D72330B000028686C686D686E4B008572340B000068708772350B00005272360B0000284B014B028572370B00006877894310000000000000F07F000000000000F07F72380B00007472390B000062687C8868267D723A0B00008A0660715F70E97F6A2F0B00007368424B01687E686D686E4B0085723B0B0000687087723C0B000052723D0B0000284B014B024B0286723E0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723F0B00007472400B000062682B682C6885686D686E4B008572410B000068708772420B00005272430B0000284B014B024B028672440B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72450B00007472460B000062756268854E75627368306828298172470B00007D72480B000028682B682C682D4B02682E4B0268267D72490B00008A06F0705F70E97F6A2C0B000073683068312981724A0B00007D724B0B00002868267D724C0B00008A0680705F70E97F6A470B000073689268692981724D0B00007D724E0B000028686C686D686E4B0085724F0B000068708772500B00005272510B0000284B014B028572520B00006877894310000000000000F07F000000000000F07F72530B00007472540B000062687C8868267D72550B00008A06D06F4E70E97F6A4A0B00007368424B01687E686D686E4B008572560B000068708772570B00005272580B0000284B014B024B028672590B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725A0B000074725B0B000062682B682C6885686D686E4B0085725C0B0000687087725D0B000052725E0B0000284B014B024B0286725F0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72600B00007472610B000062756268424B0168254E682B682C68524E756268424B0168436848298172620B00007D72630B00002868267D72640B00008A0680705F70E97F6A470B00007368424B026825686D686E4B008572650B000068708772660B00005272670B0000284B014B034B038672680B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72690B000074726A0B000062682B682C68524E7562756268424B016843683275628A06307D5F70E97F68282981726B0B00007D726C0B000028682B682C682D4B02682E4B0268267D726D0B00008A06A07D5F70E97F68632981726E0B00007D726F0B00002868267D72700B000068424B0168676A6B0B0000682B682C68686869298172710B00007D72720B000028686C686D686E4B008572730B000068708772740B00005272750B0000284B014B028572760B00006877894310000000000000F07F000000000000F07F72770B00007472780B000062687C8868267D72790B00008A06A07D5F70E97F6A6E0B00007368424B01687E686D686E4B0085727A0B0000687087727B0B000052727C0B0000284B014B024B0286727D0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727E0B000074727F0B000062682B682C6885686D686E4B008572800B000068708772810B00005272820B0000284B014B024B028672830B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72840B00007472850B000062756268854E75627368306828298172860B00007D72870B000028682B682C682D4B02682E4B0268267D72880B00008A06307D5F70E97F6A6B0B00007368306831298172890B00007D728A0B00002868267D728B0B00008A06C07C5F70E97F6A860B000073689268692981728C0B00007D728D0B000028686C686D686E4B0085728E0B0000687087728F0B00005272900B0000284B014B028572910B00006877894310000000000000F07F000000000000F07F72920B00007472930B000062687C8868267D72940B00008A06507C5F70E97F6A890B00007368424B01687E686D686E4B008572950B000068708772960B00005272970B0000284B014B024B028672980B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72990B000074729A0B000062682B682C6885686D686E4B0085729B0B0000687087729C0B000052729D0B0000284B014B024B0286729E0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729F0B00007472A00B000062756268424B0168254E682B682C68524E756268424B0168436848298172A10B00007D72A20B00002868267D72A30B00008A06C07C5F70E97F6A860B00007368424B026825686D686E4B008572A40B000068708772A50B00005272A60B0000284B014B034B038672A70B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A80B00007472A90B000062682B682C68524E7562756268424B016843683275628A06C8435570E97F6828298172AA0B00007D72AB0B000028682B682C682D4B02682E4B0268267D72AC0B00008A0638445570E97F6863298172AD0B00007D72AE0B00002868267D72AF0B000068424B0168676AAA0B0000682B682C68686869298172B00B00007D72B10B000028686C686D686E4B008572B20B000068708772B30B00005272B40B0000284B014B028572B50B00006877894310000000000000F07F000000000000F07F72B60B00007472B70B000062687C8868267D72B80B00008A0638445570E97F6AAD0B00007368424B01687E686D686E4B008572B90B000068708772BA0B00005272BB0B0000284B014B024B028672BC0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0B00007472BE0B000062682B682C6885686D686E4B008572BF0B000068708772C00B00005272C10B0000284B014B024B028672C20B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C30B00007472C40B000062756268854E75627368306828298172C50B00007D72C60B000028682B682C682D4B02682E4B0268267D72C70B00008A06C8435570E97F6AAA0B00007368306831298172C80B00007D72C90B00002868267D72CA0B00008A0658435570E97F6AC50B00007368926869298172CB0B00007D72CC0B000028686C686D686E4B008572CD0B000068708772CE0B00005272CF0B0000284B014B028572D00B00006877894310000000000000F07F000000000000F07F72D10B00007472D20B000062687C8868267D72D30B00008A06E8425570E97F6AC80B00007368424B01687E686D686E4B008572D40B000068708772D50B00005272D60B0000284B014B024B028672D70B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72D80B00007472D90B000062682B682C6885686D686E4B008572DA0B000068708772DB0B00005272DC0B0000284B014B024B028672DD0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0B00007472DF0B000062756268424B0168254E682B682C68524E756268424B0168436848298172E00B00007D72E10B00002868267D72E20B00008A0658435570E97F6AC50B00007368424B026825686D686E4B008572E30B000068708772E40B00005272E50B0000284B014B034B038672E60B00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E70B00007472E80B000062682B682C68524E7562756268424B016843683275628A06B0495570E97F6828298172E90B00007D72EA0B000028682B682C682D4B02682E4B0268267D72EB0B00008A06204A5570E97F6863298172EC0B00007D72ED0B00002868267D72EE0B000068424B0168676AE90B0000682B682C68686869298172EF0B00007D72F00B000028686C686D686E4B008572F10B000068708772F20B00005272F30B0000284B014B028572F40B00006877894310000000000000F07F000000000000F07F72F50B00007472F60B000062687C8868267D72F70B00008A06204A5570E97F6AEC0B00007368424B01687E686D686E4B008572F80B000068708772F90B00005272FA0B0000284B014B024B028672FB0B0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0B00007472FD0B000062682B682C6885686D686E4B008572FE0B000068708772FF0B00005272000C0000284B014B024B028672010C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72020C00007472030C000062756268854E75627368306828298172040C00007D72050C000028682B682C682D4B02682E4B0268267D72060C00008A06B0495570E97F6AE90B00007368306831298172070C00007D72080C00002868267D72090C00008A0640495570E97F6A040C000073689268692981720A0C00007D720B0C000028686C686D686E4B0085720C0C0000687087720D0C000052720E0C0000284B014B0285720F0C00006877894310000000000000F07F000000000000F07F72100C00007472110C000062687C8868267D72120C00008A06D0485570E97F6A070C00007368424B01687E686D686E4B008572130C000068708772140C00005272150C0000284B014B024B028672160C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72170C00007472180C000062682B682C6885686D686E4B008572190C0000687087721A0C000052721B0C0000284B014B024B0286721C0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721D0C000074721E0C000062756268424B0168254E682B682C68524E756268424B01684368482981721F0C00007D72200C00002868267D72210C00008A0640495570E97F6A040C00007368424B026825686D686E4B008572220C000068708772230C00005272240C0000284B014B034B038672250C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72260C00007472270C000062682B682C68524E7562756268424B016843683275628A06C0755370E97F6828298172280C00007D72290C000028682B682C682D4B02682E4B0268267D722A0C00008A0630765370E97F68632981722B0C00007D722C0C00002868267D722D0C000068424B0168676A280C0000682B682C686868692981722E0C00007D722F0C000028686C686D686E4B008572300C000068708772310C00005272320C0000284B014B028572330C00006877894310000000000000F07F000000000000F07F72340C00007472350C000062687C8868267D72360C00008A0630765370E97F6A2B0C00007368424B01687E686D686E4B008572370C000068708772380C00005272390C0000284B014B024B0286723A0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723B0C000074723C0C000062682B682C6885686D686E4B0085723D0C0000687087723E0C000052723F0C0000284B014B024B028672400C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72410C00007472420C000062756268854E75627368306828298172430C00007D72440C000028682B682C682D4B02682E4B0268267D72450C00008A06C0755370E97F6A280C00007368306831298172460C00007D72470C00002868267D72480C00008A0650755370E97F6A430C00007368926869298172490C00007D724A0C000028686C686D686E4B0085724B0C0000687087724C0C000052724D0C0000284B014B0285724E0C00006877894310000000000000F07F000000000000F07F724F0C00007472500C000062687C8868267D72510C00008A06E0745370E97F6A460C00007368424B01687E686D686E4B008572520C000068708772530C00005272540C0000284B014B024B028672550C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72560C00007472570C000062682B682C6885686D686E4B008572580C000068708772590C000052725A0C0000284B014B024B0286725B0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725C0C000074725D0C000062756268424B0168254E682B682C68524E756268424B01684368482981725E0C00007D725F0C00002868267D72600C00008A0650755370E97F6A430C00007368424B026825686D686E4B008572610C000068708772620C00005272630C0000284B014B034B038672640C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72650C00007472660C000062682B682C68524E7562756268424B016843683275628A06A05D5E70E97F68B1298172670C00007D72680C0000286838683268267D72690C000068424B0168254E682B682C68524E68B568B62981726A0C00007D726B0C00002868267D726C0C00008A06A05D5E70E97F6A670C00007368424B01682B682C68524E756275628A0628585E70E97F68282981726D0C00007D726E0C000028682B682C682D4B02682E4B0268267D726F0C00008A0650C55A70E97F6863298172700C00007D72710C00002868267D72720C000068424B0168676A6D0C0000682B682C68686869298172730C00007D72740C000028686C686D686E4B008572750C000068708772760C00005272770C0000284B014B028572780C00006877894310000000000000F07F000000000000F07F72790C000074727A0C000062687C8868267D727B0C00008A0650C55A70E97F6A700C00007368424B01687E686D686E4B0085727C0C0000687087727D0C000052727E0C0000284B014B024B0286727F0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72800C00007472810C000062682B682C6885686D686E4B008572820C000068708772830C00005272840C0000284B014B024B028672850C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72860C00007472870C000062756268854E75627368306828298172880C00007D72890C000028682B682C682D4B02682E4B0268267D728A0C00008A0628585E70E97F6A6D0C000073683068312981728B0C00007D728C0C00002868267D728D0C00008A06885C5E70E97F6A880C000073689268692981728E0C00007D728F0C000028686C686D686E4B008572900C000068708772910C00005272920C0000284B014B028572930C00006877894310000000000000F07F000000000000F07F72940C00007472950C000062687C8868267D72960C00008A06F8C56170E97F6A8B0C00007368424B01687E686D686E4B008572970C000068708772980C00005272990C0000284B014B024B0286729A0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729B0C000074729C0C000062682B682C6885686D686E4B0085729D0C0000687087729E0C000052729F0C0000284B014B024B028672A00C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72A10C00007472A20C000062756268424B0168254E682B682C68524E756268424B0168436848298172A30C00007D72A40C00002868267D72A50C00008A06885C5E70E97F6A880C00007368424B026825686D686E4B008572A60C000068708772A70C00005272A80C0000284B014B034B038672A90C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AA0C00007472AB0C000062682B682C68524E7562756268424B016843683275628A06B8975470E97F6828298172AC0C00007D72AD0C000028682B682C682D4B02682E4B0268267D72AE0C00008A0628985470E97F6863298172AF0C00007D72B00C00002868267D72B10C000068424B0168676AAC0C0000682B682C68686869298172B20C00007D72B30C000028686C686D686E4B008572B40C000068708772B50C00005272B60C0000284B014B028572B70C00006877894310000000000000F07F000000000000F07F72B80C00007472B90C000062687C8868267D72BA0C00008A0628985470E97F6AAF0C00007368424B01687E686D686E4B008572BB0C000068708772BC0C00005272BD0C0000284B014B024B028672BE0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0C00007472C00C000062682B682C6885686D686E4B008572C10C000068708772C20C00005272C30C0000284B014B024B028672C40C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72C50C00007472C60C000062756268854E75627368306828298172C70C00007D72C80C000028682B682C682D4B02682E4B0268267D72C90C00008A06B8975470E97F6AAC0C00007368306831298172CA0C00007D72CB0C00002868267D72CC0C00008A0648975470E97F6AC70C00007368926869298172CD0C00007D72CE0C000028686C686D686E4B008572CF0C000068708772D00C00005272D10C0000284B014B028572D20C00006877894310000000000000F07F000000000000F07F72D30C00007472D40C000062687C8868267D72D50C00008A06D8965470E97F6ACA0C00007368424B01687E686D686E4B008572D60C000068708772D70C00005272D80C0000284B014B024B028672D90C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0C00007472DB0C000062682B682C6885686D686E4B008572DC0C000068708772DD0C00005272DE0C0000284B014B024B028672DF0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72E00C00007472E10C000062756268424B0168254E682B682C68524E756268424B0168436848298172E20C00007D72E30C00002868267D72E40C00008A0648975470E97F6AC70C00007368424B026825686D686E4B008572E50C000068708772E60C00005272E70C0000284B014B034B038672E80C00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E90C00007472EA0C000062682B682C68524E7562756268424B016843683275628A06906A4E70E97F6828298172EB0C00007D72EC0C000028682B682C682D4B02682E4B0268267D72ED0C00008A06006B4E70E97F6863298172EE0C00007D72EF0C00002868267D72F00C000068424B0168676AEB0C0000682B682C68686869298172F10C00007D72F20C000028686C686D686E4B008572F30C000068708772F40C00005272F50C0000284B014B028572F60C00006877894310000000000000F07F000000000000F07F72F70C00007472F80C000062687C8868267D72F90C00008A06006B4E70E97F6AEE0C00007368424B01687E686D686E4B008572FA0C000068708772FB0C00005272FC0C0000284B014B024B028672FD0C0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0C00007472FF0C000062682B682C6885686D686E4B008572000D000068708772010D00005272020D0000284B014B024B028672030D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72040D00007472050D000062756268854E75627368306828298172060D00007D72070D000028682B682C682D4B02682E4B0268267D72080D00008A06906A4E70E97F6AEB0C00007368306831298172090D00007D720A0D00002868267D720B0D00008A06E8694E70E97F6A060D000073689268692981720C0D00007D720D0D000028686C686D686E4B0085720E0D0000687087720F0D00005272100D0000284B014B028572110D00006877894310000000000000F07F000000000000F07F72120D00007472130D000062687C8868267D72140D00008A06B0694E70E97F6A090D00007368424B01687E686D686E4B008572150D000068708772160D00005272170D0000284B014B024B028672180D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72190D000074721A0D000062682B682C6885686D686E4B0085721B0D0000687087721C0D000052721D0D0000284B014B024B0286721E0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F721F0D00007472200D000062756268424B0168254E682B682C68524E756268424B0168436848298172210D00007D72220D00002868267D72230D00008A06E8694E70E97F6A060D00007368424B026825686D686E4B008572240D000068708772250D00005272260D0000284B014B034B038672270D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72280D00007472290D000062682B682C68524E7562756268424B016843683275628A0630F65D70E97F68282981722A0D00007D722B0D000028682B682C682D4B02682E4B0268267D722C0D00008A0650256070E97F68632981722D0D00007D722E0D00002868267D722F0D000068424B0168676A2A0D0000682B682C68686869298172300D00007D72310D000028686C686D686E4B008572320D000068708772330D00005272340D0000284B014B028572350D00006877894310000000000000F07F000000000000F07F72360D00007472370D000062687C8868267D72380D00008A0650256070E97F6A2D0D00007368424B01687E686D686E4B008572390D0000687087723A0D000052723B0D0000284B014B024B0286723C0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F723D0D000074723E0D000062682B682C6885686D686E4B0085723F0D000068708772400D00005272410D0000284B014B024B028672420D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72430D00007472440D000062756268854E75627368306828298172450D00007D72460D000028682B682C682D4B02682E4B0268267D72470D00008A0630F65D70E97F6A2A0D00007368306831298172480D00007D72490D00002868267D724A0D00008A0618F55D70E97F6A450D000073689268692981724B0D00007D724C0D000028686C686D686E4B0085724D0D0000687087724E0D000052724F0D0000284B014B028572500D00006877894310000000000000F07F000000000000F07F72510D00007472520D000062687C8868267D72530D00008A0678F95D70E97F6A480D00007368424B01687E686D686E4B008572540D000068708772550D00005272560D0000284B014B024B028672570D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72580D00007472590D000062682B682C6885686D686E4B0085725A0D0000687087725B0D000052725C0D0000284B014B024B0286725D0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F725E0D000074725F0D000062756268424B0168254E682B682C68524E756268424B0168436848298172600D00007D72610D00002868267D72620D00008A0618F55D70E97F6A450D00007368424B026825686D686E4B008572630D000068708772640D00005272650D0000284B014B034B038672660D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72670D00007472680D000062682B682C68524E7562756268424B016843683275628A06A87B5370E97F6828298172690D00007D726A0D000028682B682C682D4B02682E4B0268267D726B0D00008A06187C5370E97F68632981726C0D00007D726D0D00002868267D726E0D000068424B0168676A690D0000682B682C686868692981726F0D00007D72700D000028686C686D686E4B008572710D000068708772720D00005272730D0000284B014B028572740D00006877894310000000000000F07F000000000000F07F72750D00007472760D000062687C8868267D72770D00008A06187C5370E97F6A6C0D00007368424B01687E686D686E4B008572780D000068708772790D000052727A0D0000284B014B024B0286727B0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F727C0D000074727D0D000062682B682C6885686D686E4B0085727E0D0000687087727F0D00005272800D0000284B014B024B028672810D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72820D00007472830D000062756268854E75627368306828298172840D00007D72850D000028682B682C682D4B02682E4B0268267D72860D00008A06A87B5370E97F6A690D00007368306831298172870D00007D72880D00002868267D72890D00008A06387B5370E97F6A840D000073689268692981728A0D00007D728B0D000028686C686D686E4B0085728C0D0000687087728D0D000052728E0D0000284B014B0285728F0D00006877894310000000000000F07F000000000000F07F72900D00007472910D000062687C8868267D72920D00008A06C87A5370E97F6A870D00007368424B01687E686D686E4B008572930D000068708772940D00005272950D0000284B014B024B028672960D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F72970D00007472980D000062682B682C6885686D686E4B008572990D0000687087729A0D000052729B0D0000284B014B024B0286729C0D0000687789432000000000000000000000000000000000000000000000F03F000000000000F03F729D0D000074729E0D000062756268424B0168254E682B682C68524E756268424B01684368482981729F0D00007D72A00D00002868267D72A10D00008A06387B5370E97F6A840D00007368424B026825686D686E4B008572A20D000068708772A30D00005272A40D0000284B014B034B038672A50D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A60D00007472A70D000062682B682C68524E7562756268424B016843683275628A0628216270E97F68297568926A8805000068424B0168254E682B682C68524E756268424B016843682375628A0698286270E97F6A5F0800008A06B8276270E97F6AA10800007568424B0168476849682B682C68524E6853470000000000000000473FB55555555555558672A80D0000756258070000007061746368657372A90D00005D72AA0D000028636D6174706C6F746C69622E706174636865730A52656374616E676C650A72AB0D0000298172AC0D00007D72AD0D00002868034E6805896806680168074E68086AAF0C00006809680A5D72AE0D00005D72AF0D0000636E756D70792E636F72652E6D756C746961727261790A7363616C61720A72B00D000068774308000000000000000072B10D00008672B20D00005272B30D0000618672B40D00008172B50D000058090000005F636C69707061746872B60D00004E58060000005F7374616C6572B70D000088580D0000005F7472616E73666F726D53657472B80D00008858060000005F616E676C6572B90D0000470000000000000000580C0000005F616E7469616C696173656472BA0D000088580A0000005F75735F64617368657372BB0D00004E4E8672BC0D000058050000005F66696C6C72BD0D00008868B547000000000000000058050000005F736E617072BE0D00004E58080000005F76697369626C6572BF0D000088580E0000005F70726F706F627365727665727372C00D00007D72C10D0000580A0000005F6C696E657374796C6572C20D00005805000000736F6C696472C30D000058060000005F776964746872C40D000047404B99999999999A58070000005F68656967687472C50D00004740C870000000000058060000005F6C6162656C72C60D0000580A0000005F6E6F6C6567656E645F72C70D000058060000005F686174636872C80D00004E580F0000005F726563745F7472616E73666F726D72C90D00006828298172CA0D00007D72CB0D000028682B682C682D4B02682E4B0268267D72CC0D000068306831298172CD0D00007D72CE0D00002868267D72CF0D00008A0618955470E97F6ACA0D00007368926869298172D00D00007D72D10D000028686C686D686E4B008572D20D000068708772D30D00005272D40D0000284B014B028572D50D00006877894310000000000000F07F000000000000F07F72D60D00007472D70D000062687C8868267D72D80D00008A06C89A5470E97F6ACD0D00007368424B01687E686D686E4B008572D90D000068708772DA0D00005272DB0D0000284B014B024B028672DC0D000068778943200000000000004AC00000000000000000A099999999990940000000000070C84072DD0D00007472DE0D000062682B682C6885686D686E4B008572DF0D000068708772E00D00005272E10D0000284B014B024B028672E20D000068778943200000000000004AC00000000000000000A099999999990940000000000070C84072E30D00007472E40D000062756268424B0168254E682B682C68524E756268424B0168436848298172E50D00007D72E60D00002868267D72E70D00008A0618955470E97F6ACA0D00007368424B006825686D686E4B008572E80D000068708772E90D00005272EA0D0000284B014B034B038672EB0D00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72EC0D00007472ED0D000062682B682C68524E7562756258070000005F64617368657372EE0D00004E58040000005F75726C72EF0D00004E58040000005F67696472F00D00004E68676839580A0000005F6C696E65776964746872F10D0000473FF0000000000000683847C04A000000000000580B0000005F646173686F666673657472F20D00004E58070000005F636C69706F6E72F30D00008858090000005F636F6E7461696E7372F40D00004E58130000005F6F726967696E616C5F65646765636F6C6F7272F50D00004E58090000005F6361707374796C6572F60D000058040000006275747472F70D0000580D0000005F706174685F6566666563747372F80D00005D72F90D0000580E0000005F72656D6F76655F6D6574686F6472FA0D00004E58130000005F636F6D62696E65645F7472616E73666F726D72FB0D000068B6298172FC0D00007D72FD0D00002868267D72FE0D000068424B01682B682C68524E756258040000005F6F696472FF0D00004B00580A0000005F6A6F696E7374796C6572000E000058050000006D6974657272010E0000580E0000007374616C655F63616C6C6261636B72020E00004E580A0000005F65646765636F6C6F7272030E0000284700000000000000004700000000000000004700000000000000004700000000000000007472040E000058060000005F616C70686172050E00004E580B0000005F6167675F66696C74657272060E00004E58130000005F6F726967696E616C5F66616365636F6C6F7272070E0000686D686E4B008572080E000068708772090E000052720A0E0000284B014B0485720B0E000068778943201F1F1F1F1F1FBF3FDEDDDDDDDDDDDD3F979696969696E63F000000000000F03F720C0E000074720D0E000062580A0000005F66616365636F6C6F72720E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074720F0E000058050000005F6178657372100E0000681D58090000005F616E696D6174656472110E000089580A0000005F6D6F7573656F76657272120E000089580B0000005F726173746572697A656472130E00004E75626AAB0D0000298172140E00007D72150E00002868034E6805896806680168074E68086A330A00006809680A5D72160E00005D72170E00006AB00D000068774308000000000000000072180E00008672190E000052721A0E00006186721B0E000081721C0E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E86721D0E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D721E0E00006AC20D00006AC30D00006AC40D000047404B99999999999A6AC50D0000474139BA19000000006AC60D00006AC70D00006AC80D00004E6AC90D000068282981721F0E00007D72200E000028682B682C682D4B02682E4B0268267D72210E000068306831298172220E00007D72230E00002868267D72240E00008A06E09B5470E97F6A1F0E00007368926869298172250E00007D72260E000028686C686D686E4B008572270E000068708772280E00005272290E0000284B014B0285722A0E00006877894310000000000000F07F000000000000F07F722B0E000074722C0E000062687C8868267D722D0E00008A06F0405570E97F6A220E00007368424B01687E686D686E4B0085722E0E0000687087722F0E00005272300E0000284B014B024B028672310E00006877894320A09999999999094000000000000000003433333333334D400000000019BA394172320E00007472330E000062682B682C6885686D686E4B008572340E000068708772350E00005272360E0000284B014B024B028672370E00006877894320A09999999999094000000000000000003433333333334D400000000019BA394172380E00007472390E000062756268424B0168254E682B682C68524E756268424B01684368482981723A0E00007D723B0E00002868267D723C0E00008A06E09B5470E97F6A1F0E00007368424B006825686D686E4B0085723D0E0000687087723E0E000052723F0E0000284B014B034B038672400E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72410E00007472420E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF000000000000068384740099999999999A06AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472430E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172440E00007D72450E00002868267D72460E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D6974657272470E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472480E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D0000298172490E00007D724A0E00002868034E6805896806680168074E68086AAD0B00006809680A5D724B0E00005D724C0E00006AB00D0000687743080000000000000000724D0E000086724E0E000052724F0E0000618672500E00008172510E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672520E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72530E00006AC20D00006AC30D00006AC40D000047404B99999999999C6AC50D00004740B39600000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172540E00007D72550E000028682B682C682D4B02682E4B0268267D72560E000068306831298172570E00007D72580E00002868267D72590E00008A06189C5470E97F6A540E000073689268692981725A0E00007D725B0E000028686C686D686E4B0085725C0E0000687087725D0E000052725E0E0000284B014B0285725F0E00006877894310000000000000F07F000000000000F07F72600E00007472610E000062687C8868267D72620E00008A06D8465570E97F6A570E00007368424B01687E686D686E4B008572630E000068708772640E00005272650E0000284B014B024B028672660E000068778943203433333333334D4000000000000000006866666666665C40000000000096B34072670E00007472680E000062682B682C6885686D686E4B008572690E0000687087726A0E000052726B0E0000284B014B024B0286726C0E000068778943203433333333334D4000000000000000006866666666665C40000000000096B340726D0E000074726E0E000062756268424B0168254E682B682C68524E756268424B01684368482981726F0E00007D72700E00002868267D72710E00008A06189C5470E97F6A540E00007368424B006825686D686E4B008572720E000068708772730E00005272740E0000284B014B034B038672750E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72760E00007472770E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847404D3333333333346AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472780E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172790E00007D727A0E00002868267D727B0E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D69746572727C0E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074727D0E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D00002981727E0E00007D727F0E00002868034E6805896806680168074E68086AEC0B00006809680A5D72800E00005D72810E00006AB00D000068774308000000000000000072820E00008672830E00005272840E0000618672850E00008172860E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672870E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72880E00006AC20D00006AC30D00006AC40D000047404B9999999999986AC50D00004740720000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172890E00007D728A0E000028682B682C682D4B02682E4B0268267D728B0E0000683068312981728C0E00007D728D0E00002868267D728E0E00008A06F0475570E97F6A890E000073689268692981728F0E00007D72900E000028686C686D686E4B008572910E000068708772920E00005272930E0000284B014B028572940E00006877894310000000000000F07F000000000000F07F72950E00007472960E000062687C8868267D72970E00008A06C04C5570E97F6A8C0E00007368424B01687E686D686E4B008572980E000068708772990E000052729A0E0000284B014B024B0286729B0E000068778943206866666666665C4000000000000000009A999999991965400000000000007240729C0E000074729D0E000062682B682C6885686D686E4B0085729E0E0000687087729F0E00005272A00E0000284B014B024B028672A10E000068778943206866666666665C4000000000000000009A99999999196540000000000000724072A20E00007472A30E000062756268424B0168254E682B682C68524E756268424B0168436848298172A40E00007D72A50E00002868267D72A60E00008A06F0475570E97F6A890E00007368424B006825686D686E4B008572A70E000068708772A80E00005272A90E0000284B014B034B038672AA0E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AB0E00007472AC0E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847405C6666666666686AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472AD0E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172AE0E00007D72AF0E00002868267D72B00E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D6974657272B10E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472B20E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D0000298172B30E00007D72B40E00002868034E6805896806680168074E68086A650800006809680A5D72B50E00005D72B60E00006AB00D000068774308000000000000000072B70E00008672B80E00005272B90E0000618672BA0E00008172BB0E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672BC0E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72BD0E00006AC20D00006AC30D00006AC40D000047404B9999999999986AC50D0000474051C000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172BE0E00007D72BF0E000028682B682C682D4B02682E4B0268267D72C00E000068306831298172C10E00007D72C20E00002868267D72C30E00008A06D84D5570E97F6ABE0E00007368926869298172C40E00007D72C50E000028686C686D686E4B008572C60E000068708772C70E00005272C80E0000284B014B028572C90E00006877894310000000000000F07F000000000000F07F72CA0E00007472CB0E000062687C8868267D72CC0E00008A06E8725370E97F6AC10E00007368424B01687E686D686E4B008572CD0E000068708772CE0E00005272CF0E0000284B014B024B028672D00E000068778943209A9999999919654000000000000000000000000000006C400000000000C0514072D10E00007472D20E000062682B682C6885686D686E4B008572D30E000068708772D40E00005272D50E0000284B014B024B028672D60E000068778943209A9999999919654000000000000000000000000000006C400000000000C0514072D70E00007472D80E000062756268424B0168254E682B682C68524E756268424B0168436848298172D90E00007D72DA0E00002868267D72DB0E00008A06D84D5570E97F6ABE0E00007368424B006825686D686E4B008572DC0E000068708772DD0E00005272DE0E0000284B014B034B038672DF0E00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E00E00007472E10E000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847406519999999999A6AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472E20E00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172E30E00007D72E40E00002868267D72E50E000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D6974657272E60E00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF00000000000007472E70E00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D0000298172E80E00007D72E90E00002868034E6805896806680168074E68086A2B0C00006809680A5D72EA0E00005D72EB0E00006AB00D000068774308000000000000000072EC0E00008672ED0E00005272EE0E0000618672EF0E00008172F00E00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672F10E00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72F20E00006AC20D00006AC30D00006AC40D000047404B9999999999A06AC50D00004740320000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172F30E00007D72F40E000028682B682C682D4B02682E4B0268267D72F50E000068306831298172F60E00007D72F70E00002868267D72F80E00008A0600745370E97F6AF30E00007368926869298172F90E00007D72FA0E000028686C686D686E4B008572FB0E000068708772FC0E00005272FD0E0000284B014B028572FE0E00006877894310000000000000F07F000000000000F07F72FF0E00007472000F000062687C8868267D72010F00008A06D0785370E97F6AF60E00007368424B01687E686D686E4B008572020F000068708772030F00005272040F0000284B014B024B028672050F000068778943200000000000006C4000000000000000003433333333737140000000000000324072060F00007472070F000062682B682C6885686D686E4B008572080F000068708772090F000052720A0F0000284B014B024B0286720B0F000068778943200000000000006C40000000000000000034333333337371400000000000003240720C0F000074720D0F000062756268424B0168254E682B682C68524E756268424B01684368482981720E0F00007D720F0F00002868267D72100F00008A0600745370E97F6AF30E00007368424B006825686D686E4B008572110F000068708772120F00005272130F0000284B014B034B038672140F00006877894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72150F00007472160F000062682B682C68524E756275626AEE0D00004E6AEF0D00004E6AF00D00004E686768396AF10D0000473FF0000000000000683847406C0000000000006AF20D00004E6AF30D0000886AF40D00004E6AF50D00004E6AF60D000058040000006275747472170F00006AF80D00006AF90D00006AFA0D00004E6AFB0D000068B6298172180F00007D72190F00002868267D721A0F000068424B01682B682C68524E75626AFF0D00004B006A000E000058050000006D69746572721B0F00006A020E00004E6A030E00006A040E00006A050E00004E6A060E00004E6A070E00006A0A0E00006A0E0E000028473FBF1F1F1F1F1F1F473FDDDDDDDDDDDDDE473FE6969696969697473FF000000000000074721C0F00006A100E0000681D6A110E0000896A120E0000896A130E00004E75626AAB0D00002981721D0F00007D721E0F00002868034E6805896806680168074E68086A6C0D00006809680A5D721F0F00005D72200F00006AB00D000068774308000000000000000072210F00008672220F00005272230F0000618672240F00008172250F00006AB60D00004E6AB70D0000886AB80D0000886AB90D00004700000000000000006ABA0D0000886ABB0D00004E4E8672260F00006ABD0D00008868B54700000000000000006ABE0D00004E6ABF0D0000886AC00D00007D72270F00006AC20D00006AC30D00006AC40D000047404B9999999999986AC50D000047401C0000000000006AC60D00006AC70D00006AC80D00004E6AC90D00006828298172280F00007D72290F000028682B682C682D4B02682E4B0268267D722A0F0000683068312981722B0F00007D722C0F00002868267D722D0F00008A06E8795370E97F6A280F000073689268692981722E0F00007D722F0F000028686C686D686E4B008572300F000068708772310F00005272320F0000284B014B028572330F00006877894310000000000000F07F000000000000F07F72340F00007472350F000062687C8868267D72360F00008A06B87E5370E97F6A2B0F00007368424B01687E686D686E4B008572370F000068708772380F00005272390F0000284B014B024B0286723A0F00006877894320343333333373714000000000000000006766666666E674400000000000001C40723B0F000074723C0F000062682B682C6885686D686E4B0085723D0F0000687087723E0F000052723F0F0000284B014B024B028672400F00006877894320343333333373714000000000000000006766666666E674400000000000001C4072410F00007472420F000062756268424B0168254E682B682C68524E756268424B0168436848298172430F00007D72440F00002868267D72450F00008A06E8
0x8003636D6174706C6F746C69622E6669677572650A4669677572650A7100298171017D71022858070000005F7069636B657271034E58050000005F686F6C6471048858080000006576656E74736F6E710589580600000066696775726571064E58070000005F736B6574636871074E5807000000636C6970626F7871084E580D0000005F737469636B795F65646765737109636D6174706C6F746C69622E6172746973740A5F5859506169720A710A5D710B5D710C86710D81710E58110000007375707072657373436F6D706F73697465710F4E58040000005F647069711047405900000000000058080000005F6178737461636B7111636D6174706C6F746C69622E6669677572650A41786573537461636B0A7112298171137D71142858090000005F656C656D656E747371155D71164B014B014B01877117298671184B04636D6174706C6F746C69622E617865732E5F737562706C6F74730A5F5069636B6C61626C65537562706C6F74436C617373436F6E7374727563746F720A71192981711A636D6174706C6F746C69622E617865732E5F617865730A417865730A711B85711C52711D7D711E28580B0000005F61646A75737461626C65711F5803000000626F7871206804886805896806680158100000007469746C654F66667365745472616E737121636D6174706C6F746C69622E7472616E73666F726D730A5363616C65645472616E736C6174696F6E0A7122298171237D71242858040000005F6D747871254E58080000005F706172656E747371267D7127288A0678E94F70E97F636D6174706C6F746C69622E7472616E73666F726D730A436F6D706F7369746547656E657269635472616E73666F726D0A7128298171297D712A28580F0000005F73686F727468616E645F6E616D65712B5800000000712C580A000000696E7075745F64696D73712D4B02580B0000006F75747075745F64696D73712E4B0268267D712F58020000005F617130636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D546F0A7131298171327D71332868267D7134288A0640925370E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E646564416666696E6532440A7135298171367D71372858020000005F787138683268267D713958080000005F696E76616C6964713A4B0168254E682B682C58090000005F696E766572746564713B4E58020000005F79713C636D6174706C6F746C69622E7472616E73666F726D730A4964656E746974795472616E73666F726D0A713D2981713E7D713F2868267D71408A0640925370E97F683673683A4B01682B682C683B4E756275628A0680E75070E97F6828298171417D714228682B682C682D4B02682E4B0268267D71438A06F0E75070E97F636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D656442626F780A7144298171457D71462868267D7147683A4B01580A0000005F7472616E73666F726D71486841682B682C58050000005F62626F787149636D6174706C6F746C69622E7472616E73666F726D730A42626F780A714A2981714B7D714C2858070000005F6D696E706F73714D636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A714E636E756D70790A6E6461727261790A714F4B008571504301627151877152527153284B014B02857154636E756D70790A64747970650A71555802000000663871564B004B01877157527158284B0358010000003C71594E4E4E4AFFFFFFFF4AFFFFFFFF4B0074715A62894310000000000000F07F000000000000F07F715B74715C6258070000005F69676E6F7265715D8868267D715E8A06F0E75070E97F684573683A4B01580C0000005F706F696E74735F6F726967715F684E684F4B008571606851877161527162284B014B024B02867163685889432000000000000000000000000000000000000000000000F03F000000000000F03F716474716562682B682C58070000005F706F696E74737166684E684F4B008571676851877168527169284B014B024B0286716A685889432000000000000000000000000000000000000000000000F03F000000000000F03F716B74716C62756268664E756273683068282981716D7D716E28682B682C682D4B02682E4B0268267D716F8A0680E75070E97F68417368306831298171707D71712868267D71728A0610E75070E97F686D7358070000005F626F786F75747173684A298171747D717528684D684E684F4B008571766851877177527178284B014B028571796858894310000000000000F07F000000000000F07F717A74717B62685D8868267D717C8A06A0E65070E97F687073683A4B01685F684E684F4B0085717D685187717E52717F284B014B024B02867180685889432000000000000000000000000000000000000000000000F03F000000000000F03F718174718262682B682C6866684E684F4B008571836851877184527185284B014B024B02867186685889432000000000000000000000000000000000000000000000F03F000000000000F03F7187747188627562683A4B0168254E682B682C683B4E7562683A4B0158020000005F627189636D6174706C6F746C69622E7472616E73666F726D730A416666696E6532440A718A2981718B7D718C2868267D718D8A0610E75070E97F686D73683A4B026825684E684F4B0085718E685187718F527190284B014B034B038671916858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F719274719362682B682C683B4E75627562683A4B016889683275628A0678E94F70E97F68298A0608995070E97F636D6174706C6F746C69622E7472616E73666F726D730A426C656E64656447656E657269635472616E73666F726D0A7194298171957D71962868386828298171977D719828682B682C682D4B02682E4B0268267D7199288A0608995070E97F68958A0678995070E97F68942981719A7D719B286838683268267D719C288A06A0365470E97F68282981719D7D719E28682B682C682D4B02682E4B0268267D719F6830689A683A4B0268896822298171A07D71A12868254E68267D71A28A06A0365470E97F689D73683A4B01580C0000005F7363616C655F7472616E7371A3688A298171A47D71A52868267D71A6288A0680E05370E97F6822298171A77D71A82868254E68267D71A98A0668E65370E97F6828298171AA7D71AB28682B682C682D4B02682E4B0268267D71AC68306895683A4B02688968A7756273683A4B0168A368A4682B682C683B4E58020000005F7471AD4B0047BFB33333333333348671AE75628A0680305470E97F6822298171AF7D71B02868254E68267D71B18A0660EF5370E97F6828298171B27D71B328682B682C682D4B02682E4B0268267D71B46830689A683A4B02688968AF756273683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008671B575628A06506C4E70E97F6822298171B67D71B72868254E68267D71B88A06C06C4E70E97F6828298171B97D71BA28682B682C682D4B02682E4B0268267D71BB68306894298171BC7D71BD2868386828298171BE7D71BF28682B682C682D4B02682E4B0268267D71C0288A06C0555570E97F68BC8A06A8545570E97F6894298171C17D71C22868386831298171C37D71C42868267D71C5288A06C0555570E97F68BC8A06009B5470E97F6828298171C67D71C728682B682C682D4B02682E4B0268267D71C88A0628985470E97F6844298171C97D71CA2868267D71CB683A4B01684868C6682B682C6849684A298171CC7D71CD28684D684E684F4B008571CE68518771CF5271D0284B014B028571D16858894310000000000000F07F000000000000F07F71D27471D362685D8868267D71D48A0628985470E97F68C973683A4B01685F684E684F4B008571D568518771D65271D7284B014B024B028671D8685889432000000000000000000000000000000000000000000000F03F000000000000F03F71D97471DA62682B682C6866684E684F4B008571DB68518771DC5271DD284B014B024B028671DE685889432000000000000000000000000000000000000000000000F03F000000000000F03F71DF7471E062756268664E75627368306828298171E17D71E228682B682C682D4B02682E4B0268267D71E38A06009B5470E97F68C67368306831298171E47D71E52868267D71E68A06589A5470E97F68E1736873684A298171E77D71E828684D684E684F4B008571E968518771EA5271EB284B014B028571EC6858894310000000000000F07F000000000000F07F71ED7471EE62685D8868267D71EF8A06E8995470E97F68E473683A4B01685F684E684F4B008571F068518771F15271F2284B014B024B028671F3685889432000000000000000000000000000000000000000000000F03F000000000000F03F71F47471F562682B682C6866684E684F4B008571F668518771F75271F8284B014B024B028671F9685889432000000000000000000000000000000000000000000000F03F000000000000F03F71FA7471FB627562683A4B0168254E682B682C683B4E7562683A4B016889688A298171FC7D71FD2868267D71FE8A06589A5470E97F68E173683A4B026825684E684F4B008571FF6851877200010000527201010000284B014B034B038672020100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720301000074720401000062682B682C683B4E75627562683A4B01688968C375628A0690F35D70E97F6828298172050100007D720601000028682B682C682D4B02682E4B0268267D72070100008A0620FA5D70E97F6844298172080100007D72090100002868267D720A010000683A4B0168486A05010000682B682C6849684A2981720B0100007D720C01000028684D684E684F4B0085720D010000685187720E01000052720F010000284B014B028572100100006858894310000000000000F07F000000000000F07F721101000074721201000062685D8868267D72130100008A0620FA5D70E97F6A0801000073683A4B01685F684E684F4B008572140100006851877215010000527216010000284B014B024B02867217010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721801000074721901000062682B682C6866684E684F4B0085721A010000685187721B01000052721C010000284B014B024B0286721D010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721E01000074721F01000062756268664E75627368306828298172200100007D722101000028682B682C682D4B02682E4B0268267D72220100008A0690F35D70E97F6A050100007368306831298172230100007D72240100002868267D72250100008A0678F95D70E97F6A20010000736873684A298172260100007D722701000028684D684E684F4B00857228010000685187722901000052722A010000284B014B0285722B0100006858894310000000000000F07F000000000000F07F722C01000074722D01000062685D8868267D722E0100008A0618F55D70E97F6A2301000073683A4B01685F684E684F4B0085722F0100006851877230010000527231010000284B014B024B02867232010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723301000074723401000062682B682C6866684E684F4B008572350100006851877236010000527237010000284B014B024B02867238010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723901000074723A010000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981723B0100007D723C0100002868267D723D0100008A0678F95D70E97F6A2001000073683A4B026825684E684F4B0085723E010000685187723F010000527240010000284B014B034B038672410100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724201000074724301000062682B682C683B4E75627562683A4B01688968C375628A06F8555570E97F6828298172440100007D724501000028682B682C682D4B02682E4B0268267D72460100008A0668565570E97F68BE736830636D6174706C6F746C69622E7472616E73666F726D730A42626F785472616E73666F726D46726F6D0A7247010000298172480100007D72490100002868267D724A0100008A06F8555570E97F6A440100007358060000005F626F78696E724B01000068442981724C0100007D724D0100002868267D724E0100008A0680A05B70E97F6A4801000073683A4B026848636D6174706C6F746C69622E7472616E73666F726D730A5472616E73666F726D577261707065720A724F010000298172500100007D725101000028682E4B0258050000006368696C6472520100006835298172530100007D7254010000286838683D298172550100007D72560100002868267D72570100008A06005B5E70E97F6A5301000073683A4B01682B682C683B4E756268267D72580100008A0680505570E97F6A5001000073683A4B0168254E682B682C683B4E683C683D298172590100007D725A0100002868267D725B0100008A06005B5E70E97F6A5301000073683A4B01682B682C683B4E756275625807000000706172656E7473725C0100007D725D010000288A06D0AF5B70E97F6A4C0100008A0668565570E97F68BE75682D4B027562682B682C6849684A2981725E0100007D725F01000028684D684E684F4B008572600100006851877261010000527262010000284B014B028572630100006858894310000000000000F07F000000000000F07F726401000074726501000062685D8868267D72660100008A06D0AF5B70E97F6A4C01000073683A4B02685F684E684F4B008572670100006851877268010000527269010000284B014B024B0286726A010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726B01000074726C01000062682B682C6866684E684F4B0085726D010000685187726E01000052726F010000284B014B024B0286727001000068588943206666666666E653C00000000000000000CCCCCCCCCC7C8040CDCCCC0C67033B4172710100007472720100006275626866684E684F4B008572730100006851877274010000527275010000284B014B024B02867276010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7277010000747278010000627562683A4B026825684E684F4B00857279010000685187727A01000052727B010000284B014B034B0386727C0100006858894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F727D01000074727E01000062682B682C683B4E7562683A4B02688968C375628A0688CC6170E97F68282981727F0100007D728001000028682B682C682D4B02682E4B0268267D72810100008A0610C76170E97F6844298172820100007D72830100002868267D7284010000683A4B0168486A7F010000682B682C6849684A298172850100007D728601000028684D684E684F4B008572870100006851877288010000527289010000284B014B0285728A0100006858894310000000000000F07F000000000000F07F728B01000074728C01000062685D8868267D728D0100008A0610C76170E97F6A8201000073683A4B01685F684E684F4B0085728E010000685187728F010000527290010000284B014B024B02867291010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729201000074729301000062682B682C6866684E684F4B008572940100006851877295010000527296010000284B014B024B02867297010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729801000074729901000062756268664E756273683068282981729A0100007D729B01000028682B682C682D4B02682E4B0268267D729C0100008A0688CC6170E97F6A7F01000073683068312981729D0100007D729E0100002868267D729F0100008A06B8CE6170E97F6A9A010000736873684A298172A00100007D72A101000028684D684E684F4B008572A201000068518772A30100005272A4010000284B014B028572A50100006858894310000000000000F07F000000000000F07F72A60100007472A701000062685D8868267D72A80100008A0668CD6170E97F6A9D01000073683A4B01685F684E684F4B008572A901000068518772AA0100005272AB010000284B014B024B028672AC010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72AD0100007472AE01000062682B682C6866684E684F4B008572AF01000068518772B00100005272B1010000284B014B024B028672B2010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B30100007472B4010000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172B50100007D72B60100002868267D72B70100008A06B8CE6170E97F6A9A01000073683A4B026825684E684F4B008572B801000068518772B90100005272BA010000284B014B034B038672BB0100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72BC0100007472BD01000062682B682C683B4E75627562683A4B01688968C375628A0648C05A70E97F6828298172BE0100007D72BF01000028682B682C682D4B02682E4B0268267D72C00100008A06C8CA5A70E97F6844298172C10100007D72C20100002868267D72C3010000683A4B0168486ABE010000682B682C6849684A298172C40100007D72C501000028684D684E684F4B008572C601000068518772C70100005272C8010000284B014B028572C90100006858894310000000000000F07F000000000000F07F72CA0100007472CB01000062685D8868267D72CC0100008A06C8CA5A70E97F6AC101000073683A4B01685F684E684F4B008572CD01000068518772CE0100005272CF010000284B014B024B028672D0010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D10100007472D201000062682B682C6866684E684F4B008572D301000068518772D40100005272D5010000284B014B024B028672D6010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D70100007472D801000062756268664E75627368306828298172D90100007D72DA01000028682B682C682D4B02682E4B0268267D72DB0100008A0648C05A70E97F6ABE0100007368306831298172DC0100007D72DD0100002868267D72DE0100008A06B0C25A70E97F6AD9010000736873684A298172DF0100007D72E001000028684D684E684F4B008572E101000068518772E20100005272E3010000284B014B028572E40100006858894310000000000000F07F000000000000F07F72E50100007472E601000062685D8868267D72E70100008A0608C95A70E97F6ADC01000073683A4B01685F684E684F4B008572E801000068518772E90100005272EA010000284B014B024B028672EB010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72EC0100007472ED01000062682B682C6866684E684F4B008572EE01000068518772EF0100005272F0010000284B014B024B028672F1010000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F20100007472F3010000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172F40100007D72F50100002868267D72F60100008A06B0C25A70E97F6AD901000073683A4B026825684E684F4B008572F701000068518772F80100005272F9010000284B014B034B038672FA0100006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72FB0100007472FC01000062682B682C683B4E75627562683A4B01688968C375628A0690335B70E97F6828298172FD0100007D72FE01000028682B682C682D4B02682E4B0268267D72FF0100008A06E0345B70E97F6844298172000200007D72010200002868267D7202020000683A4B0168486AFD010000682B682C6849684A298172030200007D720402000028684D684E684F4B008572050200006851877206020000527207020000284B014B028572080200006858894310000000000000F07F000000000000F07F720902000074720A02000062685D8868267D720B0200008A06E0345B70E97F6A0002000073683A4B01685F684E684F4B0085720C020000685187720D02000052720E020000284B014B024B0286720F020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721002000074721102000062682B682C6866684E684F4B008572120200006851877213020000527214020000284B014B024B02867215020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721602000074721702000062756268664E75627368306828298172180200007D721902000028682B682C682D4B02682E4B0268267D721A0200008A0690335B70E97F6AFD01000073683068312981721B0200007D721C0200002868267D721D0200008A06B0395B70E97F6A18020000736873684A2981721E0200007D721F02000028684D684E684F4B008572200200006851877221020000527222020000284B014B028572230200006858894310000000000000F07F000000000000F07F722402000074722502000062685D8868267D72260200008A0678C95A70E97F6A1B02000073683A4B01685F684E684F4B008572270200006851877228020000527229020000284B014B024B0286722A020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722B02000074722C02000062682B682C6866684E684F4B0085722D020000685187722E02000052722F020000284B014B024B02867230020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7231020000747232020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172330200007D72340200002868267D72350200008A06B0395B70E97F6A1802000073683A4B026825684E684F4B008572360200006851877237020000527238020000284B014B034B038672390200006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F723A02000074723B02000062682B682C683B4E75627562683A4B01688968C375628A0678226270E97F68282981723C0200007D723D02000028682B682C682D4B02682E4B0268267D723E0200008A0618256270E97F68442981723F0200007D72400200002868267D7241020000683A4B0168486A3C020000682B682C6849684A298172420200007D724302000028684D684E684F4B008572440200006851877245020000527246020000284B014B028572470200006858894310000000000000F07F000000000000F07F724802000074724902000062685D8868267D724A0200008A0618256270E97F6A3F02000073683A4B01685F684E684F4B0085724B020000685187724C02000052724D020000284B014B024B0286724E020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724F02000074725002000062682B682C6866684E684F4B008572510200006851877252020000527253020000284B014B024B02867254020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725502000074725602000062756268664E75627368306828298172570200007D725802000028682B682C682D4B02682E4B0268267D72590200008A0678226270E97F6A3C02000073683068312981725A0200007D725B0200002868267D725C0200008A0640226270E97F6A57020000736873684A2981725D0200007D725E02000028684D684E684F4B0085725F0200006851877260020000527261020000284B014B028572620200006858894310000000000000F07F000000000000F07F726302000074726402000062685D8868267D72650200008A06A8246270E97F6A5A02000073683A4B01685F684E684F4B008572660200006851877267020000527268020000284B014B024B02867269020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726A02000074726B02000062682B682C6866684E684F4B0085726C020000685187726D02000052726E020000284B014B024B0286726F020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7270020000747271020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172720200007D72730200002868267D72740200008A0640226270E97F6A5702000073683A4B026825684E684F4B008572750200006851877276020000527277020000284B014B034B038672780200006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F727902000074727A02000062682B682C683B4E75627562683A4B01688968C375628A06B8276270E97F68282981727B0200007D727C02000028682B682C682D4B02682E4B0268267D727D020000683068C3683A4B01688968222981727E0200007D727F0200002868254E68267D7280020000288A06B8276270E97F6A7B0200008A06F82C6270E97F6828298172810200007D728202000028682B682C682D4B02682E4B0268267D7283020000683068C3683A4B0168896A7E02000075628A06902A6270E97F6828298172840200007D728502000028682B682C682D4B02682E4B0268267D7286020000683068C3683A4B0168896A7E020000756275683A4B0168A368A4682B682C683B4E68AD470000000000000000473FB5555555555555867287020000756275628A06703B5370E97F6828298172880200007D728902000028682B682C682D4B02682E4B0268267D728A0200008A0628915070E97F68442981728B0200007D728C0200002868267D728D020000683A4B0168486A88020000682B682C6849684A2981728E0200007D728F02000028684D684E684F4B008572900200006851877291020000527292020000284B014B028572930200006858894310000000000000F07F000000000000F07F729402000074729502000062685D8868267D72960200008A0628915070E97F6A8B02000073683A4B01685F684E684F4B008572970200006851877298020000527299020000284B014B024B0286729A020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729B02000074729C02000062682B682C6866684E684F4B0085729D020000685187729E02000052729F020000284B014B024B028672A0020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A10200007472A202000062756268664E75627368306828298172A30200007D72A402000028682B682C682D4B02682E4B0268267D72A50200008A06703B5370E97F6A880200007368306831298172A60200007D72A70200002868267D72A80200008A06D00F4F70E97F6AA3020000736873684A298172A90200007D72AA02000028684D684E684F4B008572AB02000068518772AC0200005272AD020000284B014B028572AE0200006858894310000000000000F07F000000000000F07F72AF0200007472B002000062685D8868267D72B10200008A06D80D4F70E97F6AA602000073683A4B01685F684E684F4B008572B202000068518772B30200005272B4020000284B014B024B028672B5020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B60200007472B702000062682B682C6866684E684F4B008572B802000068518772B90200005272BA020000284B014B024B028672BB020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BC0200007472BD020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172BE0200007D72BF0200002868267D72C00200008A06D00F4F70E97F6AA302000073683A4B026825684E684F4B008572C102000068518772C20200005272C3020000284B014B034B038672C40200006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72C50200007472C602000062682B682C683B4E75627562683A4B01688968C375628A0600FB6170E97F6828298172C70200007D72C802000028682B682C682D4B02682E4B0268267D72C90200008A06A0FD6170E97F6844298172CA0200007D72CB0200002868267D72CC020000683A4B0168486AC7020000682B682C6849684A298172CD0200007D72CE02000028684D684E684F4B008572CF02000068518772D00200005272D1020000284B014B028572D20200006858894310000000000000F07F000000000000F07F72D30200007472D402000062685D8868267D72D50200008A06A0FD6170E97F6ACA02000073683A4B01685F684E684F4B008572D602000068518772D70200005272D8020000284B014B024B028672D9020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0200007472DB02000062682B682C6866684E684F4B008572DC02000068518772DD0200005272DE020000284B014B024B028672DF020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E00200007472E102000062756268664E75627368306828298172E20200007D72E302000028682B682C682D4B02682E4B0268267D72E40200008A0600FB6170E97F6AC70200007368306831298172E50200007D72E60200002868267D72E70200008A0680F06170E97F6AE2020000736873684A298172E80200007D72E902000028684D684E684F4B008572EA02000068518772EB0200005272EC020000284B014B028572ED0200006858894310000000000000F07F000000000000F07F72EE0200007472EF02000062685D8868267D72F00200008A0628FF6170E97F6AE502000073683A4B01685F684E684F4B008572F102000068518772F20200005272F3020000284B014B024B028672F4020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F50200007472F602000062682B682C6866684E684F4B008572F702000068518772F80200005272F9020000284B014B024B028672FA020000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FB0200007472FC020000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172FD0200007D72FE0200002868267D72FF0200008A0680F06170E97F6AE202000073683A4B026825684E684F4B008572000300006851877201030000527202030000284B014B034B038672030300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F720403000074720503000062682B682C683B4E75627562683A4B01688968C375628A0698585570E97F6835298172060300007D720703000028683868C368267D7208030000683A4B0168254E682B682C683B4E683C683D298172090300007D720A0300002868267D720B0300008A0698585570E97F6A0603000073683A4B01682B682C683B4E756275628A06005B5570E97F68352981720C0300007D720D03000028683868C368267D720E030000683A4B0168254E682B682C683B4E683C683D2981720F0300007D72100300002868267D72110300008A06005B5570E97F6A0C03000073683A4B01682B682C683B4E756275628A0620535E70E97F6835298172120300007D7213030000286838683D298172140300007D72150300002868267D72160300008A0620535E70E97F6A1203000073683A4B01682B682C683B4E756268267D7217030000683A4B0168254E682B682C683B4E683C68C375628A0660985470E97F6828298172180300007D721903000028682B682C682D4B02682E4B0268267D721A0300008A06389B5470E97F68442981721B0300007D721C0300002868267D721D030000683A4B0168486A18030000682B682C6849684A2981721E0300007D721F03000028684D684E684F4B008572200300006851877221030000527222030000284B014B028572230300006858894310000000000000F07F000000000000F07F722403000074722503000062685D8868267D72260300008A06389B5470E97F6A1B03000073683A4B01685F684E684F4B008572270300006851877228030000527229030000284B014B024B0286722A030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722B03000074722C03000062682B682C6866684E684F4B0085722D030000685187722E03000052722F030000284B014B024B02867230030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723103000074723203000062756268664E75627368306828298172330300007D723403000028682B682C682D4B02682E4B0268267D72350300008A0660985470E97F6A180300007368306831298172360300007D72370300002868267D72380300008A0680975470E97F6A33030000736873684A298172390300007D723A03000028684D684E684F4B0085723B030000685187723C03000052723D030000284B014B0285723E0300006858894310000000000000F07F000000000000F07F723F03000074724003000062685D8868267D72410300008A0630965470E97F6A3603000073683A4B01685F684E684F4B008572420300006851877243030000527244030000284B014B024B02867245030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724603000074724703000062682B682C6866684E684F4B00857248030000685187724903000052724A030000284B014B024B0286724B030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724C03000074724D030000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981724E0300007D724F0300002868267D72500300008A0680975470E97F6A3303000073683A4B026825684E684F4B008572510300006851877252030000527253030000284B014B034B038672540300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725503000074725603000062682B682C683B4E75627562683A4B01688968C375628A06D05F5570E97F6828298172570300007D725803000028682B682C682D4B02682E4B0268267D72590300008A06A0C66170E97F68442981725A0300007D725B0300002868267D725C030000683A4B0168486A57030000682B682C6849684A2981725D0300007D725E03000028684D684E684F4B0085725F0300006851877260030000527261030000284B014B028572620300006858894310000000000000F07F000000000000F07F726303000074726403000062685D8868267D72650300008A06A0C66170E97F6A5A03000073683A4B01685F684E684F4B008572660300006851877267030000527268030000284B014B024B02867269030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726A03000074726B03000062682B682C6866684E684F4B0085726C030000685187726D03000052726E030000284B014B024B0286726F030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727003000074727103000062756268664E75627368306828298172720300007D727303000028682B682C682D4B02682E4B0268267D72740300008A06D05F5570E97F6A570300007368306831298172750300007D72760300002868267D72770300008A06205A5570E97F6A72030000736873684A298172780300007D727903000028684D684E684F4B0085727A030000685187727B03000052727C030000284B014B0285727D0300006858894310000000000000F07F000000000000F07F727E03000074727F03000062685D8868267D72800300008A0648505570E97F6A7503000073683A4B01685F684E684F4B008572810300006851877282030000527283030000284B014B024B02867284030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728503000074728603000062682B682C6866684E684F4B008572870300006851877288030000527289030000284B014B024B0286728A030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728B03000074728C030000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981728D0300007D728E0300002868267D728F0300008A06205A5570E97F6A7203000073683A4B026825684E684F4B008572900300006851877291030000527292030000284B014B034B038672930300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729403000074729503000062682B682C683B4E75627562683A4B01688968C375628A06D0FF6170E97F6828298172960300007D729703000028682B682C682D4B02682E4B0268267D72980300008A0628F86170E97F6844298172990300007D729A0300002868267D729B030000683A4B0168486A96030000682B682C6849684A2981729C0300007D729D03000028684D684E684F4B0085729E030000685187729F0300005272A0030000284B014B028572A10300006858894310000000000000F07F000000000000F07F72A20300007472A303000062685D8868267D72A40300008A0628F86170E97F6A9903000073683A4B01685F684E684F4B008572A503000068518772A60300005272A7030000284B014B024B028672A8030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A90300007472AA03000062682B682C6866684E684F4B008572AB03000068518772AC0300005272AD030000284B014B024B028672AE030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72AF0300007472B003000062756268664E75627368306828298172B10300007D72B203000028682B682C682D4B02682E4B0268267D72B30300008A06D0FF6170E97F6A960300007368306831298172B40300007D72B50300002868267D72B60300008A06E8F95D70E97F6AB1030000736873684A298172B70300007D72B803000028684D684E684F4B008572B903000068518772BA0300005272BB030000284B014B028572BC0300006858894310000000000000F07F000000000000F07F72BD0300007472BE03000062685D8868267D72BF0300008A0610FE5D70E97F6AB403000073683A4B01685F684E684F4B008572C003000068518772C10300005272C2030000284B014B024B028672C3030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C40300007472C503000062682B682C6866684E684F4B008572C603000068518772C70300005272C8030000284B014B024B028672C9030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72CA0300007472CB030000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172CC0300007D72CD0300002868267D72CE0300008A06E8F95D70E97F6AB103000073683A4B026825684E684F4B008572CF03000068518772D00300005272D1030000284B014B034B038672D20300006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D30300007472D403000062682B682C683B4E75627562683A4B01688968C375628A06A8545570E97F68C18A06D0985470E97F6828298172D50300007D72D603000028682B682C682D4B02682E4B0268267D72D70300008A06C09C5470E97F6844298172D80300007D72D90300002868267D72DA030000683A4B0168486AD5030000682B682C6849684A298172DB0300007D72DC03000028684D684E684F4B008572DD03000068518772DE0300005272DF030000284B014B028572E00300006858894310000000000000F07F000000000000F07F72E10300007472E203000062685D8868267D72E30300008A06C09C5470E97F6AD803000073683A4B01685F684E684F4B008572E403000068518772E50300005272E6030000284B014B024B028672E7030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E80300007472E903000062682B682C6866684E684F4B008572EA03000068518772EB0300005272EC030000284B014B024B028672ED030000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72EE0300007472EF03000062756268664E75627368306828298172F00300007D72F103000028682B682C682D4B02682E4B0268267D72F20300008A06D0985470E97F6AD50300007368306831298172F30300007D72F40300002868267D72F50300008A06A09D5470E97F6AF0030000736873684A298172F60300007D72F703000028684D684E684F4B008572F803000068518772F90300005272FA030000284B014B028572FB0300006858894310000000000000F07F000000000000F07F72FC0300007472FD03000062685D8868267D72FE0300008A06509C5470E97F6AF303000073683A4B01685F684E684F4B008572FF0300006851877200040000527201040000284B014B024B02867202040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720304000074720404000062682B682C6866684E684F4B008572050400006851877206040000527207040000284B014B024B02867208040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720904000074720A040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981720B0400007D720C0400002868267D720D0400008A06A09D5470E97F6AF003000073683A4B026825684E684F4B0085720E040000685187720F040000527210040000284B014B034B038672110400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721204000074721304000062682B682C683B4E75627562683A4B01688968C375628A0670044F70E97F6828298172140400007D721504000028682B682C682D4B02682E4B0268267D72160400008A06E0044F70E97F6844298172170400007D72180400002868267D7219040000683A4B0168486A14040000682B682C6849684A2981721A0400007D721B04000028684D684E684F4B0085721C040000685187721D04000052721E040000284B014B0285721F0400006858894310000000000000F07F000000000000F07F722004000074722104000062685D8868267D72220400008A06E0044F70E97F6A1704000073683A4B01685F684E684F4B008572230400006851877224040000527225040000284B014B024B02867226040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722704000074722804000062682B682C6866684E684F4B00857229040000685187722A04000052722B040000284B014B024B0286722C040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722D04000074722E04000062756268664E756273683068282981722F0400007D723004000028682B682C682D4B02682E4B0268267D72310400008A0670044F70E97F6A140400007368306831298172320400007D72330400002868267D72340400008A0600044F70E97F6A2F040000736873684A298172350400007D723604000028684D684E684F4B008572370400006851877238040000527239040000284B014B0285723A0400006858894310000000000000F07F000000000000F07F723B04000074723C04000062685D8868267D723D0400008A0658034F70E97F6A3204000073683A4B01685F684E684F4B0085723E040000685187723F040000527240040000284B014B024B02867241040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724204000074724304000062682B682C6866684E684F4B008572440400006851877245040000527246040000284B014B024B02867247040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7248040000747249040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981724A0400007D724B0400002868267D724C0400008A0600044F70E97F6A2F04000073683A4B026825684E684F4B0085724D040000685187724E04000052724F040000284B014B034B038672500400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725104000074725204000062682B682C683B4E75627562683A4B01688968C375628A0648004F70E97F6828298172530400007D725404000028682B682C682D4B02682E4B0268267D72550400008A0640024F70E97F6844298172560400007D72570400002868267D7258040000683A4B0168486A53040000682B682C6849684A298172590400007D725A04000028684D684E684F4B0085725B040000685187725C04000052725D040000284B014B0285725E0400006858894310000000000000F07F000000000000F07F725F04000074726004000062685D8868267D72610400008A0640024F70E97F6A5604000073683A4B01685F684E684F4B008572620400006851877263040000527264040000284B014B024B02867265040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726604000074726704000062682B682C6866684E684F4B00857268040000685187726904000052726A040000284B014B024B0286726B040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726C04000074726D04000062756268664E756273683068282981726E0400007D726F04000028682B682C682D4B02682E4B0268267D72700400008A0648004F70E97F6A530400007368306831298172710400007D72720400002868267D72730400008A06B8004F70E97F6A6E040000736873684A298172740400007D727504000028684D684E684F4B008572760400006851877277040000527278040000284B014B028572790400006858894310000000000000F07F000000000000F07F727A04000074727B04000062685D8868267D727C0400008A06700B4F70E97F6A7104000073683A4B01685F684E684F4B0085727D040000685187727E04000052727F040000284B014B024B02867280040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728104000074728204000062682B682C6866684E684F4B008572830400006851877284040000527285040000284B014B024B02867286040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7287040000747288040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172890400007D728A0400002868267D728B0400008A06B8004F70E97F6A6E04000073683A4B026825684E684F4B0085728C040000685187728D04000052728E040000284B014B034B0386728F0400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729004000074729104000062682B682C683B4E75627562683A4B01688968C375628A06A05D5E70E97F6835298172920400007D729304000028683868C368267D7294040000683A4B0168254E682B682C683B4E683C683D298172950400007D72960400002868267D72970400008A06A05D5E70E97F6A9204000073683A4B01682B682C683B4E756275628A06189C5470E97F6828298172980400007D729904000028682B682C682D4B02682E4B0268267D729A0400008A0620B35370E97F68442981729B0400007D729C0400002868267D729D040000683A4B0168486A98040000682B682C6849684A2981729E0400007D729F04000028684D684E684F4B008572A004000068518772A10400005272A2040000284B014B028572A30400006858894310000000000000F07F000000000000F07F72A40400007472A504000062685D8868267D72A60400008A0620B35370E97F6A9B04000073683A4B01685F684E684F4B008572A704000068518772A80400005272A9040000284B014B024B028672AA040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72AB0400007472AC04000062682B682C6866684E684F4B008572AD04000068518772AE0400005272AF040000284B014B024B028672B0040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B10400007472B204000062756268664E75627368306828298172B30400007D72B404000028682B682C682D4B02682E4B0268267D72B50400008A06189C5470E97F6A980400007368306831298172B60400007D72B70400002868267D72B80400008A06989F5470E97F6AB3040000736873684A298172B90400007D72BA04000028684D684E684F4B008572BB04000068518772BC0400005272BD040000284B014B028572BE0400006858894310000000000000F07F000000000000F07F72BF0400007472C004000062685D8868267D72C10400008A06809E5470E97F6AB604000073683A4B01685F684E684F4B008572C204000068518772C30400005272C4040000284B014B024B028672C5040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C60400007472C704000062682B682C6866684E684F4B008572C804000068518772C90400005272CA040000284B014B024B028672CB040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72CC0400007472CD040000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172CE0400007D72CF0400002868267D72D00400008A06989F5470E97F6AB304000073683A4B026825684E684F4B008572D104000068518772D20400005272D3040000284B014B034B038672D40400006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72D50400007472D604000062682B682C683B4E75627562683A4B01688968C375628A06F8F55D70E97F6828298172D70400007D72D804000028682B682C682D4B02682E4B0268267D72D90400008A06F0F75D70E97F6844298172DA0400007D72DB0400002868267D72DC040000683A4B0168486AD7040000682B682C6849684A298172DD0400007D72DE04000028684D684E684F4B008572DF04000068518772E00400005272E1040000284B014B028572E20400006858894310000000000000F07F000000000000F07F72E30400007472E404000062685D8868267D72E50400008A06F0F75D70E97F6ADA04000073683A4B01685F684E684F4B008572E604000068518772E70400005272E8040000284B014B024B028672E9040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72EA0400007472EB04000062682B682C6866684E684F4B008572EC04000068518772ED0400005272EE040000284B014B024B028672EF040000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F00400007472F104000062756268664E75627368306828298172F20400007D72F304000028682B682C682D4B02682E4B0268267D72F40400008A06F8F55D70E97F6AD70400007368306831298172F50400007D72F60400002868267D72F70400008A06C8FA5D70E97F6AF2040000736873684A298172F80400007D72F904000028684D684E684F4B008572FA04000068518772FB0400005272FC040000284B014B028572FD0400006858894310000000000000F07F000000000000F07F72FE0400007472FF04000062685D8868267D72000500008A0680F05D70E97F6AF504000073683A4B01685F684E684F4B008572010500006851877202050000527203050000284B014B024B02867204050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720505000074720605000062682B682C6866684E684F4B008572070500006851877208050000527209050000284B014B024B0286720A050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720B05000074720C050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981720D0500007D720E0500002868267D720F0500008A06C8FA5D70E97F6AF204000073683A4B026825684E684F4B008572100500006851877211050000527212050000284B014B034B038672130500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F721405000074721505000062682B682C683B4E75627562683A4B01688968C375628A06902A6270E97F6A840200008A06A0765F70E97F6828298172160500007D721705000028682B682C682D4B02682E4B0268267D72180500008A0680775F70E97F6844298172190500007D721A0500002868267D721B050000683A4B0168486A16050000682B682C6849684A2981721C0500007D721D05000028684D684E684F4B0085721E050000685187721F050000527220050000284B014B028572210500006858894310000000000000F07F000000000000F07F722205000074722305000062685D8868267D72240500008A0680775F70E97F6A1905000073683A4B01685F684E684F4B008572250500006851877226050000527227050000284B014B024B02867228050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722905000074722A05000062682B682C6866684E684F4B0085722B050000685187722C05000052722D050000284B014B024B0286722E050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F722F05000074723005000062756268664E75627368306828298172310500007D723205000028682B682C682D4B02682E4B0268267D72330500008A06A0765F70E97F6A160500007368306831298172340500007D72350500002868267D72360500008A0650755F70E97F6A31050000736873684A298172370500007D723805000028684D684E684F4B00857239050000685187723A05000052723B050000284B014B0285723C0500006858894310000000000000F07F000000000000F07F723D05000074723E05000062685D8868267D723F0500008A06F8755F70E97F6A3405000073683A4B01685F684E684F4B008572400500006851877241050000527242050000284B014B024B02867243050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724405000074724505000062682B682C6866684E684F4B008572460500006851877247050000527248050000284B014B024B02867249050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724A05000074724B050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981724C0500007D724D0500002868267D724E0500008A0650755F70E97F6A3105000073683A4B026825684E684F4B0085724F0500006851877250050000527251050000284B014B034B038672520500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F725305000074725405000062682B682C683B4E75627562683A4B01688968C375628A06F82C6270E97F6A810200008A0648B75370E97F6828298172550500007D725605000028682B682C682D4B02682E4B0268267D72570500008A0640395B70E97F6844298172580500007D72590500002868267D725A050000683A4B0168486A55050000682B682C6849684A2981725B0500007D725C05000028684D684E684F4B0085725D050000685187725E05000052725F050000284B014B028572600500006858894310000000000000F07F000000000000F07F726105000074726205000062685D8868267D72630500008A0640395B70E97F6A5805000073683A4B01685F684E684F4B008572640500006851877265050000527266050000284B014B024B02867267050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726805000074726905000062682B682C6866684E684F4B0085726A050000685187726B05000052726C050000284B014B024B0286726D050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F726E05000074726F05000062756268664E75627368306828298172700500007D727105000028682B682C682D4B02682E4B0268267D72720500008A0648B75370E97F6A550500007368306831298172730500007D72740500002868267D72750500008A0680B05370E97F6A70050000736873684A298172760500007D727705000028684D684E684F4B00857278050000685187727905000052727A050000284B014B0285727B0500006858894310000000000000F07F000000000000F07F727C05000074727D05000062685D8868267D727E0500008A06C0B55370E97F6A7305000073683A4B01685F684E684F4B0085727F0500006851877280050000527281050000284B014B024B02867282050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728305000074728405000062682B682C6866684E684F4B008572850500006851877286050000527287050000284B014B024B02867288050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728905000074728A050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981728B0500007D728C0500002868267D728D0500008A0680B05370E97F6A7005000073683A4B026825684E684F4B0085728E050000685187728F050000527290050000284B014B034B038672910500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F729205000074729305000062682B682C683B4E75627562683A4B01688968C375627568736844298172940500007D72950500002868267D72960500008A0658AA5B70E97F68C373683A4B0168486831298172970500007D72980500002868267D7299050000288A0630AD5B70E97F6A940500008A0608C25F70E97F68442981729A0500007D729B0500002868267D729C0500008A0620CA5F70E97F68312981729D0500007D729E0500002868267D729F050000288A06802E5B70E97F6828298172A00500007D72A105000028682B682C682D4B02682E4B0268267D72A20500008A06102E5B70E97F6844298172A30500007D72A40500002868267D72A5050000683A4B0168486AA0050000682B682C6849684A298172A60500007D72A705000028684D684E684F4B008572A805000068518772A90500005272AA050000284B014B028572AB0500006858894310000000000000F07F000000000000F07F72AC0500007472AD05000062685D8868267D72AE0500008A06102E5B70E97F6AA305000073683A4B01685F684E684F4B008572AF05000068518772B00500005272B1050000284B014B024B028672B2050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B30500007472B405000062682B682C6866684E684F4B008572B505000068518772B60500005272B7050000284B014B024B028672B8050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B90500007472BA05000062756268664E75627368306828298172BB0500007D72BC05000028682B682C682D4B02682E4B0268267D72BD0500008A06802E5B70E97F6AA00500007368306831298172BE0500007D72BF0500002868267D72C00500008A06B8475A70E97F6ABB050000736873684A298172C10500007D72C205000028684D684E684F4B008572C305000068518772C40500005272C5050000284B014B028572C60500006858894310000000000000F07F000000000000F07F72C70500007472C805000062685D8868267D72C90500008A06882C5B70E97F6ABE05000073683A4B01685F684E684F4B008572CA05000068518772CB0500005272CC050000284B014B024B028672CD050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72CE0500007472CF05000062682B682C6866684E684F4B008572D005000068518772D10500005272D2050000284B014B024B028672D3050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D40500007472D5050000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172D60500007D72D70500002868267D72D80500008A06B8475A70E97F6ABB05000073683A4B026825684E684F4B008572D905000068518772DA0500005272DB050000284B014B034B038672DC0500006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72DD0500007472DE05000062682B682C683B4E75627562683A4B0168896A9D05000075628A06C0755970E97F6835298172DF0500007D72E00500002868386A9D05000068267D72E1050000683A4B0168254E682B682C683B4E683C683D298172E20500007D72E30500002868267D72E40500008A06C0755970E97F6ADF05000073683A4B01682B682C683B4E756275628A06681D6170E97F6828298172E50500007D72E605000028682B682C682D4B02682E4B0268267D72E70500008A06B0126170E97F6844298172E80500007D72E90500002868267D72EA050000683A4B0168486AE5050000682B682C6849684A298172EB0500007D72EC05000028684D684E684F4B008572ED05000068518772EE0500005272EF050000284B014B028572F00500006858894310000000000000F07F000000000000F07F72F10500007472F205000062685D8868267D72F30500008A06B0126170E97F6AE805000073683A4B01685F684E684F4B008572F405000068518772F50500005272F6050000284B014B024B028672F7050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F80500007472F905000062682B682C6866684E684F4B008572FA05000068518772FB0500005272FC050000284B014B024B028672FD050000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0500007472FF05000062756268664E75627368306828298172000600007D720106000028682B682C682D4B02682E4B0268267D72020600008A06681D6170E97F6AE50500007368306831298172030600007D72040600002868267D72050600008A0698116170E97F6A00060000736873684A298172060600007D720706000028684D684E684F4B00857208060000685187720906000052720A060000284B014B0285720B0600006858894310000000000000F07F000000000000F07F720C06000074720D06000062685D8868267D720E0600008A06801E6170E97F6A0306000073683A4B01685F684E684F4B0085720F0600006851877210060000527211060000284B014B024B02867212060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721306000074721406000062682B682C6866684E684F4B008572150600006851877216060000527217060000284B014B024B02867218060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721906000074721A060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721B0600007D721C0600002868267D721D0600008A0698116170E97F6A0006000073683A4B026825684E684F4B0085721E060000685187721F060000527220060000284B014B034B038672210600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722206000074722306000062682B682C683B4E75627562683A4B0168896A9D05000075628A0648A05B70E97F6828298172240600007D722506000028682B682C682D4B02682E4B0268267D72260600008A0638AB5B70E97F6844298172270600007D72280600002868267D7229060000683A4B0168486A24060000682B682C6849684A2981722A0600007D722B06000028684D684E684F4B0085722C060000685187722D06000052722E060000284B014B0285722F0600006858894310000000000000F07F000000000000F07F723006000074723106000062685D8868267D72320600008A0638AB5B70E97F6A2706000073683A4B01685F684E684F4B008572330600006851877234060000527235060000284B014B024B02867236060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723706000074723806000062682B682C6866684E684F4B00857239060000685187723A06000052723B060000284B014B024B0286723C060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723D06000074723E06000062756268664E756273683068282981723F0600007D724006000028682B682C682D4B02682E4B0268267D72410600008A0648A05B70E97F6A240600007368306831298172420600007D72430600002868267D72440600008A06F8AC5B70E97F6A3F060000736873684A298172450600007D724606000028684D684E684F4B008572470600006851877248060000527249060000284B014B0285724A0600006858894310000000000000F07F000000000000F07F724B06000074724C06000062685D8868267D724D0600008A0670AB5B70E97F6A4206000073683A4B01685F684E684F4B0085724E060000685187724F060000527250060000284B014B024B02867251060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725206000074725306000062682B682C6866684E684F4B008572540600006851877255060000527256060000284B014B024B02867257060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7258060000747259060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981725A0600007D725B0600002868267D725C0600008A06F8AC5B70E97F6A3F06000073683A4B026825684E684F4B0085725D060000685187725E06000052725F060000284B014B034B038672600600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726106000074726206000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660186170E97F6828298172630600007D726406000028682B682C682D4B02682E4B0268267D72650600008A06D01F6170E97F6844298172660600007D72670600002868267D7268060000683A4B0168486A63060000682B682C6849684A298172690600007D726A06000028684D684E684F4B0085726B060000685187726C06000052726D060000284B014B0285726E0600006858894310000000000000F07F000000000000F07F726F06000074727006000062685D8868267D72710600008A06D01F6170E97F6A6606000073683A4B01685F684E684F4B008572720600006851877273060000527274060000284B014B024B02867275060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727606000074727706000062682B682C6866684E684F4B00857278060000685187727906000052727A060000284B014B024B0286727B060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727C06000074727D06000062756268664E756273683068282981727E0600007D727F06000028682B682C682D4B02682E4B0268267D72800600008A0660186170E97F6A630600007368306831298172810600007D72820600002868267D72830600008A06881C6170E97F6A7E060000736873684A298172840600007D728506000028684D684E684F4B008572860600006851877287060000527288060000284B014B028572890600006858894310000000000000F07F000000000000F07F728A06000074728B06000062685D8868267D728C0600008A06E8196170E97F6A8106000073683A4B01685F684E684F4B0085728D060000685187728E06000052728F060000284B014B024B02867290060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729106000074729206000062682B682C6866684E684F4B008572930600006851877294060000527295060000284B014B024B02867296060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F7297060000747298060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172990600007D729A0600002868267D729B0600008A06881C6170E97F6A7E06000073683A4B026825684E684F4B0085729C060000685187729D06000052729E060000284B014B034B0386729F0600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A00600007472A106000062682B682C683B4E75627562683A4B0168896A9D05000075628A0630CD5670E97F6828298172A20600007D72A306000028682B682C682D4B02682E4B0268267D72A40600008A0610CE5670E97F6844298172A50600007D72A60600002868267D72A7060000683A4B0168486AA2060000682B682C6849684A298172A80600007D72A906000028684D684E684F4B008572AA06000068518772AB0600005272AC060000284B014B028572AD0600006858894310000000000000F07F000000000000F07F72AE0600007472AF06000062685D8868267D72B00600008A0610CE5670E97F6AA506000073683A4B01685F684E684F4B008572B106000068518772B20600005272B3060000284B014B024B028672B4060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B50600007472B606000062682B682C6866684E684F4B008572B706000068518772B80600005272B9060000284B014B024B028672BA060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BB0600007472BC06000062756268664E75627368306828298172BD0600007D72BE06000028682B682C682D4B02682E4B0268267D72BF0600008A0630CD5670E97F6AA20600007368306831298172C00600007D72C10600002868267D72C20600008A0628C85670E97F6ABD060000736873684A298172C30600007D72C406000028684D684E684F4B008572C506000068518772C60600005272C7060000284B014B028572C80600006858894310000000000000F07F000000000000F07F72C90600007472CA06000062685D8868267D72CB0600008A06B8C05670E97F6AC006000073683A4B01685F684E684F4B008572CC06000068518772CD0600005272CE060000284B014B024B028672CF060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D00600007472D106000062682B682C6866684E684F4B008572D206000068518772D30600005272D4060000284B014B024B028672D5060000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D60600007472D7060000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172D80600007D72D90600002868267D72DA0600008A0628C85670E97F6ABD06000073683A4B026825684E684F4B008572DB06000068518772DC0600005272DD060000284B014B034B038672DE0600006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72DF0600007472E006000062682B682C683B4E75627562683A4B0168896A9D05000075628A0690A35B70E97F6835298172E10600007D72E20600002868386A9D05000068267D72E3060000683A4B0168254E682B682C683B4E683C683D298172E40600007D72E50600002868267D72E60600008A0690A35B70E97F6AE106000073683A4B01682B682C683B4E756275628A0698315770E97F6828298172E70600007D72E806000028682B682C682D4B02682E4B0268267D72E906000068306A9D050000683A4B0168896822298172EA0600007D72EB0600002868254E68267D72EC060000288A0648C75970E97F6828298172ED0600007D72EE06000028682B682C682D4B02682E4B0268267D72EF06000068306A9D050000683A4B0168896AEA06000075628A0658CA5970E97F6828298172F00600007D72F106000028682B682C682D4B02682E4B0268267D72F206000068306A9D050000683A4B0168896AEA06000075628A0698315770E97F6AE706000075683A4B0168A368A4682B682C683B4E68AD470000000000000000473FB55555555555558672F3060000756275628A0678A96070E97F6828298172F40600007D72F506000028682B682C682D4B02682E4B0268267D72F60600008A0640A26070E97F6828298172F70600007D72F806000028682B682C682D4B02682E4B0268267D72F9060000288A0660AF6070E97F6894298172FA0600007D72FB0600002868386AF706000068267D72FC060000288A0680305370E97F6828298172FD0600007D72FE06000028682B682C682D4B02682E4B0268267D72FF06000068306AFA060000683A4B0268896822298172000700007D72010700002868254E68267D72020700008A0680305370E97F6AFD06000073683A4B0168A368A4682B682C683B4E68AD4B00473FB3333333333334867203070000756275628A0650255C70E97F6828298172040700007D720507000028682B682C682D4B02682E4B0268267D720607000068306AFA060000683A4B0268896822298172070700007D72080700002868254E68267D72090700008A0650255C70E97F6A0407000073683A4B0168A368A4682B682C683B4E68AD4B00473FB333333333333486720A070000756275628A06B8775270E97F68282981720B0700007D720C07000028682B682C682D4B02682E4B0268267D720D07000068306AFA060000683A4B02688968222981720E0700007D720F0700002868254E68267D72100700008A06B8775270E97F6A0B07000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E39867211070000756275628A06E8395370E97F6828298172120700007D721307000028682B682C682D4B02682E4B0268267D721407000068306AFA060000683A4B0268896822298172150700007D72160700002868254E68267D72170700008A06E8395370E97F6A1207000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E39867218070000756275628A06103E5370E97F6828298172190700007D721A07000028682B682C682D4B02682E4B0268267D721B07000068306AFA060000683A4B02688968222981721C0700007D721D0700002868254E68267D721E0700008A06103E5370E97F6A1907000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB333333333333486721F070000756275628A0630765270E97F6828298172200700007D722107000028682B682C682D4B02682E4B0268267D722207000068306AFA060000683A4B0268896822298172230700007D72240700002868254E68267D72250700008A0630765270E97F6A2007000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E39867226070000756275628A06882C5C70E97F6828298172270700007D722807000028682B682C682D4B02682E4B0268267D722907000068306AFA060000683A4B02688968222981722A0700007D722B0700002868254E68267D722C0700008A06882C5C70E97F6A2707000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB333333333333486722D070000756275628A0698385370E97F68282981722E0700007D722F07000028682B682C682D4B02682E4B0268267D723007000068306AFA060000683A4B0268896822298172310700007D72320700002868254E68267D72330700008A0698385370E97F6A2E07000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672340700007562756275683A4B0258070000005F616666696E6572350700004E682B682C683C6A9D05000075628A0660A86070E97F6894298172360700007D72370700002868386A9D05000068267D7238070000288A06D04F5A70E97F6828298172390700007D723A07000028682B682C682D4B02682E4B0268267D723B07000068306A36070000683A4B02688968222981723C0700007D723D0700002868254E68267D723E0700008A06D04F5A70E97F6A3907000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B0086723F070000756275628A06B84E5A70E97F6828298172400700007D724107000028682B682C682D4B02682E4B0268267D724207000068306A36070000683A4B0268896822298172430700007D72440700002868254E68267D72450700008A06B84E5A70E97F6A4007000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B00867246070000756275628A06F8655D70E97F6828298172470700007D724807000028682B682C682D4B02682E4B0268267D724907000068306A36070000683A4B02688968222981724A0700007D724B0700002868254E68267D724C0700008A06F8655D70E97F6A4707000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B0086724D070000756275628A0648605D70E97F68282981724E0700007D724F07000028682B682C682D4B02682E4B0268267D725007000068306A36070000683A4B0268896822298172510700007D72520700002868254E68267D72530700008A0648605D70E97F6A4E07000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B00867254070000756275628A0638445A70E97F6828298172550700007D725607000028682B682C682D4B02682E4B0268267D725707000068306A36070000683A4B0268896822298172580700007D72590700002868254E68267D725A0700008A0638445A70E97F6A5507000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B0086725B070000756275628A0688755270E97F68282981725C0700007D725D07000028682B682C682D4B02682E4B0268267D725E07000068306A36070000683A4B02688968222981725F0700007D72600700002868254E68267D72610700008A0688755270E97F6A5C07000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B00867262070000756275628A06584A5A70E97F6828298172630700007D726407000028682B682C682D4B02682E4B0268267D726507000068306A36070000683A4B0268896822298172660700007D72670700002868254E68267D72680700008A06584A5A70E97F6A6307000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B00867269070000756275628A0658735270E97F68282981726A0700007D726B07000028682B682C682D4B02682E4B0268267D726C07000068306A36070000683A4B02688968222981726D0700007D726E0700002868254E68267D726F0700008A0658735270E97F6A6A07000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672700700007562756275683A4B026A350700004E682B682C683C6AF706000075627568306A4F010000298172710700007D727207000028682E4B026A520100006835298172730700007D7274070000286838683D298172750700007D72760700002868267D72770700008A06A8145C70E97F6A7307000073683A4B01682B682C683B4E756268267D72780700008A0658CA5F70E97F6A7107000073683A4B0168254E682B682C683B4E683C683D298172790700007D727A0700002868267D727B0700008A06A8145C70E97F6A7307000073683A4B01682B682C683B4E756275626A5C0100007D727C070000288A0610C75F70E97F68442981727D0700007D727E0700002868267D727F0700008A06D0CF5F70E97F6A47010000298172800700007D72810700002868267D72820700008A0678A96070E97F6AF4060000736A4B0100006A7D070000683A4B026825684E684F4B008572830700006851877284070000527285070000284B014B034B038672860700006858894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F728707000074728807000062682B682C683B4E756273683A4B0268486A71070000682B682C6849684A298172890700007D728A07000028684D684E684F4B0085728B070000685187728C07000052728D070000284B014B0285728E0700006858894310000000000000F07F000000000000F07F728F07000074729007000062685D8868267D72910700008A0610C75F70E97F6A7D07000073683A4B02685F684E684F4B008572920700006851877293070000527294070000284B014B024B02867295070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729607000074729707000062682B682C6866684E684F4B00857298070000685187729907000052729A070000284B014B024B0286729B070000685889432000000000000022C000000000000000000000000000A06740000000C0CA473B41729C07000074729D0700006275626866684E684F4B0085729E070000685187729F0700005272A0070000284B014B024B028672A1070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A20700007472A30700006275628A0640A26070E97F6AF706000075682D4B027562683A4B0268896AF406000075627368306A80070000683A4B0268896A9D05000075628A0658C35670E97F6828298172A40700007D72A507000028682B682C682D4B02682E4B0268267D72A60700008A0658CA5670E97F6844298172A70700007D72A80700002868267D72A9070000683A4B0168486AA4070000682B682C6849684A298172AA0700007D72AB07000028684D684E684F4B008572AC07000068518772AD0700005272AE070000284B014B028572AF0700006858894310000000000000F07F000000000000F07F72B00700007472B107000062685D8868267D72B20700008A0658CA5670E97F6AA707000073683A4B01685F684E684F4B008572B307000068518772B40700005272B5070000284B014B024B028672B6070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B70700007472B807000062682B682C6866684E684F4B008572B907000068518772BA0700005272BB070000284B014B024B028672BC070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0700007472BE07000062756268664E75627368306828298172BF0700007D72C007000028682B682C682D4B02682E4B0268267D72C10700008A0658C35670E97F6AA40700007368306831298172C20700007D72C30700002868267D72C40700008A0648C75670E97F6ABF070000736873684A298172C50700007D72C607000028684D684E684F4B008572C707000068518772C80700005272C9070000284B014B028572CA0700006858894310000000000000F07F000000000000F07F72CB0700007472CC07000062685D8868267D72CD0700008A0650C55670E97F6AC207000073683A4B01685F684E684F4B008572CE07000068518772CF0700005272D0070000284B014B024B028672D1070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D20700007472D307000062682B682C6866684E684F4B008572D407000068518772D50700005272D6070000284B014B024B028672D7070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D80700007472D9070000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DA0700007D72DB0700002868267D72DC0700008A0648C75670E97F6ABF07000073683A4B026825684E684F4B008572DD07000068518772DE0700005272DF070000284B014B034B038672E00700006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E10700007472E207000062682B682C683B4E75627562683A4B0168896A9D05000075628A06F00E5F70E97F6835298172E30700007D72E40700002868386A9D05000068267D72E5070000683A4B0168254E682B682C683B4E683C683D298172E60700007D72E70700002868267D72E80700008A06F00E5F70E97F6AE307000073683A4B01682B682C683B4E756275628A06203A5D70E97F6828298172E90700007D72EA07000028682B682C682D4B02682E4B0268267D72EB0700008A06E03B5D70E97F6844298172EC0700007D72ED0700002868267D72EE070000683A4B0168486AE9070000682B682C6849684A298172EF0700007D72F007000028684D684E684F4B008572F107000068518772F20700005272F3070000284B014B028572F40700006858894310000000000000F07F000000000000F07F72F50700007472F607000062685D8868267D72F70700008A06E03B5D70E97F6AEC07000073683A4B01685F684E684F4B008572F807000068518772F90700005272FA070000284B014B024B028672FB070000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FC0700007472FD07000062682B682C6866684E684F4B008572FE07000068518772FF070000527200080000284B014B024B02867201080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F720208000074720308000062756268664E75627368306828298172040800007D720508000028682B682C682D4B02682E4B0268267D72060800008A06203A5D70E97F6AE90700007368306831298172070800007D72080800002868267D72090800008A0608395D70E97F6A04080000736873684A2981720A0800007D720B08000028684D684E684F4B0085720C080000685187720D08000052720E080000284B014B0285720F0800006858894310000000000000F07F000000000000F07F721008000074721108000062685D8868267D72120800008A06183C5D70E97F6A0708000073683A4B01685F684E684F4B008572130800006851877214080000527215080000284B014B024B02867216080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721708000074721808000062682B682C6866684E684F4B00857219080000685187721A08000052721B080000284B014B024B0286721C080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721D08000074721E080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721F0800007D72200800002868267D72210800008A0608395D70E97F6A0408000073683A4B026825684E684F4B008572220800006851877223080000527224080000284B014B034B038672250800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722608000074722708000062682B682C683B4E75627562683A4B0168896A9D05000075628A06986F5C70E97F6828298172280800007D722908000028682B682C682D4B02682E4B0268267D722A0800008A06E0645C70E97F68442981722B0800007D722C0800002868267D722D080000683A4B0168486A28080000682B682C6849684A2981722E0800007D722F08000028684D684E684F4B008572300800006851877231080000527232080000284B014B028572330800006858894310000000000000F07F000000000000F07F723408000074723508000062685D8868267D72360800008A06E0645C70E97F6A2B08000073683A4B01685F684E684F4B008572370800006851877238080000527239080000284B014B024B0286723A080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723B08000074723C08000062682B682C6866684E684F4B0085723D080000685187723E08000052723F080000284B014B024B02867240080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724108000074724208000062756268664E75627368306828298172430800007D724408000028682B682C682D4B02682E4B0268267D72450800008A06986F5C70E97F6A280800007368306831298172460800007D72470800002868267D72480800008A06F86C5C70E97F6A43080000736873684A298172490800007D724A08000028684D684E684F4B0085724B080000685187724C08000052724D080000284B014B0285724E0800006858894310000000000000F07F000000000000F07F724F08000074725008000062685D8868267D72510800008A06A06D5C70E97F6A4608000073683A4B01685F684E684F4B008572520800006851877253080000527254080000284B014B024B02867255080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725608000074725708000062682B682C6866684E684F4B00857258080000685187725908000052725A080000284B014B024B0286725B080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725C08000074725D080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981725E0800007D725F0800002868267D72600800008A06F86C5C70E97F6A4308000073683A4B026825684E684F4B008572610800006851877262080000527263080000284B014B034B038672640800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726508000074726608000062682B682C683B4E75627562683A4B0168896A9D05000075628A06F02E5B70E97F6828298172670800007D726808000028682B682C682D4B02682E4B0268267D72690800008A06282F5B70E97F68442981726A0800007D726B0800002868267D726C080000683A4B0168486A67080000682B682C6849684A2981726D0800007D726E08000028684D684E684F4B0085726F0800006851877270080000527271080000284B014B028572720800006858894310000000000000F07F000000000000F07F727308000074727408000062685D8868267D72750800008A06282F5B70E97F6A6A08000073683A4B01685F684E684F4B008572760800006851877277080000527278080000284B014B024B02867279080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727A08000074727B08000062682B682C6866684E684F4B0085727C080000685187727D08000052727E080000284B014B024B0286727F080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728008000074728108000062756268664E75627368306828298172820800007D728308000028682B682C682D4B02682E4B0268267D72840800008A06F02E5B70E97F6A670800007368306831298172850800007D72860800002868267D72870800008A06602F5B70E97F6A82080000736873684A298172880800007D728908000028684D684E684F4B0085728A080000685187728B08000052728C080000284B014B0285728D0800006858894310000000000000F07F000000000000F07F728E08000074728F08000062685D8868267D72900800008A0698715270E97F6A8508000073683A4B01685F684E684F4B008572910800006851877292080000527293080000284B014B024B02867294080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729508000074729608000062682B682C6866684E684F4B008572970800006851877298080000527299080000284B014B024B0286729A080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729B08000074729C080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981729D0800007D729E0800002868267D729F0800008A06602F5B70E97F6A8208000073683A4B026825684E684F4B008572A008000068518772A10800005272A2080000284B014B034B038672A30800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A40800007472A508000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660315D70E97F6828298172A60800007D72A708000028682B682C682D4B02682E4B0268267D72A80800008A0648305D70E97F6844298172A90800007D72AA0800002868267D72AB080000683A4B0168486AA6080000682B682C6849684A298172AC0800007D72AD08000028684D684E684F4B008572AE08000068518772AF0800005272B0080000284B014B028572B10800006858894310000000000000F07F000000000000F07F72B20800007472B308000062685D8868267D72B40800008A0648305D70E97F6AA908000073683A4B01685F684E684F4B008572B508000068518772B60800005272B7080000284B014B024B028672B8080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B90800007472BA08000062682B682C6866684E684F4B008572BB08000068518772BC0800005272BD080000284B014B024B028672BE080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0800007472C008000062756268664E75627368306828298172C10800007D72C208000028682B682C682D4B02682E4B0268267D72C30800008A0660315D70E97F6AA60800007368306831298172C40800007D72C50800002868267D72C60800008A0658335D70E97F6AC1080000736873684A298172C70800007D72C808000028684D684E684F4B008572C908000068518772CA0800005272CB080000284B014B028572CC0800006858894310000000000000F07F000000000000F07F72CD0800007472CE08000062685D8868267D72CF0800008A06F0176170E97F6AC408000073683A4B01685F684E684F4B008572D008000068518772D10800005272D2080000284B014B024B028672D3080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D40800007472D508000062682B682C6866684E684F4B008572D608000068518772D70800005272D8080000284B014B024B028672D9080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0800007472DB080000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DC0800007D72DD0800002868267D72DE0800008A0658335D70E97F6AC108000073683A4B026825684E684F4B008572DF08000068518772E00800005272E1080000284B014B034B038672E20800006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E30800007472E408000062682B682C683B4E75627562683A4B0168896A9D05000075628A0650A55B70E97F6828298172E50800007D72E608000028682B682C682D4B02682E4B0268267D72E70800008A0648A75B70E97F6844298172E80800007D72E90800002868267D72EA080000683A4B0168486AE5080000682B682C6849684A298172EB0800007D72EC08000028684D684E684F4B008572ED08000068518772EE0800005272EF080000284B014B028572F00800006858894310000000000000F07F000000000000F07F72F10800007472F208000062685D8868267D72F30800008A0648A75B70E97F6AE808000073683A4B01685F684E684F4B008572F408000068518772F50800005272F6080000284B014B024B028672F7080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72F80800007472F908000062682B682C6866684E684F4B008572FA08000068518772FB0800005272FC080000284B014B024B028672FD080000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0800007472FF08000062756268664E75627368306828298172000900007D720109000028682B682C682D4B02682E4B0268267D72020900008A0650A55B70E97F6AE50800007368306831298172030900007D72040900002868267D72050900008A06C0A55B70E97F6A00090000736873684A298172060900007D720709000028684D684E684F4B00857208090000685187720909000052720A090000284B014B0285720B0900006858894310000000000000F07F000000000000F07F720C09000074720D09000062685D8868267D720E0900008A06A0AD5B70E97F6A0309000073683A4B01685F684E684F4B0085720F0900006851877210090000527211090000284B014B024B02867212090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721309000074721409000062682B682C6866684E684F4B008572150900006851877216090000527217090000284B014B024B02867218090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721909000074721A090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721B0900007D721C0900002868267D721D0900008A06C0A55B70E97F6A0009000073683A4B026825684E684F4B0085721E090000685187721F090000527220090000284B014B034B038672210900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722209000074722309000062682B682C683B4E75627562683A4B0168896A9D05000075628A0648C75970E97F6AED0600008A06707B5970E97F6835298172240900007D7225090000286838683D298172260900007D72270900002868267D72280900008A06707B5970E97F6A2409000073683A4B01682B682C683B4E756268267D7229090000683A4B0168254E682B682C683B4E683C6A9D05000075628A06A81B5C70E97F68282981722A0900007D722B09000028682B682C682D4B02682E4B0268267D722C0900008A06C01C5C70E97F68442981722D0900007D722E0900002868267D722F090000683A4B0168486A2A090000682B682C6849684A298172300900007D723109000028684D684E684F4B008572320900006851877233090000527234090000284B014B028572350900006858894310000000000000F07F000000000000F07F723609000074723709000062685D8868267D72380900008A06C01C5C70E97F6A2D09000073683A4B01685F684E684F4B00857239090000685187723A09000052723B090000284B014B024B0286723C090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723D09000074723E09000062682B682C6866684E684F4B0085723F0900006851877240090000527241090000284B014B024B02867242090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724309000074724409000062756268664E75627368306828298172450900007D724609000028682B682C682D4B02682E4B0268267D72470900008A06A81B5C70E97F6A2A0900007368306831298172480900007D72490900002868267D724A0900008A0608195C70E97F6A45090000736873684A2981724B0900007D724C09000028684D684E684F4B0085724D090000685187724E09000052724F090000284B014B028572500900006858894310000000000000F07F000000000000F07F725109000074725209000062685D8868267D72530900008A0668165C70E97F6A4809000073683A4B01685F684E684F4B008572540900006851877255090000527256090000284B014B024B02867257090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725809000074725909000062682B682C6866684E684F4B0085725A090000685187725B09000052725C090000284B014B024B0286725D090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725E09000074725F090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172600900007D72610900002868267D72620900008A0608195C70E97F6A4509000073683A4B026825684E684F4B008572630900006851877264090000527265090000284B014B034B038672660900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726709000074726809000062682B682C683B4E75627562683A4B0168896A9D05000075628A0668665D70E97F6828298172690900007D726A09000028682B682C682D4B02682E4B0268267D726B0900008A0688CC5970E97F68442981726C0900007D726D0900002868267D726E090000683A4B0168486A69090000682B682C6849684A2981726F0900007D727009000028684D684E684F4B008572710900006851877272090000527273090000284B014B028572740900006858894310000000000000F07F000000000000F07F727509000074727609000062685D8868267D72770900008A0688CC5970E97F6A6C09000073683A4B01685F684E684F4B00857278090000685187727909000052727A090000284B014B024B0286727B090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727C09000074727D09000062682B682C6866684E684F4B0085727E090000685187727F090000527280090000284B014B024B02867281090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728209000074728309000062756268664E75627368306828298172840900007D728509000028682B682C682D4B02682E4B0268267D72860900008A0668665D70E97F6A690900007368306831298172870900007D72880900002868267D72890900008A06206A5D70E97F6A84090000736873684A2981728A0900007D728B09000028684D684E684F4B0085728C090000685187728D09000052728E090000284B014B0285728F0900006858894310000000000000F07F000000000000F07F729009000074729109000062685D8868267D72920900008A0640695D70E97F6A8709000073683A4B01685F684E684F4B008572930900006851877294090000527295090000284B014B024B02867296090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729709000074729809000062682B682C6866684E684F4B00857299090000685187729A09000052729B090000284B014B024B0286729C090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729D09000074729E090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981729F0900007D72A00900002868267D72A10900008A06206A5D70E97F6A8409000073683A4B026825684E684F4B008572A209000068518772A30900005272A4090000284B014B034B038672A50900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A60900007472A709000062682B682C683B4E75627562683A4B0168896A9D05000075628A06C0CC5670E97F6828298172A80900007D72A909000028682B682C682D4B02682E4B0268267D72AA0900008A0618CC5670E97F6844298172AB0900007D72AC0900002868267D72AD090000683A4B0168486AA8090000682B682C6849684A298172AE0900007D72AF09000028684D684E684F4B008572B009000068518772B10900005272B2090000284B014B028572B30900006858894310000000000000F07F000000000000F07F72B40900007472B509000062685D8868267D72B60900008A0618CC5670E97F6AAB09000073683A4B01685F684E684F4B008572B709000068518772B80900005272B9090000284B014B024B028672BA090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BB0900007472BC09000062682B682C6866684E684F4B008572BD09000068518772BE0900005272BF090000284B014B024B028672C0090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C10900007472C209000062756268664E75627368306828298172C30900007D72C409000028682B682C682D4B02682E4B0268267D72C50900008A06C0CC5670E97F6AA80900007368306831298172C60900007D72C70900002868267D72C80900008A0660B8167CE97F6AC3090000736873684A298172C90900007D72CA09000028684D684E684F4B008572CB09000068518772CC0900005272CD090000284B014B028572CE0900006858894310000000000000F07F000000000000F07F72CF0900007472D009000062685D8868267D72D10900008A0640625C70E97F6AC609000073683A4B01685F684E684F4B008572D209000068518772D30900005272D4090000284B014B024B028672D5090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D60900007472D709000062682B682C6866684E684F4B008572D809000068518772D90900005272DA090000284B014B024B028672DB090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DC0900007472DD090000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DE0900007D72DF0900002868267D72E00900008A0660B8167CE97F6AC309000073683A4B026825684E684F4B008572E109000068518772E20900005272E3090000284B014B034B038672E40900006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E50900007472E609000062682B682C683B4E75627562683A4B0168896A9D05000075628A06902A5B70E97F6828298172E70900007D72E809000028682B682C682D4B02682E4B0268267D72E90900008A0690135870E97F6844298172EA0900007D72EB0900002868267D72EC090000683A4B0168486AE7090000682B682C6849684A298172ED0900007D72EE09000028684D684E684F4B008572EF09000068518772F00900005272F1090000284B014B028572F20900006858894310000000000000F07F000000000000F07F72F30900007472F409000062685D8868267D72F50900008A0690135870E97F6AEA09000073683A4B01685F684E684F4B008572F609000068518772F70900005272F8090000284B014B024B028672F9090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FA0900007472FB09000062682B682C6866684E684F4B008572FC09000068518772FD0900005272FE090000284B014B024B028672FF090000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72000A00007472010A000062756268664E75627368306828298172020A00007D72030A000028682B682C682D4B02682E4B0268267D72040A00008A06902A5B70E97F6AE70900007368306831298172050A00007D72060A00002868267D72070A00008A06C02C5B70E97F6A020A0000736873684A298172080A00007D72090A000028684D684E684F4B0085720A0A0000685187720B0A000052720C0A0000284B014B0285720D0A00006858894310000000000000F07F000000000000F07F720E0A000074720F0A000062685D8868267D72100A00008A06A82B5B70E97F6A050A000073683A4B01685F684E684F4B008572110A000068518772120A00005272130A0000284B014B024B028672140A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72150A00007472160A000062682B682C6866684E684F4B008572170A000068518772180A00005272190A0000284B014B024B0286721A0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721B0A000074721C0A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981721D0A00007D721E0A00002868267D721F0A00008A06C02C5B70E97F6A020A000073683A4B026825684E684F4B008572200A000068518772210A00005272220A0000284B014B034B038672230A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72240A00007472250A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0670345D70E97F6828298172260A00007D72270A000028682B682C682D4B02682E4B0268267D72280A00008A06A8345D70E97F6844298172290A00007D722A0A00002868267D722B0A0000683A4B0168486A260A0000682B682C6849684A2981722C0A00007D722D0A000028684D684E684F4B0085722E0A0000685187722F0A00005272300A0000284B014B028572310A00006858894310000000000000F07F000000000000F07F72320A00007472330A000062685D8868267D72340A00008A06A8345D70E97F6A290A000073683A4B01685F684E684F4B008572350A000068518772360A00005272370A0000284B014B024B028672380A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72390A000074723A0A000062682B682C6866684E684F4B0085723B0A0000685187723C0A000052723D0A0000284B014B024B0286723E0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723F0A00007472400A000062756268664E75627368306828298172410A00007D72420A000028682B682C682D4B02682E4B0268267D72430A00008A0670345D70E97F6A260A00007368306831298172440A00007D72450A00002868267D72460A00008A0638345D70E97F6A410A0000736873684A298172470A00007D72480A000028684D684E684F4B008572490A0000685187724A0A000052724B0A0000284B014B0285724C0A00006858894310000000000000F07F000000000000F07F724D0A000074724E0A000062685D8868267D724F0A00008A06B8305D70E97F6A440A000073683A4B01685F684E684F4B008572500A000068518772510A00005272520A0000284B014B024B028672530A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72540A00007472550A000062682B682C6866684E684F4B008572560A000068518772570A00005272580A0000284B014B024B028672590A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725A0A000074725B0A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981725C0A00007D725D0A00002868267D725E0A00008A0638345D70E97F6A410A000073683A4B026825684E684F4B0085725F0A000068518772600A00005272610A0000284B014B034B038672620A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72630A00007472640A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0608625C70E97F6828298172650A00007D72660A000028682B682C682D4B02682E4B0268267D72670A00008A0698685C70E97F6844298172680A00007D72690A00002868267D726A0A0000683A4B0168486A650A0000682B682C6849684A2981726B0A00007D726C0A000028684D684E684F4B0085726D0A0000685187726E0A000052726F0A0000284B014B028572700A00006858894310000000000000F07F000000000000F07F72710A00007472720A000062685D8868267D72730A00008A0698685C70E97F6A680A000073683A4B01685F684E684F4B008572740A000068518772750A00005272760A0000284B014B024B028672770A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72780A00007472790A000062682B682C6866684E684F4B0085727A0A0000685187727B0A000052727C0A0000284B014B024B0286727D0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727E0A000074727F0A000062756268664E75627368306828298172800A00007D72810A000028682B682C682D4B02682E4B0268267D72820A00008A0608625C70E97F6A650A00007368306831298172830A00007D72840A00002868267D72850A00008A0640695C70E97F6A800A0000736873684A298172860A00007D72870A000028684D684E684F4B008572880A000068518772890A000052728A0A0000284B014B0285728B0A00006858894310000000000000F07F000000000000F07F728C0A000074728D0A000062685D8868267D728E0A00008A06E8625C70E97F6A830A000073683A4B01685F684E684F4B0085728F0A000068518772900A00005272910A0000284B014B024B028672920A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72930A00007472940A000062682B682C6866684E684F4B008572950A000068518772960A00005272970A0000284B014B024B028672980A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72990A000074729A0A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A2981729B0A00007D729C0A00002868267D729D0A00008A0640695C70E97F6A800A000073683A4B026825684E684F4B0085729E0A0000685187729F0A00005272A00A0000284B014B034B038672A10A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A20A00007472A30A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660AF6070E97F6AFA0600008A0638345370E97F6828298172A40A00007D72A50A000028682B682C682D4B02682E4B0268267D72A60A00008A0618355370E97F6844298172A70A00007D72A80A00002868267D72A90A0000683A4B0168486AA40A0000682B682C6849684A298172AA0A00007D72AB0A000028684D684E684F4B008572AC0A000068518772AD0A00005272AE0A0000284B014B028572AF0A00006858894310000000000000F07F000000000000F07F72B00A00007472B10A000062685D8868267D72B20A00008A0618355370E97F6AA70A000073683A4B01685F684E684F4B008572B30A000068518772B40A00005272B50A0000284B014B024B028672B60A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72B70A00007472B80A000062682B682C6866684E684F4B008572B90A000068518772BA0A00005272BB0A0000284B014B024B028672BC0A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BD0A00007472BE0A000062756268664E75627368306828298172BF0A00007D72C00A000028682B682C682D4B02682E4B0268267D72C10A00008A0638345370E97F6AA40A00007368306831298172C20A00007D72C30A00002868267D72C40A00008A06E8325370E97F6ABF0A0000736873684A298172C50A00007D72C60A000028684D684E684F4B008572C70A000068518772C80A00005272C90A0000284B014B028572CA0A00006858894310000000000000F07F000000000000F07F72CB0A00007472CC0A000062685D8868267D72CD0A00008A0690335370E97F6AC20A000073683A4B01685F684E684F4B008572CE0A000068518772CF0A00005272D00A0000284B014B024B028672D10A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D20A00007472D30A000062682B682C6866684E684F4B008572D40A000068518772D50A00005272D60A0000284B014B024B028672D70A0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D80A00007472D90A0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172DA0A00007D72DB0A00002868267D72DC0A00008A06E8325370E97F6ABF0A000073683A4B026825684E684F4B008572DD0A000068518772DE0A00005272DF0A0000284B014B034B038672E00A00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E10A00007472E20A000062682B682C683B4E75627562683A4B0168896A9D05000075628A0660A86070E97F6A360700008A0658CA5970E97F6AF00600007568736A9A050000683A4B0168254E682B682C683B4E756273683A4B0168486A97050000682B682C6849684A298172E30A00007D72E40A000028684D684E684F4B008572E50A000068518772E60A00005272E70A0000284B014B028572E80A00006858894310000000000000F07F000000000000F07F72E90A00007472EA0A000062685D8868267D72EB0A00008A0608C25F70E97F6A9A05000073683A4B00685F684E684F4B008572EC0A000068518772ED0A00005272EE0A0000284B014B024B028672EF0A00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72F00A00007472F10A000062682B682C6866684E684F4B008572F20A000068518772F30A00005272F40A0000284B014B024B028672F50A00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72F60A00007472F70A000062756268664E75628A0638945070E97F6844298172F80A00007D72F90A00002868267D72FA0A00008A06D8965070E97F683273683A4B0068486A97050000682B682C6849684A298172FB0A00007D72FC0A000028684D684E684F4B008572FD0A000068518772FE0A00005272FF0A0000284B014B028572000B00006858894310000000000000F07F000000000000F07F72010B00007472020B000062685D8868267D72030B00008A0638945070E97F6AF80A000073683A4B00685F684E684F4B008572040B000068518772050B00005272060B0000284B014B024B028672070B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72080B00007472090B000062682B682C6866684E684F4B0085720A0B0000685187720B0B000052720C0B0000284B014B024B0286720D0B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F720E0B000074720F0B00006275626866684E684F4B008572100B000068518772110B00005272120B0000284B014B024B028672130B0000685889432000000000000054406666666666664A4000000000000082406666666666667A4072140B00007472150B00006275627568736844298172160B00007D72170B00002868267D72180B00008A066021BB73E97F6A9705000073683A4B00684868A4682B682C6849684A298172190B00007D721A0B000028684D684E684F4B0085721B0B0000685187721C0B000052721D0B0000284B014B0285721E0B00006858894310000000000000F07F000000000000F07F721F0B00007472200B000062685D8868267D72210B00008A06980FBA73E97F6A160B000073683A4B00685F684E684F4B008572220B000068518772230B00005272240B0000284B014B024B028672250B00006858894320000000000000000000000000000000009A99999999991940333333333333134072260B00007472270B000062682B682C6866684E684F4B008572280B000068518772290B000052722A0B0000284B014B024B0286722B0B00006858894320000000000000000000000000000000009A999999999919403333333333331340722C0B000074722D0B00006275626866684E684F4B0085722E0B0000685187722F0B00005272300B0000284B014B024B028672310B000068588943200000000000000000000000000000000000000000000084400000000000007E4072320B00007472330B0000627562683A4B006825684E684F4B008572340B000068518772350B00005272360B0000284B014B034B038672370B0000685889434800000000000084400000000000000000000000000000000000000000000000000000000000007E40000000000000000000000000000000000000000000000000000000000000F03F72380B00007472390B000062682B682C683B4E7562682B682C6849684A2981723A0B00007D723B0B000028684D684E684F4B0085723C0B0000685187723D0B000052723E0B0000284B014B0285723F0B00006858894310000000000000F07F000000000000F07F72400B00007472410B000062685D8868267D72420B00008A0630AD5B70E97F6A9405000073683A4B00685F684E684F4B008572430B000068518772440B00005272450B0000284B014B024B028672460B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F72470B00007472480B000062682B682C6866684E684F4B008572490B0000685187724A0B000052724B0B0000284B014B024B0286724C0B00006858894320000000000000C03F285C8FC2F528BC3FCDCCCCCCCCCCEC3F295C8FC2F528EC3F724D0B000074724E0B000062756268664E7562683A4B0168254E682B682C683B4E756268267D724F0B0000288A068027BB73E97F6828298172500B00007D72510B000028682B682C682D4B02682E4B0268267D72520B0000683068C1683A4B0268896822298172530B00007D72540B00002868254E68267D72550B00008A068027BB73E97F6A500B000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672560B0000756275628A0640795F70E97F6828298172570B00007D72580B000028682B682C682D4B02682E4B0268267D72590B0000683068C1683A4B02688968222981725A0B00007D725B0B00002868254E68267D725C0B00008A0640795F70E97F6A570B000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B0086725D0B0000756275628A06707B5F70E97F68282981725E0B00007D725F0B000028682B682C682D4B02682E4B0268267D72600B0000683068C1683A4B0268896822298172610B00007D72620B00002868254E68267D72630B00008A06707B5F70E97F6A5E0B000073683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672640B0000756275628A0610CE5F70E97F6828298172650B00007D72660B000028682B682C682D4B02682E4B0268267D72670B0000683068C1683A4B0268896822298172680B00007D72690B00002868254E68267D726A0B00008A0610CE5F70E97F6A650B000073683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B0086726B0B0000756275628A06D82DBB73E97F68282981726C0B00007D726D0B000028682B682C682D4B02682E4B0268267D726E0B0000683068C1683A4B02688968222981726F0B00007D72700B00002868254E68267D72710B00008A06D82DBB73E97F6A6C0B000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672720B0000756275628A0658735F70E97F6828298172730B00007D72740B000028682B682C682D4B02682E4B0268267D72750B0000683068C1683A4B0268896822298172760B00007D72770B00002868254E68267D72780B00008A0658735F70E97F6A730B000073683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672790B0000756275628A0670745F70E97F68282981727A0B00007D727B0B000028682B682C682D4B02682E4B0268267D727C0B0000683068C1683A4B02688968222981727D0B00007D727E0B00002868254E68267D727F0B00008A0670745F70E97F6A7A0B000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008672800B0000756275628A0660CF5F70E97F6828298172810B00007D72820B000028682B682C682D4B02682E4B0268267D72830B0000683068C1683A4B0268896822298172840B00007D72850B00002868254E68267D72860B00008A0660CF5F70E97F6A810B000073683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008672870B00007562756275683A4B026A350700004E682B682C683C68BE75627568306A50010000683A4B0268896A44010000756268267D72880B0000288A06806E4E70E97F6828298172890B00007D728A0B000028682B682C682D4B02682E4B0268267D728B0B0000683068BC683A4B02688968222981728C0B00007D728D0B00002868254E68267D728E0B00008A06806E4E70E97F6A890B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB333333333333486728F0B0000756275628A06C06C4E70E97F68B98A0680276270E97F6828298172900B00007D72910B000028682B682C682D4B02682E4B0268267D72920B0000683068BC683A4B0268896822298172930B00007D72940B00002868254E68267D72950B00008A0680276270E97F6A900B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E398672960B0000756275628A0668B65370E97F6828298172970B00007D72980B000028682B682C682D4B02682E4B0268267D72990B0000683068BC683A4B02688968222981729A0B00007D729B0B00002868254E68267D729C0B00008A0668B65370E97F6A970B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E3986729D0B0000756275628A0640025F70E97F68282981729E0B00007D729F0B000028682B682C682D4B02682E4B0268267D72A00B0000683068BC683A4B0268896822298172A10B00007D72A20B00002868254E68267D72A30B00008A0640025F70E97F6A9E0B000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672A40B0000756275628A06905A5E70E97F6828298172A50B00007D72A60B000028682B682C682D4B02682E4B0268267D72A70B0000683068BC683A4B0268896822298172A80B00007D72A90B00002868254E68267D72AA0B00008A06905A5E70E97F6AA50B000073683A4B0168A368A4682B682C683B4E68AD4B0047BFB33333333333348672AB0B0000756275628A06D8565E70E97F6828298172AC0B00007D72AD0B000028682B682C682D4B02682E4B0268267D72AE0B0000683068BC683A4B0268896822298172AF0B00007D72B00B00002868254E68267D72B10B00008A06D8565E70E97F6AAC0B000073683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672B20B0000756275628A06E8B25370E97F6828298172B30B00007D72B40B000028682B682C682D4B02682E4B0268267D72B50B0000683068BC683A4B0268896822298172B60B00007D72B70B00002868254E68267D72B80B00008A06E8B25370E97F6AB30B000073683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672B90B00007562756275683A4B026A350700004E682B682C683C68C37562683A4B02688968B6756273683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672BA0B000075628A0608225C70E97F6A150700008A06306D4E70E97F6A8C0B00008A0690935470E97F6A680B00008A0658E34F70E97F6822298172BB0B00007D72BC0B00002868254E68267D72BD0B00008A0638E44F70E97F6828298172BE0B00007D72BF0B000028682B682C682D4B02682E4B0268267D72C00B000068306895683A4B0268896ABB0B0000756273683A4B0168A368A4682B682C683B4E68AD4B0047BFB33333333333348672C10B000075628A06A82B6270E97F6A930B00008A06980FBA73E97F6A160B00008A0650CC5870E97F6AEA0600008A06A0665D70E97F6A4A0700008A06705B5470E97F6822298172C20B00007D72C30B00002868254E68267D72C40B00008A06185C5470E97F6828298172C50B00007D72C60B000028682B682C682D4B02682E4B0268267D72C70B000068306895683A4B0268896AC20B0000756273683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E398672C80B000075628A06A83B5470E97F68A08A06F0B05370E97F6AB60B00008A06287F5F70E97F6A7D0B00008A0630365470E97F6822298172C90B00007D72CA0B00002868254E68267D72CB0B00008A0648375470E97F6828298172CC0B00007D72CD0B000028682B682C682D4B02682E4B0268267D72CE0B00006830689A683A4B0268896AC90B0000756273683A4B0168A368A4682B682C683B4E68AD473FB33333333333344B008672CF0B000075628A0648505470E97F6822298172D00B00007D72D10B00002868254E68267D72D20B00008A06F0505470E97F6828298172D30B00007D72D40B000028682B682C682D4B02682E4B0268267D72D50B00006830689A683A4B0268896AD00B0000756273683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672D60B000075628A06A07D5270E97F6A0E0700008A06C0755270E97F6A5F0700008A0618CC5F70E97F6A840B00008A06B82EBB73E97F6A6F0B00008A06905A5470E97F6822298172D70B00007D72D80B00002868254E68267D72D90B00008A0608595470E97F6828298172DA0B00007D72DB0B000028682B682C682D4B02682E4B0268267D72DC0B000068306895683A4B0268896AD70B0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672DD0B000075628A06505C5E70E97F6AA80B00008A0608695D70E97F6A510700008A0628315370E97F6A000700008A0640325470E97F6822298172DE0B00007D72DF0B00002868254E68267D72E00B00008A0608325470E97F6828298172E10B00007D72E20B000028682B682C682D4B02682E4B0268267D72E30B00006830689A683A4B0268896ADE0B0000756273683A4B0168A368A4682B682C683B4E68AD473FB8E38E38E38E394B008672E40B000075628A06A04D5A70E97F6A430700008A06D82D5C70E97F6A070700008A06F8555470E97F6822298172E50B00007D72E60B00002868254E68267D72E70B00008A0688555470E97F6828298172E80B00007D72E90B000028682B682C682D4B02682E4B0268267D72EA0B000068306895683A4B0268896AE50B0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E398672EB0B000075628A06486E5D70E97F6A580700008A0670B45370E97F6A9A0B00008A0650855570E97F6822298172EC0B00007D72ED0B00002868254E68267D72EE0B00008A06188C5570E97F6828298172EF0B00007D72F00B000028682B682C682D4B02682E4B0268267D72F10B000068306895683A4B0268896AEC0B0000756273683A4B0168A368A4682B682C683B4E68AD4B0047BFB8E38E38E38E398672F20B000075628A0678E25370E97F68238A06107E5F70E97F6A5A0B00008A06D8865570E97F6822298172F30B00007D72F40B00002868254E68267D72F50B00008A06304D5570E97F6828298172F60B00007D72F70B000028682B682C682D4B02682E4B0268267D72F80B00006830689A683A4B0268896AF30B0000756273683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672F90B000075628A06903A5370E97F6A310700008A06183C5370E97F6A1C0700008A06E0345470E97F6822298172FA0B00007D72FB0B00002868254E68267D72FC0B00008A0658335470E97F6828298172FD0B00007D72FE0B000028682B682C682D4B02682E4B0268267D72FF0B00006830689A683A4B0268896AFA0B0000756273683A4B0168A368A4682B682C683B4E68AD47BFB33333333333344B008672000C000075628A06907A5F70E97F6A610B00008A0698315470E97F6822298172010C00007D72020C00002868254E68267D72030C00008A06B8305470E97F6828298172040C00007D72050C000028682B682C682D4B02682E4B0268267D72060C00006830689A683A4B0268896A010C0000756273683A4B0168A368A4682B682C683B4E68AD47BFB8E38E38E38E394B008672070C000075628A06F0075F70E97F6AA10B00008A06E8495A70E97F6A3C0700008A06A82B5C70E97F6A2A0700008A06C02CBB73E97F6A530B00008A06187C5F70E97F6A760B00008A0670945470E97F6A7E0200008A06A8945370E97F6822298172080C00007D72090C00002868254E68267D720A0C00008A0690935370E97F68282981720B0C00007D720C0C000028682B682C682D4B02682E4B0268267D720D0C000068306895683A4B0268896A080C0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB8E38E38E38E3986720E0C000075628A06A84B5A70E97F6A660700008A0628585E70E97F6AAF0B00008A0678725270E97F6A6D0700008A06A0765270E97F6A230700008A0618E54F70E97F68222981720F0C00007D72100C00002868254E68267D72110C00008A0688E54F70E97F6828298172120C00007D72130C000028682B682C682D4B02682E4B0268267D72140C000068306895683A4B0268896A0F0C0000756273683A4B0168A368A4682B682C683B4E68AD4B00473FB33333333333348672150C0000756275683A4B006825684E684F4B008572160C000068518772170C00005272180C0000284B014B034B038672190C0000685889434800000000000059400000000000000000000000000000000000000000000000000000000000005940000000000000000000000000000000000000000000000000000000000000F03F721A0C000074721B0C000062682B682C683B4E7562682B682C683B4E68AD47BFB33333333333344B0086721C0C0000756275628A06304D5570E97F6AF60B00008A06F0505470E97F6AD30B00008A0608325470E97F6AE10B00008A0658335470E97F6AFD0B00008A06B8305470E97F6A040C00008A0660EF5370E97F68B28A0648375470E97F6ACC0B000075683A4B026A350700004E682B682C683C689775627568306A4F0100002981721D0C00007D721E0C000028682E4B026A5201000068352981721F0C00007D72200C0000286838683D298172210C00007D72220C00002868267D72230C00008A0680E74F70E97F6A1F0C000073683A4B01682B682C683B4E756268267D72240C00008A06B8975070E97F6A1D0C000073683A4B006825684E684F4B008572250C000068518772260C00005272270C0000284B014B034B038672280C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72290C000074722A0C000062682B682C683B688A2981722B0C00007D722C0C00002868267D722D0C0000683A4B006825684E684F4B0085722E0C0000685187722F0C00005272300C0000284B014B034B038672310C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72320C00007472330C000062682B682C683B4E7562683C683D298172340C00007D72350C00002868267D72360C00008A0680E74F70E97F6A1F0C000073683A4B01682B682C683B4E756275626A5C0100007D72370C0000288A0668965070E97F6844298172380C00007D72390C00002868267D723A0C00008A0630965070E97F6A470100002981723B0C00007D723C0C00002868267D723D0C00008A0628985070E97F68282981723E0C00007D723F0C000028682B682C682D4B02682E4B0268267D72400C00008A0698985070E97F68977368306A3B0C0000683A4B02688968327562736A4B0100006A380C0000683A4B026825684E684F4B008572410C000068518772420C00005272430C0000284B014B034B038672440C00006858894348000000000000F03F000000000000000000000000000000800000000000000000000000000000F03F000000000000008000000000000000000000000000000000000000000000F03F72450C00007472460C000062682B682C683B688A298172470C00007D72480C00002868267D72490C0000683A4B006825684E684F4B0085724A0C0000685187724B0C000052724C0C0000284B014B034B0386724D0C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F724E0C000074724F0C000062682B682C683B4E7562756273683A4B0268486A1D0C0000682B682C6849684A298172500C00007D72510C000028684D684E684F4B008572520C000068518772530C00005272540C0000284B014B028572550C00006858894310000000000000F07F000000000000F07F72560C00007472570C000062685D8868267D72580C00008A0668965070E97F6A380C000073683A4B02685F684E684F4B008572590C0000685187725A0C000052725B0C0000284B014B024B0286725C0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725D0C000074725E0C000062682B682C6866684E684F4B0085725F0C000068518772600C00005272610C0000284B014B024B028672620C0000685889432081360D68D3E653C04B922449920422C0D0A6016DDA7C80402649922449A0674072630C00007472640C00006275626866684E684F4B008572650C000068518772660C00005272670C0000284B014B024B028672680C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72690C000074726A0C00006275628A0698985070E97F689775682D4B027562683A4B0268896A3E0C0000756268267D726B0C0000288A0690935370E97F6A0B0C00008A0668E65370E97F68AA8A0688555470E97F6AE80B00008A06188C5570E97F6AEF0B00008A0638E44F70E97F6ABE0B00008A0688E54F70E97F6A120C00008A06185C5470E97F6AC50B00008A0608595470E97F6ADA0B000075683A4B026A350700004E682B682C683C683275628A0670E45070E97F68282981726C0C00007D726D0C000028682B682C682D4B02682E4B0268267D726E0C00008A06E0E45070E97F68442981726F0C00007D72700C00002868267D72710C0000683A4B0168486A6C0C0000682B682C6849684A298172720C00007D72730C000028684D684E684F4B008572740C000068518772750C00005272760C0000284B014B028572770C00006858894310000000000000F07F000000000000F07F72780C00007472790C000062685D8868267D727A0C00008A06E0E45070E97F6A6F0C000073683A4B01685F684E684F4B0085727B0C0000685187727C0C000052727D0C0000284B014B024B0286727E0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F727F0C00007472800C000062682B682C6866684E684F4B008572810C000068518772820C00005272830C0000284B014B024B028672840C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72850C00007472860C000062756268664E75627368306828298172870C00007D72880C000028682B682C682D4B02682E4B0268267D72890C00008A0670E45070E97F6A6C0C000073683068312981728A0C00007D728B0C00002868267D728C0C00008A0600E45070E97F6A870C0000736873684A2981728D0C00007D728E0C000028684D684E684F4B0085728F0C000068518772900C00005272910C0000284B014B028572920C00006858894310000000000000F07F000000000000F07F72930C00007472940C000062685D8868267D72950C00008A0690E35070E97F6A8A0C000073683A4B01685F684E684F4B008572960C000068518772970C00005272980C0000284B014B024B028672990C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729A0C000074729B0C000062682B682C6866684E684F4B0085729C0C0000685187729D0C000052729E0C0000284B014B024B0286729F0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A00C00007472A10C0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172A20C00007D72A30C00002868267D72A40C00008A0600E45070E97F6A870C000073683A4B026825684E684F4B008572A50C000068518772A60C00005272A70C0000284B014B034B038672A80C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72A90C00007472AA0C000062682B682C683B4E75627562683A4B016889683275628A0680305270E97F6828298172AB0C00007D72AC0C000028682B682C682D4B02682E4B0268267D72AD0C00008A06F0305270E97F6844298172AE0C00007D72AF0C00002868267D72B00C0000683A4B0168486AAB0C0000682B682C6849684A298172B10C00007D72B20C000028684D684E684F4B008572B30C000068518772B40C00005272B50C0000284B014B028572B60C00006858894310000000000000F07F000000000000F07F72B70C00007472B80C000062685D8868267D72B90C00008A06F0305270E97F6AAE0C000073683A4B01685F684E684F4B008572BA0C000068518772BB0C00005272BC0C0000284B014B024B028672BD0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BE0C00007472BF0C000062682B682C6866684E684F4B008572C00C000068518772C10C00005272C20C0000284B014B024B028672C30C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C40C00007472C50C000062756268664E75627368306828298172C60C00007D72C70C000028682B682C682D4B02682E4B0268267D72C80C00008A0680305270E97F6AAB0C00007368306831298172C90C00007D72CA0C00002868267D72CB0C00008A06D07F5170E97F6AC60C0000736873684A298172CC0C00007D72CD0C000028684D684E684F4B008572CE0C000068518772CF0C00005272D00C0000284B014B028572D10C00006858894310000000000000F07F000000000000F07F72D20C00007472D30C000062685D8868267D72D40C00008A06607F5170E97F6AC90C000073683A4B01685F684E684F4B008572D50C000068518772D60C00005272D70C0000284B014B024B028672D80C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72D90C00007472DA0C000062682B682C6866684E684F4B008572DB0C000068518772DC0C00005272DD0C0000284B014B024B028672DE0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DF0C00007472E00C0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172E10C00007D72E20C00002868267D72E30C00008A06D07F5170E97F6AC60C000073683A4B026825684E684F4B008572E40C000068518772E50C00005272E60C0000284B014B034B038672E70C00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E80C00007472E90C000062682B682C683B4E75627562683A4B016889683275628A0678995070E97F689A8A0600DB4F70E97F6828298172EA0C00007D72EB0C000028682B682C682D4B02682E4B0268267D72EC0C00008A0670DB4F70E97F6844298172ED0C00007D72EE0C00002868267D72EF0C0000683A4B0168486AEA0C0000682B682C6849684A298172F00C00007D72F10C000028684D684E684F4B008572F20C000068518772F30C00005272F40C0000284B014B028572F50C00006858894310000000000000F07F000000000000F07F72F60C00007472F70C000062685D8868267D72F80C00008A0670DB4F70E97F6AED0C000073683A4B01685F684E684F4B008572F90C000068518772FA0C00005272FB0C0000284B014B024B028672FC0C0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FD0C00007472FE0C000062682B682C6866684E684F4B008572FF0C000068518772000D00005272010D0000284B014B024B028672020D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72030D00007472040D000062756268664E75627368306828298172050D00007D72060D000028682B682C682D4B02682E4B0268267D72070D00008A0600DB4F70E97F6AEA0C00007368306831298172080D00007D72090D00002868267D720A0D00008A0690DA4F70E97F6A050D0000736873684A2981720B0D00007D720C0D000028684D684E684F4B0085720D0D0000685187720E0D000052720F0D0000284B014B028572100D00006858894310000000000000F07F000000000000F07F72110D00007472120D000062685D8868267D72130D00008A0620DA4F70E97F6A080D000073683A4B01685F684E684F4B008572140D000068518772150D00005272160D0000284B014B024B028672170D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72180D00007472190D000062682B682C6866684E684F4B0085721A0D0000685187721B0D000052721C0D0000284B014B024B0286721D0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721E0D000074721F0D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172200D00007D72210D00002868267D72220D00008A0690DA4F70E97F6A050D000073683A4B026825684E684F4B008572230D000068518772240D00005272250D0000284B014B034B038672260D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72270D00007472280D000062682B682C683B4E75627562683A4B016889683275628A06D0415570E97F6835298172290D00007D722A0D0000286838683268267D722B0D0000683A4B0168254E682B682C683B4E683C683D2981722C0D00007D722D0D00002868267D722E0D00008A06D0415570E97F6A290D000073683A4B01682B682C683B4E756275628A0658EA4F70E97F68282981722F0D00007D72300D000028682B682C682D4B02682E4B0268267D72310D000068306832683A4B016889682375628A06207A5170E97F6828298172320D00007D72330D000028682B682C682D4B02682E4B0268267D72340D00008A06907A5170E97F6844298172350D00007D72360D00002868267D72370D0000683A4B0168486A320D0000682B682C6849684A298172380D00007D72390D000028684D684E684F4B0085723A0D0000685187723B0D000052723C0D0000284B014B0285723D0D00006858894310000000000000F07F000000000000F07F723E0D000074723F0D000062685D8868267D72400D00008A06907A5170E97F6A350D000073683A4B01685F684E684F4B008572410D000068518772420D00005272430D0000284B014B024B028672440D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72450D00007472460D000062682B682C6866684E684F4B008572470D000068518772480D00005272490D0000284B014B024B0286724A0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F724B0D000074724C0D000062756268664E756273683068282981724D0D00007D724E0D000028682B682C682D4B02682E4B0268267D724F0D00008A06207A5170E97F6A320D00007368306831298172500D00007D72510D00002868267D72520D00008A06B0795170E97F6A4D0D0000736873684A298172530D00007D72540D000028684D684E684F4B008572550D000068518772560D00005272570D0000284B014B028572580D00006858894310000000000000F07F000000000000F07F72590D000074725A0D000062685D8868267D725B0D00008A0640795170E97F6A500D000073683A4B01685F684E684F4B0085725C0D0000685187725D0D000052725E0D0000284B014B024B0286725F0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72600D00007472610D000062682B682C6866684E684F4B008572620D000068518772630D00005272640D0000284B014B024B028672650D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72660D00007472670D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172680D00007D72690D00002868267D726A0D00008A06B0795170E97F6A4D0D000073683A4B026825684E684F4B0085726B0D0000685187726C0D000052726D0D0000284B014B034B0386726E0D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726F0D00007472700D000062682B682C683B4E75627562683A4B016889683275628A0610DE4F70E97F6828298172710D00007D72720D000028682B682C682D4B02682E4B0268267D72730D00008A0680DE4F70E97F6844298172740D00007D72750D00002868267D72760D0000683A4B0168486A710D0000682B682C6849684A298172770D00007D72780D000028684D684E684F4B008572790D0000685187727A0D000052727B0D0000284B014B0285727C0D00006858894310000000000000F07F000000000000F07F727D0D000074727E0D000062685D8868267D727F0D00008A0680DE4F70E97F6A740D000073683A4B01685F684E684F4B008572800D000068518772810D00005272820D0000284B014B024B028672830D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72840D00007472850D000062682B682C6866684E684F4B008572860D000068518772870D00005272880D0000284B014B024B028672890D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F728A0D000074728B0D000062756268664E756273683068282981728C0D00007D728D0D000028682B682C682D4B02682E4B0268267D728E0D00008A0610DE4F70E97F6A710D000073683068312981728F0D00007D72900D00002868267D72910D00008A06A0DD4F70E97F6A8C0D0000736873684A298172920D00007D72930D000028684D684E684F4B008572940D000068518772950D00005272960D0000284B014B028572970D00006858894310000000000000F07F000000000000F07F72980D00007472990D000062685D8868267D729A0D00008A0630DD4F70E97F6A8F0D000073683A4B01685F684E684F4B0085729B0D0000685187729C0D000052729D0D0000284B014B024B0286729E0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729F0D00007472A00D000062682B682C6866684E684F4B008572A10D000068518772A20D00005272A30D0000284B014B024B028672A40D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A50D00007472A60D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172A70D00007D72A80D00002868267D72A90D00008A06A0DD4F70E97F6A8C0D000073683A4B026825684E684F4B008572AA0D000068518772AB0D00005272AC0D0000284B014B034B038672AD0D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AE0D00007472AF0D000062682B682C683B4E75627562683A4B016889683275628A06E0D44F70E97F6828298172B00D00007D72B10D000028682B682C682D4B02682E4B0268267D72B20D00008A0650D54F70E97F6844298172B30D00007D72B40D00002868267D72B50D0000683A4B0168486AB00D0000682B682C6849684A298172B60D00007D72B70D000028684D684E684F4B008572B80D000068518772B90D00005272BA0D0000284B014B028572BB0D00006858894310000000000000F07F000000000000F07F72BC0D00007472BD0D000062685D8868267D72BE0D00008A0650D54F70E97F6AB30D000073683A4B01685F684E684F4B008572BF0D000068518772C00D00005272C10D0000284B014B024B028672C20D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C30D00007472C40D000062682B682C6866684E684F4B008572C50D000068518772C60D00005272C70D0000284B014B024B028672C80D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C90D00007472CA0D000062756268664E75627368306828298172CB0D00007D72CC0D000028682B682C682D4B02682E4B0268267D72CD0D00008A06E0D44F70E97F6AB00D00007368306831298172CE0D00007D72CF0D00002868267D72D00D00008A0670D44F70E97F6ACB0D0000736873684A298172D10D00007D72D20D000028684D684E684F4B008572D30D000068518772D40D00005272D50D0000284B014B028572D60D00006858894310000000000000F07F000000000000F07F72D70D00007472D80D000062685D8868267D72D90D00008A0600D44F70E97F6ACE0D000073683A4B01685F684E684F4B008572DA0D000068518772DB0D00005272DC0D0000284B014B024B028672DD0D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DE0D00007472DF0D000062682B682C6866684E684F4B008572E00D000068518772E10D00005272E20D0000284B014B024B028672E30D0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E40D00007472E50D0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172E60D00007D72E70D00002868267D72E80D00008A0670D44F70E97F6ACB0D000073683A4B026825684E684F4B008572E90D000068518772EA0D00005272EB0D0000284B014B034B038672EC0D00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72ED0D00007472EE0D000062682B682C683B4E75627562683A4B016889683275628A06D8ED4F70E97F6828298172EF0D00007D72F00D000028682B682C682D4B02682E4B0268267D72F10D00008A0648EE4F70E97F6844298172F20D00007D72F30D00002868267D72F40D0000683A4B0168486AEF0D0000682B682C6849684A298172F50D00007D72F60D000028684D684E684F4B008572F70D000068518772F80D00005272F90D0000284B014B028572FA0D00006858894310000000000000F07F000000000000F07F72FB0D00007472FC0D000062685D8868267D72FD0D00008A0648EE4F70E97F6AF20D000073683A4B01685F684E684F4B008572FE0D000068518772FF0D00005272000E0000284B014B024B028672010E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72020E00007472030E000062682B682C6866684E684F4B008572040E000068518772050E00005272060E0000284B014B024B028672070E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72080E00007472090E000062756268664E756273683068282981720A0E00007D720B0E000028682B682C682D4B02682E4B0268267D720C0E00008A06D8ED4F70E97F6AEF0D000073683068312981720D0E00007D720E0E00002868267D720F0E00008A06A8EB4F70E97F6A0A0E0000736873684A298172100E00007D72110E000028684D684E684F4B008572120E000068518772130E00005272140E0000284B014B028572150E00006858894310000000000000F07F000000000000F07F72160E00007472170E000062685D8868267D72180E00008A0668ED4F70E97F6A0D0E000073683A4B01685F684E684F4B008572190E0000685187721A0E000052721B0E0000284B014B024B0286721C0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721D0E000074721E0E000062682B682C6866684E684F4B0085721F0E000068518772200E00005272210E0000284B014B024B028672220E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72230E00007472240E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172250E00007D72260E00002868267D72270E00008A06A8EB4F70E97F6A0A0E000073683A4B026825684E684F4B008572280E000068518772290E000052722A0E0000284B014B034B0386722B0E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F722C0E000074722D0E000062682B682C683B4E75627562683A4B016889683275628A0610775170E97F68282981722E0E00007D722F0E000028682B682C682D4B02682E4B0268267D72300E00008A0680775170E97F6844298172310E00007D72320E00002868267D72330E0000683A4B0168486A2E0E0000682B682C6849684A298172340E00007D72350E000028684D684E684F4B008572360E000068518772370E00005272380E0000284B014B028572390E00006858894310000000000000F07F000000000000F07F723A0E000074723B0E000062685D8868267D723C0E00008A0680775170E97F6A310E000073683A4B01685F684E684F4B0085723D0E0000685187723E0E000052723F0E0000284B014B024B028672400E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72410E00007472420E000062682B682C6866684E684F4B008572430E000068518772440E00005272450E0000284B014B024B028672460E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72470E00007472480E000062756268664E75627368306828298172490E00007D724A0E000028682B682C682D4B02682E4B0268267D724B0E00008A0610775170E97F6A2E0E000073683068312981724C0E00007D724D0E00002868267D724E0E00008A06A0765170E97F6A490E0000736873684A2981724F0E00007D72500E000028684D684E684F4B008572510E000068518772520E00005272530E0000284B014B028572540E00006858894310000000000000F07F000000000000F07F72550E00007472560E000062685D8868267D72570E00008A0630765170E97F6A4C0E000073683A4B01685F684E684F4B008572580E000068518772590E000052725A0E0000284B014B024B0286725B0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725C0E000074725D0E000062682B682C6866684E684F4B0085725E0E0000685187725F0E00005272600E0000284B014B024B028672610E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72620E00007472630E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172640E00007D72650E00002868267D72660E00008A06A0765170E97F6A490E000073683A4B026825684E684F4B008572670E000068518772680E00005272690E0000284B014B034B0386726A0E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F726B0E000074726C0E000062682B682C683B4E75627562683A4B016889683275628A06205A5470E97F68282981726D0E00007D726E0E000028682B682C682D4B02682E4B0268267D726F0E00008A0628585470E97F6844298172700E00007D72710E00002868267D72720E0000683A4B0168486A6D0E0000682B682C6849684A298172730E00007D72740E000028684D684E684F4B008572750E000068518772760E00005272770E0000284B014B028572780E00006858894310000000000000F07F000000000000F07F72790E000074727A0E000062685D8868267D727B0E00008A0628585470E97F6A700E000073683A4B01685F684E684F4B0085727C0E0000685187727D0E000052727E0E0000284B014B024B0286727F0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72800E00007472810E000062682B682C6866684E684F4B008572820E000068518772830E00005272840E0000284B014B024B028672850E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72860E00007472870E000062756268664E75627368306828298172880E00007D72890E000028682B682C682D4B02682E4B0268267D728A0E00008A06205A5470E97F6A6D0E000073683068312981728B0E00007D728C0E00002868267D728D0E00008A06B0595470E97F6A880E0000736873684A2981728E0E00007D728F0E000028684D684E684F4B008572900E000068518772910E00005272920E0000284B014B028572930E00006858894310000000000000F07F000000000000F07F72940E00007472950E000062685D8868267D72960E00008A0680D04F70E97F6A8B0E000073683A4B01685F684E684F4B008572970E000068518772980E00005272990E0000284B014B024B0286729A0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F729B0E000074729C0E000062682B682C6866684E684F4B0085729D0E0000685187729E0E000052729F0E0000284B014B024B028672A00E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72A10E00007472A20E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172A30E00007D72A40E00002868267D72A50E00008A06B0595470E97F6A880E000073683A4B026825684E684F4B008572A60E000068518772A70E00005272A80E0000284B014B034B038672A90E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72AA0E00007472AB0E000062682B682C683B4E75627562683A4B016889683275628A06F0D74F70E97F6828298172AC0E00007D72AD0E000028682B682C682D4B02682E4B0268267D72AE0E00008A0660D84F70E97F6844298172AF0E00007D72B00E00002868267D72B10E0000683A4B0168486AAC0E0000682B682C6849684A298172B20E00007D72B30E000028684D684E684F4B008572B40E000068518772B50E00005272B60E0000284B014B028572B70E00006858894310000000000000F07F000000000000F07F72B80E00007472B90E000062685D8868267D72BA0E00008A0660D84F70E97F6AAF0E000073683A4B01685F684E684F4B008572BB0E000068518772BC0E00005272BD0E0000284B014B024B028672BE0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72BF0E00007472C00E000062682B682C6866684E684F4B008572C10E000068518772C20E00005272C30E0000284B014B024B028672C40E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72C50E00007472C60E000062756268664E75627368306828298172C70E00007D72C80E000028682B682C682D4B02682E4B0268267D72C90E00008A06F0D74F70E97F6AAC0E00007368306831298172CA0E00007D72CB0E00002868267D72CC0E00008A0680D74F70E97F6AC70E0000736873684A298172CD0E00007D72CE0E000028684D684E684F4B008572CF0E000068518772D00E00005272D10E0000284B014B028572D20E00006858894310000000000000F07F000000000000F07F72D30E00007472D40E000062685D8868267D72D50E00008A0610D74F70E97F6ACA0E000073683A4B01685F684E684F4B008572D60E000068518772D70E00005272D80E0000284B014B024B028672D90E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72DA0E00007472DB0E000062682B682C6866684E684F4B008572DC0E000068518772DD0E00005272DE0E0000284B014B024B028672DF0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72E00E00007472E10E0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172E20E00007D72E30E00002868267D72E40E00008A0680D74F70E97F6AC70E000073683A4B026825684E684F4B008572E50E000068518772E60E00005272E70E0000284B014B034B038672E80E00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72E90E00007472EA0E000062682B682C683B4E75627562683A4B016889683275628A06E09B5370E97F6828298172EB0E00007D72EC0E000028682B682C682D4B02682E4B0268267D72ED0E00008A06284F5570E97F6844298172EE0E00007D72EF0E00002868267D72F00E0000683A4B0168486AEB0E0000682B682C6849684A298172F10E00007D72F20E000028684D684E684F4B008572F30E000068518772F40E00005272F50E0000284B014B028572F60E00006858894310000000000000F07F000000000000F07F72F70E00007472F80E000062685D8868267D72F90E00008A06284F5570E97F6AEE0E000073683A4B01685F684E684F4B008572FA0E000068518772FB0E00005272FC0E0000284B014B024B028672FD0E0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72FE0E00007472FF0E000062682B682C6866684E684F4B008572000F000068518772010F00005272020F0000284B014B024B028672030F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72040F00007472050F000062756268664E75627368306828298172060F00007D72070F000028682B682C682D4B02682E4B0268267D72080F00008A06E09B5370E97F6AEB0E00007368306831298172090F00007D720A0F00002868267D720B0F00008A06189C5370E97F6A060F0000736873684A2981720C0F00007D720D0F000028684D684E684F4B0085720E0F0000685187720F0F00005272100F0000284B014B028572110F00006858894310000000000000F07F000000000000F07F72120F00007472130F000062685D8868267D72140F00008A06D8965370E97F6A090F000073683A4B01685F684E684F4B008572150F000068518772160F00005272170F0000284B014B024B028672180F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72190F000074721A0F000062682B682C6866684E684F4B0085721B0F0000685187721C0F000052721D0F0000284B014B024B0286721E0F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F721F0F00007472200F0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172210F00007D72220F00002868267D72230F00008A06189C5370E97F6A060F000073683A4B026825684E684F4B008572240F000068518772250F00005272260F0000284B014B034B038672270F00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72280F00007472290F000062682B682C683B4E75627562683A4B016889683275628A0600745170E97F68282981722A0F00007D722B0F000028682B682C682D4B02682E4B0268267D722C0F00008A0670745170E97F68442981722D0F00007D722E0F00002868267D722F0F0000683A4B0168486A2A0F0000682B682C6849684A298172300F00007D72310F000028684D684E684F4B008572320F000068518772330F00005272340F0000284B014B028572350F00006858894310000000000000F07F000000000000F07F72360F00007472370F000062685D8868267D72380F00008A0670745170E97F6A2D0F000073683A4B01685F684E684F4B008572390F0000685187723A0F000052723B0F0000284B014B024B0286723C0F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F723D0F000074723E0F000062682B682C6866684E684F4B0085723F0F000068518772400F00005272410F0000284B014B024B028672420F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72430F00007472440F000062756268664E75627368306828298172450F00007D72460F000028682B682C682D4B02682E4B0268267D72470F00008A0600745170E97F6A2A0F00007368306831298172480F00007D72490F00002868267D724A0F00008A0690735170E97F6A450F0000736873684A2981724B0F00007D724C0F000028684D684E684F4B0085724D0F0000685187724E0F000052724F0F0000284B014B028572500F00006858894310000000000000F07F000000000000F07F72510F00007472520F000062685D8868267D72530F00008A0620735170E97F6A480F000073683A4B01685F684E684F4B008572540F000068518772550F00005272560F0000284B014B024B028672570F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F72580F00007472590F000062682B682C6866684E684F4B0085725A0F0000685187725B0F000052725C0F0000284B014B024B0286725D0F0000685889432000000000000000000000000000000000000000000000F03F000000000000F03F725E0F000074725F0F0000627562683A4B0168254E682B682C683B4E7562683A4B016889688A298172600F00007D72610F00002868267D72620F00008A0690735170E97F6A450F000073683A4B026825684E684F4B008572630F000068518772640F00005272650F0000284B014B034B038672660F00006858894348000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F72670F00007472680F000062682B682C683B4E75627562683A4B016889683275628A06E8E94F70E97F6828298172690F00007D726A0F000028682B682C682D4B02682E4B0268267D726B0F000068306832683A4B016889682375628A06E0845570E97F68282981726C0F00007D726D0F000028682B682C682D4B02682E4B0268267D726E0F00008A06A08D5570E97F68442981726F0F00007D72700F00002868267D72710F0000683A4B0168486A6C0F0000682B682C6849684A298172720F00007D72730F000028684D684E684F4B008572740F000068518772750F00005272760F0000284B014B028572770F00006858894310000000000000F07F000000000000F07F72780F00007472790F000062685D8868267D727A0F0000
" + }, + "metadata": {} + } + ], + "execution_count": 17 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO\n\n/* Split the Sample */\nDROP PROCEDURE IF EXISTS PyTrainTestSplit;\nGO\n\nCREATE PROCEDURE [dbo].[PyTrainTestSplit] (@pct int)\nAS\n\nDROP TABLE IF EXISTS dbo.nyctaxi_sample_training\nSELECT * into nyctaxi_sample_training \nFROM nyctaxi_sample \nWHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) < @pct\n\nDROP TABLE IF EXISTS dbo.nyctaxi_sample_testing\nSELECT * into nyctaxi_sample_testing \nFROM nyctaxi_sample\nWHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) > @pct\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0737210" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0735570" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0902990" + }, + "metadata": {} + } + ], + "execution_count": 5 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO \n\n/* Call proc using 60% Split */\nEXEC PyTrainTestSplit 60\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0775150" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(1025684 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(660029 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:21.9306430" + }, + "metadata": {} + } + ], + "execution_count": 18 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO\n\n/* Create Linear Regression Model using SciKitLearn*/\nDROP PROCEDURE IF EXISTS PyTrainScikit;\nGO\n\nCREATE PROCEDURE [dbo].[PyTrainScikit] (@trained_model varbinary(max) OUTPUT)\nAS\nBEGIN\nEXEC sp_execute_external_script\n @language = N'Python',\n @script = N'\nimport numpy\nimport pickle\nfrom sklearn.linear_model import LogisticRegression\n\n##Create SciKit-Learn logistic regression model\nX = InputDataSet[[\"passenger_count\", \"trip_distance\", \"trip_time_in_secs\", \"direct_distance\"]]\ny = numpy.ravel(InputDataSet[[\"tipped\"]])\n\nSKLalgo = LogisticRegression()\nlogitObj = SKLalgo.fit(X, y)\n\n##Serialize model\ntrained_model = pickle.dumps(logitObj)\n',\n@input_data_1 = N'\nselect tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, \ndbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance\nfrom nyctaxi_sample_training\n',\n@input_data_1_name = N'InputDataSet',\n@params = N'@trained_model varbinary(max) OUTPUT',\n@trained_model = @trained_model OUTPUT;\n;\nEND;\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0745870" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0874570" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0890390" + }, + "metadata": {} + } + ], + "execution_count": 19 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO \n\n/* \nVersioning:\n\nALTER TABLE dbo.nyc_taxi_models\nADD ModelVersion DATETIME;\nGO\n*/\n\nSELECT * FROM [NYC].[dbo].[nyc_taxi_models]\nTRUNCATE TABLE [NYC].[dbo].[nyc_taxi_models]\n\n/* Store the models. You could version, tag, or stamp here if you want */\nDECLARE @model VARBINARY(MAX)\nEXEC PyTrainScikit @model OUTPUT\nINSERT INTO nyc_taxi_models (name, model, ModelVersion) VALUES('SciKit_model', @model, GETDATE());\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0744610" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(3 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(1 row affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:22.5621200" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 26, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "model" + }, + { + "name": "name" + }, + { + "name": "ModelVersion" + } + ] + }, + "data": [ + { + "0": "0x800363736B6C6561726E2E6C696E6561725F6D6F64656C2E6C6F6769737469630A4C6F67697374696352656772657373696F6E0A7100298171017D71022858100000005F736B6C6561726E5F76657273696F6E71035806000000302E31382E3171045806000000736F6C766572710558090000006C69626C696E6561727106580B0000006D756C74695F636C617373710758030000006F76727108580C00000072616E646F6D5F737461746571094E58070000006E5F697465725F710A636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A710B636E756D70790A6E6461727261790A710C4B0085710D430162710E87710F527110284B014B01857111636E756D70790A64747970650A71125802000000693471134B004B01877114527115284B0358010000003C71164E4E4E4AFFFFFFFF4AFFFFFFFF4B007471176289430417000000711874711962580C000000636C6173735F776569676874711A4E5808000000636C61737365735F711B680B680C4B0085711C680E87711D52711E284B014B0285711F68158943080000000001000000712074712162580A000000696E746572636570745F7122680B680C4B00857123680E877124527125284B014B0185712668125802000000663871274B004B01877128527129284B0368164E4E4E4AFFFFFFFF4AFFFFFFFF4B0074712A62894308831B1D5A762EA13F712B74712C62580100000043712D473FF0000000000000580D0000006669745F696E74657263657074712E885803000000746F6C712F473F1A36E2EB1C432D58080000006D61785F6974657271304B64580A0000007761726D5F737461727471318958060000006E5F6A6F627371324B01580700000070656E616C7479713358020000006C32713458040000006475616C7135895805000000636F65665F7136680B680C4B00857137680E877138527139284B014B014B0486713A6829894320F2E8A75D3203A1BF53E4B0B17AA8A53F2F7F8DC9FED582BEB8A81FEDEB68123F713B74713C625807000000766572626F7365713D4B005811000000696E746572636570745F7363616C696E67713E4B0175622E", + "1": "SciKit_model", + "2": "2019-04-09 18:45:51.413" + }, + { + "0": "0x800363736B6C6561726E2E6C696E6561725F6D6F64656C2E6C6F6769737469630A4C6F67697374696352656772657373696F6E0A7100298171017D71022858040000006475616C710389580700000070656E616C7479710458020000006C3271055803000000746F6C7106473F1A36E2EB1C432D5801000000437107473FF0000000000000580D0000006669745F696E74657263657074710888580C00000072616E646F6D5F737461746571094E58060000006E5F6A6F6273710A4B01580A000000696E746572636570745F710B636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A710C636E756D70790A6E6461727261790A710D4B0085710E430162710F877110527111284B014B01857112636E756D70790A64747970650A71135802000000663871144B004B01877115527116284B0358010000003C71174E4E4E4AFFFFFFFF4AFFFFFFFF4B0074711862894308831B1D5A762EA13F711974711A62580C000000636C6173735F776569676874711B4E5807000000766572626F7365711C4B0058100000005F736B6C6561726E5F76657273696F6E711D5806000000302E31382E31711E5806000000736F6C766572711F58090000006C69626C696E6561727120580A0000007761726D5F7374617274712189580B0000006D756C74695F636C617373712258030000006F767271235805000000636F65665F7124680C680D4B00857125680F877126527127284B014B014B048671286816894320F2E8A75D3203A1BF53E4B0B17AA8A53F2F7F8DC9FED582BEB8A81FEDEB68123F712974712A625811000000696E746572636570745F7363616C696E67712B4B015808000000636C61737365735F712C680C680D4B0085712D680F87712E52712F284B014B0285713068135802000000693471314B004B01877132527133284B0368174E4E4E4AFFFFFFFF4AFFFFFFFF4B0074713462894308000000000100000071357471366258080000006D61785F6974657271374B6458070000006E5F697465725F7138680C680D4B00857139680F87713A52713B284B014B0185713C683389430417000000713D74713E6275622E", + "1": "SciKit_model", + "2": "2019-04-09 18:46:25.957" + }, + { + "0": "0x8003637265766F7363616C6570792E66756E6374696F6E732E52784C6F6769740A52784C6F676974526573756C74730A7100298171017D71022858100000005F636F6D707574655F636F6E746578747103637265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365710A52784C6F63616C5365710A7104298171057D710628580C0000005F6465736372697074696F6E710758080000004C6F63616C5365717108580D0000005F6175746F5F636C65616E757071098858090000005F72656D6F74654964710A4AFFFFFFFF58030000005F6964710B58200000006430386562656134356166373131653961643038386532623163363166303164710C580F0000005F636F6E736F6C655F6F7574707574710D8958080000005F76657273696F6E710E5805000000312E302D31710F756258080000005F666F726D756C617110584E000000746970706564207E2070617373656E6765725F636F756E74202B20747269705F64697374616E6365202B20747269705F74696D655F696E5F73656373202B206469726563745F64697374616E63657111580B0000005F6D6F64656C5F747970657112580700000072784C6F676974711358070000005F706172616D7371147D711528580D000000626C6F636B735065725265616471164B01581A0000004F626A65637469766546756E6374696F6E546F6C6572616E63657117473E45798EE2308C3A580F0000004375626550726564696374696F6E737118895803000000746D707119586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F39383244313944342D303537332D344444342D424244412D463042324136433334453834711A580D0000002E2E7278446174614672616D65711B4E5806000000766172546F6C711C473D719799812DEA11580B0000007573657250726F66696C65711D586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F39383244313944342D303537332D344444342D424244412D463042324136433334453834711E580C0000005265706F727454696D696E67711F4B015807000000636F7644617461712089580D0000007472616E73666F726D46756E6371214E580A0000007472616E73666F726D7371224E58110000007472616E73666F726D5061636B6167657371234E58050000005072696E747124895807000000566572626F736571254B00580D0000004D6178497465726174696F6E7371264B19580800000064726F704D61696E7127885807000000636F76436F6566712889580E00000053686F77497465726174696F6E73712989580800000072436F6E64546F6C712A473D06849B86A12B9B58080000007265616456617273712B5D712C285806000000746970706564712D580B000000666172655F616D6F756E74712E580F00000070617373656E6765725F636F756E74712F5811000000747269705F74696D655F696E5F736563737130580D000000747269705F64697374616E63657131580F0000006469726563745F64697374616E6365713265580E00000072656D6F76654D697373696E67737133885807000000466F726D756C61713468115806000000466164644350713563636F6C6C656374696F6E730A4F726465726564446963740A713629527137580F00000062436F6D707574654C6F774869676871388873580400000074656D707139586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F39383244313944342D303537332D344444342D424244412D463042324136433334453834713A581500000062557365725365744D6178497465726174696F6E73713B8958110000004772616469656E74546F6C6572616E6365713C473EB0C6F7A0B5ED8D581600000053686F7744657461696C6564497465726174696F6E73713D89580900000064726F704669727374713E8958100000007472616E73666F726D4F626A65637473713F4E580E000000436F656666546F6C6572616E63657140473EB0C6F7A0B5ED8D580D0000007472616E73666F726D5661727371414E580E0000005265706F727450726F6772657373714288580400000043756265714389580E000000696E697469616C5F76616C75657371444E580C000000726F7753656C656374696F6E71454E7558050000005F63616C6C714658D502000072785F6C6F67697428666F726D756C61203D203C636C6173732027737472273E2C2064617461203D203C636C617373202770616E6461732E636F72652E6672616D652E446174614672616D65273E2C207077656967687473203D204E6F6E652C206677656967687473203D204E6F6E652C2063756265203D2046616C73652C20637562655F70726564696374696F6E73203D2046616C73652C207661726961626C655F73656C656374696F6E203D204E6F6E652C20726F775F73656C656374696F6E203D204E6F6E652C207472616E73666F726D73203D204E6F6E652C207472616E73666F726D5F6F626A65637473203D204E6F6E652C207472616E73666F726D5F66756E6374696F6E203D204E6F6E652C207472616E73666F726D5F7661726961626C6573203D204E6F6E652C207472616E73666F726D5F7061636B61676573203D204E6F6E652C2064726F705F6669727374203D2046616C73652C2064726F705F6D61696E203D20547275652C20636F765F636F6566203D2046616C73652C20636F765F64617461203D2046616C73652C20696E697469616C5F76616C756573203D204E6F6E652C20636F65665F6C6162656C5F7374796C65203D20275265766F272C20626C6F636B735F7065725F72656164203D20312C206D61785F697465726174696F6E73203D204E6F6E652C20636F6566666963656E745F746F6C6572616E6365203D2031652D30362C206772616469656E745F746F6C6572616E6365203D2031652D30362C206F626A6563746976655F66756E6374696F6E5F746F6C6572616E6365203D2031652D30382C207265706F72745F70726F6772657373203D204E6F6E652C20766572626F7365203D20302C20636F6D707574655F636F6E74657874203D203C7265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365712E52784C6F63616C536571206F626A6563742061742030783766393733306364666639383E29714758080000005F726573756C7473714868362952714928580C000000636F656666696369656E7473714A636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A714B636E756D70790A6E6461727261790A714C4B0085714D430162714E87714F527150284B014B05857151636E756D70790A64747970650A71525802000000663871534B004B01877154527155284B0358010000003C71564E4E4E4AFFFFFFFF4AFFFFFFFF4B0074715762894328380FF8D37B2EA13FD65050463903A1BF320BD7AC7FA8A53FE1F5362002D682BE1DF55358EE68123F7158747159625810000000726573696475616C2E73717561726573715A684B684C4B0085715B684E87715C52715D284B014B0085715E6855894300715F747160625810000000636F6E646974696F6E2E6E756D6265727161473FE8CEAE17BF5EFE580400000072616E6B71624B055807000000616C69617365647163684B684C4B00857164684E877165527166284B014B0085716768525802000000693471684B004B0187716952716A284B0368564E4E4E4AFFFFFFFF4AFFFFFFFF4B0074716B6289685F74716C62580E000000636F65662E7374642E6572726F72716D684B684C4B0085716E684E87716F527170284B014B0585717168558943287C166987CC576D3F9CB99DEB8B7F573F53150E094630443F67BAA3309D7B7B3E83FD0D7EEF00163F717274717362580C000000636F65662E742E76616C75657174684B684C4B00857175684E877176527177284B014B05857178685589432807BA1359C5BC2240521FE1E5F62A37C0E3CD5C3A2B2A51409DE677E78FEEF5BF65813FAE08C6EA3F717974717A62580C000000636F65662E702E76616C7565717B684B684C4B0085717C684E87717D52717E284B014B0585717F6855894328000000000000B03C000000000000B03C000000000000B03CC851D9A879D1C53FD0D1972914C7D93F718074718162580D000000746F74616C2E73717561726573718247412FA0E4C82F72F65805000000792E7661727183684B684C4B00857184684E877185527186284B014B00857187685589685F7471886258050000007369676D617189684B684C4B0085718A684E87718B52718C284B014B0085718D685589685F74718E625811000000726573696475616C2E76617269616E6365718F684B684C4B00857190684E877191527192284B014B00857193685589685F747194625809000000722E737175617265647195684B684C4B00857196684E877197527198284B014B00857199685589685F74719A625807000000662E76616C7565719B684B684C4B0085719C684E87719D52719E284B014B0085719F685589685F7471A0625808000000662E7076616C756571A1684B684C4B008571A2684E8771A35271A4284B014B008571A5685589685F7471A6625807000000662E6E756D646671A747FFFFFFFFFFFFFFFF5802000000646671A847412F4D1E000000005807000000792E6E616D657371A9580600000074697070656471AA580A000000636F65662E6E616D657371AB5D71AC28580B00000028496E746572636570742971AD580F00000070617373656E6765725F636F756E7471AE580D000000747269705F64697374616E636571AF5811000000747269705F74696D655F696E5F7365637371B0580F0000006469726563745F64697374616E636571B1655807000000786C6576656C7371B2637265766F7363616C6570792E527853657269616C697A61626C650A446174614672616D65446963740A71B3298171B4580C000000636F762E756E7363616C656471B5684B684C4B008571B6684E8771B75271B8284B014B008571B9685589685F7471BA62580A000000706172746974696F6E7371BB6836295271BC580A000000706172746974696F6E7371BD68B3298171BE73580900000076616C69642E6F627371BF47412F4D2800000000580B0000006D697373696E672E6F627371C0470000000000000000580800000064657669616E636571C1474135935E3F58A10A580300000061696371C247413593683F58A10A580A00000064697370657273696F6E71C3473FF0000000000000580A000000697465726174696F6E7371C44B09757D71C558080000007661725F696E666F71C67D71C728580C000000636F65662E742E76616C756571C87D71C92858070000005661725479706571CA5D71CB285807000000666C6F6174363471CC5806000000446F75626C6571CD65580A0000002E72784C6F774869676871CE684B684C4B008571CF684E8771D05271D1284B014B028571D26855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71D37471D462755808000000662E7076616C756571D57D71D62858070000005661725479706571D75D71D8285807000000666C6F6174363471D95806000000446F75626C6571DA65580A0000002E72784C6F774869676871DB684B684C4B008571DC684E8771DD5271DE284B014B028571DF6855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71E07471E162755811000000726573696475616C2E76617269616E636571E27D71E32858070000005661725479706571E45D71E5285807000000666C6F6174363471E65806000000446F75626C6571E765580A0000002E72784C6F774869676871E8684B684C4B008571E9684E8771EA5271EB284B014B028571EC6855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71ED7471EE6275580300000061696371EF7D71F02858070000005661725479706571F15D71F2285807000000666C6F6174363471F35806000000446F75626C6571F465580A0000002E72784C6F774869676871F5684B684C4B008571F6684E8771F75271F8284B014B028571F96855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71FA7471FB6275580C000000636F65662E702E76616C756571FC7D71FD2858070000005661725479706571FE5D71FF285807000000666C6F6174363472000100005806000000446F75626C65720101000065580A0000002E72784C6F77486967687202010000684B684C4B00857203010000684E877204010000527205010000284B014B028572060100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF720701000074720801000062755807000000662E76616C756572090100007D720A01000028580700000056617254797065720B0100005D720C010000285807000000666C6F61743634720D0100005806000000446F75626C65720E01000065580A0000002E72784C6F7748696768720F010000684B684C4B00857210010000684E877211010000527212010000284B014B028572130100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72140100007472150100006275580E000000636F65662E7374642E6572726F7272160100007D72170100002858070000005661725479706572180100005D7219010000285807000000666C6F61743634721A0100005806000000446F75626C65721B01000065580A0000002E72784C6F7748696768721C010000684B684C4B0085721D010000684E87721E01000052721F010000284B014B028572200100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722101000074722201000062755809000000722E7371756172656472230100007D72240100002858070000005661725479706572250100005D7226010000285807000000666C6F6174363472270100005806000000446F75626C65722801000065580A0000002E72784C6F77486967687229010000684B684C4B0085722A010000684E87722B01000052722C010000284B014B0285722D0100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722E01000074722F010000627558050000007369676D6172300100007D72310100002858070000005661725479706572320100005D7233010000285807000000666C6F6174363472340100005806000000446F75626C65723501000065580A0000002E72784C6F77486967687236010000684B684C4B00857237010000684E877238010000527239010000284B014B0285723A0100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF723B01000074723C01000062755805000000792E766172723D0100007D723E01000028580700000056617254797065723F0100005D7240010000285807000000666C6F6174363472410100005806000000446F75626C65724201000065580A0000002E72784C6F77486967687243010000684B684C4B00857244010000684E877245010000527246010000284B014B028572470100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72480100007472490100006275580D000000746F74616C2E73717561726573724A0100007D724B01000028580700000056617254797065724C0100005D724D010000285807000000666C6F61743634724E0100005806000000446F75626C65724F01000065580A0000002E72784C6F77486967687250010000684B684C4B00857251010000684E877252010000527253010000284B014B028572540100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF725501000074725601000062755810000000726573696475616C2E7371756172657372570100007D72580100002858070000005661725479706572590100005D725A010000285807000000666C6F61743634725B0100005806000000446F75626C65725C01000065580A0000002E72784C6F7748696768725D010000684B684C4B0085725E010000684E87725F010000527260010000284B014B028572610100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7262010000747263010000627575736258050000005F6461746172640100004E75622E", + "1": "revoscalepy_model", + "2": "2019-04-09 18:46:57.017" + } + ] + }, + "text/html": "
modelnameModelVersion
0x800363736B6C6561726E2E6C696E6561725F6D6F64656C2E6C6F6769737469630A4C6F67697374696352656772657373696F6E0A7100298171017D71022858100000005F736B6C6561726E5F76657273696F6E71035806000000302E31382E3171045806000000736F6C766572710558090000006C69626C696E6561727106580B0000006D756C74695F636C617373710758030000006F76727108580C00000072616E646F6D5F737461746571094E58070000006E5F697465725F710A636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A710B636E756D70790A6E6461727261790A710C4B0085710D430162710E87710F527110284B014B01857111636E756D70790A64747970650A71125802000000693471134B004B01877114527115284B0358010000003C71164E4E4E4AFFFFFFFF4AFFFFFFFF4B007471176289430417000000711874711962580C000000636C6173735F776569676874711A4E5808000000636C61737365735F711B680B680C4B0085711C680E87711D52711E284B014B0285711F68158943080000000001000000712074712162580A000000696E746572636570745F7122680B680C4B00857123680E877124527125284B014B0185712668125802000000663871274B004B01877128527129284B0368164E4E4E4AFFFFFFFF4AFFFFFFFF4B0074712A62894308831B1D5A762EA13F712B74712C62580100000043712D473FF0000000000000580D0000006669745F696E74657263657074712E885803000000746F6C712F473F1A36E2EB1C432D58080000006D61785F6974657271304B64580A0000007761726D5F737461727471318958060000006E5F6A6F627371324B01580700000070656E616C7479713358020000006C32713458040000006475616C7135895805000000636F65665F7136680B680C4B00857137680E877138527139284B014B014B0486713A6829894320F2E8A75D3203A1BF53E4B0B17AA8A53F2F7F8DC9FED582BEB8A81FEDEB68123F713B74713C625807000000766572626F7365713D4B005811000000696E746572636570745F7363616C696E67713E4B0175622ESciKit_model2019-04-09 18:45:51.413
0x800363736B6C6561726E2E6C696E6561725F6D6F64656C2E6C6F6769737469630A4C6F67697374696352656772657373696F6E0A7100298171017D71022858040000006475616C710389580700000070656E616C7479710458020000006C3271055803000000746F6C7106473F1A36E2EB1C432D5801000000437107473FF0000000000000580D0000006669745F696E74657263657074710888580C00000072616E646F6D5F737461746571094E58060000006E5F6A6F6273710A4B01580A000000696E746572636570745F710B636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A710C636E756D70790A6E6461727261790A710D4B0085710E430162710F877110527111284B014B01857112636E756D70790A64747970650A71135802000000663871144B004B01877115527116284B0358010000003C71174E4E4E4AFFFFFFFF4AFFFFFFFF4B0074711862894308831B1D5A762EA13F711974711A62580C000000636C6173735F776569676874711B4E5807000000766572626F7365711C4B0058100000005F736B6C6561726E5F76657273696F6E711D5806000000302E31382E31711E5806000000736F6C766572711F58090000006C69626C696E6561727120580A0000007761726D5F7374617274712189580B0000006D756C74695F636C617373712258030000006F767271235805000000636F65665F7124680C680D4B00857125680F877126527127284B014B014B048671286816894320F2E8A75D3203A1BF53E4B0B17AA8A53F2F7F8DC9FED582BEB8A81FEDEB68123F712974712A625811000000696E746572636570745F7363616C696E67712B4B015808000000636C61737365735F712C680C680D4B0085712D680F87712E52712F284B014B0285713068135802000000693471314B004B01877132527133284B0368174E4E4E4AFFFFFFFF4AFFFFFFFF4B0074713462894308000000000100000071357471366258080000006D61785F6974657271374B6458070000006E5F697465725F7138680C680D4B00857139680F87713A52713B284B014B0185713C683389430417000000713D74713E6275622ESciKit_model2019-04-09 18:46:25.957
0x8003637265766F7363616C6570792E66756E6374696F6E732E52784C6F6769740A52784C6F676974526573756C74730A7100298171017D71022858100000005F636F6D707574655F636F6E746578747103637265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365710A52784C6F63616C5365710A7104298171057D710628580C0000005F6465736372697074696F6E710758080000004C6F63616C5365717108580D0000005F6175746F5F636C65616E757071098858090000005F72656D6F74654964710A4AFFFFFFFF58030000005F6964710B58200000006430386562656134356166373131653961643038386532623163363166303164710C580F0000005F636F6E736F6C655F6F7574707574710D8958080000005F76657273696F6E710E5805000000312E302D31710F756258080000005F666F726D756C617110584E000000746970706564207E2070617373656E6765725F636F756E74202B20747269705F64697374616E6365202B20747269705F74696D655F696E5F73656373202B206469726563745F64697374616E63657111580B0000005F6D6F64656C5F747970657112580700000072784C6F676974711358070000005F706172616D7371147D711528580D000000626C6F636B735065725265616471164B01581A0000004F626A65637469766546756E6374696F6E546F6C6572616E63657117473E45798EE2308C3A580F0000004375626550726564696374696F6E737118895803000000746D707119586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F39383244313944342D303537332D344444342D424244412D463042324136433334453834711A580D0000002E2E7278446174614672616D65711B4E5806000000766172546F6C711C473D719799812DEA11580B0000007573657250726F66696C65711D586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F39383244313944342D303537332D344444342D424244412D463042324136433334453834711E580C0000005265706F727454696D696E67711F4B015807000000636F7644617461712089580D0000007472616E73666F726D46756E6371214E580A0000007472616E73666F726D7371224E58110000007472616E73666F726D5061636B6167657371234E58050000005072696E747124895807000000566572626F736571254B00580D0000004D6178497465726174696F6E7371264B19580800000064726F704D61696E7127885807000000636F76436F6566712889580E00000053686F77497465726174696F6E73712989580800000072436F6E64546F6C712A473D06849B86A12B9B58080000007265616456617273712B5D712C285806000000746970706564712D580B000000666172655F616D6F756E74712E580F00000070617373656E6765725F636F756E74712F5811000000747269705F74696D655F696E5F736563737130580D000000747269705F64697374616E63657131580F0000006469726563745F64697374616E6365713265580E00000072656D6F76654D697373696E67737133885807000000466F726D756C61713468115806000000466164644350713563636F6C6C656374696F6E730A4F726465726564446963740A713629527137580F00000062436F6D707574654C6F774869676871388873580400000074656D707139586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F39383244313944342D303537332D344444342D424244412D463042324136433334453834713A581500000062557365725365744D6178497465726174696F6E73713B8958110000004772616469656E74546F6C6572616E6365713C473EB0C6F7A0B5ED8D581600000053686F7744657461696C6564497465726174696F6E73713D89580900000064726F704669727374713E8958100000007472616E73666F726D4F626A65637473713F4E580E000000436F656666546F6C6572616E63657140473EB0C6F7A0B5ED8D580D0000007472616E73666F726D5661727371414E580E0000005265706F727450726F6772657373714288580400000043756265714389580E000000696E697469616C5F76616C75657371444E580C000000726F7753656C656374696F6E71454E7558050000005F63616C6C714658D502000072785F6C6F67697428666F726D756C61203D203C636C6173732027737472273E2C2064617461203D203C636C617373202770616E6461732E636F72652E6672616D652E446174614672616D65273E2C207077656967687473203D204E6F6E652C206677656967687473203D204E6F6E652C2063756265203D2046616C73652C20637562655F70726564696374696F6E73203D2046616C73652C207661726961626C655F73656C656374696F6E203D204E6F6E652C20726F775F73656C656374696F6E203D204E6F6E652C207472616E73666F726D73203D204E6F6E652C207472616E73666F726D5F6F626A65637473203D204E6F6E652C207472616E73666F726D5F66756E6374696F6E203D204E6F6E652C207472616E73666F726D5F7661726961626C6573203D204E6F6E652C207472616E73666F726D5F7061636B61676573203D204E6F6E652C2064726F705F6669727374203D2046616C73652C2064726F705F6D61696E203D20547275652C20636F765F636F6566203D2046616C73652C20636F765F64617461203D2046616C73652C20696E697469616C5F76616C756573203D204E6F6E652C20636F65665F6C6162656C5F7374796C65203D20275265766F272C20626C6F636B735F7065725F72656164203D20312C206D61785F697465726174696F6E73203D204E6F6E652C20636F6566666963656E745F746F6C6572616E6365203D2031652D30362C206772616469656E745F746F6C6572616E6365203D2031652D30362C206F626A6563746976655F66756E6374696F6E5F746F6C6572616E6365203D2031652D30382C207265706F72745F70726F6772657373203D204E6F6E652C20766572626F7365203D20302C20636F6D707574655F636F6E74657874203D203C7265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365712E52784C6F63616C536571206F626A6563742061742030783766393733306364666639383E29714758080000005F726573756C7473714868362952714928580C000000636F656666696369656E7473714A636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A714B636E756D70790A6E6461727261790A714C4B0085714D430162714E87714F527150284B014B05857151636E756D70790A64747970650A71525802000000663871534B004B01877154527155284B0358010000003C71564E4E4E4AFFFFFFFF4AFFFFFFFF4B0074715762894328380FF8D37B2EA13FD65050463903A1BF320BD7AC7FA8A53FE1F5362002D682BE1DF55358EE68123F7158747159625810000000726573696475616C2E73717561726573715A684B684C4B0085715B684E87715C52715D284B014B0085715E6855894300715F747160625810000000636F6E646974696F6E2E6E756D6265727161473FE8CEAE17BF5EFE580400000072616E6B71624B055807000000616C69617365647163684B684C4B00857164684E877165527166284B014B0085716768525802000000693471684B004B0187716952716A284B0368564E4E4E4AFFFFFFFF4AFFFFFFFF4B0074716B6289685F74716C62580E000000636F65662E7374642E6572726F72716D684B684C4B0085716E684E87716F527170284B014B0585717168558943287C166987CC576D3F9CB99DEB8B7F573F53150E094630443F67BAA3309D7B7B3E83FD0D7EEF00163F717274717362580C000000636F65662E742E76616C75657174684B684C4B00857175684E877176527177284B014B05857178685589432807BA1359C5BC2240521FE1E5F62A37C0E3CD5C3A2B2A51409DE677E78FEEF5BF65813FAE08C6EA3F717974717A62580C000000636F65662E702E76616C7565717B684B684C4B0085717C684E87717D52717E284B014B0585717F6855894328000000000000B03C000000000000B03C000000000000B03CC851D9A879D1C53FD0D1972914C7D93F718074718162580D000000746F74616C2E73717561726573718247412FA0E4C82F72F65805000000792E7661727183684B684C4B00857184684E877185527186284B014B00857187685589685F7471886258050000007369676D617189684B684C4B0085718A684E87718B52718C284B014B0085718D685589685F74718E625811000000726573696475616C2E76617269616E6365718F684B684C4B00857190684E877191527192284B014B00857193685589685F747194625809000000722E737175617265647195684B684C4B00857196684E877197527198284B014B00857199685589685F74719A625807000000662E76616C7565719B684B684C4B0085719C684E87719D52719E284B014B0085719F685589685F7471A0625808000000662E7076616C756571A1684B684C4B008571A2684E8771A35271A4284B014B008571A5685589685F7471A6625807000000662E6E756D646671A747FFFFFFFFFFFFFFFF5802000000646671A847412F4D1E000000005807000000792E6E616D657371A9580600000074697070656471AA580A000000636F65662E6E616D657371AB5D71AC28580B00000028496E746572636570742971AD580F00000070617373656E6765725F636F756E7471AE580D000000747269705F64697374616E636571AF5811000000747269705F74696D655F696E5F7365637371B0580F0000006469726563745F64697374616E636571B1655807000000786C6576656C7371B2637265766F7363616C6570792E527853657269616C697A61626C650A446174614672616D65446963740A71B3298171B4580C000000636F762E756E7363616C656471B5684B684C4B008571B6684E8771B75271B8284B014B008571B9685589685F7471BA62580A000000706172746974696F6E7371BB6836295271BC580A000000706172746974696F6E7371BD68B3298171BE73580900000076616C69642E6F627371BF47412F4D2800000000580B0000006D697373696E672E6F627371C0470000000000000000580800000064657669616E636571C1474135935E3F58A10A580300000061696371C247413593683F58A10A580A00000064697370657273696F6E71C3473FF0000000000000580A000000697465726174696F6E7371C44B09757D71C558080000007661725F696E666F71C67D71C728580C000000636F65662E742E76616C756571C87D71C92858070000005661725479706571CA5D71CB285807000000666C6F6174363471CC5806000000446F75626C6571CD65580A0000002E72784C6F774869676871CE684B684C4B008571CF684E8771D05271D1284B014B028571D26855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71D37471D462755808000000662E7076616C756571D57D71D62858070000005661725479706571D75D71D8285807000000666C6F6174363471D95806000000446F75626C6571DA65580A0000002E72784C6F774869676871DB684B684C4B008571DC684E8771DD5271DE284B014B028571DF6855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71E07471E162755811000000726573696475616C2E76617269616E636571E27D71E32858070000005661725479706571E45D71E5285807000000666C6F6174363471E65806000000446F75626C6571E765580A0000002E72784C6F774869676871E8684B684C4B008571E9684E8771EA5271EB284B014B028571EC6855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71ED7471EE6275580300000061696371EF7D71F02858070000005661725479706571F15D71F2285807000000666C6F6174363471F35806000000446F75626C6571F465580A0000002E72784C6F774869676871F5684B684C4B008571F6684E8771F75271F8284B014B028571F96855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71FA7471FB6275580C000000636F65662E702E76616C756571FC7D71FD2858070000005661725479706571FE5D71FF285807000000666C6F6174363472000100005806000000446F75626C65720101000065580A0000002E72784C6F77486967687202010000684B684C4B00857203010000684E877204010000527205010000284B014B028572060100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF720701000074720801000062755807000000662E76616C756572090100007D720A01000028580700000056617254797065720B0100005D720C010000285807000000666C6F61743634720D0100005806000000446F75626C65720E01000065580A0000002E72784C6F7748696768720F010000684B684C4B00857210010000684E877211010000527212010000284B014B028572130100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72140100007472150100006275580E000000636F65662E7374642E6572726F7272160100007D72170100002858070000005661725479706572180100005D7219010000285807000000666C6F61743634721A0100005806000000446F75626C65721B01000065580A0000002E72784C6F7748696768721C010000684B684C4B0085721D010000684E87721E01000052721F010000284B014B028572200100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722101000074722201000062755809000000722E7371756172656472230100007D72240100002858070000005661725479706572250100005D7226010000285807000000666C6F6174363472270100005806000000446F75626C65722801000065580A0000002E72784C6F77486967687229010000684B684C4B0085722A010000684E87722B01000052722C010000284B014B0285722D0100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722E01000074722F010000627558050000007369676D6172300100007D72310100002858070000005661725479706572320100005D7233010000285807000000666C6F6174363472340100005806000000446F75626C65723501000065580A0000002E72784C6F77486967687236010000684B684C4B00857237010000684E877238010000527239010000284B014B0285723A0100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF723B01000074723C01000062755805000000792E766172723D0100007D723E01000028580700000056617254797065723F0100005D7240010000285807000000666C6F6174363472410100005806000000446F75626C65724201000065580A0000002E72784C6F77486967687243010000684B684C4B00857244010000684E877245010000527246010000284B014B028572470100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72480100007472490100006275580D000000746F74616C2E73717561726573724A0100007D724B01000028580700000056617254797065724C0100005D724D010000285807000000666C6F61743634724E0100005806000000446F75626C65724F01000065580A0000002E72784C6F77486967687250010000684B684C4B00857251010000684E877252010000527253010000284B014B028572540100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF725501000074725601000062755810000000726573696475616C2E7371756172657372570100007D72580100002858070000005661725479706572590100005D725A010000285807000000666C6F61743634725B0100005806000000446F75626C65725C01000065580A0000002E72784C6F7748696768725D010000684B684C4B0085725E010000684E87725F010000527260010000284B014B028572610100006855894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7262010000747263010000627575736258050000005F6461746172640100004E75622Erevoscalepy_model2019-04-09 18:46:57.017
" + }, + "metadata": {} + } + ], + "execution_count": 26 + }, + { + "cell_type": "code", + "source": "/* Train using RevoScalePy */\nUSE NYC;\nGO\n\nDROP PROCEDURE IF EXISTS TrainTipPredictionModelRxPy;\nGO\n\nCREATE PROCEDURE [dbo].[TrainTipPredictionModelRxPy] (@trained_model varbinary(max) OUTPUT)\nAS\nBEGIN\nEXEC sp_execute_external_script \n @language = N'Python',\n @script = N'\nimport numpy\nimport pickle\nfrom revoscalepy.functions.RxLogit import rx_logit\n\n## Create a logistic regression model using rx_logit function from revoscalepy package\nlogitObj = rx_logit(\"tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance\", data = InputDataSet);\n\n## Serialize model\ntrained_model = pickle.dumps(logitObj)\n',\n@input_data_1 = N'\nselect tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, \ndbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance\nfrom nyctaxi_sample_training\n',\n@input_data_1_name = N'InputDataSet',\n@params = N'@trained_model varbinary(max) OUTPUT',\n@trained_model = @trained_model OUTPUT;\n;\nEND;\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0741140" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0736050" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.1079610" + }, + "metadata": {} + } + ], + "execution_count": 10 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO\n\n/* Now save that model out */\nDECLARE @model VARBINARY(MAX);\nEXEC TrainTipPredictionModelRxPy @model OUTPUT;\nINSERT INTO nyc_taxi_models (name, model, ModelVersion) VALUES('revoscalepy_model', @model, GETDATE());\nGO\n\nSELECT * FROM [NYC].[dbo].[nyc_taxi_models]\n", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0761130" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "STDOUT message(s) from external script: \nRows Read: 1025684, Total Rows Processed: 1025684, Total Chunk Time: 0.027 seconds \n\nStarting values (iteration 1) time: 0.035 secs.\nRows Read: 1025684, Total Rows Processed: 1025684, Total Chunk Time: 0.064 seconds \n\nIteration 2 time: 0.072 secs.\nRows Read: 1025684, Total Rows Processed: 1025684, Total Chunk Time: 0.063 seconds \n\nIteration 3 time: 0.069 secs.\nRows Read: 1025684, Total Rows Processed: 1025684, Total Chunk Time: 0.062 seconds \n\nIteration 4 time: 0.069 secs.\nRows Read: 1025684, Total Rows Processed: 1025684, Total Chunk Time: 0.060 seconds \n\nIteration 5 time: 0.066 secs.\nRows Read: 1025684, Total Rows Processed: 1025684\n Warning: One or more fitted probabilities were numerically 0 or 1 during estimation.\n, Total Chunk Time: 0.068 seconds \n\nIteration 6 time: 0.075 secs.\nRows Read: 1025684, Total Rows Processed: 1025684, Total Chunk Time: 0.063 seconds \n\nIteration 7 time: 0.070 secs.\nRows Read: 1025684, Total Rows Processed: 1025684" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "STDOUT message(s) from external script: \n Warning: One or more fitted probabilities were numerically 0 or 1 during estimation. (similar message repeated 3 times)\n, Total Chunk Time: 0.064 seconds \n\nIteration 8 time: 0.071 secs.\nRows Read: 1025684, Total Rows Processed: 1025684, Total Chunk Time: 0.069 seconds \n\nIteration 9 time: 0.075 secs.\n\nElapsed computation time: 0.604 secs.\n\n\n Warning: One or more fitted probabilities were numerically 0 or 1 during estimation. (similar message repeated 4 times)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(1 row affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:17.3353210" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(2 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0761580" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 27, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "model" + }, + { + "name": "name" + }, + { + "name": "ModelVersion" + } + ] + }, + "data": [ + { + "0": "0x800363736B6C6561726E2E6C696E6561725F6D6F64656C2E6C6F6769737469630A4C6F67697374696352656772657373696F6E0A7100298171017D71022858040000006475616C71038958080000006D61785F6974657271044B64580A000000696E746572636570745F7105636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A7106636E756D70790A6E6461727261790A71074B00857108430162710987710A52710B284B014B0185710C636E756D70790A64747970650A710D58020000006638710E4B004B0187710F527110284B0358010000003C71114E4E4E4AFFFFFFFF4AFFFFFFFF4B0074711262894308831B1D5A762EA13F711374711462580A0000007761726D5F7374617274711589580C00000072616E646F6D5F737461746571164E580C000000636C6173735F77656967687471174E5807000000766572626F736571184B0058070000006E5F697465725F7119680668074B0085711A680987711B52711C284B014B0185711D680D58020000006934711E4B004B0187711F527120284B0368114E4E4E4AFFFFFFFF4AFFFFFFFF4B007471216289430417000000712274712362580D0000006669745F696E746572636570747124885803000000746F6C7125473F1A36E2EB1C432D5808000000636C61737365735F7126680668074B008571276809877128527129284B014B0285712A68208943080000000001000000712B74712C625811000000696E746572636570745F7363616C696E67712D4B015806000000736F6C766572712E58090000006C69626C696E656172712F5805000000636F65665F7130680668074B008571316809877132527133284B014B014B048671346810894320F2E8A75D3203A1BF53E4B0B17AA8A53F2F7F8DC9FED582BEB8A81FEDEB68123F713574713662580B0000006D756C74695F636C617373713758030000006F76727138580700000070656E616C7479713958020000006C32713A58060000006E5F6A6F6273713B4B01580100000043713C473FF000000000000058100000005F736B6C6561726E5F76657273696F6E713D5806000000302E31382E31713E75622E", + "1": "SciKit_model", + "2": "2019-04-09 18:49:24.260" + }, + { + "0": "0x8003637265766F7363616C6570792E66756E6374696F6E732E52784C6F6769740A52784C6F676974526573756C74730A7100298171017D71022858070000005F706172616D7371037D710428580B0000007573657250726F66696C657105586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F34423643314141442D393041422D343344352D383339372D3931424635374646413442307106580E00000053686F77497465726174696F6E73710789581600000053686F7744657461696C6564497465726174696F6E73710889580D0000007472616E73666F726D5661727371094E581A0000004F626A65637469766546756E6374696F6E546F6C6572616E6365710A473E45798EE2308C3A580F0000004375626550726564696374696F6E73710B895803000000746D70710C586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F34423643314141442D393041422D343344352D383339372D393142463537464641344230710D5807000000566572626F7365710E4B00580800000072436F6E64546F6C710F473D06849B86A12B9B5807000000466F726D756C617110584E000000746970706564207E2070617373656E6765725F636F756E74202B20747269705F64697374616E6365202B20747269705F74696D655F696E5F73656373202B206469726563745F64697374616E63657111580800000064726F704D61696E7112885807000000636F7644617461711389580E000000696E697469616C5F76616C75657371144E580E000000436F656666546F6C6572616E63657115473EB0C6F7A0B5ED8D58100000007472616E73666F726D4F626A6563747371164E580D0000004D6178497465726174696F6E7371174B19580D0000002E2E7278446174614672616D6571184E580C000000726F7753656C656374696F6E71194E580D0000007472616E73666F726D46756E63711A4E5807000000636F76436F6566711B8958110000004772616469656E74546F6C6572616E6365711C473EB0C6F7A0B5ED8D580900000064726F704669727374711D89580E0000005265706F727450726F6772657373711E88580E00000072656D6F76654D697373696E6773711F885808000000726561645661727371205D71212858060000007469707065647122580B000000666172655F616D6F756E747123580F00000070617373656E6765725F636F756E7471245811000000747269705F74696D655F696E5F736563737125580D000000747269705F64697374616E63657126580F0000006469726563745F64697374616E6365712765581500000062557365725365744D6178497465726174696F6E737128895806000000766172546F6C7129473D719799812DEA115806000000466164644350712A63636F6C6C656374696F6E730A4F726465726564446963740A712B2952712C580F00000062436F6D707574654C6F7748696768712D887358050000005072696E74712E89580C0000005265706F727454696D696E67712F4B0158040000004375626571308958110000007472616E73666F726D5061636B6167657371314E580A0000007472616E73666F726D7371324E580400000074656D707133586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F34423643314141442D393041422D343344352D383339372D3931424635374646413442307134580D000000626C6F636B735065725265616471354B017558080000005F666F726D756C617136681158050000005F6461746171374E58050000005F63616C6C713858D502000072785F6C6F67697428666F726D756C61203D203C636C6173732027737472273E2C2064617461203D203C636C617373202770616E6461732E636F72652E6672616D652E446174614672616D65273E2C207077656967687473203D204E6F6E652C206677656967687473203D204E6F6E652C2063756265203D2046616C73652C20637562655F70726564696374696F6E73203D2046616C73652C207661726961626C655F73656C656374696F6E203D204E6F6E652C20726F775F73656C656374696F6E203D204E6F6E652C207472616E73666F726D73203D204E6F6E652C207472616E73666F726D5F6F626A65637473203D204E6F6E652C207472616E73666F726D5F66756E6374696F6E203D204E6F6E652C207472616E73666F726D5F7661726961626C6573203D204E6F6E652C207472616E73666F726D5F7061636B61676573203D204E6F6E652C2064726F705F6669727374203D2046616C73652C2064726F705F6D61696E203D20547275652C20636F765F636F6566203D2046616C73652C20636F765F64617461203D2046616C73652C20696E697469616C5F76616C756573203D204E6F6E652C20636F65665F6C6162656C5F7374796C65203D20275265766F272C20626C6F636B735F7065725F72656164203D20312C206D61785F697465726174696F6E73203D204E6F6E652C20636F6566666963656E745F746F6C6572616E6365203D2031652D30362C206772616469656E745F746F6C6572616E6365203D2031652D30362C206F626A6563746976655F66756E6374696F6E5F746F6C6572616E6365203D2031652D30382C207265706F72745F70726F6772657373203D204E6F6E652C20766572626F7365203D20302C20636F6D707574655F636F6E74657874203D203C7265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365712E52784C6F63616C536571206F626A6563742061742030783766636436656661636639383E29713958080000005F726573756C7473713A682B2952713B28580C000000636F656666696369656E7473713C636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A713D636E756D70790A6E6461727261790A713E4B0085713F4301627140877141527142284B014B05857143636E756D70790A64747970650A71445802000000663871454B004B01877146527147284B0358010000003C71484E4E4E4AFFFFFFFF4AFFFFFFFF4B0074714962894328380FF8D37B2EA13FD65050463903A1BF320BD7AC7FA8A53FE1F5362002D682BE1DF55358EE68123F714A74714B625810000000726573696475616C2E73717561726573714C683D683E4B0085714D684087714E52714F284B014B0085715068478943007151747152625810000000636F6E646974696F6E2E6E756D6265727153473FE8CEAE17BF5EFE580400000072616E6B71544B055807000000616C69617365647155683D683E4B008571566840877157527158284B014B00857159684458020000006934715A4B004B0187715B52715C284B0368484E4E4E4AFFFFFFFF4AFFFFFFFF4B0074715D6289685174715E62580E000000636F65662E7374642E6572726F72715F683D683E4B008571606840877161527162284B014B0585716368478943287C166987CC576D3F9CB99DEB8B7F573F53150E094630443F67BAA3309D7B7B3E83FD0D7EEF00163F716474716562580C000000636F65662E742E76616C75657166683D683E4B008571676840877168527169284B014B0585716A684789432807BA1359C5BC2240521FE1E5F62A37C0E3CD5C3A2B2A51409DE677E78FEEF5BF65813FAE08C6EA3F716B74716C62580C000000636F65662E702E76616C7565716D683D683E4B0085716E684087716F527170284B014B058571716847894328000000000000B03C000000000000B03C000000000000B03CC851D9A879D1C53FD0D1972914C7D93F717274717362580D000000746F74616C2E73717561726573717447412FA0E4C82F72F65805000000792E7661727175683D683E4B008571766840877177527178284B014B00857179684789685174717A6258050000007369676D61717B683D683E4B0085717C684087717D52717E284B014B0085717F6847896851747180625811000000726573696475616C2E76617269616E63657181683D683E4B008571826840877183527184284B014B008571856847896851747186625809000000722E737175617265647187683D683E4B00857188684087718952718A284B014B0085718B684789685174718C625807000000662E76616C7565718D683D683E4B0085718E684087718F527190284B014B008571916847896851747192625808000000662E7076616C75657193683D683E4B008571946840877195527196284B014B008571976847896851747198625807000000662E6E756D6466719947FFFFFFFFFFFFFFFF58020000006466719A47412F4D1E000000005807000000792E6E616D6573719B5806000000746970706564719C580A000000636F65662E6E616D6573719D5D719E28580B00000028496E7465726365707429719F580F00000070617373656E6765725F636F756E7471A0580D000000747269705F64697374616E636571A15811000000747269705F74696D655F696E5F7365637371A2580F0000006469726563745F64697374616E636571A3655807000000786C6576656C7371A4637265766F7363616C6570792E527853657269616C697A61626C650A446174614672616D65446963740A71A5298171A6580C000000636F762E756E7363616C656471A7683D683E4B008571A868408771A95271AA284B014B008571AB68478968517471AC62580A000000706172746974696F6E7371AD682B295271AE580A000000706172746974696F6E7371AF68A5298171B073580900000076616C69642E6F627371B147412F4D2800000000580B0000006D697373696E672E6F627371B2470000000000000000580800000064657669616E636571B3474135935E3F58A10A580300000061696371B447413593683F58A10A580A00000064697370657273696F6E71B5473FF0000000000000580A000000697465726174696F6E7371B64B09757D71B758080000007661725F696E666F71B87D71B928580C000000636F65662E702E76616C756571BA7D71BB2858070000005661725479706571BC5D71BD285807000000666C6F6174363471BE5806000000446F75626C6571BF65580A0000002E72784C6F774869676871C0683D683E4B008571C168408771C25271C3284B014B028571C46847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71C57471C6627558050000007369676D6171C77D71C82858070000005661725479706571C95D71CA285807000000666C6F6174363471CB5806000000446F75626C6571CC65580A0000002E72784C6F774869676871CD683D683E4B008571CE68408771CF5271D0284B014B028571D16847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71D27471D362755805000000792E76617271D47D71D52858070000005661725479706571D65D71D7285807000000666C6F6174363471D85806000000446F75626C6571D965580A0000002E72784C6F774869676871DA683D683E4B008571DB68408771DC5271DD284B014B028571DE6847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71DF7471E062755808000000662E7076616C756571E17D71E22858070000005661725479706571E35D71E4285807000000666C6F6174363471E55806000000446F75626C6571E665580A0000002E72784C6F774869676871E7683D683E4B008571E868408771E95271EA284B014B028571EB6847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71EC7471ED6275580300000061696371EE7D71EF2858070000005661725479706571F05D71F1285807000000666C6F6174363471F25806000000446F75626C6571F365580A0000002E72784C6F774869676871F4683D683E4B008571F568408771F65271F7284B014B028571F86847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71F97471FA6275580D000000746F74616C2E7371756172657371FB7D71FC2858070000005661725479706571FD5D71FE285807000000666C6F6174363471FF5806000000446F75626C65720001000065580A0000002E72784C6F77486967687201010000683D683E4B008572020100006840877203010000527204010000284B014B028572050100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF720601000074720701000062755810000000726573696475616C2E7371756172657372080100007D720901000028580700000056617254797065720A0100005D720B010000285807000000666C6F61743634720C0100005806000000446F75626C65720D01000065580A0000002E72784C6F7748696768720E010000683D683E4B0085720F0100006840877210010000527211010000284B014B028572120100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72130100007472140100006275580C000000636F65662E742E76616C756572150100007D72160100002858070000005661725479706572170100005D7218010000285807000000666C6F6174363472190100005806000000446F75626C65721A01000065580A0000002E72784C6F7748696768721B010000683D683E4B0085721C010000684087721D01000052721E010000284B014B0285721F0100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722001000074722101000062755807000000662E76616C756572220100007D72230100002858070000005661725479706572240100005D7225010000285807000000666C6F6174363472260100005806000000446F75626C65722701000065580A0000002E72784C6F77486967687228010000683D683E4B00857229010000684087722A01000052722B010000284B014B0285722C0100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722D01000074722E01000062755809000000722E73717561726564722F0100007D72300100002858070000005661725479706572310100005D7232010000285807000000666C6F6174363472330100005806000000446F75626C65723401000065580A0000002E72784C6F77486967687235010000683D683E4B008572360100006840877237010000527238010000284B014B028572390100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF723A01000074723B0100006275580E000000636F65662E7374642E6572726F72723C0100007D723D01000028580700000056617254797065723E0100005D723F010000285807000000666C6F6174363472400100005806000000446F75626C65724101000065580A0000002E72784C6F77486967687242010000683D683E4B008572430100006840877244010000527245010000284B014B028572460100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF724701000074724801000062755811000000726573696475616C2E76617269616E636572490100007D724A01000028580700000056617254797065724B0100005D724C010000285807000000666C6F61743634724D0100005806000000446F75626C65724E01000065580A0000002E72784C6F7748696768724F010000683D683E4B008572500100006840877251010000527252010000284B014B028572530100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72540100007472550100006275757362580B0000005F6D6F64656C5F747970657256010000580700000072784C6F676974725701000058100000005F636F6D707574655F636F6E746578747258010000637265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365710A52784C6F63616C5365710A72590100002981725A0100007D725B0100002858030000005F6964725C01000058200000003363393030366430356166383131653961636662386532623163363166303164725D010000580C0000005F6465736372697074696F6E725E01000058080000004C6F63616C536571725F010000580F0000005F636F6E736F6C655F6F757470757472600100008958090000005F72656D6F7465496472610100004AFFFFFFFF580D0000005F6175746F5F636C65616E757072620100008858080000005F76657273696F6E72630100005805000000312E302D317264010000756275622E", + "1": "revoscalepy_model", + "2": "2019-04-09 18:49:57.920" + } + ] + }, + "text/html": "
modelnameModelVersion
0x800363736B6C6561726E2E6C696E6561725F6D6F64656C2E6C6F6769737469630A4C6F67697374696352656772657373696F6E0A7100298171017D71022858040000006475616C71038958080000006D61785F6974657271044B64580A000000696E746572636570745F7105636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A7106636E756D70790A6E6461727261790A71074B00857108430162710987710A52710B284B014B0185710C636E756D70790A64747970650A710D58020000006638710E4B004B0187710F527110284B0358010000003C71114E4E4E4AFFFFFFFF4AFFFFFFFF4B0074711262894308831B1D5A762EA13F711374711462580A0000007761726D5F7374617274711589580C00000072616E646F6D5F737461746571164E580C000000636C6173735F77656967687471174E5807000000766572626F736571184B0058070000006E5F697465725F7119680668074B0085711A680987711B52711C284B014B0185711D680D58020000006934711E4B004B0187711F527120284B0368114E4E4E4AFFFFFFFF4AFFFFFFFF4B007471216289430417000000712274712362580D0000006669745F696E746572636570747124885803000000746F6C7125473F1A36E2EB1C432D5808000000636C61737365735F7126680668074B008571276809877128527129284B014B0285712A68208943080000000001000000712B74712C625811000000696E746572636570745F7363616C696E67712D4B015806000000736F6C766572712E58090000006C69626C696E656172712F5805000000636F65665F7130680668074B008571316809877132527133284B014B014B048671346810894320F2E8A75D3203A1BF53E4B0B17AA8A53F2F7F8DC9FED582BEB8A81FEDEB68123F713574713662580B0000006D756C74695F636C617373713758030000006F76727138580700000070656E616C7479713958020000006C32713A58060000006E5F6A6F6273713B4B01580100000043713C473FF000000000000058100000005F736B6C6561726E5F76657273696F6E713D5806000000302E31382E31713E75622ESciKit_model2019-04-09 18:49:24.260
0x8003637265766F7363616C6570792E66756E6374696F6E732E52784C6F6769740A52784C6F676974526573756C74730A7100298171017D71022858070000005F706172616D7371037D710428580B0000007573657250726F66696C657105586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F34423643314141442D393041422D343344352D383339372D3931424635374646413442307106580E00000053686F77497465726174696F6E73710789581600000053686F7744657461696C6564497465726174696F6E73710889580D0000007472616E73666F726D5661727371094E581A0000004F626A65637469766546756E6374696F6E546F6C6572616E6365710A473E45798EE2308C3A580F0000004375626550726564696374696F6E73710B895803000000746D70710C586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F34423643314141442D393041422D343344352D383339372D393142463537464641344230710D5807000000566572626F7365710E4B00580800000072436F6E64546F6C710F473D06849B86A12B9B5807000000466F726D756C617110584E000000746970706564207E2070617373656E6765725F636F756E74202B20747269705F64697374616E6365202B20747269705F74696D655F696E5F73656373202B206469726563745F64697374616E63657111580800000064726F704D61696E7112885807000000636F7644617461711389580E000000696E697469616C5F76616C75657371144E580E000000436F656666546F6C6572616E63657115473EB0C6F7A0B5ED8D58100000007472616E73666F726D4F626A6563747371164E580D0000004D6178497465726174696F6E7371174B19580D0000002E2E7278446174614672616D6571184E580C000000726F7753656C656374696F6E71194E580D0000007472616E73666F726D46756E63711A4E5807000000636F76436F6566711B8958110000004772616469656E74546F6C6572616E6365711C473EB0C6F7A0B5ED8D580900000064726F704669727374711D89580E0000005265706F727450726F6772657373711E88580E00000072656D6F76654D697373696E6773711F885808000000726561645661727371205D71212858060000007469707065647122580B000000666172655F616D6F756E747123580F00000070617373656E6765725F636F756E7471245811000000747269705F74696D655F696E5F736563737125580D000000747269705F64697374616E63657126580F0000006469726563745F64697374616E6365712765581500000062557365725365744D6178497465726174696F6E737128895806000000766172546F6C7129473D719799812DEA115806000000466164644350712A63636F6C6C656374696F6E730A4F726465726564446963740A712B2952712C580F00000062436F6D707574654C6F7748696768712D887358050000005072696E74712E89580C0000005265706F727454696D696E67712F4B0158040000004375626571308958110000007472616E73666F726D5061636B6167657371314E580A0000007472616E73666F726D7371324E580400000074656D707133586B0000002F7661722F6F70742F6D7373716C2D657874656E736962696C6974792F646174612F39636332343438352D656662312D343364302D393534392D6232313730353265376463632F34423643314141442D393041422D343344352D383339372D3931424635374646413442307134580D000000626C6F636B735065725265616471354B017558080000005F666F726D756C617136681158050000005F6461746171374E58050000005F63616C6C713858D502000072785F6C6F67697428666F726D756C61203D203C636C6173732027737472273E2C2064617461203D203C636C617373202770616E6461732E636F72652E6672616D652E446174614672616D65273E2C207077656967687473203D204E6F6E652C206677656967687473203D204E6F6E652C2063756265203D2046616C73652C20637562655F70726564696374696F6E73203D2046616C73652C207661726961626C655F73656C656374696F6E203D204E6F6E652C20726F775F73656C656374696F6E203D204E6F6E652C207472616E73666F726D73203D204E6F6E652C207472616E73666F726D5F6F626A65637473203D204E6F6E652C207472616E73666F726D5F66756E6374696F6E203D204E6F6E652C207472616E73666F726D5F7661726961626C6573203D204E6F6E652C207472616E73666F726D5F7061636B61676573203D204E6F6E652C2064726F705F6669727374203D2046616C73652C2064726F705F6D61696E203D20547275652C20636F765F636F6566203D2046616C73652C20636F765F64617461203D2046616C73652C20696E697469616C5F76616C756573203D204E6F6E652C20636F65665F6C6162656C5F7374796C65203D20275265766F272C20626C6F636B735F7065725F72656164203D20312C206D61785F697465726174696F6E73203D204E6F6E652C20636F6566666963656E745F746F6C6572616E6365203D2031652D30362C206772616469656E745F746F6C6572616E6365203D2031652D30362C206F626A6563746976655F66756E6374696F6E5F746F6C6572616E6365203D2031652D30382C207265706F72745F70726F6772657373203D204E6F6E652C20766572626F7365203D20302C20636F6D707574655F636F6E74657874203D203C7265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365712E52784C6F63616C536571206F626A6563742061742030783766636436656661636639383E29713958080000005F726573756C7473713A682B2952713B28580C000000636F656666696369656E7473713C636E756D70792E636F72652E6D756C746961727261790A5F7265636F6E7374727563740A713D636E756D70790A6E6461727261790A713E4B0085713F4301627140877141527142284B014B05857143636E756D70790A64747970650A71445802000000663871454B004B01877146527147284B0358010000003C71484E4E4E4AFFFFFFFF4AFFFFFFFF4B0074714962894328380FF8D37B2EA13FD65050463903A1BF320BD7AC7FA8A53FE1F5362002D682BE1DF55358EE68123F714A74714B625810000000726573696475616C2E73717561726573714C683D683E4B0085714D684087714E52714F284B014B0085715068478943007151747152625810000000636F6E646974696F6E2E6E756D6265727153473FE8CEAE17BF5EFE580400000072616E6B71544B055807000000616C69617365647155683D683E4B008571566840877157527158284B014B00857159684458020000006934715A4B004B0187715B52715C284B0368484E4E4E4AFFFFFFFF4AFFFFFFFF4B0074715D6289685174715E62580E000000636F65662E7374642E6572726F72715F683D683E4B008571606840877161527162284B014B0585716368478943287C166987CC576D3F9CB99DEB8B7F573F53150E094630443F67BAA3309D7B7B3E83FD0D7EEF00163F716474716562580C000000636F65662E742E76616C75657166683D683E4B008571676840877168527169284B014B0585716A684789432807BA1359C5BC2240521FE1E5F62A37C0E3CD5C3A2B2A51409DE677E78FEEF5BF65813FAE08C6EA3F716B74716C62580C000000636F65662E702E76616C7565716D683D683E4B0085716E684087716F527170284B014B058571716847894328000000000000B03C000000000000B03C000000000000B03CC851D9A879D1C53FD0D1972914C7D93F717274717362580D000000746F74616C2E73717561726573717447412FA0E4C82F72F65805000000792E7661727175683D683E4B008571766840877177527178284B014B00857179684789685174717A6258050000007369676D61717B683D683E4B0085717C684087717D52717E284B014B0085717F6847896851747180625811000000726573696475616C2E76617269616E63657181683D683E4B008571826840877183527184284B014B008571856847896851747186625809000000722E737175617265647187683D683E4B00857188684087718952718A284B014B0085718B684789685174718C625807000000662E76616C7565718D683D683E4B0085718E684087718F527190284B014B008571916847896851747192625808000000662E7076616C75657193683D683E4B008571946840877195527196284B014B008571976847896851747198625807000000662E6E756D6466719947FFFFFFFFFFFFFFFF58020000006466719A47412F4D1E000000005807000000792E6E616D6573719B5806000000746970706564719C580A000000636F65662E6E616D6573719D5D719E28580B00000028496E7465726365707429719F580F00000070617373656E6765725F636F756E7471A0580D000000747269705F64697374616E636571A15811000000747269705F74696D655F696E5F7365637371A2580F0000006469726563745F64697374616E636571A3655807000000786C6576656C7371A4637265766F7363616C6570792E527853657269616C697A61626C650A446174614672616D65446963740A71A5298171A6580C000000636F762E756E7363616C656471A7683D683E4B008571A868408771A95271AA284B014B008571AB68478968517471AC62580A000000706172746974696F6E7371AD682B295271AE580A000000706172746974696F6E7371AF68A5298171B073580900000076616C69642E6F627371B147412F4D2800000000580B0000006D697373696E672E6F627371B2470000000000000000580800000064657669616E636571B3474135935E3F58A10A580300000061696371B447413593683F58A10A580A00000064697370657273696F6E71B5473FF0000000000000580A000000697465726174696F6E7371B64B09757D71B758080000007661725F696E666F71B87D71B928580C000000636F65662E702E76616C756571BA7D71BB2858070000005661725479706571BC5D71BD285807000000666C6F6174363471BE5806000000446F75626C6571BF65580A0000002E72784C6F774869676871C0683D683E4B008571C168408771C25271C3284B014B028571C46847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71C57471C6627558050000007369676D6171C77D71C82858070000005661725479706571C95D71CA285807000000666C6F6174363471CB5806000000446F75626C6571CC65580A0000002E72784C6F774869676871CD683D683E4B008571CE68408771CF5271D0284B014B028571D16847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71D27471D362755805000000792E76617271D47D71D52858070000005661725479706571D65D71D7285807000000666C6F6174363471D85806000000446F75626C6571D965580A0000002E72784C6F774869676871DA683D683E4B008571DB68408771DC5271DD284B014B028571DE6847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71DF7471E062755808000000662E7076616C756571E17D71E22858070000005661725479706571E35D71E4285807000000666C6F6174363471E55806000000446F75626C6571E665580A0000002E72784C6F774869676871E7683D683E4B008571E868408771E95271EA284B014B028571EB6847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71EC7471ED6275580300000061696371EE7D71EF2858070000005661725479706571F05D71F1285807000000666C6F6174363471F25806000000446F75626C6571F365580A0000002E72784C6F774869676871F4683D683E4B008571F568408771F65271F7284B014B028571F86847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71F97471FA6275580D000000746F74616C2E7371756172657371FB7D71FC2858070000005661725479706571FD5D71FE285807000000666C6F6174363471FF5806000000446F75626C65720001000065580A0000002E72784C6F77486967687201010000683D683E4B008572020100006840877203010000527204010000284B014B028572050100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF720601000074720701000062755810000000726573696475616C2E7371756172657372080100007D720901000028580700000056617254797065720A0100005D720B010000285807000000666C6F61743634720C0100005806000000446F75626C65720D01000065580A0000002E72784C6F7748696768720E010000683D683E4B0085720F0100006840877210010000527211010000284B014B028572120100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72130100007472140100006275580C000000636F65662E742E76616C756572150100007D72160100002858070000005661725479706572170100005D7218010000285807000000666C6F6174363472190100005806000000446F75626C65721A01000065580A0000002E72784C6F7748696768721B010000683D683E4B0085721C010000684087721D01000052721E010000284B014B0285721F0100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722001000074722101000062755807000000662E76616C756572220100007D72230100002858070000005661725479706572240100005D7225010000285807000000666C6F6174363472260100005806000000446F75626C65722701000065580A0000002E72784C6F77486967687228010000683D683E4B00857229010000684087722A01000052722B010000284B014B0285722C0100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF722D01000074722E01000062755809000000722E73717561726564722F0100007D72300100002858070000005661725479706572310100005D7232010000285807000000666C6F6174363472330100005806000000446F75626C65723401000065580A0000002E72784C6F77486967687235010000683D683E4B008572360100006840877237010000527238010000284B014B028572390100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF723A01000074723B0100006275580E000000636F65662E7374642E6572726F72723C0100007D723D01000028580700000056617254797065723E0100005D723F010000285807000000666C6F6174363472400100005806000000446F75626C65724101000065580A0000002E72784C6F77486967687242010000683D683E4B008572430100006840877244010000527245010000284B014B028572460100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF724701000074724801000062755811000000726573696475616C2E76617269616E636572490100007D724A01000028580700000056617254797065724B0100005D724C010000285807000000666C6F61743634724D0100005806000000446F75626C65724E01000065580A0000002E72784C6F7748696768724F010000683D683E4B008572500100006840877251010000527252010000284B014B028572530100006847894310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72540100007472550100006275757362580B0000005F6D6F64656C5F747970657256010000580700000072784C6F676974725701000058100000005F636F6D707574655F636F6E746578747258010000637265766F7363616C6570792E636F6D70757465636F6E746578742E52784C6F63616C5365710A52784C6F63616C5365710A72590100002981725A0100007D725B0100002858030000005F6964725C01000058200000003363393030366430356166383131653961636662386532623163363166303164725D010000580C0000005F6465736372697074696F6E725E01000058080000004C6F63616C536571725F010000580F0000005F636F6E736F6C655F6F757470757472600100008958090000005F72656D6F7465496472610100004AFFFFFFFF580D0000005F6175746F5F636C65616E757072620100008858080000005F76657273696F6E72630100005805000000312E302D317264010000756275622Erevoscalepy_model2019-04-09 18:49:57.920
" + }, + "metadata": {} + } + ], + "execution_count": 27 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO \n\n/* Create Scoring function from SciKit Learn */\nDROP PROCEDURE IF EXISTS PredictTipSciKitPy;\nGO\n\nCREATE PROCEDURE [dbo].[PredictTipSciKitPy] (@model varchar(50), @inquery nvarchar(max))\nAS\nBEGIN\nDECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);\nEXEC sp_execute_external_script\n @language = N'Python',\n @script = N'\nimport pickle;\nimport numpy;\nfrom sklearn import metrics\n\nmod = pickle.loads(lmodel2)\nX = InputDataSet[[\"passenger_count\", \"trip_distance\", \"trip_time_in_secs\", \"direct_distance\"]]\ny = numpy.ravel(InputDataSet[[\"tipped\"]])\n\nprobArray = mod.predict_proba(X)\nprobList = []\nfor i in range(len(probArray)):\n probList.append((probArray[i])[1])\n\nprobArray = numpy.asarray(probList)\nfpr, tpr, thresholds = metrics.roc_curve(y, probArray)\naucResult = metrics.auc(fpr, tpr)\nprint (\"AUC on testing data is: \" + str(aucResult))\n\nOutputDataSet = pandas.DataFrame(data = probList, columns = [\"predictions\"])\n',\t\n @input_data_1 = @inquery,\n @input_data_1_name = N'InputDataSet',\n @params = N'@lmodel2 varbinary(max)',\n @lmodel2 = @lmodel2\nWITH RESULT SETS ((Score float));\nEND\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0734440" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0746960" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0900500" + }, + "metadata": {} + } + ], + "execution_count": 12 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO\n\n/* Score with RevoScalePy */\nDROP PROCEDURE IF EXISTS PredictTipRxPy;\nGO\n\nCREATE PROCEDURE [dbo].[PredictTipRxPy] (@model varchar(50), @inquery nvarchar(max))\nAS\nBEGIN\nDECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);\nEXEC sp_execute_external_script \n @language = N'Python',\n @script = N'\nimport pickle;\nimport numpy;\nfrom sklearn import metrics\nfrom revoscalepy.functions.RxPredict import rx_predict;\n\nmod = pickle.loads(lmodel2)\nX = InputDataSet[[\"passenger_count\", \"trip_distance\", \"trip_time_in_secs\", \"direct_distance\"]]\ny = numpy.ravel(InputDataSet[[\"tipped\"]])\n\nprobArray = rx_predict(mod, X)\nprobList = probArray[\"tipped_Pred\"].values \n\nprobArray = numpy.asarray(probList)\nfpr, tpr, thresholds = metrics.roc_curve(y, probArray)\naucResult = metrics.auc(fpr, tpr)\nprint (\"AUC on testing data is: \" + str(aucResult))\n\nOutputDataSet = pandas.DataFrame(data = probList, columns = [\"predictions\"])\n',\t\n @input_data_1 = @inquery,\n @input_data_1_name = N'InputDataSet',\n @params = N'@lmodel2 varbinary(max)',\n @lmodel2 = @lmodel2\nWITH RESULT SETS ((Score float));\nEND\nGO", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0765730" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0769170" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.1109080" + }, + "metadata": {} + } + ], + "execution_count": 13 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO\n\n/* Run a bulk score using SciKitLearn and the proc for that */\nDECLARE @query_string nvarchar(max) -- Specify input query\n SET @query_string='\n select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,\n dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance\n from nyctaxi_sample_testing'\nEXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string; ", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0735390" + }, + "metadata": {} + }, + { + "output_type": "error", + "ename": "", + "evalue": "Msg 39004, Level 16, State 20, Line 3\nA 'Python' script error occurred during execution of 'sp_execute_external_script' with HRESULT 0x80004004.", + "traceback": [] + }, + { + "output_type": "error", + "ename": "", + "evalue": "Msg 39019, Level 16, State 2, Line 3\nAn external script error occurred: \n\nError in execution. Check the output for more information.\nTraceback (most recent call last):\n File \"\", line 5, in \n File \"/var/opt/mssql-extensibility/data/10f31ef8-195b-4998-96d7-f484eafeaf1e/741039BE-686E-4DE7-B072-61E7DFFBB4FC/sqlindb_0.py\", line 38, in transform\n mod = pickle.loads(lmodel2)\nTypeError: a bytes-like object is required, not 'NoneType'\n\nSqlSatelliteCall error: Error in execution. Check the output for more information.", + "traceback": [] + }, + { + "output_type": "display_data", + "data": { + "text/html": "STDOUT message(s) from external script: \nSqlSatelliteCall function failed. Please see the console output for more information.\nTraceback (most recent call last):\n File \"/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/computecontext/RxInSqlServer.py\", line 605, in rx_sql_satellite_call\n rx_native_call(\"SqlSatelliteCall\", params)\n File \"/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/RxSerializable.py\", line 375, in rx_native_call\n ret = px_call(functionname, params)\nRuntimeError: revoscalepy function failed." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:11.6060510" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 14, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "Score" + } + ] + }, + "data": [] + }, + "text/html": "
Score
" + }, + "metadata": {} + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "source": "USE NYC;\nGO\n\n/* Do the same from RevoScalePy */\nDECLARE @query_string nvarchar(max) -- Specify input query\n SET @query_string='\n select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,\n dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance\n from nyctaxi_sample_testing'\nEXEC [dbo].[PredictTipRxPy] 'revoscalepy_model', @query_string; ", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Commands completed successfully." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:00.0743710" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "STDOUT message(s) from external script: \nRows Read: 660029, Total Rows Processed: 660029, Total Chunk Time: 0.021 seconds \nAUC on testing data is: 0.56502019161" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(660029 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:15.5037590" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Displaying Top 5000 rows." + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "execution_count": 15, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "Score" + } + ] + }, + "data": [ + { + "0": "0.508539321169836" + }, + { + "0": "0.508544730279092" + }, + { + "0": "0.508543254708527" + }, + { + "0": "0.508547740823509" + }, + { + "0": "0.508541109968948" + }, + { + "0": "0.508540714804605" + }, + { + "0": "0.50854041676457" + }, + { + "0": "0.508542904457477" + }, + { + "0": "0.508539051233405" + }, + { + "0": "0.508541680472037" + }, + { + "0": "0.508539628885716" + }, + { + "0": "0.508541295094217" + }, + { + "0": "0.508546337437364" + }, + { + "0": "0.508545444456461" + }, + { + "0": "0.508539627922927" + }, + { + "0": "0.508542641860096" + }, + { + "0": "0.508539713012092" + }, + { + "0": "0.508544968903099" + }, + { + "0": "0.508544112687475" + }, + { + "0": "0.508541035665076" + }, + { + "0": "0.508542158649561" + }, + { + "0": "0.508541368536032" + }, + { + "0": "0.508531532307535" + }, + { + "0": "0.508530830817255" + }, + { + "0": "0.508543289301417" + }, + { + "0": "0.508546654187632" + }, + { + "0": "0.508544070698744" + }, + { + "0": "0.508543713119091" + }, + { + "0": "0.508544343843193" + }, + { + "0": "0.50854321350141" + }, + { + "0": "0.508546924993529" + }, + { + "0": "0.508543415380705" + }, + { + "0": "0.508546742072207" + }, + { + "0": "0.50854252801083" + }, + { + "0": "0.508542093713525" + }, + { + "0": "0.508545043708781" + }, + { + "0": "0.508542879562174" + }, + { + "0": "0.508541339787226" + }, + { + "0": "0.508544435235574" + }, + { + "0": "0.508531812903638" + }, + { + "0": "0.508541866140118" + }, + { + "0": "0.50854066719507" + }, + { + "0": "0.508536156430185" + }, + { + "0": "0.508543065300695" + }, + { + "0": "0.508541600071319" + }, + { + "0": "0.507481984786767" + }, + { + "0": "0.507483690696425" + }, + { + "0": "0.507486295962705" + }, + { + "0": "0.507484253048287" + }, + { + "0": "0.507485137179219" + }, + { + "0": "0.507484251769786" + }, + { + "0": "0.507481250236147" + }, + { + "0": "0.507481638730849" + }, + { + "0": "0.507485055554229" + }, + { + "0": "0.507483839040595" + }, + { + "0": "0.507479257941296" + }, + { + "0": "0.507484749023173" + }, + { + "0": "0.507480766246963" + }, + { + "0": "0.507482909523385" + }, + { + "0": "0.507488732191632" + }, + { + "0": "0.50748282663167" + }, + { + "0": "0.507485535477875" + }, + { + "0": "0.507474239341667" + }, + { + "0": "0.507483902279612" + }, + { + "0": "0.507485158906606" + }, + { + "0": "0.507484148547095" + }, + { + "0": "0.507483447009734" + }, + { + "0": "0.507486598916158" + }, + { + "0": "0.507477675469035" + }, + { + "0": "0.507483830698519" + }, + { + "0": "0.507483141261973" + }, + { + "0": "0.507483031635141" + }, + { + "0": "0.507485299214066" + }, + { + "0": "0.507480651865584" + }, + { + "0": "0.509603013611234" + }, + { + "0": "0.509599496069726" + }, + { + "0": "0.509605190103568" + }, + { + "0": "0.509606869817156" + }, + { + "0": "0.509605400534249" + }, + { + "0": "0.50960417098013" + }, + { + "0": "0.509603152402137" + }, + { + "0": "0.509600276515375" + }, + { + "0": "0.509602888997909" + }, + { + "0": "0.509602338696152" + }, + { + "0": "0.509598833466592" + }, + { + "0": "0.509603682016923" + }, + { + "0": "0.509603776800715" + }, + { + "0": "0.509593678810369" + }, + { + "0": "0.509607347115852" + }, + { + "0": "0.509605217360543" + }, + { + "0": "0.509606827374561" + }, + { + "0": "0.509599424975721" + }, + { + "0": "0.509600675006904" + }, + { + "0": "0.509605741304051" + }, + { + "0": "0.509599346499952" + }, + { + "0": "0.509605052331114" + }, + { + "0": "0.5096019777657" + }, + { + "0": "0.509593568342671" + }, + { + "0": "0.509606519099392" + }, + { + "0": "0.509604149174057" + }, + { + "0": "0.509601963311197" + }, + { + "0": "0.509605979809868" + }, + { + "0": "0.509598673335347" + }, + { + "0": "0.509606020993635" + }, + { + "0": "0.509603257263207" + }, + { + "0": "0.509601831709869" + }, + { + "0": "0.509605966660102" + }, + { + "0": "0.509604978343866" + }, + { + "0": "0.509592101628504" + }, + { + "0": "0.50960275000145" + }, + { + "0": "0.509597442288249" + }, + { + "0": "0.509599680000353" + }, + { + "0": "0.509599028981255" + }, + { + "0": "0.509598200660529" + }, + { + "0": "0.509601018803692" + }, + { + "0": "0.509600593408308" + }, + { + "0": "0.506425151470336" + }, + { + "0": "0.506423931303863" + }, + { + "0": "0.506420775664528" + }, + { + "0": "0.506426753494674" + }, + { + "0": "0.506424610867989" + }, + { + "0": "0.506422653446814" + }, + { + "0": "0.506421687935911" + }, + { + "0": "0.506423820751372" + }, + { + "0": "0.506425552026571" + }, + { + "0": "0.506423141673942" + }, + { + "0": "0.50642504384335" + }, + { + "0": "0.506425268673257" + }, + { + "0": "0.506426604394556" + }, + { + "0": "0.506422470005222" + }, + { + "0": "0.50642765273122" + }, + { + "0": "0.50642296627925" + }, + { + "0": "0.506426519200206" + }, + { + "0": "0.506425747812213" + }, + { + "0": "0.506424542243281" + }, + { + "0": "0.506423075357857" + }, + { + "0": "0.506425008009316" + }, + { + "0": "0.506423975801973" + }, + { + "0": "0.506427511811866" + }, + { + "0": "0.506418848263837" + }, + { + "0": "0.506416177935902" + }, + { + "0": "0.506424642301757" + }, + { + "0": "0.506426377338265" + }, + { + "0": "0.50642266844835" + }, + { + "0": "0.506422931200312" + }, + { + "0": "0.506424358170016" + }, + { + "0": "0.50642186409317" + }, + { + "0": "0.506424456976106" + }, + { + "0": "0.506426168888514" + }, + { + "0": "0.50642457342746" + }, + { + "0": "0.5053655934135" + }, + { + "0": "0.510666380954855" + }, + { + "0": "0.51171911157285" + }, + { + "0": "0.512785427723123" + }, + { + "0": "0.510662016704885" + }, + { + "0": "0.510660034208079" + }, + { + "0": "0.512784248717509" + }, + { + "0": "0.511724368973091" + }, + { + "0": "0.5032461418708" + }, + { + "0": "0.511716036639319" + }, + { + "0": "0.51277916076002" + }, + { + "0": "0.505363519454728" + }, + { + "0": "0.505364402064164" + }, + { + "0": "0.51277728294677" + }, + { + "0": "0.511718405360099" + }, + { + "0": "0.510665850697281" + }, + { + "0": "0.500073534333722" + }, + { + "0": "0.510661647619921" + }, + { + "0": "0.511720804678934" + }, + { + "0": "0.510651056889476" + }, + { + "0": "0.510660805721224" + }, + { + "0": "0.511721252151081" + }, + { + "0": "0.511718328364001" + }, + { + "0": "0.512784611591961" + }, + { + "0": "0.511724766826319" + }, + { + "0": "0.510659545257985" + }, + { + "0": "0.51277912587163" + }, + { + "0": "0.510664425703044" + }, + { + "0": "0.510661019997101" + }, + { + "0": "0.50536781710066" + }, + { + "0": "0.505364787951745" + }, + { + "0": "0.50323857699279" + }, + { + "0": "0.510657119042919" + }, + { + "0": "0.504306207878624" + }, + { + "0": "0.505368120666947" + }, + { + "0": "0.510663066541558" + }, + { + "0": "0.510658181286395" + }, + { + "0": "0.510663752789005" + }, + { + "0": "0.511717542199306" + }, + { + "0": "0.510663326897733" + }, + { + "0": "0.512783706527625" + }, + { + "0": "0.510662919205438" + }, + { + "0": "0.511723973807784" + }, + { + "0": "0.511722229966028" + }, + { + "0": "0.511723883709395" + }, + { + "0": "0.512780852200964" + }, + { + "0": "0.511722520468752" + }, + { + "0": "0.510663536237041" + }, + { + "0": "0.505368809265703" + }, + { + "0": "0.505364079009803" + }, + { + "0": "0.511713510914509" + }, + { + "0": "0.510661833316251" + }, + { + "0": "0.510667478025283" + }, + { + "0": "0.504307273407902" + }, + { + "0": "0.512784047524715" + }, + { + "0": "0.505365599985569" + }, + { + "0": "0.510665083153563" + }, + { + "0": "0.510657928980583" + }, + { + "0": "0.511722721173302" + }, + { + "0": "0.512777886191367" + }, + { + "0": "0.503245283258691" + }, + { + "0": "0.510659356227008" + }, + { + "0": "0.505365110757199" + }, + { + "0": "0.510664369694087" + }, + { + "0": "0.511717995524899" + }, + { + "0": "0.505366702891395" + }, + { + "0": "0.512781709776861" + }, + { + "0": "0.510654237477019" + }, + { + "0": "0.510659599581638" + }, + { + "0": "0.512777269732789" + }, + { + "0": "0.505366805228106" + }, + { + "0": "0.510660953355241" + }, + { + "0": "0.504302849294812" + }, + { + "0": "0.50642913429634" + }, + { + "0": "0.508541953927708" + }, + { + "0": "0.507479520423819" + }, + { + "0": "0.508539350412014" + }, + { + "0": "0.507479321979559" + }, + { + "0": "0.509599449205323" + }, + { + "0": "0.509594868763705" + }, + { + "0": "0.509599206459793" + }, + { + "0": "0.509601622683422" + }, + { + "0": "0.509598493269178" + }, + { + "0": "0.508539164010927" + }, + { + "0": "0.508534837653774" + }, + { + "0": "0.51383608916217" + }, + { + "0": "0.508535265722413" + }, + { + "0": "0.508536432065123" + }, + { + "0": "0.513830672508032" + }, + { + "0": "0.507477884728779" + }, + { + "0": "0.507477982335886" + }, + { + "0": "0.515957455835244" + }, + { + "0": "0.513834251792816" + }, + { + "0": "0.504301028482142" + }, + { + "0": "0.505360431411232" + }, + { + "0": "0.509598786551261" + }, + { + "0": "0.515955754642919" + }, + { + "0": "0.509596356729211" + }, + { + "0": "0.507479167415771" + }, + { + "0": "0.514889946785532" + }, + { + "0": "0.50959570383385" + }, + { + "0": "0.508535957308326" + }, + { + "0": "0.513826166234568" + }, + { + "0": "0.514891561871464" + }, + { + "0": "0.508543834346038" + }, + { + "0": "0.515949254408861" + }, + { + "0": "0.509599195342405" + }, + { + "0": "0.515957001923648" + }, + { + "0": "0.50747908524247" + }, + { + "0": "0.505361105361825" + }, + { + "0": "0.514891599741128" + }, + { + "0": "0.50535843599337" + }, + { + "0": "0.50854047707893" + }, + { + "0": "0.567377501442905" + }, + { + "0": "0.507477886105937" + }, + { + "0": "0.513831500198947" + }, + { + "0": "0.507482841035532" + }, + { + "0": "0.508532580149176" + }, + { + "0": "0.515945926924777" + }, + { + "0": "0.513835513876014" + }, + { + "0": "0.509598302678202" + }, + { + "0": "0.51383731186349" + }, + { + "0": "0.513835384090579" + }, + { + "0": "0.515948749450527" + }, + { + "0": "0.51383439615524" + }, + { + "0": "0.514898029779067" + }, + { + "0": "0.507476458152189" + }, + { + "0": "0.513836114522138" + }, + { + "0": "0.509594822557517" + }, + { + "0": "0.515953646753318" + }, + { + "0": "0.508536537730368" + }, + { + "0": "0.513836646493861" + }, + { + "0": "0.514886878627135" + }, + { + "0": "0.515949512505695" + }, + { + "0": "0.509600272238575" + }, + { + "0": "0.507477448724151" + }, + { + "0": "0.505359565316527" + }, + { + "0": "0.508536616278617" + }, + { + "0": "0.513816102548982" + }, + { + "0": "0.508537388518453" + }, + { + "0": "0.515953741704703" + }, + { + "0": "0.506420473086328" + }, + { + "0": "0.509596341419006" + }, + { + "0": "0.508541846053438" + }, + { + "0": "0.508539777878993" + }, + { + "0": "0.505360096121782" + }, + { + "0": "0.507476247067106" + }, + { + "0": "0.508537713432638" + }, + { + "0": "0.514886047431785" + }, + { + "0": "0.508536135413309" + }, + { + "0": "0.508536874288149" + }, + { + "0": "0.509597603792304" + }, + { + "0": "0.514892881297009" + }, + { + "0": "0.514888914351465" + }, + { + "0": "0.513833278678007" + }, + { + "0": "0.506416252023246" + }, + { + "0": "0.50959718967362" + }, + { + "0": "0.508536918255508" + }, + { + "0": "0.507478499162592" + }, + { + "0": "0.509599982640261" + }, + { + "0": "0.513836668912929" + }, + { + "0": "0.507475713054029" + }, + { + "0": "0.508540488839333" + }, + { + "0": "0.502181576211717" + }, + { + "0": "0.508536831935841" + }, + { + "0": "0.509582681532563" + }, + { + "0": "0.51701314141149" + }, + { + "0": "0.506420287224847" + }, + { + "0": "0.507475353812762" + }, + { + "0": "0.515947989607916" + }, + { + "0": "0.507481509668822" + }, + { + "0": "0.51488668679885" + }, + { + "0": "0.508539541807951" + }, + { + "0": "0.509600960011809" + }, + { + "0": "0.507475487473549" + }, + { + "0": "0.508540334637788" + }, + { + "0": "0.508532936195539" + }, + { + "0": "0.509587144417297" + }, + { + "0": "0.512772628783351" + }, + { + "0": "0.512778089929625" + }, + { + "0": "0.512771760342526" + }, + { + "0": "0.51277311305549" + }, + { + "0": "0.512768924651927" + }, + { + "0": "0.512772700658086" + }, + { + "0": "0.512772360136114" + }, + { + "0": "0.512778370985245" + }, + { + "0": "0.512771924608021" + }, + { + "0": "0.51277554040345" + }, + { + "0": "0.512777877895869" + }, + { + "0": "0.512775285466412" + }, + { + "0": "0.512772089197098" + }, + { + "0": "0.51277504953792" + }, + { + "0": "0.512778497751126" + }, + { + "0": "0.512771720095872" + }, + { + "0": "0.512771108456112" + }, + { + "0": "0.512774201339175" + }, + { + "0": "0.512773667806307" + }, + { + "0": "0.512772806152466" + }, + { + "0": "0.512775749365297" + }, + { + "0": "0.51277369454444" + }, + { + "0": "0.512773581835337" + }, + { + "0": "0.512779534737942" + }, + { + "0": "0.512777581222128" + }, + { + "0": "0.512771525129085" + }, + { + "0": "0.512776408867087" + }, + { + "0": "0.512772020401431" + }, + { + "0": "0.512778980095618" + }, + { + "0": "0.51277200254593" + }, + { + "0": "0.512771593236135" + }, + { + "0": "0.510656965282785" + }, + { + "0": "0.510656407542993" + }, + { + "0": "0.510658804691019" + }, + { + "0": "0.510654992449885" + }, + { + "0": "0.510653775790256" + }, + { + "0": "0.510659346658507" + }, + { + "0": "0.510654929663854" + }, + { + "0": "0.51064961007693" + }, + { + "0": "0.51066091101749" + }, + { + "0": "0.510659595492048" + }, + { + "0": "0.510661023519375" + }, + { + "0": "0.510654988165821" + }, + { + "0": "0.510659648467572" + }, + { + "0": "0.510661005095519" + }, + { + "0": "0.510662501777484" + }, + { + "0": "0.510654430625604" + }, + { + "0": "0.510657956831813" + }, + { + "0": "0.510640900073988" + }, + { + "0": "0.510652129392145" + }, + { + "0": "0.51065629891816" + }, + { + "0": "0.510658260270694" + }, + { + "0": "0.51065553140682" + }, + { + "0": "0.510658824937975" + }, + { + "0": "0.510656822088614" + }, + { + "0": "0.510655043507675" + }, + { + "0": "0.510654931968629" + }, + { + "0": "0.511708635726584" + }, + { + "0": "0.511709379196281" + }, + { + "0": "0.51171648823417" + }, + { + "0": "0.511717518082621" + }, + { + "0": "0.511719200542108" + }, + { + "0": "0.511713719387793" + }, + { + "0": "0.511711020021865" + }, + { + "0": "0.51171908040724" + }, + { + "0": "0.511717271032313" + }, + { + "0": "0.511717462859614" + }, + { + "0": "0.511715223638672" + }, + { + "0": "0.511720001941743" + }, + { + "0": "0.511718273231722" + }, + { + "0": "0.511713336037584" + }, + { + "0": "0.511714655283569" + }, + { + "0": "0.511713512530441" + }, + { + "0": "0.511718972782997" + }, + { + "0": "0.511715396219792" + }, + { + "0": "0.511711575177981" + }, + { + "0": "0.511714071559847" + }, + { + "0": "0.511717001659902" + }, + { + "0": "0.5117153020592" + }, + { + "0": "0.511713856752151" + }, + { + "0": "0.511714521866892" + }, + { + "0": "0.511716358919914" + }, + { + "0": "0.511718592098281" + }, + { + "0": "0.511720606752768" + }, + { + "0": "0.511706570677539" + }, + { + "0": "0.511710735925157" + }, + { + "0": "0.511717063350067" + }, + { + "0": "0.511712786033874" + }, + { + "0": "0.510655324978202" + }, + { + "0": "0.510662399337664" + }, + { + "0": "0.510655352391542" + }, + { + "0": "0.510661934252442" + }, + { + "0": "0.510658229909228" + }, + { + "0": "0.510658457124323" + }, + { + "0": "0.510656305242537" + }, + { + "0": "0.51065799748101" + }, + { + "0": "0.510657999118157" + }, + { + "0": "0.510660195435889" + }, + { + "0": "0.510658258906359" + }, + { + "0": "0.510660175354743" + }, + { + "0": "0.510662212946732" + }, + { + "0": "0.510657477154056" + }, + { + "0": "0.510657359858872" + }, + { + "0": "0.510656161631501" + }, + { + "0": "0.510660820291774" + }, + { + "0": "0.510650695527908" + }, + { + "0": "0.510653802555144" + }, + { + "0": "0.510661973872608" + }, + { + "0": "0.510658002585736" + }, + { + "0": "0.510659427138213" + }, + { + "0": "0.510659242027832" + }, + { + "0": "0.510654426555183" + }, + { + "0": "0.510655866746292" + }, + { + "0": "0.510660579517644" + }, + { + "0": "0.510656302579088" + }, + { + "0": "0.510658852469992" + }, + { + "0": "0.510657189110654" + }, + { + "0": "0.510655447620679" + }, + { + "0": "0.509598238883307" + }, + { + "0": "0.509603421011183" + }, + { + "0": "0.509600055760266" + }, + { + "0": "0.509598390893697" + }, + { + "0": "0.509600607196684" + }, + { + "0": "0.509600851796493" + }, + { + "0": "0.509600668959653" + }, + { + "0": "0.50959984106307" + }, + { + "0": "0.509605675354215" + }, + { + "0": "0.509597056748501" + }, + { + "0": "0.509597170175881" + }, + { + "0": "0.509603715658249" + }, + { + "0": "0.509595210518422" + }, + { + "0": "0.509595570275319" + }, + { + "0": "0.509597936542962" + }, + { + "0": "0.509598033321074" + }, + { + "0": "0.509600118616357" + }, + { + "0": "0.509603862003527" + }, + { + "0": "0.509597944509331" + }, + { + "0": "0.50959779034732" + }, + { + "0": "0.509600889015422" + }, + { + "0": "0.509602312148177" + }, + { + "0": "0.509601785202596" + }, + { + "0": "0.509601715059017" + }, + { + "0": "0.509598492939351" + }, + { + "0": "0.509601098201773" + }, + { + "0": "0.509595984579355" + }, + { + "0": "0.509599943719548" + }, + { + "0": "0.511718640358932" + }, + { + "0": "0.511721293404093" + }, + { + "0": "0.511714823256292" + }, + { + "0": "0.511716680287403" + }, + { + "0": "0.511714072740016" + }, + { + "0": "0.511723257521642" + }, + { + "0": "0.511719190609408" + }, + { + "0": "0.511721424497669" + }, + { + "0": "0.511713158628731" + }, + { + "0": "0.511717004669725" + }, + { + "0": "0.511718261364799" + }, + { + "0": "0.511714490198739" + }, + { + "0": "0.511716092967696" + }, + { + "0": "0.511717664831893" + }, + { + "0": "0.51172018442726" + }, + { + "0": "0.511717986502592" + }, + { + "0": "0.511708614235962" + }, + { + "0": "0.511718155417737" + }, + { + "0": "0.511714150664816" + }, + { + "0": "0.511716300073184" + }, + { + "0": "0.511714914311282" + }, + { + "0": "0.511713337492137" + }, + { + "0": "0.511711872589967" + }, + { + "0": "0.511719589555965" + }, + { + "0": "0.50748104986975" + }, + { + "0": "0.506420601251274" + }, + { + "0": "0.514894965020657" + }, + { + "0": "0.508539590379447" + }, + { + "0": "0.508541736142853" + }, + { + "0": "0.50853748105179" + }, + { + "0": "0.508536129454372" + }, + { + "0": "0.506421485465965" + }, + { + "0": "0.506425154634883" + }, + { + "0": "0.506421850050294" + }, + { + "0": "0.507480804911058" + }, + { + "0": "0.50748021979755" + }, + { + "0": "0.505362560639733" + }, + { + "0": "0.513834492407989" + }, + { + "0": "0.508541848983502" + }, + { + "0": "0.512775803788124" + }, + { + "0": "0.506423234417213" + }, + { + "0": "0.508539814258986" + }, + { + "0": "0.507482141052522" + }, + { + "0": "0.507476902977134" + }, + { + "0": "0.506422973430994" + }, + { + "0": "0.507484424150563" + }, + { + "0": "0.507479284780286" + }, + { + "0": "0.507482346627564" + }, + { + "0": "0.512776180354397" + }, + { + "0": "0.513832755827794" + }, + { + "0": "0.508542869163939" + }, + { + "0": "0.506421846801544" + }, + { + "0": "0.50536277285204" + }, + { + "0": "0.512776145921464" + }, + { + "0": "0.50641600430489" + }, + { + "0": "0.508536938271797" + }, + { + "0": "0.508533261566474" + }, + { + "0": "0.503245795127373" + }, + { + "0": "0.506420330189806" + }, + { + "0": "0.506420924849214" + }, + { + "0": "0.508539548192953" + }, + { + "0": "0.506423147971046" + }, + { + "0": "0.506421939229284" + }, + { + "0": "0.512773447928959" + }, + { + "0": "0.51277938584098" + }, + { + "0": "0.505363439385179" + }, + { + "0": "0.512772723657805" + }, + { + "0": "0.506423910978962" + }, + { + "0": "0.50747813335892" + }, + { + "0": "0.50642491185225" + }, + { + "0": "0.508538201515034" + }, + { + "0": "0.507484764037338" + }, + { + "0": "0.508537169484166" + }, + { + "0": "0.50854531403044" + }, + { + "0": "0.505365381098891" + }, + { + "0": "0.506418909699589" + }, + { + "0": "0.507483687556422" + }, + { + "0": "0.512776611914068" + }, + { + "0": "0.50748118732105" + }, + { + "0": "0.507480173527308" + }, + { + "0": "0.506420251023195" + }, + { + "0": "0.512779278344294" + }, + { + "0": "0.507479492304956" + }, + { + "0": "0.50748025703822" + }, + { + "0": "0.508540201563728" + }, + { + "0": "0.504302942911736" + }, + { + "0": "0.505361282084173" + }, + { + "0": "0.508538067799238" + }, + { + "0": "0.506421027797734" + }, + { + "0": "0.508539862255863" + }, + { + "0": "0.512777379286143" + }, + { + "0": "0.506421269435233" + }, + { + "0": "0.506416739659805" + }, + { + "0": "0.507480844622717" + }, + { + "0": "0.512774516911944" + }, + { + "0": "0.506422435973868" + }, + { + "0": "0.507489873331206" + }, + { + "0": "0.507480853345093" + }, + { + "0": "0.506418761590426" + }, + { + "0": "0.506418618183561" + }, + { + "0": "0.507471538421065" + }, + { + "0": "0.506420918645815" + }, + { + "0": "0.508540754057136" + }, + { + "0": "0.507477434952963" + }, + { + "0": "0.508535362049541" + }, + { + "0": "0.513836334030174" + }, + { + "0": "0.507481280124487" + }, + { + "0": "0.508538860064566" + }, + { + "0": "0.507476903777637" + }, + { + "0": "0.508539993274855" + }, + { + "0": "0.508543184761181" + }, + { + "0": "0.513838686989652" + }, + { + "0": "0.507484864820804" + }, + { + "0": "0.515954571033361" + }, + { + "0": "0.505362267319997" + }, + { + "0": "0.508541505979483" + }, + { + "0": "0.50747874026264" + }, + { + "0": "0.508537839201415" + }, + { + "0": "0.507480473207016" + }, + { + "0": "0.505358060818403" + }, + { + "0": "0.512773117516421" + }, + { + "0": "0.512774034373191" + }, + { + "0": "0.508535631631287" + }, + { + "0": "0.512782090655272" + }, + { + "0": "0.504304482219322" + }, + { + "0": "0.507480441432136" + }, + { + "0": "0.514894283911991" + }, + { + "0": "0.512776847988121" + }, + { + "0": "0.50748193685292" + }, + { + "0": "0.508538607534032" + }, + { + "0": "0.508545416790971" + }, + { + "0": "0.508540578684679" + }, + { + "0": "0.512765453633483" + }, + { + "0": "0.512773638764101" + }, + { + "0": "0.512774914037007" + }, + { + "0": "0.507481148255501" + }, + { + "0": "0.512779296376373" + }, + { + "0": "0.508545074756113" + }, + { + "0": "0.513840282492784" + }, + { + "0": "0.505362176480269" + }, + { + "0": "0.505368211360847" + }, + { + "0": "0.509602968177043" + }, + { + "0": "0.509606467108952" + }, + { + "0": "0.510668231787842" + }, + { + "0": "0.504308152259706" + }, + { + "0": "0.505367139240497" + }, + { + "0": "0.509607274589227" + }, + { + "0": "0.510663165929627" + }, + { + "0": "0.511728286182822" + }, + { + "0": "0.509606040323924" + }, + { + "0": "0.505369181956381" + }, + { + "0": "0.50960669612096" + }, + { + "0": "0.50536843533146" + }, + { + "0": "0.502189699534779" + }, + { + "0": "0.511725648611514" + }, + { + "0": "0.509611611077322" + }, + { + "0": "0.505362762113277" + }, + { + "0": "0.505368260939692" + }, + { + "0": "0.50960337842295" + }, + { + "0": "0.510667238172487" + }, + { + "0": "0.505369276305544" + }, + { + "0": "0.505371477060717" + }, + { + "0": "0.504310064572556" + }, + { + "0": "0.509605415785031" + }, + { + "0": "0.509607239026731" + }, + { + "0": "0.509602918935297" + }, + { + "0": "0.505369800410485" + }, + { + "0": "0.502189565415855" + }, + { + "0": "0.509605004494087" + }, + { + "0": "0.509606523181216" + }, + { + "0": "0.50536710539102" + }, + { + "0": "0.522306983730625" + }, + { + "0": "0.505372594995342" + }, + { + "0": "0.503250245676799" + }, + { + "0": "0.509606825450647" + }, + { + "0": "0.505365667170538" + }, + { + "0": "0.505367163061813" + }, + { + "0": "0.510668591077314" + }, + { + "0": "0.512782860984371" + }, + { + "0": "0.505369165538948" + }, + { + "0": "0.505367516746819" + }, + { + "0": "0.509601922579384" + }, + { + "0": "0.505370359229225" + }, + { + "0": "0.509606669664093" + }, + { + "0": "0.505368819132642" + }, + { + "0": "0.509602384172659" + }, + { + "0": "0.510651385651757" + }, + { + "0": "0.50430683631927" + }, + { + "0": "0.505368769275095" + }, + { + "0": "0.510666121226945" + }, + { + "0": "0.510666960774519" + }, + { + "0": "0.510666744793296" + }, + { + "0": "0.505367268303868" + }, + { + "0": "0.505369762857648" + }, + { + "0": "0.509608581311545" + }, + { + "0": "0.505369686282759" + }, + { + "0": "0.505367426520799" + }, + { + "0": "0.505365955825703" + }, + { + "0": "0.505364053006304" + }, + { + "0": "0.505366780052426" + }, + { + "0": "0.5053645281696" + }, + { + "0": "0.509604959186188" + }, + { + "0": "0.509605028339023" + }, + { + "0": "0.503250973771122" + }, + { + "0": "0.511723451329848" + }, + { + "0": "0.509609919389758" + }, + { + "0": "0.50960131170298" + }, + { + "0": "0.505369207106483" + }, + { + "0": "0.505364749021427" + }, + { + "0": "0.5032495891595" + }, + { + "0": "0.505370637493341" + }, + { + "0": "0.509606949981024" + }, + { + "0": "0.504307753939016" + }, + { + "0": "0.505365113801687" + }, + { + "0": "0.505366245840288" + }, + { + "0": "0.510650228381092" + }, + { + "0": "0.507484117891863" + }, + { + "0": "0.507487663699768" + }, + { + "0": "0.5074870721882" + }, + { + "0": "0.507487057918917" + }, + { + "0": "0.507489307857281" + }, + { + "0": "0.507482661319975" + }, + { + "0": "0.507484946134946" + }, + { + "0": "0.507484206465864" + }, + { + "0": "0.507485595680453" + }, + { + "0": "0.507488977112705" + }, + { + "0": "0.50748542082926" + }, + { + "0": "0.507485404396969" + }, + { + "0": "0.507488006426015" + }, + { + "0": "0.507487565709179" + }, + { + "0": "0.507489294838673" + }, + { + "0": "0.507484894676282" + }, + { + "0": "0.507487398630697" + }, + { + "0": "0.507483134232836" + }, + { + "0": "0.507483134232836" + }, + { + "0": "0.507489748092062" + }, + { + "0": "0.507486311077762" + }, + { + "0": "0.507482033030027" + }, + { + "0": "0.507486428198489" + }, + { + "0": "0.507475151340733" + }, + { + "0": "0.507483816236982" + }, + { + "0": "0.50748841743561" + }, + { + "0": "0.507484324511501" + }, + { + "0": "0.507491995958042" + }, + { + "0": "0.507490042833727" + }, + { + "0": "0.507485972404151" + }, + { + "0": "0.507488631686983" + }, + { + "0": "0.507483859372958" + }, + { + "0": "0.50748846499401" + }, + { + "0": "0.507487200018847" + }, + { + "0": "0.507484821884364" + }, + { + "0": "0.507489045763489" + }, + { + "0": "0.507490382495961" + }, + { + "0": "0.507487443384717" + }, + { + "0": "0.507486982903496" + }, + { + "0": "0.507486533558477" + }, + { + "0": "0.507488697749141" + }, + { + "0": "0.507484510192253" + }, + { + "0": "0.507488306553616" + }, + { + "0": "0.507486321461338" + }, + { + "0": "0.507488422932967" + }, + { + "0": "0.507484846543442" + }, + { + "0": "0.507480980723842" + }, + { + "0": "0.507488269350657" + }, + { + "0": "0.507482434202145" + }, + { + "0": "0.507483847797393" + }, + { + "0": "0.508549797330151" + }, + { + "0": "0.508543124201619" + }, + { + "0": "0.508544113968392" + }, + { + "0": "0.508544432009632" + }, + { + "0": "0.508547112774934" + }, + { + "0": "0.508547448987356" + }, + { + "0": "0.508543058437119" + }, + { + "0": "0.508547648791286" + }, + { + "0": "0.508544513852988" + }, + { + "0": "0.508547786846393" + }, + { + "0": "0.508546922870221" + }, + { + "0": "0.508544184531774" + }, + { + "0": "0.508542025757301" + }, + { + "0": "0.508541151066258" + }, + { + "0": "0.508546269769738" + }, + { + "0": "0.508545299627396" + }, + { + "0": "0.508543771475073" + }, + { + "0": "0.508546848267848" + }, + { + "0": "0.508546304130933" + }, + { + "0": "0.508544035624261" + }, + { + "0": "0.508546968777949" + }, + { + "0": "0.508542865897311" + }, + { + "0": "0.508544675012382" + }, + { + "0": "0.508547709369079" + }, + { + "0": "0.508542778093506" + }, + { + "0": "0.508545124329106" + }, + { + "0": "0.50854191252731" + }, + { + "0": "0.508547357005476" + }, + { + "0": "0.508544316734074" + }, + { + "0": "0.508549661741037" + }, + { + "0": "0.50854767409298" + }, + { + "0": "0.508546445069091" + }, + { + "0": "0.508546676776325" + }, + { + "0": "0.50854387271959" + }, + { + "0": "0.508543759926814" + }, + { + "0": "0.508545373352983" + }, + { + "0": "0.50854473195225" + }, + { + "0": "0.50854319435059" + }, + { + "0": "0.508545355640534" + }, + { + "0": "0.508546372785077" + }, + { + "0": "0.508542969351161" + }, + { + "0": "0.508546650381162" + }, + { + "0": "0.506425590347955" + }, + { + "0": "0.506425474242243" + }, + { + "0": "0.506427073562968" + }, + { + "0": "0.506426883853238" + }, + { + "0": "0.506430138121489" + }, + { + "0": "0.50643051615639" + }, + { + "0": "0.506425684426234" + }, + { + "0": "0.506427225193217" + }, + { + "0": "0.506426902398269" + }, + { + "0": "0.506428817010967" + }, + { + "0": "0.506427007635062" + }, + { + "0": "0.506428445479521" + }, + { + "0": "0.506431244993482" + }, + { + "0": "0.506426572558073" + }, + { + "0": "0.506427248244258" + }, + { + "0": "0.506426711958836" + }, + { + "0": "0.506425614557978" + }, + { + "0": "0.506426492066072" + }, + { + "0": "0.506430005773774" + }, + { + "0": "0.506424702528655" + }, + { + "0": "0.50642725306101" + }, + { + "0": "0.506429922361747" + }, + { + "0": "0.506426599138602" + }, + { + "0": "0.506428759271288" + }, + { + "0": "0.506426414311936" + }, + { + "0": "0.506427509341324" + }, + { + "0": "0.506426588345018" + }, + { + "0": "0.506425651601715" + }, + { + "0": "0.506430068248302" + }, + { + "0": "0.506426932533879" + }, + { + "0": "0.506426702027864" + }, + { + "0": "0.506424457487906" + }, + { + "0": "0.506424920938979" + }, + { + "0": "0.506429467041545" + }, + { + "0": "0.506428524775514" + }, + { + "0": "0.50643179740781" + }, + { + "0": "0.506425670405676" + }, + { + "0": "0.506428912385829" + }, + { + "0": "0.506426656845748" + }, + { + "0": "0.506425206207749" + }, + { + "0": "0.50642925270933" + }, + { + "0": "0.51171213056951" + }, + { + "0": "0.511714124255065" + }, + { + "0": "0.511712895597833" + }, + { + "0": "0.511712107893301" + }, + { + "0": "0.511711299869953" + }, + { + "0": "0.511717079735289" + }, + { + "0": "0.511711777986751" + }, + { + "0": "0.511713541187674" + }, + { + "0": "0.511712698462331" + }, + { + "0": "0.511698602927392" + }, + { + "0": "0.511712784244542" + }, + { + "0": "0.511709175296166" + }, + { + "0": "0.511697866090888" + }, + { + "0": "0.5117171862025" + }, + { + "0": "0.511712177397786" + }, + { + "0": "0.511708244740839" + }, + { + "0": "0.511714173361848" + }, + { + "0": "0.511714676187936" + }, + { + "0": "0.511717606286509" + }, + { + "0": "0.511714086072655" + }, + { + "0": "0.511710208813293" + }, + { + "0": "0.511711063230167" + }, + { + "0": "0.511708188587765" + }, + { + "0": "0.511711823975068" + }, + { + "0": "0.511712455708968" + }, + { + "0": "0.509592597796589" + }, + { + "0": "0.509593064178911" + }, + { + "0": "0.514887312870244" + }, + { + "0": "0.512769450594978" + }, + { + "0": "0.513832544723337" + }, + { + "0": "0.509593984620262" + }, + { + "0": "0.509593621098126" + }, + { + "0": "0.513831839353887" + }, + { + "0": "0.513829524866335" + }, + { + "0": "0.515949052621027" + }, + { + "0": "0.514886406930801" + }, + { + "0": "0.513828480793989" + }, + { + "0": "0.512771153197418" + }, + { + "0": "0.513827407629659" + }, + { + "0": "0.514887186506341" + }, + { + "0": "0.504298454289521" + }, + { + "0": "0.514893298087843" + }, + { + "0": "0.507482443835472" + }, + { + "0": "0.50959503464751" + }, + { + "0": "0.515959611234983" + }, + { + "0": "0.518064029086336" + }, + { + "0": "0.513832128908869" + }, + { + "0": "0.518059467037066" + }, + { + "0": "0.514880215974941" + }, + { + "0": "0.518070063120478" + }, + { + "0": "0.510649661296718" + }, + { + "0": "0.514887820181982" + }, + { + "0": "0.518072382897197" + }, + { + "0": "0.51383395937889" + }, + { + "0": "0.510649858138613" + }, + { + "0": "0.513833986101103" + }, + { + "0": "0.510657211553057" + }, + { + "0": "0.509587972898458" + }, + { + "0": "0.508532961793985" + }, + { + "0": "0.508536076436424" + }, + { + "0": "0.507474988707382" + }, + { + "0": "0.509591922602099" + }, + { + "0": "0.509596131149509" + }, + { + "0": "0.514886437688373" + }, + { + "0": "0.510652583474379" + }, + { + "0": "0.506416680296757" + }, + { + "0": "0.50959596415297" + }, + { + "0": "0.514889531578089" + }, + { + "0": "0.513835845588223" + }, + { + "0": "0.509597917749795" + }, + { + "0": "0.514889541669537" + }, + { + "0": "0.507476530419138" + }, + { + "0": "0.512766884412431" + }, + { + "0": "0.506413541301342" + }, + { + "0": "0.510647135731583" + }, + { + "0": "0.505359498270894" + }, + { + "0": "0.506416539980957" + }, + { + "0": "0.5085392867565" + }, + { + "0": "0.506418019352762" + }, + { + "0": "0.515928638898154" + }, + { + "0": "0.509594232675789" + }, + { + "0": "0.517013562133476" + }, + { + "0": "0.518062160102256" + }, + { + "0": "0.519126037753929" + }, + { + "0": "0.507474997887139" + }, + { + "0": "0.509593996295494" + }, + { + "0": "0.507477246436425" + }, + { + "0": "0.512770007698598" + }, + { + "0": "0.512768128216611" + }, + { + "0": "0.506416468908092" + }, + { + "0": "0.508535583055922" + }, + { + "0": "0.514887211622763" + }, + { + "0": "0.512776220527288" + }, + { + "0": "0.509596328164049" + }, + { + "0": "0.512770126560895" + }, + { + "0": "0.5127675673847" + }, + { + "0": "0.513830674498968" + }, + { + "0": "0.512774630507124" + }, + { + "0": "0.508535817571601" + }, + { + "0": "0.50641681969759" + }, + { + "0": "0.512768945157596" + }, + { + "0": "0.519128300850847" + }, + { + "0": "0.509590793732402" + }, + { + "0": "0.51065600762801" + }, + { + "0": "0.509592807774706" + }, + { + "0": "0.513833988833075" + }, + { + "0": "0.51489021105944" + }, + { + "0": "0.513829002441787" + }, + { + "0": "0.517003354987527" + }, + { + "0": "0.518068193845192" + }, + { + "0": "0.513830052866222" + }, + { + "0": "0.51701151963334" + }, + { + "0": "0.508523942903823" + }, + { + "0": "0.517009745941579" + }, + { + "0": "0.51383201843498" + }, + { + "0": "0.517004205099026" + }, + { + "0": "0.512763580409379" + }, + { + "0": "0.507477982335886" + }, + { + "0": "0.514884769979363" + }, + { + "0": "0.509597654580882" + }, + { + "0": "0.504302088423335" + }, + { + "0": "0.510653245264439" + }, + { + "0": "0.508530377199699" + }, + { + "0": "0.508532551819526" + }, + { + "0": "0.514885709480665" + }, + { + "0": "0.513830329426387" + }, + { + "0": "0.508535831933533" + }, + { + "0": "0.512774375229592" + }, + { + "0": "0.508532209977399" + }, + { + "0": "0.515953989721254" + }, + { + "0": "0.507476714273421" + }, + { + "0": "0.513830513435875" + }, + { + "0": "0.510642938236898" + }, + { + "0": "0.512779285708324" + }, + { + "0": "0.518066660438599" + }, + { + "0": "0.509594244165469" + }, + { + "0": "0.507474016693401" + }, + { + "0": "0.51277515345278" + }, + { + "0": "0.512769066381875" + }, + { + "0": "0.512777461834627" + }, + { + "0": "0.512765374808755" + }, + { + "0": "0.515945188524049" + }, + { + "0": "0.515944362138122" + }, + { + "0": "0.515949862201325" + }, + { + "0": "0.510651594519619" + }, + { + "0": "0.513833531943015" + }, + { + "0": "0.508535888583209" + }, + { + "0": "0.513835595163867" + }, + { + "0": "0.513837822683045" + }, + { + "0": "0.509596183954924" + }, + { + "0": "0.509593500449201" + }, + { + "0": "0.519125923345934" + }, + { + "0": "0.517011826167305" + }, + { + "0": "0.515950850037625" + }, + { + "0": "0.509598599750915" + }, + { + "0": "0.51065593333341" + }, + { + "0": "0.509595124317704" + }, + { + "0": "0.5043004085265" + }, + { + "0": "0.512770201830305" + }, + { + "0": "0.512770180837262" + }, + { + "0": "0.515938610187252" + }, + { + "0": "0.509594230122934" + }, + { + "0": "0.510657272427459" + }, + { + "0": "0.512771889467852" + }, + { + "0": "0.510654165627435" + }, + { + "0": "0.510652504934585" + }, + { + "0": "0.512770935633723" + }, + { + "0": "0.512762271916034" + }, + { + "0": "0.509586259269383" + }, + { + "0": "0.508529574308751" + }, + { + "0": "0.510645494885594" + }, + { + "0": "0.513821082616807" + }, + { + "0": "0.515942580866286" + }, + { + "0": "0.516996826644388" + }, + { + "0": "0.51170735998477" + }, + { + "0": "0.519116292279699" + }, + { + "0": "0.517005182894933" + }, + { + "0": "0.514881295677317" + }, + { + "0": "0.508530946867457" + }, + { + "0": "0.508532538103496" + }, + { + "0": "0.515940527148966" + }, + { + "0": "0.516997172243792" + }, + { + "0": "0.518058777657576" + }, + { + "0": "0.510646096995092" + }, + { + "0": "0.517000162466096" + }, + { + "0": "0.511708010754084" + }, + { + "0": "0.513822824813866" + }, + { + "0": "0.516997362670778" + }, + { + "0": "0.509590059528318" + }, + { + "0": "0.509590634051364" + }, + { + "0": "0.51276408761439" + }, + { + "0": "0.50747502832543" + }, + { + "0": "0.519122141637209" + }, + { + "0": "0.518062614851363" + }, + { + "0": "0.519121581627851" + }, + { + "0": "0.52018702631554" + }, + { + "0": "0.510647106516416" + }, + { + "0": "0.5180605746465" + }, + { + "0": "0.504294900449391" + }, + { + "0": "0.514885503289451" + }, + { + "0": "0.514883150565203" + }, + { + "0": "0.511707120481949" + }, + { + "0": "0.507471212909444" + }, + { + "0": "0.511714136419472" + }, + { + "0": "0.509586059507171" + }, + { + "0": "0.518063843976601" + }, + { + "0": "0.50535571761531" + }, + { + "0": "0.510646710076785" + }, + { + "0": "0.51065045638477" + }, + { + "0": "0.510654248205949" + }, + { + "0": "0.514880349234532" + }, + { + "0": "0.509588008941704" + }, + { + "0": "0.509590617726009" + }, + { + "0": "0.517006168778556" + }, + { + "0": "0.520176065957084" + }, + { + "0": "0.518054699098104" + }, + { + "0": "0.513827133991923" + }, + { + "0": "0.511706008679306" + }, + { + "0": "0.511702860907115" + }, + { + "0": "0.520172335794882" + }, + { + "0": "0.519122540718791" + }, + { + "0": "0.51594788065552" + }, + { + "0": "0.512772796063236" + }, + { + "0": "0.510652292599005" + }, + { + "0": "0.515943935461018" + }, + { + "0": "0.521232570261789" + }, + { + "0": "0.515941077547644" + }, + { + "0": "0.508530363423892" + }, + { + "0": "0.518064876560536" + }, + { + "0": "0.519115010636613" + }, + { + "0": "0.514884422912962" + }, + { + "0": "0.510644110883057" + }, + { + "0": "0.514888009721898" + }, + { + "0": "0.510647704220865" + }, + { + "0": "0.511707973935286" + }, + { + "0": "0.518064743332891" + }, + { + "0": "0.5169996484307" + }, + { + "0": "0.519117455214297" + }, + { + "0": "0.513823597128542" + }, + { + "0": "0.517003814040554" + }, + { + "0": "0.51276359378166" + }, + { + "0": "0.512759707932174" + }, + { + "0": "0.508532755428319" + }, + { + "0": "0.508531192217984" + }, + { + "0": "0.514884210426502" + }, + { + "0": "0.5138189617498" + }, + { + "0": "0.507472478474189" + }, + { + "0": "0.508535138904226" + }, + { + "0": "0.514885719014872" + }, + { + "0": "0.515940712405087" + }, + { + "0": "0.519115314928906" + }, + { + "0": "0.520175205876854" + }, + { + "0": "0.507464911132089" + }, + { + "0": "0.515944455674662" + }, + { + "0": "0.519116255912117" + }, + { + "0": "0.516995791313372" + }, + { + "0": "0.513828321025646" + }, + { + "0": "0.518062147061251" + }, + { + "0": "0.514883717553929" + }, + { + "0": "0.511693132244092" + }, + { + "0": "0.512750239588293" + }, + { + "0": "0.515942019087786" + }, + { + "0": "0.516992510771565" + }, + { + "0": "0.510648059324324" + }, + { + "0": "0.507474021857357" + }, + { + "0": "0.512767608617955" + }, + { + "0": "0.512765056705805" + }, + { + "0": "0.511708902126416" + }, + { + "0": "0.518067324815227" + }, + { + "0": "0.511709298218675" + }, + { + "0": "0.506412853781632" + }, + { + "0": "0.514883946151693" + }, + { + "0": "0.514886088884037" + }, + { + "0": "0.523355671810981" + }, + { + "0": "0.512764877982575" + }, + { + "0": "0.513829480460388" + }, + { + "0": "0.518055702630708" + }, + { + "0": "0.515943293111236" + }, + { + "0": "0.514879963392796" + }, + { + "0": "0.508528751189033" + }, + { + "0": "0.510646711984432" + }, + { + "0": "0.51488472661416" + }, + { + "0": "0.508531823730296" + }, + { + "0": "0.512764257106691" + }, + { + "0": "0.520182515668324" + }, + { + "0": "0.515943802699906" + }, + { + "0": "0.519127824873764" + }, + { + "0": "0.514882885486968" + }, + { + "0": "0.520182762946356" + }, + { + "0": "0.513826571525247" + }, + { + "0": "0.514886061716085" + }, + { + "0": "0.513826380321217" + }, + { + "0": "0.514887337596339" + }, + { + "0": "0.518056428049307" + }, + { + "0": "0.519116060208396" + }, + { + "0": "0.515940600649578" + }, + { + "0": "0.506414474586165" + }, + { + "0": "0.518050887524366" + }, + { + "0": "0.513825780837404" + }, + { + "0": "0.519116525963138" + }, + { + "0": "0.516997799454507" + }, + { + "0": "0.516996909224792" + }, + { + "0": "0.512765250657903" + }, + { + "0": "0.517001523072583" + }, + { + "0": "0.515939316224389" + }, + { + "0": "0.517002544064032" + }, + { + "0": "0.510648044599527" + }, + { + "0": "0.511704316775806" + }, + { + "0": "0.512765057175532" + }, + { + "0": "0.519123147829715" + }, + { + "0": "0.511709873991384" + }, + { + "0": "0.519125469866353" + }, + { + "0": "0.50959191746056" + }, + { + "0": "0.510650668300797" + }, + { + "0": "0.515947905678725" + }, + { + "0": "0.51805420307462" + }, + { + "0": "0.520174795978123" + }, + { + "0": "0.50535201472784" + }, + { + "0": "0.511711895057472" + }, + { + "0": "0.515938040885975" + }, + { + "0": "0.522297086194587" + }, + { + "0": "0.523354182349885" + }, + { + "0": "0.519116817441938" + }, + { + "0": "0.511704071455545" + }, + { + "0": "0.509590432177686" + }, + { + "0": "0.51276786262984" + }, + { + "0": "0.517001021779134" + }, + { + "0": "0.511704210030209" + }, + { + "0": "0.517004518986474" + }, + { + "0": "0.521229764942907" + }, + { + "0": "0.51383044536979" + }, + { + "0": "0.509588415764787" + }, + { + "0": "0.50959101245339" + }, + { + "0": "0.511712899694189" + }, + { + "0": "0.514889913259326" + }, + { + "0": "0.512770823710947" + }, + { + "0": "0.515939519519442" + }, + { + "0": "0.512767076520687" + }, + { + "0": "0.511708679175722" + }, + { + "0": "0.512776689140339" + }, + { + "0": "0.513826236102153" + }, + { + "0": "0.511711391082696" + }, + { + "0": "0.517007543190566" + }, + { + "0": "0.509589089859737" + }, + { + "0": "0.512769585928074" + }, + { + "0": "0.510652515370563" + }, + { + "0": "0.509598484528579" + }, + { + "0": "0.515950583697395" + }, + { + "0": "0.518066606349355" + }, + { + "0": "0.512769144829267" + }, + { + "0": "0.513826586681148" + }, + { + "0": "0.512762430898525" + }, + { + "0": "0.515945607477443" + }, + { + "0": "0.518059769007258" + }, + { + "0": "0.513827491591341" + }, + { + "0": "0.520182999806599" + }, + { + "0": "0.514884245724807" + }, + { + "0": "0.514886962333992" + }, + { + "0": "0.516081231895741" + }, + { + "0": "0.515940227500241" + }, + { + "0": "0.51488791285291" + }, + { + "0": "0.513831466222826" + }, + { + "0": "0.516995067462628" + }, + { + "0": "0.507473508340179" + }, + { + "0": "0.509592704355579" + }, + { + "0": "0.517007301246174" + }, + { + "0": "0.513826286931064" + }, + { + "0": "0.514885978955344" + }, + { + "0": "0.512766089926306" + }, + { + "0": "0.515948119808599" + }, + { + "0": "0.51489339893196" + }, + { + "0": "0.510654651658954" + }, + { + "0": "0.517003338895332" + }, + { + "0": "0.515950660535105" + }, + { + "0": "0.511712021038482" + }, + { + "0": "0.514885834151116" + }, + { + "0": "0.512775339088198" + }, + { + "0": "0.506414727511218" + }, + { + "0": "0.513830685558309" + }, + { + "0": "0.518065752326836" + }, + { + "0": "0.512769501946692" + }, + { + "0": "0.51171028398038" + }, + { + "0": "0.513821227738885" + }, + { + "0": "0.51488756214876" + }, + { + "0": "0.510651580089781" + }, + { + "0": "0.510652665236007" + }, + { + "0": "0.514883423334464" + }, + { + "0": "0.513824312163582" + }, + { + "0": "0.513820935256611" + }, + { + "0": "0.509596323035395" + }, + { + "0": "0.517011195271264" + }, + { + "0": "0.511716636190302" + }, + { + "0": "0.51700398486091" + }, + { + "0": "0.510654041680911" + }, + { + "0": "0.510642599157821" + }, + { + "0": "0.509590321207746" + }, + { + "0": "0.513828655584906" + }, + { + "0": "0.50853557064872" + }, + { + "0": "0.513824163253311" + }, + { + "0": "0.511708137449628" + }, + { + "0": "0.50747636766605" + }, + { + "0": "0.519118417615062" + }, + { + "0": "0.511708102384138" + }, + { + "0": "0.511709455296707" + }, + { + "0": "0.517002418705811" + }, + { + "0": "0.511707627977625" + }, + { + "0": "0.51276716527979" + }, + { + "0": "0.514889607807226" + }, + { + "0": "0.512765578413707" + }, + { + "0": "0.516999926912186" + }, + { + "0": "0.513823705103824" + }, + { + "0": "0.506416029050493" + }, + { + "0": "0.507473524422268" + }, + { + "0": "0.5138365275481" + }, + { + "0": "0.512774114260111" + }, + { + "0": "0.512768312890078" + }, + { + "0": "0.518068214235009" + }, + { + "0": "0.518060928149073" + }, + { + "0": "0.518059536490941" + }, + { + "0": "0.511713442986105" + }, + { + "0": "0.513827865945884" + }, + { + "0": "0.507476710092803" + }, + { + "0": "0.51595124087925" + }, + { + "0": "0.517007511532568" + }, + { + "0": "0.51382189552242" + }, + { + "0": "0.509580472006391" + }, + { + "0": "0.511709443190303" + }, + { + "0": "0.513831409680964" + }, + { + "0": "0.51595206370634" + }, + { + "0": "0.520184064452575" + }, + { + "0": "0.506413180946132" + }, + { + "0": "0.514886109523853" + }, + { + "0": "0.517012291658916" + }, + { + "0": "0.519114413761664" + }, + { + "0": "0.511712173634157" + }, + { + "0": "0.509594145814312" + }, + { + "0": "0.514885208751074" + }, + { + "0": "0.512766775206534" + }, + { + "0": "0.506418041489432" + }, + { + "0": "0.518068082121594" + }, + { + "0": "0.51595092261585" + }, + { + "0": "0.513825670808316" + }, + { + "0": "0.51277121540459" + }, + { + "0": "0.511712637448416" + }, + { + "0": "0.507474535631299" + }, + { + "0": "0.509594337891219" + }, + { + "0": "0.509593127648177" + }, + { + "0": "0.515943375854099" + }, + { + "0": "0.513827700375689" + }, + { + "0": "0.509589510456573" + }, + { + "0": "0.514887259137884" + }, + { + "0": "0.512774129627248" + }, + { + "0": "0.517004889011423" + }, + { + "0": "0.509592187630333" + }, + { + "0": "0.513829256334119" + }, + { + "0": "0.509592989814372" + }, + { + "0": "0.519123327687488" + }, + { + "0": "0.513829903509668" + }, + { + "0": "0.518067614898409" + }, + { + "0": "0.510655701880579" + }, + { + "0": "0.508531934922547" + }, + { + "0": "0.51911592342753" + }, + { + "0": "0.514890719492399" + }, + { + "0": "0.519121877749978" + }, + { + "0": "0.513835368016661" + }, + { + "0": "0.51276958710976" + }, + { + "0": "0.513823928100386" + }, + { + "0": "0.511708346191459" + }, + { + "0": "0.510650847195475" + }, + { + "0": "0.515946547507543" + }, + { + "0": "0.513822347441741" + }, + { + "0": "0.5148891238191" + }, + { + "0": "0.517009059687351" + }, + { + "0": "0.512768142618749" + }, + { + "0": "0.512767778945486" + }, + { + "0": "0.515949146760655" + }, + { + "0": "0.512767381354405" + }, + { + "0": "0.512769103269842" + }, + { + "0": "0.515950125208819" + }, + { + "0": "0.518063210214304" + }, + { + "0": "0.51594226798178" + }, + { + "0": "0.51170997820103" + }, + { + "0": "0.513828683476998" + }, + { + "0": "0.519126683056894" + }, + { + "0": "0.515945703996588" + }, + { + "0": "0.511707481430091" + }, + { + "0": "0.515942347597889" + }, + { + "0": "0.509593926324571" + }, + { + "0": "0.50431197410524" + }, + { + "0": "0.508545567396668" + }, + { + "0": "0.504309179988407" + }, + { + "0": "0.504310113825802" + }, + { + "0": "0.502191312839864" + }, + { + "0": "0.50113354956581" + }, + { + "0": "0.509603798141265" + }, + { + "0": "0.508548814515626" + }, + { + "0": "0.503252282395766" + }, + { + "0": "0.504310806083626" + }, + { + "0": "0.508552562934661" + }, + { + "0": "0.504311613131792" + }, + { + "0": "0.508545928218972" + }, + { + "0": "0.509606336879381" + }, + { + "0": "0.508549028494778" + }, + { + "0": "0.504310447361076" + }, + { + "0": "0.508549919133929" + }, + { + "0": "0.504311239486394" + }, + { + "0": "0.504310513109015" + }, + { + "0": "0.50854735488576" + }, + { + "0": "0.504309614095205" + }, + { + "0": "0.502192918927325" + }, + { + "0": "0.508548100002057" + }, + { + "0": "0.508550372793149" + }, + { + "0": "0.508546562308628" + }, + { + "0": "0.504310331367551" + }, + { + "0": "0.503250189548813" + }, + { + "0": "0.504309265723909" + }, + { + "0": "0.503253325460308" + }, + { + "0": "0.509603917362551" + }, + { + "0": "0.503252214553149" + }, + { + "0": "0.509612505693428" + }, + { + "0": "0.504308084044124" + }, + { + "0": "0.508549070939264" + }, + { + "0": "0.503245855583855" + }, + { + "0": "0.508545544556322" + }, + { + "0": "0.502193566757497" + }, + { + "0": "0.504310581776377" + }, + { + "0": "0.508545678952203" + }, + { + "0": "0.503252536152058" + }, + { + "0": "0.504310173842832" + }, + { + "0": "0.504312594254954" + }, + { + "0": "0.508545018439118" + }, + { + "0": "0.504309273650104" + }, + { + "0": "0.503250838382402" + }, + { + "0": "0.504308797917344" + }, + { + "0": "0.503251378405009" + }, + { + "0": "0.508545472399588" + }, + { + "0": "0.504310836389826" + }, + { + "0": "0.508547698804722" + }, + { + "0": "0.508547770428222" + }, + { + "0": "0.508545472399588" + }, + { + "0": "0.510668557838454" + }, + { + "0": "0.501131216202499" + }, + { + "0": "0.504313157708385" + }, + { + "0": "0.50854611627525" + }, + { + "0": "0.508546462523996" + }, + { + "0": "0.508551508789003" + }, + { + "0": "0.508550144632465" + }, + { + "0": "0.507488610627221" + }, + { + "0": "0.507486991796954" + }, + { + "0": "0.507488479605123" + }, + { + "0": "0.507488485078877" + }, + { + "0": "0.507487709270857" + }, + { + "0": "0.507487139595538" + }, + { + "0": "0.507489171856939" + }, + { + "0": "0.507487595061597" + }, + { + "0": "0.507485361062799" + }, + { + "0": "0.507486664898375" + }, + { + "0": "0.507489538712277" + }, + { + "0": "0.507489824300109" + }, + { + "0": "0.507490603356022" + }, + { + "0": "0.507493342796021" + }, + { + "0": "0.507489155025085" + }, + { + "0": "0.507491023035634" + }, + { + "0": "0.50748730524943" + }, + { + "0": "0.507490384046981" + }, + { + "0": "0.507488333727166" + }, + { + "0": "0.507487794120289" + }, + { + "0": "0.5074901472828" + }, + { + "0": "0.507490435338773" + }, + { + "0": "0.507490099548735" + }, + { + "0": "0.507491315792665" + }, + { + "0": "0.50748702776489" + }, + { + "0": "0.507484307326877" + }, + { + "0": "0.507487929931034" + }, + { + "0": "0.50748951457752" + }, + { + "0": "0.507491510403775" + }, + { + "0": "0.507487586079737" + }, + { + "0": "0.505369289366592" + }, + { + "0": "0.505367634675986" + }, + { + "0": "0.50537195662105" + }, + { + "0": "0.505369253410066" + }, + { + "0": "0.505369719523265" + }, + { + "0": "0.50536739290541" + }, + { + "0": "0.505369437950761" + }, + { + "0": "0.505372046015805" + }, + { + "0": "0.505367941748953" + }, + { + "0": "0.505370916114711" + }, + { + "0": "0.505371523015385" + }, + { + "0": "0.505368392579014" + }, + { + "0": "0.505373394606543" + }, + { + "0": "0.505368820836548" + }, + { + "0": "0.505371400057505" + }, + { + "0": "0.505368670347694" + }, + { + "0": "0.505370995792095" + }, + { + "0": "0.50537030079725" + }, + { + "0": "0.505363601804367" + }, + { + "0": "0.505366157577889" + }, + { + "0": "0.505366035893815" + }, + { + "0": "0.505371804009358" + }, + { + "0": "0.505367912334438" + }, + { + "0": "0.50536974183214" + }, + { + "0": "0.505367544520909" + }, + { + "0": "0.505372058600857" + }, + { + "0": "0.505411958460377" + }, + { + "0": "0.505371109480604" + }, + { + "0": "0.505369578505291" + }, + { + "0": "0.505367650631056" + }, + { + "0": "0.505368514008256" + }, + { + "0": "0.506430281051093" + }, + { + "0": "0.50642778246936" + }, + { + "0": "0.506426449469985" + }, + { + "0": "0.506431197012245" + }, + { + "0": "0.506428794166397" + }, + { + "0": "0.50643209176916" + }, + { + "0": "0.50643135158759" + }, + { + "0": "0.506428055602668" + }, + { + "0": "0.506428249581982" + }, + { + "0": "0.506430320940846" + }, + { + "0": "0.506428398345064" + }, + { + "0": "0.506424360093149" + }, + { + "0": "0.506431475730577" + }, + { + "0": "0.506430425598162" + }, + { + "0": "0.506432056690238" + }, + { + "0": "0.506430039729983" + }, + { + "0": "0.506426521829324" + }, + { + "0": "0.50642995693524" + }, + { + "0": "0.506429021318402" + }, + { + "0": "0.506426594963445" + }, + { + "0": "0.506429392817392" + }, + { + "0": "0.506427275819316" + }, + { + "0": "0.506426406892924" + }, + { + "0": "0.506428417876826" + }, + { + "0": "0.506427087873136" + }, + { + "0": "0.506428691423684" + }, + { + "0": "0.506431427188219" + }, + { + "0": "0.506431252208071" + }, + { + "0": "0.506433412349975" + }, + { + "0": "0.506431724641059" + }, + { + "0": "0.506429029765769" + }, + { + "0": "0.506428402933842" + }, + { + "0": "0.506426673160726" + }, + { + "0": "0.506430156880193" + }, + { + "0": "0.506430079535984" + }, + { + "0": "0.506428928902327" + }, + { + "0": "0.506424546909449" + }, + { + "0": "0.506430926459644" + }, + { + "0": "0.506427803050853" + }, + { + "0": "0.506432500298044" + }, + { + "0": "0.506427531324951" + }, + { + "0": "0.511708677891079" + }, + { + "0": "0.525451039562482" + }, + { + "0": "0.511699918003609" + }, + { + "0": "0.516993856804342" + }, + { + "0": "0.511703226098808" + }, + { + "0": "0.513818775540512" + }, + { + "0": "0.520179724247255" + }, + { + "0": "0.512759037290015" + }, + { + "0": "0.510644131178559" + }, + { + "0": "0.520164682322086" + }, + { + "0": "0.509583398105524" + }, + { + "0": "0.52123017081587" + }, + { + "0": "0.513819332013777" + }, + { + "0": "0.510640904054675" + }, + { + "0": "0.523338789299855" + }, + { + "0": "0.513821549645058" + }, + { + "0": "0.513812598139345" + }, + { + "0": "0.518053789058794" + }, + { + "0": "0.520170604639673" + }, + { + "0": "0.516993308289762" + }, + { + "0": "0.507465097254231" + }, + { + "0": "0.52229423311332" + }, + { + "0": "0.515937751576017" + }, + { + "0": "0.515941816866799" + }, + { + "0": "0.519115135480828" + }, + { + "0": "0.51805547542653" + }, + { + "0": "0.518062233034445" + }, + { + "0": "0.519118562885551" + }, + { + "0": "0.506306979951509" + }, + { + "0": "0.522286108283628" + }, + { + "0": "0.512761660658199" + }, + { + "0": "0.515939675476783" + }, + { + "0": "0.50852422978447" + }, + { + "0": "0.51912014086989" + }, + { + "0": "0.520158492948644" + }, + { + "0": "0.520175846841029" + }, + { + "0": "0.514871329599684" + }, + { + "0": "0.512761406682398" + }, + { + "0": "0.519114659765868" + }, + { + "0": "0.518056021077434" + }, + { + "0": "0.511705890852606" + }, + { + "0": "0.514882134157674" + }, + { + "0": "0.522289610908211" + }, + { + "0": "0.515935683853164" + }, + { + "0": "0.524408195759518" + }, + { + "0": "0.522286395691756" + }, + { + "0": "0.506408735564103" + }, + { + "0": "0.508525510316688" + }, + { + "0": "0.513820182654448" + }, + { + "0": "0.516992173473978" + }, + { + "0": "0.516999752872926" + }, + { + "0": "0.512755629608178" + }, + { + "0": "0.511700630613854" + }, + { + "0": "0.510641511915144" + }, + { + "0": "0.511706666565175" + }, + { + "0": "0.520168538352935" + }, + { + "0": "0.519110797033164" + }, + { + "0": "0.515936494720409" + }, + { + "0": "0.522286564109553" + }, + { + "0": "0.521231232263359" + }, + { + "0": "0.515939644199065" + }, + { + "0": "0.515936421292234" + }, + { + "0": "0.514879501363201" + }, + { + "0": "0.512761682883938" + }, + { + "0": "0.506407714028534" + }, + { + "0": "0.511704783536301" + }, + { + "0": "0.514886213258916" + }, + { + "0": "0.515938134077592" + }, + { + "0": "0.522284009234953" + }, + { + "0": "0.51276367163448" + }, + { + "0": "0.520177900901425" + }, + { + "0": "0.523343621094092" + }, + { + "0": "0.519113801432841" + }, + { + "0": "0.51699847856622" + }, + { + "0": "0.520167459804009" + }, + { + "0": "0.514877340064584" + }, + { + "0": "0.514878200963541" + }, + { + "0": "0.51805422975272" + }, + { + "0": "0.519112554302334" + }, + { + "0": "0.5169980694832" + }, + { + "0": "0.51593969876909" + }, + { + "0": "0.521227714752909" + }, + { + "0": "0.506408753273748" + }, + { + "0": "0.513817289828744" + }, + { + "0": "0.515934249364328" + }, + { + "0": "0.522280258768557" + }, + { + "0": "0.518063493095835" + }, + { + "0": "0.51593572454497" + }, + { + "0": "0.51488299940105" + }, + { + "0": "0.515938688671793" + }, + { + "0": "0.511700468234146" + }, + { + "0": "0.514876023334926" + }, + { + "0": "0.518051761670903" + }, + { + "0": "0.525452065125691" + }, + { + "0": "0.523344084286902" + }, + { + "0": "0.518049133337851" + }, + { + "0": "0.523334307362787" + }, + { + "0": "0.512759648402565" + }, + { + "0": "0.514877090485088" + }, + { + "0": "0.507465462510435" + }, + { + "0": "0.513827464217151" + }, + { + "0": "0.520145078406107" + }, + { + "0": "0.513811597590118" + }, + { + "0": "0.520173438039746" + }, + { + "0": "0.519112032792642" + }, + { + "0": "0.523354109196546" + }, + { + "0": "0.520178871824453" + }, + { + "0": "0.512759005190184" + }, + { + "0": "0.510640696395244" + }, + { + "0": "0.514867249546791" + }, + { + "0": "0.523348356664686" + }, + { + "0": "0.514874258673907" + }, + { + "0": "0.521223055998328" + }, + { + "0": "0.511705939748749" + }, + { + "0": "0.518028796198434" + }, + { + "0": "0.519108925480537" + }, + { + "0": "0.523352431677518" + }, + { + "0": "0.511703213463028" + }, + { + "0": "0.508528972834101" + }, + { + "0": "0.51276117451264" + }, + { + "0": "0.515936286401268" + }, + { + "0": "0.52017076163391" + }, + { + "0": "0.523348913803358" + }, + { + "0": "0.520164144268235" + }, + { + "0": "0.515941616144955" + }, + { + "0": "0.520142591433575" + }, + { + "0": "0.51700285099183" + }, + { + "0": "0.51488521447869" + }, + { + "0": "0.509584980099194" + }, + { + "0": "0.520181876713145" + }, + { + "0": "0.52547020031797" + }, + { + "0": "0.51699500821077" + }, + { + "0": "0.519117963012702" + }, + { + "0": "0.521237338274125" + }, + { + "0": "0.519118515277891" + }, + { + "0": "0.513822844379081" + }, + { + "0": "0.512762236557772" + }, + { + "0": "0.521235520184443" + }, + { + "0": "0.523401008467104" + }, + { + "0": "0.519111875807912" + }, + { + "0": "0.518051671863595" + }, + { + "0": "0.521225512749692" + }, + { + "0": "0.521219268815903" + }, + { + "0": "0.522296644990076" + }, + { + "0": "0.515940080235953" + }, + { + "0": "0.517001122170459" + }, + { + "0": "0.512762427866195" + }, + { + "0": "0.522292367846293" + }, + { + "0": "0.513819957096817" + }, + { + "0": "0.513823038779199" + }, + { + "0": "0.512763136711414" + }, + { + "0": "0.514883506675261" + }, + { + "0": "0.51593886869511" + }, + { + "0": "0.521235592433861" + }, + { + "0": "0.519116296187272" + }, + { + "0": "0.51488777844586" + }, + { + "0": "0.521233554948016" + }, + { + "0": "0.516996525663227" + }, + { + "0": "0.515937845937975" + }, + { + "0": "0.50429113590706" + }, + { + "0": "0.519114813432364" + }, + { + "0": "0.512760806126081" + }, + { + "0": "0.518053992035936" + }, + { + "0": "0.513826966252505" + }, + { + "0": "0.513826723400067" + }, + { + "0": "0.521232276759662" + }, + { + "0": "0.51382473395384" + }, + { + "0": "0.518057114597952" + }, + { + "0": "0.521231301005636" + }, + { + "0": "0.514878156324671" + }, + { + "0": "0.52440913034464" + }, + { + "0": "0.518056570364089" + }, + { + "0": "0.51276668850814" + }, + { + "0": "0.51065088041001" + }, + { + "0": "0.512767905536945" + }, + { + "0": "0.522258712069483" + }, + { + "0": "0.511708776071527" + }, + { + "0": "0.524405060630233" + }, + { + "0": "0.511705970806546" + }, + { + "0": "0.51487985156338" + }, + { + "0": "0.514879994394407" + }, + { + "0": "0.524401703716169" + }, + { + "0": "0.514872097262202" + }, + { + "0": "0.523347987334758" + }, + { + "0": "0.519112459660444" + }, + { + "0": "0.520171292854344" + }, + { + "0": "0.512761460528825" + }, + { + "0": "0.519111329041308" + }, + { + "0": "0.52123832355972" + }, + { + "0": "0.518055637514297" + }, + { + "0": "0.512766894684847" + }, + { + "0": "0.513819461007482" + }, + { + "0": "0.519113120438672" + }, + { + "0": "0.51382063082385" + }, + { + "0": "0.520167555987462" + }, + { + "0": "0.52334371228352" + }, + { + "0": "0.510644865914656" + }, + { + "0": "0.519118211891026" + }, + { + "0": "0.507472527966401" + }, + { + "0": "0.519109548887849" + }, + { + "0": "0.521237076541084" + }, + { + "0": "0.511706093202493" + }, + { + "0": "0.512764759421066" + }, + { + "0": "0.515939879796623" + }, + { + "0": "0.512760650352565" + }, + { + "0": "0.51488163906376" + }, + { + "0": "0.510643604894407" + }, + { + "0": "0.512766488924977" + }, + { + "0": "0.519117695517531" + }, + { + "0": "0.519116848122437" + }, + { + "0": "0.510645354781618" + }, + { + "0": "0.518042787435063" + }, + { + "0": "0.518052917957686" + }, + { + "0": "0.513827129030171" + }, + { + "0": "0.514879180389796" + }, + { + "0": "0.513822636448298" + }, + { + "0": "0.513817118894317" + }, + { + "0": "0.520170257124632" + }, + { + "0": "0.522282470848952" + }, + { + "0": "0.515937636697777" + }, + { + "0": "0.513821091504256" + }, + { + "0": "0.519123044848093" + }, + { + "0": "0.520174602710157" + }, + { + "0": "0.518057576453853" + }, + { + "0": "0.512768317094134" + }, + { + "0": "0.51699629165339" + }, + { + "0": "0.511703096694382" + }, + { + "0": "0.521230390884655" + }, + { + "0": "0.522284657697035" + }, + { + "0": "0.522292561152018" + }, + { + "0": "0.519105972602" + }, + { + "0": "0.516992804411622" + }, + { + "0": "0.512763006327842" + }, + { + "0": "0.518059838355013" + }, + { + "0": "0.519090543787033" + }, + { + "0": "0.517000095770956" + }, + { + "0": "0.519113112228038" + }, + { + "0": "0.520170091087438" + }, + { + "0": "0.519106884718074" + }, + { + "0": "0.52123756350824" + }, + { + "0": "0.512760858856762" + }, + { + "0": "0.518055874367121" + }, + { + "0": "0.511706324108045" + }, + { + "0": "0.517003820029233" + }, + { + "0": "0.508530659137433" + }, + { + "0": "0.521235295870173" + }, + { + "0": "0.512764174754655" + }, + { + "0": "0.521233673142565" + }, + { + "0": "0.510644622853461" + }, + { + "0": "0.508528469754222" + }, + { + "0": "0.510647930545674" + }, + { + "0": "0.508528718625959" + }, + { + "0": "0.517004792121065" + }, + { + "0": "0.519126241368803" + }, + { + "0": "0.521231759519366" + }, + { + "0": "0.519108079535981" + }, + { + "0": "0.509580642834002" + }, + { + "0": "0.51170369217544" + }, + { + "0": "0.513820231568516" + }, + { + "0": "0.52441162200456" + }, + { + "0": "0.522297090976029" + }, + { + "0": "0.514881650171148" + }, + { + "0": "0.516995895016667" + }, + { + "0": "0.512761285926763" + }, + { + "0": "0.512763392497678" + }, + { + "0": "0.519109203758455" + }, + { + "0": "0.519119957307413" + }, + { + "0": "0.521232894164877" + }, + { + "0": "0.520182649232726" + }, + { + "0": "0.513817760227829" + }, + { + "0": "0.518055701389885" + }, + { + "0": "0.510645263563414" + }, + { + "0": "0.509573668066305" + }, + { + "0": "0.522285119785071" + }, + { + "0": "0.517002253615248" + }, + { + "0": "0.519109177292938" + }, + { + "0": "0.518056721502745" + }, + { + "0": "0.51699582557703" + }, + { + "0": "0.516998519994831" + }, + { + "0": "0.508528435926592" + }, + { + "0": "0.522288609352087" + }, + { + "0": "0.520168049338629" + }, + { + "0": "0.520174165074862" + }, + { + "0": "0.515936604586741" + }, + { + "0": "0.514886162521836" + }, + { + "0": "0.512767124056943" + }, + { + "0": "0.509585330817537" + }, + { + "0": "0.511709167845394" + }, + { + "0": "0.518061854028058" + }, + { + "0": "0.51594113299388" + }, + { + "0": "0.520179833734748" + }, + { + "0": "0.511702324620661" + }, + { + "0": "0.519114771960964" + }, + { + "0": "0.518054091931071" + }, + { + "0": "0.519120701940613" + }, + { + "0": "0.51805981866475" + }, + { + "0": "0.513822039563437" + }, + { + "0": "0.519111114078124" + }, + { + "0": "0.518053029191334" + }, + { + "0": "0.521232258876623" + }, + { + "0": "0.514884908398207" + }, + { + "0": "0.518062737343669" + }, + { + "0": "0.506411923562259" + }, + { + "0": "0.507490683876521" + }, + { + "0": "0.502193067042544" + }, + { + "0": "0.503252124491834" + }, + { + "0": "0.503251495850668" + }, + { + "0": "0.507485431216529" + }, + { + "0": "0.5021945678778" + }, + { + "0": "0.50325712692779" + }, + { + "0": "0.503255162266345" + }, + { + "0": "0.50325457659165" + }, + { + "0": "0.507492279508719" + }, + { + "0": "0.50113311499741" + }, + { + "0": "0.50325536876424" + }, + { + "0": "0.502197459521721" + }, + { + "0": "0.507493145544186" + }, + { + "0": "0.503254013622385" + }, + { + "0": "0.502194856408933" + }, + { + "0": "0.503250936318781" + }, + { + "0": "0.514855096269649" + }, + { + "0": "0.503254118872111" + }, + { + "0": "0.507493185371772" + }, + { + "0": "0.507489559365645" + }, + { + "0": "0.507492664110662" + }, + { + "0": "0.507491029159506" + }, + { + "0": "0.502194279069256" + }, + { + "0": "0.503247861423601" + }, + { + "0": "0.503248492922054" + }, + { + "0": "0.503253378257625" + }, + { + "0": "0.502193736127573" + }, + { + "0": "0.502194365232203" + }, + { + "0": "0.506435251810662" + }, + { + "0": "0.506430866132263" + }, + { + "0": "0.506431863511782" + }, + { + "0": "0.506434914068368" + }, + { + "0": "0.506429933370496" + }, + { + "0": "0.506430059501832" + }, + { + "0": "0.506431394587189" + }, + { + "0": "0.506430816933373" + }, + { + "0": "0.506433734790307" + }, + { + "0": "0.506429213207299" + }, + { + "0": "0.506430814196251" + }, + { + "0": "0.506433362382324" + }, + { + "0": "0.506428246012597" + }, + { + "0": "0.506431132643689" + }, + { + "0": "0.506434124967954" + }, + { + "0": "0.50643211887917" + }, + { + "0": "0.506426967355853" + }, + { + "0": "0.506433311826334" + }, + { + "0": "0.506433276516589" + }, + { + "0": "0.506428335434122" + }, + { + "0": "0.506429599245837" + }, + { + "0": "0.506431484429169" + }, + { + "0": "0.506431998945827" + }, + { + "0": "0.506429015420212" + }, + { + "0": "0.506430220591651" + }, + { + "0": "0.504314050072105" + }, + { + "0": "0.504314090373263" + }, + { + "0": "0.504311429660435" + }, + { + "0": "0.504312477707695" + }, + { + "0": "0.504315467218687" + }, + { + "0": "0.504312288792484" + }, + { + "0": "0.504314392347828" + }, + { + "0": "0.504312646787423" + }, + { + "0": "0.504313295932499" + }, + { + "0": "0.504314068880027" + }, + { + "0": "0.504315855447826" + }, + { + "0": "0.504313054592835" + }, + { + "0": "0.504313718146376" + }, + { + "0": "0.504317146944929" + }, + { + "0": "0.504314301232574" + }, + { + "0": "0.504314416656575" + }, + { + "0": "0.504314990240204" + }, + { + "0": "0.504312423114715" + }, + { + "0": "0.504311361821" + }, + { + "0": "0.504315244048988" + }, + { + "0": "0.504314230701727" + }, + { + "0": "0.504313156832505" + }, + { + "0": "0.504317490268111" + }, + { + "0": "0.504313914577621" + }, + { + "0": "0.504312446457858" + }, + { + "0": "0.504311904809132" + }, + { + "0": "0.504314430160394" + }, + { + "0": "0.504312972092997" + }, + { + "0": "0.504311587152392" + }, + { + "0": "0.505375768988465" + }, + { + "0": "0.50537234138574" + }, + { + "0": "0.505371427402751" + }, + { + "0": "0.50537469005728" + }, + { + "0": "0.505375285053656" + }, + { + "0": "0.505372157096844" + }, + { + "0": "0.505364864709199" + }, + { + "0": "0.505374186349927" + }, + { + "0": "0.5053752238512" + }, + { + "0": "0.505373270942249" + }, + { + "0": "0.505366079224034" + }, + { + "0": "0.505375135741035" + }, + { + "0": "0.505369183001784" + }, + { + "0": "0.505374537156673" + }, + { + "0": "0.505372530406056" + }, + { + "0": "0.505375982675769" + }, + { + "0": "0.505374680624807" + }, + { + "0": "0.505372656148484" + }, + { + "0": "0.505370956560003" + }, + { + "0": "0.50537217274744" + }, + { + "0": "0.505365005031954" + }, + { + "0": "0.505373942568994" + }, + { + "0": "0.505371883451573" + }, + { + "0": "0.505372944347331" + }, + { + "0": "0.505368667970889" + }, + { + "0": "0.50537251735051" + }, + { + "0": "0.50537438265503" + }, + { + "0": "0.505372431461441" + }, + { + "0": "0.505370197894747" + }, + { + "0": "0.505376599184131" + }, + { + "0": "0.505374213698371" + }, + { + "0": "0.505371741444651" + }, + { + "0": "0.505371095146749" + }, + { + "0": "0.505373052494706" + }, + { + "0": "0.505374048240136" + }, + { + "0": "0.505372560363047" + }, + { + "0": "0.505370462339249" + }, + { + "0": "0.505371425718542" + }, + { + "0": "0.505375397260207" + }, + { + "0": "0.505374166944916" + }, + { + "0": "0.505371026721362" + }, + { + "0": "0.525464165866639" + }, + { + "0": "0.521224210102315" + }, + { + "0": "0.527575035906504" + }, + { + "0": "0.520165090040905" + }, + { + "0": "0.519109098944629" + }, + { + "0": "0.520169108192578" + }, + { + "0": "0.513818074573602" + }, + { + "0": "0.519106415387682" + }, + { + "0": "0.507464762033817" + }, + { + "0": "0.523340316042561" + }, + { + "0": "0.522291393550245" + }, + { + "0": "0.523343933060334" + }, + { + "0": "0.509585673340265" + }, + { + "0": "0.516995800015602" + }, + { + "0": "0.51380018623045" + }, + { + "0": "0.512765658358808" + }, + { + "0": "0.518052003149472" + }, + { + "0": "0.514877641967477" + }, + { + "0": "0.522291907158811" + }, + { + "0": "0.522276290091888" + }, + { + "0": "0.523333170151372" + }, + { + "0": "0.519113943091463" + }, + { + "0": "0.52440193167231" + }, + { + "0": "0.519108320678218" + }, + { + "0": "0.520179446063762" + }, + { + "0": "0.512754538769685" + }, + { + "0": "0.520173590167774" + }, + { + "0": "0.516971261209391" + }, + { + "0": "0.522292350844452" + }, + { + "0": "0.514875021095775" + }, + { + "0": "0.521226198782116" + }, + { + "0": "0.519113609093742" + }, + { + "0": "0.518051655108922" + }, + { + "0": "0.51699899654553" + }, + { + "0": "0.518055460453816" + }, + { + "0": "0.514876698753109" + }, + { + "0": "0.509579347098762" + }, + { + "0": "0.51064313768918" + }, + { + "0": "0.529690044006254" + }, + { + "0": "0.516991530947668" + }, + { + "0": "0.515938001031367" + }, + { + "0": "0.512759808582981" + }, + { + "0": "0.522283942047446" + }, + { + "0": "0.523338103989284" + }, + { + "0": "0.515934337516798" + }, + { + "0": "0.511700179429755" + }, + { + "0": "0.51911614369219" + }, + { + "0": "0.514873456499836" + }, + { + "0": "0.522284097361564" + }, + { + "0": "0.520168094331028" + }, + { + "0": "0.519111727572619" + }, + { + "0": "0.51487166551473" + }, + { + "0": "0.520163035314919" + }, + { + "0": "0.523337113315858" + }, + { + "0": "0.518054337849879" + }, + { + "0": "0.520177536742522" + }, + { + "0": "0.522281818431982" + }, + { + "0": "0.523348654121699" + }, + { + "0": "0.512756658282343" + }, + { + "0": "0.508520663133364" + }, + { + "0": "0.509586041247439" + }, + { + "0": "0.511700810158573" + }, + { + "0": "0.522282678053792" + }, + { + "0": "0.521227834836792" + }, + { + "0": "0.515935296757327" + }, + { + "0": "0.519106370494412" + }, + { + "0": "0.522286383360721" + }, + { + "0": "0.513817575372621" + }, + { + "0": "0.512763633325715" + }, + { + "0": "0.51064251508277" + }, + { + "0": "0.510643288966952" + }, + { + "0": "0.51805869510188" + }, + { + "0": "0.504288118097123" + }, + { + "0": "0.520168035348115" + }, + { + "0": "0.527563786641157" + }, + { + "0": "0.524397439872698" + }, + { + "0": "0.525454565211191" + }, + { + "0": "0.513823837406361" + }, + { + "0": "0.525458693653056" + }, + { + "0": "0.520162368677098" + }, + { + "0": "0.516977756348367" + }, + { + "0": "0.516994860188437" + }, + { + "0": "0.520163015320433" + }, + { + "0": "0.516994234326452" + }, + { + "0": "0.518056095561641" + }, + { + "0": "0.511694876459346" + }, + { + "0": "0.512762131185248" + }, + { + "0": "0.526514459170019" + }, + { + "0": "0.521236569003187" + }, + { + "0": "0.519106429390137" + }, + { + "0": "0.511694217858292" + }, + { + "0": "0.522282613721541" + }, + { + "0": "0.528632061316899" + }, + { + "0": "0.519119095856932" + }, + { + "0": "0.512761419116975" + }, + { + "0": "0.519110306290198" + }, + { + "0": "0.519104455842885" + }, + { + "0": "0.525453043722454" + }, + { + "0": "0.515931554331005" + }, + { + "0": "0.512757953333669" + }, + { + "0": "0.510640871628215" + }, + { + "0": "0.527572662666395" + }, + { + "0": "0.520167389883582" + }, + { + "0": "0.523351087078731" + }, + { + "0": "0.522287357889205" + }, + { + "0": "0.513813385201107" + }, + { + "0": "0.512759533076408" + }, + { + "0": "0.516997505875692" + }, + { + "0": "0.521222774349572" + }, + { + "0": "0.519107119289805" + }, + { + "0": "0.512742070159081" + }, + { + "0": "0.511699454770917" + }, + { + "0": "0.516999106711124" + }, + { + "0": "0.520176475831929" + }, + { + "0": "0.523352095883964" + }, + { + "0": "0.518052545117534" + }, + { + "0": "0.52228663843782" + }, + { + "0": "0.511703646660518" + }, + { + "0": "0.524409614419994" + }, + { + "0": "0.524400427559646" + }, + { + "0": "0.513808968027656" + }, + { + "0": "0.520175863316762" + }, + { + "0": "0.521232138336445" + }, + { + "0": "0.511700307085" + }, + { + "0": "0.511702252263334" + }, + { + "0": "0.516976397320409" + }, + { + "0": "0.526515480642495" + }, + { + "0": "0.515935671205937" + }, + { + "0": "0.522287509985272" + }, + { + "0": "0.527565338459646" + }, + { + "0": "0.509580049912702" + }, + { + "0": "0.519114729990706" + }, + { + "0": "0.51910692653922" + }, + { + "0": "0.528636976730142" + }, + { + "0": "0.513825596047601" + }, + { + "0": "0.519109070903653" + }, + { + "0": "0.51805046236174" + }, + { + "0": "0.52227673857924" + }, + { + "0": "0.52967545537332" + }, + { + "0": "0.50852155425916" + }, + { + "0": "0.514875204501764" + }, + { + "0": "0.518047044539657" + }, + { + "0": "0.525460596053296" + }, + { + "0": "0.520170637987526" + }, + { + "0": "0.510631633909743" + }, + { + "0": "0.521220854208743" + }, + { + "0": "0.518051689948599" + }, + { + "0": "0.518038869579021" + }, + { + "0": "0.522282878978039" + }, + { + "0": "0.52756579362509" + }, + { + "0": "0.519104091557939" + }, + { + "0": "0.524395039659226" + }, + { + "0": "0.516987530994677" + }, + { + "0": "0.522278596363131" + }, + { + "0": "0.51910735130292" + }, + { + "0": "0.529666956360189" + }, + { + "0": "0.522282190748178" + }, + { + "0": "0.526512845931203" + }, + { + "0": "0.520167614564154" + }, + { + "0": "0.522276864671366" + }, + { + "0": "0.518049065494996" + }, + { + "0": "0.514878300601053" + }, + { + "0": "0.521226678365485" + }, + { + "0": "0.520167020194036" + }, + { + "0": "0.523339325377852" + }, + { + "0": "0.523351614948239" + }, + { + "0": "0.527571020894335" + }, + { + "0": "0.519106468295937" + }, + { + "0": "0.522278608039698" + }, + { + "0": "0.518045489761826" + }, + { + "0": "0.522277206159353" + }, + { + "0": "0.519111612277533" + }, + { + "0": "0.523339583224482" + }, + { + "0": "0.520173173420935" + }, + { + "0": "0.522286121933011" + }, + { + "0": "0.51910446515303" + }, + { + "0": "0.513811563238981" + }, + { + "0": "0.514868156704682" + }, + { + "0": "0.511695031624756" + }, + { + "0": "0.516987281247313" + }, + { + "0": "0.522275065300823" + }, + { + "0": "0.519107375294474" + }, + { + "0": "0.510638314938656" + }, + { + "0": "0.513812004867054" + }, + { + "0": "0.522280531965278" + }, + { + "0": "0.509575527284559" + }, + { + "0": "0.512758628163207" + }, + { + "0": "0.520164684019511" + }, + { + "0": "0.512753727821023" + }, + { + "0": "0.531802109415574" + }, + { + "0": "0.522283199482905" + }, + { + "0": "0.509580753966704" + }, + { + "0": "0.518045749239629" + }, + { + "0": "0.511696321662889" + }, + { + "0": "0.513820866701948" + }, + { + "0": "0.518050471108985" + }, + { + "0": "0.520166856825617" + }, + { + "0": "0.526517255323647" + }, + { + "0": "0.524399480342647" + }, + { + "0": "0.522280277769339" + }, + { + "0": "0.518045940396249" + }, + { + "0": "0.522252059178088" + }, + { + "0": "0.521220815515509" + }, + { + "0": "0.522276288361374" + }, + { + "0": "0.526501875206747" + }, + { + "0": "0.5233406746398" + }, + { + "0": "0.522285381922484" + }, + { + "0": "0.519106134886193" + }, + { + "0": "0.531797811534904" + }, + { + "0": "0.514871165899453" + }, + { + "0": "0.516982081925349" + }, + { + "0": "0.5138109536121" + }, + { + "0": "0.52333775454239" + }, + { + "0": "0.514873116197637" + }, + { + "0": "0.527569248372631" + }, + { + "0": "0.520165573297237" + }, + { + "0": "0.520170327891275" + }, + { + "0": "0.518050731720291" + }, + { + "0": "0.512758193103073" + }, + { + "0": "0.514875354628972" + }, + { + "0": "0.519111645152653" + }, + { + "0": "0.518039487608462" + }, + { + "0": "0.514880104453392" + }, + { + "0": "0.520172479458837" + }, + { + "0": "0.521230648135582" + }, + { + "0": "0.520167175843945" + }, + { + "0": "0.515929512399019" + }, + { + "0": "0.516991054475399" + }, + { + "0": "0.515932418149878" + }, + { + "0": "0.523339570243364" + }, + { + "0": "0.518047873805316" + }, + { + "0": "0.518046221400784" + }, + { + "0": "0.516989814687863" + }, + { + "0": "0.521228269953985" + }, + { + "0": "0.527575561996211" + }, + { + "0": "0.511701677940422" + }, + { + "0": "0.520168290804465" + }, + { + "0": "0.514864372459126" + }, + { + "0": "0.509581782177313" + }, + { + "0": "0.516990851266963" + }, + { + "0": "0.523332386295544" + }, + { + "0": "0.524394232186195" + }, + { + "0": "0.511695819103938" + }, + { + "0": "0.515934318824229" + }, + { + "0": "0.514870385121515" + }, + { + "0": "0.525443511076398" + }, + { + "0": "0.530737569568618" + }, + { + "0": "0.529681210313088" + }, + { + "0": "0.510637073155499" + }, + { + "0": "0.515926179429195" + }, + { + "0": "0.519110275691939" + }, + { + "0": "0.521218847382073" + }, + { + "0": "0.525441018559168" + }, + { + "0": "0.520162896071922" + }, + { + "0": "0.516987186795593" + }, + { + "0": "0.51275499674728" + }, + { + "0": "0.515927912747025" + }, + { + "0": "0.522277115021128" + }, + { + "0": "0.522269724737876" + }, + { + "0": "0.516989946071924" + }, + { + "0": "0.524364233644999" + }, + { + "0": "0.525446165013629" + }, + { + "0": "0.518046834070245" + }, + { + "0": "0.529681857741662" + }, + { + "0": "0.524398473863678" + }, + { + "0": "0.5233289079923" + }, + { + "0": "0.516984732844805" + }, + { + "0": "0.52439613804842" + }, + { + "0": "0.527564611345869" + }, + { + "0": "0.514874249230759" + }, + { + "0": "0.511691542295448" + }, + { + "0": "0.521217809526241" + }, + { + "0": "0.506400873447246" + }, + { + "0": "0.528610495711755" + }, + { + "0": "0.510635905761841" + }, + { + "0": "0.526514086465597" + }, + { + "0": "0.520164598659596" + }, + { + "0": "0.526511171128134" + }, + { + "0": "0.528617674501607" + }, + { + "0": "0.518046454406681" + }, + { + "0": "0.514877636685379" + }, + { + "0": "0.522281310945776" + }, + { + "0": "0.522298671796849" + }, + { + "0": "0.521222383254009" + }, + { + "0": "0.523336027927736" + }, + { + "0": "0.510639335652997" + }, + { + "0": "0.520162040577494" + }, + { + "0": "0.519107422342731" + }, + { + "0": "0.522281730196672" + }, + { + "0": "0.514872930358606" + }, + { + "0": "0.534964232535052" + }, + { + "0": "0.526506404668607" + }, + { + "0": "0.513817832727107" + }, + { + "0": "0.519106309640876" + }, + { + "0": "0.521216398142975" + }, + { + "0": "0.527567274465505" + }, + { + "0": "0.519105569937766" + }, + { + "0": "0.520161981393297" + }, + { + "0": "0.520162400714658" + }, + { + "0": "0.509577664888526" + }, + { + "0": "0.521223424738542" + }, + { + "0": "0.525455169693843" + }, + { + "0": "0.521216881051974" + }, + { + "0": "0.519105700825957" + }, + { + "0": "0.522277038213974" + }, + { + "0": "0.523335835017736" + }, + { + "0": "0.52121903935337" + }, + { + "0": "0.520157096527989" + }, + { + "0": "0.516987416086426" + }, + { + "0": "0.527564116100629" + }, + { + "0": "0.529685503963497" + }, + { + "0": "0.516987720297954" + }, + { + "0": "0.515931785701122" + }, + { + "0": "0.516987807832659" + }, + { + "0": "0.524390371246492" + }, + { + "0": "0.523334346493502" + }, + { + "0": "0.519100103638657" + }, + { + "0": "0.51381079553971" + }, + { + "0": "0.526513628766011" + }, + { + "0": "0.531775868774528" + }, + { + "0": "0.523334788026871" + }, + { + "0": "0.505343771385039" + }, + { + "0": "0.522277389897596" + }, + { + "0": "0.50640809229253" + }, + { + "0": "0.514869152244948" + }, + { + "0": "0.511698848744561" + }, + { + "0": "0.524401156125166" + }, + { + "0": "0.518045510452361" + }, + { + "0": "0.528629721785532" + }, + { + "0": "0.520165723494461" + }, + { + "0": "0.523343326181247" + }, + { + "0": "0.514868701415632" + }, + { + "0": "0.51698806331166" + }, + { + "0": "0.521221262127263" + }, + { + "0": "0.512755323954751" + }, + { + "0": "0.522275815881764" + }, + { + "0": "0.524394720046865" + }, + { + "0": "0.513812921833727" + }, + { + "0": "0.51169838945501" + }, + { + "0": "0.515927656051708" + }, + { + "0": "0.523335124347557" + }, + { + "0": "0.519099802594957" + }, + { + "0": "0.522275196291079" + }, + { + "0": "0.512755566094694" + }, + { + "0": "0.521218367072008" + }, + { + "0": "0.5127535632901" + }, + { + "0": "0.512751965257045" + }, + { + "0": "0.52439017117598" + }, + { + "0": "0.510635939392006" + }, + { + "0": "0.526504679600626" + }, + { + "0": "0.518047727009078" + }, + { + "0": "0.521217519131274" + }, + { + "0": "0.51804314801579" + }, + { + "0": "0.529681067728871" + }, + { + "0": "0.532850836494189" + }, + { + "0": "0.524390757573004" + }, + { + "0": "0.518053549276073" + }, + { + "0": "0.510633020236736" + }, + { + "0": "0.516980524693217" + }, + { + "0": "0.518046245945777" + }, + { + "0": "0.534957120914033" + }, + { + "0": "0.528617402205314" + }, + { + "0": "0.528619355635106" + }, + { + "0": "0.511693617085467" + }, + { + "0": "0.522274393304785" + }, + { + "0": "0.529684409366681" + }, + { + "0": "0.52545190685046" + }, + { + "0": "0.518049908420487" + }, + { + "0": "0.527564947809193" + }, + { + "0": "0.528625390546256" + }, + { + "0": "0.523328097335143" + }, + { + "0": "0.519100627768809" + }, + { + "0": "0.522281778783186" + }, + { + "0": "0.523329711114498" + }, + { + "0": "0.510633926145181" + }, + { + "0": "0.526515615707935" + }, + { + "0": "0.526503671226653" + }, + { + "0": "0.527564802462233" + }, + { + "0": "0.525439015339597" + }, + { + "0": "0.523344636638195" + }, + { + "0": "0.523341550630888" + }, + { + "0": "0.521218469895193" + }, + { + "0": "0.525451161804298" + }, + { + "0": "0.519101040918164" + }, + { + "0": "0.519106864183775" + }, + { + "0": "0.5201578704902" + }, + { + "0": "0.511696012319153" + }, + { + "0": "0.522268247246436" + }, + { + "0": "0.51275809906928" + }, + { + "0": "0.521217803962986" + }, + { + "0": "0.518042584868107" + }, + { + "0": "0.521216021417507" + }, + { + "0": "0.523308541612277" + }, + { + "0": "0.530737661015833" + }, + { + "0": "0.529673386209978" + }, + { + "0": "0.531794036676793" + }, + { + "0": "0.519104957608723" + }, + { + "0": "0.521224857219201" + }, + { + "0": "0.52544601922974" + }, + { + "0": "0.521222479125465" + }, + { + "0": "0.524382000601493" + }, + { + "0": "0.519103267287342" + }, + { + "0": "0.528620510636374" + }, + { + "0": "0.516981773623935" + }, + { + "0": "0.529683347284888" + }, + { + "0": "0.520158454549811" + }, + { + "0": "0.514872872979537" + }, + { + "0": "0.51804353239642" + }, + { + "0": "0.522275029418615" + }, + { + "0": "0.531795947956695" + }, + { + "0": "0.526489796729099" + }, + { + "0": "0.5191115335978" + }, + { + "0": "0.524384234170481" + }, + { + "0": "0.525439506090442" + }, + { + "0": "0.526502470282404" + }, + { + "0": "0.523326687768665" + }, + { + "0": "0.518046433062927" + }, + { + "0": "0.519098817318089" + }, + { + "0": "0.515925149846828" + }, + { + "0": "0.509577257908724" + }, + { + "0": "0.529670044287365" + }, + { + "0": "0.515908011582182" + }, + { + "0": "0.531794016550903" + }, + { + "0": "0.520154010178033" + }, + { + "0": "0.521215819328201" + }, + { + "0": "0.519110487239283" + }, + { + "0": "0.528618732871737" + }, + { + "0": "0.525449150541753" + }, + { + "0": "0.51486538285142" + }, + { + "0": "0.523335816047202" + }, + { + "0": "0.526513589563987" + }, + { + "0": "0.527544553395986" + }, + { + "0": "0.52650370106277" + }, + { + "0": "0.523333582402792" + }, + { + "0": "0.527562153697793" + }, + { + "0": "0.511686115624896" + }, + { + "0": "0.519103547352615" + }, + { + "0": "0.524394834942058" + }, + { + "0": "0.518037787213926" + }, + { + "0": "0.530727904736623" + }, + { + "0": "0.52861507928887" + }, + { + "0": "0.518035903154007" + }, + { + "0": "0.518040487457252" + }, + { + "0": "0.531789339660805" + }, + { + "0": "0.532829161732532" + }, + { + "0": "0.512747409529876" + }, + { + "0": "0.525443300013492" + }, + { + "0": "0.516971703633426" + }, + { + "0": "0.520150837919615" + }, + { + "0": "0.514874901674824" + }, + { + "0": "0.51804132087012" + }, + { + "0": "0.527554875807466" + }, + { + "0": "0.536009080639821" + }, + { + "0": "0.516985006578174" + }, + { + "0": "0.509575721329988" + }, + { + "0": "0.515933051945743" + }, + { + "0": "0.511689936865364" + }, + { + "0": "0.520152435682109" + }, + { + "0": "0.519100239262194" + }, + { + "0": "0.516990293455289" + }, + { + "0": "0.516984314476285" + }, + { + "0": "0.506398401246142" + }, + { + "0": "0.528622058453645" + }, + { + "0": "0.522272891609508" + }, + { + "0": "0.528615677599729" + }, + { + "0": "0.531778196698264" + }, + { + "0": "0.520157534988716" + }, + { + "0": "0.53178131334127" + }, + { + "0": "0.52438991411665" + }, + { + "0": "0.520146946899861" + }, + { + "0": "0.51274884592625" + }, + { + "0": "0.514871214287231" + }, + { + "0": "0.528603931177722" + }, + { + "0": "0.521226942515616" + }, + { + "0": "0.52650151595133" + }, + { + "0": "0.526508439229969" + }, + { + "0": "0.525435432480459" + }, + { + "0": "0.523326995626327" + }, + { + "0": "0.524383582797331" + }, + { + "0": "0.52332955369996" + }, + { + "0": "0.525443059971248" + }, + { + "0": "0.508512485416668" + }, + { + "0": "0.516983710717671" + }, + { + "0": "0.522271323135226" + }, + { + "0": "0.528605576789204" + }, + { + "0": "0.51380919193604" + }, + { + "0": "0.531777351883992" + }, + { + "0": "0.533899314335991" + }, + { + "0": "0.513809299481476" + }, + { + "0": "0.5265013762349" + }, + { + "0": "0.534930039546322" + }, + { + "0": "0.529683073230187" + }, + { + "0": "0.521215785724963" + }, + { + "0": "0.525443406996123" + }, + { + "0": "0.514849064636563" + }, + { + "0": "0.52227280092186" + }, + { + "0": "0.519097515561679" + }, + { + "0": "0.527566404259389" + }, + { + "0": "0.533861298342554" + }, + { + "0": "0.515924606777203" + }, + { + "0": "0.511693960533627" + }, + { + "0": "0.529667002933629" + }, + { + "0": "0.515925603536256" + }, + { + "0": "0.521213518556588" + }, + { + "0": "0.532841334500665" + }, + { + "0": "0.532845313563439" + }, + { + "0": "0.537066485324544" + }, + { + "0": "0.515924923773862" + }, + { + "0": "0.515921801501882" + }, + { + "0": "0.521218475650933" + }, + { + "0": "0.522271554235839" + }, + { + "0": "0.519090024081065" + }, + { + "0": "0.515928995462332" + }, + { + "0": "0.529669197107119" + }, + { + "0": "0.513807677127333" + }, + { + "0": "0.516977985971182" + }, + { + "0": "0.530717598658903" + }, + { + "0": "0.525446736578364" + }, + { + "0": "0.533891287719791" + }, + { + "0": "0.515915121283827" + }, + { + "0": "0.524391772383228" + }, + { + "0": "0.513807487817839" + }, + { + "0": "0.520151747250368" + }, + { + "0": "0.521213474170925" + }, + { + "0": "0.530720590756515" + }, + { + "0": "0.519101937719354" + }, + { + "0": "0.511689360209581" + }, + { + "0": "0.523324521567409" + }, + { + "0": "0.531780142666553" + }, + { + "0": "0.528619505153969" + }, + { + "0": "0.521218417521935" + }, + { + "0": "0.514859297501362" + }, + { + "0": "0.527533944893404" + }, + { + "0": "0.532846813684639" + }, + { + "0": "0.532835541533926" + }, + { + "0": "0.529670563854903" + }, + { + "0": "0.52755483284378" + }, + { + "0": "0.527554107760661" + }, + { + "0": "0.521208067342765" + }, + { + "0": "0.525449358943798" + }, + { + "0": "0.514862697655566" + }, + { + "0": "0.521203912115403" + }, + { + "0": "0.529674550358268" + }, + { + "0": "0.527551906501295" + }, + { + "0": "0.520156963992125" + }, + { + "0": "0.522270501618847" + }, + { + "0": "0.52437773170265" + }, + { + "0": "0.525445854957475" + }, + { + "0": "0.526494969177747" + }, + { + "0": "0.524384437678811" + }, + { + "0": "0.536003413734334" + }, + { + "0": "0.513807405283525" + }, + { + "0": "0.516974983822988" + }, + { + "0": "0.518047375311759" + }, + { + "0": "0.535985734515151" + }, + { + "0": "0.525438261992109" + }, + { + "0": "0.512750645906491" + }, + { + "0": "0.509574621630269" + }, + { + "0": "0.523335505476328" + }, + { + "0": "0.528614403923817" + }, + { + "0": "0.51486377939753" + }, + { + "0": "0.521209278490249" + }, + { + "0": "0.520155987687674" + }, + { + "0": "0.516982738138111" + }, + { + "0": "0.527537768376644" + }, + { + "0": "0.526500395112671" + }, + { + "0": "0.524388600021615" + }, + { + "0": "0.524385775404442" + }, + { + "0": "0.526496844883298" + }, + { + "0": "0.520145939838682" + }, + { + "0": "0.527548937834501" + }, + { + "0": "0.510638602474691" + }, + { + "0": "0.523335729362558" + }, + { + "0": "0.51909842567393" + }, + { + "0": "0.526497947287116" + }, + { + "0": "0.520155861398412" + }, + { + "0": "0.516981384131223" + }, + { + "0": "0.510629531753181" + }, + { + "0": "0.530722742313241" + }, + { + "0": "0.52966910594659" + }, + { + "0": "0.527564830495008" + }, + { + "0": "0.521212396219849" + }, + { + "0": "0.528622667024691" + }, + { + "0": "0.52650140389489" + }, + { + "0": "0.531787725788388" + }, + { + "0": "0.522268596750261" + }, + { + "0": "0.524387178924507" + }, + { + "0": "0.5243798537307" + }, + { + "0": "0.532825750475255" + }, + { + "0": "0.522265648665302" + }, + { + "0": "0.52121710155982" + }, + { + "0": "0.526473896986799" + }, + { + "0": "0.523330434408961" + }, + { + "0": "0.522265279508709" + }, + { + "0": "0.534932788834974" + }, + { + "0": "0.526496496028008" + }, + { + "0": "0.53283734958314" + }, + { + "0": "0.52332920132723" + }, + { + "0": "0.520162427068466" + }, + { + "0": "0.502196766919075" + }, + { + "0": "0.502195490486363" + }, + { + "0": "0.505374361695025" + }, + { + "0": "0.503256241785782" + }, + { + "0": "0.503255364390476" + }, + { + "0": "0.505373858116267" + }, + { + "0": "0.502193172374413" + }, + { + "0": "0.503256225503966" + }, + { + "0": "0.505375607741346" + }, + { + "0": "0.503253827820907" + }, + { + "0": "0.503255424508666" + }, + { + "0": "0.503258349105002" + }, + { + "0": "0.503256297188347" + }, + { + "0": "0.502197710721731" + }, + { + "0": "0.503256845541036" + }, + { + "0": "0.503257337267805" + }, + { + "0": "0.503251778316648" + }, + { + "0": "0.503257463785793" + }, + { + "0": "0.503256868867654" + }, + { + "0": "0.503256925529081" + }, + { + "0": "0.505375646555573" + }, + { + "0": "0.503257899161044" + }, + { + "0": "0.503255476733255" + }, + { + "0": "0.505376382253389" + }, + { + "0": "0.500077810498051" + }, + { + "0": "0.503258086433543" + }, + { + "0": "0.503255878398734" + }, + { + "0": "0.502198763243227" + }, + { + "0": "0.505373938417582" + }, + { + "0": "0.503255453672678" + }, + { + "0": "0.503255188974271" + }, + { + "0": "0.502196645695555" + }, + { + "0": "0.505374794893579" + }, + { + "0": "0.503258340866755" + }, + { + "0": "0.500078968855488" + }, + { + "0": "0.505372858710391" + }, + { + "0": "0.500078091175869" + }, + { + "0": "0.503257035075791" + }, + { + "0": "0.50325666278466" + }, + { + "0": "0.50537641522065" + }, + { + "0": "0.505373597591025" + }, + { + "0": "0.503254325203447" + }, + { + "0": "0.503256535749331" + }, + { + "0": "0.503254176868418" + }, + { + "0": "0.502196961372302" + }, + { + "0": "0.502194351037427" + }, + { + "0": "0.503256735368051" + }, + { + "0": "0.502196605990546" + }, + { + "0": "0.502194069636126" + }, + { + "0": "0.503255823203811" + }, + { + "0": "0.502194048273162" + }, + { + "0": "0.503254718442516" + }, + { + "0": "0.505375332738567" + }, + { + "0": "0.502197082675531" + }, + { + "0": "0.502197690358355" + }, + { + "0": "0.504313902569881" + }, + { + "0": "0.504314808698652" + }, + { + "0": "0.50431385032657" + }, + { + "0": "0.504315893237522" + }, + { + "0": "0.504314841088559" + }, + { + "0": "0.504315691757761" + }, + { + "0": "0.504314326712753" + }, + { + "0": "0.504316546121288" + }, + { + "0": "0.50431570415056" + }, + { + "0": "0.504311899025188" + }, + { + "0": "0.504313477612759" + }, + { + "0": "0.504317431817031" + }, + { + "0": "0.504315995255214" + }, + { + "0": "0.504314734299265" + }, + { + "0": "0.504308627623701" + }, + { + "0": "0.504314325475226" + }, + { + "0": "0.504315165526043" + }, + { + "0": "0.50431635018088" + }, + { + "0": "0.504316771166238" + }, + { + "0": "0.504314975279076" + }, + { + "0": "0.504314716632304" + }, + { + "0": "0.504314581522884" + }, + { + "0": "0.504315188901405" + }, + { + "0": "0.504314981015033" + }, + { + "0": "0.533868710516832" + }, + { + "0": "0.526492222434234" + }, + { + "0": "0.520153889994045" + }, + { + "0": "0.513804795528532" + }, + { + "0": "0.525434026660992" + }, + { + "0": "0.53072709423023" + }, + { + "0": "0.525438968999747" + }, + { + "0": "0.523319954270447" + }, + { + "0": "0.528612340128115" + }, + { + "0": "0.537058916237342" + }, + { + "0": "0.52225172442753" + }, + { + "0": "0.525435869076029" + }, + { + "0": "0.533891343561602" + }, + { + "0": "0.522267044092224" + }, + { + "0": "0.528603110331638" + }, + { + "0": "0.525434988114007" + }, + { + "0": "0.538102172618373" + }, + { + "0": "0.528612179557121" + }, + { + "0": "0.513804836802297" + }, + { + "0": "0.515917831113021" + }, + { + "0": "0.518035952553251" + }, + { + "0": "0.526495458659423" + }, + { + "0": "0.516976975809838" + }, + { + "0": "0.526498567535614" + }, + { + "0": "0.53177993902709" + }, + { + "0": "0.53073488190765" + }, + { + "0": "0.532835195453155" + }, + { + "0": "0.516979303160932" + }, + { + "0": "0.516968319786494" + }, + { + "0": "0.521209793642875" + }, + { + "0": "0.51909613292708" + }, + { + "0": "0.527558519420951" + }, + { + "0": "0.519091389232593" + }, + { + "0": "0.521216070198451" + }, + { + "0": "0.527557431937853" + }, + { + "0": "0.531786729911402" + }, + { + "0": "0.53916283366428" + }, + { + "0": "0.523321925538548" + }, + { + "0": "0.523323312037596" + }, + { + "0": "0.526494318177939" + }, + { + "0": "0.528615501140702" + }, + { + "0": "0.521207020302428" + }, + { + "0": "0.528573269452004" + }, + { + "0": "0.532827337150652" + }, + { + "0": "0.527557997845624" + }, + { + "0": "0.529656243542706" + }, + { + "0": "0.536010292752809" + }, + { + "0": "0.529661945830996" + }, + { + "0": "0.52121141640173" + }, + { + "0": "0.518037714796704" + }, + { + "0": "0.522272746167122" + }, + { + "0": "0.531775391305629" + }, + { + "0": "0.52649303043822" + }, + { + "0": "0.520147998757485" + }, + { + "0": "0.520158404449682" + }, + { + "0": "0.52332613686034" + }, + { + "0": "0.529667290689276" + }, + { + "0": "0.536000576774058" + }, + { + "0": "0.527568074297639" + }, + { + "0": "0.533847507509866" + }, + { + "0": "0.522264014596624" + }, + { + "0": "0.524384551188669" + }, + { + "0": "0.521206614389088" + }, + { + "0": "0.533889706272726" + }, + { + "0": "0.512750650723692" + }, + { + "0": "0.512745311172053" + }, + { + "0": "0.532793891560657" + }, + { + "0": "0.532796796619246" + }, + { + "0": "0.53495120281633" + }, + { + "0": "0.525443296170131" + }, + { + "0": "0.521209850522264" + }, + { + "0": "0.539170843853517" + }, + { + "0": "0.514856903498592" + }, + { + "0": "0.530726119217707" + }, + { + "0": "0.539169084819647" + }, + { + "0": "0.529647911040919" + }, + { + "0": "0.516977909830813" + }, + { + "0": "0.521219561788593" + }, + { + "0": "0.514848165980813" + }, + { + "0": "0.539133135845283" + }, + { + "0": "0.534929738848027" + }, + { + "0": "0.527545618851158" + }, + { + "0": "0.534928830092825" + }, + { + "0": "0.526480525249972" + }, + { + "0": "0.526491966782922" + }, + { + "0": "0.522265445188806" + }, + { + "0": "0.51803424214794" + }, + { + "0": "0.52225783555094" + }, + { + "0": "0.547573037360075" + }, + { + "0": "0.512741998792622" + }, + { + "0": "0.532818854149515" + }, + { + "0": "0.515922983759637" + }, + { + "0": "0.530721203216891" + }, + { + "0": "0.525439310102134" + }, + { + "0": "0.508507518780016" + }, + { + "0": "0.530716567630895" + }, + { + "0": "0.534940035788264" + }, + { + "0": "0.533881299803875" + }, + { + "0": "0.519090875390705" + }, + { + "0": "0.520122975840597" + }, + { + "0": "0.516974130350741" + }, + { + "0": "0.529660412831381" + }, + { + "0": "0.534952437290841" + }, + { + "0": "0.5222641367985" + }, + { + "0": "0.529655426720508" + }, + { + "0": "0.515916832365229" + }, + { + "0": "0.526501237266991" + }, + { + "0": "0.537046736051908" + }, + { + "0": "0.525435929852586" + }, + { + "0": "0.532817519924143" + }, + { + "0": "0.524377805405646" + }, + { + "0": "0.523327322748944" + }, + { + "0": "0.525435278454539" + }, + { + "0": "0.530716661496959" + }, + { + "0": "0.540212234639761" + }, + { + "0": "0.530711059358098" + }, + { + "0": "0.523321701028038" + }, + { + "0": "0.527546372230885" + }, + { + "0": "0.527515745044712" + }, + { + "0": "0.518030806478517" + }, + { + "0": "0.526488480232146" + }, + { + "0": "0.533874700779102" + }, + { + "0": "0.528600414001606" + }, + { + "0": "0.540203685111417" + }, + { + "0": "0.544419813330678" + }, + { + "0": "0.530717000718422" + }, + { + "0": "0.535995776880693" + }, + { + "0": "0.527543958413253" + }, + { + "0": "0.53916453475924" + }, + { + "0": "0.51697909215655" + }, + { + "0": "0.522264188871948" + }, + { + "0": "0.531766841735184" + }, + { + "0": "0.532819116186399" + }, + { + "0": "0.505332561565709" + }, + { + "0": "0.519088113064215" + }, + { + "0": "0.529652996006982" + }, + { + "0": "0.532820250086237" + }, + { + "0": "0.523327030243162" + }, + { + "0": "0.542320155214258" + }, + { + "0": "0.53810451458107" + }, + { + "0": "0.531755374738282" + }, + { + "0": "0.522262037202741" + }, + { + "0": "0.532830899831501" + }, + { + "0": "0.537054442837594" + }, + { + "0": "0.519090054905161" + }, + { + "0": "0.532826254042468" + }, + { + "0": "0.530724814758147" + }, + { + "0": "0.521207409518936" + }, + { + "0": "0.527557704253485" + }, + { + "0": "0.526490303072653" + }, + { + "0": "0.523328809474132" + }, + { + "0": "0.522266221254" + }, + { + "0": "0.509570248615416" + }, + { + "0": "0.531770004128333" + }, + { + "0": "0.526491115246334" + }, + { + "0": "0.515912048079636" + }, + { + "0": "0.51486115787885" + }, + { + "0": "0.530721274626628" + }, + { + "0": "0.519084348896419" + }, + { + "0": "0.534948405354912" + }, + { + "0": "0.525430217429935" + }, + { + "0": "0.524390062085315" + }, + { + "0": "0.526503326824143" + }, + { + "0": "0.533886904484205" + }, + { + "0": "0.520152283197276" + }, + { + "0": "0.518036660837659" + }, + { + "0": "0.514863027811162" + }, + { + "0": "0.528604596601135" + }, + { + "0": "0.530712787773529" + }, + { + "0": "0.519079921005646" + }, + { + "0": "0.529667618969282" + }, + { + "0": "0.516981862943396" + }, + { + "0": "0.518033023973448" + }, + { + "0": "0.515917780121359" + }, + { + "0": "0.521205924757027" + }, + { + "0": "0.512743467946046" + }, + { + "0": "0.521205734646841" + }, + { + "0": "0.522276188944059" + }, + { + "0": "0.520149715616866" + }, + { + "0": "0.540216195948383" + }, + { + "0": "0.524380766657434" + }, + { + "0": "0.521209689395202" + }, + { + "0": "0.523365606393525" + }, + { + "0": "0.529660640833569" + }, + { + "0": "0.518034095644333" + }, + { + "0": "0.525429346957504" + }, + { + "0": "0.519089270969428" + }, + { + "0": "0.51908476363353" + }, + { + "0": "0.514856925493061" + }, + { + "0": "0.537039865751962" + }, + { + "0": "0.538106385736551" + }, + { + "0": "0.528611532036876" + }, + { + "0": "0.519090062025271" + }, + { + "0": "0.522268793748933" + }, + { + "0": "0.523322993162226" + }, + { + "0": "0.530713742005129" + }, + { + "0": "0.523323328682377" + }, + { + "0": "0.534947768232484" + }, + { + "0": "0.529661201150243" + }, + { + "0": "0.51485990577379" + }, + { + "0": "0.537065266474468" + }, + { + "0": "0.52015892375502" + }, + { + "0": "0.525434209825819" + }, + { + "0": "0.526483650273095" + }, + { + "0": "0.523318353362564" + }, + { + "0": "0.542314562635073" + }, + { + "0": "0.524360636793423" + }, + { + "0": "0.542315385405542" + }, + { + "0": "0.530703446177474" + }, + { + "0": "0.522259443768645" + }, + { + "0": "0.515910316997883" + }, + { + "0": "0.549682354194542" + }, + { + "0": "0.511680776234534" + }, + { + "0": "0.527544228726719" + }, + { + "0": "0.543366663461076" + }, + { + "0": "0.534934351287594" + }, + { + "0": "0.527537251792187" + }, + { + "0": "0.545465328028427" + }, + { + "0": "0.535979867710838" + }, + { + "0": "0.539158682990899" + }, + { + "0": "0.519088866297638" + }, + { + "0": "0.527541836325791" + }, + { + "0": "0.525409441006619" + }, + { + "0": "0.541245136638827" + }, + { + "0": "0.531765043356066" + }, + { + "0": "0.528599353182368" + }, + { + "0": "0.534923367878406" + }, + { + "0": "0.527550116871702" + }, + { + "0": "0.525427958167401" + }, + { + "0": "0.54020236503659" + }, + { + "0": "0.530715766245551" + }, + { + "0": "0.544420655217646" + }, + { + "0": "0.524364881393403" + }, + { + "0": "0.524376110245842" + }, + { + "0": "0.539157580984587" + }, + { + "0": "0.516966427313721" + }, + { + "0": "0.532816959062959" + }, + { + "0": "0.530706269942835" + }, + { + "0": "0.535988205303757" + }, + { + "0": "0.528587939154597" + }, + { + "0": "0.518032265513401" + }, + { + "0": "0.530709310165231" + }, + { + "0": "0.522252938215124" + }, + { + "0": "0.52437068176969" + }, + { + "0": "0.542302682787917" + }, + { + "0": "0.527550380826741" + }, + { + "0": "0.518037758497491" + }, + { + "0": "0.541260500877753" + }, + { + "0": "0.535987136473906" + }, + { + "0": "0.537040230539328" + }, + { + "0": "0.545467204743898" + }, + { + "0": "0.515915120926198" + }, + { + "0": "0.526484471894827" + }, + { + "0": "0.515907186079631" + }, + { + "0": "0.531770454120879" + }, + { + "0": "0.527551229646009" + }, + { + "0": "0.513793279572236" + }, + { + "0": "0.539154288187957" + }, + { + "0": "0.524373007482945" + }, + { + "0": "0.528606787854521" + }, + { + "0": "0.523316796516588" + }, + { + "0": "0.539149530021759" + }, + { + "0": "0.515907526989831" + }, + { + "0": "0.527545028808977" + }, + { + "0": "0.53599641047761" + }, + { + "0": "0.521200196947864" + }, + { + "0": "0.526499570805999" + }, + { + "0": "0.547578968289333" + }, + { + "0": "0.522271932956495" + }, + { + "0": "0.539162821679168" + }, + { + "0": "0.538106319795104" + }, + { + "0": "0.531775740639763" + }, + { + "0": "0.528609243271135" + }, + { + "0": "0.528605766697429" + }, + { + "0": "0.531777713191208" + }, + { + "0": "0.524378316751797" + }, + { + "0": "0.533884934091642" + }, + { + "0": "0.528612834204999" + }, + { + "0": "0.529653266959055" + }, + { + "0": "0.540208041242443" + }, + { + "0": "0.515913504461725" + }, + { + "0": "0.531766122739897" + }, + { + "0": "0.519086738020214" + }, + { + "0": "0.531768935487562" + }, + { + "0": "0.534932297585048" + }, + { + "0": "0.513800185925901" + }, + { + "0": "0.539159067756067" + }, + { + "0": "0.515912606594957" + }, + { + "0": "0.525441954964856" + }, + { + "0": "0.52965186876398" + }, + { + "0": "0.530729670605563" + }, + { + "0": "0.538103490283784" + }, + { + "0": "0.539156589270086" + }, + { + "0": "0.534935047426348" + }, + { + "0": "0.539162751936531" + }, + { + "0": "0.52226173782066" + }, + { + "0": "0.521207030698832" + }, + { + "0": "0.538097156561118" + }, + { + "0": "0.511681684033737" + }, + { + "0": "0.543349533186558" + }, + { + "0": "0.546510171063898" + }, + { + "0": "0.546500011170894" + }, + { + "0": "0.54544657015925" + }, + { + "0": "0.537030821036322" + }, + { + "0": "0.527528911028435" + }, + { + "0": "0.539149438669938" + }, + { + "0": "0.537021384870748" + }, + { + "0": "0.542303874967095" + }, + { + "0": "0.551763020586717" + }, + { + "0": "0.550699280966239" + }, + { + "0": "0.521177995772972" + }, + { + "0": "0.518021830373158" + }, + { + "0": "0.541246871990282" + }, + { + "0": "0.529649076197681" + }, + { + "0": "0.527538714304055" + }, + { + "0": "0.542298968509425" + }, + { + "0": "0.547489782902312" + }, + { + "0": "0.539133390216999" + }, + { + "0": "0.54644985640672" + }, + { + "0": "0.548612038187681" + }, + { + "0": "0.530665449512064" + }, + { + "0": "0.510609263453463" + }, + { + "0": "0.5443926308774" + }, + { + "0": "0.549645388041314" + }, + { + "0": "0.542290782206801" + }, + { + "0": "0.545453391704758" + }, + { + "0": "0.527536829715245" + }, + { + "0": "0.531768136635098" + }, + { + "0": "0.551747389432941" + }, + { + "0": "0.532804668119333" + }, + { + "0": "0.529641859178149" + }, + { + "0": "0.539148045669734" + }, + { + "0": "0.513783800870202" + }, + { + "0": "0.534932720274098" + }, + { + "0": "0.542293136203708" + }, + { + "0": "0.550683739732817" + }, + { + "0": "0.550719506894887" + }, + { + "0": "0.53598508521032" + }, + { + "0": "0.547578038001599" + }, + { + "0": "0.513786828382186" + }, + { + "0": "0.534931470880494" + }, + { + "0": "0.539140912077008" + }, + { + "0": "0.541247088045786" + }, + { + "0": "0.543335352284224" + }, + { + "0": "0.534929374318567" + }, + { + "0": "0.533875722932599" + }, + { + "0": "0.52648198507335" + }, + { + "0": "0.52436867960227" + }, + { + "0": "0.54335464383666" + }, + { + "0": "0.542309756167174" + }, + { + "0": "0.526488603789089" + }, + { + "0": "0.52648272479909" + }, + { + "0": "0.530702625156879" + }, + { + "0": "0.54123694893916" + }, + { + "0": "0.547556865802111" + }, + { + "0": "0.529650023304545" + }, + { + "0": "0.537029693979756" + }, + { + "0": "0.530704588820503" + }, + { + "0": "0.533867135924765" + }, + { + "0": "0.527539906206682" + }, + { + "0": "0.519079750412782" + }, + { + "0": "0.527504551918829" + }, + { + "0": "0.533878856126898" + }, + { + "0": "0.527537912756831" + }, + { + "0": "0.526482648979426" + }, + { + "0": "0.529659606975767" + }, + { + "0": "0.544414719059661" + }, + { + "0": "0.546509699610722" + }, + { + "0": "0.53177300048419" + }, + { + "0": "0.544402882927622" + }, + { + "0": "0.526480096718021" + }, + { + "0": "0.541269273030399" + }, + { + "0": "0.531843688916779" + }, + { + "0": "0.532831854441955" + }, + { + "0": "0.538105201154767" + }, + { + "0": "0.535985543000268" + }, + { + "0": "0.538089169990642" + }, + { + "0": "0.528598100117427" + }, + { + "0": "0.537012359332788" + }, + { + "0": "0.539145984906003" + }, + { + "0": "0.541235902535914" + }, + { + "0": "0.547559285456663" + }, + { + "0": "0.53176002729636" + }, + { + "0": "0.527533019883249" + }, + { + "0": "0.529664603563945" + }, + { + "0": "0.52965443476823" + }, + { + "0": "0.550690617535524" + }, + { + "0": "0.538095059836249" + }, + { + "0": "0.521196923166579" + }, + { + "0": "0.540194197494147" + }, + { + "0": "0.542306444843946" + }, + { + "0": "0.547549285899671" + }, + { + "0": "0.540188445529883" + }, + { + "0": "0.547553870346441" + }, + { + "0": "0.529640546118297" + }, + { + "0": "0.549656694123604" + }, + { + "0": "0.552812553033954" + }, + { + "0": "0.531764460860735" + }, + { + "0": "0.538092780573345" + }, + { + "0": "0.513789895849281" + }, + { + "0": "0.521194947152281" + }, + { + "0": "0.53068206511565" + }, + { + "0": "0.525420502642241" + }, + { + "0": "0.529644881956754" + }, + { + "0": "0.518028076028477" + }, + { + "0": "0.527530529264109" + }, + { + "0": "0.515903474695726" + }, + { + "0": "0.528594545911153" + }, + { + "0": "0.53808851396637" + }, + { + "0": "0.528593178545487" + }, + { + "0": "0.534921383284629" + }, + { + "0": "0.540203452741479" + }, + { + "0": "0.527540852613553" + }, + { + "0": "0.529645142532381" + }, + { + "0": "0.521192000334113" + }, + { + "0": "0.547553516425645" + }, + { + "0": "0.550687109840958" + }, + { + "0": "0.524370765288219" + }, + { + "0": "0.540187133134374" + }, + { + "0": "0.541244036693752" + }, + { + "0": "0.543361828107019" + }, + { + "0": "0.545457295784769" + }, + { + "0": "0.515907286933494" + }, + { + "0": "0.512731863572247" + }, + { + "0": "0.534927036252877" + }, + { + "0": "0.52330927887378" + }, + { + "0": "0.529646806002625" + }, + { + "0": "0.547563863211081" + }, + { + "0": "0.553842296954891" + }, + { + "0": "0.534923499694919" + }, + { + "0": "0.535976923256903" + }, + { + "0": "0.532811752562322" + }, + { + "0": "0.551745061298591" + }, + { + "0": "0.54546602199718" + }, + { + "0": "0.554895530318246" + }, + { + "0": "0.537042915174623" + }, + { + "0": "0.533870893470094" + }, + { + "0": "0.525422107978982" + }, + { + "0": "0.52856093516061" + }, + { + "0": "0.544410376816717" + }, + { + "0": "0.533855935373108" + }, + { + "0": "0.523305085402819" + }, + { + "0": "0.541224495050033" + }, + { + "0": "0.541213560381716" + }, + { + "0": "0.540188233617366" + }, + { + "0": "0.521190756120275" + }, + { + "0": "0.55384602939327" + }, + { + "0": "0.529642189201724" + }, + { + "0": "0.543339207748491" + }, + { + "0": "0.542242265989708" + }, + { + "0": "0.542302463031652" + }, + { + "0": "0.526485027211575" + }, + { + "0": "0.538093974236224" + }, + { + "0": "0.552772787785175" + }, + { + "0": "0.524358831944453" + }, + { + "0": "0.535969170266155" + }, + { + "0": "0.529640289481744" + }, + { + "0": "0.529638874556193" + }, + { + "0": "0.541242649437257" + }, + { + "0": "0.51590403269483" + }, + { + "0": "0.526484940156142" + }, + { + "0": "0.558038707488767" + }, + { + "0": "0.537026121840742" + }, + { + "0": "0.532807468446596" + }, + { + "0": "0.538092850385496" + }, + { + "0": "0.518022933367123" + }, + { + "0": "0.531760785765688" + }, + { + "0": "0.549635804388847" + }, + { + "0": "0.551758978852365" + }, + { + "0": "0.5486087393444" + }, + { + "0": "0.530693465942294" + }, + { + "0": "0.523303245991865" + }, + { + "0": "0.527529994253482" + }, + { + "0": "0.546475041235724" + }, + { + "0": "0.558035803391493" + }, + { + "0": "0.55595314443268" + }, + { + "0": "0.522243218920954" + }, + { + "0": "0.502199110037564" + }, + { + "0": "0.501140527410709" + }, + { + "0": "0.503255702982531" + }, + { + "0": "0.501139654276942" + }, + { + "0": "0.502200498329518" + }, + { + "0": "0.504316196411974" + }, + { + "0": "0.503259209097153" + }, + { + "0": "0.502200547025806" + }, + { + "0": "0.501138969887434" + }, + { + "0": "0.501138377679462" + }, + { + "0": "0.503258763362537" + }, + { + "0": "0.50219799797868" + }, + { + "0": "0.503258055751632" + }, + { + "0": "0.503258118361485" + }, + { + "0": "0.502199487985323" + }, + { + "0": "0.500078477107868" + }, + { + "0": "0.500078827955139" + }, + { + "0": "0.503257734083257" + }, + { + "0": "0.503260084072352" + }, + { + "0": "0.503259242942824" + }, + { + "0": "0.502198146451006" + }, + { + "0": "0.502199780680656" + }, + { + "0": "0.503257366866357" + }, + { + "0": "0.502199250373761" + }, + { + "0": "0.502200874205527" + }, + { + "0": "0.503259242942824" + }, + { + "0": "0.504316626829783" + }, + { + "0": "0.502196757646722" + }, + { + "0": "0.502198084141622" + }, + { + "0": "0.501137653896378" + }, + { + "0": "0.502198301344936" + }, + { + "0": "0.503259849831035" + }, + { + "0": "0.500082371512579" + }, + { + "0": "0.505357688076352" + }, + { + "0": "0.500081529479129" + }, + { + "0": "0.500081038292949" + }, + { + "0": "0.500082090834762" + }, + { + "0": "0.500082090834762" + }, + { + "0": "0.500082371512579" + }, + { + "0": "0.500082055750035" + }, + { + "0": "0.530712146127545" + }, + { + "0": "0.522275379278506" + }, + { + "0": "0.500080897954041" + }, + { + "0": "0.500081424224947" + }, + { + "0": "0.50113814451859" + }, + { + "0": "0.506427298521431" + }, + { + "0": "0.500082090834762" + }, + { + "0": "0.500081775072218" + }, + { + "0": "0.501140658174939" + }, + { + "0": "0.500082161004216" + }, + { + "0": "0.500082266819837" + }, + { + "0": "0.500080722530405" + }, + { + "0": "0.500081178631858" + }, + { + "0": "0.501139811916535" + }, + { + "0": "0.50008223117367" + }, + { + "0": "0.500082371512579" + }, + { + "0": "0.500082336427852" + }, + { + "0": "0.501140565913691" + }, + { + "0": "0.500082090834762" + }, + { + "0": "0.500082371512579" + }, + { + "0": "0.563251560766284" + }, + { + "0": "0.543304695039801" + }, + { + "0": "0.5829034232847" + }, + { + "0": "0.555892584640313" + }, + { + "0": "0.555885070930559" + }, + { + "0": "0.535968685054879" + }, + { + "0": "0.639146214794593" + }, + { + "0": "0.603291783749136" + }, + { + "0": "0.51798265516288" + }, + { + "0": "0.551740561077173" + }, + { + "0": "0.533859713800468" + }, + { + "0": "0.579831747506312" + }, + { + "0": "0.538078143179514" + }, + { + "0": "0.542295155704826" + }, + { + "0": "0.558016732265086" + }, + { + "0": "0.559032833425474" + }, + { + "0": "0.545388271820675" + }, + { + "0": "0.576709759064711" + }, + { + "0": "0.543325888411401" + }, + { + "0": "0.566361727621435" + }, + { + "0": "0.541215051775747" + }, + { + "0": "0.560112935087578" + }, + { + "0": "0.560086990382434" + }, + { + "0": "0.557998025281194" + }, + { + "0": "0.570481688434775" + }, + { + "0": "0.543341865556327" + }, + { + "0": "0.563193459967309" + }, + { + "0": "0.572461999760642" + }, + { + "0": "0.569506977762804" + }, + { + "0": "0.523289583434954" + }, + { + "0": "0.534914573100756" + }, + { + "0": "0.561125980413125" + }, + { + "0": "0.566328517663846" + }, + { + "0": "0.540140082354791" + }, + { + "0": "0.525406823399104" + }, + { + "0": "0.544391775772666" + }, + { + "0": "0.545455175147786" + }, + { + "0": "0.590085379730631" + }, + { + "0": "0.54228968956697" + }, + { + "0": "0.626381318185409" + }, + { + "0": "0.531741741435753" + }, + { + "0": "0.577765845091659" + }, + { + "0": "0.53385567470523" + }, + { + "0": "0.556979410674109" + }, + { + "0": "0.566371887803324" + }, + { + "0": "0.556951224494756" + }, + { + "0": "0.584965620095082" + }, + { + "0": "0.563208424316018" + }, + { + "0": "0.643090470625802" + }, + { + "0": "0.595215971644918" + }, + { + "0": "0.703427426386748" + }, + { + "0": "0.627229396447844" + }, + { + "0": "0.549637649350442" + }, + { + "0": "0.56219593195768" + }, + { + "0": "0.570487681363344" + }, + { + "0": "0.620410888663684" + }, + { + "0": "0.544381576568258" + }, + { + "0": "0.542261807295989" + }, + { + "0": "0.63819241569258" + }, + { + "0": "0.558972219482697" + }, + { + "0": "0.548556785388095" + }, + { + "0": "0.703417737911096" + }, + { + "0": "0.573640272456825" + }, + { + "0": "0.553830294072307" + }, + { + "0": "0.555953975167423" + }, + { + "0": "0.590117058145362" + }, + { + "0": "0.560086614817444" + }, + { + "0": "0.550678914734893" + }, + { + "0": "0.566342571583811" + }, + { + "0": "0.580839302160091" + }, + { + "0": "0.696283472508395" + }, + { + "0": "0.544373393499585" + }, + { + "0": "0.562172509445323" + }, + { + "0": "0.577769827572739" + }, + { + "0": "0.566362289903562" + }, + { + "0": "0.551662223559947" + }, + { + "0": "0.604356802901271" + }, + { + "0": "0.550592884627533" + }, + { + "0": "0.568409304077754" + }, + { + "0": "0.548601829360845" + }, + { + "0": "0.534921039616474" + }, + { + "0": "0.534904011532795" + }, + { + "0": "0.553790563579446" + }, + { + "0": "0.544382629538239" + }, + { + "0": "0.522223519523272" + }, + { + "0": "0.581833708973195" + }, + { + "0": "0.534901137174304" + }, + { + "0": "0.533846481272199" + }, + { + "0": "0.534882527398913" + }, + { + "0": "0.583947930133054" + }, + { + "0": "0.539138950102664" + }, + { + "0": "0.53701802615738" + }, + { + "0": "0.591022737325362" + }, + { + "0": "0.58801047914336" + }, + { + "0": "0.581863693286754" + }, + { + "0": "0.535948986979796" + }, + { + "0": "0.567373375741435" + }, + { + "0": "0.527516242920192" + }, + { + "0": "0.529624151230689" + }, + { + "0": "0.566350483021059" + }, + { + "0": "0.540181452138782" + }, + { + "0": "0.530680363486029" + }, + { + "0": "0.56530265593636" + }, + { + "0": "0.56217478147126" + }, + { + "0": "0.533858265601926" + }, + { + "0": "0.558012160362827" + }, + { + "0": "0.507430320100595" + }, + { + "0": "0.576697006338841" + }, + { + "0": "0.550670431236429" + }, + { + "0": "0.541243742409811" + }, + { + "0": "0.587001168083256" + }, + { + "0": "0.531751350481987" + }, + { + "0": "0.553820312287615" + }, + { + "0": "0.541242118763292" + }, + { + "0": "0.548575449020255" + }, + { + "0": "0.57771967801619" + }, + { + "0": "0.562173072647529" + }, + { + "0": "0.558018799249322" + }, + { + "0": "0.565297800003731" + }, + { + "0": "0.555908232504305" + }, + { + "0": "0.518013449667484" + }, + { + "0": "0.614389194371491" + }, + { + "0": "0.541230861864191" + }, + { + "0": "0.570526406480821" + }, + { + "0": "0.551757758314013" + }, + { + "0": "0.543341318406092" + }, + { + "0": "0.540197625950024" + }, + { + "0": "0.614419737564826" + }, + { + "0": "0.607378115041683" + }, + { + "0": "0.544381337148106" + }, + { + "0": "0.568398552779582" + }, + { + "0": "0.575637064763868" + }, + { + "0": "0.546490450663729" + }, + { + "0": "0.610363028621512" + }, + { + "0": "0.556963561684698" + }, + { + "0": "0.568396469129023" + }, + { + "0": "0.60935768333072" + }, + { + "0": "0.543335615532072" + }, + { + "0": "0.54330530196885" + }, + { + "0": "0.541193375544391" + }, + { + "0": "0.568392919853619" + }, + { + "0": "0.598267129481613" + }, + { + "0": "0.571542057746735" + }, + { + "0": "0.701614175126915" + }, + { + "0": "0.601279776413902" + }, + { + "0": "0.566302132489543" + }, + { + "0": "0.535960291062611" + }, + { + "0": "0.589019266499239" + }, + { + "0": "0.509538255772915" + }, + { + "0": "0.587040724266432" + }, + { + "0": "0.530671855832684" + }, + { + "0": "0.555930195419304" + }, + { + "0": "0.531741659515603" + }, + { + "0": "0.555897142344216" + }, + { + "0": "0.572484961189503" + }, + { + "0": "0.531741155583525" + }, + { + "0": "0.546470418542289" + }, + { + "0": "0.57361161322596" + }, + { + "0": "0.531752195837372" + }, + { + "0": "0.691826896626965" + }, + { + "0": "0.656536157696833" + }, + { + "0": "0.550695850665199" + }, + { + "0": "0.59928144301835" + }, + { + "0": "0.559026459716925" + }, + { + "0": "0.620434161504088" + }, + { + "0": "0.579823504657313" + }, + { + "0": "0.569469540567832" + }, + { + "0": "0.541237023299198" + }, + { + "0": "0.53069584025863" + }, + { + "0": "0.56633502587952" + }, + { + "0": "0.55171997640157" + }, + { + "0": "0.565250738312673" + }, + { + "0": "0.552738785158887" + }, + { + "0": "0.575669617441661" + }, + { + "0": "0.527518003739601" + }, + { + "0": "0.653450940491445" + }, + { + "0": "0.560102527877129" + }, + { + "0": "0.559050963009748" + }, + { + "0": "0.570474710714126" + }, + { + "0": "0.616388927108384" + }, + { + "0": "0.604344106376982" + }, + { + "0": "0.562204568137417" + }, + { + "0": "0.712147064502213" + }, + { + "0": "0.557983034310746" + }, + { + "0": "0.530700383990894" + }, + { + "0": "0.548569201590844" + }, + { + "0": "0.67983317593639" + }, + { + "0": "0.540149053543115" + }, + { + "0": "0.532764796687398" + }, + { + "0": "0.572483150268938" + }, + { + "0": "0.549647437147552" + }, + { + "0": "0.576693519944436" + }, + { + "0": "0.562156306951987" + }, + { + "0": "0.607372750390273" + }, + { + "0": "0.588038077824816" + }, + { + "0": "0.550692073826088" + }, + { + "0": "0.583890087982505" + }, + { + "0": "0.563187636220282" + }, + { + "0": "0.543325804010953" + }, + { + "0": "0.531739583090149" + }, + { + "0": "0.554875131950968" + }, + { + "0": "0.555905900565836" + }, + { + "0": "0.544378832430318" + }, + { + "0": "0.554868291223844" + }, + { + "0": "0.565288291850964" + }, + { + "0": "0.559001921869308" + }, + { + "0": "0.548584617997309" + }, + { + "0": "0.604372520726024" + }, + { + "0": "0.56114803361212" + }, + { + "0": "0.580839522879711" + }, + { + "0": "0.627388679394808" + }, + { + "0": "0.55171980601507" + }, + { + "0": "0.569461843734707" + }, + { + "0": "0.539141919470465" + }, + { + "0": "0.611433438640307" + }, + { + "0": "0.578818360542111" + }, + { + "0": "0.559061233508907" + }, + { + "0": "0.601338044494637" + }, + { + "0": "0.57667105670929" + }, + { + "0": "0.553800876422181" + }, + { + "0": "0.55695536372303" + }, + { + "0": "0.531748180460207" + }, + { + "0": "0.561104561932776" + }, + { + "0": "0.523296395977438" + }, + { + "0": "0.610376654262029" + }, + { + "0": "0.553821013810311" + }, + { + "0": "0.538051260855943" + }, + { + "0": "0.573591191220164" + }, + { + "0": "0.519073285441825" + }, + { + "0": "0.541194287952746" + }, + { + "0": "0.566339324734834" + }, + { + "0": "0.563232478952628" + }, + { + "0": "0.607339259707093" + }, + { + "0": "0.535953339067111" + }, + { + "0": "0.571527515201838" + }, + { + "0": "0.546488644069479" + }, + { + "0": "0.533857429395744" + }, + { + "0": "0.51589609052954" + }, + { + "0": "0.548590543986812" + }, + { + "0": "0.609374687399577" + }, + { + "0": "0.57462161951178" + }, + { + "0": "0.538058066551938" + }, + { + "0": "0.553812600290579" + }, + { + "0": "0.547533707236807" + }, + { + "0": "0.560096460859669" + }, + { + "0": "0.533862823376807" + }, + { + "0": "0.623404982815614" + }, + { + "0": "0.56111515322108" + }, + { + "0": "0.551736755796658" + }, + { + "0": "0.541219139647005" + }, + { + "0": "0.576728360349632" + }, + { + "0": "0.552753436538179" + }, + { + "0": "0.573593859826763" + }, + { + "0": "0.600256387360235" + }, + { + "0": "0.562179791893645" + }, + { + "0": "0.578755746219725" + }, + { + "0": "0.575706943121704" + }, + { + "0": "0.538071518346105" + }, + { + "0": "0.556946666589691" + }, + { + "0": "0.565316195542703" + }, + { + "0": "0.558022967774516" + }, + { + "0": "0.638203258301032" + }, + { + "0": "0.551709901329461" + }, + { + "0": "0.513787849466236" + }, + { + "0": "0.57566454392175" + }, + { + "0": "0.538064356128743" + }, + { + "0": "0.524347143282108" + }, + { + "0": "0.544384338055604" + }, + { + "0": "0.550674432396237" + }, + { + "0": "0.5766798344864" + }, + { + "0": "0.53594383246315" + }, + { + "0": "0.53596563509936" + }, + { + "0": "0.612400740949611" + }, + { + "0": "0.595167962868561" + }, + { + "0": "0.624405893957321" + }, + { + "0": "0.542253881267169" + }, + { + "0": "0.564264430051482" + }, + { + "0": "0.57981799211563" + }, + { + "0": "0.549642657884299" + }, + { + "0": "0.560083763489536" + }, + { + "0": "0.540183985220458" + }, + { + "0": "0.533846681206827" + }, + { + "0": "0.527513956089385" + }, + { + "0": "0.532806314680772" + }, + { + "0": "0.567389424132436" + }, + { + "0": "0.61640870864725" + }, + { + "0": "0.530686101983858" + }, + { + "0": "0.614440187240678" + }, + { + "0": "0.596213428901749" + }, + { + "0": "0.571551792384683" + }, + { + "0": "0.518014640803796" + }, + { + "0": "0.519048942157264" + }, + { + "0": "0.538068756651188" + }, + { + "0": "0.540174349378963" + }, + { + "0": "0.543830018314739" + }, + { + "0": "0.550457177094752" + }, + { + "0": "0.553698979931743" + }, + { + "0": "0.714101181735748" + }, + { + "0": "0.532888412464515" + }, + { + "0": "0.533111909604749" + }, + { + "0": "0.545479192715955" + }, + { + "0": "0.595453507344103" + }, + { + "0": "0.531521774533034" + }, + { + "0": "0.542589089850543" + }, + { + "0": "0.53974186951652" + }, + { + "0": "0.522235577240219" + }, + { + "0": "0.537754995940714" + }, + { + "0": "0.585382681040573" + }, + { + "0": "0.517696926910842" + }, + { + "0": "0.584308406614261" + }, + { + "0": "0.550943678599124" + }, + { + "0": "0.577532532997846" + }, + { + "0": "0.52285489641582" + }, + { + "0": "0.606269608989805" + }, + { + "0": "0.528612509702362" + }, + { + "0": "0.539204839975205" + }, + { + "0": "0.53512753969964" + }, + { + "0": "0.54268645783611" + }, + { + "0": "0.525634478462372" + }, + { + "0": "0.538081277450951" + }, + { + "0": "0.631755840397432" + }, + { + "0": "0.547007571997674" + }, + { + "0": "0.574930823736047" + }, + { + "0": "0.677226742802213" + }, + { + "0": "0.590495918075773" + }, + { + "0": "0.510825434864642" + }, + { + "0": "0.513786203285217" + }, + { + "0": "0.58512178168751" + }, + { + "0": "0.535868574485643" + }, + { + "0": "0.534609345518842" + }, + { + "0": "0.533961596301978" + }, + { + "0": "0.524566390666557" + }, + { + "0": "0.506558145380366" + }, + { + "0": "0.535845461755746" + }, + { + "0": "0.5638030981048" + }, + { + "0": "0.548993692889821" + }, + { + "0": "0.50050691343988" + }, + { + "0": "0.536376250318446" + }, + { + "0": "0.500188264764083" + }, + { + "0": "0.534910823454973" + }, + { + "0": "0.5643341751155" + }, + { + "0": "0.609896457538085" + }, + { + "0": "0.566438058488142" + }, + { + "0": "0.561242831795889" + }, + { + "0": "0.536390023391556" + }, + { + "0": "0.500082511851487" + }, + { + "0": "0.543235181542286" + }, + { + "0": "0.528457394696366" + }, + { + "0": "0.532697519155538" + }, + { + "0": "0.538162581457354" + }, + { + "0": "0.52097456908694" + }, + { + "0": "0.578781540725801" + }, + { + "0": "0.656265662004084" + }, + { + "0": "0.633494540401443" + }, + { + "0": "0.695543076159063" + }, + { + "0": "0.627245786863865" + }, + { + "0": "0.612016239419623" + }, + { + "0": "0.532674524199931" + }, + { + "0": "0.619672136844032" + }, + { + "0": "0.614178800854829" + }, + { + "0": "0.61974580961041" + }, + { + "0": "0.520655867416875" + }, + { + "0": "0.664368290710716" + }, + { + "0": "0.530594760213863" + }, + { + "0": "0.606608979201784" + }, + { + "0": "0.524654252111426" + }, + { + "0": "0.593740616780612" + }, + { + "0": "0.532740953523827" + }, + { + "0": "0.536455365672018" + }, + { + "0": "0.650707853980301" + }, + { + "0": "0.614338680969411" + }, + { + "0": "0.519817604497338" + }, + { + "0": "0.554492115566763" + }, + { + "0": "0.519270184776206" + }, + { + "0": "0.558404983323835" + }, + { + "0": "0.563092468861748" + }, + { + "0": "0.557577568755284" + }, + { + "0": "0.548761321758697" + }, + { + "0": "0.537602793123802" + }, + { + "0": "0.648186987806384" + }, + { + "0": "0.523934625333928" + }, + { + "0": "0.520554540437581" + }, + { + "0": "0.526574429769549" + }, + { + "0": "0.529749331611633" + }, + { + "0": "0.59742247714916" + }, + { + "0": "0.549318537158399" + }, + { + "0": "0.528166109929728" + }, + { + "0": "0.515168255555967" + }, + { + "0": "0.555918085080906" + }, + { + "0": "0.6903768662012" + }, + { + "0": "0.557480232973765" + }, + { + "0": "0.528576856553275" + }, + { + "0": "0.52256021281058" + }, + { + "0": "0.521706683881745" + }, + { + "0": "0.526681001034499" + }, + { + "0": "0.573502905417494" + }, + { + "0": "0.537109354085235" + }, + { + "0": "0.53395171196016" + }, + { + "0": "0.553917295212285" + }, + { + "0": "0.536396943701678" + }, + { + "0": "0.53931462864989" + }, + { + "0": "0.522985538315217" + }, + { + "0": "0.525962706694964" + }, + { + "0": "0.637084582858347" + }, + { + "0": "0.51907660562058" + }, + { + "0": "0.519494961027409" + }, + { + "0": "0.553172248280417" + }, + { + "0": "0.51948522891008" + }, + { + "0": "0.546787017725502" + }, + { + "0": "0.577545396377495" + }, + { + "0": "0.552744755060908" + }, + { + "0": "0.537440218624975" + }, + { + "0": "0.539619445664878" + }, + { + "0": "0.526265378030762" + }, + { + "0": "0.535014523191443" + }, + { + "0": "0.551799591086553" + }, + { + "0": "0.561215341905027" + }, + { + "0": "0.533337045882085" + }, + { + "0": "0.579597636790783" + }, + { + "0": "0.618981605811811" + }, + { + "0": "0.536051125325815" + }, + { + "0": "0.538283791308615" + }, + { + "0": "0.583409869050619" + }, + { + "0": "0.514305293878076" + }, + { + "0": "0.51716533900784" + }, + { + "0": "0.531830040518781" + }, + { + "0": "0.563467134989793" + }, + { + "0": "0.551408936246406" + }, + { + "0": "0.563064969062185" + }, + { + "0": "0.527303264949466" + }, + { + "0": "0.567885442828603" + }, + { + "0": "0.55580174580012" + }, + { + "0": "0.537540589732751" + }, + { + "0": "0.532582032743768" + }, + { + "0": "0.521301139851527" + }, + { + "0": "0.532400947855348" + }, + { + "0": "0.524766296135058" + }, + { + "0": "0.53806603436468" + }, + { + "0": "0.616329989571358" + }, + { + "0": "0.62220143996187" + }, + { + "0": "0.572771257924974" + }, + { + "0": "0.540362371165434" + }, + { + "0": "0.552431135873713" + }, + { + "0": "0.578354501027972" + }, + { + "0": "0.540337188830886" + }, + { + "0": "0.591608735374287" + }, + { + "0": "0.562050211732465" + }, + { + "0": "0.645615827528577" + }, + { + "0": "0.556852983694427" + }, + { + "0": "0.58618214467482" + }, + { + "0": "0.532573862171988" + }, + { + "0": "0.520337451180183" + }, + { + "0": "0.57609110175061" + }, + { + "0": "0.702554841151867" + }, + { + "0": "0.518219880176922" + }, + { + "0": "0.516034800975232" + }, + { + "0": "0.632617484243" + }, + { + "0": "0.599443704314793" + }, + { + "0": "0.57337818063825" + }, + { + "0": "0.657881241812768" + }, + { + "0": "0.565391478286925" + }, + { + "0": "0.549296389487227" + }, + { + "0": "0.558198213800326" + }, + { + "0": "0.561971417344594" + }, + { + "0": "0.658664077383688" + }, + { + "0": "0.55277310585958" + }, + { + "0": "0.562066716107279" + }, + { + "0": "0.559211603994243" + }, + { + "0": "0.531722577256249" + }, + { + "0": "0.512710983403228" + }, + { + "0": "0.547209022971099" + }, + { + "0": "0.572645520691074" + }, + { + "0": "0.577087826189618" + }, + { + "0": "0.527213434933749" + }, + { + "0": "0.668324906566084" + }, + { + "0": "0.63792836110654" + }, + { + "0": "0.713516108399269" + }, + { + "0": "0.547007714679515" + }, + { + "0": "0.581863553770728" + }, + { + "0": "0.528569637684848" + }, + { + "0": "0.541769021633449" + }, + { + "0": "0.619115326112556" + }, + { + "0": "0.631107050623596" + }, + { + "0": "0.557244415491241" + }, + { + "0": "0.525703157742713" + }, + { + "0": "0.541031331732759" + }, + { + "0": "0.621075097440378" + }, + { + "0": "0.537645408112438" + }, + { + "0": "0.553712166979504" + }, + { + "0": "0.572559041012212" + }, + { + "0": "0.632508820996504" + }, + { + "0": "0.653412672618503" + }, + { + "0": "0.598820667399332" + }, + { + "0": "0.500119772693713" + }, + { + "0": "0.61011267891305" + }, + { + "0": "0.569637639792006" + }, + { + "0": "0.526254007973401" + }, + { + "0": "0.541861237284385" + }, + { + "0": "0.551091185282679" + }, + { + "0": "0.559144195505788" + }, + { + "0": "0.536069940287731" + }, + { + "0": "0.617629113609261" + }, + { + "0": "0.664177575988751" + }, + { + "0": "0.60208489961876" + }, + { + "0": "0.500082511851487" + }, + { + "0": "0.503997893619228" + }, + { + "0": "0.505269781703925" + }, + { + "0": "0.504422299619089" + }, + { + "0": "0.501033164518628" + }, + { + "0": "0.5036797465237" + }, + { + "0": "0.500397665446937" + }, + { + "0": "0.503044855892111" + }, + { + "0": "0.504633708909319" + }, + { + "0": "0.503999077161464" + }, + { + "0": "0.503151810091045" + }, + { + "0": "0.505376301107981" + }, + { + "0": "0.503893164675449" + }, + { + "0": "0.500509149715399" + }, + { + "0": "0.503681670972926" + }, + { + "0": "0.504105295641125" + }, + { + "0": "0.504951617892919" + }, + { + "0": "0.500086623387047" + }, + { + "0": "0.504105295641125" + }, + { + "0": "0.503680951570829" + }, + { + "0": "0.501986146802142" + }, + { + "0": "0.503893571630694" + }, + { + "0": "0.504315331115365" + }, + { + "0": "0.504846426049674" + }, + { + "0": "0.501772446076055" + }, + { + "0": "0.503999396157458" + }, + { + "0": "0.506425228303067" + }, + { + "0": "0.503678137631321" + }, + { + "0": "0.503574588065004" + }, + { + "0": "0.500397665446937" + }, + { + "0": "0.50622191985043" + }, + { + "0": "0.506963221331026" + }, + { + "0": "0.502726982904642" + }, + { + "0": "0.502939379568072" + }, + { + "0": "0.503681412291022" + }, + { + "0": "0.519480661158381" + }, + { + "0": "0.576918072001569" + }, + { + "0": "0.533020953833861" + }, + { + "0": "0.523527771431601" + }, + { + "0": "0.535968104240906" + }, + { + "0": "0.529856412436119" + }, + { + "0": "0.50399087732066" + }, + { + "0": "0.531010194776799" + }, + { + "0": "0.529644235315759" + }, + { + "0": "0.536189911199291" + }, + { + "0": "0.552873783671604" + }, + { + "0": "0.531646778237444" + }, + { + "0": "0.534284985083685" + }, + { + "0": "0.529645719289535" + }, + { + "0": "0.558009867368689" + }, + { + "0": "0.537553119121937" + }, + { + "0": "0.526062463184394" + }, + { + "0": "0.520246459616559" + }, + { + "0": "0.621358249913277" + }, + { + "0": "0.535965770452599" + }, + { + "0": "0.551204371128991" + }, + { + "0": "0.651692655945873" + }, + { + "0": "0.611523160340748" + }, + { + "0": "0.611121154589955" + }, + { + "0": "0.515903497080595" + }, + { + "0": "0.533022355594842" + }, + { + "0": "0.539770675605572" + }, + { + "0": "0.523187783991226" + }, + { + "0": "0.552454325207088" + }, + { + "0": "0.515386267344444" + }, + { + "0": "0.542077447579678" + }, + { + "0": "0.515594676342194" + }, + { + "0": "0.588650061247264" + }, + { + "0": "0.582470916526137" + }, + { + "0": "0.531441207905997" + }, + { + "0": "0.518766425839828" + }, + { + "0": "0.525529194289381" + }, + { + "0": "0.555284942072292" + }, + { + "0": "0.553281032226698" + }, + { + "0": "0.532494962709134" + }, + { + "0": "0.548290008442257" + }, + { + "0": "0.515910643037625" + }, + { + "0": "0.5574869583231" + }, + { + "0": "0.530276745814448" + }, + { + "0": "0.529542903773113" + }, + { + "0": "0.543968018364754" + }, + { + "0": "0.536712552634515" + }, + { + "0": "0.537771445390999" + }, + { + "0": "0.607912701505824" + }, + { + "0": "0.54018545618374" + }, + { + "0": "0.513884157297632" + }, + { + "0": "0.560204929404994" + }, + { + "0": "0.549965810322089" + }, + { + "0": "0.516543950578145" + }, + { + "0": "0.531756324653175" + }, + { + "0": "0.554039398396341" + }, + { + "0": "0.515913919074017" + }, + { + "0": "0.537028086233782" + }, + { + "0": "0.533970610977168" + }, + { + "0": "0.537439699145946" + }, + { + "0": "0.503032035585378" + }, + { + "0": "0.535022659636986" + }, + { + "0": "0.62541889721743" + }, + { + "0": "0.5190838539578" + }, + { + "0": "0.54885361381823" + }, + { + "0": "0.530172885219195" + }, + { + "0": "0.548476068832895" + }, + { + "0": "0.528588396327555" + }, + { + "0": "0.519290145193907" + }, + { + "0": "0.610060337133076" + }, + { + "0": "0.524058791656389" + }, + { + "0": "0.554253817785395" + }, + { + "0": "0.523625322090258" + }, + { + "0": "0.565927519544766" + }, + { + "0": "0.547226356142816" + }, + { + "0": "0.542600573270477" + }, + { + "0": "0.544288465047673" + }, + { + "0": "0.525413768059538" + }, + { + "0": "0.53028231214033" + }, + { + "0": "0.53978306768795" + }, + { + "0": "0.517500457443387" + }, + { + "0": "0.528907816285504" + }, + { + "0": "0.568540443597324" + }, + { + "0": "0.520147702250684" + }, + { + "0": "0.607280099483307" + }, + { + "0": "0.517714823107898" + }, + { + "0": "0.553835085337632" + }, + { + "0": "0.522998629754183" + }, + { + "0": "0.532406168578773" + }, + { + "0": "0.518353457520128" + }, + { + "0": "0.523850404376263" + }, + { + "0": "0.519516928837342" + }, + { + "0": "0.513481043251907" + }, + { + "0": "0.51623331886694" + }, + { + "0": "0.519511007066461" + }, + { + "0": "0.536719557331241" + }, + { + "0": "0.530179453875243" + }, + { + "0": "0.525939008986978" + }, + { + "0": "0.537561062326481" + }, + { + "0": "0.525215017698695" + }, + { + "0": "0.586006085250416" + }, + { + "0": "0.526484147094335" + }, + { + "0": "0.512211706068819" + }, + { + "0": "0.539022519998995" + }, + { + "0": "0.621768603698562" + }, + { + "0": "0.54102300535805" + }, + { + "0": "0.519512180440947" + }, + { + "0": "0.523532274798145" + }, + { + "0": "0.519300118472521" + }, + { + "0": "0.60010797606342" + }, + { + "0": "0.524479568898256" + }, + { + "0": "0.536071326262305" + }, + { + "0": "0.53165339162787" + }, + { + "0": "0.523938746733405" + }, + { + "0": "0.552171716470308" + }, + { + "0": "0.520152768816889" + }, + { + "0": "0.558238663993691" + }, + { + "0": "0.541022909267938" + }, + { + "0": "0.532819774753799" + }, + { + "0": "0.518351687848384" + }, + { + "0": "0.538079248844667" + }, + { + "0": "0.541758096040472" + }, + { + "0": "0.511789782780601" + }, + { + "0": "0.546919509273032" + }, + { + "0": "0.538192158833914" + }, + { + "0": "0.562888357533791" + }, + { + "0": "0.512317197583026" + }, + { + "0": "0.577539765852863" + }, + { + "0": "0.526482534567171" + }, + { + "0": "0.535764387264257" + }, + { + "0": "0.577846525679983" + }, + { + "0": "0.533972672180711" + }, + { + "0": "0.529640284932461" + }, + { + "0": "0.534510682450665" + }, + { + "0": "0.516229343574099" + }, + { + "0": "0.518453159461357" + }, + { + "0": "0.557674457128811" + }, + { + "0": "0.606092747108135" + }, + { + "0": "0.544693845471279" + }, + { + "0": "0.522575470262854" + }, + { + "0": "0.530291267398377" + }, + { + "0": "0.515593239330586" + }, + { + "0": "0.52679557840144" + }, + { + "0": "0.514533732118349" + }, + { + "0": "0.562163423382944" + }, + { + "0": "0.535862590991323" + }, + { + "0": "0.555390712661694" + }, + { + "0": "0.520464758471946" + }, + { + "0": "0.523947949584208" + }, + { + "0": "0.525515886105048" + }, + { + "0": "0.525847746339303" + }, + { + "0": "0.527117286869398" + }, + { + "0": "0.551203551961761" + }, + { + "0": "0.544289978783685" + }, + { + "0": "0.525418457686688" + }, + { + "0": "0.565626375919423" + }, + { + "0": "0.589910612209642" + }, + { + "0": "0.527009551081697" + }, + { + "0": "0.600300814579268" + }, + { + "0": "0.516653318522813" + }, + { + "0": "0.515915584178831" + }, + { + "0": "0.554343169313125" + }, + { + "0": "0.533230819384953" + }, + { + "0": "0.522359696903315" + }, + { + "0": "0.533266198270915" + }, + { + "0": "0.52595939467332" + }, + { + "0": "0.567786533385653" + }, + { + "0": "0.64804377906901" + }, + { + "0": "0.52839380102739" + }, + { + "0": "0.51708042316267" + }, + { + "0": "0.520571672919155" + }, + { + "0": "0.515711719866628" + }, + { + "0": "0.525856676807037" + }, + { + "0": "0.518455612200938" + }, + { + "0": "0.526270881649017" + }, + { + "0": "0.515596136521007" + }, + { + "0": "0.511692188240665" + }, + { + "0": "0.511162707441001" + }, + { + "0": "0.544825549039483" + }, + { + "0": "0.62174879095545" + }, + { + "0": "0.568425690004187" + }, + { + "0": "0.54408526393889" + }, + { + "0": "0.527762515037283" + }, + { + "0": "0.538719903741305" + }, + { + "0": "0.54807436176263" + }, + { + "0": "0.528492998570397" + }, + { + "0": "0.522895987268998" + }, + { + "0": "0.533250215167024" + }, + { + "0": "0.545445867804963" + }, + { + "0": "0.537770673488953" + }, + { + "0": "0.517612987320537" + }, + { + "0": "0.537882493524138" + }, + { + "0": "0.51666260322181" + }, + { + "0": "0.508618143098293" + }, + { + "0": "0.544072730523066" + }, + { + "0": "0.502932199148238" + }, + { + "0": "0.511898771512455" + }, + { + "0": "0.510842487669288" + }, + { + "0": "0.518667338443818" + }, + { + "0": "0.534095473269616" + }, + { + "0": "0.544921230544478" + }, + { + "0": "0.517612602793927" + }, + { + "0": "0.523006763965576" + }, + { + "0": "0.528576050156299" + }, + { + "0": "0.531131097713106" + }, + { + "0": "0.508724489788857" + }, + { + "0": "0.625045215060943" + }, + { + "0": "0.532610562423059" + }, + { + "0": "0.526706482421562" + }, + { + "0": "0.52492099591029" + }, + { + "0": "0.52681431343024" + }, + { + "0": "0.52681646839284" + }, + { + "0": "0.598999061262759" + }, + { + "0": "0.529760839741537" + }, + { + "0": "0.526808399231399" + }, + { + "0": "0.534618344532433" + }, + { + "0": "0.577460120546538" + }, + { + "0": "0.52025339134107" + }, + { + "0": "0.510738297590186" + }, + { + "0": "0.554770004023546" + }, + { + "0": "0.539135762540977" + }, + { + "0": "0.539883234688777" + }, + { + "0": "0.62261032391193" + }, + { + "0": "0.526820149027902" + }, + { + "0": "0.518060864371046" + }, + { + "0": "0.538204569685325" + }, + { + "0": "0.575602426688964" + }, + { + "0": "0.563954154305229" + }, + { + "0": "0.545234485210159" + }, + { + "0": "0.510311402513388" + }, + { + "0": "0.534396893395563" + }, + { + "0": "0.543439577327696" + }, + { + "0": "0.547317723098055" + }, + { + "0": "0.642146343843908" + }, + { + "0": "0.521096964946773" + }, + { + "0": "0.530180879256413" + }, + { + "0": "0.531668397206906" + }, + { + "0": "0.524379687442359" + }, + { + "0": "0.518456475436027" + }, + { + "0": "0.523212293080371" + }, + { + "0": "0.559357227617355" + }, + { + "0": "0.547657167138417" + }, + { + "0": "0.532501570029569" + }, + { + "0": "0.538614059000473" + }, + { + "0": "0.54648326914036" + }, + { + "0": "0.584725935435421" + }, + { + "0": "0.541139393283251" + }, + { + "0": "0.519196703268143" + }, + { + "0": "0.555829001429131" + }, + { + "0": "0.518667169632526" + }, + { + "0": "0.524907072253862" + }, + { + "0": "0.519302903427545" + }, + { + "0": "0.524036517712148" + }, + { + "0": "0.521205700411879" + }, + { + "0": "0.56104874423552" + }, + { + "0": "0.533872083864572" + }, + { + "0": "0.514221049391595" + }, + { + "0": "0.513172213872363" + }, + { + "0": "0.525850146224422" + }, + { + "0": "0.563643506960894" + }, + { + "0": "0.563223507870323" + }, + { + "0": "0.53608962691249" + }, + { + "0": "0.572072081769464" + }, + { + "0": "0.512952518747431" + }, + { + "0": "0.514117886292152" + }, + { + "0": "0.512741762456737" + }, + { + "0": "0.543869549567292" + }, + { + "0": "0.520985197805575" + }, + { + "0": "0.535562681195416" + }, + { + "0": "0.517821436926166" + }, + { + "0": "0.530599662001714" + }, + { + "0": "0.523948312032986" + }, + { + "0": "0.522270359234327" + }, + { + "0": "0.538295570378759" + }, + { + "0": "0.527018205654142" + }, + { + "0": "0.528290391664893" + }, + { + "0": "0.534403653540447" + }, + { + "0": "0.541768882550263" + }, + { + "0": "0.533033498020335" + }, + { + "0": "0.531548859887512" + }, + { + "0": "0.569356931126395" + }, + { + "0": "0.525751330766952" + }, + { + "0": "0.557503701561447" + }, + { + "0": "0.510838770348238" + }, + { + "0": "0.535241162422501" + }, + { + "0": "0.539345615211306" + }, + { + "0": "0.525737492697916" + }, + { + "0": "0.524377542651717" + }, + { + "0": "0.561035383687572" + }, + { + "0": "0.533039782021812" + }, + { + "0": "0.520358105578391" + }, + { + "0": "0.51210781636428" + }, + { + "0": "0.51782386663514" + }, + { + "0": "0.549020390063029" + }, + { + "0": "0.510947257508417" + }, + { + "0": "0.548706339391201" + }, + { + "0": "0.534937038408737" + }, + { + "0": "0.548597237814249" + }, + { + "0": "0.54271238927245" + }, + { + "0": "0.522269946450108" + }, + { + "0": "0.516453115937419" + }, + { + "0": "0.521947479926272" + }, + { + "0": "0.53007386391076" + }, + { + "0": "0.522687324955082" + }, + { + "0": "0.549003932920271" + }, + { + "0": "0.525126417375219" + }, + { + "0": "0.593081246030962" + }, + { + "0": "0.520049501026279" + }, + { + "0": "0.536610318134459" + }, + { + "0": "0.526798097912787" + }, + { + "0": "0.562193199105209" + }, + { + "0": "0.534295619770303" + }, + { + "0": "0.516869435744249" + }, + { + "0": "0.530917592197327" + }, + { + "0": "0.557297767899843" + }, + { + "0": "0.527967299036196" + }, + { + "0": "0.544196560287588" + }, + { + "0": "0.556643136464305" + }, + { + "0": "0.502715460747842" + }, + { + "0": "0.522578156243307" + }, + { + "0": "0.518565407086999" + }, + { + "0": "0.524904469546004" + }, + { + "0": "0.513388200343799" + }, + { + "0": "0.509150626539813" + }, + { + "0": "0.529020865916599" + }, + { + "0": "0.521635327100211" + }, + { + "0": "0.518248385056877" + }, + { + "0": "0.520891743769252" + }, + { + "0": "0.51634380519113" + }, + { + "0": "0.527438640068809" + }, + { + "0": "0.54070670520215" + }, + { + "0": "0.530397061854077" + }, + { + "0": "0.509044630119902" + }, + { + "0": "0.517932158491581" + }, + { + "0": "0.527758576524812" + }, + { + "0": "0.547230112165925" + }, + { + "0": "0.558836385909063" + }, + { + "0": "0.520576068306735" + }, + { + "0": "0.51517800866447" + }, + { + "0": "0.5299805263568" + }, + { + "0": "0.51740182628978" + }, + { + "0": "0.512747561697513" + }, + { + "0": "0.521224467938187" + }, + { + "0": "0.539655412617264" + }, + { + "0": "0.521097418248208" + }, + { + "0": "0.515373946092191" + }, + { + "0": "0.531034522504579" + }, + { + "0": "0.547647047411851" + }, + { + "0": "0.525013906464009" + }, + { + "0": "0.582528865517551" + }, + { + "0": "0.512435267356958" + }, + { + "0": "0.524273775611935" + }, + { + "0": "0.530612867569032" + }, + { + "0": "0.544187026131236" + }, + { + "0": "0.520572879984892" + }, + { + "0": "0.537773728386198" + }, + { + "0": "0.519939282116044" + }, + { + "0": "0.53945465810567" + }, + { + "0": "0.567405382972774" + }, + { + "0": "0.532725695310143" + }, + { + "0": "0.532078037916001" + }, + { + "0": "0.524804119518541" + }, + { + "0": "0.519099471680303" + }, + { + "0": "0.536714125639811" + }, + { + "0": "0.558561307398034" + }, + { + "0": "0.53354384164066" + }, + { + "0": "0.516446358717975" + }, + { + "0": "0.521209584770712" + }, + { + "0": "0.50788379079084" + }, + { + "0": "0.541345821950636" + }, + { + "0": "0.51739353897295" + }, + { + "0": "0.559693046026718" + }, + { + "0": "0.62025046592691" + }, + { + "0": "0.519204613380312" + }, + { + "0": "0.513383905909519" + }, + { + "0": "0.516027913750831" + }, + { + "0": "0.513381981270893" + }, + { + "0": "0.515714290169322" + }, + { + "0": "0.521521430831134" + }, + { + "0": "0.544287692128604" + }, + { + "0": "0.515500020200171" + }, + { + "0": "0.543155198851472" + }, + { + "0": "0.540296683049981" + }, + { + "0": "0.530310659941547" + }, + { + "0": "0.528505078974785" + }, + { + "0": "0.50989463120018" + }, + { + "0": "0.527332462780504" + }, + { + "0": "0.514650334534774" + }, + { + "0": "0.514973648365554" + }, + { + "0": "0.534592935126046" + }, + { + "0": "0.504828382527282" + }, + { + "0": "0.520988109036314" + }, + { + "0": "0.521207143518475" + }, + { + "0": "0.519729445262564" + }, + { + "0": "0.526688872559632" + }, + { + "0": "0.518462513055145" + }, + { + "0": "0.532395510223224" + }, + { + "0": "0.523954815288313" + }, + { + "0": "0.520263932182906" + }, + { + "0": "0.546287419841934" + }, + { + "0": "0.524586404929236" + }, + { + "0": "0.529337020085602" + }, + { + "0": "0.533008302750683" + }, + { + "0": "0.545547255700261" + }, + { + "0": "0.514760001637727" + }, + { + "0": "0.509682327569084" + }, + { + "0": "0.543766659841095" + }, + { + "0": "0.50851503660362" + }, + { + "0": "0.519413089580924" + }, + { + "0": "0.526388991750546" + }, + { + "0": "0.512326729922324" + }, + { + "0": "0.524589765249461" + }, + { + "0": "0.53588709675646" + }, + { + "0": "0.51264788575967" + }, + { + "0": "0.548711958148681" + }, + { + "0": "0.536193909805301" + }, + { + "0": "0.546726905742537" + }, + { + "0": "0.528496388856147" + }, + { + "0": "0.526494797916018" + }, + { + "0": "0.533038576912169" + }, + { + "0": "0.567795531837751" + }, + { + "0": "0.519307183170958" + }, + { + "0": "0.582519346981802" + }, + { + "0": "0.520994396193558" + }, + { + "0": "0.51687529158648" + }, + { + "0": "0.524484875316845" + }, + { + "0": "0.557076657041349" + }, + { + "0": "0.528812532688763" + }, + { + "0": "0.541454354872256" + }, + { + "0": "0.526602862632783" + }, + { + "0": "0.511899750539579" + }, + { + "0": "0.521631850337761" + }, + { + "0": "0.558112605692171" + }, + { + "0": "0.553832844193263" + }, + { + "0": "0.529018336834425" + }, + { + "0": "0.525224059128331" + }, + { + "0": "0.50904585038866" + }, + { + "0": "0.519944048877035" + }, + { + "0": "0.525865454863485" + }, + { + "0": "0.624256423846913" + }, + { + "0": "0.526384871344544" + }, + { + "0": "0.51084740342833" + }, + { + "0": "0.525341729918799" + }, + { + "0": "0.516453951424621" + }, + { + "0": "0.51148079184244" + }, + { + "0": "0.518148959141232" + }, + { + "0": "0.531243302244173" + }, + { + "0": "0.524910437907251" + }, + { + "0": "0.524909468527122" + }, + { + "0": "0.533983594273684" + }, + { + "0": "0.527657847352218" + }, + { + "0": "0.576942575279712" + }, + { + "0": "0.557398529132452" + }, + { + "0": "0.512964345070301" + }, + { + "0": "0.527874271258527" + }, + { + "0": "0.525448015339692" + }, + { + "0": "0.557702650624962" + }, + { + "0": "0.5067130590166" + }, + { + "0": "0.525224273520204" + }, + { + "0": "0.538697865315024" + }, + { + "0": "0.511270456641465" + }, + { + "0": "0.509260393989993" + }, + { + "0": "0.502189955106422" + }, + { + "0": "0.502402686982365" + }, + { + "0": "0.530615773971162" + }, + { + "0": "0.537150934616383" + }, + { + "0": "0.565109533183097" + }, + { + "0": "0.535997991503542" + }, + { + "0": "0.565833552863168" + }, + { + "0": "0.515606463628825" + }, + { + "0": "0.520896841073154" + }, + { + "0": "0.52502262515533" + }, + { + "0": "0.519520176955785" + }, + { + "0": "0.530506949811784" + }, + { + "0": "0.523753696730477" + }, + { + "0": "0.549932082044345" + }, + { + "0": "0.523959883331546" + }, + { + "0": "0.524698136220871" + }, + { + "0": "0.52406093357454" + }, + { + "0": "0.538719923972645" + }, + { + "0": "0.521946724565028" + }, + { + "0": "0.534922101322279" + }, + { + "0": "0.52131669347493" + }, + { + "0": "0.511589333180718" + }, + { + "0": "0.529638266983758" + }, + { + "0": "0.523324379046416" + }, + { + "0": "0.512435833993264" + }, + { + "0": "0.531351086661289" + }, + { + "0": "0.522580120314646" + }, + { + "0": "0.515401014177176" + }, + { + "0": "0.526601650256875" + }, + { + "0": "0.518249534083203" + }, + { + "0": "0.513814884611332" + }, + { + "0": "0.513598675035511" + }, + { + "0": "0.515182708929248" + }, + { + "0": "0.534305819064914" + }, + { + "0": "0.517499648284218" + }, + { + "0": "0.542724207823081" + }, + { + "0": "0.514808997787578" + }, + { + "0": "0.52321999792419" + }, + { + "0": "0.520904126598843" + }, + { + "0": "0.536417080693816" + }, + { + "0": "0.526494449236774" + }, + { + "0": "0.511909188408576" + }, + { + "0": "0.518670022298246" + }, + { + "0": "0.52691394416" + }, + { + "0": "0.537875545934896" + }, + { + "0": "0.515291131145365" + }, + { + "0": "0.513810362807053" + }, + { + "0": "0.509575003119388" + }, + { + "0": "0.520680558623315" + }, + { + "0": "0.530070682205083" + }, + { + "0": "0.517303049739265" + }, + { + "0": "0.521322300146809" + }, + { + "0": "0.526395890119779" + }, + { + "0": "0.537151630551731" + }, + { + "0": "0.522056651377059" + }, + { + "0": "0.518467643415525" + }, + { + "0": "0.513806350426503" + }, + { + "0": "0.519625704084659" + }, + { + "0": "0.545972582805342" + }, + { + "0": "0.524908686146484" + }, + { + "0": "0.520788287628548" + }, + { + "0": "0.523860838467752" + }, + { + "0": "0.515923882226532" + }, + { + "0": "0.531020345374435" + }, + { + "0": "0.525231466185001" + }, + { + "0": "0.557693430360796" + }, + { + "0": "0.507912419432161" + }, + { + "0": "0.511294981022314" + }, + { + "0": "0.507702211753261" + }, + { + "0": "0.507396113681954" + }, + { + "0": "0.509186195148856" + }, + { + "0": "0.510666354368889" + }, + { + "0": "0.508123545269911" + }, + { + "0": "0.503043023695294" + }, + { + "0": "0.506221769851544" + }, + { + "0": "0.500713801658236" + }, + { + "0": "0.50314926497515" + }, + { + "0": "0.507280062880544" + }, + { + "0": "0.509610013020401" + }, + { + "0": "0.508974827038681" + }, + { + "0": "0.501667189915785" + }, + { + "0": "0.507699766707066" + }, + { + "0": "0.501455051414703" + }, + { + "0": "0.507491992219218" + }, + { + "0": "0.51076835871425" + }, + { + "0": "0.508542395318623" + }, + { + "0": "0.508545990833183" + }, + { + "0": "0.508546734078786" + }, + { + "0": "0.508544709848441" + }, + { + "0": "0.508544694588013" + }, + { + "0": "0.508541865904562" + }, + { + "0": "0.508542248221413" + }, + { + "0": "0.508541636086292" + }, + { + "0": "0.508544557459732" + }, + { + "0": "0.508544796568558" + }, + { + "0": "0.508549542206595" + }, + { + "0": "0.508541011766978" + }, + { + "0": "0.508543421615693" + }, + { + "0": "0.508540439999562" + }, + { + "0": "0.508543345896577" + }, + { + "0": "0.508542802855637" + }, + { + "0": "0.508539926736471" + }, + { + "0": "0.508545995912033" + }, + { + "0": "0.508538838883605" + }, + { + "0": "0.508542785237564" + }, + { + "0": "0.508539965556381" + }, + { + "0": "0.508542551874612" + }, + { + "0": "0.508543720449608" + }, + { + "0": "0.508544698485248" + }, + { + "0": "0.508544054869637" + }, + { + "0": "0.508547466862163" + }, + { + "0": "0.50854153936703" + }, + { + "0": "0.508540698375298" + }, + { + "0": "0.508542453010738" + }, + { + "0": "0.508546881671141" + }, + { + "0": "0.508543451652787" + }, + { + "0": "0.508546487721531" + }, + { + "0": "0.508544660871952" + }, + { + "0": "0.508544291704521" + }, + { + "0": "0.508545461403606" + }, + { + "0": "0.508543077671823" + }, + { + "0": "0.508546778347943" + }, + { + "0": "0.508543230232918" + }, + { + "0": "0.508542652305953" + }, + { + "0": "0.508543423357579" + }, + { + "0": "0.508541591548853" + }, + { + "0": "0.508541533066781" + }, + { + "0": "0.508542760668412" + }, + { + "0": "0.508541470466665" + }, + { + "0": "0.508540236397015" + }, + { + "0": "0.508546947120782" + }, + { + "0": "0.508542800634191" + }, + { + "0": "0.508541223949117" + }, + { + "0": "0.508540621894216" + }, + { + "0": "0.508544267413462" + }, + { + "0": "0.508542709708087" + }, + { + "0": "0.50853991328134" + }, + { + "0": "0.50854637245423" + }, + { + "0": "0.508542812915718" + }, + { + "0": "0.508543658000106" + }, + { + "0": "0.508539504827752" + }, + { + "0": "0.508543325351302" + }, + { + "0": "0.508609089837164" + }, + { + "0": "0.508545298801302" + }, + { + "0": "0.508535064389074" + }, + { + "0": "0.508545178129463" + }, + { + "0": "0.508544061761339" + }, + { + "0": "0.508544918535715" + }, + { + "0": "0.508544909369966" + }, + { + "0": "0.508546893499952" + }, + { + "0": "0.508540563763961" + }, + { + "0": "0.508539076940465" + }, + { + "0": "0.508544011108658" + }, + { + "0": "0.508541461769173" + }, + { + "0": "0.508544654942309" + }, + { + "0": "0.508545876340102" + }, + { + "0": "0.508543847422471" + }, + { + "0": "0.509602061708852" + }, + { + "0": "0.509602539816764" + }, + { + "0": "0.509599839663005" + }, + { + "0": "0.509605336377061" + }, + { + "0": "0.509599741803073" + }, + { + "0": "0.509595906214928" + }, + { + "0": "0.509589310108831" + }, + { + "0": "0.50960025980917" + }, + { + "0": "0.509603160657451" + }, + { + "0": "0.509604774219584" + }, + { + "0": "0.509605971029248" + }, + { + "0": "0.509601668624906" + }, + { + "0": "0.509603383862112" + }, + { + "0": "0.509602282262013" + }, + { + "0": "0.509594730964669" + }, + { + "0": "0.509603477593412" + }, + { + "0": "0.50959954984566" + }, + { + "0": "0.509597487453435" + }, + { + "0": "0.509598579892682" + }, + { + "0": "0.509604907951054" + }, + { + "0": "0.509600515194222" + }, + { + "0": "0.509601012091125" + }, + { + "0": "0.5096047221309" + }, + { + "0": "0.509600521086033" + }, + { + "0": "0.509602233480787" + }, + { + "0": "0.509603626922529" + }, + { + "0": "0.5096058543983" + }, + { + "0": "0.509602992633306" + }, + { + "0": "0.509605651014093" + }, + { + "0": "0.509605832270608" + }, + { + "0": "0.509605453839045" + }, + { + "0": "0.509602627572132" + }, + { + "0": "0.509580107851106" + }, + { + "0": "0.509598978410786" + }, + { + "0": "0.50960355375438" + }, + { + "0": "0.509603520252359" + }, + { + "0": "0.509601444213747" + }, + { + "0": "0.509598339080028" + }, + { + "0": "0.509601422394841" + }, + { + "0": "0.50960399112988" + }, + { + "0": "0.509601751084147" + }, + { + "0": "0.509599730962208" + }, + { + "0": "0.509594787932159" + }, + { + "0": "0.509599021490631" + }, + { + "0": "0.509601028460852" + }, + { + "0": "0.509601388050583" + }, + { + "0": "0.509600352439633" + }, + { + "0": "0.509604594623992" + }, + { + "0": "0.509604423152059" + }, + { + "0": "0.509603788686504" + }, + { + "0": "0.509603915026215" + }, + { + "0": "0.509601829373888" + }, + { + "0": "0.50960401258572" + }, + { + "0": "0.509602820145023" + }, + { + "0": "0.509601863001309" + }, + { + "0": "0.50960154418546" + }, + { + "0": "0.509597951757383" + }, + { + "0": "0.509605184446334" + }, + { + "0": "0.509603046027481" + }, + { + "0": "0.509601829373888" + }, + { + "0": "0.509601357928497" + }, + { + "0": "0.509600716457847" + }, + { + "0": "0.507480894071242" + }, + { + "0": "0.507480571286318" + }, + { + "0": "0.50747430464893" + }, + { + "0": "0.507486471347018" + }, + { + "0": "0.507481397347912" + }, + { + "0": "0.507484662465131" + }, + { + "0": "0.507481719683879" + }, + { + "0": "0.507482867306867" + }, + { + "0": "0.507484461851318" + }, + { + "0": "0.507483301252431" + }, + { + "0": "0.50748275647793" + }, + { + "0": "0.507484336192806" + }, + { + "0": "0.507481648909251" + }, + { + "0": "0.507484149213686" + }, + { + "0": "0.507482506811055" + }, + { + "0": "0.507486105981939" + }, + { + "0": "0.507484843214817" + }, + { + "0": "0.507482104908588" + }, + { + "0": "0.507483595044051" + }, + { + "0": "0.507481059361879" + }, + { + "0": "0.507481548315653" + }, + { + "0": "0.507488487176749" + }, + { + "0": "0.50748334951052" + }, + { + "0": "0.507483278943964" + }, + { + "0": "0.507485285713115" + }, + { + "0": "0.507484922262007" + }, + { + "0": "0.507483209203044" + }, + { + "0": "0.507483673790209" + }, + { + "0": "0.507485041788017" + }, + { + "0": "0.507483944117534" + }, + { + "0": "0.507485757799083" + }, + { + "0": "0.507484887185141" + }, + { + "0": "0.507492671389574" + }, + { + "0": "0.507482953776797" + }, + { + "0": "0.507484673970686" + }, + { + "0": "0.507482416745129" + }, + { + "0": "0.507487863356485" + }, + { + "0": "0.507485543508713" + }, + { + "0": "0.507480498131889" + }, + { + "0": "0.507479957260065" + }, + { + "0": "0.507483457537717" + }, + { + "0": "0.507487105413656" + }, + { + "0": "0.507480378703563" + }, + { + "0": "0.507480434820384" + }, + { + "0": "0.50748364132709" + }, + { + "0": "0.507482041514316" + }, + { + "0": "0.507482831344474" + }, + { + "0": "0.507485128847962" + }, + { + "0": "0.507484728713658" + }, + { + "0": "0.50748532442959" + }, + { + "0": "0.507485360097236" + }, + { + "0": "0.507481445207486" + }, + { + "0": "0.507484924350382" + }, + { + "0": "0.507481331064164" + }, + { + "0": "0.507480121583673" + }, + { + "0": "0.507486120885162" + }, + { + "0": "0.507482038032486" + }, + { + "0": "0.507479503479437" + }, + { + "0": "0.510661540055861" + }, + { + "0": "0.510658915927539" + }, + { + "0": "0.510664319957415" + }, + { + "0": "0.510658406927975" + }, + { + "0": "0.510660929572825" + }, + { + "0": "0.510660016267084" + }, + { + "0": "0.510655380886743" + }, + { + "0": "0.510661367069713" + }, + { + "0": "0.510666022463851" + }, + { + "0": "0.510660995635663" + }, + { + "0": "0.510664418676356" + }, + { + "0": "0.510664214190962" + }, + { + "0": "0.510662585505731" + }, + { + "0": "0.510660467099387" + }, + { + "0": "0.510663418345336" + }, + { + "0": "0.51065912247686" + }, + { + "0": "0.510661822557827" + }, + { + "0": "0.510666427914317" + }, + { + "0": "0.510663038029969" + }, + { + "0": "0.510657060280932" + }, + { + "0": "0.510632676071415" + }, + { + "0": "0.510661482560077" + }, + { + "0": "0.510656803192653" + }, + { + "0": "0.510666057793167" + }, + { + "0": "0.510660615972153" + }, + { + "0": "0.510665115404896" + }, + { + "0": "0.510660316771161" + }, + { + "0": "0.510661165639777" + }, + { + "0": "0.510657470667888" + }, + { + "0": "0.510660523052054" + }, + { + "0": "0.51066532364695" + }, + { + "0": "0.510661561701227" + }, + { + "0": "0.510666775310218" + }, + { + "0": "0.510662189205599" + }, + { + "0": "0.51066236628218" + }, + { + "0": "0.51065997913833" + }, + { + "0": "0.510660415277477" + }, + { + "0": "0.510660609538535" + }, + { + "0": "0.510658346561599" + }, + { + "0": "0.510650873882111" + }, + { + "0": "0.510658195171284" + }, + { + "0": "0.506421464411545" + }, + { + "0": "0.506424679116904" + }, + { + "0": "0.506425961450359" + }, + { + "0": "0.506424110267931" + }, + { + "0": "0.506424259076497" + }, + { + "0": "0.506423935434603" + }, + { + "0": "0.506424105874162" + }, + { + "0": "0.506423046863257" + }, + { + "0": "0.506423939349696" + }, + { + "0": "0.506424043962688" + }, + { + "0": "0.5064216217939" + }, + { + "0": "0.50642275814061" + }, + { + "0": "0.506429450309987" + }, + { + "0": "0.506424011620875" + }, + { + "0": "0.506423604978444" + }, + { + "0": "0.506425008009316" + }, + { + "0": "0.506423516275536" + }, + { + "0": "0.506424362953846" + }, + { + "0": "0.506424766464799" + }, + { + "0": "0.506427007243398" + }, + { + "0": "0.506424414941802" + }, + { + "0": "0.506423010293636" + }, + { + "0": "0.506423355195924" + }, + { + "0": "0.506422916620754" + }, + { + "0": "0.506425775642477" + }, + { + "0": "0.506424902359669" + }, + { + "0": "0.506423818549896" + }, + { + "0": "0.506425500898099" + }, + { + "0": "0.506422610366431" + }, + { + "0": "0.506428083885154" + }, + { + "0": "0.506424271478241" + }, + { + "0": "0.506422808243084" + }, + { + "0": "0.506424314418075" + }, + { + "0": "0.506425530883378" + }, + { + "0": "0.511724186225801" + }, + { + "0": "0.511725149799902" + }, + { + "0": "0.511724521368266" + }, + { + "0": "0.511716658276588" + }, + { + "0": "0.511719240065839" + }, + { + "0": "0.511722851713701" + }, + { + "0": "0.511719467397847" + }, + { + "0": "0.511718175109477" + }, + { + "0": "0.511719684655895" + }, + { + "0": "0.511718841876097" + }, + { + "0": "0.511723197093454" + }, + { + "0": "0.511723999434172" + }, + { + "0": "0.51172568359389" + }, + { + "0": "0.513208589700223" + }, + { + "0": "0.507386551878135" + }, + { + "0": "0.503466017431038" + }, + { + "0": "0.503361603575449" + }, + { + "0": "0.504525273535279" + }, + { + "0": "0.505583438082253" + }, + { + "0": "0.504630360274657" + }, + { + "0": "0.503362238072945" + }, + { + "0": "0.503361699046355" + }, + { + "0": "0.502618313716607" + }, + { + "0": "0.504107315143377" + }, + { + "0": "0.503464747376762" + }, + { + "0": "0.503149599095512" + }, + { + "0": "0.506113203161541" + }, + { + "0": "0.503254387367868" + }, + { + "0": "0.505161414400305" + }, + { + "0": "0.504632064801152" + }, + { + "0": "0.500398965345082" + }, + { + "0": "0.503602107191344" + }, + { + "0": "0.503467254239101" + }, + { + "0": "0.504001050037387" + }, + { + "0": "0.50526695036776" + }, + { + "0": "0.50452461621784" + }, + { + "0": "0.503572591638266" + }, + { + "0": "0.502408779041262" + }, + { + "0": "0.505265979036838" + }, + { + "0": "0.503994881629288" + }, + { + "0": "0.504839980739908" + }, + { + "0": "0.503677641553968" + }, + { + "0": "0.504734966448236" + }, + { + "0": "0.503677766396178" + }, + { + "0": "0.507173327234847" + }, + { + "0": "0.506962053675204" + }, + { + "0": "0.505584898239346" + }, + { + "0": "0.503996721150402" + }, + { + "0": "0.505266880520553" + }, + { + "0": "0.504737505038185" + }, + { + "0": "0.506854044637789" + }, + { + "0": "0.507276074660686" + }, + { + "0": "0.505160628757001" + }, + { + "0": "0.506115289808215" + }, + { + "0": "0.507701682849928" + }, + { + "0": "0.505900883869255" + }, + { + "0": "0.506006546417029" + }, + { + "0": "0.507280406365071" + }, + { + "0": "0.506749387898059" + }, + { + "0": "0.506007126585772" + }, + { + "0": "0.50653386989032" + }, + { + "0": "0.508021319922726" + }, + { + "0": "0.507174717753733" + }, + { + "0": "0.506634593342639" + }, + { + "0": "0.506008744978774" + }, + { + "0": "0.506643383420057" + }, + { + "0": "0.505689331064398" + }, + { + "0": "0.506751047935486" + }, + { + "0": "0.504020903129639" + }, + { + "0": "0.507386262708597" + }, + { + "0": "0.505373846271512" + }, + { + "0": "0.505161998100513" + }, + { + "0": "0.507489770788978" + }, + { + "0": "0.507174332055104" + }, + { + "0": "0.507491302375104" + }, + { + "0": "0.508127318471404" + }, + { + "0": "0.506221528328514" + }, + { + "0": "0.505374365940817" + }, + { + "0": "0.507278259140413" + }, + { + "0": "0.506218460405953" + }, + { + "0": "0.505583280693563" + }, + { + "0": "0.505592384309993" + }, + { + "0": "0.525864930640262" + }, + { + "0": "0.526179444277055" + }, + { + "0": "0.54209086659467" + }, + { + "0": "0.52089774915212" + }, + { + "0": "0.539054567205449" + }, + { + "0": "0.519521214307496" + }, + { + "0": "0.51877707777116" + }, + { + "0": "0.508098394783105" + }, + { + "0": "0.505346483328711" + }, + { + "0": "0.513602472083121" + }, + { + "0": "0.518253472541004" + }, + { + "0": "0.534301823111807" + }, + { + "0": "0.531569180884384" + }, + { + "0": "0.525018153946982" + }, + { + "0": "0.508520700132962" + }, + { + "0": "0.519530348937358" + }, + { + "0": "0.523008061101418" + }, + { + "0": "0.516351833611672" + }, + { + "0": "0.521209285833502" + }, + { + "0": "0.529659683366251" + }, + { + "0": "0.50391306655029" + }, + { + "0": "0.548491126492652" + }, + { + "0": "0.522799601276386" + }, + { + "0": "0.533982336931249" + }, + { + "0": "0.530614576300258" + }, + { + "0": "0.519944631589669" + }, + { + "0": "0.515186705073273" + }, + { + "0": "0.516666848535864" + }, + { + "0": "0.524271568963936" + }, + { + "0": "0.536515104805847" + }, + { + "0": "0.525011827515682" + }, + { + "0": "0.53872718473518" + }, + { + "0": "0.51751579601864" + }, + { + "0": "0.53746940007509" + }, + { + "0": "0.511693582113251" + }, + { + "0": "0.510319380160215" + }, + { + "0": "0.533033059729402" + }, + { + "0": "0.549009175146594" + }, + { + "0": "0.514869922002451" + }, + { + "0": "0.521845089659695" + }, + { + "0": "0.566651316822566" + }, + { + "0": "0.527451781302738" + }, + { + "0": "0.532192113190409" + }, + { + "0": "0.515824856650293" + }, + { + "0": "0.538421478761297" + }, + { + "0": "0.531563302831808" + }, + { + "0": "0.519314944632604" + }, + { + "0": "0.516040163774724" + }, + { + "0": "0.523432251448393" + }, + { + "0": "0.523004690700107" + }, + { + "0": "0.528191461770863" + }, + { + "0": "0.518466020099152" + }, + { + "0": "0.527562341933082" + }, + { + "0": "0.517838693714229" + }, + { + "0": "0.513497687670383" + }, + { + "0": "0.523748101130737" + }, + { + "0": "0.548267211292266" + }, + { + "0": "0.522905600740694" + }, + { + "0": "0.524601483801563" + }, + { + "0": "0.514021387946993" + }, + { + "0": "0.552369619944367" + }, + { + "0": "0.535896145084176" + }, + { + "0": "0.525444237320649" + }, + { + "0": "0.517729868391554" + }, + { + "0": "0.516456835978708" + }, + { + "0": "0.529031205588688" + }, + { + "0": "0.519103422448656" + }, + { + "0": "0.520052823321141" + }, + { + "0": "0.534208152767455" + }, + { + "0": "0.513808527112864" + }, + { + "0": "0.52913727732857" + }, + { + "0": "0.522476132206047" + }, + { + "0": "0.519313064250978" + }, + { + "0": "0.533468004581305" + }, + { + "0": "0.513708736207111" + }, + { + "0": "0.526284116211124" + }, + { + "0": "0.549127000501755" + }, + { + "0": "0.525219814794531" + }, + { + "0": "0.527453603292351" + }, + { + "0": "0.525872036221161" + }, + { + "0": "0.51264515231161" + }, + { + "0": "0.5319064218884" + }, + { + "0": "0.5290370544104" + }, + { + "0": "0.510635873228757" + }, + { + "0": "0.529100065414011" + }, + { + "0": "0.53788743917991" + }, + { + "0": "0.511060099127207" + }, + { + "0": "0.521110128856671" + }, + { + "0": "0.51550608019763" + }, + { + "0": "0.513494872168271" + }, + { + "0": "0.530084456269645" + }, + { + "0": "0.532620228938907" + }, + { + "0": "0.523116121238076" + }, + { + "0": "0.529032152039427" + }, + { + "0": "0.509365926284118" + }, + { + "0": "0.513073768330799" + }, + { + "0": "0.530394844241712" + }, + { + "0": "0.525445683207045" + }, + { + "0": "0.519625779170979" + }, + { + "0": "0.519313738256937" + }, + { + "0": "0.515813013080496" + }, + { + "0": "0.528187289545369" + }, + { + "0": "0.554366551151032" + }, + { + "0": "0.519717119019283" + }, + { + "0": "0.514875193245725" + }, + { + "0": "0.509183699942591" + }, + { + "0": "0.515081398591719" + }, + { + "0": "0.509686279461805" + }, + { + "0": "0.513388633417337" + }, + { + "0": "0.569061464501184" + }, + { + "0": "0.519206666472291" + }, + { + "0": "0.515928334565201" + }, + { + "0": "0.534739746588801" + }, + { + "0": "0.536506767634169" + }, + { + "0": "0.51296546709703" + }, + { + "0": "0.527848670671202" + }, + { + "0": "0.518676273050022" + }, + { + "0": "0.513704474356502" + }, + { + "0": "0.567379554655787" + }, + { + "0": "0.509367931873848" + }, + { + "0": "0.506831614715415" + }, + { + "0": "0.532097919588988" + }, + { + "0": "0.514557575992466" + }, + { + "0": "0.513283273484886" + }, + { + "0": "0.506408032594255" + }, + { + "0": "0.522166568764202" + }, + { + "0": "0.510108546439049" + }, + { + "0": "0.52840891437331" + }, + { + "0": "0.518882354319933" + }, + { + "0": "0.519635630651837" + }, + { + "0": "0.530296066860813" + }, + { + "0": "0.5142343963945" + }, + { + "0": "0.510954739425205" + }, + { + "0": "0.507992509917578" + }, + { + "0": "0.513176864159628" + }, + { + "0": "0.564166453026361" + }, + { + "0": "0.508310783081979" + }, + { + "0": "0.512556819243369" + }, + { + "0": "0.511485954999126" + }, + { + "0": "0.523434845473536" + }, + { + "0": "0.524496893187307" + }, + { + "0": "0.56535620649179" + }, + { + "0": "0.528509389299941" + }, + { + "0": "0.520582759214725" + }, + { + "0": "0.531671879065764" + }, + { + "0": "0.538108269947584" + }, + { + "0": "0.511806330944695" + }, + { + "0": "0.556988300728119" + }, + { + "0": "0.507886326554696" + }, + { + "0": "0.525444681822168" + }, + { + "0": "0.506300975826273" + }, + { + "0": "0.56522021674343" + }, + { + "0": "0.541785349419905" + }, + { + "0": "0.518261065477606" + }, + { + "0": "0.530512209683455" + }, + { + "0": "0.514016174112689" + }, + { + "0": "0.515612753164727" + }, + { + "0": "0.521956791288928" + }, + { + "0": "0.520685092209093" + }, + { + "0": "0.516036753521968" + }, + { + "0": "0.535573586527791" + }, + { + "0": "0.523559189487886" + }, + { + "0": "0.524816934536251" + }, + { + "0": "0.522351999312539" + }, + { + "0": "0.509146771326077" + }, + { + "0": "0.522686352994292" + }, + { + "0": "0.53946271453041" + }, + { + "0": "0.526372855733391" + }, + { + "0": "0.511377540114007" + }, + { + "0": "0.517625951728173" + }, + { + "0": "0.522905965076704" + }, + { + "0": "0.514977303743037" + }, + { + "0": "0.520600575935016" + }, + { + "0": "0.526714392026693" + }, + { + "0": "0.511895122924359" + }, + { + "0": "0.518472213410882" + }, + { + "0": "0.531568389041252" + }, + { + "0": "0.525650092080558" + }, + { + "0": "0.526810399981392" + }, + { + "0": "0.522272687788939" + }, + { + "0": "0.517416974530336" + }, + { + "0": "0.519829594685211" + }, + { + "0": "0.512116856692739" + }, + { + "0": "0.515611607636044" + }, + { + "0": "0.513817545435584" + }, + { + "0": "0.512013623956456" + }, + { + "0": "0.5407325784167" + }, + { + "0": "0.520693896949295" + }, + { + "0": "0.515816111497084" + }, + { + "0": "0.511539146364142" + }, + { + "0": "0.509263947395203" + }, + { + "0": "0.524488418423507" + }, + { + "0": "0.532842450300419" + }, + { + "0": "0.531152129901702" + }, + { + "0": "0.529562457943053" + }, + { + "0": "0.515191835674277" + }, + { + "0": "0.517628534562086" + }, + { + "0": "0.528190050726222" + }, + { + "0": "0.533044586760531" + }, + { + "0": "0.520888613409857" + }, + { + "0": "0.518255043507345" + }, + { + "0": "0.516777303507475" + }, + { + "0": "0.525970735133393" + }, + { + "0": "0.518463666967259" + }, + { + "0": "0.517303463492454" + }, + { + "0": "0.507358733812084" + }, + { + "0": "0.524066753071877" + }, + { + "0": "0.512120877561063" + }, + { + "0": "0.528390736965594" + }, + { + "0": "0.529561808540144" + }, + { + "0": "0.525120375101343" + }, + { + "0": "0.511716423253334" + }, + { + "0": "0.511721522031684" + }, + { + "0": "0.51172023063415" + }, + { + "0": "0.511724433899155" + }, + { + "0": "0.511712178104339" + }, + { + "0": "0.511724779241695" + }, + { + "0": "0.511720897010736" + }, + { + "0": "0.511728289891699" + }, + { + "0": "0.511714574442787" + }, + { + "0": "0.511726044308781" + }, + { + "0": "0.511716297106237" + }, + { + "0": "0.511714421372964" + }, + { + "0": "0.511718913240512" + }, + { + "0": "0.511719988026676" + }, + { + "0": "0.511718373326591" + }, + { + "0": "0.511723966031778" + }, + { + "0": "0.511724706160224" + }, + { + "0": "0.51172152500149" + }, + { + "0": "0.505365754478866" + }, + { + "0": "0.504307286512526" + }, + { + "0": "0.504304807040467" + }, + { + "0": "0.505367088778938" + }, + { + "0": "0.505363829212923" + }, + { + "0": "0.504305821975239" + }, + { + "0": "0.505367143121093" + }, + { + "0": "0.513842887240166" + }, + { + "0": "0.512783269303939" + }, + { + "0": "0.51277395879153" + }, + { + "0": "0.505368378391604" + }, + { + "0": "0.512781880492644" + }, + { + "0": "0.505361977646831" + }, + { + "0": "0.501126321025871" + }, + { + "0": "0.512781933681746" + }, + { + "0": "0.513837901941409" + }, + { + "0": "0.505365500652609" + }, + { + "0": "0.512784651283478" + }, + { + "0": "0.504303675927001" + }, + { + "0": "0.505365762169463" + }, + { + "0": "0.50536694507951" + }, + { + "0": "0.505362177017918" + }, + { + "0": "0.500091375438779" + }, + { + "0": "0.505365404905974" + }, + { + "0": "0.50536584042238" + }, + { + "0": "0.50324654625567" + }, + { + "0": "0.505363777690999" + }, + { + "0": "0.503248435384212" + }, + { + "0": "0.505362250581802" + }, + { + "0": "0.512781037018339" + }, + { + "0": "0.513841878407145" + }, + { + "0": "0.512777929602667" + }, + { + "0": "0.513840991712951" + }, + { + "0": "0.505364606956119" + }, + { + "0": "0.502188308195499" + }, + { + "0": "0.512784734378396" + }, + { + "0": "0.503244922893506" + }, + { + "0": "0.504306647744645" + }, + { + "0": "0.513842282333592" + }, + { + "0": "0.512778436554475" + }, + { + "0": "0.504305379534304" + }, + { + "0": "0.505367471761129" + }, + { + "0": "0.505365146276164" + }, + { + "0": "0.512780344623714" + }, + { + "0": "0.504304933554445" + }, + { + "0": "0.512779951477194" + }, + { + "0": "0.50430666350796" + }, + { + "0": "0.512781396513234" + }, + { + "0": "0.512785004107319" + }, + { + "0": "0.50536253932296" + }, + { + "0": "0.504305649572913" + }, + { + "0": "0.512783898982918" + }, + { + "0": "0.50218678245545" + }, + { + "0": "0.513835397780505" + }, + { + "0": "0.512779435827717" + }, + { + "0": "0.504304781220476" + }, + { + "0": "0.505361657471696" + }, + { + "0": "0.505367760877392" + }, + { + "0": "0.505363884836643" + }, + { + "0": "0.505362911271645" + }, + { + "0": "0.507480553975291" + }, + { + "0": "0.506421824699036" + }, + { + "0": "0.507476218752594" + }, + { + "0": "0.507475467129726" + }, + { + "0": "0.506417574498128" + }, + { + "0": "0.516999875320856" + }, + { + "0": "0.505362258504582" + }, + { + "0": "0.507477968571292" + }, + { + "0": "0.506417058839091" + }, + { + "0": "0.50642158147569" + }, + { + "0": "0.515947747002167" + }, + { + "0": "0.50641986741834" + }, + { + "0": "0.515957363697905" + }, + { + "0": "0.507477624033078" + }, + { + "0": "0.506418971121652" + }, + { + "0": "0.517016327016141" + }, + { + "0": "0.507480261046016" + }, + { + "0": "0.50430262058961" + }, + { + "0": "0.504303720617305" + }, + { + "0": "0.518075468595727" + }, + { + "0": "0.515950525350206" + }, + { + "0": "0.506419988158742" + }, + { + "0": "0.507481283809909" + }, + { + "0": "0.517012738281409" + }, + { + "0": "0.515958927892773" + }, + { + "0": "0.50430034312458" + }, + { + "0": "0.506421606107448" + }, + { + "0": "0.507481360914753" + }, + { + "0": "0.506417513322614" + }, + { + "0": "0.515951085271524" + }, + { + "0": "0.515957622370632" + }, + { + "0": "0.505362266905311" + }, + { + "0": "0.504300023553101" + }, + { + "0": "0.515951206328157" + }, + { + "0": "0.517009517304942" + }, + { + "0": "0.506420096899559" + }, + { + "0": "0.504302246204471" + }, + { + "0": "0.507477983999173" + }, + { + "0": "0.5053558667041" + }, + { + "0": "0.507480776156025" + }, + { + "0": "0.507453724019168" + }, + { + "0": "0.506418304621673" + }, + { + "0": "0.507475139153797" + }, + { + "0": "0.507477776474484" + }, + { + "0": "0.506421290892421" + }, + { + "0": "0.507477736355951" + }, + { + "0": "0.517012595319492" + }, + { + "0": "0.507482611290392" + }, + { + "0": "0.507479055954545" + }, + { + "0": "0.506418683647436" + }, + { + "0": "0.507478600951313" + }, + { + "0": "0.517009625985845" + }, + { + "0": "0.507484128401613" + }, + { + "0": "0.507480184515794" + }, + { + "0": "0.517008239130969" + }, + { + "0": "0.515951129159976" + }, + { + "0": "0.507482062280842" + }, + { + "0": "0.507483295019931" + }, + { + "0": "0.515956841106573" + }, + { + "0": "0.504301965388011" + }, + { + "0": "0.515949146914937" + }, + { + "0": "0.506421200418166" + }, + { + "0": "0.507477845586279" + }, + { + "0": "0.507479136723663" + }, + { + "0": "0.515954918251217" + }, + { + "0": "0.506420889123957" + }, + { + "0": "0.506418107664729" + }, + { + "0": "0.518063991097817" + }, + { + "0": "0.502184027940507" + }, + { + "0": "0.507479827222247" + }, + { + "0": "0.507478090775935" + }, + { + "0": "0.507476719922698" + }, + { + "0": "0.515957951542903" + }, + { + "0": "0.50536120318652" + }, + { + "0": "0.507479995931926" + }, + { + "0": "0.514889303382" + }, + { + "0": "0.514896407618262" + }, + { + "0": "0.514893087738511" + }, + { + "0": "0.514895826675854" + }, + { + "0": "0.514888599137837" + }, + { + "0": "0.514886715123576" + }, + { + "0": "0.514891476876637" + }, + { + "0": "0.514892027367162" + }, + { + "0": "0.514896801460144" + }, + { + "0": "0.514889986792934" + }, + { + "0": "0.514891693670714" + }, + { + "0": "0.514898163522384" + }, + { + "0": "0.514892632041695" + }, + { + "0": "0.514890753039045" + }, + { + "0": "0.514893455666321" + }, + { + "0": "0.514895158925223" + }, + { + "0": "0.514891108647469" + }, + { + "0": "0.514890984018111" + }, + { + "0": "0.514897566550827" + }, + { + "0": "0.514893244629443" + }, + { + "0": "0.514890859301379" + }, + { + "0": "0.514896974367986" + }, + { + "0": "0.514892490291765" + }, + { + "0": "0.514890184993888" + }, + { + "0": "0.514894101431217" + }, + { + "0": "0.514891754053941" + }, + { + "0": "0.514892748604492" + }, + { + "0": "0.514891343003117" + }, + { + "0": "0.514891227352193" + }, + { + "0": "0.514893308009796" + }, + { + "0": "0.508539918806537" + }, + { + "0": "0.508537257464152" + }, + { + "0": "0.508537544234881" + }, + { + "0": "0.508537623677627" + }, + { + "0": "0.508539160423643" + }, + { + "0": "0.508536247428856" + }, + { + "0": "0.50853954253554" + }, + { + "0": "0.508536406432444" + }, + { + "0": "0.508537401383769" + }, + { + "0": "0.508541213664449" + }, + { + "0": "0.508538092034935" + }, + { + "0": "0.508539255995064" + }, + { + "0": "0.508537073132587" + }, + { + "0": "0.508537458529154" + }, + { + "0": "0.508538948165252" + }, + { + "0": "0.508533591259802" + }, + { + "0": "0.5085370780609" + }, + { + "0": "0.508537661777538" + }, + { + "0": "0.50854037887522" + }, + { + "0": "0.508542055452185" + }, + { + "0": "0.508536552488464" + }, + { + "0": "0.508527674110577" + }, + { + "0": "0.50853931600293" + }, + { + "0": "0.508536418743203" + }, + { + "0": "0.508538588384034" + }, + { + "0": "0.508538770896652" + }, + { + "0": "0.508537660522603" + }, + { + "0": "0.508539172536531" + }, + { + "0": "0.508536401146924" + }, + { + "0": "0.508538154248519" + }, + { + "0": "0.508539752653524" + }, + { + "0": "0.508536425048848" + }, + { + "0": "0.508536172969198" + }, + { + "0": "0.508542714995246" + }, + { + "0": "0.50853738714139" + }, + { + "0": "0.508537700131328" + }, + { + "0": "0.508540092118692" + }, + { + "0": "0.508539514755872" + }, + { + "0": "0.508536008463823" + }, + { + "0": "0.50853640505538" + }, + { + "0": "0.508537106309608" + }, + { + "0": "0.508536093375501" + }, + { + "0": "0.508538213412249" + }, + { + "0": "0.508539491405473" + }, + { + "0": "0.513832342589222" + }, + { + "0": "0.513832331457743" + }, + { + "0": "0.51383124632372" + }, + { + "0": "0.513836188264208" + }, + { + "0": "0.51383444536669" + }, + { + "0": "0.51383546167672" + }, + { + "0": "0.513831671061548" + }, + { + "0": "0.513830372933427" + }, + { + "0": "0.513834561555135" + }, + { + "0": "0.513833584302784" + }, + { + "0": "0.513836151416937" + }, + { + "0": "0.51383089600208" + }, + { + "0": "0.513840001458981" + } + ] + }, + "text/html": "
Score
0.508539321169836
0.508544730279092
0.508543254708527
0.508547740823509
0.508541109968948
0.508540714804605
0.50854041676457
0.508542904457477
0.508539051233405
0.508541680472037
0.508539628885716
0.508541295094217
0.508546337437364
0.508545444456461
0.508539627922927
0.508542641860096
0.508539713012092
0.508544968903099
0.508544112687475
0.508541035665076
0.508542158649561
0.508541368536032
0.508531532307535
0.508530830817255
0.508543289301417
0.508546654187632
0.508544070698744
0.508543713119091
0.508544343843193
0.50854321350141
0.508546924993529
0.508543415380705
0.508546742072207
0.50854252801083
0.508542093713525
0.508545043708781
0.508542879562174
0.508541339787226
0.508544435235574
0.508531812903638
0.508541866140118
0.50854066719507
0.508536156430185
0.508543065300695
0.508541600071319
0.507481984786767
0.507483690696425
0.507486295962705
0.507484253048287
0.507485137179219
0.507484251769786
0.507481250236147
0.507481638730849
0.507485055554229
0.507483839040595
0.507479257941296
0.507484749023173
0.507480766246963
0.507482909523385
0.507488732191632
0.50748282663167
0.507485535477875
0.507474239341667
0.507483902279612
0.507485158906606
0.507484148547095
0.507483447009734
0.507486598916158
0.507477675469035
0.507483830698519
0.507483141261973
0.507483031635141
0.507485299214066
0.507480651865584
0.509603013611234
0.509599496069726
0.509605190103568
0.509606869817156
0.509605400534249
0.50960417098013
0.509603152402137
0.509600276515375
0.509602888997909
0.509602338696152
0.509598833466592
0.509603682016923
0.509603776800715
0.509593678810369
0.509607347115852
0.509605217360543
0.509606827374561
0.509599424975721
0.509600675006904
0.509605741304051
0.509599346499952
0.509605052331114
0.5096019777657
0.509593568342671
0.509606519099392
0.509604149174057
0.509601963311197
0.509605979809868
0.509598673335347
0.509606020993635
0.509603257263207
0.509601831709869
0.509605966660102
0.509604978343866
0.509592101628504
0.50960275000145
0.509597442288249
0.509599680000353
0.509599028981255
0.509598200660529
0.509601018803692
0.509600593408308
0.506425151470336
0.506423931303863
0.506420775664528
0.506426753494674
0.506424610867989
0.506422653446814
0.506421687935911
0.506423820751372
0.506425552026571
0.506423141673942
0.50642504384335
0.506425268673257
0.506426604394556
0.506422470005222
0.50642765273122
0.50642296627925
0.506426519200206
0.506425747812213
0.506424542243281
0.506423075357857
0.506425008009316
0.506423975801973
0.506427511811866
0.506418848263837
0.506416177935902
0.506424642301757
0.506426377338265
0.50642266844835
0.506422931200312
0.506424358170016
0.50642186409317
0.506424456976106
0.506426168888514
0.50642457342746
0.5053655934135
0.510666380954855
0.51171911157285
0.512785427723123
0.510662016704885
0.510660034208079
0.512784248717509
0.511724368973091
0.5032461418708
0.511716036639319
0.51277916076002
0.505363519454728
0.505364402064164
0.51277728294677
0.511718405360099
0.510665850697281
0.500073534333722
0.510661647619921
0.511720804678934
0.510651056889476
0.510660805721224
0.511721252151081
0.511718328364001
0.512784611591961
0.511724766826319
0.510659545257985
0.51277912587163
0.510664425703044
0.510661019997101
0.50536781710066
0.505364787951745
0.50323857699279
0.510657119042919
0.504306207878624
0.505368120666947
0.510663066541558
0.510658181286395
0.510663752789005
0.511717542199306
0.510663326897733
0.512783706527625
0.510662919205438
0.511723973807784
0.511722229966028
0.511723883709395
0.512780852200964
0.511722520468752
0.510663536237041
0.505368809265703
0.505364079009803
0.511713510914509
0.510661833316251
0.510667478025283
0.504307273407902
0.512784047524715
0.505365599985569
0.510665083153563
0.510657928980583
0.511722721173302
0.512777886191367
0.503245283258691
0.510659356227008
0.505365110757199
0.510664369694087
0.511717995524899
0.505366702891395
0.512781709776861
0.510654237477019
0.510659599581638
0.512777269732789
0.505366805228106
0.510660953355241
0.504302849294812
0.50642913429634
0.508541953927708
0.507479520423819
0.508539350412014
0.507479321979559
0.509599449205323
0.509594868763705
0.509599206459793
0.509601622683422
0.509598493269178
0.508539164010927
0.508534837653774
0.51383608916217
0.508535265722413
0.508536432065123
0.513830672508032
0.507477884728779
0.507477982335886
0.515957455835244
0.513834251792816
0.504301028482142
0.505360431411232
0.509598786551261
0.515955754642919
0.509596356729211
0.507479167415771
0.514889946785532
0.50959570383385
0.508535957308326
0.513826166234568
0.514891561871464
0.508543834346038
0.515949254408861
0.509599195342405
0.515957001923648
0.50747908524247
0.505361105361825
0.514891599741128
0.50535843599337
0.50854047707893
0.567377501442905
0.507477886105937
0.513831500198947
0.507482841035532
0.508532580149176
0.515945926924777
0.513835513876014
0.509598302678202
0.51383731186349
0.513835384090579
0.515948749450527
0.51383439615524
0.514898029779067
0.507476458152189
0.513836114522138
0.509594822557517
0.515953646753318
0.508536537730368
0.513836646493861
0.514886878627135
0.515949512505695
0.509600272238575
0.507477448724151
0.505359565316527
0.508536616278617
0.513816102548982
0.508537388518453
0.515953741704703
0.506420473086328
0.509596341419006
0.508541846053438
0.508539777878993
0.505360096121782
0.507476247067106
0.508537713432638
0.514886047431785
0.508536135413309
0.508536874288149
0.509597603792304
0.514892881297009
0.514888914351465
0.513833278678007
0.506416252023246
0.50959718967362
0.508536918255508
0.507478499162592
0.509599982640261
0.513836668912929
0.507475713054029
0.508540488839333
0.502181576211717
0.508536831935841
0.509582681532563
0.51701314141149
0.506420287224847
0.507475353812762
0.515947989607916
0.507481509668822
0.51488668679885
0.508539541807951
0.509600960011809
0.507475487473549
0.508540334637788
0.508532936195539
0.509587144417297
0.512772628783351
0.512778089929625
0.512771760342526
0.51277311305549
0.512768924651927
0.512772700658086
0.512772360136114
0.512778370985245
0.512771924608021
0.51277554040345
0.512777877895869
0.512775285466412
0.512772089197098
0.51277504953792
0.512778497751126
0.512771720095872
0.512771108456112
0.512774201339175
0.512773667806307
0.512772806152466
0.512775749365297
0.51277369454444
0.512773581835337
0.512779534737942
0.512777581222128
0.512771525129085
0.512776408867087
0.512772020401431
0.512778980095618
0.51277200254593
0.512771593236135
0.510656965282785
0.510656407542993
0.510658804691019
0.510654992449885
0.510653775790256
0.510659346658507
0.510654929663854
0.51064961007693
0.51066091101749
0.510659595492048
0.510661023519375
0.510654988165821
0.510659648467572
0.510661005095519
0.510662501777484
0.510654430625604
0.510657956831813
0.510640900073988
0.510652129392145
0.51065629891816
0.510658260270694
0.51065553140682
0.510658824937975
0.510656822088614
0.510655043507675
0.510654931968629
0.511708635726584
0.511709379196281
0.51171648823417
0.511717518082621
0.511719200542108
0.511713719387793
0.511711020021865
0.51171908040724
0.511717271032313
0.511717462859614
0.511715223638672
0.511720001941743
0.511718273231722
0.511713336037584
0.511714655283569
0.511713512530441
0.511718972782997
0.511715396219792
0.511711575177981
0.511714071559847
0.511717001659902
0.5117153020592
0.511713856752151
0.511714521866892
0.511716358919914
0.511718592098281
0.511720606752768
0.511706570677539
0.511710735925157
0.511717063350067
0.511712786033874
0.510655324978202
0.510662399337664
0.510655352391542
0.510661934252442
0.510658229909228
0.510658457124323
0.510656305242537
0.51065799748101
0.510657999118157
0.510660195435889
0.510658258906359
0.510660175354743
0.510662212946732
0.510657477154056
0.510657359858872
0.510656161631501
0.510660820291774
0.510650695527908
0.510653802555144
0.510661973872608
0.510658002585736
0.510659427138213
0.510659242027832
0.510654426555183
0.510655866746292
0.510660579517644
0.510656302579088
0.510658852469992
0.510657189110654
0.510655447620679
0.509598238883307
0.509603421011183
0.509600055760266
0.509598390893697
0.509600607196684
0.509600851796493
0.509600668959653
0.50959984106307
0.509605675354215
0.509597056748501
0.509597170175881
0.509603715658249
0.509595210518422
0.509595570275319
0.509597936542962
0.509598033321074
0.509600118616357
0.509603862003527
0.509597944509331
0.50959779034732
0.509600889015422
0.509602312148177
0.509601785202596
0.509601715059017
0.509598492939351
0.509601098201773
0.509595984579355
0.509599943719548
0.511718640358932
0.511721293404093
0.511714823256292
0.511716680287403
0.511714072740016
0.511723257521642
0.511719190609408
0.511721424497669
0.511713158628731
0.511717004669725
0.511718261364799
0.511714490198739
0.511716092967696
0.511717664831893
0.51172018442726
0.511717986502592
0.511708614235962
0.511718155417737
0.511714150664816
0.511716300073184
0.511714914311282
0.511713337492137
0.511711872589967
0.511719589555965
0.50748104986975
0.506420601251274
0.514894965020657
0.508539590379447
0.508541736142853
0.50853748105179
0.508536129454372
0.506421485465965
0.506425154634883
0.506421850050294
0.507480804911058
0.50748021979755
0.505362560639733
0.513834492407989
0.508541848983502
0.512775803788124
0.506423234417213
0.508539814258986
0.507482141052522
0.507476902977134
0.506422973430994
0.507484424150563
0.507479284780286
0.507482346627564
0.512776180354397
0.513832755827794
0.508542869163939
0.506421846801544
0.50536277285204
0.512776145921464
0.50641600430489
0.508536938271797
0.508533261566474
0.503245795127373
0.506420330189806
0.506420924849214
0.508539548192953
0.506423147971046
0.506421939229284
0.512773447928959
0.51277938584098
0.505363439385179
0.512772723657805
0.506423910978962
0.50747813335892
0.50642491185225
0.508538201515034
0.507484764037338
0.508537169484166
0.50854531403044
0.505365381098891
0.506418909699589
0.507483687556422
0.512776611914068
0.50748118732105
0.507480173527308
0.506420251023195
0.512779278344294
0.507479492304956
0.50748025703822
0.508540201563728
0.504302942911736
0.505361282084173
0.508538067799238
0.506421027797734
0.508539862255863
0.512777379286143
0.506421269435233
0.506416739659805
0.507480844622717
0.512774516911944
0.506422435973868
0.507489873331206
0.507480853345093
0.506418761590426
0.506418618183561
0.507471538421065
0.506420918645815
0.508540754057136
0.507477434952963
0.508535362049541
0.513836334030174
0.507481280124487
0.508538860064566
0.507476903777637
0.508539993274855
0.508543184761181
0.513838686989652
0.507484864820804
0.515954571033361
0.505362267319997
0.508541505979483
0.50747874026264
0.508537839201415
0.507480473207016
0.505358060818403
0.512773117516421
0.512774034373191
0.508535631631287
0.512782090655272
0.504304482219322
0.507480441432136
0.514894283911991
0.512776847988121
0.50748193685292
0.508538607534032
0.508545416790971
0.508540578684679
0.512765453633483
0.512773638764101
0.512774914037007
0.507481148255501
0.512779296376373
0.508545074756113
0.513840282492784
0.505362176480269
0.505368211360847
0.509602968177043
0.509606467108952
0.510668231787842
0.504308152259706
0.505367139240497
0.509607274589227
0.510663165929627
0.511728286182822
0.509606040323924
0.505369181956381
0.50960669612096
0.50536843533146
0.502189699534779
0.511725648611514
0.509611611077322
0.505362762113277
0.505368260939692
0.50960337842295
0.510667238172487
0.505369276305544
0.505371477060717
0.504310064572556
0.509605415785031
0.509607239026731
0.509602918935297
0.505369800410485
0.502189565415855
0.509605004494087
0.509606523181216
0.50536710539102
0.522306983730625
0.505372594995342
0.503250245676799
0.509606825450647
0.505365667170538
0.505367163061813
0.510668591077314
0.512782860984371
0.505369165538948
0.505367516746819
0.509601922579384
0.505370359229225
0.509606669664093
0.505368819132642
0.509602384172659
0.510651385651757
0.50430683631927
0.505368769275095
0.510666121226945
0.510666960774519
0.510666744793296
0.505367268303868
0.505369762857648
0.509608581311545
0.505369686282759
0.505367426520799
0.505365955825703
0.505364053006304
0.505366780052426
0.5053645281696
0.509604959186188
0.509605028339023
0.503250973771122
0.511723451329848
0.509609919389758
0.50960131170298
0.505369207106483
0.505364749021427
0.5032495891595
0.505370637493341
0.509606949981024
0.504307753939016
0.505365113801687
0.505366245840288
0.510650228381092
0.507484117891863
0.507487663699768
0.5074870721882
0.507487057918917
0.507489307857281
0.507482661319975
0.507484946134946
0.507484206465864
0.507485595680453
0.507488977112705
0.50748542082926
0.507485404396969
0.507488006426015
0.507487565709179
0.507489294838673
0.507484894676282
0.507487398630697
0.507483134232836
0.507483134232836
0.507489748092062
0.507486311077762
0.507482033030027
0.507486428198489
0.507475151340733
0.507483816236982
0.50748841743561
0.507484324511501
0.507491995958042
0.507490042833727
0.507485972404151
0.507488631686983
0.507483859372958
0.50748846499401
0.507487200018847
0.507484821884364
0.507489045763489
0.507490382495961
0.507487443384717
0.507486982903496
0.507486533558477
0.507488697749141
0.507484510192253
0.507488306553616
0.507486321461338
0.507488422932967
0.507484846543442
0.507480980723842
0.507488269350657
0.507482434202145
0.507483847797393
0.508549797330151
0.508543124201619
0.508544113968392
0.508544432009632
0.508547112774934
0.508547448987356
0.508543058437119
0.508547648791286
0.508544513852988
0.508547786846393
0.508546922870221
0.508544184531774
0.508542025757301
0.508541151066258
0.508546269769738
0.508545299627396
0.508543771475073
0.508546848267848
0.508546304130933
0.508544035624261
0.508546968777949
0.508542865897311
0.508544675012382
0.508547709369079
0.508542778093506
0.508545124329106
0.50854191252731
0.508547357005476
0.508544316734074
0.508549661741037
0.50854767409298
0.508546445069091
0.508546676776325
0.50854387271959
0.508543759926814
0.508545373352983
0.50854473195225
0.50854319435059
0.508545355640534
0.508546372785077
0.508542969351161
0.508546650381162
0.506425590347955
0.506425474242243
0.506427073562968
0.506426883853238
0.506430138121489
0.50643051615639
0.506425684426234
0.506427225193217
0.506426902398269
0.506428817010967
0.506427007635062
0.506428445479521
0.506431244993482
0.506426572558073
0.506427248244258
0.506426711958836
0.506425614557978
0.506426492066072
0.506430005773774
0.506424702528655
0.50642725306101
0.506429922361747
0.506426599138602
0.506428759271288
0.506426414311936
0.506427509341324
0.506426588345018
0.506425651601715
0.506430068248302
0.506426932533879
0.506426702027864
0.506424457487906
0.506424920938979
0.506429467041545
0.506428524775514
0.50643179740781
0.506425670405676
0.506428912385829
0.506426656845748
0.506425206207749
0.50642925270933
0.51171213056951
0.511714124255065
0.511712895597833
0.511712107893301
0.511711299869953
0.511717079735289
0.511711777986751
0.511713541187674
0.511712698462331
0.511698602927392
0.511712784244542
0.511709175296166
0.511697866090888
0.5117171862025
0.511712177397786
0.511708244740839
0.511714173361848
0.511714676187936
0.511717606286509
0.511714086072655
0.511710208813293
0.511711063230167
0.511708188587765
0.511711823975068
0.511712455708968
0.509592597796589
0.509593064178911
0.514887312870244
0.512769450594978
0.513832544723337
0.509593984620262
0.509593621098126
0.513831839353887
0.513829524866335
0.515949052621027
0.514886406930801
0.513828480793989
0.512771153197418
0.513827407629659
0.514887186506341
0.504298454289521
0.514893298087843
0.507482443835472
0.50959503464751
0.515959611234983
0.518064029086336
0.513832128908869
0.518059467037066
0.514880215974941
0.518070063120478
0.510649661296718
0.514887820181982
0.518072382897197
0.51383395937889
0.510649858138613
0.513833986101103
0.510657211553057
0.509587972898458
0.508532961793985
0.508536076436424
0.507474988707382
0.509591922602099
0.509596131149509
0.514886437688373
0.510652583474379
0.506416680296757
0.50959596415297
0.514889531578089
0.513835845588223
0.509597917749795
0.514889541669537
0.507476530419138
0.512766884412431
0.506413541301342
0.510647135731583
0.505359498270894
0.506416539980957
0.5085392867565
0.506418019352762
0.515928638898154
0.509594232675789
0.517013562133476
0.518062160102256
0.519126037753929
0.507474997887139
0.509593996295494
0.507477246436425
0.512770007698598
0.512768128216611
0.506416468908092
0.508535583055922
0.514887211622763
0.512776220527288
0.509596328164049
0.512770126560895
0.5127675673847
0.513830674498968
0.512774630507124
0.508535817571601
0.50641681969759
0.512768945157596
0.519128300850847
0.509590793732402
0.51065600762801
0.509592807774706
0.513833988833075
0.51489021105944
0.513829002441787
0.517003354987527
0.518068193845192
0.513830052866222
0.51701151963334
0.508523942903823
0.517009745941579
0.51383201843498
0.517004205099026
0.512763580409379
0.507477982335886
0.514884769979363
0.509597654580882
0.504302088423335
0.510653245264439
0.508530377199699
0.508532551819526
0.514885709480665
0.513830329426387
0.508535831933533
0.512774375229592
0.508532209977399
0.515953989721254
0.507476714273421
0.513830513435875
0.510642938236898
0.512779285708324
0.518066660438599
0.509594244165469
0.507474016693401
0.51277515345278
0.512769066381875
0.512777461834627
0.512765374808755
0.515945188524049
0.515944362138122
0.515949862201325
0.510651594519619
0.513833531943015
0.508535888583209
0.513835595163867
0.513837822683045
0.509596183954924
0.509593500449201
0.519125923345934
0.517011826167305
0.515950850037625
0.509598599750915
0.51065593333341
0.509595124317704
0.5043004085265
0.512770201830305
0.512770180837262
0.515938610187252
0.509594230122934
0.510657272427459
0.512771889467852
0.510654165627435
0.510652504934585
0.512770935633723
0.512762271916034
0.509586259269383
0.508529574308751
0.510645494885594
0.513821082616807
0.515942580866286
0.516996826644388
0.51170735998477
0.519116292279699
0.517005182894933
0.514881295677317
0.508530946867457
0.508532538103496
0.515940527148966
0.516997172243792
0.518058777657576
0.510646096995092
0.517000162466096
0.511708010754084
0.513822824813866
0.516997362670778
0.509590059528318
0.509590634051364
0.51276408761439
0.50747502832543
0.519122141637209
0.518062614851363
0.519121581627851
0.52018702631554
0.510647106516416
0.5180605746465
0.504294900449391
0.514885503289451
0.514883150565203
0.511707120481949
0.507471212909444
0.511714136419472
0.509586059507171
0.518063843976601
0.50535571761531
0.510646710076785
0.51065045638477
0.510654248205949
0.514880349234532
0.509588008941704
0.509590617726009
0.517006168778556
0.520176065957084
0.518054699098104
0.513827133991923
0.511706008679306
0.511702860907115
0.520172335794882
0.519122540718791
0.51594788065552
0.512772796063236
0.510652292599005
0.515943935461018
0.521232570261789
0.515941077547644
0.508530363423892
0.518064876560536
0.519115010636613
0.514884422912962
0.510644110883057
0.514888009721898
0.510647704220865
0.511707973935286
0.518064743332891
0.5169996484307
0.519117455214297
0.513823597128542
0.517003814040554
0.51276359378166
0.512759707932174
0.508532755428319
0.508531192217984
0.514884210426502
0.5138189617498
0.507472478474189
0.508535138904226
0.514885719014872
0.515940712405087
0.519115314928906
0.520175205876854
0.507464911132089
0.515944455674662
0.519116255912117
0.516995791313372
0.513828321025646
0.518062147061251
0.514883717553929
0.511693132244092
0.512750239588293
0.515942019087786
0.516992510771565
0.510648059324324
0.507474021857357
0.512767608617955
0.512765056705805
0.511708902126416
0.518067324815227
0.511709298218675
0.506412853781632
0.514883946151693
0.514886088884037
0.523355671810981
0.512764877982575
0.513829480460388
0.518055702630708
0.515943293111236
0.514879963392796
0.508528751189033
0.510646711984432
0.51488472661416
0.508531823730296
0.512764257106691
0.520182515668324
0.515943802699906
0.519127824873764
0.514882885486968
0.520182762946356
0.513826571525247
0.514886061716085
0.513826380321217
0.514887337596339
0.518056428049307
0.519116060208396
0.515940600649578
0.506414474586165
0.518050887524366
0.513825780837404
0.519116525963138
0.516997799454507
0.516996909224792
0.512765250657903
0.517001523072583
0.515939316224389
0.517002544064032
0.510648044599527
0.511704316775806
0.512765057175532
0.519123147829715
0.511709873991384
0.519125469866353
0.50959191746056
0.510650668300797
0.515947905678725
0.51805420307462
0.520174795978123
0.50535201472784
0.511711895057472
0.515938040885975
0.522297086194587
0.523354182349885
0.519116817441938
0.511704071455545
0.509590432177686
0.51276786262984
0.517001021779134
0.511704210030209
0.517004518986474
0.521229764942907
0.51383044536979
0.509588415764787
0.50959101245339
0.511712899694189
0.514889913259326
0.512770823710947
0.515939519519442
0.512767076520687
0.511708679175722
0.512776689140339
0.513826236102153
0.511711391082696
0.517007543190566
0.509589089859737
0.512769585928074
0.510652515370563
0.509598484528579
0.515950583697395
0.518066606349355
0.512769144829267
0.513826586681148
0.512762430898525
0.515945607477443
0.518059769007258
0.513827491591341
0.520182999806599
0.514884245724807
0.514886962333992
0.516081231895741
0.515940227500241
0.51488791285291
0.513831466222826
0.516995067462628
0.507473508340179
0.509592704355579
0.517007301246174
0.513826286931064
0.514885978955344
0.512766089926306
0.515948119808599
0.51489339893196
0.510654651658954
0.517003338895332
0.515950660535105
0.511712021038482
0.514885834151116
0.512775339088198
0.506414727511218
0.513830685558309
0.518065752326836
0.512769501946692
0.51171028398038
0.513821227738885
0.51488756214876
0.510651580089781
0.510652665236007
0.514883423334464
0.513824312163582
0.513820935256611
0.509596323035395
0.517011195271264
0.511716636190302
0.51700398486091
0.510654041680911
0.510642599157821
0.509590321207746
0.513828655584906
0.50853557064872
0.513824163253311
0.511708137449628
0.50747636766605
0.519118417615062
0.511708102384138
0.511709455296707
0.517002418705811
0.511707627977625
0.51276716527979
0.514889607807226
0.512765578413707
0.516999926912186
0.513823705103824
0.506416029050493
0.507473524422268
0.5138365275481
0.512774114260111
0.512768312890078
0.518068214235009
0.518060928149073
0.518059536490941
0.511713442986105
0.513827865945884
0.507476710092803
0.51595124087925
0.517007511532568
0.51382189552242
0.509580472006391
0.511709443190303
0.513831409680964
0.51595206370634
0.520184064452575
0.506413180946132
0.514886109523853
0.517012291658916
0.519114413761664
0.511712173634157
0.509594145814312
0.514885208751074
0.512766775206534
0.506418041489432
0.518068082121594
0.51595092261585
0.513825670808316
0.51277121540459
0.511712637448416
0.507474535631299
0.509594337891219
0.509593127648177
0.515943375854099
0.513827700375689
0.509589510456573
0.514887259137884
0.512774129627248
0.517004889011423
0.509592187630333
0.513829256334119
0.509592989814372
0.519123327687488
0.513829903509668
0.518067614898409
0.510655701880579
0.508531934922547
0.51911592342753
0.514890719492399
0.519121877749978
0.513835368016661
0.51276958710976
0.513823928100386
0.511708346191459
0.510650847195475
0.515946547507543
0.513822347441741
0.5148891238191
0.517009059687351
0.512768142618749
0.512767778945486
0.515949146760655
0.512767381354405
0.512769103269842
0.515950125208819
0.518063210214304
0.51594226798178
0.51170997820103
0.513828683476998
0.519126683056894
0.515945703996588
0.511707481430091
0.515942347597889
0.509593926324571
0.50431197410524
0.508545567396668
0.504309179988407
0.504310113825802
0.502191312839864
0.50113354956581
0.509603798141265
0.508548814515626
0.503252282395766
0.504310806083626
0.508552562934661
0.504311613131792
0.508545928218972
0.509606336879381
0.508549028494778
0.504310447361076
0.508549919133929
0.504311239486394
0.504310513109015
0.50854735488576
0.504309614095205
0.502192918927325
0.508548100002057
0.508550372793149
0.508546562308628
0.504310331367551
0.503250189548813
0.504309265723909
0.503253325460308
0.509603917362551
0.503252214553149
0.509612505693428
0.504308084044124
0.508549070939264
0.503245855583855
0.508545544556322
0.502193566757497
0.504310581776377
0.508545678952203
0.503252536152058
0.504310173842832
0.504312594254954
0.508545018439118
0.504309273650104
0.503250838382402
0.504308797917344
0.503251378405009
0.508545472399588
0.504310836389826
0.508547698804722
0.508547770428222
0.508545472399588
0.510668557838454
0.501131216202499
0.504313157708385
0.50854611627525
0.508546462523996
0.508551508789003
0.508550144632465
0.507488610627221
0.507486991796954
0.507488479605123
0.507488485078877
0.507487709270857
0.507487139595538
0.507489171856939
0.507487595061597
0.507485361062799
0.507486664898375
0.507489538712277
0.507489824300109
0.507490603356022
0.507493342796021
0.507489155025085
0.507491023035634
0.50748730524943
0.507490384046981
0.507488333727166
0.507487794120289
0.5074901472828
0.507490435338773
0.507490099548735
0.507491315792665
0.50748702776489
0.507484307326877
0.507487929931034
0.50748951457752
0.507491510403775
0.507487586079737
0.505369289366592
0.505367634675986
0.50537195662105
0.505369253410066
0.505369719523265
0.50536739290541
0.505369437950761
0.505372046015805
0.505367941748953
0.505370916114711
0.505371523015385
0.505368392579014
0.505373394606543
0.505368820836548
0.505371400057505
0.505368670347694
0.505370995792095
0.50537030079725
0.505363601804367
0.505366157577889
0.505366035893815
0.505371804009358
0.505367912334438
0.50536974183214
0.505367544520909
0.505372058600857
0.505411958460377
0.505371109480604
0.505369578505291
0.505367650631056
0.505368514008256
0.506430281051093
0.50642778246936
0.506426449469985
0.506431197012245
0.506428794166397
0.50643209176916
0.50643135158759
0.506428055602668
0.506428249581982
0.506430320940846
0.506428398345064
0.506424360093149
0.506431475730577
0.506430425598162
0.506432056690238
0.506430039729983
0.506426521829324
0.50642995693524
0.506429021318402
0.506426594963445
0.506429392817392
0.506427275819316
0.506426406892924
0.506428417876826
0.506427087873136
0.506428691423684
0.506431427188219
0.506431252208071
0.506433412349975
0.506431724641059
0.506429029765769
0.506428402933842
0.506426673160726
0.506430156880193
0.506430079535984
0.506428928902327
0.506424546909449
0.506430926459644
0.506427803050853
0.506432500298044
0.506427531324951
0.511708677891079
0.525451039562482
0.511699918003609
0.516993856804342
0.511703226098808
0.513818775540512
0.520179724247255
0.512759037290015
0.510644131178559
0.520164682322086
0.509583398105524
0.52123017081587
0.513819332013777
0.510640904054675
0.523338789299855
0.513821549645058
0.513812598139345
0.518053789058794
0.520170604639673
0.516993308289762
0.507465097254231
0.52229423311332
0.515937751576017
0.515941816866799
0.519115135480828
0.51805547542653
0.518062233034445
0.519118562885551
0.506306979951509
0.522286108283628
0.512761660658199
0.515939675476783
0.50852422978447
0.51912014086989
0.520158492948644
0.520175846841029
0.514871329599684
0.512761406682398
0.519114659765868
0.518056021077434
0.511705890852606
0.514882134157674
0.522289610908211
0.515935683853164
0.524408195759518
0.522286395691756
0.506408735564103
0.508525510316688
0.513820182654448
0.516992173473978
0.516999752872926
0.512755629608178
0.511700630613854
0.510641511915144
0.511706666565175
0.520168538352935
0.519110797033164
0.515936494720409
0.522286564109553
0.521231232263359
0.515939644199065
0.515936421292234
0.514879501363201
0.512761682883938
0.506407714028534
0.511704783536301
0.514886213258916
0.515938134077592
0.522284009234953
0.51276367163448
0.520177900901425
0.523343621094092
0.519113801432841
0.51699847856622
0.520167459804009
0.514877340064584
0.514878200963541
0.51805422975272
0.519112554302334
0.5169980694832
0.51593969876909
0.521227714752909
0.506408753273748
0.513817289828744
0.515934249364328
0.522280258768557
0.518063493095835
0.51593572454497
0.51488299940105
0.515938688671793
0.511700468234146
0.514876023334926
0.518051761670903
0.525452065125691
0.523344084286902
0.518049133337851
0.523334307362787
0.512759648402565
0.514877090485088
0.507465462510435
0.513827464217151
0.520145078406107
0.513811597590118
0.520173438039746
0.519112032792642
0.523354109196546
0.520178871824453
0.512759005190184
0.510640696395244
0.514867249546791
0.523348356664686
0.514874258673907
0.521223055998328
0.511705939748749
0.518028796198434
0.519108925480537
0.523352431677518
0.511703213463028
0.508528972834101
0.51276117451264
0.515936286401268
0.52017076163391
0.523348913803358
0.520164144268235
0.515941616144955
0.520142591433575
0.51700285099183
0.51488521447869
0.509584980099194
0.520181876713145
0.52547020031797
0.51699500821077
0.519117963012702
0.521237338274125
0.519118515277891
0.513822844379081
0.512762236557772
0.521235520184443
0.523401008467104
0.519111875807912
0.518051671863595
0.521225512749692
0.521219268815903
0.522296644990076
0.515940080235953
0.517001122170459
0.512762427866195
0.522292367846293
0.513819957096817
0.513823038779199
0.512763136711414
0.514883506675261
0.51593886869511
0.521235592433861
0.519116296187272
0.51488777844586
0.521233554948016
0.516996525663227
0.515937845937975
0.50429113590706
0.519114813432364
0.512760806126081
0.518053992035936
0.513826966252505
0.513826723400067
0.521232276759662
0.51382473395384
0.518057114597952
0.521231301005636
0.514878156324671
0.52440913034464
0.518056570364089
0.51276668850814
0.51065088041001
0.512767905536945
0.522258712069483
0.511708776071527
0.524405060630233
0.511705970806546
0.51487985156338
0.514879994394407
0.524401703716169
0.514872097262202
0.523347987334758
0.519112459660444
0.520171292854344
0.512761460528825
0.519111329041308
0.52123832355972
0.518055637514297
0.512766894684847
0.513819461007482
0.519113120438672
0.51382063082385
0.520167555987462
0.52334371228352
0.510644865914656
0.519118211891026
0.507472527966401
0.519109548887849
0.521237076541084
0.511706093202493
0.512764759421066
0.515939879796623
0.512760650352565
0.51488163906376
0.510643604894407
0.512766488924977
0.519117695517531
0.519116848122437
0.510645354781618
0.518042787435063
0.518052917957686
0.513827129030171
0.514879180389796
0.513822636448298
0.513817118894317
0.520170257124632
0.522282470848952
0.515937636697777
0.513821091504256
0.519123044848093
0.520174602710157
0.518057576453853
0.512768317094134
0.51699629165339
0.511703096694382
0.521230390884655
0.522284657697035
0.522292561152018
0.519105972602
0.516992804411622
0.512763006327842
0.518059838355013
0.519090543787033
0.517000095770956
0.519113112228038
0.520170091087438
0.519106884718074
0.52123756350824
0.512760858856762
0.518055874367121
0.511706324108045
0.517003820029233
0.508530659137433
0.521235295870173
0.512764174754655
0.521233673142565
0.510644622853461
0.508528469754222
0.510647930545674
0.508528718625959
0.517004792121065
0.519126241368803
0.521231759519366
0.519108079535981
0.509580642834002
0.51170369217544
0.513820231568516
0.52441162200456
0.522297090976029
0.514881650171148
0.516995895016667
0.512761285926763
0.512763392497678
0.519109203758455
0.519119957307413
0.521232894164877
0.520182649232726
0.513817760227829
0.518055701389885
0.510645263563414
0.509573668066305
0.522285119785071
0.517002253615248
0.519109177292938
0.518056721502745
0.51699582557703
0.516998519994831
0.508528435926592
0.522288609352087
0.520168049338629
0.520174165074862
0.515936604586741
0.514886162521836
0.512767124056943
0.509585330817537
0.511709167845394
0.518061854028058
0.51594113299388
0.520179833734748
0.511702324620661
0.519114771960964
0.518054091931071
0.519120701940613
0.51805981866475
0.513822039563437
0.519111114078124
0.518053029191334
0.521232258876623
0.514884908398207
0.518062737343669
0.506411923562259
0.507490683876521
0.502193067042544
0.503252124491834
0.503251495850668
0.507485431216529
0.5021945678778
0.50325712692779
0.503255162266345
0.50325457659165
0.507492279508719
0.50113311499741
0.50325536876424
0.502197459521721
0.507493145544186
0.503254013622385
0.502194856408933
0.503250936318781
0.514855096269649
0.503254118872111
0.507493185371772
0.507489559365645
0.507492664110662
0.507491029159506
0.502194279069256
0.503247861423601
0.503248492922054
0.503253378257625
0.502193736127573
0.502194365232203
0.506435251810662
0.506430866132263
0.506431863511782
0.506434914068368
0.506429933370496
0.506430059501832
0.506431394587189
0.506430816933373
0.506433734790307
0.506429213207299
0.506430814196251
0.506433362382324
0.506428246012597
0.506431132643689
0.506434124967954
0.50643211887917
0.506426967355853
0.506433311826334
0.506433276516589
0.506428335434122
0.506429599245837
0.506431484429169
0.506431998945827
0.506429015420212
0.506430220591651
0.504314050072105
0.504314090373263
0.504311429660435
0.504312477707695
0.504315467218687
0.504312288792484
0.504314392347828
0.504312646787423
0.504313295932499
0.504314068880027
0.504315855447826
0.504313054592835
0.504313718146376
0.504317146944929
0.504314301232574
0.504314416656575
0.504314990240204
0.504312423114715
0.504311361821
0.504315244048988
0.504314230701727
0.504313156832505
0.504317490268111
0.504313914577621
0.504312446457858
0.504311904809132
0.504314430160394
0.504312972092997
0.504311587152392
0.505375768988465
0.50537234138574
0.505371427402751
0.50537469005728
0.505375285053656
0.505372157096844
0.505364864709199
0.505374186349927
0.5053752238512
0.505373270942249
0.505366079224034
0.505375135741035
0.505369183001784
0.505374537156673
0.505372530406056
0.505375982675769
0.505374680624807
0.505372656148484
0.505370956560003
0.50537217274744
0.505365005031954
0.505373942568994
0.505371883451573
0.505372944347331
0.505368667970889
0.50537251735051
0.50537438265503
0.505372431461441
0.505370197894747
0.505376599184131
0.505374213698371
0.505371741444651
0.505371095146749
0.505373052494706
0.505374048240136
0.505372560363047
0.505370462339249
0.505371425718542
0.505375397260207
0.505374166944916
0.505371026721362
0.525464165866639
0.521224210102315
0.527575035906504
0.520165090040905
0.519109098944629
0.520169108192578
0.513818074573602
0.519106415387682
0.507464762033817
0.523340316042561
0.522291393550245
0.523343933060334
0.509585673340265
0.516995800015602
0.51380018623045
0.512765658358808
0.518052003149472
0.514877641967477
0.522291907158811
0.522276290091888
0.523333170151372
0.519113943091463
0.52440193167231
0.519108320678218
0.520179446063762
0.512754538769685
0.520173590167774
0.516971261209391
0.522292350844452
0.514875021095775
0.521226198782116
0.519113609093742
0.518051655108922
0.51699899654553
0.518055460453816
0.514876698753109
0.509579347098762
0.51064313768918
0.529690044006254
0.516991530947668
0.515938001031367
0.512759808582981
0.522283942047446
0.523338103989284
0.515934337516798
0.511700179429755
0.51911614369219
0.514873456499836
0.522284097361564
0.520168094331028
0.519111727572619
0.51487166551473
0.520163035314919
0.523337113315858
0.518054337849879
0.520177536742522
0.522281818431982
0.523348654121699
0.512756658282343
0.508520663133364
0.509586041247439
0.511700810158573
0.522282678053792
0.521227834836792
0.515935296757327
0.519106370494412
0.522286383360721
0.513817575372621
0.512763633325715
0.51064251508277
0.510643288966952
0.51805869510188
0.504288118097123
0.520168035348115
0.527563786641157
0.524397439872698
0.525454565211191
0.513823837406361
0.525458693653056
0.520162368677098
0.516977756348367
0.516994860188437
0.520163015320433
0.516994234326452
0.518056095561641
0.511694876459346
0.512762131185248
0.526514459170019
0.521236569003187
0.519106429390137
0.511694217858292
0.522282613721541
0.528632061316899
0.519119095856932
0.512761419116975
0.519110306290198
0.519104455842885
0.525453043722454
0.515931554331005
0.512757953333669
0.510640871628215
0.527572662666395
0.520167389883582
0.523351087078731
0.522287357889205
0.513813385201107
0.512759533076408
0.516997505875692
0.521222774349572
0.519107119289805
0.512742070159081
0.511699454770917
0.516999106711124
0.520176475831929
0.523352095883964
0.518052545117534
0.52228663843782
0.511703646660518
0.524409614419994
0.524400427559646
0.513808968027656
0.520175863316762
0.521232138336445
0.511700307085
0.511702252263334
0.516976397320409
0.526515480642495
0.515935671205937
0.522287509985272
0.527565338459646
0.509580049912702
0.519114729990706
0.51910692653922
0.528636976730142
0.513825596047601
0.519109070903653
0.51805046236174
0.52227673857924
0.52967545537332
0.50852155425916
0.514875204501764
0.518047044539657
0.525460596053296
0.520170637987526
0.510631633909743
0.521220854208743
0.518051689948599
0.518038869579021
0.522282878978039
0.52756579362509
0.519104091557939
0.524395039659226
0.516987530994677
0.522278596363131
0.51910735130292
0.529666956360189
0.522282190748178
0.526512845931203
0.520167614564154
0.522276864671366
0.518049065494996
0.514878300601053
0.521226678365485
0.520167020194036
0.523339325377852
0.523351614948239
0.527571020894335
0.519106468295937
0.522278608039698
0.518045489761826
0.522277206159353
0.519111612277533
0.523339583224482
0.520173173420935
0.522286121933011
0.51910446515303
0.513811563238981
0.514868156704682
0.511695031624756
0.516987281247313
0.522275065300823
0.519107375294474
0.510638314938656
0.513812004867054
0.522280531965278
0.509575527284559
0.512758628163207
0.520164684019511
0.512753727821023
0.531802109415574
0.522283199482905
0.509580753966704
0.518045749239629
0.511696321662889
0.513820866701948
0.518050471108985
0.520166856825617
0.526517255323647
0.524399480342647
0.522280277769339
0.518045940396249
0.522252059178088
0.521220815515509
0.522276288361374
0.526501875206747
0.5233406746398
0.522285381922484
0.519106134886193
0.531797811534904
0.514871165899453
0.516982081925349
0.5138109536121
0.52333775454239
0.514873116197637
0.527569248372631
0.520165573297237
0.520170327891275
0.518050731720291
0.512758193103073
0.514875354628972
0.519111645152653
0.518039487608462
0.514880104453392
0.520172479458837
0.521230648135582
0.520167175843945
0.515929512399019
0.516991054475399
0.515932418149878
0.523339570243364
0.518047873805316
0.518046221400784
0.516989814687863
0.521228269953985
0.527575561996211
0.511701677940422
0.520168290804465
0.514864372459126
0.509581782177313
0.516990851266963
0.523332386295544
0.524394232186195
0.511695819103938
0.515934318824229
0.514870385121515
0.525443511076398
0.530737569568618
0.529681210313088
0.510637073155499
0.515926179429195
0.519110275691939
0.521218847382073
0.525441018559168
0.520162896071922
0.516987186795593
0.51275499674728
0.515927912747025
0.522277115021128
0.522269724737876
0.516989946071924
0.524364233644999
0.525446165013629
0.518046834070245
0.529681857741662
0.524398473863678
0.5233289079923
0.516984732844805
0.52439613804842
0.527564611345869
0.514874249230759
0.511691542295448
0.521217809526241
0.506400873447246
0.528610495711755
0.510635905761841
0.526514086465597
0.520164598659596
0.526511171128134
0.528617674501607
0.518046454406681
0.514877636685379
0.522281310945776
0.522298671796849
0.521222383254009
0.523336027927736
0.510639335652997
0.520162040577494
0.519107422342731
0.522281730196672
0.514872930358606
0.534964232535052
0.526506404668607
0.513817832727107
0.519106309640876
0.521216398142975
0.527567274465505
0.519105569937766
0.520161981393297
0.520162400714658
0.509577664888526
0.521223424738542
0.525455169693843
0.521216881051974
0.519105700825957
0.522277038213974
0.523335835017736
0.52121903935337
0.520157096527989
0.516987416086426
0.527564116100629
0.529685503963497
0.516987720297954
0.515931785701122
0.516987807832659
0.524390371246492
0.523334346493502
0.519100103638657
0.51381079553971
0.526513628766011
0.531775868774528
0.523334788026871
0.505343771385039
0.522277389897596
0.50640809229253
0.514869152244948
0.511698848744561
0.524401156125166
0.518045510452361
0.528629721785532
0.520165723494461
0.523343326181247
0.514868701415632
0.51698806331166
0.521221262127263
0.512755323954751
0.522275815881764
0.524394720046865
0.513812921833727
0.51169838945501
0.515927656051708
0.523335124347557
0.519099802594957
0.522275196291079
0.512755566094694
0.521218367072008
0.5127535632901
0.512751965257045
0.52439017117598
0.510635939392006
0.526504679600626
0.518047727009078
0.521217519131274
0.51804314801579
0.529681067728871
0.532850836494189
0.524390757573004
0.518053549276073
0.510633020236736
0.516980524693217
0.518046245945777
0.534957120914033
0.528617402205314
0.528619355635106
0.511693617085467
0.522274393304785
0.529684409366681
0.52545190685046
0.518049908420487
0.527564947809193
0.528625390546256
0.523328097335143
0.519100627768809
0.522281778783186
0.523329711114498
0.510633926145181
0.526515615707935
0.526503671226653
0.527564802462233
0.525439015339597
0.523344636638195
0.523341550630888
0.521218469895193
0.525451161804298
0.519101040918164
0.519106864183775
0.5201578704902
0.511696012319153
0.522268247246436
0.51275809906928
0.521217803962986
0.518042584868107
0.521216021417507
0.523308541612277
0.530737661015833
0.529673386209978
0.531794036676793
0.519104957608723
0.521224857219201
0.52544601922974
0.521222479125465
0.524382000601493
0.519103267287342
0.528620510636374
0.516981773623935
0.529683347284888
0.520158454549811
0.514872872979537
0.51804353239642
0.522275029418615
0.531795947956695
0.526489796729099
0.5191115335978
0.524384234170481
0.525439506090442
0.526502470282404
0.523326687768665
0.518046433062927
0.519098817318089
0.515925149846828
0.509577257908724
0.529670044287365
0.515908011582182
0.531794016550903
0.520154010178033
0.521215819328201
0.519110487239283
0.528618732871737
0.525449150541753
0.51486538285142
0.523335816047202
0.526513589563987
0.527544553395986
0.52650370106277
0.523333582402792
0.527562153697793
0.511686115624896
0.519103547352615
0.524394834942058
0.518037787213926
0.530727904736623
0.52861507928887
0.518035903154007
0.518040487457252
0.531789339660805
0.532829161732532
0.512747409529876
0.525443300013492
0.516971703633426
0.520150837919615
0.514874901674824
0.51804132087012
0.527554875807466
0.536009080639821
0.516985006578174
0.509575721329988
0.515933051945743
0.511689936865364
0.520152435682109
0.519100239262194
0.516990293455289
0.516984314476285
0.506398401246142
0.528622058453645
0.522272891609508
0.528615677599729
0.531778196698264
0.520157534988716
0.53178131334127
0.52438991411665
0.520146946899861
0.51274884592625
0.514871214287231
0.528603931177722
0.521226942515616
0.52650151595133
0.526508439229969
0.525435432480459
0.523326995626327
0.524383582797331
0.52332955369996
0.525443059971248
0.508512485416668
0.516983710717671
0.522271323135226
0.528605576789204
0.51380919193604
0.531777351883992
0.533899314335991
0.513809299481476
0.5265013762349
0.534930039546322
0.529683073230187
0.521215785724963
0.525443406996123
0.514849064636563
0.52227280092186
0.519097515561679
0.527566404259389
0.533861298342554
0.515924606777203
0.511693960533627
0.529667002933629
0.515925603536256
0.521213518556588
0.532841334500665
0.532845313563439
0.537066485324544
0.515924923773862
0.515921801501882
0.521218475650933
0.522271554235839
0.519090024081065
0.515928995462332
0.529669197107119
0.513807677127333
0.516977985971182
0.530717598658903
0.525446736578364
0.533891287719791
0.515915121283827
0.524391772383228
0.513807487817839
0.520151747250368
0.521213474170925
0.530720590756515
0.519101937719354
0.511689360209581
0.523324521567409
0.531780142666553
0.528619505153969
0.521218417521935
0.514859297501362
0.527533944893404
0.532846813684639
0.532835541533926
0.529670563854903
0.52755483284378
0.527554107760661
0.521208067342765
0.525449358943798
0.514862697655566
0.521203912115403
0.529674550358268
0.527551906501295
0.520156963992125
0.522270501618847
0.52437773170265
0.525445854957475
0.526494969177747
0.524384437678811
0.536003413734334
0.513807405283525
0.516974983822988
0.518047375311759
0.535985734515151
0.525438261992109
0.512750645906491
0.509574621630269
0.523335505476328
0.528614403923817
0.51486377939753
0.521209278490249
0.520155987687674
0.516982738138111
0.527537768376644
0.526500395112671
0.524388600021615
0.524385775404442
0.526496844883298
0.520145939838682
0.527548937834501
0.510638602474691
0.523335729362558
0.51909842567393
0.526497947287116
0.520155861398412
0.516981384131223
0.510629531753181
0.530722742313241
0.52966910594659
0.527564830495008
0.521212396219849
0.528622667024691
0.52650140389489
0.531787725788388
0.522268596750261
0.524387178924507
0.5243798537307
0.532825750475255
0.522265648665302
0.52121710155982
0.526473896986799
0.523330434408961
0.522265279508709
0.534932788834974
0.526496496028008
0.53283734958314
0.52332920132723
0.520162427068466
0.502196766919075
0.502195490486363
0.505374361695025
0.503256241785782
0.503255364390476
0.505373858116267
0.502193172374413
0.503256225503966
0.505375607741346
0.503253827820907
0.503255424508666
0.503258349105002
0.503256297188347
0.502197710721731
0.503256845541036
0.503257337267805
0.503251778316648
0.503257463785793
0.503256868867654
0.503256925529081
0.505375646555573
0.503257899161044
0.503255476733255
0.505376382253389
0.500077810498051
0.503258086433543
0.503255878398734
0.502198763243227
0.505373938417582
0.503255453672678
0.503255188974271
0.502196645695555
0.505374794893579
0.503258340866755
0.500078968855488
0.505372858710391
0.500078091175869
0.503257035075791
0.50325666278466
0.50537641522065
0.505373597591025
0.503254325203447
0.503256535749331
0.503254176868418
0.502196961372302
0.502194351037427
0.503256735368051
0.502196605990546
0.502194069636126
0.503255823203811
0.502194048273162
0.503254718442516
0.505375332738567
0.502197082675531
0.502197690358355
0.504313902569881
0.504314808698652
0.50431385032657
0.504315893237522
0.504314841088559
0.504315691757761
0.504314326712753
0.504316546121288
0.50431570415056
0.504311899025188
0.504313477612759
0.504317431817031
0.504315995255214
0.504314734299265
0.504308627623701
0.504314325475226
0.504315165526043
0.50431635018088
0.504316771166238
0.504314975279076
0.504314716632304
0.504314581522884
0.504315188901405
0.504314981015033
0.533868710516832
0.526492222434234
0.520153889994045
0.513804795528532
0.525434026660992
0.53072709423023
0.525438968999747
0.523319954270447
0.528612340128115
0.537058916237342
0.52225172442753
0.525435869076029
0.533891343561602
0.522267044092224
0.528603110331638
0.525434988114007
0.538102172618373
0.528612179557121
0.513804836802297
0.515917831113021
0.518035952553251
0.526495458659423
0.516976975809838
0.526498567535614
0.53177993902709
0.53073488190765
0.532835195453155
0.516979303160932
0.516968319786494
0.521209793642875
0.51909613292708
0.527558519420951
0.519091389232593
0.521216070198451
0.527557431937853
0.531786729911402
0.53916283366428
0.523321925538548
0.523323312037596
0.526494318177939
0.528615501140702
0.521207020302428
0.528573269452004
0.532827337150652
0.527557997845624
0.529656243542706
0.536010292752809
0.529661945830996
0.52121141640173
0.518037714796704
0.522272746167122
0.531775391305629
0.52649303043822
0.520147998757485
0.520158404449682
0.52332613686034
0.529667290689276
0.536000576774058
0.527568074297639
0.533847507509866
0.522264014596624
0.524384551188669
0.521206614389088
0.533889706272726
0.512750650723692
0.512745311172053
0.532793891560657
0.532796796619246
0.53495120281633
0.525443296170131
0.521209850522264
0.539170843853517
0.514856903498592
0.530726119217707
0.539169084819647
0.529647911040919
0.516977909830813
0.521219561788593
0.514848165980813
0.539133135845283
0.534929738848027
0.527545618851158
0.534928830092825
0.526480525249972
0.526491966782922
0.522265445188806
0.51803424214794
0.52225783555094
0.547573037360075
0.512741998792622
0.532818854149515
0.515922983759637
0.530721203216891
0.525439310102134
0.508507518780016
0.530716567630895
0.534940035788264
0.533881299803875
0.519090875390705
0.520122975840597
0.516974130350741
0.529660412831381
0.534952437290841
0.5222641367985
0.529655426720508
0.515916832365229
0.526501237266991
0.537046736051908
0.525435929852586
0.532817519924143
0.524377805405646
0.523327322748944
0.525435278454539
0.530716661496959
0.540212234639761
0.530711059358098
0.523321701028038
0.527546372230885
0.527515745044712
0.518030806478517
0.526488480232146
0.533874700779102
0.528600414001606
0.540203685111417
0.544419813330678
0.530717000718422
0.535995776880693
0.527543958413253
0.53916453475924
0.51697909215655
0.522264188871948
0.531766841735184
0.532819116186399
0.505332561565709
0.519088113064215
0.529652996006982
0.532820250086237
0.523327030243162
0.542320155214258
0.53810451458107
0.531755374738282
0.522262037202741
0.532830899831501
0.537054442837594
0.519090054905161
0.532826254042468
0.530724814758147
0.521207409518936
0.527557704253485
0.526490303072653
0.523328809474132
0.522266221254
0.509570248615416
0.531770004128333
0.526491115246334
0.515912048079636
0.51486115787885
0.530721274626628
0.519084348896419
0.534948405354912
0.525430217429935
0.524390062085315
0.526503326824143
0.533886904484205
0.520152283197276
0.518036660837659
0.514863027811162
0.528604596601135
0.530712787773529
0.519079921005646
0.529667618969282
0.516981862943396
0.518033023973448
0.515917780121359
0.521205924757027
0.512743467946046
0.521205734646841
0.522276188944059
0.520149715616866
0.540216195948383
0.524380766657434
0.521209689395202
0.523365606393525
0.529660640833569
0.518034095644333
0.525429346957504
0.519089270969428
0.51908476363353
0.514856925493061
0.537039865751962
0.538106385736551
0.528611532036876
0.519090062025271
0.522268793748933
0.523322993162226
0.530713742005129
0.523323328682377
0.534947768232484
0.529661201150243
0.51485990577379
0.537065266474468
0.52015892375502
0.525434209825819
0.526483650273095
0.523318353362564
0.542314562635073
0.524360636793423
0.542315385405542
0.530703446177474
0.522259443768645
0.515910316997883
0.549682354194542
0.511680776234534
0.527544228726719
0.543366663461076
0.534934351287594
0.527537251792187
0.545465328028427
0.535979867710838
0.539158682990899
0.519088866297638
0.527541836325791
0.525409441006619
0.541245136638827
0.531765043356066
0.528599353182368
0.534923367878406
0.527550116871702
0.525427958167401
0.54020236503659
0.530715766245551
0.544420655217646
0.524364881393403
0.524376110245842
0.539157580984587
0.516966427313721
0.532816959062959
0.530706269942835
0.535988205303757
0.528587939154597
0.518032265513401
0.530709310165231
0.522252938215124
0.52437068176969
0.542302682787917
0.527550380826741
0.518037758497491
0.541260500877753
0.535987136473906
0.537040230539328
0.545467204743898
0.515915120926198
0.526484471894827
0.515907186079631
0.531770454120879
0.527551229646009
0.513793279572236
0.539154288187957
0.524373007482945
0.528606787854521
0.523316796516588
0.539149530021759
0.515907526989831
0.527545028808977
0.53599641047761
0.521200196947864
0.526499570805999
0.547578968289333
0.522271932956495
0.539162821679168
0.538106319795104
0.531775740639763
0.528609243271135
0.528605766697429
0.531777713191208
0.524378316751797
0.533884934091642
0.528612834204999
0.529653266959055
0.540208041242443
0.515913504461725
0.531766122739897
0.519086738020214
0.531768935487562
0.534932297585048
0.513800185925901
0.539159067756067
0.515912606594957
0.525441954964856
0.52965186876398
0.530729670605563
0.538103490283784
0.539156589270086
0.534935047426348
0.539162751936531
0.52226173782066
0.521207030698832
0.538097156561118
0.511681684033737
0.543349533186558
0.546510171063898
0.546500011170894
0.54544657015925
0.537030821036322
0.527528911028435
0.539149438669938
0.537021384870748
0.542303874967095
0.551763020586717
0.550699280966239
0.521177995772972
0.518021830373158
0.541246871990282
0.529649076197681
0.527538714304055
0.542298968509425
0.547489782902312
0.539133390216999
0.54644985640672
0.548612038187681
0.530665449512064
0.510609263453463
0.5443926308774
0.549645388041314
0.542290782206801
0.545453391704758
0.527536829715245
0.531768136635098
0.551747389432941
0.532804668119333
0.529641859178149
0.539148045669734
0.513783800870202
0.534932720274098
0.542293136203708
0.550683739732817
0.550719506894887
0.53598508521032
0.547578038001599
0.513786828382186
0.534931470880494
0.539140912077008
0.541247088045786
0.543335352284224
0.534929374318567
0.533875722932599
0.52648198507335
0.52436867960227
0.54335464383666
0.542309756167174
0.526488603789089
0.52648272479909
0.530702625156879
0.54123694893916
0.547556865802111
0.529650023304545
0.537029693979756
0.530704588820503
0.533867135924765
0.527539906206682
0.519079750412782
0.527504551918829
0.533878856126898
0.527537912756831
0.526482648979426
0.529659606975767
0.544414719059661
0.546509699610722
0.53177300048419
0.544402882927622
0.526480096718021
0.541269273030399
0.531843688916779
0.532831854441955
0.538105201154767
0.535985543000268
0.538089169990642
0.528598100117427
0.537012359332788
0.539145984906003
0.541235902535914
0.547559285456663
0.53176002729636
0.527533019883249
0.529664603563945
0.52965443476823
0.550690617535524
0.538095059836249
0.521196923166579
0.540194197494147
0.542306444843946
0.547549285899671
0.540188445529883
0.547553870346441
0.529640546118297
0.549656694123604
0.552812553033954
0.531764460860735
0.538092780573345
0.513789895849281
0.521194947152281
0.53068206511565
0.525420502642241
0.529644881956754
0.518028076028477
0.527530529264109
0.515903474695726
0.528594545911153
0.53808851396637
0.528593178545487
0.534921383284629
0.540203452741479
0.527540852613553
0.529645142532381
0.521192000334113
0.547553516425645
0.550687109840958
0.524370765288219
0.540187133134374
0.541244036693752
0.543361828107019
0.545457295784769
0.515907286933494
0.512731863572247
0.534927036252877
0.52330927887378
0.529646806002625
0.547563863211081
0.553842296954891
0.534923499694919
0.535976923256903
0.532811752562322
0.551745061298591
0.54546602199718
0.554895530318246
0.537042915174623
0.533870893470094
0.525422107978982
0.52856093516061
0.544410376816717
0.533855935373108
0.523305085402819
0.541224495050033
0.541213560381716
0.540188233617366
0.521190756120275
0.55384602939327
0.529642189201724
0.543339207748491
0.542242265989708
0.542302463031652
0.526485027211575
0.538093974236224
0.552772787785175
0.524358831944453
0.535969170266155
0.529640289481744
0.529638874556193
0.541242649437257
0.51590403269483
0.526484940156142
0.558038707488767
0.537026121840742
0.532807468446596
0.538092850385496
0.518022933367123
0.531760785765688
0.549635804388847
0.551758978852365
0.5486087393444
0.530693465942294
0.523303245991865
0.527529994253482
0.546475041235724
0.558035803391493
0.55595314443268
0.522243218920954
0.502199110037564
0.501140527410709
0.503255702982531
0.501139654276942
0.502200498329518
0.504316196411974
0.503259209097153
0.502200547025806
0.501138969887434
0.501138377679462
0.503258763362537
0.50219799797868
0.503258055751632
0.503258118361485
0.502199487985323
0.500078477107868
0.500078827955139
0.503257734083257
0.503260084072352
0.503259242942824
0.502198146451006
0.502199780680656
0.503257366866357
0.502199250373761
0.502200874205527
0.503259242942824
0.504316626829783
0.502196757646722
0.502198084141622
0.501137653896378
0.502198301344936
0.503259849831035
0.500082371512579
0.505357688076352
0.500081529479129
0.500081038292949
0.500082090834762
0.500082090834762
0.500082371512579
0.500082055750035
0.530712146127545
0.522275379278506
0.500080897954041
0.500081424224947
0.50113814451859
0.506427298521431
0.500082090834762
0.500081775072218
0.501140658174939
0.500082161004216
0.500082266819837
0.500080722530405
0.500081178631858
0.501139811916535
0.50008223117367
0.500082371512579
0.500082336427852
0.501140565913691
0.500082090834762
0.500082371512579
0.563251560766284
0.543304695039801
0.5829034232847
0.555892584640313
0.555885070930559
0.535968685054879
0.639146214794593
0.603291783749136
0.51798265516288
0.551740561077173
0.533859713800468
0.579831747506312
0.538078143179514
0.542295155704826
0.558016732265086
0.559032833425474
0.545388271820675
0.576709759064711
0.543325888411401
0.566361727621435
0.541215051775747
0.560112935087578
0.560086990382434
0.557998025281194
0.570481688434775
0.543341865556327
0.563193459967309
0.572461999760642
0.569506977762804
0.523289583434954
0.534914573100756
0.561125980413125
0.566328517663846
0.540140082354791
0.525406823399104
0.544391775772666
0.545455175147786
0.590085379730631
0.54228968956697
0.626381318185409
0.531741741435753
0.577765845091659
0.53385567470523
0.556979410674109
0.566371887803324
0.556951224494756
0.584965620095082
0.563208424316018
0.643090470625802
0.595215971644918
0.703427426386748
0.627229396447844
0.549637649350442
0.56219593195768
0.570487681363344
0.620410888663684
0.544381576568258
0.542261807295989
0.63819241569258
0.558972219482697
0.548556785388095
0.703417737911096
0.573640272456825
0.553830294072307
0.555953975167423
0.590117058145362
0.560086614817444
0.550678914734893
0.566342571583811
0.580839302160091
0.696283472508395
0.544373393499585
0.562172509445323
0.577769827572739
0.566362289903562
0.551662223559947
0.604356802901271
0.550592884627533
0.568409304077754
0.548601829360845
0.534921039616474
0.534904011532795
0.553790563579446
0.544382629538239
0.522223519523272
0.581833708973195
0.534901137174304
0.533846481272199
0.534882527398913
0.583947930133054
0.539138950102664
0.53701802615738
0.591022737325362
0.58801047914336
0.581863693286754
0.535948986979796
0.567373375741435
0.527516242920192
0.529624151230689
0.566350483021059
0.540181452138782
0.530680363486029
0.56530265593636
0.56217478147126
0.533858265601926
0.558012160362827
0.507430320100595
0.576697006338841
0.550670431236429
0.541243742409811
0.587001168083256
0.531751350481987
0.553820312287615
0.541242118763292
0.548575449020255
0.57771967801619
0.562173072647529
0.558018799249322
0.565297800003731
0.555908232504305
0.518013449667484
0.614389194371491
0.541230861864191
0.570526406480821
0.551757758314013
0.543341318406092
0.540197625950024
0.614419737564826
0.607378115041683
0.544381337148106
0.568398552779582
0.575637064763868
0.546490450663729
0.610363028621512
0.556963561684698
0.568396469129023
0.60935768333072
0.543335615532072
0.54330530196885
0.541193375544391
0.568392919853619
0.598267129481613
0.571542057746735
0.701614175126915
0.601279776413902
0.566302132489543
0.535960291062611
0.589019266499239
0.509538255772915
0.587040724266432
0.530671855832684
0.555930195419304
0.531741659515603
0.555897142344216
0.572484961189503
0.531741155583525
0.546470418542289
0.57361161322596
0.531752195837372
0.691826896626965
0.656536157696833
0.550695850665199
0.59928144301835
0.559026459716925
0.620434161504088
0.579823504657313
0.569469540567832
0.541237023299198
0.53069584025863
0.56633502587952
0.55171997640157
0.565250738312673
0.552738785158887
0.575669617441661
0.527518003739601
0.653450940491445
0.560102527877129
0.559050963009748
0.570474710714126
0.616388927108384
0.604344106376982
0.562204568137417
0.712147064502213
0.557983034310746
0.530700383990894
0.548569201590844
0.67983317593639
0.540149053543115
0.532764796687398
0.572483150268938
0.549647437147552
0.576693519944436
0.562156306951987
0.607372750390273
0.588038077824816
0.550692073826088
0.583890087982505
0.563187636220282
0.543325804010953
0.531739583090149
0.554875131950968
0.555905900565836
0.544378832430318
0.554868291223844
0.565288291850964
0.559001921869308
0.548584617997309
0.604372520726024
0.56114803361212
0.580839522879711
0.627388679394808
0.55171980601507
0.569461843734707
0.539141919470465
0.611433438640307
0.578818360542111
0.559061233508907
0.601338044494637
0.57667105670929
0.553800876422181
0.55695536372303
0.531748180460207
0.561104561932776
0.523296395977438
0.610376654262029
0.553821013810311
0.538051260855943
0.573591191220164
0.519073285441825
0.541194287952746
0.566339324734834
0.563232478952628
0.607339259707093
0.535953339067111
0.571527515201838
0.546488644069479
0.533857429395744
0.51589609052954
0.548590543986812
0.609374687399577
0.57462161951178
0.538058066551938
0.553812600290579
0.547533707236807
0.560096460859669
0.533862823376807
0.623404982815614
0.56111515322108
0.551736755796658
0.541219139647005
0.576728360349632
0.552753436538179
0.573593859826763
0.600256387360235
0.562179791893645
0.578755746219725
0.575706943121704
0.538071518346105
0.556946666589691
0.565316195542703
0.558022967774516
0.638203258301032
0.551709901329461
0.513787849466236
0.57566454392175
0.538064356128743
0.524347143282108
0.544384338055604
0.550674432396237
0.5766798344864
0.53594383246315
0.53596563509936
0.612400740949611
0.595167962868561
0.624405893957321
0.542253881267169
0.564264430051482
0.57981799211563
0.549642657884299
0.560083763489536
0.540183985220458
0.533846681206827
0.527513956089385
0.532806314680772
0.567389424132436
0.61640870864725
0.530686101983858
0.614440187240678
0.596213428901749
0.571551792384683
0.518014640803796
0.519048942157264
0.538068756651188
0.540174349378963
0.543830018314739
0.550457177094752
0.553698979931743
0.714101181735748
0.532888412464515
0.533111909604749
0.545479192715955
0.595453507344103
0.531521774533034
0.542589089850543
0.53974186951652
0.522235577240219
0.537754995940714
0.585382681040573
0.517696926910842
0.584308406614261
0.550943678599124
0.577532532997846
0.52285489641582
0.606269608989805
0.528612509702362
0.539204839975205
0.53512753969964
0.54268645783611
0.525634478462372
0.538081277450951
0.631755840397432
0.547007571997674
0.574930823736047
0.677226742802213
0.590495918075773
0.510825434864642
0.513786203285217
0.58512178168751
0.535868574485643
0.534609345518842
0.533961596301978
0.524566390666557
0.506558145380366
0.535845461755746
0.5638030981048
0.548993692889821
0.50050691343988
0.536376250318446
0.500188264764083
0.534910823454973
0.5643341751155
0.609896457538085
0.566438058488142
0.561242831795889
0.536390023391556
0.500082511851487
0.543235181542286
0.528457394696366
0.532697519155538
0.538162581457354
0.52097456908694
0.578781540725801
0.656265662004084
0.633494540401443
0.695543076159063
0.627245786863865
0.612016239419623
0.532674524199931
0.619672136844032
0.614178800854829
0.61974580961041
0.520655867416875
0.664368290710716
0.530594760213863
0.606608979201784
0.524654252111426
0.593740616780612
0.532740953523827
0.536455365672018
0.650707853980301
0.614338680969411
0.519817604497338
0.554492115566763
0.519270184776206
0.558404983323835
0.563092468861748
0.557577568755284
0.548761321758697
0.537602793123802
0.648186987806384
0.523934625333928
0.520554540437581
0.526574429769549
0.529749331611633
0.59742247714916
0.549318537158399
0.528166109929728
0.515168255555967
0.555918085080906
0.6903768662012
0.557480232973765
0.528576856553275
0.52256021281058
0.521706683881745
0.526681001034499
0.573502905417494
0.537109354085235
0.53395171196016
0.553917295212285
0.536396943701678
0.53931462864989
0.522985538315217
0.525962706694964
0.637084582858347
0.51907660562058
0.519494961027409
0.553172248280417
0.51948522891008
0.546787017725502
0.577545396377495
0.552744755060908
0.537440218624975
0.539619445664878
0.526265378030762
0.535014523191443
0.551799591086553
0.561215341905027
0.533337045882085
0.579597636790783
0.618981605811811
0.536051125325815
0.538283791308615
0.583409869050619
0.514305293878076
0.51716533900784
0.531830040518781
0.563467134989793
0.551408936246406
0.563064969062185
0.527303264949466
0.567885442828603
0.55580174580012
0.537540589732751
0.532582032743768
0.521301139851527
0.532400947855348
0.524766296135058
0.53806603436468
0.616329989571358
0.62220143996187
0.572771257924974
0.540362371165434
0.552431135873713
0.578354501027972
0.540337188830886
0.591608735374287
0.562050211732465
0.645615827528577
0.556852983694427
0.58618214467482
0.532573862171988
0.520337451180183
0.57609110175061
0.702554841151867
0.518219880176922
0.516034800975232
0.632617484243
0.599443704314793
0.57337818063825
0.657881241812768
0.565391478286925
0.549296389487227
0.558198213800326
0.561971417344594
0.658664077383688
0.55277310585958
0.562066716107279
0.559211603994243
0.531722577256249
0.512710983403228
0.547209022971099
0.572645520691074
0.577087826189618
0.527213434933749
0.668324906566084
0.63792836110654
0.713516108399269
0.547007714679515
0.581863553770728
0.528569637684848
0.541769021633449
0.619115326112556
0.631107050623596
0.557244415491241
0.525703157742713
0.541031331732759
0.621075097440378
0.537645408112438
0.553712166979504
0.572559041012212
0.632508820996504
0.653412672618503
0.598820667399332
0.500119772693713
0.61011267891305
0.569637639792006
0.526254007973401
0.541861237284385
0.551091185282679
0.559144195505788
0.536069940287731
0.617629113609261
0.664177575988751
0.60208489961876
0.500082511851487
0.503997893619228
0.505269781703925
0.504422299619089
0.501033164518628
0.5036797465237
0.500397665446937
0.503044855892111
0.504633708909319
0.503999077161464
0.503151810091045
0.505376301107981
0.503893164675449
0.500509149715399
0.503681670972926
0.504105295641125
0.504951617892919
0.500086623387047
0.504105295641125
0.503680951570829
0.501986146802142
0.503893571630694
0.504315331115365
0.504846426049674
0.501772446076055
0.503999396157458
0.506425228303067
0.503678137631321
0.503574588065004
0.500397665446937
0.50622191985043
0.506963221331026
0.502726982904642
0.502939379568072
0.503681412291022
0.519480661158381
0.576918072001569
0.533020953833861
0.523527771431601
0.535968104240906
0.529856412436119
0.50399087732066
0.531010194776799
0.529644235315759
0.536189911199291
0.552873783671604
0.531646778237444
0.534284985083685
0.529645719289535
0.558009867368689
0.537553119121937
0.526062463184394
0.520246459616559
0.621358249913277
0.535965770452599
0.551204371128991
0.651692655945873
0.611523160340748
0.611121154589955
0.515903497080595
0.533022355594842
0.539770675605572
0.523187783991226
0.552454325207088
0.515386267344444
0.542077447579678
0.515594676342194
0.588650061247264
0.582470916526137
0.531441207905997
0.518766425839828
0.525529194289381
0.555284942072292
0.553281032226698
0.532494962709134
0.548290008442257
0.515910643037625
0.5574869583231
0.530276745814448
0.529542903773113
0.543968018364754
0.536712552634515
0.537771445390999
0.607912701505824
0.54018545618374
0.513884157297632
0.560204929404994
0.549965810322089
0.516543950578145
0.531756324653175
0.554039398396341
0.515913919074017
0.537028086233782
0.533970610977168
0.537439699145946
0.503032035585378
0.535022659636986
0.62541889721743
0.5190838539578
0.54885361381823
0.530172885219195
0.548476068832895
0.528588396327555
0.519290145193907
0.610060337133076
0.524058791656389
0.554253817785395
0.523625322090258
0.565927519544766
0.547226356142816
0.542600573270477
0.544288465047673
0.525413768059538
0.53028231214033
0.53978306768795
0.517500457443387
0.528907816285504
0.568540443597324
0.520147702250684
0.607280099483307
0.517714823107898
0.553835085337632
0.522998629754183
0.532406168578773
0.518353457520128
0.523850404376263
0.519516928837342
0.513481043251907
0.51623331886694
0.519511007066461
0.536719557331241
0.530179453875243
0.525939008986978
0.537561062326481
0.525215017698695
0.586006085250416
0.526484147094335
0.512211706068819
0.539022519998995
0.621768603698562
0.54102300535805
0.519512180440947
0.523532274798145
0.519300118472521
0.60010797606342
0.524479568898256
0.536071326262305
0.53165339162787
0.523938746733405
0.552171716470308
0.520152768816889
0.558238663993691
0.541022909267938
0.532819774753799
0.518351687848384
0.538079248844667
0.541758096040472
0.511789782780601
0.546919509273032
0.538192158833914
0.562888357533791
0.512317197583026
0.577539765852863
0.526482534567171
0.535764387264257
0.577846525679983
0.533972672180711
0.529640284932461
0.534510682450665
0.516229343574099
0.518453159461357
0.557674457128811
0.606092747108135
0.544693845471279
0.522575470262854
0.530291267398377
0.515593239330586
0.52679557840144
0.514533732118349
0.562163423382944
0.535862590991323
0.555390712661694
0.520464758471946
0.523947949584208
0.525515886105048
0.525847746339303
0.527117286869398
0.551203551961761
0.544289978783685
0.525418457686688
0.565626375919423
0.589910612209642
0.527009551081697
0.600300814579268
0.516653318522813
0.515915584178831
0.554343169313125
0.533230819384953
0.522359696903315
0.533266198270915
0.52595939467332
0.567786533385653
0.64804377906901
0.52839380102739
0.51708042316267
0.520571672919155
0.515711719866628
0.525856676807037
0.518455612200938
0.526270881649017
0.515596136521007
0.511692188240665
0.511162707441001
0.544825549039483
0.62174879095545
0.568425690004187
0.54408526393889
0.527762515037283
0.538719903741305
0.54807436176263
0.528492998570397
0.522895987268998
0.533250215167024
0.545445867804963
0.537770673488953
0.517612987320537
0.537882493524138
0.51666260322181
0.508618143098293
0.544072730523066
0.502932199148238
0.511898771512455
0.510842487669288
0.518667338443818
0.534095473269616
0.544921230544478
0.517612602793927
0.523006763965576
0.528576050156299
0.531131097713106
0.508724489788857
0.625045215060943
0.532610562423059
0.526706482421562
0.52492099591029
0.52681431343024
0.52681646839284
0.598999061262759
0.529760839741537
0.526808399231399
0.534618344532433
0.577460120546538
0.52025339134107
0.510738297590186
0.554770004023546
0.539135762540977
0.539883234688777
0.62261032391193
0.526820149027902
0.518060864371046
0.538204569685325
0.575602426688964
0.563954154305229
0.545234485210159
0.510311402513388
0.534396893395563
0.543439577327696
0.547317723098055
0.642146343843908
0.521096964946773
0.530180879256413
0.531668397206906
0.524379687442359
0.518456475436027
0.523212293080371
0.559357227617355
0.547657167138417
0.532501570029569
0.538614059000473
0.54648326914036
0.584725935435421
0.541139393283251
0.519196703268143
0.555829001429131
0.518667169632526
0.524907072253862
0.519302903427545
0.524036517712148
0.521205700411879
0.56104874423552
0.533872083864572
0.514221049391595
0.513172213872363
0.525850146224422
0.563643506960894
0.563223507870323
0.53608962691249
0.572072081769464
0.512952518747431
0.514117886292152
0.512741762456737
0.543869549567292
0.520985197805575
0.535562681195416
0.517821436926166
0.530599662001714
0.523948312032986
0.522270359234327
0.538295570378759
0.527018205654142
0.528290391664893
0.534403653540447
0.541768882550263
0.533033498020335
0.531548859887512
0.569356931126395
0.525751330766952
0.557503701561447
0.510838770348238
0.535241162422501
0.539345615211306
0.525737492697916
0.524377542651717
0.561035383687572
0.533039782021812
0.520358105578391
0.51210781636428
0.51782386663514
0.549020390063029
0.510947257508417
0.548706339391201
0.534937038408737
0.548597237814249
0.54271238927245
0.522269946450108
0.516453115937419
0.521947479926272
0.53007386391076
0.522687324955082
0.549003932920271
0.525126417375219
0.593081246030962
0.520049501026279
0.536610318134459
0.526798097912787
0.562193199105209
0.534295619770303
0.516869435744249
0.530917592197327
0.557297767899843
0.527967299036196
0.544196560287588
0.556643136464305
0.502715460747842
0.522578156243307
0.518565407086999
0.524904469546004
0.513388200343799
0.509150626539813
0.529020865916599
0.521635327100211
0.518248385056877
0.520891743769252
0.51634380519113
0.527438640068809
0.54070670520215
0.530397061854077
0.509044630119902
0.517932158491581
0.527758576524812
0.547230112165925
0.558836385909063
0.520576068306735
0.51517800866447
0.5299805263568
0.51740182628978
0.512747561697513
0.521224467938187
0.539655412617264
0.521097418248208
0.515373946092191
0.531034522504579
0.547647047411851
0.525013906464009
0.582528865517551
0.512435267356958
0.524273775611935
0.530612867569032
0.544187026131236
0.520572879984892
0.537773728386198
0.519939282116044
0.53945465810567
0.567405382972774
0.532725695310143
0.532078037916001
0.524804119518541
0.519099471680303
0.536714125639811
0.558561307398034
0.53354384164066
0.516446358717975
0.521209584770712
0.50788379079084
0.541345821950636
0.51739353897295
0.559693046026718
0.62025046592691
0.519204613380312
0.513383905909519
0.516027913750831
0.513381981270893
0.515714290169322
0.521521430831134
0.544287692128604
0.515500020200171
0.543155198851472
0.540296683049981
0.530310659941547
0.528505078974785
0.50989463120018
0.527332462780504
0.514650334534774
0.514973648365554
0.534592935126046
0.504828382527282
0.520988109036314
0.521207143518475
0.519729445262564
0.526688872559632
0.518462513055145
0.532395510223224
0.523954815288313
0.520263932182906
0.546287419841934
0.524586404929236
0.529337020085602
0.533008302750683
0.545547255700261
0.514760001637727
0.509682327569084
0.543766659841095
0.50851503660362
0.519413089580924
0.526388991750546
0.512326729922324
0.524589765249461
0.53588709675646
0.51264788575967
0.548711958148681
0.536193909805301
0.546726905742537
0.528496388856147
0.526494797916018
0.533038576912169
0.567795531837751
0.519307183170958
0.582519346981802
0.520994396193558
0.51687529158648
0.524484875316845
0.557076657041349
0.528812532688763
0.541454354872256
0.526602862632783
0.511899750539579
0.521631850337761
0.558112605692171
0.553832844193263
0.529018336834425
0.525224059128331
0.50904585038866
0.519944048877035
0.525865454863485
0.624256423846913
0.526384871344544
0.51084740342833
0.525341729918799
0.516453951424621
0.51148079184244
0.518148959141232
0.531243302244173
0.524910437907251
0.524909468527122
0.533983594273684
0.527657847352218
0.576942575279712
0.557398529132452
0.512964345070301
0.527874271258527
0.525448015339692
0.557702650624962
0.5067130590166
0.525224273520204
0.538697865315024
0.511270456641465
0.509260393989993
0.502189955106422
0.502402686982365
0.530615773971162
0.537150934616383
0.565109533183097
0.535997991503542
0.565833552863168
0.515606463628825
0.520896841073154
0.52502262515533
0.519520176955785
0.530506949811784
0.523753696730477
0.549932082044345
0.523959883331546
0.524698136220871
0.52406093357454
0.538719923972645
0.521946724565028
0.534922101322279
0.52131669347493
0.511589333180718
0.529638266983758
0.523324379046416
0.512435833993264
0.531351086661289
0.522580120314646
0.515401014177176
0.526601650256875
0.518249534083203
0.513814884611332
0.513598675035511
0.515182708929248
0.534305819064914
0.517499648284218
0.542724207823081
0.514808997787578
0.52321999792419
0.520904126598843
0.536417080693816
0.526494449236774
0.511909188408576
0.518670022298246
0.52691394416
0.537875545934896
0.515291131145365
0.513810362807053
0.509575003119388
0.520680558623315
0.530070682205083
0.517303049739265
0.521322300146809
0.526395890119779
0.537151630551731
0.522056651377059
0.518467643415525
0.513806350426503
0.519625704084659
0.545972582805342
0.524908686146484
0.520788287628548
0.523860838467752
0.515923882226532
0.531020345374435
0.525231466185001
0.557693430360796
0.507912419432161
0.511294981022314
0.507702211753261
0.507396113681954
0.509186195148856
0.510666354368889
0.508123545269911
0.503043023695294
0.506221769851544
0.500713801658236
0.50314926497515
0.507280062880544
0.509610013020401
0.508974827038681
0.501667189915785
0.507699766707066
0.501455051414703
0.507491992219218
0.51076835871425
0.508542395318623
0.508545990833183
0.508546734078786
0.508544709848441
0.508544694588013
0.508541865904562
0.508542248221413
0.508541636086292
0.508544557459732
0.508544796568558
0.508549542206595
0.508541011766978
0.508543421615693
0.508540439999562
0.508543345896577
0.508542802855637
0.508539926736471
0.508545995912033
0.508538838883605
0.508542785237564
0.508539965556381
0.508542551874612
0.508543720449608
0.508544698485248
0.508544054869637
0.508547466862163
0.50854153936703
0.508540698375298
0.508542453010738
0.508546881671141
0.508543451652787
0.508546487721531
0.508544660871952
0.508544291704521
0.508545461403606
0.508543077671823
0.508546778347943
0.508543230232918
0.508542652305953
0.508543423357579
0.508541591548853
0.508541533066781
0.508542760668412
0.508541470466665
0.508540236397015
0.508546947120782
0.508542800634191
0.508541223949117
0.508540621894216
0.508544267413462
0.508542709708087
0.50853991328134
0.50854637245423
0.508542812915718
0.508543658000106
0.508539504827752
0.508543325351302
0.508609089837164
0.508545298801302
0.508535064389074
0.508545178129463
0.508544061761339
0.508544918535715
0.508544909369966
0.508546893499952
0.508540563763961
0.508539076940465
0.508544011108658
0.508541461769173
0.508544654942309
0.508545876340102
0.508543847422471
0.509602061708852
0.509602539816764
0.509599839663005
0.509605336377061
0.509599741803073
0.509595906214928
0.509589310108831
0.50960025980917
0.509603160657451
0.509604774219584
0.509605971029248
0.509601668624906
0.509603383862112
0.509602282262013
0.509594730964669
0.509603477593412
0.50959954984566
0.509597487453435
0.509598579892682
0.509604907951054
0.509600515194222
0.509601012091125
0.5096047221309
0.509600521086033
0.509602233480787
0.509603626922529
0.5096058543983
0.509602992633306
0.509605651014093
0.509605832270608
0.509605453839045
0.509602627572132
0.509580107851106
0.509598978410786
0.50960355375438
0.509603520252359
0.509601444213747
0.509598339080028
0.509601422394841
0.50960399112988
0.509601751084147
0.509599730962208
0.509594787932159
0.509599021490631
0.509601028460852
0.509601388050583
0.509600352439633
0.509604594623992
0.509604423152059
0.509603788686504
0.509603915026215
0.509601829373888
0.50960401258572
0.509602820145023
0.509601863001309
0.50960154418546
0.509597951757383
0.509605184446334
0.509603046027481
0.509601829373888
0.509601357928497
0.509600716457847
0.507480894071242
0.507480571286318
0.50747430464893
0.507486471347018
0.507481397347912
0.507484662465131
0.507481719683879
0.507482867306867
0.507484461851318
0.507483301252431
0.50748275647793
0.507484336192806
0.507481648909251
0.507484149213686
0.507482506811055
0.507486105981939
0.507484843214817
0.507482104908588
0.507483595044051
0.507481059361879
0.507481548315653
0.507488487176749
0.50748334951052
0.507483278943964
0.507485285713115
0.507484922262007
0.507483209203044
0.507483673790209
0.507485041788017
0.507483944117534
0.507485757799083
0.507484887185141
0.507492671389574
0.507482953776797
0.507484673970686
0.507482416745129
0.507487863356485
0.507485543508713
0.507480498131889
0.507479957260065
0.507483457537717
0.507487105413656
0.507480378703563
0.507480434820384
0.50748364132709
0.507482041514316
0.507482831344474
0.507485128847962
0.507484728713658
0.50748532442959
0.507485360097236
0.507481445207486
0.507484924350382
0.507481331064164
0.507480121583673
0.507486120885162
0.507482038032486
0.507479503479437
0.510661540055861
0.510658915927539
0.510664319957415
0.510658406927975
0.510660929572825
0.510660016267084
0.510655380886743
0.510661367069713
0.510666022463851
0.510660995635663
0.510664418676356
0.510664214190962
0.510662585505731
0.510660467099387
0.510663418345336
0.51065912247686
0.510661822557827
0.510666427914317
0.510663038029969
0.510657060280932
0.510632676071415
0.510661482560077
0.510656803192653
0.510666057793167
0.510660615972153
0.510665115404896
0.510660316771161
0.510661165639777
0.510657470667888
0.510660523052054
0.51066532364695
0.510661561701227
0.510666775310218
0.510662189205599
0.51066236628218
0.51065997913833
0.510660415277477
0.510660609538535
0.510658346561599
0.510650873882111
0.510658195171284
0.506421464411545
0.506424679116904
0.506425961450359
0.506424110267931
0.506424259076497
0.506423935434603
0.506424105874162
0.506423046863257
0.506423939349696
0.506424043962688
0.5064216217939
0.50642275814061
0.506429450309987
0.506424011620875
0.506423604978444
0.506425008009316
0.506423516275536
0.506424362953846
0.506424766464799
0.506427007243398
0.506424414941802
0.506423010293636
0.506423355195924
0.506422916620754
0.506425775642477
0.506424902359669
0.506423818549896
0.506425500898099
0.506422610366431
0.506428083885154
0.506424271478241
0.506422808243084
0.506424314418075
0.506425530883378
0.511724186225801
0.511725149799902
0.511724521368266
0.511716658276588
0.511719240065839
0.511722851713701
0.511719467397847
0.511718175109477
0.511719684655895
0.511718841876097
0.511723197093454
0.511723999434172
0.51172568359389
0.513208589700223
0.507386551878135
0.503466017431038
0.503361603575449
0.504525273535279
0.505583438082253
0.504630360274657
0.503362238072945
0.503361699046355
0.502618313716607
0.504107315143377
0.503464747376762
0.503149599095512
0.506113203161541
0.503254387367868
0.505161414400305
0.504632064801152
0.500398965345082
0.503602107191344
0.503467254239101
0.504001050037387
0.50526695036776
0.50452461621784
0.503572591638266
0.502408779041262
0.505265979036838
0.503994881629288
0.504839980739908
0.503677641553968
0.504734966448236
0.503677766396178
0.507173327234847
0.506962053675204
0.505584898239346
0.503996721150402
0.505266880520553
0.504737505038185
0.506854044637789
0.507276074660686
0.505160628757001
0.506115289808215
0.507701682849928
0.505900883869255
0.506006546417029
0.507280406365071
0.506749387898059
0.506007126585772
0.50653386989032
0.508021319922726
0.507174717753733
0.506634593342639
0.506008744978774
0.506643383420057
0.505689331064398
0.506751047935486
0.504020903129639
0.507386262708597
0.505373846271512
0.505161998100513
0.507489770788978
0.507174332055104
0.507491302375104
0.508127318471404
0.506221528328514
0.505374365940817
0.507278259140413
0.506218460405953
0.505583280693563
0.505592384309993
0.525864930640262
0.526179444277055
0.54209086659467
0.52089774915212
0.539054567205449
0.519521214307496
0.51877707777116
0.508098394783105
0.505346483328711
0.513602472083121
0.518253472541004
0.534301823111807
0.531569180884384
0.525018153946982
0.508520700132962
0.519530348937358
0.523008061101418
0.516351833611672
0.521209285833502
0.529659683366251
0.50391306655029
0.548491126492652
0.522799601276386
0.533982336931249
0.530614576300258
0.519944631589669
0.515186705073273
0.516666848535864
0.524271568963936
0.536515104805847
0.525011827515682
0.53872718473518
0.51751579601864
0.53746940007509
0.511693582113251
0.510319380160215
0.533033059729402
0.549009175146594
0.514869922002451
0.521845089659695
0.566651316822566
0.527451781302738
0.532192113190409
0.515824856650293
0.538421478761297
0.531563302831808
0.519314944632604
0.516040163774724
0.523432251448393
0.523004690700107
0.528191461770863
0.518466020099152
0.527562341933082
0.517838693714229
0.513497687670383
0.523748101130737
0.548267211292266
0.522905600740694
0.524601483801563
0.514021387946993
0.552369619944367
0.535896145084176
0.525444237320649
0.517729868391554
0.516456835978708
0.529031205588688
0.519103422448656
0.520052823321141
0.534208152767455
0.513808527112864
0.52913727732857
0.522476132206047
0.519313064250978
0.533468004581305
0.513708736207111
0.526284116211124
0.549127000501755
0.525219814794531
0.527453603292351
0.525872036221161
0.51264515231161
0.5319064218884
0.5290370544104
0.510635873228757
0.529100065414011
0.53788743917991
0.511060099127207
0.521110128856671
0.51550608019763
0.513494872168271
0.530084456269645
0.532620228938907
0.523116121238076
0.529032152039427
0.509365926284118
0.513073768330799
0.530394844241712
0.525445683207045
0.519625779170979
0.519313738256937
0.515813013080496
0.528187289545369
0.554366551151032
0.519717119019283
0.514875193245725
0.509183699942591
0.515081398591719
0.509686279461805
0.513388633417337
0.569061464501184
0.519206666472291
0.515928334565201
0.534739746588801
0.536506767634169
0.51296546709703
0.527848670671202
0.518676273050022
0.513704474356502
0.567379554655787
0.509367931873848
0.506831614715415
0.532097919588988
0.514557575992466
0.513283273484886
0.506408032594255
0.522166568764202
0.510108546439049
0.52840891437331
0.518882354319933
0.519635630651837
0.530296066860813
0.5142343963945
0.510954739425205
0.507992509917578
0.513176864159628
0.564166453026361
0.508310783081979
0.512556819243369
0.511485954999126
0.523434845473536
0.524496893187307
0.56535620649179
0.528509389299941
0.520582759214725
0.531671879065764
0.538108269947584
0.511806330944695
0.556988300728119
0.507886326554696
0.525444681822168
0.506300975826273
0.56522021674343
0.541785349419905
0.518261065477606
0.530512209683455
0.514016174112689
0.515612753164727
0.521956791288928
0.520685092209093
0.516036753521968
0.535573586527791
0.523559189487886
0.524816934536251
0.522351999312539
0.509146771326077
0.522686352994292
0.53946271453041
0.526372855733391
0.511377540114007
0.517625951728173
0.522905965076704
0.514977303743037
0.520600575935016
0.526714392026693
0.511895122924359
0.518472213410882
0.531568389041252
0.525650092080558
0.526810399981392
0.522272687788939
0.517416974530336
0.519829594685211
0.512116856692739
0.515611607636044
0.513817545435584
0.512013623956456
0.5407325784167
0.520693896949295
0.515816111497084
0.511539146364142
0.509263947395203
0.524488418423507
0.532842450300419
0.531152129901702
0.529562457943053
0.515191835674277
0.517628534562086
0.528190050726222
0.533044586760531
0.520888613409857
0.518255043507345
0.516777303507475
0.525970735133393
0.518463666967259
0.517303463492454
0.507358733812084
0.524066753071877
0.512120877561063
0.528390736965594
0.529561808540144
0.525120375101343
0.511716423253334
0.511721522031684
0.51172023063415
0.511724433899155
0.511712178104339
0.511724779241695
0.511720897010736
0.511728289891699
0.511714574442787
0.511726044308781
0.511716297106237
0.511714421372964
0.511718913240512
0.511719988026676
0.511718373326591
0.511723966031778
0.511724706160224
0.51172152500149
0.505365754478866
0.504307286512526
0.504304807040467
0.505367088778938
0.505363829212923
0.504305821975239
0.505367143121093
0.513842887240166
0.512783269303939
0.51277395879153
0.505368378391604
0.512781880492644
0.505361977646831
0.501126321025871
0.512781933681746
0.513837901941409
0.505365500652609
0.512784651283478
0.504303675927001
0.505365762169463
0.50536694507951
0.505362177017918
0.500091375438779
0.505365404905974
0.50536584042238
0.50324654625567
0.505363777690999
0.503248435384212
0.505362250581802
0.512781037018339
0.513841878407145
0.512777929602667
0.513840991712951
0.505364606956119
0.502188308195499
0.512784734378396
0.503244922893506
0.504306647744645
0.513842282333592
0.512778436554475
0.504305379534304
0.505367471761129
0.505365146276164
0.512780344623714
0.504304933554445
0.512779951477194
0.50430666350796
0.512781396513234
0.512785004107319
0.50536253932296
0.504305649572913
0.512783898982918
0.50218678245545
0.513835397780505
0.512779435827717
0.504304781220476
0.505361657471696
0.505367760877392
0.505363884836643
0.505362911271645
0.507480553975291
0.506421824699036
0.507476218752594
0.507475467129726
0.506417574498128
0.516999875320856
0.505362258504582
0.507477968571292
0.506417058839091
0.50642158147569
0.515947747002167
0.50641986741834
0.515957363697905
0.507477624033078
0.506418971121652
0.517016327016141
0.507480261046016
0.50430262058961
0.504303720617305
0.518075468595727
0.515950525350206
0.506419988158742
0.507481283809909
0.517012738281409
0.515958927892773
0.50430034312458
0.506421606107448
0.507481360914753
0.506417513322614
0.515951085271524
0.515957622370632
0.505362266905311
0.504300023553101
0.515951206328157
0.517009517304942
0.506420096899559
0.504302246204471
0.507477983999173
0.5053558667041
0.507480776156025
0.507453724019168
0.506418304621673
0.507475139153797
0.507477776474484
0.506421290892421
0.507477736355951
0.517012595319492
0.507482611290392
0.507479055954545
0.506418683647436
0.507478600951313
0.517009625985845
0.507484128401613
0.507480184515794
0.517008239130969
0.515951129159976
0.507482062280842
0.507483295019931
0.515956841106573
0.504301965388011
0.515949146914937
0.506421200418166
0.507477845586279
0.507479136723663
0.515954918251217
0.506420889123957
0.506418107664729
0.518063991097817
0.502184027940507
0.507479827222247
0.507478090775935
0.507476719922698
0.515957951542903
0.50536120318652
0.507479995931926
0.514889303382
0.514896407618262
0.514893087738511
0.514895826675854
0.514888599137837
0.514886715123576
0.514891476876637
0.514892027367162
0.514896801460144
0.514889986792934
0.514891693670714
0.514898163522384
0.514892632041695
0.514890753039045
0.514893455666321
0.514895158925223
0.514891108647469
0.514890984018111
0.514897566550827
0.514893244629443
0.514890859301379
0.514896974367986
0.514892490291765
0.514890184993888
0.514894101431217
0.514891754053941
0.514892748604492
0.514891343003117
0.514891227352193
0.514893308009796
0.508539918806537
0.508537257464152
0.508537544234881
0.508537623677627
0.508539160423643
0.508536247428856
0.50853954253554
0.508536406432444
0.508537401383769
0.508541213664449
0.508538092034935
0.508539255995064
0.508537073132587
0.508537458529154
0.508538948165252
0.508533591259802
0.5085370780609
0.508537661777538
0.50854037887522
0.508542055452185
0.508536552488464
0.508527674110577
0.50853931600293
0.508536418743203
0.508538588384034
0.508538770896652
0.508537660522603
0.508539172536531
0.508536401146924
0.508538154248519
0.508539752653524
0.508536425048848
0.508536172969198
0.508542714995246
0.50853738714139
0.508537700131328
0.508540092118692
0.508539514755872
0.508536008463823
0.50853640505538
0.508537106309608
0.508536093375501
0.508538213412249
0.508539491405473
0.513832342589222
0.513832331457743
0.51383124632372
0.513836188264208
0.51383444536669
0.51383546167672
0.513831671061548
0.513830372933427
0.513834561555135
0.513833584302784
0.513836151416937
0.51383089600208
0.513840001458981
" + }, + "metadata": {} + } + ], + "execution_count": 15 + } + ] +} \ No newline at end of file diff --git a/sqlserver2019bigdataclusters/graphics/KubernetesCluster.png b/sqlserver2019bigdataclusters/graphics/KubernetesCluster.png index 4c952896..07cb90f1 100644 Binary files a/sqlserver2019bigdataclusters/graphics/KubernetesCluster.png and b/sqlserver2019bigdataclusters/graphics/KubernetesCluster.png differ diff --git a/sqlserver2019bigdataclusters/graphics/bdc.png b/sqlserver2019bigdataclusters/graphics/bdc.png index 5207d66c..e0f2b579 100644 Binary files a/sqlserver2019bigdataclusters/graphics/bdc.png and b/sqlserver2019bigdataclusters/graphics/bdc.png differ diff --git a/sqlserver2019bigdataclusters/graphics/datavirtualization1.png b/sqlserver2019bigdataclusters/graphics/datavirtualization1.png index 9f112ada..52225a77 100644 Binary files a/sqlserver2019bigdataclusters/graphics/datavirtualization1.png and b/sqlserver2019bigdataclusters/graphics/datavirtualization1.png differ diff --git a/sqlserver2019bigdataclusters/graphics/kubernetes1.png b/sqlserver2019bigdataclusters/graphics/kubernetes1.png index c300510b..cd5200aa 100644 Binary files a/sqlserver2019bigdataclusters/graphics/kubernetes1.png and b/sqlserver2019bigdataclusters/graphics/kubernetes1.png differ