1.

Hands-On Lab SQL Azure Data Sync

Lab version: 1.0.0 Last updated: 1/9/2018

Page | 1 CONTENTS 2.

Page | 2 Overview

3. 4. The SQL Azure Data Sync is a cloud-based data synchronization service, which provides uni- directional and bi-directional data sync, allowing data to be easily shared between SQL Azure and on-premises SQL Server databases as well as between multiple SQL Azure databases, within the same or different data centers. The SQL Azure Data Sync Previews can be accessed directly from the Windows Azure Management Portal.

5. 6. Figure 1 7. A functional view of the SQL Azure Data Sync

8. 9. In this Lab, you will synchronize two databases, a SQL Azure database against an on-premises SQL Server database, changing the sync settings available in a Sync Group. 10.

Objectives 1. In this hands-on lab, you will learn how to: Provision a SQL Azure Data Sync Server Create a Sync Group Topology with a SQL Azure Database, a SQL Azure Sync Hub and an on- premises SQL Server database.

Prerequisites 1. The following is required to complete this hands-on lab:

Page | 3 Microsoft .NET Framework 4.0 SQL Server Data Tools

Setup 1. In order to execute the exercises in this hands-on lab you need to set up your environment. 2. Open a Windows Explorer window and browse to the lab’s Source folder. 3. Open the configuration.xml file and enter your SQL Azure database, user and password. Enter the server name for the On-Premises SQL Server. You can leave the database name. 4. Double-click the Setup.cmd file in this folder to launch the setup process that will configure your environment and install the Visual Studio code snippets for this lab. 5. If the User Account Control dialog is shown, confirm the action to proceed.

Note: Make sure you have checked all the dependencies for this lab before running the setup.

1.

Exercises 1. This hands-on lab includes the following exercise: 2. Provisioning Data Sync 3. Creating a Sync Group Using SQL Azure Management Portal

1. 2. Estimated time to complete this lab: 45 minutes.

Page | 4 3. Getting Started: Provisioning Data Sync

4. 5. In this exercise, you will provision a SQL Azure Data Sync server, as this is required to host your sync groups. You may provision only one Data Sync server per Windows Azure subscription. However, a single Data Sync server can host multiple sync groups. Task 1 – Provisioning Data Sync In this task, you will use the SQL Azure Management Portal to provision your SQL Azure Data Sync Server. 6. Open Internet Explorer and navigate to the Windows Azure Management Portal at https://windows.azure.com. 7. Log in to your Windows Live account.

7.a.

Page | 5 7.b. Figure 2 7.c. Logging into the Azure Management Portal

7.d. 8. At the Windows Azure Management Portal home page, click Data Sync.

8.a. 8.b. Figure 3 8.c. Provisioning Data Sync

8.d. 9. Click Provision on the ribbon.

9.a.

9.b. Figure 4 9.c. Provisioning Data Sync Server

9.d. 10. It will prompt a wizard to provision the Data Sync server. Check the Terms of Use Agreement and click Next.

Page | 6 10.a.

10.b. Figure 5 10.c. Provision Wizard –Terms of Use

10.d. 11. Select your subscription under which your Data Sync server will be created from the Subscription list and click Next.

Page | 7 11.a.

11.b. Figure 6 11.c. Provision Wizard –Select Subscription

11.d. 12. Select a region to setup your Data Sync Server from the Region list and click Finish.

Page | 8 12.a.

12.b. Figure 7 12.c. Provision Wizard – Select Region

12.d. 13. On the left pane, you will see a folder structure like the following.

13.a. 13.b. Figure 8 13.c. Data Sync structure

13.d.

Page | 9 1. Exercise 1: Creating a Sync Group Using SQL Azure Management Portal

2. 3. In this exercise, you will create a Sync Group and define a Topology with the databases you want to synchronize. You will also define some sync settings, such as Conflicts Resolutions, Sync Dataset structure and synchronization schedule.

Note: Make sure you added the necessary Firewall Rules to allow you access to the SQL Azure Server using SSDT. Also, add the Microsoft Services rule (IP Address range “0.0.0.0” to “0.0.0.0”).

4. Task 1 – Creating Sync Group 5. In this task, you will add a Sync Group to your Data Sync Server. 6. If not already opened, open Internet Explorer and navigate to the Windows Azure Management Portal at https://windows.azure.com. 7. Log in to your Windows Live account.

Page | 10 7.a.

7.b. Figure 9 7.c. Logging into the Azure Management Portal

7.d. 8. At the Windows Azure Management Portal home page, click Data Sync.

Page | 11 8.a. 8.b. Figure 10 8.c. Managing Data Sync

8.d. 9. Click Create on the ribbon, within Sync Group section.

9.a.

9.b. Figure 11 9.c. Creating a Sync Group

9.d. 10. It will prompt a Create Sync Group dialog. Select your subscription from the Subscription list and the Data Sync Server you created in the Getting Started section. Click Finish to complete the Sync Group creation.

Page | 12 10.a.

10.b. Figure 12 10.c. Create Sync Group

10.d. 11. Now, you will need to define the Sync Group Name and its Topology. In the Management Portal, locate the Sync Group Name field and set its value to DataSyncGroup. You will define the Topology in the next task.

Page | 13 11.a.

11.b. Figure 13 11.c. Setting Sync Group Name

11.d.

Task 2 – Adding a SQL Azure Database Sync Hub 1. In this task, we will add a SQL Azure database as the Sync Hub in the Data Sync Group we created in the previous task. 2. In the same page you defined the Sync Group Name you will define the Sync Group Topology. SQL Azure Data Sync Service supports a hub-spoke topology. The hub database must be a SQL Azure database and the members can be any combination of SQL Azure and SQL Server databases. To add a SQL Azure database as the Sync Hub, click the Add a SQL Azure database as the Sync Hub icon within the Cloud side in the Topology section.

Page | 14 2.a.

2.b. Figure 14 2.c. Adding SQL Azure database as the Sync Hub

2.d.

2.e. Note: SQL Azure Data Sync uses a hub/spoke topology. The hub is the central database in a Sync Group and must be a SQL Azure database. It is best if the hub is either (a) in the same data center (when databases are not geographically disbursed or, (b) in the location most central to the other databases. The two most significant factors in selecting a hub database is latency and cost. Choosing a hub database that is close to the majority of your data traffic minimizes both latency and cost. 2.f. Once the hub is set, it cannot be changed to a different database or removed. Data changes in member databases are written to the hub database or discarded in accordance with the Conflict Resolution policy. After all the member databases have sent their changes to the hub, the hub then write changes to all the member databases. 2.g. Data Sync Service topology supports the following scenarios: sync between the Enterprise and the Cloud, and sync between the Cloud and the Cloud. Once the hub database is added to a sync group, other databases can be added to or removed from the sync group at any time, as business needs dictate

2.h. 3. Complete the Add Database to Sync Group dialog with your SQL Azure Server Name (i.e. yourservername.database.windows.net). Set the Database Name field to DataSyncHub (we created this database in the Setup) and complete the Credentials fields with your User ID

Page | 15 and Password. Click Test to make sure you can access to the server. If the Connection Successful message appears, click Add.

3.a.

3.b. Figure 15 3.c. Adding SQL Azure Database

3.d. 4. You will see the SQL Azure Server added as a Hub in your Sync Group Topology.

Page | 16 4.a.

4.b. Figure 16 4.c. Data Sync Topology

4.d.

Task 3 – Adding a SQL Azure Database to Sync 1. In this task, we will add a second SQL Azure Server to synchronize with your Data Sync Hub. 2. Now that you have added the SQL Azure server as the sync hub to your Data Sync Group, you will add a second SQL Azure Server to synchronize with the Data Sync Hub. To do that, click the Add a SQL Azure database icon within the Cloud side in the Topology section.

Page | 17 2.a.

2.b. Figure 17 2.c. Adding SQL Azure Database

2.d. 3. Complete the Add Database to Sync Group dialog with your SQL Azure Server Name (i.e. yourservername.database.windows.net). Set the Database Name field to DataSyncHOL (we created this database in the Setup) and complete the Credentials fields with your User ID and Password. Leave the Sync Direction with the default Bi-Directional value. Click Test to make sure you can access to the server. If the Connection Successful message appears, click Add.

Page | 18 3.a.

3.b. Figure 18 3.c. Adding SQL Azure Database

3.d.

3.e. Note: When you add a database to a Sync Group you can specify the Sync Direction. There are three sync directions supported: 3.f. Bi-Directional: allows the changes to be synced between the selected database and the hub database bi-directionally. 3.g. Sync from the Hub: allows the changes to be synced from the hub database to the selected database in one direction only.

Page | 19 3.h. Sync to the Hub: allows the changes to be synced from the selected database to the hub database in one direction only.

3.i. 4. You will see the SQL Azure Server added in your Sync Group Topology.

4.a.

4.b. Figure 19 4.c. Adding SQL Azure Database

4.d.

4.e. Note: As you can see in the picture, you can add many SQL Azure Servers to synchronize with the SQL Azure Sync Hub. In the following task, you will see that you can also add many On-Premises SQL Servers.

4.f.

Task 4 – Adding an On-Premises SQL Server Database to Sync 1. In this task, we will add an On-Premises SQL Server to the Data Sync Group.

Page | 20 2. Now that you have added the second SQL Azure Database to your data sync group, you will add an On-Premises SQL Server to synchronize with the SQL Azure Sync Hub. To do that, click the Add a SQL Server database icon within the On-Premises side in the Topology section.

2.a.

2.b. Figure 20 2.c. Adding On-Premises SQL Server

2.d. 3. It will prompt a wizard to add your SQL Server database to the sync group. To do this, choose the Add a new SQL Server Database to the sync group as Database and leave the Sync Direction with the default Bi-Directional value. Click Next.

Page | 21 3.a.

3.b. Figure 21 3.c. Adding SQL Server Database

3.d. 4. Each SQL Server database must be registered through a Client Sync Agent before it can be added to a sync group, to do this we first need to install the agent locally. Select Install a new Agent and click Next.

Page | 22 4.a.

4.b. Figure 22 4.c. Adding SQL Server Database

4.d. 5. Now you will install the Client Sync Agent. The wizard dialog will show three steps to configure it. First, you need to download and install the Sync Agent locally. Click Download button, an Internet Explorer window will be prompted with the download page. Download and Install the Data Sync Agent.

Page | 23 5.a.

5.b. Figure 23 5.c. Installing Sync Agent

5.d. 6. Once the Data Sync Agent is installed, follow the Step 2 and complete the Agent Name. Set the value to DataSyncOnPremises. Finally, in the Step 3, click Generate Agent Key and click Copy to save the generated value in your clipboard. Click Next.

Page | 24 6.a.

6.b. Figure 24 6.c. Installing Sync Agent

6.d. 7. Open the SQL Azure Data Sync Agent from Start | All Programs | Microsoft SQL Azure Data Sync and click Submit Agent Key Configuration.

Page | 25 7.a.

7.b. Figure 25 7.c. Configuring SQL Azure Data Sync Preview

7.d. 8. Complete the Agent Key field with the value you copied in the Step 5 and click OK.

Page | 26 8.a.

8.b. Figure 26 8.c. Configuring SQL Azure Data Sync Preview

8.d. 9. In the SQL azure Data Sync agent’s window, click Register in the ribbon.

Page | 27 9.a.

9.b. Figure 27 9.c. Registering SQL Server

9.d. 10. In the prompted dialog, set the SQL Server configuration with your credentials. Complete with your Server Name instance and the Database value with DataSyncHol. Use Windows Authentication. Click Save.

Page | 28 10.a. 10.b. Figure 28 10.c. Configuring SQL Server Connection

10.d. 11. In the SQL Azure Data Sync agent’s window, you will see the recently added SQL Server in the Databases list.

Page | 29 11.a.

11.b. Figure 29 11.c. Adding SQL Server Database to SQL Azure Data Sync

11.d. 12. Now that you added the SQL Server to SQL Azure Data Sync agent, switch back to the portal in order to complete the wizard. Click Get Database List to obtain the currently registered database and choose DataSyncHOL from the Select Database list. Click Finish.

Page | 30 12.a.

12.b. Figure 30 12.c. Adding SQL Server to Sync Group

12.d. 13. You will see the SQL Server added in your Sync Group Topology. In the next task, you will configure this Sync Group schedule and conflict resolution policy.

Page | 31 13.a.

13.b. Figure 31 13.c. Data Sync Group Topology

13.d.

Task 5 –Configuring Sync Group 1. In this task, you will configure the Sync Group setting the sync frequency and the resolution policy to apply when conflicts occur (i.e. changes are made to the same field in multiple databases). You will also define the Sync Dataset. 2. Configure the Sync Schedule. In the portal, locate the Configuration section and check Enable. Set the Every value to 5 minutes.

Page | 32 2.a. 2.b. Figure 32 2.c. Data Sync Group – Sync Schedule Configuration

2.d.

2.e. Note: The schedule defines the interval at which scheduled synchronizations are run. When synchronization is run it is only among the databases in the associated Sync Group.

2.f. 3. Select the Conflict Resolution policy to determine what data is kept and what data is lost whenever the same record is changed in different databases. We will use Hub Wins.

Page | 33 3.a. 3.b. Figure 33 3.c. Data Sync Group – Conflict Resolution Settings

3.d.

3.e. Note: There are two Conflict Resolution policies: 3.f. Hub wins: If there is a change in the hub’s record it will always be kept and a data change in the member is lost. The first change written to the hub is maintained throughout the synchronization. 3.g. Client wins: If there is a change in the member’s record it is written to the hub. If the record is changed in multiple members the last member’s change is written to the hub and is propagated out to all members. 3.h. Once the Conflict Resolution policy is set for Sync Group it cannot be changed later except by recreating the Sync Group.

3.i. 4. Finally, you need to define the Sync Data Set by selecting the specific tables, columns, and rows (by filtering on a particular value) to be included for synchronization with this sync group (when a synchronization is performed only the tables, columns, and rows selected are synchronized). Click Edit Dataset.

Page | 34 4.a. 4.b. Figure 34 4.c. Data Sync Group – Defining Sync Dataset

4.d. 5. In the prompted dialog, select the DataSyncHub database to import its schema and click Get Latest Schema to make sure it is updated.

Page | 35 5.a.

5.b. Figure 35 5.c. Defining Dataset Synchronization

Page | 36 5.d. 6. Select the tables and columns for synchronization. In this case, we will synchronize Products table and all its columns. You can also add row filtering to specify which rows you want to synchronize. Make sure Products table and Id, Description, Price and IsLocal columns are selected and click OK.

Page | 37 6.a.

6.b. Figure 36 6.c. Defining Dataset Synchronization

Page | 38 6.d. 7. You will see the Sync Dataset definition specifying the Synced Table and the Synced Columns.

7.a. 7.b. Figure 37 7.c. Sync Dataset

7.d. 8. Finally, you need to deploy this sync group to SQL Azure. In the ribbon, click Deploy and wait until the deployment finishes. The sync group status will be updated to Good in order to show that the deployment has correctly finished.

8.a.

8.b. Figure 38 8.c. Deploying Data Sync Group

8.d.

Page | 39 8.e.

8.f. Figure 39 8.g. Deployed Data Sync Group

8.h. 8.i. You have successfully created a Data Sync Group, added two SQL Azure servers and an On-Premises SQL Server. To verify that the synchronization is working, follow the Verification section.

1. Verification

2. 3. Now that we created the Sync Group and set the sync configurations, we will do some tests in different scenarios in order to verify that the synchronization is correctly working according the conflict resolution and dataset proposed.

4. Note: In order to run this verification you will need to execute each task in a time-window of five minutes as we defined in the Sync Schedule interval. If you want, you can update this value to a higher one as we did in Task 5 of Exercise 1.Take into account that the waiting time will increase.

Page | 40 5. Task 1 – Synchronizing Data 6. In this task, we will add some rows into the SQL Azure and the On-Premises SQL databases in order to verify if the Data Sync is working and SQL Azure Hub gets those rows and synchronize them between the databases. 7. Open SSDT. To do this, in Start | All Programs, click the Microsoft SQL Server Data Tools shortcut. 8. In the View menu, select SQL Server Object Explorer. 1. In the SQL Server Object Explorer pane, click Add SQL Server. It will prompt a Connect to Server dialog. Fill it with your SQL Azure Server Name and Credentials and click Connect.

8.a. 8.b. Figure 40 8.c. Connecting to SQL Azure Server

8.d. 9. Now, we will add the On-Premises SQL Server to the Server Explorer. Click Add SQL Server and set your SQL Server Name. Change the Authentication mode to Windows Authentication and click Connect.

Page | 41 9.a. 9.b. Figure 41 9.c. Connecting to SQL Server

9.d. 10. In the SQL Server Object Explorer pane expand the SQL Server node. Locate your SQL Azure Server and expand Databases folder. Locate the DataSyncHOL and DataSyncHub databases you created in the setup.

Page | 42 10.a. 10.b. Figure 42 10.c. SQL Azure Server

10.d. 11. Right click in DataSyncHub database and select New Query. It will open a new tab. To make it easier for you identify each of the SQL Servers in the tabs we will add a commented line with the description of the database that is pointing that query. In this case, we will also add a line to list the Products table content and show that it is empty: 11.a. T-SQL 11.b. --SQL Azure Database – DataSyncHub 11.c. 11.d. SELECT * FROM [Products]

11.e. 12. Press CTRL + Q to run the query and verify that the table is empty. In the next steps, you will add some rows to the databases, after the synchronization, you will execute again this query and verify that the table is now populated with those rows.

Page | 43 12.a.

12.b. Figure 43 12.c. Empty Products Table in SQL Azure Hub

12.d. 13. In the Databases folder, within the SQL Azure Server node, right click DataSyncHOL database and select New Query. Add the following lines in the new tab. 13.a. T-SQL 13.b. --SQL Azure Database – DataSyncHOL 13.c. 13.d. INSERT INTO [Products] (Id, Description, Price, IsLocal) 13.e. VALUES (1,'SQL Azure DataSyncHOL Product 1',10.99,1) 13.f. 13.g. SELECT * FROM [Products]

13.h. 14. Press CTRL + Q to execute the query and insert the product. After the insertion, the query will show Products table’s rows. You will see only the recently added product.

Page | 44 14.a.

14.b. Figure 44 14.c. Adding Products to SQL Azure Database

14.d. 15. Finally, you will create a new query for the On-Premises SQL Server. To do this, locate your SQL Server in the Server Explorer. Expand Databases folder and right click DataSyncHOL database. Select New Query and add the following lines.

Page | 45 15.a. 15.b. Figure 45 15.c. On-Premises SQL Server

15.d.

15.e. T-SQL 15.f. --SQL Server Database – DataSyncHOL 15.g. 15.h. INSERT INTO [Products] (Id, Description, Price, IsLocal) 15.i. VALUES (2,'SQL Server DataSyncHOL Product 2',2.99,1) 15.j. 15.k. SELECT * FROM [Products]

15.l. 16. Press CTRL + Q to execute the query and insert the product. After the insertion, the query will show the Products table’s rows. If you did complete this verification in the time-window of 5 minutes, you will see only the recently added product. If you did not, you will probably see the previously added product in the SQL Azure database because of the defined sync schedule.

Page | 46 16.a.

16.b. Figure 46 16.c. Adding Products to On-Premises SQL Server

16.d. 17. Now that you added the rows, you need to wait a time-window of five to ten minutes in order to let the Sync Group execute the synchronization schedule. To verify that everything was synced correctly, replace the tabs content with the following script to obtain the list of products each one has. 17.a. T-SQL 17.b. SELECT * FROM [Products]

17.c. 18. Execute the scripts by pressing CTRL + Q. You should see the same result in the three queries. First, all the databases synchronize their content with the SQL Azure Hub and then, this hub, sends the updates to each database in order to distribute the new rows.

Page | 47 18.a. 18.b. Figure 47 18.c. SQL Azure Database - DataSyncHub Rows

18.d.

18.e. 18.f. Figure 48 18.g. SQL Azure Database - DataSyncHOL Rows

18.h.

Page | 48 18.i. 18.j. Figure 49 18.k. SQL Azure Database - DataSyncHOL Rows

18.l. 18.m. After the sync schedule time elapsed, both SQL Azure and On-Premises databases rows were synchronized by the SQL Azure Sync Hub.

18.n.

Task 2 – Conflict Resolution According Precedence Settings 1. In this task we will show how the conflicts are solved according the Conflicts Resolution we set during the Sync Group Configuration. To show this, we will update the same row in the SQL Azure Hub and the On-Premises SQL Server and verify which takes more relevance in the synchronization. 2. In the Server Explorer pane expand the SQL Server node. Locate your SQL Azure Server and expand Databases folder. Right click the DataSyncHub database, select New Query. 3. In the opened query tab, add the following lines. 3.a. T-SQL 3.b. --SQL Azure Database – DataSyncHub 3.c. 3.d. UPDATE [Products] SET Description='SQL Azure Hub update' WHERE Id=2 3.e. 3.f. SELECT * FROM [Products]

3.g.

Page | 49 4. Press CTRL + Q to execute the query. You will see the description of the Product 2 updated to “SQL Azure Hub update”.

4.a. 4.b. Figure 50 4.c. Updating product in SQL Azure Hub

4.d. 5. Now, you will create a new query for the On-Premises SQL Server. To do this, locate your SQL Server in the Server Explorer. Expand Databases folder and right click DataSyncHOL database. Select New Query and add the following lines. 5.a. T-SQL 5.b. --SQL Server Database – DataSyncHOL 5.c. 5.d. UPDATE [Products] 5.e. SET Description='On-Premises SQL Server update' 5.f. WHERE Id=2 5.g. 5.h. INSERT INTO [Products] (Id, Description, Price, IsLocal) 5.i. VALUES (3,'SQL Server DataSyncHOL Product 3',2.99,1) 5.j. 5.k. SELECT * FROM [Products]

Page | 50 5.l. 6. Press CTRL + Q to execute the query. You will see the description of the Product 2 updated to “On-Premises SQL Server update” and a third row with “SQL Server DataSyncHOL Product 3” description.

6.a.

6.b. Figure 51 6.c. Updating and adding products in On-Premises SQL Server

6.d. 7. Now that you updated the same product in the SQL Azure Hub and the On-Premises SQL Server, you need to wait a time-window of five to ten minutes in order to let the Sync Group execute the synchronization schedule. To verify that the conflict resolution applied in the synchronization was the one we set in the Sync Group Configuration, replace the tabs content with the following query to obtain the list of products each one has. 7.a. T-SQL 7.b. SELECT * FROM [Products]

7.c.

Page | 51 8. Execute the scripts by pressing CTRL + Q. You should see the same result in both queries. When the On-Premises SQL Server synchronized the products with the SQL Azure Hub there was a conflict between the row with Id=2 as we updated the same row in both databases. When we defined the Conflict Resolution policy, we set the Hub wins policy (if there is a change in the hub’s record it will always be kept and a data change in the member is lost), so we should find the Product 2’s description with the value set in the SQL Azure Hub query.

8.a. 8.b. Figure 52 8.c. SQL Azure Database - DataSyncHub Rows

8.d.

Page | 52 8.e.

8.f. Figure 53 8.g. SQL Server Database - DataSyncHOL Rows

8.h. 9. Now we will check that the SQL Azure database was also updated with these changes. To do that, in the Databases folder within the SQL Azure Server node, right click DataSyncHOL database and select New Query. Add the following line in the new query tab. 9.a. T-SQL 9.b. SELECT * FROM [Products]

9.c. 10. Press CTRL + Q to execute the query. It will show the same results you obtained in the previous step.

Page | 53 10.a. 10.b. Figure 54 10.c. SQL Azure Database – DataSyncHOL Rows

10.d. 10.e. After the sync schedule time elapsed, the SQL Azure and On-Premises databases rows were synchronized by the SQL Azure Sync Hub. As we updated the same row in different databases, we generated a conflict that was solved by keeping the data from the SQL Azure Hub (Hub wins policy).

10.f.

Task 3 – Exploring Data Sync Objects 1. In this task, we will show you some objects Data Sync creates in order to execute the synchronization between the Sync Group members. 2. Locate your SQL Server in the Server Explorer. Expand DataSyncHOL within Databases folder. 3. Expand the Tables folder. You will see the Products table we were using in this lab and many others with DataSync prefix that were created for Data Sync process.

Page | 54 3.a. 3.b. Figure 55 3.c. Tables

3.d. 4. Now, expand Stored Procedures within Programmability folder. You will find many store procedures with DataSync prefix that were created for Data Sync process.

4.a. 4.b. Figure 56 4.c. Stored Procedures

4.d. 5. Finally, expand Schemas within Security folder. You will find many schemas defined, but one named as DataSync created for Data Sync process.

Page | 55 5.a. 5.b. Figure 57 5.c. Schemas

5.d.

1. Summary

2. In this Lab, you learned to provision a SQL Azure Data Sync Server and create a new sync group topology, synchronizing data between a SQL Azure and on-premises databases.

Page | 56