PDA

View Full Version : [SOLVED] Selecting and deleting rows based on criteria



Beatrix
01-16-2014, 07:31 AM
Hi Everyone ,

I need to delete blank rows in a range. This script does that.


Sub DeleteBlankRows()
Dim r As Long
For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(r, 1) = "" Then Rows(r).Delete
Next r
End Sub

However there are many spreadsheets with multiple tabs and the range is dynamic in some spreadsheets. What I would like to do is to create a message box and let users answer below:

* Is first row of the range is same in each tab? If yes then let user select the first row in the first worksheet then process would apply to all worksheets. If no then let user select the first row of the range in each worksheet.

Apart from blank rows there are some certain rows need to be deleted in that range too. I will define some other certain rows like if column C has "NW", “NE”, etc then delete entire row.


Can anyone help me on this please? : pray2:

Cheers

patel
01-16-2014, 07:58 AM
Sub DeleteBlankRows()
first = selection.row
For r = Cells(Rows.Count, 1).End(xlUp).Row To first Step -1
If Cells(r, 3) = "" or Cells(r, 3) = "NW" or Cells(r, 3) = "NE" Then Rows(r).Delete
Next r
End Sub

Bob Phillips
01-16-2014, 08:19 AM
Are all of the workbooks open, or do they need opening? Do those to be processed have a naming structure?

Do all worksheets in each workbook get processed, or just some? Do those to be processed have a naming structure?

Beatrix
01-16-2014, 09:08 AM
Thanks very much for your reply xld.

Currently users open the spreadsheets and delete blank rows and columns manually. However that would be great to process all workbooks in a specific folder. So I would say they are not open and need opening. Yes, all worksheets in each workbook get processed.

Sorry didn't understand naming structure bit?

Cheers



Are all of the workbooks open, or do they need opening? Do those to be processed have a naming structure?

Do all worksheets in eacxh workbook get processed, or just some? Do those to be processed have a naming structure?

Beatrix
01-16-2014, 09:40 AM
Sorry. I replied this but forgot to ask is it possible to delete blank columns too in the same script?



Are all of the workbooks open, or do they need opening? Do those to be processed have a naming structure?

Do all worksheets in eacxh workbook get processed, or just some? Do those to be processed have a naming structure?

SamT
01-16-2014, 09:46 AM
Naming structure means that all workbooks have very similar names only differentiated by some unique identifiers.

Unique Date Identifier:
Daily report_140116.xls
Daily report_140117.xls

Unique Dept identifier:
Accounting 011620014.xls
Sales 01162014.xls

Unique Location Identifier:
Northeast Div.xls
Southwest Div.xls

Beatrix
01-16-2014, 09:54 AM
Thank very much for explaning that SamT. Much appreciated. I knew this but didn't know it's called naming structure :)

In that case , there is no specific naming structure but most of the worksheets are named Table&number like Table21, Table22a, Table22b etc.



Naming structure means that all workbooks have very similar names only differentiated by some unique identifiers.

Unique Date Identifier:
Daily report_140116.xls
Daily report_140117.xls

Unique Dept identifier:
Accounting 011620014.xls
Sales 01162014.xls

Unique Location Identifier:
Northeast Div.xls
Southwest Div.xls

Beatrix
01-16-2014, 09:56 AM
Thanks very much for the script patel. It's not exactly what I am looking for but it does a great job too :thumb



Sub DeleteBlankRows()
first = selection.row
For r = Cells(Rows.Count, 1).End(xlUp).Row To first Step -1
If Cells(r, 3) = "" or Cells(r, 3) = "NW" or Cells(r, 3) = "NE" Then Rows(r).Delete
Next r
End Sub

D_Marcel
01-16-2014, 05:46 PM
Beatrix, your need is a bit similar to one that I had in the last year, so I decided to use parts of the code and add some instructions to delete the rows based on your criteria. You'll need to put the code below in a new Workbook, once that the operation will happen from it to others Workbooks. Certainly the masters here would need much less lines to develop this, but I hope it helps you somehow. Let me know if works for you and if you found some error.

Note: The code will build a vertical range starting at the first selected cell and in the same For Each Next, analyse if there's cells with that values "NE", and "NW". If you, for example, select a cell in the column A, and have cells whose rows should be deleted in the column B, then you'll need to do some changes in the loop.

Good luck!

Sub Dynamic_Delete_Rows()


'***Declarations***
Dim Sheet As Worksheet
Dim TargetPath As String
Dim Range_Selection As Range
Dim Entry, Entry2, Entry3 As Range
Dim WorkArea, WorkArea2, WorkArea3 As Range


'***Background?***
Application.ScreenUpdating = False


'***Let's find the folder where the workbooks is!***
'***Function obtained in internet***
TargetPath = GetFolder


'***Now let's list all workbooks in the current sheet***
Cells(1, 1).Value = "Workbook_Name"
ListFilesInFolder TargetPath, True


'***This will consider as range all workbooks listed previously***
Set WorkArea = ActiveSheet.Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))


'***For Each Workbook and for its Worksheets, delete rows***'
For Each Entry In WorkArea
Workbooks.Open Filename:=TargetPath & "\" & Entry.Value
Workbooks(Entry.Value).Activate
Caption = MsgBox("Is first row of the range is same in each tab?", vbYesNo, "Beatrix Automation")
If Caption = vbYes Then
Set Range_Selection = Application.InputBox("Select the first row", "Get Range", Type:=8)
For Each Sheet In ActiveWorkbook.Worksheets
Set WorkArea2 = ActiveSheet.Range(Cells(Range_Selection.Row, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
For Each Entry2 In WorkArea2
If Entry2.Value = "" Then
Entry.EntireRow.Delete
End If
Next Entry2
Set WorkArea3 = ActiveSheet.Range(Cells(1, 3), Cells(Cells(Rows.Count, 3).End(xlUp).Row, 3))
For Each Entry3 In WorkArea3
If Entry3.Value Like "*NW*" Or Entry3.Value Like "*NE*" Then
Entry3.EntireRow.Delete
End If
Next Entry3
Next Sheet

ElseIf Caption = vbNo Then
For Each Sheet In ActiveWorkbook.Worksheets
Set Range_Selection = Application.InputBox("Select the first row", "Get Range", Type:=8)
Set WorkArea2 = ActiveSheet.Range(Cells(Range_Selection.Row, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
For Each Entry2 In WorkArea2
If Entry2.Value = "" Then
Entry.EntireRow.Delete
End If
Next Entry2
Set WorkArea3 = ActiveSheet.Range(Cells(1, 3), Cells(Cells(Rows.Count, 3).End(xlUp).Row, 3))
For Each Entry3 In WorkArea3
If Entry3.Value Like "*NW*" Or Entry3.Value Like "*NE*" Then
Entry3.EntireRow.Delete
End If
Next Entry3
Next Sheet
End If
Next Entry

End Sub


Function GetFolder(Optional StartFolder As Variant = -1) As Variant

Dim GetPath As FileDialog
Dim Selection As Variant

Set GetPath = Application.FileDialog(msoFileDialogFolderPicker)

With GetPath
.Title = "Select the Directory"
.AllowMultiSelect = False
If StartFolder = -1 Then
.InitialFileName = Application.DefaultFilePath
Else
If Right(StartFolder, 1) <> "\" Then
.InitialFileName = StartFolder & "\"
Else
.InitialFileName = StartFolder
End If
End If
If .Show <> -1 Then GoTo NextCode
Selection = .SelectedItems(1)
End With
NextCode:
GetFolder = Selection
Set GetPath = Nothing


End Function


Sub ListFilesInFolder(SourceFolderName As String, IncludeSubFolders As Boolean)


Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder
Dim SubFolder As Scripting.Folder
Dim FileItem As Scripting.File


Set FSO = New Scripting.FileSystemObject
Set SourceFolder = FSO.GetFolder(SourceFolderName)

RowCounter = Cells(Rows.Count, 1).End(xlUp).Row + 1


'***Loop inside directory***
For Each FileItem In SourceFolder.Files
If FileItem.Name Like "*.xls" Or FileItem.Name Like "*.xlsx" Then
Cells(RowCounter, 1).Value = FileItem.Name
RowCounter = RowCounter + 1
End If
Next FileItem

'***Check if there are subfolders***
If IncludeSubFolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True
Next SubFolder
End If

'***Clean variables***
Set FSO = Nothing
Set FileItem = Nothing
Set SubFolder = Nothing
Set SourceFolder = Nothing

End Sub

D_Marcel
01-17-2014, 05:30 AM
Beatrix, I forgot to tell that you'll need to activate Microsoft Scripting Runtime to run this code:

11108

Douglas Marcel

Beatrix
01-20-2014, 05:18 AM
Hi Douglas ,

Thanks very much for your time. Much appreciated. I enabled Microsoft Scripting Runtime as you said but It's giving an error. Run-time error 1004 - reads:

C:\VBA\ "specific .xlsx file name which I don't know" could not be found. Check the spelling of the file name, and verify that the filr location is correct.If you are trying to open the file from your list of most recently usd files, make sure that the file has not been renamed, moved or deleted.

I created a sample folder and put there 2 xls files to test this. I've run the code and navigated to the folder after "Select the Directory" window pops up however the folder seems ok. I also converted them to the xlsx to see if it's a version issiue even your code includes both. That didn't work either. Any other suggestions I can change and test?

http://www.vbaexpress.com/forum/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcsAAAFyCAIAAAAVpWatAAAgAElEQVR4nOy9aZQc 5YGmG39n5s6PntOn79xzZ3pssA3YYLCxwZhuG27bBu0SYpEQtHEbJGSg7TZgQAKMkEWBAYNAYlM VSEgllVRL1pK171vuGRmRmZGx75F7Ru77UtwfEbnVIlUJCWw63/OeOlkRkVuAnnrz/b74EtDpdFqt9sSJE3/5y1 effbZK6 54Yprbrji6pV9zQ1XXHPDldd878pvf /Kb3/vG9/5fr2/941vK7tuUB/qmutVX13xd79e7yuu/m7N3ppjrvru16 67mvfuu5r37q27Ou dtV1X7 qckflwW 48pobyq9HfUnfXOLa16luvPb737z2xoYbbrjhS XHH3/8j3/84/vvv3/69Om vj6gr6 vubn59ddf/ Z3vn/1dd//4OOTqVyp6uxyzq3GxVS2mFzGhWS2kMgUEplCMlNQfk1mCuVdxWS2mMyoByiOp/O1TqTzifoDEpliYvnnWsaJrHrwee9SSmZLydwyLr 7BdX5lfzZRbn6CMncqpyodXax49nSis6U4plSbHWOZorRTDGaXoMjilOKCxfh8AouH1B 8PJzlZ 6FM2ornkLC7Fs1fFl/Fk8 1k8dwEnLqmT53f fL7Y/8EWO/2FuXAJnKl3obSw645/Kf51aNcd/1IoLnz0Ses1133/m9fe OSTT7711luffvopcPz48TfeeOP/ V9faz7eGojlMU/axqdAPgnyKVuNwbKV2zYhBYnppbYJKZtQOT5p5ZJWLmHlEhYuYeHiZiZmZqJmOmqiwiYqbKIiJj pipiMmOmpmomY2ZmbjZjZupmMmOmokIwYyrMdD82hwDgnMIf45NKBDg/NYSIfLekI2kBEjGTVSUSMdNdExExM3M3H1EdiEmU2YmLiJiZnoqJGKGqiIgQzrCVmHyzoirCMje jKiJ6MGKmqkYkam4riJTpiYhIlNmFUnzVzSzKUUW7iUhU9bhbSVz4BCBhSzoJi1STmblLO5c5BU sLkLNk8B8hQhTxHyFiFvCfaWoHrbau0pgZ4S6FZtdZcs7qJZsVQ0iUWTWDQJRYNQMAgFPV/Q8wUdn9fx Xk P8/l59n8PJufZfOzbG6Wyc0wuRkmN83kpunsNJ2dorKTVHaSykxSmQkyM0FmxonMOJEex9NjZY/iqVE8NYKlRrDUMJocRpPDruSQKznoSg66EoNIYhBJDCDxfiTe74z3O1RrHfE R6zPHuuzx3rtsV57VDUc7YEiPVCkGwp3Q FuW7jbFtbYwhqbrLHJXTa5C6y6EwyptoY6raFOS9UdK9mqutMqd4LhLltYY4tooEg3FO2Bo732W J893udIaJFEP5IcQFKDrvQglhnCM8N4dpjIjhC5ETI/SubHqMI4VRinC N0cYIuTjDFCaY4yZRUs6VJtjRVa67O00s8o5hXPVvvuYqF0ny9dYpF1fqyDYqlkkEqGWtsUuwum ettUewpWesNehZUexdA74LNswB6Fmz1hrx1hpez3be8Hau3X7XzcxipcTSzsPPntwVhiO/rFrXdUn 31N/t6e/29Xf7 jXBfk2oXxPu10T7NbF Tay/M9HfmTyPtZ1JbUfFCW1HXNsR1XZEtV0RbVdY2xXSdgW1XT5tl0 r8Wg1klYjaTVin4br1QQg286f3xZOFXF/LpgoNJ84/X//v/9HgSzw uuvf/Pa7zcfb WDGZBLgHzCxicrAIXFlF1M2YUUJKYgMQVXnYaltN2dtktpWHXtXtWQmISEBMQnbHwC5GIgG7WyU QsTtdARCx0xUxELE7UwUSsTs3IxkIvb1CMTVjZmYWJmKmokwwZC1uMhHRbS4yEDIRvJsJGMGsmo iYqaqKhKZyZmZuIWNm5l4xY2YeHiFjZuYWNmOlqGtfIgQR0W1OEBHR7SE7KeCBvIsJGMKJg2UlE jFTVVkK2CO2Zm4mZW SORtHBJC5 08kkrnwKFNCikbULGJmZtUhaSspCUg9w5yJ2H3XnYU4A9BdhbsHuLsLdk95bsvpLdV4IVe6uuI6/6D6NokYpmxWLRKBYNYtEgFAx8QccXdHxhnlOcn Pyc2XCzrC5GSY3Q dm6Nw0nZuic1NlyCp4nSAy40RmjEirVgmbVvA6gqaG0dQQmhxCk0MqZBODrsQAkuh3Ko4r1jrif Qphy5Dts0f77NEeONoDR5YSVoFsly28iLBdoNwJyrVsXRGsy6BWViELhrvKkO2Goz2wAtm41pno d54PsqNUYYwqjNGFcbowUeVslbCXlbNzK3NWv4iz0mo5a1mZsypqvVXOnh yl4uzlwKyzhrC3vsvt/mtVl7TzmnaBU27qGmXus96us/6us8Gus8Ge86Ges5Ges7Gyk70nI2f391tFUfLjnS3hbrbgt1tAU2bT9Pm0bRJmjax65zQdY7rOs d1nfNZLPf f7eFU0VIykFSjg8Xmo 3KkkWeOyxx6694Qf aMZMR6xMFGRjNi4OCUlYSMJC0i4qTjkU1EpJu5RyVJ12SEmHlHSISYdYObjWCbuYsAsJmI/DfAziojY2amXCVka2MGErE7YyUZCN2rgoxMdhIWkXU3YxBQtJiEvY2LiViVroiJkMm/CQEQ8ZCdlMhs1UxEJFzXTUTCt0LjOajYFcHOQSNj4B8UkbnwDZmJWJmumwmQwZiYAB9 swnw716TC/Dgvo8YCBCBqJoJEMmSjZRMnlTB0202EzHSlbIXjUysQsTNzCxqxM3MrGrVzcyiVALgnyqm1Cyia mIDENSRlYytrdOYcn7/AWHL6i0190 kuIv QMlJz ktNfctRbha 3BKuptgi6i1Z30VJOskaxaBQL nKMVQg7x XnOAWv RlGsRJgVcJO0tlJKjtJZifJ7ASZHSez46QC2cwonh7F06NYehRLlwNsDWHR5KArOYgkB5HkAJIY cKrWOuPaxYSN9tmjvXC0F64jbA8U6YYi3VBEAykZdgXCWquEXQNeLeUYa5U7QbmrGmbrIetQITv gSg2i6SF0Rcieh7CLIbt2zs6sLs/qzs9ZcQXIrsRZz3k5u4Swqw zK3H2iw z0czCPbf/k99opM 2cmdbubOtwtlWsb1Vam/1trf6Ok75Ok4FO06FOk6FO05FO0/FOk/FOk8myo7XO6bc6PhUcbTj02jHyUjHyXD7yVD7yWD7SV/7SV/7Se 5U9K5U K5U0LbKa7tFNt2imo75TMY7rntn8KpIuTOQe4cJOWCicI1131/ /btwI033njsk5MOLmwig2ZStjBhGxuFuBjEx xCzCHEHWLCKSYcYsIpxZ1i3CnFESmBSEnEnUSkJCIlnFLCKaq7lBsOUb2h3LYLMdVcBGbDECPb6 BBIh2yMDLFhmIva ZhdiDulJOJOIe6UU0o5hISdj8NszMZEQSpsIUJmImQhZAslW kwSEdAJlqxjY3Z2BjExSAuDgtxu5Cwi0m7kID5mI2NgIxspYJmwm/EvHqXW 9y61xuA o1Yj4j7jcRfhMRMBEBMxk0k0EzFVpkCyVbaNlCh61MGGQiViZiZSJgxWwUZKMgGwPZGMjFbFxM/VMhpRzujNOdQ3w5l7/g8hddgZIrUEIDJTRQctUbCZSQQBm7vpK9HGxBT9HqKVqlokWqdAVFg1DQCQUdV9BxhQpeZ5kKYf PTTG6ayU1RuUkqN6kEWCo7QaoeJzNjZGYMz4ziGYWwI1h6BEsPY6nhMmQHFby6VMgOIMl JNGvJtm41hnXOmNaR0xrj2krFUEtYeElhF0EWZvcZa1aqQjUj/9rIWyHtZJkVc6qjQEc7YFjvTWQ7UeSVchiNZCl8gphx rqgtKiumA1qP0i8 yyYXYlzi4P2bIvGrLLcvYLhmw0s7D9J7e45 fJky30yRb6VAt7qoU71SK0tkitLVJri7e1xdfaEmhtCbW2hFqbI63NsbKPPLN/ 727FR95Zn906ZZTx8KnjoVOHQudag6cavadavaeapZONUunmoVTzdzJZuZkM3Wymfq0mfi0WZqb 2/7Pt1QJ687h/vxHn7TeeOONwD9 45pANG3APAbUZyICFjIIUiGIDUNsGObCdi7i4KNOIeYUYk4xighRRIi6xKhLjLmkuEuKu8SYS4w hYhQRI8pepHwYIip3jDqFqJOPOPiwgwvDrAwzQYgOQHQAZkJ2VlaeAhHjLimJelOoN Vyp1xSwinEHVwMZiM2SrYSISseshIhkJRBSrZRYRsVBqkwSIVtdBhiIzAbgbmonY87hLhTTCjod 6hMD4FUwEJ4zbjH4BINiGBwSUaXZMTcJsxjxr0VWwi/ucYWwm8h/RYyYCEDVioIUqGygyAVBOkgSAVBKmRVN8ogLYPlvxkwH3dIScSddnmzqD PB4p4sISHSnhoYamx4AIaVMlbQa0SaW2eIuguWtxFi1Q0SUWjWNQLRb1Q0PGFebYwyxZm2cIMW5 hh8zOsgtf8lNIPUBXI5iaonALZcTI7RmTGCJWwI7iKVxWyaHoITQ hqSFXasiVUgg7gCT7VcLG 8ttrNYR19ZUBPWEjfbA0W442g0vQ1jVYLgLrOBVdYdVXhth61BbG2YrtWys1x7vdcS1joTWWa1l h9DMEJYdxrMjRG6UzI9S1SSrcHZ85TB7EZydvijOrpRnDSv0BhfkrGVZyHqX5 wqG4PPG2Y/N2QjmYVtt/xQmp7Cmo/izUfx5qNU81G65SjbcpRvOSq0HJVajkotR70tR3wtRwItR0ItR0It78ot78ot726/d/dnZW2/d/c7Tz27aEuo Z1Q87uB5nd9ze96m9 Vmo9IzUeE5iNc8xGm QjVfIQ8dgQ7dgQ7dgQ9dkScmtx2yw9rCQu7c5HMwjevvRH431dcnUjndU5R71KI47OSfhsVgOgg zIQcnOzgwggfRgTFEZdiMYJKUVSKoKK6BRHCLtWRRUaECCKEET7s5GQHF3QwQTsTsDN Bxt0cDIihBEhikpx3JMgvGncl8Y9KcydQKUEIsQcXASmZRsRBImgjQzayBBEyhAl28qGKBmmwzA TsXMRBx9DhLhLSqCeJOpOuKSYU4g4OBlmAjbSZ8HdJpdgQgQTIphQ0YxKFVswt2rcs8ReK Gzkj6Q9IGkv2yflfBZCZ F8FkIn3KAlfRbSR9IBSBGtnMRpxBH3EnUm8H9OTJYJENFUi6RcomSFyh5gawxEVogqqhdcAVKSD nMQt6SzVO0eorK8JdJIaxSxdZDdprJT9P5aTo/Reen6NykYio3SeXGydw4mR0nsuNEdozIjhLZUSIzSiiQzYzg6WEsPYyuQFhXYgBR3Y oFUG1JagQtjLMtQxhy5CFwhpQdU1FcCkJu6iW7YFjPfZYr72SZFN1SRbPjeCLIasQdpwpjq9M2I vPsyug9gK9weoGwUwrcPY85ex5wuwXDNmL42wks7D5xu yI0PwX16zv/Wa463XkLdec739Kv72q TbTfThJvZwE3e4STzcJB5u8hxu8h5u8h0 5D98yH/40OHf/n4RUmtvH/7t732HD3kPv I5/Ip4 BXx8Cvc4Sbm7Sb67Sbi7Sbs7SbX203IW6/a//Iq/JdXob 8ygwPbr7xu7WEhdy5dH7hm9feCPyvK65KpHM6h6BHRBPqtuAeK G1UT6IDtiZgJMNIlzIxckoL6OCakyM4GIElyK4FMHFCCaGK7tQUUbFMCpGUDGMimFUUCyjguziZ RcfQrggwgadbMDJBhAu6OJlVIxgUpTwxElfkvKn6UCG8qUJTxJ3J1AxhnARJyPbqSBEBCEyCFNB mArBVAiighCpbrEzsoMJO7kIwkdRMY67k4Q3SXiTuDuOihFEkJ1sEKZ8NsJtRUUzyltQwYqJVaN lK7/ikhV3qybcIOGpmvRWb Oe6mG424p7FIOkD6IDDlZ2CjHUncC8acKfpYIFRi4ycpEJl9jwAhNZYCILTFg1HV6gFdTKC3hwA QsuoIEFl7/k9JfsPmUErAh61K7AKBT1QlHHF f5whxfmGMLM0xhmlEJO1XjCSW9krkJMjdOZsfI7BhR9SiRHcEzI1hmBEsPK0ZTQ0pFUHEZsuWKI LECYWO99liPPdZjj/bYFxNWtS2isUXKATbcqY5xLYLsGouCmrqgcwXIdiuQdcT7HAmt2smmB9H0EKZANjuC50aI2rqgQ tjiBFOaWKEuWA1qPw9n15RnjUt7A/cKnF1aGrjXwNk1QfYLCLORzMLGG75DDfZbXjtoe 0g/NpBx2sHna8fQF4/gL9 gHjjAPXGAerNA9ybB7g3D4hvHpDePCC9ecDz5gHPmwe8bx54 4nf1YK1gte3n/id542XpDdekt54SXzjJe6Nl7g3XqLeeIl6/SXi9ZewP7/k/PNLjj /ZH/1ZejVl8FXX7a8 jI1oN14w3fCqSK8DGG/flUildM7eAMimlHJgrtB0gtRPjvttzN Jxtw8SEXH0IFGRVCmCDjouIwLoUJKYyLMibKKB9C RAmyJi4xELFIZQPoXwQ5QIuLuDiAigfRAUZE8OEO0p647QvyQTSTCBN 1OUN0G447gYc6mEDcBEACbLpso3iABMBR10yMnITi7s4qOYFCM8CcqbpLxJwhPDpQgqyggXdNBe iHCDmGBFeSvKW1EBxITqry7e6uItLr6yVwEuiIsgLoG4BBJu1bgE4tIydFYZLYG4G6J8dibo5MM uMYZ7kqQ/QwfzjFxg5AIrl7iwajZcYsMlRvUCrWRbJc qYXbB6S85fCXIUwI9Rau7aJaKRqloEIp6oTjPF2a5wixTmGUK00xhismrpvOTVH6Syk9QKmTH1R ibGytztpJeKyXsEJYaQquu4rWuhC2PdNVwttehErZ3MWGj3XBE5aytStguUHXnJeSsdTFnF08ws Cu1bEJb38kqnB3Bc0pjMLZMkq3h7MqQXVOk/fx59rKWs5d2 Gu1nL0oyEYyCxu ezXZ12M6 ILl4AvgwReggy/Ah/bbD 13HdqPvbKfeGU/2bSfbdrPNu0XmvaLTfvFpv3uGr/12L9vv3d3tKzt9 5 67F/V3YpBwtN 9mmfWzTPqJpH/HKPuyVfa5D 2H9sGH9tkOPm89 Lz54PPGg88TfT3rv3v1yoTN5AxO3uSSLJjbintshAemvHbG8f4GoKoXp3EhpOCVkMI1lnFRnjux BQAAYOPZOVHGJRmXZFyUcaHqWs5ifBDjAxgfxIQQLoZxKUJ6YpQvzviTbCDNBtKMP0V7E5Q7Tkg xjI8gjOyggnYyoNhBBRxUwK5AlvDbqYCTDjlZ2cWHUSGKS3HCk6B9KdqXpDxxwh3BpDDKB53G1l 8AwFM9og0TbJhgwwVb94sA8GIbZn7nzuq7/NmHZivKWzHeigkgZnl3HQCs 3QUl2yqR56sOSW/7xasKG9RiSxYUcGKCTZcgimfgwkgvIxKMdyTICdeAwDghekCFy5w4aJK2EjVZdQu0OEFSkmyoQU sWHIpnayvZFdncRUtbqWNLeh5ZaSrMMvVZFgFr4prSthxKjdOKSVsVikHqoTF1QA7pEBW4awrNe hKDbiSA4jqesiqnO1zKoSN9zpiFc5WINsDqa4E2C5bpEsZ7AIvwNmOCmfXPva1QpKt1LKJPmdCi yT7XalBV3qwDrL5UTI/Ri5TFyiQnTgvYS/tUNjn5 wFZhqssTRYxNm/EshGMgu3/v3/ZXr7ja51P9Ws/2nP p/2rf/p4PqfjG78ycTGf57eeOvsplt1m281bb7VsvlWcPOt8OZb7fVu2r59 727fWVtv3d30/btlb3w5lvBzbdaNv/YtPnHus0/ntn046mNPx7f E8jG/95YP0/963/Sc/6n2jW/6Rz3U Mb71 69//t3CqCLvzsDsH1xL2f19xVTKTM7lEMyZZcQ9IeiHSZ6d9Dsb5/gbgjuMIJoQwy9l1ALBvWGUrWW8CLO9dDN8woQZeuXIDF2VcDOFCEBdDhCgT7gjpjlLeOONLsIEU F0xzwTQbSDG JO1NkFIMFyIoKzvpoIMKOqigg1YJW MgwsgIF0aFCCZGCXec8iZpf4rxp2hfgvRECSmCCSGUc76/HvhFsw0iJIiQIEI8tw8Anhu24ZZ37wR /pEZRDmw 0UA2PDuLK8ieO7TnwMAAGw8Mi9BhGQjJBsx8hQAPNktgig//OEGANjwzgxvRXkrJlgxAcREEBNtuBumfA42gAhhTIoRniTlTzOhHCsXOLnAhYtcpMRHSnwtYSOV MLtAybZ9ALBvuqQQFgmUHL6S3VeyeUugp2SWiiapoBKWL8xyhRmuMMOqbK3ilc5NKFYIq6RXoo6 wZchmhvH0cIWzaGoQVfCaGnAlayFby1mtM9G3lLC1nIWrkNVASnqteilnL643aLcEFS9bFygPq6 mHbI893qsm2VS/Kz3gKidZPDuC50ZrIDtOFVXI0lXCVvyFcva8kw0W9wZr4uxKI2CfI8yuBNnLwdlIZuGWv/svhjdfa//ZLR0/v6Xr57d0//wW7c9/NHzHj8buuHnyjh9O3/nD XU/NKz7oWndDy3rfmhb90Ooxk3btm2/d7dYr 337m7atg1a90Pozh/a7vyB5c4fmO78geHOH8zd YOpO34w8YsfjP7ipqFf3Kz92c3dP/tR189 1PGzH7X/y48Mb7x6y9/9l3C6CHvysDIdvkrYK69OZvJmzG0lvDbSB9E O 13sAGEQz7YANx5woWJMiGizRuB9Scxyh1RTLsjlCdCeSKUO0LZzq0DtjaDYdIdJssHkO4IKYVJS SZEmZQUh0lJ3ajaHaE8UdoTY3xxNpBkA2k lOFDGS6QZvxJNcaKUYyPuJgQUjEdVOykg04miDAhFyeX8RqjPAnal2QCKSaQon0JyhsjPVFCkjE hOHN8M7C dZLy2CmPnRp7GgCe7nPDJHh0HfDzYxYIF6C5T38ObDwyJ0K4CJHSePNGYP9o z7gF802mHTDpBsiRp4CgKe6RRATQHT4SQB4slsAMdGGieWQ64ZJj532I1zIJUYwKUZ6k1QgzYRy XJmwClv5es4qhKXDJbqGsGiwhATUeQWQpwQql3tJBYNY0AuFeb4wxxVm2bqKoEzY/ASdn6CVBjY3VtMPjBHZESI7QmRGiAphM8PViQTpQTStQLaOs67kAJLUIkktomRYBbIJBbJ9jjJq 7bFeONYLq4TthqLdCmEVL4Xs0tLgcxN28cCXbTFka qCVL9LqWWrkK1LsjWcnahwllktZ89ztcLly7MXHARbzNnlps1 Ts5 YZCNZBZu R//1fSX1zp dmvXL27t/sWtvXfcqr3jx0N3/njszh9N3nnz9Lqb59ffbFh/s3nDzZYNN9s23AyV3XTXXdvv3c2Uteh2013boA032TbcbNlws3nDzYb1N8 tv3lq3c0Td948euePhu68RXvHLT13/Fjzix93/vzHHT 71fjmq7f8j/ qElaxO68S9h /8e1UNm8l/DYqANMBOxtyciGEl1HBdWwjsO5TjHBHSKh9PbC1BY4x3hgDd6wvf0xe30rQcHvlV DAHO2d21/59aVZyh2mRg8BwKH9LwEAsLUFiupPbS3v3toCxxgf8fFmYMPBV9VCYku3JZThgmnWqak87L7hKM ZjH1Yqiw3nZriwi5U1L6gb1p3AcClKumOkJ0F7k4w/xQbTbDDN JOML0F7Y6QnQkhhzNJ2B7D5A5MPYX1I/8sA8HIn43PS8HvrgV 0QA7KPdmyCVh/apLyOGiPg4bfWw/8Qet1aA8A61snaa d9qpc7pUgQoTw4acA4KleCep9CQBeeno/AACb3jP4Jj/eXDkB605RpDdFO7s3ANs/cRW4cMF87u7yznuOYwpkbeX3Aaw/21c9e1u0M8ES4i85/CVYGe/ylJSWQCGsrkzYGaYwxeQna03nJ6h8pX4tl7C5UTI3SipzCbIVwo5gmSFMxevQ8pxN9ruS/RXCVlwbZu3xXnuVsN1wrLtM2IqXclZF7aUi7PJjX0sgW9PJahXIoulBNDO4tC5QOVus4yz915tn V8XZFUbALPXDX59/BOxzcXZ1kI1kFm75 /9uPvJmx5bbNVtu795yu3br7QPbbh/advvYttsnt90 u 32 W23G7ffbt5 u/Xu22x33wbd/VPF2 /dTZS1/d7dTffes2gLdPdPbXffZrn7NtP22w3bb5/bdvvM1tsnt942tvW2oa23DWy9Tbvltu7Nt2k239ax Tbzu2/c8vf/PZwuqVdyegqwp0zY//PN76SyBZgJ2TnZwYcRIYyKUUyKEm68eVPln/u2jx0J1p/g/LoXAOCFyQTnT3COzg3Atk8cCdbRsQHY9ok9zvrITzYDG06TrC/O OafB4D94xF67BAAAMCBecYXY8abAKCp3xdnfHFj6zZgc6c5QB/fDADAXceRtIB0bwSAF6ezAtK9AQBemEyxviTjTVDueN8fAeCPc4QYJUT82EZg3Qls7sRWYOO5OT FCiDFCipOeBO1N0L4k40 xgbTaNgRTbECBbJz0xAgJPbYRuPMEggmh7hcB4MUplA 6eOcH1bp58wcmP8IGEDaADBwEgINdXBDhpp4BNn9gCjhZv5OZ AMA/EHrhUk33PcSALzUTnph7QEAAIDnJ5xswDlwEAC2fGAJY1IUt3WsA4D9E2mFsMddBW7mDQB4cyhc 5CMl87l7gK1ac8T2IgBsOOdWM6xcpMM1GTagErbSEljc6kW0ykjXHF Y5QrTbGGKUa2mVyo/rhCWyo1TuTFKibE1hMWzo3h2BM8Oqxk2M6RwFltM2AFXqr9M2IrrCKtkWHu81x7vUWcUxHrgWM8 SzmqWy7NLYux5a9mLml3QtRiysQpkK53sgCs9gGYGscwQnh0u1wXLNQbFcQWySzi7NtReUs6eb7 LB6md0LQ2z9Zy9iOlclwSy5 FsJLNw6z/8neXDo907N/Xu3KTduWlg56ahnRtHd26c2LVh6oF1sw u0z 4zvjgOusv11l/uc72y3VQ2U3376xcX9B0/2gVYJwAACAASURBVM5lt9h uc7yy3WWX64zPLBO9 C62QfXTT2wbuL DaM7Ngzt2DCwY6N2x8beHRu7d2y0fHDk1n/4u0i6BHsLlRirEvbrV12XzhUdQgwRY6gUx9xxwpMgvAnSR7VsBjacZli//gUA2HCG4YMpYfo1oF4vTqV4RLMBuOu4M8k5uzbU713fSihUHfAnWH9i4OVF935tKMgc3wJsaGOE UEYIcSe2ABvPcpa27cCWbnMwzQVSrD/F PT7F93vJR3pjutObgNe0lE1bGUCKTbAHN9SPuygkQ2kWH S8SdoX5zyxnQntwKbzs27Z/cBwL6RCC6GcdH10UbgzhMupW6 EwCeHZYxQe7 IwC8OI0JYVSQu18EgBenXXzIxU09U30Rm98z h2M36myOOTiQ5oXAeCPs5gUw91xwpvsexkAXjbRSI SYQf/tOhtvDk48yYAvDmojHTJJVouUmXCokoP6y/Z/SW40sO6y9cd8MV5rqjila3NrcoUgvwEqf46RuXHypAdJXJqgMWrrkB2GMsMYQpb0wNoegBNDaAK YcuQdVUIm9Q6E1qHarUlsMd7VFc5q0IWXjHMrjj29XkmGNR2BctDtloX1EJ2EM0MYtkhPDtM5Ea IJbVsDWdXguyXz9mLHQS7iDD7OSH7 cNsJLPw0//5D CpTwb2PjjwyM7BR3aO7tk59ujOyUd3Tu3dMbd3h27vDsNjO6yP32d9/D74iXvgJ 5xPHGP80JGnrgHeeIexxP3QE/cAz1xj Xx yyP3Wd4bIdu7465vTum9u6Y3LNzbM O0d07Bh/eMfDwjoFHHwBPfvzT//kPkXTJ7lUDbJWwV1x9fSZfcrlTmCeFe1OEL0360rQ/zQTYT7YAG9pYLpThXd0bge2fujLi9J8B4M/DckaUM4LiUFpANBuBu44jZdQiKT6Y4oJJLpBk/Ql24lUAeHUwkOSCqcGDAHDQwAfTfDDNh9J8KC2EmBNbgI1trBDKiPIiwma4YJoLpNmA8XkAeH48 xfhSjC9Zdor2JbUvKxxnlOjKBtX0yoUynNI2KONm/iTtS9LeBAV3rAe2tZxqAoAmrSdGemKkG2/eBKw7iRPuKOHGj6m35/YtgiFwqFuKoOLMMwDwzJA6qxfhQggXQob BACHNGLYJUa6/wgAf5zH3XHCkyS9qb6XAeCgiUZ61gPbP3HlB/4EAH ysuECKxdVz7wJAG8OyCUmVKLlIikXlZGu56bVEtapENZbAj0lq0JYsWgoT9VSrpGdLPetVVO5MT XGKpDNjZG5MSI3SuRGVGdHiMWEHcIyg2XCVqxyFkn1I6lqhnUmq22sQ3WvQykKasJsLWFrOLskx panGVwqwi7l7EpJ1lHfyZbrgiEsO4Tnhom6WnZ82bpgySDY56kOvgTOrjDNwFJD2EWQvbSc/TyQjWQWtlx1haWzc/KFp8ee2jv21N6ppx devrRuacf1T2zx/TcHstze8Dn9kD7H4H3P4I8/wjywiPoWoy88Ijz Ueg/Y9A x8Bn9tjeW6P6bk9umf2zD316NRTe6ae2jP25KNjTz46 fxTlo6OLVddoRC2DNmCStgrr7khky9hvgzuy5D DBXI0sEsE8yyIe74FmDDWZ6Xc4KcHT4EAIfMUtj8RwAADpnFcFYMZ0U5K8oZ0dW9Edh AskIIfbEFgDYorGE0nwwzQdTXDDFTb0GAK8NBtN8KCNM/xkAgBenM0IoK4QyQki9y8Y2VpAzgkLYNo5HejYAwIYzLBfMcIEMF0gPHAQA4LWBQFqZzsX608rM WSaQMp65C9isMSrbg2k2mClbwWuaUQjrT9K BOWlWpTq44CO8iUoX4Lyki2bgHWnSNITJ6GOdQCwbyxOjjUBQFOvJ0544oQnrnzef240hklzzwL As8MRlxB2CbJ60drwIQB4pVuKYlIMG2kCAOC5sQTuSeJ2zToA2D RoZw964HtLUiemXoDAID90wUmlGdCBTpUoEPW/QAA/AmkQkUyVCRDRSJoew4AnpsqXz7rK8FedZjL6i6ZpaJRLOqEwjyfn2Vy03RukspOENnK9IAxIlOe M5AbJbMVsI7WIHVpdB3E0oPLpdcBl8LWcj/gTPU7U/3OZL8j2e9I9jmTfcp4l0rYKmRru4KljYFmuU62Nsyu0BWELnoKV8dykO2pqQuqnayrHrJ4boTIj ywa 6Lq64KVUXuJp9Ce57rbVZazFxFm3ctzdq2lweWAbCSzcPCBXR /8idH2yn96wfn/vTc3IGnDQeeNh982vKnp6FDT0OHnnIcesr56lOuV5/EXnsSf 0/6LKpVRh/7T/w1550vfqk89WnHIeegg49BR162vKnp80HnzYceHrupafmDj6r//PLjjMnP37lTwcf2FUhrOIyYb/9vUy hPtyhD9HBnJUIEcHc0wox4WE41uAjWcFIZwXwnkR7d0IAH czUuzr9ckuz8Py1nB1bMR2H7ClRHkjODq3ljdu/04kuanXgOAPw/JWUHOCnJ2uPaT8p9MClU3nGH5YJpTGoMzDBdIs5PVOuKFqTQbNL5Qc78XJtOmM3dVqoYqeZXptB X7U7TCVn S9iUpX4LyJvSt2wAA2D eoHxJypekfFRLdWgKWNdKkd5k7wEAOKAnvAnCmyA8CdyT6HkJAF7S4W7dcwDw7EgUFaOoGEHFCC pG0eFXAOCVbimGSnFUis e3FbzaAzhSxOOnvXA9hZnjgrktAdr3sZBMxnIkc6edZXjz0hYoDhz5m4AAIDNfZO IuwtQso6W8q6BFJRLxTmOQWv2QkiM4anR9HUMJIYQhLDruQwmhrGUsPKUgN4ZgTPjGLKhVuZESw 7jGXLl28pZWtq0JWudWXagLoWQWUCrFIIOBMKXvucyT5nUutIah3J8xF2aV0ALaplo2uvCy7y4t pVdLLJ rqgLsmOkPnR6tjXEs4y9V5LpL04zs6sMNlg2Ty7ytLgfNO51h5mv4A5Bkx4gRACm6675v3nn7P0 93Hjw9xwHzfcJw73ScN90mifd6zHN97jG 8JjPcEx3tC4z1y2aFVOzCuPoh3rEca7ZOG 8ThPuWJuPFhi7b3/eef23TdNYTgp XiioTFfFnCnyP9KmHpYI4J5Vk5x8l5IZwXw pPMZwTFMuKs7yc4UMZXg2tmapDGV7Oll0 vnrHHC/nlPtW58D6y2Gz6pTSrjK13KxjaJpRpr7WuIzOBOVNkN4E6U0QlTTqiRHuGOFWfk2oDC2TVDFe5z juiWPuOOaOY1Ick KoFHNJMZdYs8aNGEWEGCJEnUJlyZuYS4qj7gTqSWHeFA53rwO2H3NkcX W8Odwfw735XBfFvNmMU8G82ZRbxbz5lBfHvUXXN6C05t3eIt2TwHyFEB3AZQKFqlgFgtGsWAQij q MMvkpsjMBJEeQ5NDSHzQHtVCshaStfZwvyM64IgPOOODSHwISQwiycHyCgPlpQhrViOsrupSnui 6eNVXZW5AtBeK9kLRXoVHcLzPHu91xPvsiT5HUqky67qCKmdXqAsWjX0tuh7hAnXBxS9fUDtPVu FsLWSrFyMgNQNfSyA7uhrCfv7qYO159nyTui6qNKjj7ApJ9iKmGVzaMIv7c1Io9c6vdj1y4zWbv vWPm771j5uv trWq7 7Zor7vrOldu/c Xd137znuu de93r7rv qt2XH/1juuv3nX91buuv/r G66 /4ar77 /PP6q3deX/ercvB9119133evuve6b9197Te3f fKu75z5bZrrth69dc3X/U15ekeufGad361SwwlMV/W4SvavcWlhL0hnS h3gzmzeC DO7PkIEM5c/QgQwTzLLBLBvKcaEcL f4UIWYWS6U4YKKleSocpANpFl1e1a9l5zj5Twv5/lwng/n1dtyjpNzXDCjfIqn/QoQ46QnRtSY9CRIb4LyJil/kvbVYZT2Jyl/kvIlKW S8iYob4JUERkn3DHcHcOlGCbFMCmKSVFUUiOnsjANKkZQ5UO9FMOkMkDdccwdQ6U6KyuHucQYoq 4fFnXyyjphFYcdfNjBR xcGOZkmJVhVoa5sIOPOoSYU4w7peTMqbsA4M/d3gzqzaCejMuTcbnTiJR2SimHmHSIKaeYckhZh5RxuLN2KQuJOUjM2YScVchZ LyJzxv4vJ7P6/n8PFeYZfLTVHYST4 64sOOSD8U6rP6NSZPl9HTZfZprIEeW7DXJvdC4V4o3GePaO0RLRzV2hVHtHCkD470VmyP9KnLYk V6oHCPTe6xyRqbrLHKGmtIYw1prEGNJdhpCXZag11WuQsMd9siPeWVq/rsid4KZMuNQX2YjdfWBd3L1gUrX49wyS73WjLBoLMOstWFuPqcNdcjoOmVIDtKFccWdbKrRu1Fc Hb163Wtvpw9/xpdy5Sz7otsDC43ZNnwQiSzZkfLPu9hpdrjy1vqnS5F0iU2XHL4iortvmIdYa 45vp0vugUk04pibiTLncKdacwTxL3pghvivSlKH aDqTpQIYJZJamyGpm9CYoX5L2pehAmglkmFCGDeU4Oa Ylwtlq1u4UI4JZGh/ivImSU8cl2KYGHHxsuoKCsUo5o7h7jiu5lCVpJWAibvjmDuOSjFUjKFi1CVGXHwE4cNOXnbyspO TnZzs4EJ2NmRnQnYmaGdCDi7k4GQnH3HyEUSIOIUIIkSdQsQpRJSNDj5i5yJ2LmznwnZOtnMyzI VhLgxzMsTKECvbGNnGhGosg1TISgUqSx1a6ZCNidgGX1E /v9hNI24004p7RDTdjFl55MQl7SxcSsTs9JxKxMH2YSVTVrZlJVNmZmUkUkZmJSeSeuYtI7OzFPZ OTo3x Rmmfw0nVPwOuQIa6Fgj8XboRfPzbFnZpi2Oe6cTugwSB1GT4fJ12X2acx jSWgsQQ01oDG4tdY/J1ld6kOdFkDXZZAl9nfYfZ1mHwdRm 7wdtu8JzTu8/p3GdVS2d17nMGT7vJ32EJdoFyNxTpgWMKkvocyT5HcjFhK16Gs0uKggvMLrhMyxcsXrdbheySqb LLQFYNs0s4uyxhLxFnl8 z5 XsxZezX16YvSQTuVbjyrfRrOVepeXtKzl9RWcFsrWE/fpV303lijY2CnERiIvCXNTORx18xKkuBat84I1h7himZEP1thr6MCmGSlFUjKqp0K0sQpgi/WkqkGWCOSaUL7vAyJXbeSqYJf0p3JNApZirvMYgRPlspNdG WyUH6L8MB2AmaCdDTk42cGHnXwE4SNVFHJhBxd2KARkZZgJwUwQooM2ym8j/VbCZyW8VsJjxT0W3GPG3GbMbUbdZkxZP8xnJf0gFQSpgLreKxW0UgErGbCSfgvhtxB M Ez4T4T7jNhlRteI Y1oJ4ae/WoV496dS6PDpHmnNKcU9IhHh3q1WMBIxE0U2ErE1O mAfkklY2YWXiZipmJCJ6NDyHhOaQ0LxLnkcj83hkHovOYdEZNDqDRKdc0SlXdAqNT6KJSTw1SaS niMwUlZskM2NocsgR6bcFNGZ3p447M0N9Oo6eGHWdHEdPThCt01TrDHN6lj0zy56Z5drm LPz/Nk5vm1OaJsXzs4LbfN82zzXNse3zQttOuGsTmzTiW3zwpk5/swsd3qWbZ1hWqfpk5PUyQnF5KcT5MlJqnWGPT0ntund7UZ/lyWksUV64Xi5JUhqlx34Wi7MLjd/a7m64LyQvXTryS5et7t gkE1yQ6vDNmx89cFl6SivejeYAXOLi0NVv8tNX djcHngexaOLsKwvqKdm9RJezXvnVtMlswEUEzGTCTQQsZsBABC G3kgGwvEqsnQ3BbMiuWnawsoNTbWfl8vaQkws71RYygbpTuDdN LNEIEsGclQgTwUKVKBABvJkIEcGsrg/g3oSiBhzcGGYCYKkz4K5jS7B4OQNiGBABKNLMqGSGVNWaPWDVGCxyYCV9FsJnwX3KUtomzCPEZU MLknvFHQOYd7OKZ6D2VnFEDMLs3N2bt4h6JyiziXpEEmv/EQknVPSOaV5pzjnFGcdwqxdmIa5aYibhrkZmJ B WmYn4K4KYibtLGTNnYS4iYhbhLmJyF wsaOg y4lRkHmXGIm4KFKYd7xumbR4N6ImJi4kYmYaBieiKqwyNzLnnGGZyE/WOgd9TqHQU9Y6BvHAqMQf5RW2AY9A9Z/YPWwBAYGrKFh6DIsCM24kqMoelJPD2Op4adsX441GP1dun5MzPUp2Ouj4fsx/rBlgHo4yH78RHnJyPIJ6Ou46OuE6PoCeXnGHZiHDsxjpeNnRjHP53AP50gTk6SJyfJTyeIE P4iTH0 Cjy8ZCzZdDZPOhoHrA3D9iPDdg/GrAfG3R8PIqdmKBOzXBndO5zRn nNdQDqROelA/Xii9YFyydwnXxdcHnI wKEwzKdUG5k63Ok12mk1UJO0aXxldD2LVH2tVwdjWTulZ5GdiqRsBW3RhckLN/PZBd4x3LXwflKzl8RWeNK3VB Zqub3w7mc6rKczl1iFuHSLpnZIeEQ0utxHzKF8EYMK9Zsxjxj1m3GMhvOrK0wrg1CWoAyAVtDFh mAvb ZhDjDulpMuTQr0Z1JtF/Tmsxqgv6/KkHGLczkVsTMhC Ewut97Bz9qYGZCaAelZG6PQcN7O6xyC3ikpXwCjd7kNLo/B5dG73HqXpEckHSLOO4R5hzBvF2btwizEToH0pIWcMBMTZmLcTIybiTETPmbCRo3YqBEbNeFjZm LcQk6CzCJPgMwEyIxbmTELNWomho34sAEb1KODemxQjw0Z8EEDPqjHBvRov87Vr3P169EBPT5oI Ab0xIAe79fjWh2m1WMDRnLQzAxb FGbOG73TbuCs3hkjojNopFpJDzpCI1DgRGLd8Do7tMJvbN87xzfOy/26sRevbt7XuyeF7vmhK45UaPzdBt8PaZAHxgagKNDzuQImhpFkwPOSJ8toDG52 fZ1kns LD9oz7rBz3GD3vNH/ZZP9RaP oHFR/Tgh/1gR9pwY/6bcf6oWMD8EcD8LEB NigvXnQ3jxobxlytAw7W4adLUP25n74mNb2UR/4QY/l/W7zexrT0S7j0S7jkS7Du52Go93mD7RQy7Dr Dh1aoZv07s7zMFuKNJrT6xE2EUDX0tncS0m7DLzZJfM31ppCtfFdwVLv7O2PFW23MnWD3xlK1O4 ajvZSpJVvKo8 0Vx9iLK2fNN55IuANkvpTH4PJB1rp2wyLJhtpxknbWE/ccrr4mnc9N2YcYuzNqFGZifgblpiJ22MbMQNwtzc3Z 3sHP2fk5mJuzc3N2bt7B65yCzinqEUm1S9KjbiPmM EBCxWyMmGQjUJ83C4kHVLa4U473BmnJ4t4s4gn6/RknZ6MQ0rDfMzKhM1EQO9yzzmEaRszYcLGDOiYERsz4WMmfNxMTlrpKSszbWOnIXYa4mZgfsbOz 9j5aZibhtgpGzMFMlMgM2llJqzMuIUeNRHDBmxI5xqYd/bPOfrnHP2zjv5Zh3bGrp2x983YtTP2/jnHwDwyoEcH9JhCzwE91l xDtXOufpmnT3TDs0UrJmENJOQZhLWTNk1k/bOCahjHGwfs7aPgR0TUMekvXPK0Tnl6JhUf3ZMOTQzru55vEdPaU3coFUatfvGkdAEEh5zhEbhw JDV129yd88LXdPs2TGybZRoG6PaRsmz4/SZMfrMGH16jD41Qp0epU9PcGenpfY5T5cx0GsN98OxYVdy2JUYcIR7rf5Oo3h2jj457vp4EPqg2 3C0c/69Lt17GsP73cb3u41Hu/RHO/VHO3RHO3VHu/RHNYajGuNRjfG9btP7Peb3e8zv91o 6LN qAU/0oIf9FpVpHYajnTo3m2ff fc3NtnZ98 O/tW28xbZ2b cmbm7bNzRzTmD7RwyzB6YpJunRPbjX6NLaLOJ3UkawibXEzYFTrZFZcvWELYVXWyFz32texFX4u vR0jXXo9QB9nlwuw4XRr/kvLsSv3sWmd0rWpBg4sd/lp9mL24iVxfQJhFLsTZytpa18TTuSmIn4b4KYibBJkJKzNhoSYs5ISFmgTpSZCeAukpkJq0UhNW asJKTYLUpI2egthpmFN4N2MX5hziPOLRo14DHjCSITMVNtNR5ftfbUISElKwlLG7M3Z3VjEspkA 2aqJkA 7XIe5pmJuwUCMGbEiHDOmQIb1rSI8OG7BRAzFqJMbM1LiFHrdS41ZatYUaM1OjZmrURI2YqBETO WIihw3EgA7Vzjr7pu09k1DPJNQ9adNM2LomwK4JsGvC2jlu7ZoAuyYgzSTcPWXvmXZ0Tzt6Zhw9 M87uaUf3jEMzbddM2Tsn7O3jtnNjYNuwuW3YdGbI1DZsbhs2nx4ynx40nRownuw3nBwwnBwwnho ynx62nh6xnR4BT4/YTo/azozBZycc56bQ9hmiS0f3GAWtxTMEB4fsoQHQrzV7ew3urnn 3CRzepQ83o8e1yKfaNHj/egn/ejxfuzjAbxFi3/cj37Sj58YZk6N820z7nadX2MO9cGxISQ55Exo7eFuq7/DKJ6dYz4dd7UMQu93G450zh/pnD/aqTvaqT/aqXu3Y/6d9rl3zs0cPjdz NzsO 1z73TMv9Ohe7dTd0SjP9ptfK/H9J7G J7GVI6rhiMdunfPzR0 O/NW28xfTk 9eXryzdbJN1on3zg18Ubr5FttM 92Gj/og5qHXScmqNY54dxSwiIrcTaxmLDnW75gucu91rSq7ApIbVcXi1l dsF5psrWJNkyZNUra1esCxTCVnwRnD0Palcz32DN5ezaR8CWhexlWsrgi4TsxdUFSxuDesLauCm Im4TYCZAdt9LjZnLcQo5byDELNW6hxi30mIUcNZOjZmLUhI9ZyDELNWalx63MBMhOgOykjZuG Rm7OIt45l0 HRbQEyEjIRupiImOWti4lU CfAoU0qCYtolpSMyAQsrCxkxkWIf555zuKRs/ZqGG9OjgPDI4jwzqXAPz6KAOHdJjQwZi2EgOm6lhMzVipoZNpGojMVT2oIEYMpADerxvDumZtms mbJ1j1s4xa8eotX3Ucm7UcnbYrHrEcm7Uem7Uem4M7BiH2sehjgmofQLumIDbJ D2cbh9Ajo7ZmsbBVuHracGTKcGDCf7jYo/7Tec6NN/0jv/cc9cS8/cJ336j/sMx/vNJwYsJwYtJwYtnw5ZTw7bWkftp8eRM1P4uTmqU891myWt1d8PBnrMPo1Bap8T2ia51lHqxCDW3 OP8sMv kcbxUY/zox7ko27kox7kox7kw26kuQ/7ZJD dIxrnZbO6nxdJrkXig44k4NIUguHe6yBTqP73Bx7ahL7ZMj YZ/5PY3hva6yO/VHOubfOTd7 OzM4bPTh8/NKpB9t0N3pEt3pEt/VGN8r9v4XrfpPY3pPY1Rwevhc3Nvt02/dWZKwesbrZNvtE682Tr5xumpN1sn32qbfbfL IEWbh5GT0zSp fEdpNC2ESZsCmtuv6WitpayJ5nquyisa/lLve6NMsXrLDa4XmWL4ipk9LKnWwlyQ5Vly84L2TrUfsF5Nk1TDZYdWmw9CtqPk8z 1cO2YtyLWFLDp8aY6stQSKdm4aFKVicgsVJiJ8AWdotC74I74vwvoigOsx7w7xPteAP8/6I4I8I/qjgj4qBqBiMicG4FEq4Q0mPnPTIKY c8shpTzjtDWd80aw/lvPH8v5Y3h8r GMFfyzvi2a94YxHTrlDCTEYF/xRzhvmPDJbdZjzlu2LcL4w56vZ4g2zi wJ026ZkkKkGCSFACEECN6P15qruS0EahxcZIwPYJwfZX0u1udivS7G52J9CONFaI T9jgoj4PyOGmPk/Y6GV/ZfifrR7iAiwspX1mGS2HcEyO9cUqZvetNEJ447o5hYtTFh52sbKdCMBmEyRBMBWEqaCcVh yUbKfDTjbiEmKomMDdKdKXpgJZNpRjQ3kmmKH9KdKXJNwxTIwgfMjJBuy0r2rKB5NeiPRAhNtGu G2EGyIVe2DKC1Pe2oNhygdRXoj02HA3iEnKOuIgJoKYpH6DDu4GcbeN9MCUz8Eq344Txdxxwpei Alk6mGMUVyeN5JhQjgmql64scVYxpTiw2GTVGdJ/fqdJX52JCzhV9jJ7SV a9KerDx7IqC9JfcHV98jKeVYusHKBDVe t6LIh4t8RHF18V9BcfQyWqx1bHlLK9i9kuMlzxJ7a50oeRMlX8Xxmttl xMLKzmQvICDF 3UpXHowseUgqlS7RZ/cnFjkM5/pq4Pm0jnZxHPHOKdQzyzTjfri73/cevm 3fXeefuTTsf2bTj4Y07Ht6085FNOx/ZtHP35vt3b961Z8uuPVt2Pbr1gb3b/vU3d/3r43c99MT2X/373b/67d2/ u09//a7e379H/c /Psdu5/a egf7t/7zK69z 76zbMP/Oa5XXufvf/RP zY/dR9D// nl//7u5fPXHXvz629YG9yqNV/cDerQ/s3fqg4t9sK3vrg78pbyxv/9fHtj34my0P7N2ya8 mnbs37Xhk446HN 54eON9v1a949fqlh01r// PZuVZ3zg0S3qE/1m64N7tz6wd8uuR7fs2rP4PNy/u/z2Hym//eodlTOw/aEn7v7Vb /59e/uffj3Ox55aueep 9/9Jn7H31m5 4/7Hjk6Xt//eQ9v/r99l/ btuD/75l1 Ob739s084lvv/xzbse3/rgv2/75e 2/ r39/z6yXsffnrH7j/c/ gz9 99Zueep3fsfvK h39/z69/u73uvO3ZsmvP5l17Nt /u YMqO9aecubav6TqQerxz yccevN9z3bxvu/bcN9/1acd252rVn64O/ueuXj2//1W/v fV/3PfIkzv2PL1r77O7fvPcA48998Bj x58bN Djzfc8H9Sf9LWvQiy6cJn5dlamYIeD qJoB4P6rCAW07d9a PRRtqqKGGGlqdHnx8XzBVqQuKjgphv37Vdcls0URH//vuyQAAIABJREFUK/ZGMvf822 /7BfcUEMNNfQ3owcf3xdMLZdhr7jm lSuBPJJkE CQtLKJ32x3H2PPPllv CGGmqoob8ZlQm7sJiwV377hnR AZayFQfihZ2P/uHLfsENNdRQQ38zWpGw3/jO99L5BbunYPcU7N6C3VMIJoq79j77Zb/ghhpqqKG/GdUQVuVshbDfT cXnN7q5bTBZOmB3zz3Zb/ghhpqqKG/GZVHuqqQVQn7ze98P134rLagDaZKDzy278t wQ011FBDfzNakmErhL32xkzhs9pVvIKphQcfbxC2oYYaami1WiVhS4h/IdQgbEMNNdTQWrQawpacDcI21FBDDa1dDcI21FBDl0sPf9V1wTOwhh62QdiGGmpoTXr44Yc/ 4pq7969l4KwgQXVDcI21FBDa5RCWPErp PHj196wn4RcwnApptuagJXs32lIy9O7Q8pX/76UPulesSGGmqoStgv 4VcYl1iwjoDC861ERZsugkA1kRAhZiXkLBg001ARec/tP2htb3WhhpqaFVqEPbChHWWvQbCgk033fTQQxcRMi8tYSsHgE03nSeenn9vQw01dLFqEPYChHV eFGEVuFWTYR3C2h8CHmqvi5g3NYGLM xyex966KYlx0drD60nbh2C1SeNLnN8uSBQNizaCzbddFNT00Pl/mDFvbUNQ/UB699nzcmo3QA23dRI0A19RdUg7PkIm75IwpbZVvPhu0q4GtapUras1BJU9tYSqnpkPTpr71v7a/WVLHd89cgle8Gmm rQufJe9SkW5eFl71K5R4XaDcI29NXUZSVsbRFYpUPtv/rLNrLypRK2DliLEdv UHnLotOziLDL7q08PvBQew3jalRzPpc5/YvK2ZpkuvRJlb2Ln/e8e5f hVjm6ZSE2yglGvpPoctH2Ppk0v4QUE44X8hHw8swlyCw2tlai6hSA9SH2iuArX3/tWyqcnO5vdUnqCHsSqex7lyvkHOXHnmetnc1e8 To vU4GxD/yl02Qi7ZHR6JYBcHq2JsKHUQu2FBZnPSdi6j8k15wFsuumhh8oJtgY9dZ/6l3CqvhMob6m0CtH2h1YC1eLPC8pRyx1fF7rr9y4uc1feq95e2hIsvstDdX86Gi1BQ19lXS7CLp Nd2h9Sg9dNX8A/qC TsPXvvB6x9exVQ64y6aCercvsXZSKV oTKs9c/9 gOn3sPA 19NHO86l/abJe8noWjegB5T8JdS 2QdiGvrr6EggL3NTUdNmnX36ZhG2ooYYaUvTltASXfwbmpSNscKHiVRIWWE6X4k011FBDf2P60k a6LvNnwzUTtiaqrkDYRoZtqKGG1qgvbLaWGliXDJxcJsheUsI2WoKGGmrootS44uAChEUDC4pdD cI21FBDa1SDsAphXYGqG4RtqKGGLo0ahL0wYSs7GoRtqKGG1qQGYS9AWFeDsA011NDFqkHYSg97 gZYADSzIDcI21FBDa5FC2ONfRV1EhlVAWk/Y4ELFDcI21FBDa9LDDz 896urNRA2qBoNNgjbUEMNXSJdrq94/avRBc9ANcOWIVtHWCy4UHGDsA011FBDa9KDj TU9WudXGGbRC2oYYaauiitZiwi3pYPLhQcbhB2IYaaqihtUghLBaoukHYhhpqqKFLI5WwNWVAPW FDCxWH0w3CNtRQQ2vQZ19p7d2794Jn4HyEzRY I0ILFTcI21BDDa1Jn332mfgVlTIl9oJn4MHH94VTC7VlQF2GVdi6pgz7ZU8Ebqihr7g yzS0G/L0KffRUv6FJ0/HMT9vvZwmfk2jOs8sQNNdTQ5ZAoig3C/jVoDYRNL9SWAdlawhKhBUJW/f z92bdbRznwi7 wrk5F d8245sKx5kJ7a8wgt9 QNJPNuyZcu0YUuCJiZO7Di2dJPvOxfhWud4760ktmTNFEVKJMF5AClSMynOBIh5JjiBxDzPIIhz 0QOqJ6AxkQT4PquWBDa6q6qbwMPq6qq38jLstnaPAEBlEIvFVlZW1tfX3W63F8Hn82H/kvj9/kAg4HA4wLA7hGIN xzRhjW68VSAYfnc7wDArgUMW7nka1gjkShtWBNhWFOhhs3y8SqLYY3nDhw4Zyx9vttH9Z0RQACG 3R5YlqrNm7wMS rVRDese9Pk2TS5N03uTW 0ZIYVCASUdykSMZ47cOCcpFCt0HxkPHcAWZBRJMk/B a7lDUeeWVJPz6vU8Pqw9 z5J6g5h0PGDY3YqGAvhpX0Wy9Yd2ZpmoMHa1ldm aPXjylqgNi10r6ruIDIr0AtOw5I8lMU4JqicS5ZVFviWCWCsHMGx2pPU1qFbFwhIpdmsN643gjV QTi2EJvZrdhRsW8ykG dcoTfVvRgsS0YFzRvLnTJOR1o5j7iAgfuYyrESEtTjph3CWIhExW6qs/socTxRw4Nw5EUsLFztaIkIKPiASoQezb GsFeNckFMhTc5ZvcypUa5AXpIAigAMmxV2ESJLzNbUS/G96omWLuHgTNNXKEaPyRyylYY1uzMJMexGesGzSaaCewlIpaJ6TdNauIT 8P9JrRCSkohEkuwNUuzIbL0EDHmQh7CUgmxFYeklkIhQTxHaY s ICpHKtZ47gBZKywb1i0Zw3LUCrmAjF6CrNXDakK7AmzZA WAy7DBYDAcDgeDQfJrtRsNK62vyd4vIBYKhGJKQ1csFNTUS lHYvsRedbUS7fYsNFMT4DZsxnbIAwb30hbEMP6ijMsTa9peh8CabtMO8uIt9eI7zyrYVHlMfsr RzCWgrXvTZzO60IAfUvAfuehGIpe0pEAloHNLKFq1b0c2EYNnv1WK8zsFWwGjYQCITD4VdeeQWV 7C41LKsHkUasgKZLVoGi 2ON2q01rC 6iTZVS2/YNKP1SnsXQyI6cE6CC5ahHoGAVQ1oi4/VQfR8qI3ELKWUwbC05i/aGUJUIE/Dsp5LIYalXgHmWQPlgWlYTK9PPfXUb37zm8OHD5OS3Y2GJVqkFKT1NeRGpk 5DEvLZgcZ1ruJJ8ywpwt/0kXTa5r5HEyC9FwSdhCh/pBkbmZxt1CfkOVow5J3xIxD6KVk7yWg25PtNpzFsNQMGZXJsYW1l4B5Lmg5WXoJGH oRGx/c4ByQzMsptc9e/b87ne/O3PmzA8//PCPf/wDk yuNCzbky5EjrhsmYZl6SWgdjdsk2Exl8Zxw 7bH99IL3o2F72bFg9m2NSnp8/wLBj7AOU5HpbsSqTdvVLugPEficc45B74lmz9sJm R2om1FLYOhMKeNLFsg9lI9E pVWPWWFaU5RaK8a5ZE4w 5Mutl6CzHUGtgaaYcPh8MGDB7/77rurV692dnYODg4 ePBAIpGEw HdaVgf7RZfKPYhz7BqhEL2Niz1MOqTLkbHQqHkZVhMoYvezUXSsM/t2x/f2LR4UouelMWTsrg3fJHU4ZPf8ywY wDBnK4cZO9zAKod1jYsk13bht3J8DesP4q7lWrYl16LJTcXXMkF98aCe2PBlfRFNj458TeeBW/3R7dCAMPubmC0VuVSrGGfffHVWHJzwRk3uxJmZ8LsjHnDyUOiv/IseLs/ugBQAYBhK5e8DLvkzSTcsHte FUsmTLZo2ZH1GSPGu0RTyjx4ZE/8ywY wBBLwEAZAEMW7nkYdjY5pJvc5lIuGF/8cuXY4mUYT1oXA8Z14OGtaAnGHv/8zqeBWMfoG2I/MIT4tFOuYYmbf3N/taUCJ0YJQUMW7nkZVjMrSu zRXSsE8/91I0vqFf8emtfr3Vr1vxugPRdz7NnWOBkV otpOI2KYPlIzMtFX2nlABSkE14Kw5NimYXhu2QiTUea307On14zWAIZ8Ks457A8OWFDBs5cLfsI HY5oo/k3DD/sezL0bjSe2yG09Lbpc/8ubHx3gWjH2A EZ MVLjoRjPHThwoIzfZHRQaZmeNbFlgmuRul0iErCGgkEnwdIci84zyPi5yGrzvA5g2JKyGwybs6u wcuFv2FV/JiUww/6PZ56PxpPaRad2yaVdcmmXnC5/ I2PjuTMsaGAyC/oSH9MLue4w52co8ZVoQ32ZAYxoe QyUqAxFjJeINjTkGmqSggq4nkSyuV35SwzDQClhK5/gYgDXB0ByMaMgYZKky/COh8BrL LG9zt2GppRgpvw6kcc18F/1jwTiLXUksFpuZmWlvb79I5dKlS9i/JG1tbVKptOIMW871dHYEOa9Abd3ZYGzTGsgkwrB7no/Gk9olp27JqVtyapecbn/4Dx9 mTNHVsMKskd yYx7p05a5ZrIJEC/qMywJmgQE8YOaao7cvYSUCZKUcb9U3s18g5rkHmZ3bCU19w7Iy1byvwu8sJSDme0jPn3EtBKofw 6GGdAe5esCPWcdi2xWKy9vX11dTVCgA2AdbvdTqfb4XDa7Y61tfXFxaX5eUVHR0fFGRbADLsWyC TcsP/3nl9G40ndslO/7NKvuPTLxRqWptc0WwTuzMR4Fs maTuzvM7McuIIFsM5qQmBQ46YeNmdSO 65RP8hX4MtUlXkGG5zpRP9QrohzWyBWGg9RCzNMBFEhAsQSwWu3DhAunWQCDo8/u9Xt/KinVxcdm8sGgwmOUK1ejYhFKp/un8T2DYioM07HoQT4kU0obVr7gMK24seQKRNw4V0kuQzhn5hdk0LNywGBzBYoowLJYlp2F5ZsK3 c7OwXgJuw brU65zzG5YtIeYo2iJSCCSgGBxMMOSE7d8Pr/H43W53Gbzol5v0mj1SqVmcmr20aMn8/MKMGwlUlt3NhTbXA8QKWPYZ56PJZLGVY/J6jWteU1WrzcYfesTUc4cWQ2bzh75hevrzdVLQH3OQ sloAYx4dFLwHyQxCJHTAqUwK60sQ85brqzbGfreyjmSRfjTBnVY 0lyH4dGMakd5xQD8n0IbB1wkAXLAZp2FAo5PcHML3a7U69waRW6 Ry1dycfGJi5uHDMZlMDoatROiGDRCG/Y9nX4wlNhbWfRabf9EWWLQHfKHYu5 dypkjl2GZ8DYs5d4TfwiG7kne/KbT6AMcxu04e6sQfSBE3Z/MBjEU RKtEvURD9c4M3QXdh2zNMPp 3JmRasAS87Ud2n1z3EdkP5xZj6MiyngCsTD/svevYBhq57aurOh KYtmEm4YZ/euy eTC07Q8uu0LIrvOwK yOJD774U84cG2BO185hBz6x34FV2j7AsFUPZlh7MJOSKXxO1yuJZMrqiVo9sTVPbM0TC0aTHx79 OmeODRCXYEdAb5LuEKALFgUMW/XU1p0NxzftwU1HaNMR3HSQhn3mhV8lNjZtvrjNn8BSKLbx8fFvc YIhgUAnoBhqx7MsI4QnpwhwrDPvvhqcmPTHkg6AklHYMMR2AjHID4sAJQSMGzVU1t3NhxPOUObZ MIN 9xLryVTm85gyhnCUzieOnyqrGscAMDuAgxb9dTWnY3EU65QyhXexBJh2H37k6m0K5xyhVPucMod TkUSqU LWKcLRUCbNZtOp1kfhucY2M867ilX32OpHmWjj l3XG8nUBmQhsUGw7pcbofDabPZtVqDUqmRyRQzM9In41P3HzwGw1YotXVnI4kUIdJNN2nYvfv2b 6TSnsgmmaKJwteaRcHsSHs35xhPfKfc9mQLo0Lfp6SGBYBCwQwbCoUwvdrtjvV1u9W6rlSqZTL5 zKx0YmL68ej4vfuPwLAVSm3d2WhiExXpRopYa3YjlfZEUmSKJlKFGVaQM/ILn3lK6dxSI cYsDSBkckLmQYwbaisMRPWhAyGkhn2zzGaNPuCg eyDGoFdj2xWKylpWV1ddXvx2ZzuZxOl8PhNJsXDAaT3mDU6fQajU6l0kxNzTQ3N4NhK47aurPRR AoVKcWw3kiKTMUYVsAr8gsKY659mtFLwDWUHZ14xTr2Ht/IGjWGyEFAzYpaL7YMWXND5ilAgxdgEIvFJiYmWlpafjr/U/bU3Nw8MjJScYbd7gtcXnjG1sIMS4qUathoikxFGpam13Rhhs3iKYo6D5wz5jJslin2rC 45jLxnLAPhgUY7Ib4sCtVCv/4sNFEystlWF80RaZYskDDpnNGfilFLwFLA7dUhkU7ibPsA4YF8mSXGHa7a1EW8jIsKtKyGDadPf JLCZ50USOXYMZGtmXyz2xku6/PZU WfLL0EoBhgayAYSsX/oaNJbkN64 myFSkYZlkGa3FEs2EEomf0RFLVxjeKCaPQIcYZOaTsj2bYm3n0gOaoPlkfdIFhgWyAIatXAowLC ZSxLCbJTAszOkCAC7AsJVLXoZFRZoxbGozHYhtkimWzHs8LAAAWQDDVi75GHYTFenGJmW01qYXH 8a1WcBYAgAAsgCGxZHW1yDdf0Jx WtWNHk96fJENonxsMiMg1gybXRvGtybBtem3rXpiRQypwt6CQCACzAsjrS pqZeyny9g FvWE94U /c1Ls29a5Ng2szliQMG06kZ9dSs9bUjDU1Y03ZguV90rWlEI u8p5qhR5YcCblZmserMHju6IBw KgVhULBUIxtqVeSLRoM41c4kdsf2l9Dd7kldbXCMXojpkd0J9LBn/DrgdS06upmVVcpOEEYtiZ1dQ0kdYDJTOsgDZrFnsKT1v3imMtllKADL/lKIJ1TRbquF22eQ35VoNxIDmbjLmZS a5I aQ /GsJ3NP1mFzYNiiAcPiUHoJauql Baiu0AsFGQ8KhCKCQ37pPU1QqFQKPb5fGJhTb00I1yfWCgUE7vhR5bUsfwNuxZITa3gaXo1FUIN S p1qnSGxa5imj6nCxkGZTx34MCBMn570bGzbJpgH5zLPLCIxiuuRWrREpGANXBNMasiFli57IbNs hHIBzAsDrOXgKvfIKPYmnqpTywUirHGK96EFQvRjlxq925pO3jzMuwkadgVNsNOraamVlNrhRpW kDPyi/HcgQPnJMQXViIiljukxhDAW3HnyIgqtBUJGYNoWYepIlkJiDgv3A3VTPWMlAMPsEVIQCopYdaDA dVQmdA0rBOI2Q7JOheOPDVkQC8jag3SHidrzlZvzjYstRQj5VeDNK6Z76J/LHZv1AYwLA6lgSkWCoTiXIaV1tcIxZhm8ZeIPgnPlrNLtzDDTqGGDSXSpF4nV4oyrIBX5BckFgH lPpTadEMjqrDHWyHDrWDrb dazTt3e41wXLZpuLT2ZRYtshSUeZndsLRlrrh2Rlq2lElo5EWmHM5oGfPvJaCVQvnVMM6A9i5Zk V28dBcYFofWD0trw7L0Evh80nphDdkZKxQKhVjfghA/CDs cyClLEojl 01D/I17OQqYdg4YlhSr8UblqbXNFvkF6wphbd/6J5N03ZmeS3Alcq cDd9nitjB64tfAzLrCTlpNkUQtEq9RrRG6r5G5brrJkV43MFcvbDGhmhGGinxdJvi5/LLhYsGJaAcjtPfZZF34GUIGZi2kus9SoQkA 20JzpD8e2zrATK4RkVxmGxfRajGHTOSO/oLai6SBvw2IQni3AsJy9BHkaNueNL9/OzcJ6CbgNm69PmVv4GBbtIeYoWiISiCS7WbBg2AomX8OSkqX0EkwRep0ozrDp7JFfuL7SXL0E1G c7tF4CEeVrzaOXgPENR VAf9KVRy9BLnNkNyylu6PwJ12Ms2ZWjK2XgLlLVsNmumjY/nRl hCYv UduOD4FgKGJREwKHfdioS/Ya2B1PhKRrKIYePpSdSw/rKNh81hWMr9Jv4QDN2TcieeeWjDuAVnbwmiD4FYchVwyJ3ZsEUrSX3Qw7QIe/703GhNcvq nFmxFs1WT8azL8pFzNSa0reA9JUz82FcWAEZHIflLwqfpn41A4atXPIwrD9j2AlKPyxh2ImV1MR yylqQYWFO105hBz6x34FV2lrAsJVLfoZdzkiWblhMr MFGRbYGbA207efXd0Fm06nwbCVTN6GJSRLMSyp1/IZ9vWLaYFAMCsSwL/w7277FwxbueRl2CfLGcnSDTtehGH59BK8fjE9KxK8fjENCdKuSgLBrjBsTglULnkZ9gm7YQm9Pi nUsFlarw2EYQWCLTfsXbwOj 5u/zcN0u5Mu6ENe7LayXkFMMOOLWckSzEsqdcnS6U0rACZNfv6xfTsB4KldDq9kPnw/X0hnfakPxGnlzzpT8rw4X6UTjeI069fTL/OWoQ4vURUdUmaNassNSTfKuAskAqkyaryP7bgciFtYdoNbVgAN xSRrJ0w2JbxzDDni595JfXL6YF wVLnvQjD8V6ZbSDOL2UTv/9YqYsWkGPEKk9WiiilIJPAT0WrW25y4W0hWk3tGGB2rqzq1TDBlHDPiEasKOLG6v 1KcFGVaQNfLL61gb1pP uxRvMP59If1Iml6itmEfETlgbzUspNOYd5DmHqahT6TEz2RTjroDmVXak37kYWmrPmIzGnsFxJl 6kllhPQ8NZM4LmX2wo8h9KG1VVItUSz4izxTVLkeerOVidXt0F3 XWXp zWRIpUjQht0NYIYdXcpINmPYYDw9tpQaW9oYXdx4bEmu jYOn/4 Z46shhVwR355nWjDfoKpBHEHadgGD9JhKk4vIf2nj4jXn0jT6QVKi /vC m/M3e4yKYq6kf/75izkNYrZwXIepKSuouoH71bR4 6i/v0ES2fi0gR5I93kT8VTMMy8mQtt0GMVwx/QV5t7osAqdwJ2rC7AdKwpGRRw26OLm2MLiYfWxKPFhLL3uThU9/lzJHLsDS9MtuwnxBqe3SX0kaj98Zy ZFw6yOkucp u53LsHi6S3g2ZwUYTc4GMZvpshzFLILZtuWZA1e5bOZFyaMjAlIpErRhdwOoYTHJkobdH4xvPrY kHlsSDxcSD8yxJU/i45Pf5syRtR WqVfWNixdggUZFtsN92wxhiXy XuZDHuXw54Xqcdy/bUo3rDQbt3WtJVt2HQR8HliDnCBGfYxl2EfLiQeLsTvm6J3DSGLO/bR8W9y5sj1pEvAEfnldaQNm/n8Ze8loOqM1kvwiOhRbfCkG8Q8eglozTdxemmBXhZnBZi2ukvp/6X/taDmwDmkgZYh0uOc6WvOYljWchkvHsFgtW1NW9mGTafTKwXBc9QnwAVpWFKyuGGf27c/ENt8aI4/MEXvGkJ3dN4FV Sg6M85cyxkPOz HIZF75rxh2DonsRbtAdZ MMrxg40nWFdE iTLvJhURo1IGsF2O64/07LeYHTsOSw3HQ625Mu7NldgzjzEC9bnlzlsr5gLR3SlqQtbsMWNrcKDFsktXVnV/ypx4sZyVIMe98UvWsMDet8/RqXyRl6/ gfc bYsAvndBV/x32X8mAN0m5IW9 GzfcoHxi2aDDDPlrEJUs37D1jeFgfGNS6 1R2oyPw7pHTOXNs2IVxCfYLnvo/BCfzP/Z/7cn8 L 2/Szg3 qNSwCG3S5Iw5KSRQ2bGjEE7 h8AxpXj3LdYPe/82Xua52vYQFg1wKGrXrohl3MGPa1QCw1bAgO6bwDGme3Yk1v97/9RX6G5dNLAAC7FjBs1YMa9hGXYfvVzi6FVW/zv5O/YbN8vLbBsFwx9Usea59nhtUd47 6z64U7BDDCriXbAHDFglm2IeLGclSDasPDml9/WpXt2LNYPe/8 WpnDkWYdhyLtuUfR1A5qI12auRWaqGYzUuSg7c55W9oDwMJRGx78m6/Axjadvir3rOpRIBNnaCYcnPQJavc77FASS1dWdXfKmHixnJUvphh/WhIZ1/QO3uVdqNjsB7R py5li4YY3nDuArOpXrA823DZtVDcZzB1BhSUTZV rOel6lcBDuS7Z8siyhWKrSs2UFhs3FthuW9oeW6 ucb3EACW5YS0aytCdd4Tv64KDW26t2GZ2h94/ KWeOBRuWXBuWbTE9zA/UHzNNMcaahwfOGWk/ZlpVItEB6k70Nix6nARRE1Y1Nm1QsiXqRl3KmnJetDUEkcNFEvy9TCbGcwcOnDvH1halXzv61iz LgDM3GulnKmGcFPMSc1Ug69U J2L8AlneZdSnGlW9vYal38iwSRYMWyQ0wz6kGnbzrjEybAgP6QIDGq 5PDMOCIjvaObbRGt4MZfLpuqDsvw1Zirqj/g SO40t7L2EpDlYC9YW4PomtrYatmZHJjnhaynTasVuXA4KnO0zcylmpyGZV0Ti3YUy5lSTyqLsrk My7zarH8kMiVS7g4o9alGttGwrHplShYMWyS1dWeXMcNa2Ax7zxS7a4wO68NDusCCK/bR8a9z5ligYTNfUcIiOb/DlE8F9v1HG3nUH5k9g5grc/fD4t9v/L/cjUGyAUjLiu28uMplrRXzInBdHGrNGa 5jspypsRJ0a85928ny9VGd6O35bnrU41sey BD/phywxm2AeWjGQDFMOa4/dM8RFjbNgQsXjih04UGPmFFfRdmjDxm/WcrSSWXDk8W7hhsW842qBi7SVgN2yO89oyw/LrJ6WcaZY/GzkrwMewaBuZuT zPtUIGLbqIQ1LSpZm2MQ9U/yuKT5ijC16kp cLCR6IRfIu9R7b1xiOXsJqN884zkR n2V0H kfYfx7LgMSy9ZQDED7UkXrVeB2qXLOC9qP0jJDUvpHsnzSRd6psyTYl5zrqwYNadcbcYh9OvAce WrDzBs1ZPLsKbEXVMcS0ue5OFThUTg5iLzLsvtIb0FSHsyQvuR/P5nfqL9iPRpojtxuQw7mNrEytSP0jIlOhAp987sjTLivIiq4UMMijMsWjhxWWhNeAG7GFlyo2mP elJp5jXnuCLZrzZyOdivQ9YqVhNg2KoHNewDpmFHjPFhY3zYGBsutA1bDXO6cj7KrhoPoGe6E06 qagcR4OwEw/L5OhdwIIBBM wD0rDP7nvNH03d0YexNKQPWzzxj0/ LWeO1ReXIHdH4E6QUSmgnOkOOKlq7oJNp9Ng2F0Ap2GfeelVX3SjX Mb0Pj6Nb5 jc/siuYbgRsAgCyAYasezLD3LQzD7nnxV95Iskvh7FKxU9O6AAAgAElEQVQ4OhWODoXd4Ax9cOzPOX Oswl4CACgPYNiqhzQsKVncsL944RVPON4qXWmVrrRKl1vmlnQ237tlnTVbDDvglrbigWu45YBhq x5Owz79/MvuUKxp2tw0bb45ZboxZVSveQqIXpjl41XKyC887cC525YNC0JixrDPbWK RxtTS3 MXwg5h68CW8JWGjbnDSUXYNhiwA27kCIlixv2qef3uULR6xO66xPaa Oaq09USqvzjc9FOXMs3LDGc4VHfinSsMUUnReZODEsVYFALbuNLTPsyeLItziAhGbY 4hhX3KFoteeqK89UV15orw8plCsOv7w2dGcORZsWOwLzhn55dy5A0jQEKRhR44/pQYZobT9MhMJWNuAOYouMugM 9kzn5NDoJZdx5YZFtguMoYlJEs37FWKYY/lzLFQwxJfeq7IL5SpVJnJRZnJQrSJUmhJaOOQ5bufq2iW6WT5BJ1hKY61jwACtew6wLBVD8WwC6 n7zF6CaxPaq Pqq0/USqvzDWHZegky33kekV Yk0RZp43mmlNUSNG0bPH2YtagM wwG3oQqGXXAYateuiGXSCfdL3wsjscuzltvjltapw23pg0lPVJF81amXmu6B55GRZt0zGnpSLkV zRHJul0mjPoDMfpM0wEgVp2HWDYqofTsPhoLdlKi3S5ZQ4breV/78gfc ZYkGGpt GskV/oBmH0EqDz6ZlbMj2xtO8/j6JZegnyCTpjZNuREnsBArXsUsCwVQ LYWPIjIMOhaNDbu Q29vldoMjVK4I3Cz3m7QHRviTLrY7Vo4OAWZgEWQj5YlRzqKLDDqDwhysRbEpBGrZXYBhqx7MsP eYhsVmzfapvH0qb6/K26PympzRj47/NWeOMKdr64BALRUOGLbq4TTssy 96oumJJqgRBMc0AQHNMEFV/zjk/lF4AbKCgRqqXTAsFUPadh7DMO 5o mBjUhCZ7CFnci3 iFAABkAQxb9aCGvUdvw0Y2BpSBfqW/XxkYUAUWnPGPT QXvRB6CQAgC2DYqodm2HuZftgXf 2LJHtk7h6Zq0fm6pl3mx3RQ6K8 2GzfLy207DF31PvgLtyoNIBw1Y9nIbd88KvvKFE SaeGJNPLnWPrVuXA99eOQvOXMswrBFDPahDmrN3RuYlx9zjh4FgIIAw1Y9nIb9xS9f9gRjtx Zmx Ymh Ymh adSu 9z4vZ/RCY4kiv/BxXzGGLSAHAGCj5IatyTQzhGLae9L6mpp6afZvL7kPn50BHnAa9unnXnL5ow1DqmsSxdVBxbVBp crifPvwiZw5bl/kF2S8PTFaPvf EhF7sBb0cM42LD3WDADkRekNS2pRLBQUo8gSGXa7L3B54RN1jNOwTz37otMXvtg7d7F75ueu6Z 7ZxQm2xsfHcmZ4/ZFfqEOl8 5PyViC2swF2RSAJ84KYX9loBdTBkN6xMLBUKxtL6mpr5eKBAQr/H2KdrOZdkns0dNvbi hmwP563tdDq9UqXwjJzLadj/eOYFhzd0vmPix7axf7eO/bttTKa3/u4DYc4cd0TkF Yse5aoBRxzn9BpTszDufKHkaBA/pTPsNL6GkFNvVRaX0P2F D2FAuJLVLMnSz7UNuwYiH NvmCN lC11bY RRv2Ocd3tCP4rF/tTz Z8vjf7Y8lulXf/f 5zwLxj5A2xP5BWuQ8thfQoqRdYo9GBYoM2Xsh2WKEntN24K2bX1c/bC4WfMXLBg2Vxv2R/GTf7eO/qvl8b8ww35QJsOWMvILfji//YkGM0swF/6GBcEChVHOXgKfz1cqw2JuLUCwYNgshn32BYc3fKFr6nzHxE8dEz91TMwb135/8AueBWMfoO2J/MISzS/LkzHiURct7gm9icroQOAKqgIAvNkGw7L2ErAaFvWptL5GUMiTszQYlvNJ13MvOX2RKwPzl/ull/pkl/pligX7mx/nvcYBzOkCAC62w7DsT7ro /h8YmGms6HgsQXpbTHslgw1K9awT /d5w7Ebt43NN7TN97VNd7Ta5Y979TmF4EbAIAsVMyMg0LHfqVLa1iaOrlMWhGG3fP8K55QvPXJSu uT5ZYny61PlvVW/wdf/Ilnwdv90QWACqBSDFtIF6zP5wPDZotL8MKvveFk95yza87RNefonnOabOGPjn7Ns2DsAwS9BACQ hUoxbMGkt8aw6PhdKfpMTyikdIiUkmINi8XW6lcGyLTgjH98PL/4sDs38gsr1T0RtrrPrjIBw ZHxqTooDSkhY2Ol8CHBPt8Ph/yeK9kFGvY5/a95o9uDuliZLK4k4dPfs zYOwDtB2RX8jZBMiTfgn30FpaJqVxkETEng/rIjH06pZgbAKEqqkQwLD5wdqGpWuXGH9GH9Jb4o6D4g273x/bHDEmyLTk2fj01BmeBWMfoK2L/JJGtJJ9 gDrDtm351kLLkfmvdBhMZWAUDWVABg2P7gMyzqCYocbdu/L wOxzbumDTIteVOfnj7Ls2DsA7R1kV/SBRmWLdoLNaQLul4hfc9MZWiwuyyvxbpRCZNLc eqVfbzZYaqoZ4F0pZmvsuoD6i6FIBh84O9H5bRBcA0bOkFWwLDvh6Ipe ZU2Ra9qZq68pn2OIiv6RZvUnognkjfgBbIJYR7YUa0oUoJ2tcGCY5Dcu6ohXtKHIXMlRYzlpxZc UVqobrLDIlUifaMYLkAEUChs2P3E 6BAJKPyzSdVCySuBUmmGLjPySphqWTxuWK9oLfbotFr AbU uEyuJYYl98P/41Crn WYL5kD9y8TSb0utD1AKwLBlpMxjtirMsMx251YYlnU3Vpdlz5BGCXoJyAOIo/jUiv/5Mg2LtpE5rg lPkApAMPmi4AN9l3BsKWM/JLO37Bc0V7QnfGaZI0Lw4T1D0ABT7rQsRV8apX9fJGNRma4HNq7XH BIAZDSQHDVi4VZViWG1Kio4C8B Yb SWf0Vqs98WUw9kCyGYd YTuSDw/QjsHGHf0zFqxbuJTK9ZKZAlVQy2RrBw oCN7fYBSAIatXPIwrJewaDkMW3lzunaORtCH9juhVjCIoNRsmWGLqSQfj2QpFwy7VD7DViQ7wWX pdJr2TGkH1Aq6YEvOVhq2rGulZC 34MN3MnkZ9i4YFgC2ni02bL5H Xh7JEu5OW9kK5ftN2zOKm7jhxsAtp2qN zJaifnFSAMu3HXvIGJdLtmHOwASnUnvgPu6MtCtZ7X9lH1hgVq684ueYmZseaNu9tq2CJGAxU2l oCZSbGls43kLSRniB2zKwDDVj07ybDGCo38gj5il4ho40zzxwixY3YNYNiqBzPsiClJSnbbDGus 1MgvjGfsmXeRUbHUnMmWNq8pA5mrAbFjqoqdYFjyvifL1znf4gCS2rqzi56NEWNyxJTEPBuIbWY Me9dMPAWDyC 0PQWMiQTkz i76NLiZM7E racqslpWIgdUxWAYasezLDDxiQm2e0zbOYrXbGRXzDRss5GpeWcpaqsFc4UALFjqgowbNVDGDZB NGO3ybDMdudWGJZ1N1YT8X1yJRExI6qUw7D8 kkhdswOBwxb9dTWnbV4kncM8WFDYsSYHDEm/UzDYgkiv7BnaDx3AO0fYJqoSMMilwFix1QZ22hYATfMr3O xQEktXVnLe7kkD6OSXbYmOA07BJEfmG//6W9x9bczsewaHYQO6a62d42bE69 sCwRYMbVhcb0sfu6ON3DKU2bOXN6aomCUDsmJ3NtvcSZNerDwxbNJhhB3VRUrKlNGxFshNMVCIg dswOZ9sN64N 2DJTW3fW4koMaqOkZP3RXW5YANgqdoJhfT4fl159YNiiqa07u BKSDQRCSHZUhq2InsJAGCr2CGGzfl1LuBAAKO27uyCMz6gDpOSLbFhs3y8wLA74c4d2EbAsFVPb d1ZszPerwoNqMMDmohEG/FHU9tl2FxjeXIOcsoCdYABbaoY41k6fTiCAGKpAGUADFv11NadNTtjfcpgvyrUrw4NaMK bTOs8VyOyC/F Ig whSTLCNoSwlL5JMVGHZ3A4atejDD9ioDfcpgnyrYrw5tm2Ex23BGfkGGuWaGWzJnkSJ7UdTFOek g68NtxrhXiKUClBAwbNVTW3fW5Ij1KPy9igDWkt0uwxIG4or8kmbpJcgIkjnlnV2pJJkDqL0GVG hHQSwVoKRspWFzPnbmAgxbDJhhu X HoUfa8n6Itti2IyAOCK/pFkMS5oFD1hN7z7lDmVCcxIZtIUGt5chlgpQPFtm2HKvlQJwUVt31uiIds/7uuU rCXLYVhTasmb vT09kV SbM 6cKCAhArAmTp1szRpE3zi1YFsVSAUrJlhgW2i9q6s0Z7tGvei0tW7vdFNhDDmlJ3TakR08aIaWP Jm/r09JmcORZkWGqHAGvkF3Qv6mx7kYhccoVnKBNiNyMjaEu2o8g6QCwVoDSAYase3LAyLylZL2lYf 2wTc uwMTlsTCx6Ng6f j5njoUYluXmlxH5hehvzDzpIo l3YyzDrCiNJKpowqyDMeCWCpAOQHDVj2YYTtlHlKypGH3 2ObmFvvGOJDhpjFk/zk5Hc5c6zyOV0QSwUoHWDYqqe27qzRFumQekjJUgyLuXVQHx3QhRdc8UMnvs2ZY0NVxyWAWCpAC QHDVj2EYd2dhGRxwz63b78/tjmkj0p0kX5tsE/tMzkjH4q zpljdRsWAEoIGLbqwQ075yYl6w2Tho2mJLpwvybYo/J2KZ0GR iDY1/lzLHKewkAoHSAYaue2rqzBlukfc5NSjZjWF801a8J9qq8XUqneH5NZ/O/e6QuZ44FjocFaJSvC4JjuAKw9YBhqx7CsK72OVf7nLtD6qYYtk/t71a6O S2lrkVzbr37S9yjz0uwrBliPyCPaynzS3gf2w57MMz2yzDgUtSAQg9swMAw1Y9uGFnXVjqmHN7w 0nMsK/5oimsAds v3ZrdlG95nnri M5cyzcsOWI/ELL03juwIED2 yUHWLY0uYJFAQYtuqhGbZ9zsVqWOsWGLYskV M5w4gM60kImRFxcye5IHU3IzMPZk2QmvIliceqIVSDHoWZJAX1mOR0tBKSEoQgybzL4Se2TbAsF UP07AeimHVvm6lq2N /fbckmbd8/YXJ3LmWKhhCaOUNvKLEYmhRd9CXxmbnht6LK0CmQrReyAoeRqRQC3keVHFjRiKcWyWNmzxMWgyU x4g9My2AYateuiGnc0Ydr8vmurTBHpUni6Fo022qrX53/3yVM4cd1bkF8TFmVYZa0AA1txo066QBiK1zowfjWxBBpiGZb1bZx7LUlzRMWi4rgPzpNBZZyyz7 yD0TOGAYauebIb1R1MD2lCf2t j9HQq7Hp78P2jf8yZ486K/EJpMCJ336yGZc0tS0/ldhq26Bg0fAyLNo05rgaEnikGMGzVQxpWPOvEEmLY2OagLjKgDfWpA91Kj9EZPij6c84cd1bkF0 5PsfQS0HNj7MmARy8Bq2HZtcijl4ARgYFaVfTq5YpBwzBmtjqjfQgstYIu2AIBw1Y9OQw7pI8N6 iID2nCfOmByRj86/k3OHHdW5JccrVq2O2hm9yUtT1puaA1peXLYiuUsmPVhazvjB1JalYyz5hODhtIPS92H0VLG34TQ M2UADFv1cBp27z4iLoE OqiNDGhCZmfs0PG/5swR5nRtETskBg0MIigCMGzVw9kPixtWHx/SRQe1kQF1yOyMHRLlZ1igfOyQGDTQBVsMYNiqJ/uTrk1Sr31Kv8kR/egoRH4BgJIBhq16chh2UBORqEN9Sn 3zG20hQ9 CZFfAKBkgGGrnhyjtSSqUL8i0DPv6Zyx6a2B9z7fjsgvXLfA1feIpfrOCMgKGLbqyTHjoF8Z6J3 3ds05xBOrulXfu7VljfzCAde41KJ8JBGxHysR0Z7I4yUJaBRrQtaxtGDYXQYYturJYtjXfJFUn8 LfK/N0ztrbxle0y953Pi3frFluSt2GxX3Jdiz53IYxFreoEtkrwcwKDLvLAMNWPZnohXTDvsQw7Ir3n U/L1YZFWolsYzzR9h3bdjwWiTETx4SMFMNr5VecLCEImBtRCRcafoX2o/EcxGHZVYBhqx5sjQM8PizdsNFUvzLQJ/d1S13iKatu1f/eZ2WLS0CSmemOSOoAS8QWNG4AorMDRBgC4kUe7V906BHbMCTaUcWHX6H9iOSQmUMFcViqFzBs1U MY1s0w7L7XfNHUgCo0oAz2zns7Zx36teD7wnLFJcg2FyvLPHrWLawvaJTEsMWHX6H9SI8JAHFYq hwwbNWTxbD7/dHUoCYi0YQxyRpt4Q P/DlnjgXOms0SYWRbDMuvn7TY8Cu0H7MbNvtVYtYH2PGAYauezEqIc27Ms5TxsHd0sSFdbFATGVCF zI6853QVEJeA0Ag1TCyll4B1OzWfvAyLdGDm/aTLWFz4FdqPtOsAcViqHTBs1YMaFkuUyC93DIlhQ KOPj6kjVpciU9O/C1njoX1EtAjjCCb6DFHuLan RoWvdUmnh hnQPM0VrIkVninlDGdPEIv4LujPQpU3amlghxWKoMMGzVU1t31miPdkgzhvWicQmGjRvDxo1hY3 LYkFj0JA f/D5njrtrTtcOCb/CWh9gxwOGrXoyhpXSDPvy6/5YetiUGjGlhk0bw8aNRc/Gp6fO5MxxV8Ul2CHhV0igC7ayoBk2EAiE2QgGg2DYCiWHYUdMqRFzasSUGjGlFr2pT0 fzZnjrjIsABQDzbDhcPjVV1/du3fv3r17X3jhhd/ 9rcikeiHH34Ih8Ng2AoFM2yn1INLVkrrJTBtkKkAw1Z/LwEAFAFrG/bgwYOff/75mTNnmpubHzx4AG3YioY0LJY6pB4v9UlX8o4xeceYvGNIFtBLUJpZs kdE/xlB/QDVBvbckl3zO R2Q LSfbbb79tbW2dnZ3F9OqDftiKBTesjMWwr/miKYkuNkgki7uQJ11ZPl6Md7mHGpXSsEUMaOJZXK4BDGxDFTjGMFAP254 VrJqedWgkGtFv0iCSo2wwzeuEGZYm83m8XjIb1AwGAyHw 3t7aRefWDYioXTsM 9KovkupXhgZUYSwtOOMfl220VjqNffppa1ehb5XIsFlK4XVsgYZFYT7w5xyHyzEedstgzMvlrdh irlUJz7Tc bMVyPWXgflbxgzrdDq9Xq8fIRQKRSKRUChEbgkEAsFgEAxbcdAM2yn1eMMbe19 XfDMC7/2hpNdUk 3zIslkz166Fh5VkIkPpoHzhkp9mEdH4q2AoyMUCmUfVg 5iylII000TlKpBU xSF1pFeR/VvMMpmBX/gCMhZBjhqStUCXKGdUi/YzLVuW4mmnQC/0nIi2ichdJOJVYeYvieV6VUiEHd4zBjHDejwezKFZCAaDYNhKhDCst1PmwTyLG3bP8694QonWCW vb5Frb1Hrb1Jp LXjwyz/nzLFQwxIfusyHlhHkhXXJa9oUrxwzX5mlUIVHabPxKY7tG5S1icT2peSOh0C5bya 7VlqiMRIEImwBqdEhM9lIOetsYWkoTVWM6UzG62slwWZFcec9JH9kuZsY1ZchJ2chiVeY4b1 XxMn5JWRQHDVhyYYbtkXix1ygjDPr13nysQa3xgvvlw4eYjy81HFs2Kr4xrHGQ lMhS3rQbZNoWlmn7ZMxCEka3ZpZS0myFZi8uzdHQ5jIsp7O4DZv9IjDqg3UBSkQiCdZ4xZuwWDu dbaYZtp3/3XTOy5JlWl32YznLrbQIO3kalinTUCiE/UsDDFtx1NadNTrYDPvUcy86fZErg6qrdzTXhjXXhrWqRffbWxEfljBVwYblbj/mKCWdv2HR9hSrUxhfsqwddNmbYBIRl87SGcMazx0QSTDN4i8RCxCeZdaQUwqMrdtg2EqLsJPTsM QOmGGZJuUCDFtx1NadNTpiXfMMw/7HMy84vOELvXM/90l/7pddHJhXLDje kSUM8eCDEtt2mXCpjB7ADjvMZHb5CwffGYp1I30b2 u4mhb6H2g2cpHf T1pAurcPYaptNp4znRAVJuIpFIhDXVRRRnMK4Sx18Fxv0xdkvOfaePipVdiPn3EhD1yHwaaNdkp 0XYYb3X4X7S5cgHMGxlQTNsl8yLG/Z/PPO83Rv6sXPqp 6Zn3pmzvfOys22Nz8 ljNHzLAxAAByUcA3FgxbWWQMO08z7J7n7Z7Qvzsnf yaxiQrN9ve4G3YBd6YCZaWlkZHR5ubm3/88ccff/zxJwTmFqAwfqTS3Nw8Ojq6BJSBZR4U8I0Fw1YWhGF9RPKivQShn7qnz/fMnO dvdAnVSzY3 TdS8Dn40XDarU2Nzevrq5i3fzAFrC8vNzc3GwFysAaFZvN5nA43G63z cLBAJYp2oB31gwbGVRW3fW5Ih1z/u6aYZ96tkXnb7wpYH5SwPyyxLFlUGlyuLi/6RrnTfkR9DhcJw/fz4cDgeDoWAwGAhkkt8fwMZcQyoyYVfS7w/4fH6Px PxeC9evJhXPyDAhZMNF4Hb7cYmbmEjB8CwuwTcsHLEsJHMaK1ow119wz1Dwz3DjftG9bKX/2gtOxWHw4G9wAZXezweOwO3233hwoVQCI9zsQUnXwyBQDAUCodCYdYX21273Hg8XofD5XK5L1 7AbKgMfjwdqqgUDA4/Fg8V7J2Vlg2F0Cw7A 3LB7nn/FHYzffrKMp/EVnTXwwZdf5cwxi2ExvR48eNDv93MZNhgM Xx j8frcrl3cgoEgv/zwAHRsWO0F//P//7fgUBw26uXMzkcrnWb3eFwgGHLhMfjCYVCr776KiZZMOzuJGNYuQ/rK8ANi82a7Zh1Yqlz1mm0RT469nXOHLkMi l1z5493333XVbDBj1en8vldjicOzn5/YEjX355o6GB9qK7q8vvD2x79XImm91hXVsHw5YPzLB79 49ePAgJlkfGHb3UVt31uSM9cj9PXI/5lncsM 9KovstGrCBApaHbGPz7 bc4cWQ2L6fWpp5763e9 d/Xq1SyGDQSCbrfH4XDabPadnHw 3/fffdfT00N7cf/ fZ/Pt 3Vy5nW1tZXV612ux0MWyZIw37 efffvstGuYVDLt74DQsHr1QGyVTXtELafYMBAKvvPLKb37zmzNnznR2dmYxrN3uWFxcMhhMGo1u J6fVVSsmVtqL /fvr65at716OZNKpZHNK/QGAxi2TGCGfeGFF86cOdPa2opFIwTD7jaohvWjhsXXmiVTXhG4Wduwhw8f/uGHHwYHB7MY1mazm80WrVavUKh3clpaWsHESntx//79paWVba9ezjQ/r5ydlWq1ejBsmcAM 9vf/ra5uZmMpQ2G3W3ghlX48ST344bd zKx1qwJW252Y9GTxyoyXP2w//jHPx48eJDFsOvrNoPBpFRqpFL5Tk4LC4v/PHfu3r17tBcTExMLC4vbXr2caWZWNjk5o9FowbBlAjOsSCR68OAB9MPuWmrrzpqdsR5FgJQsaVh iJURsMURzasmbqq0r3LBkS1YikWQx7NraulZrkMkU09NzOzmZTAvdXV3T09O0F3K53GRa2Pbq5U yTkzNjYxMqlQYMWyYww/7www8wlmA3gxkWe5rFbVhTasRUAsPaeYyHXV5ZlUrlT55MjY1N7OQkkyl0OqNOZ2R9se3Vy5keP x5/8GBUoVSBYcsEjIcFfKRhlQFCsoHyGjYLbrf7woULJtPCw4dj9 8/unvvIaRypbsPR0YeDA/fl8sVYNgy4aECht2dZAyLJUXAVxLDunhDzi/0er1isXh6emZ Xjk3Nz87K4VU7jQ PtnY2OgFyo8P0SsYdvdQW3fW7Iz3KYMlNizzD7gnFz6fTyaTdXZ2XgO2iqampjt37pT/Y7Yr8OcC1SsYdpeAGDZYSsNuZcQNoHhy9uEAOSngshfwjQXDVhZ0wypLYdgVAADKBhi2gsANqwr 2KYOYZ4s1LPu6GgAAlI4tUANQEmrrzi444/2qUJ8qiHnWF0llDDucv2EBAAAAjOyG3Rw2pYbBsAAAAAWBGDbEatgNIoFhAQAA8qO27uyCK96vC mGpTxWiGta4gYcmAMMCAADkCW5YdQhPNMPeAcMCAAAUSm3d2QVXYkAd5jJs8o5xA/PsIhgWAAAgH0jDDqjD/epwv5rFsFjaWPSAYQEAAPIANSyWfFEwLAAAQCnADasJD2hYDWtI3jGAYQEAAAqhtu6sxZUY0ETY DTuEGdaQvGNMLno2wLAAAAD8yWrY6OaQITkEhgUAACiI2rqzFndCoolIMMlqaIbVJ8hmLBgWAAA gL2rrzlrcSYk2ItFiko1QDDuoTwwZElhLFgwLAACQF9kM64tuDurjg/oE1pK1VJxhxUKBQCAQCITi7a4JAAC7EsKwUcywEpphJbo4KdliDSutr6HaTiwUCGrqpdL6mpp6a QnOhYZYKCDyZS0Cq49AIBAIcpSfpYbkWwWcBVKBnFUoZbkAAGwVmGEHtdFBbRTzLN2wEl18UBcf LIlha4TCGtR6NWW0g7S htQ5i4YQ//rEwoJbucUIDj0WrW25ywUAYKtADYtJlsWwWEu2FIatFxNmEAsFwvr6GkoblrirF Bv1QuJRm muYdrKLOBbMpRdshkJagRCqn7 vAdmEbjqICUrGcmK1q18L8dUvIo1rpSm6oUSxL1oWmXPU/WcvG6CcX4uxxXCgCArQM3rI7LsNqYRBfDmrEWT5LnKjJMfD7SHWIhxVmkYamtOGl9TaZHQSwkXu M7IfuKhUIxcwcfm6qo9cRtSi2SvQJkPUlJkQXS7tbRo/BWcqZu9GqgP5JNalbD0vNkLbemXkr2vKClszfkWX9NAADkRc71JgjDxgZ1UcyzftSwA4RhJbq4x c3XsOyLXhDfcExtQjGljUbvjeXyI67BTB4cO Q2rI9UG5ZTzgrQm5w19VI202U5ilkEs23LMweuctmMj5D5C7Ll654AQLXB37BDuhiWBnVMw0fMn mIAACAASURBVGpjEl1coo1b3Mna03wNy/IG uVHJViIYTEIOxZjWDwfaiashxdmWLS/l6sIri7jkhgW gYAoDzwNawnOaRnMex XzTVr4n2a6IDmuiANrbgTn56 kzhpTK/7dl7CSg6o/cSCCmjBHj0EtB6XaX1NeSGnBVg2gq9W2f taDkwD2kgZZhposV6UHNYljWcukvkD4KAABKSkGGjeGGfW7ffl8k1acK9akjfepInyZsdiUOn/q 8FJzGJZy14w/BEP35HiQhe9F34FeHHYAsoHtFp2rAix33Blr4TkjT7roNkSeunE/6cIKJ0xPf4rF0gpmL5f1BWvpAAAURwGGHdLF/NFN3LDeyEa3MtCtDPSogt3KgMkZ TkdyUptSIp/o6bdfwCAACVSX6GxRJp2Gf3veaNbHTIvZ1yL/av0RH5 MS3JSm1IinUsEgTFvwKANUDT8MuepJ39PE7 viQPj6kJw370quecLJN6myTOtukjjapQ2cLfXT865KUCgAAUOkUZdhnXvy1O5RonrHemlm7NWNt nlrRrPsPHvuqJKUCAABUOnkY1sAw7J4Xf UKxW5MWBonF29MWK6Pm1RWz3tH6kpSKgAAQKWTr2ExyeKG/cULrziD0atjhqtPjFfHDJdHtYoV1ztfnipJqQAAAJVOfoYlJIsb9ukXXnYGoxcfay491l58rP35 oUq 7Hj7ixMlKRUAAKDS4W3YjTuGBJFIwz6/zxGIXHio/PmR ueHqvMP5PPL9reEx0tSKgAAQKVTAsOef6i48FB14aHy/H0wLAAAQAb hh3O3oa98FB1/oFiftkOvQQAAAAYeRl2mDRsDOmHvTSqvTSquzSqu/hYo1hxvvPl6ZKUCgAAUOkUZNgEbthfvPCKKxi7Nm66Pm6 Nm6 9sSksnreO/rHkpQKAABQ6RRl2D0v/soVijdOrTRNrTRNr9ycWtas w K/lKSUgEAACodXoY9nTEslnDDPvPSq 5w4vasrWXWdnvWdnvWrrOFDh3/a0lKBQAAqHT4uO7T05SxBMOGBBmX4DVPOCmWushksEc PrmLI79sH6WMo110XjszqPd21ipLIHmgquFl2FNnLO7kkD4 pEdmHOzbL3h232ue8Ea7zNMh83TIPO0yj8Ee3fnRC0vw WaGWN0C0BiyrCs0socVRyN4M5ZpYGV7YzAWWDojPBkS9LaGXEVzuyKXgWF3K3xcd/jk9xZXYkgTHdJGh7T4Ol3P7duPt2Hb59xkMtgiH5/4W0lKLR lNOxWIUVXfWRfW5z0R0Yk0vqampoa5Ad dS7B2RUhs8JKz1wR4vjMFnIJie1TLBh2t8LHdZ c NuCMz6gCg6oQxJVWKIO 6Kp5/a9Jnj2pVc9oWTrtL11Ck/69dAh0U7vh2VZRoHeMkSW7BYzG0OZDfjyAcxMpPU17Et2F/jdYv9SUjNEFEs22oRi5Ad8dQTiS557RXG2k6IuGoavtINckczyCvSmJH0ZHlx8zB24fvJJ6zkXJ M/A1GhGaRy18mVfpJ2yYDuaJetlpP CkEsKht198HHdIdFfzY5o37yvT 7vUwT6FH5fZOPZl14VPPPir93BRPPYStPoStPoctPosnbV/ GRnR4flvr5Zq7fxVyxC9mXdifOWOqKXCWMfXntQg3LXiNqhoyuC2ypMlyxeN2R1W5yrSjOvDKZP IRCrIUoFuK5oQunI3kw36I1tZk7sPgQrTZxMpQFyTOXg0V0iNE4asVYfo36V4flJoDzMqIwLikY dvfBx3UfHvnaaAt3zjq75lzdUneP1O0NJ5958deCPc /4grErt0zXbtrvHrXcHXEoFzyvC/c6eNhs60Xy9pTydq4Q19kz6QU3yheOaC1wrxB JD8gXM1xpxbcMVi6hWKKblSF06nVIb5Fu5NQp MHVhXDyObrVxLjVHyRzdRf2StFS0Trt8dn4vG uvwgWF3L3xc98EXf9JbA23jVvHkWvuUrWPa5gkl9rzwK8Evfvmy0xf5eUDxc7/8Qt/8 V6Z3Gx/ 9OTJSm1fORnWLSdyPUNL79hmQ0kNsiSxEKBUEy0J6X1wnop0VlQnGGl9TVEvwP ElEjzZXo8ZS38MrRtcvWF8HlrGyGRZu zIYlW63AsEDZ4OO69z6r0674bj1ebBldah1baX2y4gnG9zz/iuDp515yeMP/7pr5V8fUP9snz4knpHrrG4eOlqTU8pFfLwH1HpN9gW7WXgLmd6 IXgL0ftSH3lAL6CdDdsXWkDVAf BUQ0ZGRK7s658La8izEQqFwkxvBO1iYZWpZ3tLSiyZ62M7NlMYY5lxbsNmsiFPhONqs9WK8zfO8 geYfMllWEr9qZcUDLv74OO6dz49qVnyNN03Nj0w33pkufV4wR2I/eKXLwueeu4luyf0323j/9U69p 3R/ /5kez2uXfH/yiJKWWD/qC25m7UeS2EdmDfAiSea5FWyibmUmpDUutFGo aoaEYinvoHrO0vgizpPzpPACkEtQQ3aYUjpRkMoI2d5iNiQpO2SWVUfPGa0280W2wVrU0llrhf7 GmYu0M34F2RZRR3VNu6Rg2N0HH9e9ffiEetF1Y0TXeFffdN/UdN/kCkSf3rtP8NRzL9o9of9ue/KfLaM/3Hr0/zY9mNEs/27HG7aq2VGrgXNUhuWh0Fayoy4RUOXwcd1bnxxXWZwNdzQ3RnSN9ww37xlc/ujTz70keOq5l ze0D/bJ/ 7bfy/WsZ uFUZbdjqhhydtRNgrcy2G25HXSKguuHVhv3kuMriahjWNt7V37xvaCQN /TefQ5f Kce6Y9ds//qnP4n3g97pCSlAgAAVDq8ewncN 7qb943Nj8wNz8w4r0Ev/jly05/9NKQ tKg6uKA4kLf/LzJ9vZhWOMAAADA5 Pnunc/O61d9jY/XLj1yHJ71HLrkcUdiP1i78uCPS/8yhWINzxYuH7ffO2e8eqIXrnofu8ziMANAADg8/Fz3fvCP ms/tYnK21PVtrGV9vGVz3B C9 YrgmRd/7Q4lbo2vNY9Zm0dXbj5e0qz4Dn75VUlKBQAAqHT4uO7gkb8Y18Md0/bOGQeWvNiMAzx64YxLPONsm3a0Ttl1a6FDx74pSakAAACVDs 4BCZHtHfe0zvv6Z339s578Fmzz 3b741sdMr8nTJfp9TbIfUYbJFPdnxsLQAAgK2Bj s PvE3izMuUYWIFPRFUs 9Cpm2FSPMtSjCHUrQt3ygMkRO3zy 5KUCgAAUOnwjQ/rTg7pYkPaGBIf9jXB3pf3 6KpXnWkVxXpVUV6lSGTM/7p6TMlKRUAAKDS4bnGwaJnY9gQJ5M/tvncvv2CvS /7oum tRRPKkiZmfi09NnS1IqAABApcNzna4l78aIKTlixJM/trk3Y1hNFE/qqNmVqK0Dw1YI U6Qhwn1AJAnPFfzXvKm7po37prwFMDWmqUbVhM1u5I737CVrQkkRgklXFZhWYFhAaCc5GdYIoFh tw0hGoKKufRhXoBhAaDMgGEZjUIp2 JLXGH0fNS4prRQebSjKFuYQWd5wbYIFaVeeZ9LtitAi 4o2NaYWABQeYBhETIrR Vawyp7cPvMOinMla8YK5fkaVg84iiqWdamJf9zyX5U9v0BAMhKHobFOmGr0LA526c8lw/hk48ApYgYfuiyLPQ4/HmeC5 jmK8BAOABb8NujJiq8kkX2oTkchAaMTqLc2n5ZD qBCDrGTCbw/z/NvA5ivkaAAAe5GPYJJbohu3XRPsr2rC0HlEWpyCyZCzsxDyKUBbjKObCUz6qFvlUnrnSIFmZPM Fs YUkzLX7wIAgC98DevZGDFWjWGp9 n0ZbiyrmHFfDpErmrFspwX4yiOZ195eIv1qRO5sFVe58JZc1pblbl FwAA/OBp2EXPxjA23cCUHDElK9uwRVHYEijbvnAKAADbAW/DJocNiWFjIjOnizDsJmZYLC1UqWEZK5mW8SgAAKoGnoa1eJJ39PE7hsSwMTHMMGyMSFVrWAAAgA Lga1h3ckgfv6OPYy1ZMCwAAEBu8jCsLjakj2GSBcMCAADkhq9hXYlBbZSULJdhY2BYAAAAEp6GX XAlJNrIoDY6qIsO6WP KBgWAAAgF/wNO6AJSzS4ZMGwAAAAueFrWGe8Xx0a0ISxliwYFgAAIDc8DWt2xvtUQVyymog/mgLDAgAA5ICnYU3OWK8y0KcK9qtCA qwDwwLAACQE76GdcR6FYFeZaBPGexXhcCwAAAAueFv2B65vweTrCoIhgUAAMgNT8MaHdHueV P3N rCPQqg74IGBYAACAXfA1rj3bNezHJ9igCvshGsYYFAADYDfA0bKfM2yXzds/7uuV b5GGTQMAAOwaeBg20in1dMq8WEu2WMMCAAAAGLV1Z422SIfU0yn1dMm8XfNeMCwAAEBpIAzr7iQ kC4YFAAAoDbhh59wdUneH1NMp83jDiGH71DEymV3JT0 DYQEAAPhSW3fWYIu0z7k65twdc 4OKWHY5/bt90VSvapIrzrSq470qiJmZ LT02e2u8IAAAAVA2lYLHXMuTOG9UZSPcoQmUzO OFT3293hQEAACoG3LCzLjzNub3hJGbY17yRjU65n0xGR yTk99td4UBAAAqhtq6swZbGDGsCzfssy 96gkn22QuMuntkUMnvt3uCgMAAFQMmGHFs07SsB7MsM 8 Gt3ONE8s0YmrS34oejr7a4wAABAxUA37Cxh2D0vvuIKxRsmLDcmLDcmLA0TFvWa74NjX213hQEA ACoG0rDiWacYNewvXnjZGYxeHtNfIZJy1fPekT9ud4UBAAAqBqphneJZJ27Yp5/f5whEfn6kIpNixfnOl6e3u8IAAAAVA6dhn3p nyMQOf9AQaapBds/Llx7 4uTZHpLeOJN4fE3Phf94bNjb3x 7E3hibe/OPXOkbr3jn51UPSXj47/9eOTf/vk5Hcfn/z20IlvPjr 9UHRV 8fqXvny5NvCUVvfH4MSaI3Phe9IRS9KTyOpbe OEEmfIvw NtfnHzny9PvHql7/ ifDor 8tHxb8j8Pz7x7aET33wk ssHx75670jdO1 cfPuLE0hVT7395al32NLbWPri1Dtfnn7vyB/fP/rVQdFfPjz zaET33588m HT31/ NT3h09998nJv2Fn8SFWxNE/vnek7r0jde8d SOW3j1Sh6cv68jX73x5 u0vT739xUnsjN7 4uQ7X9a9d SP7x/76qDoa z6fHzyb4dO/PUj0dcHj331/pE/vvvlqbeEx9/47OgfPjvyh8 O/uGzo3/47Ngbn4ve/Pz4W0LKGeH1R34daCJ/L1gOWCZvfC564/Njf/j8GJEznhi/hUzCD6HviSfs9/7G56I3hcffEp54i3K1T2OJuA54rd4UHn8Lr//pd6kX/NDJbz8 R1 zU fOXz6zKenzxw 9f0nJ//28YlvDx3/5kPRnz84 qf3jpx 4uTbwlFb34ueuOzY3/47AiSiMslPI5fCtZf hcnsc8VdspvCkXERw75wGTSSXJ/bM 3vzj5zpG6947 6YNjf/5Q9PWhE99 cvI7vJ4nvz104q8fHf/6oOjP7x/907tH6t5BLgWRsI8cWdaJt7448ZbwxFvEh5/8wGMlEr84EfkpIq4e8Qk8 qf3j371wbGvPjj21QdHv3r/6FfvH/3T 9hGcvsxbPtX7x/96oNjfz4o stB0dcfir7 8Pg3Hx3/5tCJvx468e3HJ7/FvlDYr DT02c PX22tg5SUem/rrSqrFyGDUbPP5CThu2RmacWbPJlxzye7LJlu2zJJl1cn7OszS2uy5bs88tOxapbZfWp1wM6W9j giBodMYM9oreHdLaAZs2nsrrlKw7Zkm1ucW1u0Tq3aJ2zWGcta3OLa3OL69IlG5ZkSJIu2aRL67 Il2/yyXb7sVKy4late9ZpfZwsZ7BGjI2qwR/S2sM4W1K771VavctUtX3bOL9uxesqXnSxpxamgpVWXyupRr/u1tqDeHjY4oyZnfMGdXHAnF9wJsytmckaNzjB Ius zbpXs 4jk3rdp17zqde81ORRWd1Kq0ux6lRYnUqrR73u1az7dbagwRE2OmML7sSCO2F2xozOiMEe0tn8m nWvyupSrNjnl23yZbt8xS5fcchXHIpVp9LqUlrdKiKp1zxY/tTkUVk9KqtbuepSrDjlK/b5FSwTPB/s9Txlu12 6lCsOhSrTqyeCqsTf73qVKw6FPhuNmxnBb4znpWCqBtWOlYr9Rp2ppmkXvOorC6l1am0OonKezX rPp0toHeEDI6w0Rk1u2IL7rjFk7R4koue5KJ3Y8m7sehJWjyJBVfM7IwYHWG93a9d96rX3EqrU7 nqUKzaFSs2OZIUq3aF1am0utRrbrIyGjKte9TrHvWaW2V1Ka0updWpWMWq5CIvqXrNo14n9iT2V 6 5iPq71GseouZhozNidsWwClvciQV3bMEVNTkjRkdIZ/Nr132adY Geik0WOZ4WW71mlttdamsZP5YyvyI/xawi7zmxkrX2vw6m19vD jtQYMjZHSEjU4iOZDkZNvujBidEZMzanbFzK7YAnbZ3QmLJ5G5 J6NJU9qyZta9qaW2NMGJXk2ljwbi5wpiSasFIs7S0pYXJS0wJ7iC874gjNupqcYLZnQ5KAnI56i eLLzSRGjPWK0ZZKBI6ms4Ud6v3jWRRrWH0vvffl1weuvv37 yvW2GSPaUfDzI9WFh8oLD5UXHiouPFCcfyD/8Z7sX3el50Zm/jky9 N9 YVHmstjxusTizdnrLeljvZ5X6fcJ5a5W6X227PWm1OL158YLj5S/nhv7p8j0 dGpv97ZOq/hqf a3j6v0dmzo3M/vOu9F/3pP 6J/v3Pdm/783/ 978v /J/nVP q 70n/fk/70QPHzI/Xlx/qrY bGyeXbMzaxzN0x722XudqkjtY5263p1cYJy9Uxw6WH6p8fKH9 qPz5kernR2okqX5 pLr4UH3xkeriI9XFR qLj7GkuTyquzZubpxevjW33ipzdsi9PepgvzYq0Ub7taFedaBb5e1UuNrmbbfmVm5OW25MLTROW 25OL96cXro5vXRzerFxerFxytI4ZWmcWrgxtXBjytwwabo2Ybw6rrv8RHN5XHttwnRjytI0u9oi s7Ur3N0q/4A2LNGF 9SBbqWnU 5ok1qbZxZvTBqvjKkvPVZcGlVeGlVdGlVfHtNceaK9Oq67NqG/PmFomDA0TBoaJo0Nk8aGScP1CSLhW0zXJ4xXx3VXxtQXHyt/fqS4 Fhx8bEST6PKn0cVP4/Kfx6VXxxVXBxVXBpTXhpTXX6ivvxEfWVcg6cnmitPNJefqC NqS6NKS NKi6Oyi NKi6PKS PqYikvDSmvDymuvpEc21cf33S0DBlujFlujFtbpxeuImlmYWmmYWb0 YbU6brE/pr49qr49rrE/qGSWPjlLlpxnJrbrlVtiaW2zsUzm6Vt08TlOgjg4b4HWN82JgYMSWGjfFBfUSiDfSpPV0KR5ts9 faspXHScH1cc3VMdWVMcXlUfunx/KXH8kuj8kuj8stjyqvj6usT2huThhtTphtTpkYk3Zwy3ZwyNk4ZGib11ye0V8fV2M4Nk/obU8bGKdPNafPN6YWmTDLfnDbfnDbemDI0TOiujWuuT gap023ZpdaZNZ2uaNb5enXBocMsTuG JA ItEG zW XpW7U25rk67cmlnE8mmetjTPWJpnLEi2WE2MjZOGG5P6hgldw4T2 rj2 rjm rj2 rj2 oT2 oT22rjm6rj6yhP11XHN9Ul947Spadpya3a5RWoVz9s6Fc5upbtH5e5Ve3rVXiJ5sNST2ejrVXl7 VN4eladH5e1V /o0gX5tcEAbkujCg/rIkD56xxDDzmLYkBgxJkaMybumjXvm1D1z6q45dde8QUkmPI2YNkZMSTwZ8TRsTA4bE8PGxLAhc YeS4ncM8Tv6 JA PqSP4UmHp0FddFAXHdRGB7VRiTYq0UbwpMHTgCYyoAnjSR0eUIf71aF dahfFepXhfpUwT5VsE Jp15lsFcZwJMCTz2KQI/C36Pw98j9PXJ/t9zXPe/rnvd1UZK3S0ZJnTJvp8yDxW0hU4fU3SF14xNhidQ 58qMe2VL4lnnsNp7qaH59ddfFwj2C/bu 5Xa6rkyqrsypr8yqrtMSdrLo9pLjzWYc396ID//QHHxsebKmPHahOXG1ErzrK1V5uqQ zsV/o55j1jmbJXabs2s3JgwXx3T/fxQ8dN92U/3ZT/ex2Qq /G /KcHivMPlecfqi7gSX3hofrCQ9X5h6rzD5QXHqouPtZcHjVcGzM3TCw2TVtb5uzt855Oua9j3iOW udqkjpbZtaap5YbxhSujhsuPdZcf6y6P6i PGq6MGvDndaOGK6N6PI3prozpro7przzRX3mivzpuujG52DSzenvOLpa5OxX XlVoQBsd0MX6NeE TbBH5e9UuMXz9pY5a9PMUtP0YtPMUvPsSvPs6i0iNc uNM uNM8uN88sN80s3ZxZbJxauDFpvj5hapg0N04vNs utkhtYrmrS nr1YQkuohEHx3QhnrV/m6lp0PuaMUkO2VumDA0TODGbJg03ZgyN05h2rLcnLY0TVuaZixNMxbsx8ZpTPeWppnFppmlppnF xilzw6Tx2rju6hPt1XEdNWmvPtFeHddeG9deG9ddn9Bfn9A3TBgaJo03kITre1J/fUJ3bUJ3bUJ3fUJ/fRKTu E6km5MmRqnF5pmFptml5pnl2/NLt aXcHT3PKtueXmuaXmGcvNaTOuuWlz08xC88zirbnlFulqq2wdMWxAoosMGmJDxviwKTFiSo6YEk OG6KAu1K/x9ShdHXJbq3Tl1szCzSnTjUlDw4Tu rj22hPNNcJKDRP6G4S m2YWm/FkIdJi88xi04zl5vTCzSlT47Sxcdp4c9rcPG25NbN0a3bp1uzSrbnl22SaxTdicrw5bWqaNt aXWqRWsVye5fS3av2DehCdwyxYWN8SB8d1IUGtP4 tadb6WyfX2 VrtyeWyJyW7k9t3J7bvn2HFHQzOKtmcVbM5Zb05bm6YXm6YWmaTMt3ZzG/jYYG6dNzTMWrOi2eVuHwtmtcuOu1AQHtCGJNiTRhSXakEQbGtCG8C3YRl1YoiN pFr1jiE bIgPG PD2AXHLGlK3jVt3DWl7i1wGBZRLUWyJlKy2QxLJly1DMOSiSbZjGe5DEsmmmSVVMluk2HbZ10me TFV/b//ve/F3zzzTd7XvzVxWs3npidNyYsDRMLzHR93HztienqE8xfhuvj5huTS43Tq82z6y1Sp3je26UIdCm ChASdLXPrTdMrNyYXrj3R444e1V4c1V58rL00qrs8ig1aMGDpKvGCGMxguDZubpiw3JhYvjm1en vW1iZ1dch9XXJ/p9zbMe9pl7na5uy3Z9aappZvTFiujy9cH7c04GkRG3CG13x8oWHc3DBubhjPnEvj5FLzjPX2nK1 N5mqXe7uV/l51mGjDRvo0oV5VoFvl61C4xDJ7i3Tt9py1RbrWIl1vla63Sm2tMnurzIalFtl6i2y9VbreIl27 Pbd6C3Pu7EqLdK1t3t6ucHcpfT3qYL82LNHHBg0xiS4yoA31qQM9Km n3CmW2VrmVimeml25Nbtye3b19tzq7bnV29LVFmq6LV3BNrZKra2ytVap9fbc6q3Z5aaZxabpxZ sz1DSNe/nmzCKhxaXm2eXm2eVbpAVwUS7fml1qznhq8dbs0i3kLezH23MrLVJrq3S9TbbeJrOJZTbxvE08b xPL8NQmW2 VWlukq7fnlm/NLeO1lVlbZWttMpt43t4ud3YqXD0qX782KNFH8TasKTFiTo6YEnfwZmywX 3rVjo75LZW2WoLripL88xC88wCKdBbs4u355ZapCutstVWmbVVZm2VrSLJ2oZtka62SFduzy23z C23SrHt6 L5dfG8rZ2SsI1rbTIrdkirdFU8v96hcHap3L1qX782OKiPDBvjI8b4HUNsSB8Z1IUGNP5etQerq nh vX1 vV1uwxORoViGJatYZm2TWdukq63S1VbpSqt0pRV/vdoqXW3BpbzcMrfSJlsTyylulejCg/oo6UoixZAUZ27PKNWYIP6MJUdMSaR9mrpnSmENWDTlbVjCs8OoYRHPooYd0sUG2TwroXoWNSybZ mN2Yxqac1Y1LMU1XrxxJSsjCZZFs 2Y57lUO3sYvBKQ/Pel18/dOiQ4D//8z9PnTr1f/5f/3HpeqPeHhxUO5pmrE0z1qaZVTxNrzZNr96cXmmcWr4xudQ4tXxzerV5Zu3WnL1F6myTeTrmfV2K YLci2KUIkC3Nljlb84z15tTSjcnFG5MWLDVMLt6YWLwxudQ4udQ4RablxqnlxsmlxsmlG5OLjZN LN6dXmmeszTPrt2ftbVJn 7ynS HvVgS6FP5Oua9z3tsuc7dJHS2z683Tq01TK1gNsdQ8bW2esTZPr JparV5erVpeoV869bsWsucXSxzdci9XcpAtyrYpw4PaKMD2tiAJtKvDfdpQr0qf7fK16lwt887x HKHWO5sl7va5e52hbtD4e5QujsUng7stcLdrnC1y11iubNt3iGet4vnHR0Kd5fS263292hCfdqw RB8dMiSGjIlBQ0yij0h04X4N3pjtVLja5U5GcmRJHXJHh8LZqXBhqUPhaJfbxfO2tvn1TJJhaQ1 P8 tt8 vieZtYbhPL7e2MJJbbcVfiXrCJ5bYOuZ1M7fgLR6fC2al0dSrdXdTUqXR3Kl1dClenwtkhd3TIH e1yO15buQM/UOHqUrqxBuyALjyojw0Z43eMCeI7nxw2xu8YYoP6iEQX7Nf4elTuLoWzQ27HnEXULSOyDrm9U HoVDrxpHB2KhydCqySzI2OLqWzS nqVrm7Ve4eRsK2dyldXUpnp8LZJT1xsQAAAjNJREFUpcQE5 3TBPq1oUF95I4hPmLCOzQQyQZ61V7ycFpu3UoXM3UpXV0KJy39/ 2cy0rDQBSGfQsXLly0BW0i1PQlus2m0DcoXZV2n22gL1CxooIUulERLGLNUyiKl JepU1aSKZtMtXFTNKTyeTSKoIgfIvJzOQ/Z06Sn2EWIXme3r6f3X6c3w0u7ofEW7uP5tUTun6e9l6mNy zm/5M68 0vq3RBsRm llLpWDNM9PXhaXCnrDjgqDDumcFNjTZXsRxwWOsz0KT9Z0VdO/NS KzjMkCq VsY3kmu9JmdsjbzA68X70Qb9UejP6bdXDcXt/YlGW5Xq vtVotVVUrlUoqm9sSc3uHJ0PT5jIwZwTQ6egWAesWdtuObjnBuyBDHzZpgKEwfX6IpVmIYAMR5g aau20KjKVbjo4cHTkGBRsI6wiTTgqYCXTmo4kfNpAD0SPw6YP5VjKixXkYgUu4/IhVxIFHCMOajCfzsa9KeARlecsxrKUisgkkWwId8rIds6n68/xJMFOl8Yp8JiM4M1STfZ9jQbFgj5BH48eKwGFI9GmYCbG5QG/ZP2pv70gZMS/LcrVaVRRlrdPpNJtNVVXL5XKpVEoJu5QsJMeDjqYFPikh7MacXzyAsJta6EiEjCh5bRcaJSqBAI xsWpDSopRx4epHhODGCoYI0ZeWypwXIn7mz7JUHSJFmOLkM2I WP/fzz/NmRz7HBPJfvv9yf/zJygUCsVisVarKYrSaDS AAqkVVkNs8jMAAAAAElFTkSuQmCC



http://www.vbaexpress.com/forum/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcsAAAFyCAIAAAAVpWatAAAgAElEQVR4nOy9aXgc 5Z32W1/f95z3w7zXXHPec51zMtkIECAwEEwwMwmcSQLyvgCxMQRnDhgcIJkZcIgxJGxGLCYxCQwJ2IkDdg JYtiRL1r4vrV6r966ufe19qa7eqjfJ58NT3V29yZIs2yx1X/cll2qvsvTTv 7nqachnU7X29v7l7/85Te/ c0vf/nLr19z4xXA1950UXzNjVdcc PXVS4fru6INzauWb/Vko54Y2VXjXtrcejl samZ7v8nV 0e65Zs ZL5ccff/zXv/71u9e//rWnpwfq6ek5cuTIG2 8ccW1N1193Y1//PPxbGFhZc7kFzL5 VVwbj6Tm09XXWrh fO5yVapWi 253wTl09yod4F1dfKnKVYtZP08p1SO1fvZG6 peX5pDwvLc0JuZSQS4nsMiwCZ4CLK3C8hcsrlHdePlb50PMJWbHqEhakXNXJJj6XzJ1L5s/j1Ko6vbgLizmzSs5eMhdXwXKti/MLu 7819KnQ7vu/NdiaeG9P5 4 robr7j2pieffPK3v/3tBx98AB07duzQoUP/5//95SN/ Ws4WUADOSuftfKyTcjZhZzD18KCYruQswuyXZDtvGwXZBuYFpRpxXzWymWtXBZmMxYmY2YyZiZl plNmJmWm02Y6bWaAlaUmJmWigZNGKmkkJAMhGXDJACZIyUgmTVTSRKVMdLK8ZtpEp00MsLK5EWx OJQxkQk IeiI h8Xn0JgOjeuwmA6L63BxDhf1REJPSAZSMpCSgUoayaSRShnpVHXPym4zwGYmY2YzZjZrYWULK1s 42cLLFq7irDKHz1v4vEUowEIRFoqwr8YWoWgRima YOYLJq5g4vLARjZv4gpGrmComC0auOIcW9SzxTmmOMcWdWxBxxZm2cIsU5ilC7N0YZouTNP5aSo/ReWnqPwklZ8kc5NkboLIjRO5cUIeJ QxXB7D5VFMHsWyo2h2pOxhNDOMZoa8mSFvZhBJDyLpQU96wJPu96T7Pal d6rfnepzJ8 6k2ddybNOxb3OZI9T6nFIPQ7pjEM640gotie6bWK3Teyyxbts8S5rvMsa77TGO62xTmvstDV2Gq 76FBxVbImeskRPmavuaGWL4lOW2Ck4ftoa77SKnTaxy5botifOOKQeR7LHmep1p866033uTL8n2 VB1B5EM0NYrkhLD EF4bxwghRHCWKo2RxlCyNkaUxqjRGlcapecX0/Dg9P6E2U PJBk8Bs4qnaz1TMTc/W2sdMK94rmw9sDCvF YNKhuBffOmWpuB/fOWWsP BcWBBTiwYPUvwP4Fa61tgRrbm9kRbG7n0h1S7LoAu1VOyAs7f3B7xG5je7r43i7hbJdwtst/tit4tit4tjNytjN6tjN tjNxtlM62ymdPZU6eyq9iHtPpXs7Kk71diR7OxK9HYne02Lv6Xjv6Wjv6Ujv6WDv6WBvp7 3U jtFHo7 Z5O5kxn2Gbd YPb45kSGspHUsUjf/nr//F//SOALASq1yPHTjCRnIVOW5g0zKStXNbGZQE0nULOKeQVpCqElauuINUn2wXZ4ZPtPrkOx3ZBtgtZ O5excRkrk4aZlIWWLKRkpiQzJVkoyUIlLXTSwqRgJgUzKQudMlNJMyWZiISRSBjwhB4X9Xhcj4s GPGHAEwYiYSIlEyWZqaSZSprppIVJWpiUhUlZmDSYMDNJMy2ZqISRTBhwUY/H5rCYDo3ovBEdGtahYR0a0Xmjc1h0Do/r8bgBF/VEwgCOSCaMpGQEXynJRAGgg2OlTOBvA5uysGmYzQBb2IyFTVuYtJlNW9iMhctYOBnmZCufs/J5q5C3 gpWX8EqFKy AiwUYD4PczkLm7OwspmVzYxsLNvAyAYma2BkA5MzMHk9C1yYYwpzbFHHFHVscZYBLswwhZkyYaf o/BSVnyLzU2R ksxPkPmJMmQBXscweRSTR7CsYoWwWYDXISQziGQGkPQAkh5QIJvq96T63KmzLuAkcK8z2QMIW4Z sjyPR40h02xPddrGRsACyp63xOsKehmOn4JiarS3B2gS1MQWycPx0GbJd9kS3HUA22etKnXUtBt lhojhCFEfI4ihZHKtytkrYi8rZmdacnavjrLBUzppbc1ZBbaDK2cUhe7E4uxqQdakIe/3h6yWNjOk0znSa7zJN95Uuj62N/1cbDr43DXx5Huj6PdH4vdH0tlp7o/Ti7uro8qTpQtdn0U7foo0vVRuPOjYOdH/s6PhM6P NOfcKc/YU5/wpz JGg23/v/3h7PlGxC3ibk2XjxyLEToJKFHnvssWtvuDmYyBmJhJGQzGTSQqdgJm1j0zY24 AzDiHrELJOIevks06hxmCRg69Z5PLJwG6/7PbnXP6cyycrK3NpG5uy0pKFSphVtlAJmJJgKmmlkzCdhCnJQiXMZMJEiCY8bsRiBjSq90YNaMy AxYyYaMJFE5EwkQkLADQtwUwSZlJWVrGNTVvZFExLFiphokQTETNiEQMa1nlDOiSo8wZ0SHAWCe q8oTlvWI GDVjEgMeMeMyIx01k3ETGTYRoIuMmUlQ5YSITJkqxmZIsNPjDkLQwkoVW/mCYaMlCSxYmaWFTMJuGuYyVy9p4YNnGy1ZBtvJZmMta2IyFSQNkm6ikkUoaqKSBTM2RKT2Z0lPp OSqrp2QdLeuZ3Bydm2MKc2xBxxbnFLwWZ5jCDAPwWpiigEEBqxB2nMyNE7lxPDeO58bw3CieG8U BZOVhNDuMZoe92WFvtlzAqgiLpPs96X53ut d7nOn lyKe13J3nrCJnociTP2xBl7DWG7bWKXTeyyiZ02UMO2IKylSthl4NVcLmMtsVNw7HS1mK2FrFOB bJ8n049kB5CWkF2EsPWQXT5np5ZWz oW5yzfArKtOOtflLMNhF16MduKs5e mE3IC/fc8c8hg4H8 ATz8Qnm4xPcxyf4kyeEkycCJ08EO44HO45HOo5HO47HO44nTh2XTh2XTn2YKjtZawlMdHwAnOj4 INHxodjxYfzkh9GTH0ZOfhg8 WHw5IeBT44LnxznPznOfXSc eg4/dFx4qPjQb3 ntv/OZ4p2Xx5my9vE/KRVPHq627cvn07dNNNN73/5xMORtKjMQMqmvCEmUjAlGSlUzYm5eBSTi7j5NNOPu3iMy4 7eLTLi7t4tLOOvNpt5Dx LIeX9bjlxF/DgnkvMEcEsh5fLLHl3ULGRefdrBJOyVZSREmRJiMw6QIkyJMiVYqYaUSNlqy0ZKVSsCUCJNxCxE zYzETFjV6wwZv2IhGjVjMhMXMeMxCxmEyAVMJKy3ZaMnGJu1s0s6lHFzKwacdfNrBpeysZKVFmI pZiIgJCxnQgN7jm/MIOo8PeM7j03v8em/QgIaMWMiIhU142ERETThwxIhHjHjEhEdMeNRERM1E1EzEzGTMTMYsVNxCiTAlwrQI06KFEi1U3E LFLFQcVuZLMC1ZmaSVS9m4tNpWLg2zKZiRLJRkphImQjTioh6L6/G4HovPYfE5TJzFEjo8qSOTOjKjo Q5Wi5Dtqhjizq6qGOKFbxOUxXCFiap/CSVnyDy40R HBSwRG4MVzyKyyO4PILKw6gMCDvkzQ55s4PezGAZsv0Arx4Fsn3u9Fl36qxSySZ7Xclel9TrlHo dUm8lIlAT1t5A2DrIWmOnLVWDiEB5/F8OYTsslUpW4aySGNgT3XbpjAqyZ93pKmS9KsgSBUDYkZq4YL4uLlgKai9lPdu0mG3F2eaQLXvF kG3K2UsM2YS8sP27t/pmZ/EPj5IfHiWPH6WPH2WOH VOHBVOHBVOHA2cOBo8cTR84mj0xNHoiSPiiSNS2W8/fWD7vXuA3376QKJxzvH348ffjx5/P3r8SPj4keDxI4HjR4TjR4TjR7jjR5gPj1AfHiE PEJ8cAT74IgwM7P9X26tEtaXR0OF9/584qabboL 8evXhhO5OSQ654nqkagRjZmwuJkQrZRooyQ7k3SySSebcnFJF5d0seDbpJOtTrvYpItLuriUm09 5hAziyyCBLBqQ0WAODeXQUA4NyF5/BvGlPULKySYdtGgj41YiVnbcSsStpGinRDsl2mnRRlVXgLGoGY2Y0LAJDZvRiBmNWvAYTMRgIga TcRsl2umEnUk4WMnJJp1c0smnXELK40u7hZSTkxyMaKdjVjJswYIm1G/w8Ho3Bzzn4vRuTu8R9B7BiPiMXr8JDZjQgAkNmrCgCQUOlB0yYSETGjLjYTMeNhMRCxGBiShMxm AyBlMxmIrBZAwmozAVhckYTMWtdNxKizZatDEJGyPZWMnOSjZGsjGSlU5YKYD mJmImrCIAY3oveE5JKhDwrPe8CwSmkEiM2h0BhVncWmWSOnIzCyVm2Pyc0xRxxZmmeIsXZymi9N 0cYouTtGFKRrgtTAB8gGiAtn8GJEHkB3FcyOYPIIphB1CFbwqkEWyA0h2AMkMeDIDngwgbJ87fV YhbPJsOY3tdSZ7VRFBLWET3fZElz3RZW9CWMVw/DRcwaviDktseYStQa26mK3EstIZR/KMM9nrTPW6qrHsACIPeHODaG4Iyw/jhWGiWskCzo62LmZXwNnJFXG2VT2rb5EbnJez5qaQDTTn7BITgwstZi8YsqK8sPXWm4XJCe Rd9Aj76BH3iGOvEMefYcg579B3u6DvC0XeEo 8Ejr4dPPp2 Ojb0aNvR4/ Pnb097Gjv99 755zZW2/d8/vnvpl3Zzokd9Fj/w fOT3wSO/Dxz5vXDkbeHI29yRt5kjb1NH3iaOvI2//7b3/be977 NvP82PzG 9dab1YS1 /KivHDFtTdBX/r6tSm5oHOH5zxhPRIxeqMmLGrB41YibiNFOyU6mYSLkVxMQmXRxYjliYSbkdys5OYkD59ChJTXn 0EDWSyYxUMyEc4T4RwelLFABvWnESHl4SQXk3BScTsZU0yUJ6iYnRIdlGin4nZKWWTFo1YsAqMR GI3AWMSKR6141EbEbETMTsXtVNxBi04m4WQlFye5 ZRHSCG lNefRnwpjyC5OdHJxOxUxIoHLajP5OGMbtbgZvUuRu9iDG7W4GaNbs7o5owe3ogIJkQwoz6z12f 2 kyIz4QIRkQwIT4T4jN5/Sav34wGzGjQggcteAjGwzARtpIRKxmxUREbGalOUzE7DRy303EbHbfTcTsTtzNxOy3aqJiVjMJE xIyFzGjQ6A3oEf cx6dzC7MuYcYpTDt9U07/lDsw5QlPe2MzWGKGSOnI7ByTn2MLOqYwy9RDdpIqTJKFSbIwQRYmyPw4MJEfJ/KjeH4Uz41iuVEsN4LlhrHcMCYPYwCy8hCaHfRmB5EWhPWk tyKz7qViKCaElQIW2nmakLYMmRt8U5YsSoiWE3C1sWy3Xap2yGdcVQq2UxNJYvmh9B6yALCjlKl 0daEXXk92wK158kNltYIZmzB2UXC2UWK2UsM2ZVxVpQXNt30LXpowP6b1xy/fc3529fcv33Nc/hV9PCr OF28q12 q125q12/q12/q12/1vtgbfag28dDL11MPTWwbd /p91SFVPv/Xz/wy dTDw1iv t17h33qFf sV5q126nA7ebgdO9zuPdzuOdzu/u2rjt 8av/Nq7bfvEoN9m 66Vtqwtp8 WyhStii3h3We8IGJGxCo2Y0asGiViJmJ MOKu6iRWA3HXfTYr0ZxQgrIXwS9aUwfxoPZomQTIVlOpKnI3kqLJPBLB7IYL40yicRNuGm4y4q5 gQmYw5SmXbRcRcdd9GxylIHGXMQUTsRsRMROxF1kFEHFQN2UnEnHXfRopsV3Zzk4SVESKK NOpPY4EMFkijvqRXED1czEVHHGTQhvlgL2/2sCYPa/IwJrfarMnDmhHOjPAWL2/x8maENyO8CeFMCGdGeDMimL2CxeuzoH4Y88NYAMaDViJoI0I2KmynIo6y7VTEQUccdNRBRx10rP w15qDAnIiDitioiI0Iw0QQxgIW1G/y oweQe/mdE52xsFO29lJGzNh4yYdwqQTQDY g0uzRHqOlucYQNjiLFOcYYszdHGKKk5SCmEnVB4D1SueH8Pzo3huBM NYFUPY7khVB7yykPe7CAwkhkAEUHFZciWI4JUC8JKZxxSt0PqdiS6HfWEVWwVO61iuYCNn1LauO ogu8ygQBUXnGoB2S4AWWeyx5nqVTLZbD SHfACyOaG0PwQpo4LKoQtjVHzYy3igqWg9kI4u6x61tCYG/hacLYxNPAtg7PLguwlKGZFeWHDDdcQ/WfNr71kfe0l 2svOV97yfXGC 43XkDfeAE79AJx6AXizReYN19g3nyBf/MF4c0XhDdf8L/5gv/NFwJvvnD4iX9Xg7WC18NP/Lv/0PPCoeeFQ8/zh55nDj3PHHqeOPQ88cbz2BvPe19/3vX6887Xn3e8 qLt1RfhV180v/oi0de74YZr4pmSvSlh03LRgEQMSMTkjZjRCFyuE 1kzEnGXRQAa9xFx91UrGo65qHjHkYxwia8vIQJScyfJgIZMpSlwjITyTGRHB2WqVCWDKYJfwoTJ C X8DBxFxVzUTEXGXUCg2 pmIuOAcJW7CSjTjJSsxqtWo2JexgR4RIIL6FCEvOnMH aCKaJYBrzJ1EhgfBxDxNxUkE77rOiPIywFoSxeBizhzG7abObNrsZs4s2uxmzhzF7GAvCWhDW7A FmTG7G7GHNCGdBeIuXh1EBRn0w5rdhARsRsBMhOxmyUyEHFXZQYScddtKRGivkDduBybCdDNmIk I0IWrEAjPotXsGE8EY3p3exOgczY6enrNQkTE1Y6Uk7O nwTbmCU0hkGhVniZSOlvVMQccUdExxlilOM8VpqjhNFSep4gRVUEwWxonCOFEYIxTIjiplbH6kz NlK9VoJYQe8mQGk6ipea0LYckuXirNnnAphz9QTNtFlFxXOWquEPQ0rPrWKnLXUc7a g4EDxLKp3tpMFnB2CM2DxGCkSSWr4mxryC6rpL3wevaihrOr2/y1VM6uCLKivLD W1fhPd3Gl54zv/Qc/NJztpeesx884Dh4wHPwgPeVA9grB/D2A3T7Abr9ANd gG8/wLcf8Kn828d tv3ePYmytt 757eP/QwsAitz7Qfo9mfo9mew9mewV57xvvKM5 ABx8Fn7Aefsb70rOWlZ00vPWt46Vmsp3vdt65ahLAlkzdqxqIWLApjUSsRtRExB H5r3VQVc9NuumYh4q5qZgHmI4pbGXiU8e2QBAEbeiY9SUJf4oMZqhQlonITDTHRnNMRKbDWSqUI QMp3JdEuYSXFRFG4bWLirrKyFbMgD3HPEzMzcTcdN3SuNoeJo6wopdLeAUJ9SUxf4oIpslQhgxl CH8S8yVQIY6wEbfxrz EoH1nBCvKWb2s1cvCXc9B0HN/85h d2f1Kr//R5OlgmC36a07IejOPw94GDPCWrwc7B18UnVL9vUG7UTQQYacVMhJhZ1U2EWHXUzExURcdARMOKm I8 xLEATt6w07yJCDDNnJkJ0I2oigFfNbUR/sFcwe3uThDC5mzkHP2qlpGzkJk MwOWFjJx3ClDswhURmUFFHJOcYWc8W59jCHFPU0cUZpjjNqGpYgFdgVQg7SuRHCRDC5kA4UCUsq hSwAwCygLOeTL8n0 dJ97kV10JW4WyPCxA2ecYpVThbgWy3TXGlgD1tFU Dxi74PJztqHB2 W1fLSrZSiyb6nGlet3ps55MvyfbXwPZwjBeGMGbxAUAsmOLEnZ1m8IunLPn6WmwzNCgjrOfEsiK 8sJtf/ /Gw8fOt32vc513 te972edd/rX/fd4Q3fHdvwL5MbbpveeJtu023GTbeZN90Gb7rNvuk2R63bt2/ffu eYFnb793Tvn17Zal9023wptvMm9YaN63VbVo7tXHtxIa1oxv eWjDv/St 5eedd/tXvfdznXfPdX2XcNv37jt7/ 3eKZk9xXsvrxdTdh//Pq1mVzJgsdgkL0ScTsZd5BxJ4W8ux6688 IhxY9xk/uhKCnIIHUPoGMLEgb1M3MuKXvMnd0HQ/sEEJki4L0kG0lQoQ4ezTETmYjkulmcjOSacpUMZKpgmfElMkFBO9LLKTjx0DLiyW4QRvazo5USE FRE2Xp3Pxr0smCkirFieKXo5EeUTqCBhviQeSJHBNBXKUKEMGUzhgQQmiCgfQ1jXH9ZDPzxqdWC CHeNtKP/JfgjaP2j1mn9/F/SD90xWhIW7fgVBG34/zVm9rAVhLFPHvg9BELT d1Ms7OVgVLCiQ09B0FM9fhseGDuyCYI2/Ze jFc67KLDLjriZiJuRsGrm4m46IiTDgP OqmQkwo5qJCDDDrIoA0PWDG/FfNZvILJwxvcrN7Jzjr6n4Cgxz mJq30pJ2bdPim3MFpJDqDJnRkao5WCAv6EkwzxSmmOEUrbK3ilcyPAQPCguoVqyFsGbLyIJodrH AWyfQjAK ZPk9aDVk1Z3tdqZ5Gwqo5a69CttMGqteqGzm7stzgpDkC3DQuALvtrIVstyN5RqlkM2c92T5PuZ JFc0NoflgF2VGipECWrBK24kvK2UU7G9TnBsvibKsWsAsoZltB9mJwVpQXbv27/6Z/87WT37 14we3nv7BrV0/uLX3B98ZvPM7I3feMn7nzZN33TzbdrO 7WZj283mtputbTfbVG7funX7vXv4Wm2/d0/71q22tpttd91svevb5ru bbzr2/q7vj1z17cn7vz22A /PfzDNQM/vKX3 7d0ff87p7//nY7vf fkv35Hf jVW//uv8WzJbu/YPcBVwh7xXWZXMlKiDZKBA1NTjrhpEU34/3DeujOYyjCiAjrfW891HbM6 VELyuirIhywAmMT2CWk23QliOwRCgFbJoKZZlIlo3mAGG5aI6JyEw4S4fSZCBF JK4kED5BMqJYIdegFRW9HKKUS6B8mCd8mqc6K3M5BMol/ByicpMDODVnyKDaTKUocNZKpwhgykykCT8CUyIe7no1LFN0LoTE6TfSfidxPA CNrXI9hx J026IfvW wYb5/94IfQhrdnBRvK21BL0N0P7Bj/dDP3jfYkMFG 6z4yP7IGhfb8BBBp3U2C8g6Bd9St3qrnG01hEXDRx20RFAWwelFLN2PGDF/GXIcnrXwM8h6ImTzJSdnXYK067AtCc0443N4pKOShuYHHizC7x0MMMUp maiKBM2MIYWRgjQQKbH1HlAyNYbgjLDWHyEFYhrDxY7UiQ7UeyALI1nPWk 9zpXne61w1qWADZFIBsj7OMWod0xi6dsSuE7bIlugBhgRsh2xgaXDBh6xu rPWQVcUFmbMeEMtWIVtTyao4O1bhLLVUzi7ytsLFq2fP2whWz9lm3WYvkLOXDLKivHDr//zvxt 81vH9207/8LauH9525s7beu9cO3DX2pG7vjN 1y2TbbfMrrtFv 4W0/pbzOtvsa6/xVZ2 7Zt2 /dQ5VVN92 batt/Rrr lvM628xrb9Fv 6WmXW3TLTdMnbXLcN3fWfgrlt777y1 861nT9ce oHazu f5vhzVdv/Z//XSEssK gEPbL3/hWNjdvpyU7nXQykgv0CmCTCIe9twFq wBHeQmzdLRBW4/AEi5IOHyyrfyYvO5DjLB2VLOEF aooP65yrcvG/l4np96A4Je/9XLEARtP bKGk9sKy/eegSWMAF9fwPU9utXlH1u6JgVwFE6Kkd5ZkhZTdHGDp1PwgTpzK VGW0fYoQvRfhTZCBNBTNUOENHsnQkS4fSVDBFBiTCL2JCHLV8dBe06Q/GkIcOuftehKAXT1FBF2l/dx30w6N2J kfP7oRWndinPQ7Sb DsP3XOmhfj8/e8zzUdnyMCDjIoJMc/QUE/eJs2EVH3PTE0xD0dH/U0/8yBL389K8gCNr8B3Ns6i bKzfgrr8gHi7mMX98J7T5D6aYm41NHqss3fyuMeKiI05qfF8lo3jv H9UNr7zwx5PQIeEdWhMhyd0ZFJPZQxs3sCW5riijivoyoSdoooTVGFcbbIwRhQq8Ws5hM0P4/lhHPQlyFUIO SVB7wKXgeaczZ91pM WyFsxepi1pE846gStssudZUJW3EjZxXUrhZhm7d9NUBWlcn2Asgi2X5E7m MCxTOlmo4S35669klcbZFC5i5tvnrwlvALoizS4OsKC/c vf/w/T2mx2b7 jcfEfX5jt6t9zRt/WOga13jGy9Y3zrHdNb75jdeodh x2m7XdY7r7devfttru/B7z93j1YWdvv3dN 7z11c2x3f8969 3mu283br9Dv/2Oma13TG25Y3zL7SNbbh/Ycnvfltt7N9/eten2zk23d2y63fT7Q7f /f IZ ft/mLZZcJ 5crrs/l5J5dy8Sm3kEKEtFdIo7405iPf31j5dd961JamAikqoHsWgp4dTVHBNOU4vR7a9idHmnKcXgdt 7MzQ4eoY5ug9X j2IjMRY2/gqBfT WFqTcAbblojp14HYJe6wtlqGDacGIrtPGU3k8c3Qj2nyRtp9ZB0IGRFGk/tQ6CDoymyIDi3uch6HkdEUiRAeLoRmjdCUJ/fCu08ZQOVM2BFBlIg3CAVgKKLBPJ0uEMHQaQTRJ CRO872 A2j7woFys61cQ9KtJLxtBWPcf11cuc9MfTGEPE3bT4SqCqbFfQJv YAy76YiHnXgagp4eiHrYGDL4MgQd7OLiyOBBCIKgX08jfNw7eBCCtrxnEb2C6IVP3gVB wdFr WTu6Atf7SI3sGDEHSwixcRXpz6YAu04ZMpbuppCLrzmMdJR 1U1EaEreTEf0LQf5wJG9CIAY8a8LiekPRU0kBlDEzOyBYMfNHAlWtYtjjNFCfp4gSlWKleicIoI CyRHyXyIwQoY1WERXPDaG4IzQ0qNaw8ADjrrSdsnydztkzYimsIC2pYR/KMI9mt9CiQuu1SdwNnO5vVsw1l7KKx7Ip6F5yuh6xUgctmxnAAACAASURBVGwlk 3zZPsQud8rD6C5wXJc0CwxKI0CyDZwdnmoXVXOLtbZYOk9uhqL2VrOrqA716pAdhHOivLCbf/wd Y/vtO1c OZnRt7d27s27lxYOeG4Z0bxnatn7i/bfqBtrkH2gwPtFkebLM82GZ9sM1Wdvt9OyvvF7Tft7PpHOuDbeYH28wPtunvb9M90Db9QNvE/W1j960f3rF YMf6vh0bendsOLNjQ9eODeY/vH3bP/ydmJ23B4qVMlYh7FevukHOz3uEDOLLev1Z1J/FAjIezOJB6ugmaN1faSpkeA6C1v VYsJZZvw1qFbPjWcZV d6aNsxd5Z1d66vXbrhE06YPgRBbwzF83wsP/hy3davnQ1Rf9oErTtBUsE0FSTBtOHENmjTaWMwQ4fSdChNh aerdvuRT0VzBhObINenKOCaUrN1jBVLRNfMjAAsqEUGUySAUl3fAu08aTON/MMBD0zJGKCiArI xugtg8QLx/3WkCgHPOWEYywUYSNKtNczMtP/bJ6Elveg0WvkPAOtUNQe5cgoT6p 9cQ9OtZ1CehviTqS3Y/D0HP61BrRxu09X1rsvv5usto7xpWtnXzCReXcDKig5l CoKeOitaKNFMSSY6aaLTRiZrZGQjmzdyRT1X0vNFHVuaZUvTbHGqQliyOE4Wx8qEBR4lCiNEYaQ M2WEsrxSwaNUVyA565QEvYGu2D8n2IZk BBC2DFlPhbDpXleq16lYSQkcyW7FVc4qkLW3LGZbtn1dSAcDdVbQHLLVuEAN2X5E7vfmBtDcIJY fwhpiWRVnW0H28nN2pY1gKyhmLxCyF17MivLC9/7XP8DH/9y394G h3f2P7xz JGdI4/uHH9058TeHTN7d j27tA/tsPy I8sj//I/sQ99ifucT5xj t8dj9xj/uJe5xP3GN74h7bE/eYH/ R bEf6R/bodu7Y2bvjom9O8Yf2TnyyI7hPTv6H9rR99COvkfvhz/80/f 1z I2XlHQClgVYS9 ga5MI/4ZW8ghwVzeCiPh/JkOEdFmD9vgtb/jWEiOdbdvR7afsyd4yZfh6DXB6M5TrHMRXOcu3sDtP0v7hzn6d4Abf/Ak PjeSGeF8SCIBaE6UMQdGgoXhDi cGDoJiV2YgMykwmrJS9dDhDh6k/b4LW/40y/m0btKnTGM7Sig3PQdBz45Vvq 57EYIgsHmWjmSZiMxEZCYqs1GZjcpMRAaVLBXOUKE0GUyTjlProK1HT7RDUHtvIEkEkrgfO7IRa juO4v4E5kPf3wi1fYiivun9dTCEXukWEqgwsx CnhmWUB9wEvMl0ZF2CGrv9qcwf rM8xD0vA4LpDB/CgukzrwAQS/MYfbTbdC29 3pnhcg6AU9HszgwQwWyOCBDDb6GgS91u1Pe/1pjy/lFtIuQf8LCNo3CF6uzcBs1sLJZi5n4vJGvmjkiwa pOdKOrY0w5amGfCuQXGcKo6rCUsWRoEVyOZH8PwIlh/G8kOKc0NYPWEHvHJ/mbAVK5x1Z866M9Ua1pWuprFOxWecIChQFbNqwqo421DGlrsZrBZhGznbqpJ11may5bhgwJsbQPO DWE0sO9o0LmhoBLuQ6OAycLZFNwOzirB1kF1dzl4IZEV5YfOVXzWfOjX 3L6Rp/aOPLV3Yt jE/sendn3qO7pR4z7HzHvfwTe/4jtwMP2Aw 7n33Y/dzDyHLsfu5h17MP2w48bDvwMLz/EfP R4z7H9E9/cjMU49OPPXIxFOPjDz56MiTj44/ 5S5o2PzlV8FhC1DtqgQ9mvf/Ce5MO8N5rFQAQ/liXCejOSpSIGOcsc2Q s/5thongXl50ETHzf9GoKgl018LF 1p3sDtP0vnjwfYz/YDEFbui1ingd4rSUsP/kGBEG/mlS6cDERmYnQZcJmK4SlXZ3rK9wMZ5mw3PcSBEGv9yubyErMGsnS4azxb9ugzZ3GSJaOyHR5BSY qM1GZBmuGs6DhiwqlyRB5dBOogudAn1kiqMQOuD J2zraIOiZkSQGoOkrk9Ta0QZB 4eTqE 3H4L2jyRRf6rqkVch6NUzgTQaSGMjr0IQ9MxoGgtkMEdnGwQ9M5rFHZ1t0LYjziw 9joEQQfGZSIk46EcEZLxsPEZCIJeNKJB2RuUkYDsCRifhqBfDMtgZEibkIeFgkUomPmiiS8a ZKeL80BwjKlabo0QZcmAGEpQNjiGAkG5SsTFi U8wFQw1Y4WyFsbgCVB1AQFMj93qxiQFhPts T6XMrVjjrSp91pXtc6R7Q3qUQtgpZdVbQmBh0Nstk1cVsi6wguuIuXB3NINutiguqmaynFrJofg grDNW1fRG1cUFr1K5yF9pF3rtdYji7gmLW15yzyw0NLgZkRXnhpft3/emVl50fHZ9746WZl/fPvLBP/8I 00v7zC/vsx3cZzv4lPPgU65Xn/K8 qT3tSfR1/6DLJtYgtHX/gN97UnPq0 6Xn3KefAp28GnbAf3mV/eZ3ppn/6FfTPPPzXz0i/nXn/R bcP//TKyy/dv6tCWOAawqKAsOECES5QkTwdLTBR7thmaMPHPBcvcvECj5zZAEG/ni7w04dUld0bg3GFsB8geT6e55HuDdWld3 AFPipQxB0aDCe5 N5Pl4bFLxkYCJNalg6nKFVccRzE1k6YnhOtd1zE1nj3yotZq/1gZJWhV06LNMRmQpnywZlbIYMZfR/3QZB0IGxDOgzSwYphbkQBEFQ2wkCCyilKOpPgof96vO QtgU6k hAeA0OgoIm0GDGSyQma025UFtJygsmMWcXW3Q9vedOTyc63lRffkmIpwn3N2VNr27/sYjweLUibshCII29owGinZ/EfYVYaFoFopGvmQQFMLOsqVptjTFlCbp0gRVAoQdAyaLY2DwUwWvSqQ4jBcqnAWEHURrPABQCzg LalhPPWGBe5WgIN0LINuKsI1xga0ulk0sPy5Y4cu1S8hk07VxQU0lO4QXhqttXw2cpWq9nJJ2ZZ ydatHZoGk9u8TQYLHuXMsvZi9BHwMqvoBx4Y3XXf3us/vNZ3uY0UFmsIcZ7OEHe4TBHmG4JzDSHRztDo52h0e7I6Pd0dHuWNnRJTs8quwkMNItDPcIgz38Y A84EDM6aO498 6z zdedzXGhchYqRlhr75BLsx7gzk0lK/UsGQkT0ULdKzAxgpcvMDHla98PM8Bx5Zm1ZpsLM/GcpWHd6ZaWgKnyVCKDKbIYIoMpchQmgyVF4UzKlaCrcoOVa0Qs5kJ4GDF6co0HkzjwTQeSINHe9 SfqoDV65O8PskrSF6f5PUlVU4p9gNnvP6MN5BBFWfRILCs2KEQFgvlsXAeCxfwcAEL5/FIAQ8X8EgRjxSxSBELl9BwCQmXPKGSO1RyBor2QNHmL1r9JYuvZPKVjELJwJX0XGmWAxFBlbBjF bxSxTGiOAbeTVJC2MIIrlhN2EEsP4jlFKsJiyjuR2QA2SpnPaCGbSBsXVZQ5WyLuKCu7avufYTz xAUrH75A3U8WcFYN2erLCG5Vw1cDZIeXQtgLjw6WX88u1qlrRaFBDWdbVLIr6GawusUsGsoL0cz vfrLr4Zuu3viNL238xpc2XfnlLVd9ZevVX912zde2X/O1u6 94p7rvnHvt6780fVX7rj qh3XX7Xr qt2XX/VfTdcdd8NV913ffnr9VftvL7mW7Dyj66/8kffuvLe675x97VXbL/ma9uu drWq7 65aqvbLryy BwD9909e9 souPpr3BnDNYcgRK9YT96tXXZwvznoCMBGQ0mMNCMh7OEeEcGc5RkTwdydHRPAP4GM2xVVBWHvP rnGOiMqNaSlccVhWVoTQZSpPBNBFMEYEUEUjifmCpbDA/RQTSRDBNgBQ1CHCZJkNpAjgAnCICKTyQwgMpJQP1106Up2ue7gMp1J9G/enKHK8viQgSIkgeXvLwCWC38hXMVFlIeoSUR0gh/jTiTyP DOLPIIGsyjLw9IntEPR6VyjnDeXRUB4N59FwARgLF7FIEY2UsMi8N1JCyoR1hUqOYMkeKFn9JYt/3uybN/ElA1ea40s6gFe2NMWUppjSBFUmrDoiIIqjCmSLasgO4/khvBLFKq5AdsCbAwVsBbIDiFzJCs56smerhK1CtpoVlFFbW8wm1XFBV9O4oPX7CKv2uldDB4NTN ZCtDsTV41K9j4BkW0F2mCiN1GWyS0btCji79PG6lh7OLj5GV5Nw1rfCxOBiQ5aOL4jysp0oe9HV 5tXrl fUOjsvZufp LwzWAJ2BEu1hL3q myh5OTTLl/a7c94VBUZHsjioSwRypLhLBWWqUZQKrjMkMEMGcqSYfA1S4azRChbLhvTauPBFB5IAZ4qKaeQ8P IiMMLHEV5EeNErJEDxWGmXR/2KFVYqzSV5C8goTwEsInyhY9vOjhACIlhK8hJphZdlJlyc1LLjbhYkUnKzpY0cHEHUzcwcQcjOh Q5lQmEg5WcnKSk0 6 JRLSLt8aZcv4/Fl3b6s2591 7Mev weeR08/j89mvME88BIKI8EC0io6A0XkXDRG1bAWq5e553BeUdw3h6ctwbmYYBXoWTgFbzOsqUZkA8wpQmm NEGVxknFo2RpVAlh6zirZAVDeGEIQBavJSyaG/QqruNsH hXUEvYilWVbLqesBU34WxDUHCe3gUXafiC nG7Fcg2dJVtAlmlmG3gbFPCrhJnm9ezi3J25eHs5StmV6Uj11Jc TSa5Ww139zBeVew5KpAVk3Yr1x5XSZftDIJOyvZWcnBJhxswsklXFzCzUseIYmUAYf5ypWgL4X6 Ul7wHA0AJygTXkF5oAbFICIkPJzo4UUPLyK8iHCihxPdXNzNxFxMzMXEnHQUjJDioCLK2ChUxEl HHHTUycTKjjuZuJONu9i4ixWBwSIHHbFTETsVsZERGxG2Vh2yEiFrZWhBMK4gEbESESsZsVIRGx W1UjEbFbPRMTsTs1NxGxW3UjErGYPJqIWIWIiIhQBDwSqjwZqJqAWMwE1EzUTMQsYslAjTCSsjW dmUjU3ZuJSNS9v5jF3I2PmMnc/YhaxdyNiFrN0nK5/B4885/DmnP 8MFJyBgitQBP8rrmDRESw5AiV7oGQPzFv987B/3uKbNwvzSvZaxut0Ba 0UsCOU6UxqgRG6a8hLFkcJUDBVRgm1GlsGbVofgjNV6PYWsj2I3I/IvepINsHIAusLmZdTRKDM00Tgwphm2SyDXHBopBdvfFk68ftru1gUK1kB1tDdmTxuGBVItoV5wY tONsYGiz9U2o nYnBhUB2OZxdAmGDJUegVHmn69pMrmgmYhYyaiGjMBG14BELHoaJiI2M2qmYnVYw52LEMuDiLjb mpGNOMC5frQH77HTUToZtRNhGhG1k2EaG7WTYRir4g/EgjAdgLGBBFZtVtmABCx6oDMDaxHjIDIbH9vqMiGBABL1qaG29m9O7uDkXN fm9R5hziOAYbbnPMKcW5hzC3OIT48EDN6AAQ0a0JARDZuwsAkLG9CwAQ3r0aDeG9AhAR3i13l8s x6/DgHfBnXe4BwS0iFBHRLUISE9GtGjMSMhmsiEiZJMdNLMpCxs2lz tC4z PwuLgNzWZjLwpxs4WSYl2EhZxXyViFvFQpWX9HqL1p9RauvCPtKFl/J4iuZhZKJnzfwKrZypRm2NFVp3aJVbG1B2BGyOKImrIqzQ1hhCFMIO4TmBxUrnO335vrLhK24CW fVcUEzzraKCxq7cK08LrgwwrboYFCOC8qZbLWfbJNMViHsCDk/uhTCLr kXQpnl9Kpa4mvgS2pBWzJicF5OfvpgewyN1TY6gzOO4Mll8qVuKAyLsE1abmg9wb13pAeDeqRIB gNWo/4jIjf6A2a0KAZC8F4SEFexVjYgoUsWMjcxEET6jcifoNHMHh4g0cweASDx2fw AwAdm6uaoWG3Jybn3Pzcx5 zuPTe3x6xK9H/HqPf65svcc3B wWdE5uxsFM26gpKzUJkxMwMWHBxy3YuBkfN PjZmzcgo9biHELMQ5T4zA1DpPjMDluIcZgcsJKT9qYKQc37eCnncK00zfj8s 4/dMu/7TLN 30TTmFSQc/4eAm7Ny4nRt38OMOfsLhm3D4JhzCuN037vCNO/yTrsC0Jzzjjc2i8VlMnMOlOVKao5JzVEpPpebK1lNpPZXR0xk9nTHQWQOTNbKyic0ZuZzy bJcwcgXTFzBwBeB9Rx4NVZ5s2CGqfYcqOB1rM5k1SNkCYzYDyALrKAWKwxjZcIClzk7gOYHQHuX NzcAIAusLmZrCdsYyzZUssmm/WTritkWr3s1dJJdpAvXyrOCxs sLXeVLWeytQ1fuUoXLnUmW6lkgZdUz14qzq4gnF2sO5dwHshelsTgQiDrWj5h3U2L2XIl66ol7D dT2cKsxz/r9s 4fDNOftrBTtuYKTs9Y2dnnZzOxetcwpxbANQzeP0Grxp8AHk pTwse9bJTtuZKRs1aaMmbdSUjZqy01N2ujJHmW lJq3UpJWastGTdnrSTk852CkHO 3kZpzCtGJuysFN2dkpOztpZyftzKSNHreQIyZs2OAd0iNDc54BnXtA5 qfcfbPOvtnnX2zzr5ZV5/O1a9z988hA3NI3xzSp/Oc1bn75jz9c95BIz5spkYs1AjMjFrZcSs3ZuVGrdwozI3A3DDMDlvoYQs1aFY8ZKGHLMyQhR20s IMWZtDMDFrYYasw7PCPOcPj7ugEEpv0Jqa8iWlMmqpxcgpPTuOpKSI1TaSnycwMmZkls7NUdpbK 6mhZR d0dH6WyetUH14wo3wtTjHFKaY0RavYSteWrrUepZRYsEpYYLw4gheVlKAKWQW1g2iNFdRWONuEs C0gq85k1YRtkcm2HL6ggbBLymRX3PbV9KWv vcRsur3EWog26yYHSXnR5dC2IvA2Vb57HJ7dC1pQIOVNn8tvZhdWUeuS1DMus/H2cr4sN9MZfNTTmHKKUzZuQkbMwFTYxYSVH TNnrSzkzZuWkHN PgZp38rFOYcQqzTgFMzDiEGQc/7eCnHfyUgwOetDMTVmrMQoyZ8FEjNmrCR034qJkYK3vUTIyZ8FFTdc6YhRiDyTErNWalxm3MhJ0 dB/WjjRuzMmMwPWahxyzUqIUctZAjJnxQj/bPec7OuHqnHb1Tjp5J 5kJ25kJa9e4tWvM2jVm7Rq3dk/Yuyft3ROO7glH14Sja8LROWHvmnScmXb16pDeOaxPT/QbiAEjNWiiB03MgIkeMNL9JrrPSJ3Vk716okdP9OiJXsUkcI e7NGTvQaq18T1wcKALTDkCA87oqPu JgnMYYkxrxlK9PSmFca8ybH0OQYmhxHU NYehzPjBOZCSI7SciTRG6KzINPMJxSvhYm6cIkVZygixN0aZKqsrUpXkfVriMsqGHVhC1zdggrD GKFQaXnVn4QW4ywi3O2roxt4GyqnrCLDV/Q7HWvZY0q2wKpJ5XBYpr3Llikq6yqki1DVnmztmVcAAhb8Qo4uwhql9LfYNnh7PJbwJpC9iINZX ApIbuyuKAxMaglrIOfsnOTdnbcyoxZqFEzOWomxmByDKbGrfSElZm0s6CKnHJwUw5 SkEqP2nnFNu4CRs7YWUnrOwYTI9aqBETMWhEBw3ooBEdNKJDRmzIhA Z8CEjPmTEB43YoBEbMmJDRnzIRAybiWEzOWwhRyzUKEyPwuyolR2zsqMwO2JhQEU5bKGGzOSgER 8wYH06pHfG3TPl6J60d03YOsfgzlHL6RHLqRFLx7ClY9jSAaZH4Y5Ra8cofHIUPjlqOTkCd4xZT 487Oqfc3TPenjmsdw4/qyf7DFSfgT5roBSAzhFndHiXDuucRU/PoJ2zaOcM2jWLd83gnbN45wxxeobonKW69cwZE99r8fdZg/22yKAjOugSh9yJIXdiyC0OusUhd2JQsTTokYY8ySFPcghJDiOpYW962JsZQTMjWGYUy47h8iguj HyGJ4bJ/JjZH6cLIxRBfAuLOgqUP4k1EXxSlXfnR8hSpWIQBkpChRceHEINHapKlkFtWrCrhiydR25ztdVt q7tq9nrXqszfEGL0Q4XGb5AUoYvKGeylUp2oDp8waKQrUXtJahnl9HZYMmhQeNH1FxIMvsph yKrCbsvDOolLFqwhYmHfykg5 w8xM2dgymSV cCya4YIILSVxI4sISF5b4sCREJCGSFKJlRxTziiU IvFhiQ9LXCjBhkQ2GGfKZstmas0G42xQZIJxNiiyIZENJdhQAhxRcUhiQxIbSrAhkQmKTFBkAnH aH6P8MdIXJYQowUcIPozzYZwPY1xI5XCdUS6McWGcjxJCjPDHScUiFRCpQIIKiKRfJPwi4Y8Tvj jui FCDBdimBDDhBguxIExXxwT4rhPJPwJIiCRoRQVSlPhDB3J0JEseGFXeW1XZSaao6M5BjgGnAdmY wVgJl5g40XFYpGLlzhR7XlOnOcSrS02MSuWahwvsfES09zFimm1Y40u0NEaUzXOU9E8FVFeXWlw DpgADtcbr1rGQ4s7iwdrjJ3HmbKbLMWDWTyUre48LCunpJxwnorkwQXSsYJyH5TbVWLiJTZeucn zFZ//v yCzastNbfQwr5WTs77GxxQOzUfSM0HK06qpssOpRZaOZw jyMrdmZ1HD3/OvORzLx6TihdnxhkC eUlq6UXJhx 2fc/mm3f8rpo4PSu386sWnXI5t3PbJ516Ob79 75f69Wx7Yu/WBn2798U 3/vixbT9 bNuPH6/z1h8/VvUDP91y/97Nux7dtOuRTfftqe5q16OblWm1H92869HN9z8KjrLlgZ9u/fFj2x58fNvuJxQ/ Pi2B2uOsuWBn26 f /mXY9sum/Pxp0Pb9zx8IYdD23Y8dCGHf9feaLihzfsVLxx556NO/dsvG/P5l17tzzwU3CI7bt/tv0nP7v7Jz9X Wfbf/Kz7buf2L77iW27H9 2G6z2xPaf/Ozu8pr3/OTn9/zbv9/70H/u2PPUzkd cd jT /a 8tdP91//2PPPPC4Zs2av3D 80dddZDNFs8pvbXScnHOG5lDI3PesA4J aKZrT9 LKFJkyZNmpamBx5/JpKpxAUlZ4WwX7nyW lcyUiIRlI0EqKBEANx Z5/ /nlPmFNmjRp szogcefiWSa1bBfvfr6TH7ewqYtbNrCpC1MKijlf/Twk5f7hDVp0qTpM6MyYRfqCfu1b96QLczbBFkxL4eTxZ2P/OJyn7AmTZo0fWbUkrBfv afsoUFh79YcSRV2rX3l5f7hDVp0qTpMyMVYRXOVgh7Y7aw4AqUnGVH0vP3/3T/5T5hTZo0afrMqNzSVYWsQtgrrrkxWzynDmgjmfn7H3vmcp wJk2aNH1m1FDDVgh77U1y8Zx6FK9IZuGBxzXCatKkSdNStUTCzrtDC1GNsJo0adK0HC2FsPMujb CaNGnStHxphNWkSdPF0kOfd533Diwjh9UIq0mTpmXpoYceOvc51d69e1eDsOEFxRphNWnStEwBw vKfOx07dmz1CXsp hLA7WvWtMNLmd9qzZXp5G7w4a 7T67WHjVp0lQl7OU kVXWKhPWFV5wLY wcPsaCFoWAQExV5GwcPsaqKLFVz25e3nnqkmTpiVJI z5CesqexmEhdvXrNm9ewVF5uoStrIC3L5mkfJ08aWaNGlaqTTCnoewrhURFsCtWhnWIOzkbmj3y ZoSc007XF/DNlu6e/eahvUT6lVriVuDYOWgiSbrlwMCMKNuKdy Zk175yftByqTphqO6w9jpVN0M9A25fo1XQmj6n0gi7GGGzKyRsmW2qh 8q4VSsUwTmtEoJKkvVhKquWYtO9bbqb6tn0mz96poNS H2NTXobL1UOURdPdx0k8oWFWprhNX0 dRFJaw6CKzSQf1bf9FaVi4rYWuAVY/Yk7vLc puTx1hmy6t7B/afVLFOJVU97PJ7a8LZ1WVaeNBwdL64y66tPEvRJPDgQpXCyU0fSF08QhbW5mc3A2VK5xL8mh4Ef oShJfaW6uOKiqg7j5ZAaz6 tVsqnKz2dLqAVSEbXUba 51izq3cc1F0t6lLF2kjq6RxllNXwhdNMI2tE63AsjF0bIIG80sqF8skC QsDWPyar7ALev2b27XMGq0FPz1N/AqdpMoDynkiokTu5uBar65wWwVrP1a4ru2qX1YW7rpcp0Y0pQv8numj8dWkqg6fOsi0XYJrXLyd 1K4bXmEvxCXU7C1l55LWJr2asUuaDTQS1bmyytq4pb5QmVI9f H1S7jy2yq8a9LfLU31hZN5xPXYseVP6TUHOyGmE1fX51GQgLrWlvv jdLy8nYTVp0qQJ6PKkBBe/B bqETayUPESCQs102pclCZNmj5jumwtXRf52XDZhFWVqi0Iq9WwmjRpWqYuWW8tpWBtaDi5SJBdV cJqKYEmTZpWJO2Ng/MQFgkvAHs0wmrSpGmZ0ggLCOsJV60RVpMmTasjjbDnJ2xlgUZYTZo0LUsaYc9DWI9GWE2aNK1UG mErOex5UgIkvBDTCKtJk6blCBD22OdRK6hhAUhrCRtZqFgjrCZNmpalhx56aO/nV8sgbEQxEtEIq0mTplXSxfqI10 NznsHqjVsGbI1hPVGFirWCKtJkyZNy9IDjz8Ty1Sz1voaViOsJk2aNK1Y9YRV5bA3ysVz3vB8xb HM/P2PaYTVpEmTpqUKENYbrloh7NevuVEuLnjDJaTsWGb /p/uv9wnrEmTJk2fGSmEVYUBNYRFQkUkWPQEi55gMZou7dr7y8t9wpo0afrM6NznWnv37j3vHWhJ2K 9985/kwoI7kHcH8q5AzhXIRdLFnY/suwT/K5o0afp86Ny5c/znVKBL7HnvwAOPPxPPLKCRqsuEvfqGbGHe6cs6fRmnkHEKmUiy8KOHnzzvHi93R2BNmj7nOnfu3 GrQ71Lo3OfxhS6gYxdI2K9c9a1s2MdHRgAAIABJREFUvmRnkzZWAg5Jubv/7edLPLAmTZouhnie1wj7adAyCJtdwKJV5wBhv/yN6zL5EkzFLWTMQkQtRDQoZrfPElHviyxiOaNH02lMvleJ4PBAKxWExUKZFIgK8VSZKUTCbD4bB G2E JLpSw/3jFNZlc0YyHTVjQhAZNaDAYT2/e9egSDwx gJbyvKNJ0xdWGmE/u1ouYfGyFcJ 6evfzOQKJm/AiPgNiN A AOx1Mb79izxwOAHaHGGXhTC4ofXrj2Mr/5 L58 f1ekqSyNsJdHTT6qdtlaFmEreCVqCCsXjF6/AfEbPD69x ePpTbsfHiJBwY/QK0YCkFQzdIaiOCH16493LdSrNTxCD 8VvWBjHv6lr HxqU1n/G4pF3Wb7 sSwPns3TOVtbU0Pypl0bY8 vkbqj 07guWJeesDHFRKxK2KszcsGE o1evxHxGby wCoRFtyr2qUqGFwgFxoJW/l2VYizCqe3Z8 ydrHcI2pg/exII zigtvXqLF6cvcqIfbSElbMLhCxqtUpQdGMBc1oADgYT29aUUoAeApU Wt0rpa/VSz07Vl7GK98Xy0Z6 q4xhWg8vetCNu3B1Sc9Zu0PErfnsZKtSm/qtuXD7D28OE9TSpcsHXfHtWB1 7Zo964 ZyWZ9VwLapLqZC85elVL63mDiwLEpouQBphF1VzEKo YnZNO6ys1V6udMsMrpa u0 qt6lucikJS8aqrrZ0ZXNFGxmxkRErGbGSkZCY2fLA ffYlLAAqWq8nqurcMv4U/6tYKUMqb49e/oWL0jBloulBA3wqGzS5CiquWo1SQn69qg5VcZes/igfHIVxOKH11bOCuym6ZwqYVucleoGNqQEi54eOJO6O9Bs95ouhloRNpVKZTKZVCpV bX6IhIWbl zeC5wcje0 2RNoXtyN7SmHa7fEqxX3ueadvgSE1ZeIONV50pKb61rs/mSkxWdrOhgRAcrRiR524PL662lJmwdXs/VZwgV2lXrLFyp18q/800Jq0ZeY165lE2aHqXVs3bj/LpDQLV/CZqvWUZszZp9e6C6AFo1p9VZ1V9LA2EXP72m91nTpVJTwiaTyUwmc91116kh wUlbFMOqopYqA6XTQGqXh8UtZeWsAl5gYpXrRD2K1d Sy7Me3wpxUIqmszf82//vsQDgx gCkMb8XquIaXt27P2cJ8C2Ab0QFBTNKgrvqYMqt9PbZG4yFEuAmHryl91GFI gWUStum1rISwtXeg8ao1XRw1Ehbg9Utf tLNN9 8a9euCmS/iIQtV6Q1gtvXVGY28rQVYet282kg7Fevvl4uzKPBbMXxdGHH0t6abdrSVYfXc43tYH2q5LJMhz1 qfvRVH2YVttS2kJ2nhq08ETdsUn UxVOCeno2ewxvQtjaHTaczHnmNE0JGq9FfZxFUoKGP1R7mv3N0XSxVUdYgNevfOUrbW1t /fvP3To0CuvvAIg 4UkbLOWLhUcFdg2ErZJSlAbN1wmwtLiAi0u5EvKyC835IoLRCRfsZhZ0sgvF9AfthIl1j291jwB K9 Wm3EqayhzFsthq9lj7U5qj9IsTFhBS1eTdWpmluvTutNrPOG6UrT2rBqupXqBi7d0NUsJqvdZ06 VRHWEzmcw999zz9NNPHz169PTp0/39/ePj4319fZlM5otJ2ETdI/7ukwlVG9aa3bub17C1m9W2dDUECyvVsghLxxfo AIjLjAqwv5TrrhARYsVi5nSfY8 vcQDgx8g7Z2u82jxzEHT511Na9hGfWFr2E zlk5YSVbY2oqwJSpaoqLFRHbZhNV0HmmE/WJL66312dUqElZxIlPa cgvlnjgy/2jq0nTZ0AaYT 7WhZhWbHqfLml64ZccYGMFCoWM8UdDy87h9VSAk2aWkkj7GdXyyBsboFNLHBl58u9ta7PFeaJoE wEZTwo40E5ni7e82//ucQDgx gyzDyyxJVbtq5WF2TLv3D/qU5ohZirKo0wn52tSzCArbyiQW Qtgvf NbucI85s8o9mXiqcK2B5c6Ajf4AVrGyC 1tOvb0 z1gVVT9bXV5kkopNaKzqDlmYOXguvPptlB mrfa63fff35LakDw3JOuGm/N42wqyqNsJ9dLZ2wydwCL1WtEPYfr7hOLsyjQspbdiyZ37zriSUeGPwALXXkF7x2PBT88Nq1ay/ib7K6U lFamtqthMFi7Xz /ZATYeCUb8EW8dY9XsGVT5f4Gkv8T5ohF1VfREIe96o8LOrpRNWkKoulJSRX66V8yUvn/TySS XRLhkTMpt3PnYefd4bAUjv6h7 gO4HG493Mnh2nFV6jp7Ng5iUr9CdVeQaoyVKjdavFNQLRWhymmq9lt31KW9ElZ9jaDJEVv9DVAV 4OoVcPWQMaquwvU3Qf0 Q X8myxuXcPWHgWv e9QFdeNS9V/LBqu4gupXC5nMpk6Ojr WKv33nsPfK3ok08 gWH4M0fYi/l5Op8KnfcOPPD4M6ncgi9ZtULY/ dr1yiE5ZJeTvKyiZiU2/CjizPyS7Xfe 1Lq61eZILUv6iNw5qoBzFpWOFcLTvOmxLUvChV0/NtVY9rAG1cnFCVsz3XplVWVb835X5cbWbN5QGS89Jag7Ss1/R8MV1C2tnEjtNX1hlcvlOjo6BEHIlgU6wMZisUgkFg5HQqGw3x9gGNZmc5w6deozR1hNgLD ZNVVwuYKJUxIonwS5SWUk2JSbv29KydsHV7PNRuBu/pifBPOnqtbucl09S2nFoPFtHypSaUWcATgbc7E uh2KYO/1G9TW9KtiLCtrnQpp7eCHBZvNghDXULcpADf06cBtqxcLvfuu 9W2JpMphKSJIoJnvcxDEdSDIaRdodrembO6XS/81/vaIT9zKlC2EBKcWG nBLkCvO4L4ULSUxIYrwUXylhz5135JfG0nDlhAVqMVjMBRAW7LIlYZe4k6WGmytLCVoTdrk8bXW NixNWnRC3OHTfHmhPnwZYRYCwlRe3EgkpHhej0RhJMihKeBDU6fz/2zuz7ziO 1DPv3Cf7kNuJEskLG6SuJzggdd/QOLEi2xTokgiGlsxJJGIY1uWJeLBSu5DcE6OEsOJLFo7KAkiqSEBYhusBAXuIIHBOthmsBLrrD3 7jrkP1Ut1V/Uy /b7Th1ylu6q6p6ZD9XVVb aeTA8MjR0d3x8EgxbitTU1fvDu1teLvGGfbLq2XA0sbjlX9z0WTd91g2vyxv h5NpGjapHPlF7uct10sgvs8j6SUQBzHR0EtA3kiiyBFJQRTYVTL2QeWiW F1Wt9DJne6iCMlqkftJVA D4QxpR0n4l2EPgRaJwx0wSJ4w/r9fo/Hi/S6s2OfX7CazXMTE9OjoxP37z/69ts7Y2MTYNhSRGpYL2fY73z3uUgssbITWNkJLG/7l7b8bn/kB6fSudMlh2bDiq492Ztg Jb8xW8yid/AIS7H6a1C/IaQeHs G8xQ/EO8SuJbPHLjzPBN6DqmNMOl28pmJakAJWfxu5L6q5wHrH czIc4mTq5QDz0D7tyAcOWPTV19f7I7rZPSKxhn3rm Uhs97EjvOYIrdlDq7agJxD9cc2vVHNsgjldxUMR3rEvwioVDjBs2YMMu MTUizBzZqNxnc33ZENV2TDFVl3hr3B2E/1v1HNsQniEhQF0iZpkQBdsDhg2LKnpq4 ENnd8e3a/Ls2366NN yeA0ei8d1tT2zbE9tmoltM1BeKv/hqahG4AQBQAAxb9iDD2vxssvs5w 49eDSW2LX54jZv3OaN73hj/nD8ZG1qsbWglwAAFADDlj01dfWBSMLu3 UTbtikw59w BN2f8LuiwciiVOvv6OaYzp3ugCgIgHDlj01dfXBSMLhTzgCuyixhq06eDSWSDoDCUcggf4NRhKn z55XzVGLYXWSWbPJZJJ6M1xlYD913JNa32O2bmXjt mLrrcTKA14w6LBsA6H02azb2/vzM4uTE3NjI1NPnpkuntvePDmLTBsiVJTVx MJhysSHedgmEPHYsnku7grotLoejumXP1qjmqGhbZUfKu6hhPdiN1e9LCqEi3yaphASBdkGH9fj/S686ObWtrZ2Nja2rKPDY28WjEdP/ w1u3790YHALDlig1dfWhqGBRV3A3jhvWFUzwKRRNpGdYnWrkFy3zlJLqUuPnGFCawNjkBaEBLBk qaxHCmvDBUIRh/zKjSZUXHGxUGNQKVDzhcPjy5cvr6 seD5rN5bDbHTabfXFxaWHBOr9gmZubn5mZm56eGR5 1NzcDIYtOWrq6kPRBC7SuLgNm BTKJqoqUvTsDpNkV9wiLn2SaKXQG4oOz7xijr2nn2RGjWGy0EnzkpcL1qG1NyweQrQ4AUIwuHw/fv3L1/OcP/qycmpub /v7S86whT7BuUVjbC1kWF6kYsOGEnzK0LASvSbTM6yCp0TqPN5oUTOswhR76gO5uUwaJ yDYQGCSogP 7hM0R4fNhRNuOUMy4QSfArH0jRsUjXySzZ6CSgN3GwZFu8kVtgGDAukSIUYttC1yAkpGRYXaU4M m1SO/JKFO13iyCXI2NhrQv7Ci7TrejV7UvJR6CUAwwKKgGFLF 2GDcfkDesJJfiUoWFJFEZrUaKZiCLxEx2xUoWxjWJ D3yIgTCflHZvitrOlQY0wfNRvNMFhgUUAMOWLmkYFokUM xuFgwLc7oAQA4wbOmSkmFxkQqGTewmveFdPoVju6kaFgAABcCwpUsqht3FRRrfFc84cLPDuHbTG EsAAIACYFgWU0M11v2nN S ZhmT0p0uV3CXGw LzTgIx5IW5 6Cc3fBsTvv2HUFU27DQi8BACgAhmUxNVRXN5jIx0WMdsO6Arvz9t15x 68Y3fBsRuOcYYNRJMjm4mRjcSjjcSjjcS2L7d3uvIKd sq5alW I5pZ5Jr8nNjDW7fZQwYlgW3qkGv0xvQKw16rkUrNHK5p2h7U0M12 Q1NVTrDfiGwgb486yh3bBb3sTD9cSjdVakgShm2EfriYdc2vJmzbA6yaxZdBdesu6VzFos2QAbf itTBHVNFvG4Xdq8hlSrQezIzyYjX5aTuXrEHH47jfUkt6QOmwPDZgwYlkXUS1DdYGJf4boLDHqd 4FGd3sBpmDE1VOv1er2BYRiDvrrBJAiXMej1Bm4zds sOla7YTe9ieHHbHq4nvDjhuX1Opw9w6KzmJTO6cKGQVkajx8/nsNfLz52lqYJ uBccscMGq sFsVFG2t11MA1mayKmGbllA2r8CKQCmBYFrKXQK7fQFBsdYOJMej1BtR4ZZuwBj3ekSvu3s1uB2 9Khn3AG/YxzbDD64nh9cRmuobVqUZ sTQeP95o5H6wxlpuuUNxDAG2FdfIR1SRrEhIDKKlDlPFstJxcV7kG6pC9SyiHY/TIiRglTSS9SAQG0oITUOdQEzbRXEuHH9o2IBeImoN1h7na06rt2wbVlyKRfTRYI1r8l38j0XlRm 0Aw7KIGpgGvU5vUDOsqaFab0CaZR9i uQ8m8su3fQMO4wb1h9N8np98Dgjw o0RX7BYhGIrkPFTTc8ogo93gofbgWtv622mrd6e41znNI0XEn7UkGLlIKEh8qGlSxzJbcx1rIVT ULjT7Jod6JlrL2XQFKK6KMhjkDyLl RCl66CwzLIumHlbRhKb0EDGNq0FfznbF6vV6P hb07E5of2FHUVmiRi7tsQZSNeyDdc6wEcywvF4zN6xEr0la5BfUlGLbP1LPJiUbUx7rWKXSF 6WznMlNpB7RYthyUqKDpqmEJFWxedI2lBN3bByR01WTMsZUO2HtRChGCSHRem3ZY lggULhuUQXc6L72VJN AliEwseYharzodf2MLz1l6cyx/hr3/mJPsOmFYpNdMDJtUjfyC20qig5QNi A8m4ZhZXsJUjSs6oWv1s7N9HoJ5A2bqk/JV7QYFu8hlinaWKurNVayYMGwJUyqhuUlK olGOb0ej8zwyaVI7/I/aTlegnE93YkvQS1op 1hl4C4heOy0F6pyuFXgI1cygbVtTdkf6dLuKoyYrRegnITRQNK3TR0P50CX0I5KdchAuO5xEwLI OINd1yxDtht3wJu49FiSLGTaSfIAb1pOz8bAqhhVdb7I3wfAtRVfiwk0b4hKc3hLEbwJRctXJyJ 1s2OKVFN/oIS1Cz1 am6RJLt1WNitq0bR6Eve RCdRqLWobwHrKyfzIU6sjg OQ/mLoqWpX86AYUuXFAzrEQx7X9QPyxn2/uPE/bXERlqGhTldxUIR3rEvwirlFzBs6ZKaYdcEyUoNi/R6Ly3DAsUBtZleeCq6CzaZTIJhS5mUDctJVmRYXq 5M yxD5M6nW6kVgf/wr V9i8YtnRJybB31wTJSg17LwPDauklOPZhcqRWd zDJCRIFZV0uoowrKoESpeUDHuXblhOr3fTNaxC67WJM6xOl3fDDrB1GBoo/C8NUmWmSmjDvlHuqJ4BZNg7a4JkRYbl9Xp3NZuG1WGzZo99mBz5mW41mUwuCVd5eSSVfylCG56k qeysGXeyiZbDIkj32YPEYtwpBc5aq6alLMSqGG/FtpHAVWgSRfVe37pl0upDymSmjDAqxhVwXJSg2LXr2TPcPqdDqJYXVHdauu5JBLZL0c2sGQXE0m 3/1QKEtS0BAmtaGlDEpJ xDwffHa5rpcSHlMldCGBWrq6tfFhvXhhr3LNWAzMaxOMfLLMdSGdSXfNbENxneXkkOm5Kq4DTvE 5YDealpKJpF3sOYe0tApE/ecb8qJN CzSrqSQy5KW3WIZjR6BQxCPfmsUM9DE5/zkrAN2ovfRtRWxbUotuQQf6S4dmXypJaL6jY0wL5Llp5aMxlSNhK0YSsBZNjbq4JkBcP6Isk7nF 4zNKxOPvLLMa4NewqpBHMHb9gmF9ZhakiuYv2nQ9zjU6ZkcknU4nt3KfkuucGHNFWJv/rvImdhrVfZCvD15CU1gKkfv1rH9xpgfTokyedDrAj 6QD2p4I0LJEntdwmA1sx9gF/tuVPAqRcJ2jDVgK8YXnJig3Lv7GaWM/MsBK9km3YU5zahgZEbTRpb6ycHzm3DmHNVfrltpph2TTAeVa1AkSTs8lAM53CXmQRZNtWYw5y5d LMi5NCRwSkbCRow1YCuGGRSymGvb2auJWBYcnWq1wbVirBtAyLNmM9m4lhuXzezZFhB2Ts aF4X7m/FpkbFtqtBU35bMMmM0DLHXNADmTYW3KG5fWaoWGT8pFfjmFtWOH7p9xLINaZpJdgiOtRbXIlmww aegkkzTdDcnVJWpZsBUhbDYj6f6V/LcQ5yA5pkGSI9TgLfc0KhqWWSzwYgsFqBU35bMMmk8nHaaFx1CcgB29YXrJSw6L3bq0kHuduPOx RFcPiV83sTTB8S 4tyY0s9uYVsYFEZ6hrAr/Txd8sSuIGpFaAdsX9riTnJVnD8sNyk0mlO13o3l2TQbiJp5SnXLnUB9TSIeUl5bkNm97cKjBsht TU1T/2JG6tCJKlGXYlMZSuYZVJlsecrsyvuAdEN9YgVULKfxs21b0YMGzGIMMOrbCSlRqW12t6htXCsT KIS3BU98T/0r2R r7/ pTw9F8LfhTwb/nGJQDDFgresLxkxYZdyblhAaBiAcOWPVLDrhCGHcrAsFp6CQCgYgHDlj24YYfEhj3qi x uxzn0xqTOHMuN2sc5A25mPpZj7WvMcPyjvFf3keXDYrEsDr5JVvAsBly5lz9GpPAReqL7FYdOqr be/CoN7x7cymG0uBSbI2Jnzl3XjXHDAyby2WblNcBJBetUa6GsFSNzGpcohzkj0u5oBQMZaylb0ldf oZY2jbzs666VCJAoxgMy38HFH7OqRYH8Jw5d36NiQ9yIr25FPOGd/ce5Aw7aI0OWqM3rNEb1uiaO376bC4Na2k8zq7olKsvtNY2rKIaLI3HcWEZa5VX6lY8rmw4iPUlL R FJRSzVbpSVmBYNQpuWMkfWrmfc6rFATynz76z5o4jhSKd8oY94g3v3lgID3Bp1RU7/cY7qjmmbVh bVjaYnrID KnQlOMWPPweKNF8lRoVdXWHhdvJG3D4vsZMTWhqtG0IcqWq5t4KWvRcUnWEMR2rzWy7wmZWBqPH 29spLVFpedO qrCMuDkixbpkRqJgyJPsVwFFM92Yy3xAVLeJepTjqourGGlFzI0yYJhM T0GsumL9C F TqTe8O7eg0d0ew4c8YQS/XOBPi6tOKOnXv 9ao7pGpb7jQq/JknDi1wuW6wP0fLXyFTip w2WO4St1J7Cfhy0ANqaxBfUxutli3kQB4Xtp62pFb8wuG4zPE2s5xqVA1LXRNLshflSMUHpaBsO cOSZ5v6R0IoUXR1IKpPOVJAw1L1SkoWDJshp17//Yozylu0fy7gCSX2HDii23PgsCeU6DH7esy HrO3x xdtodffu0t1RzTNKzwE UsovobFn0r0O8fb SJn5I9g8iV6v2w7O b/U 9Mcg3ACVZ0Y5LrlxqrciTIHdyxDUnHsvtpXCk3EFJz7n8p6NwtvHNpG15 fqUIwXvJWCgHzbHvPzaW8v2MFIo0qknlNhz4LBuz/7DnmDcOO1BqWuKWbKHT9b TjXH9AwrESZ7sa7aSqLkKuPZ9A2LfuF4g4raS0A3rMpx5c2w2vpJRUeq8GdDtQJaDIu3kcntyfq UI2DYsudk7e W7OGuScY45UHJE4zv2X9Y9/T w0ww3jXFoNQ56V6yh3JmWPG1Nysx1V4C8S/P0liL/16N0qeS3zCbnZxhpSXrRGaQ3OmS9CqIu3SJ4xL3g2TdsKLukRTvdOFHSh4Uec7lsiJqLjrbxC7S 8yBz5ssPMGzZc7L2d0v2UOekm3cpE4w/vf wbs/ wwzXhkVv5LANS7k8lLYAJXdGJE/537/wTPIU69PEN5JzGdpZ3MQS6idqmXIdiKJrZ3qjjDsurmrsEIPMDIsXzp0WSRNeRxcjJTeJ9sQHlS TPucwZUT7b2OmgnwfFKpYTYNiyh2/D8s1YBrVh9xw47AnFe8ze7mk2pdcPWw5zulRvZZeNB/AjLYaDKttBBCzFYFgtP c0dgQQqB Wt2iP2esJxfccOMyOJeidCfBp2ZHyWILyQL0jsBhklA1ER1oEB1XOXbDJZBIMWwGcev33y44oLl J2LMHeg0c8od2TBKvfPhldTHwwIAoAAYtuw5/cY7K65YLyfSvvmwJ7S79 ARdk7XgCU6YIn2W6L9luiqK505XeXQSwAAuQEMW/acPvvOqiuOFIp0ys7pqkKzZhdjg4uxG4uxG4uxNXeu4xJkQBFc0pY8cA7zDhi27Dlz7vyaO44Ui nTqDe9WHTyqqzp01BveHVyK30BpMb7mznVsrQzG5mi0g xmeRsWhMWMoc9tIt TjKmV3sZPB9Xhq0BeyKdhVS8o5QDDZsKZc/Vr7sSNRVakg0txb3i36tBRXdWhY95IcnA5waalxBqTk3W6BCyN6Ud ydCwmRSdEkKcGEpVIFBLpZE3w76RGakWB/DU1NWvMYnBpQTvUi8fgVsw7FI DIt 4LKRXxobj2NBQ7CGHT/ VBxkRNT2EyYSUNuAKkVnGHSGfvTkfXII1FJx5M2wQKEQDMtJljDsUn4My/3o5SK/iKZSCZOLhMlCkolSeEl445Dy21crmjKdLJWgM5TiqH0EEKil4gDDlj0iwy4lCMMu5cuwwm9eQ QXcpIoddqo2pyidIqWZMu2FxWDztAhG3oQqKXiAMOWPVLDLhXIsBJrCfNc8S1SMizepiOnpWKkV rRMJslkUjbojMzhEyaCQC0VBxi27FE0bDhvhhVfhlMjv0gNQvQS4PPpyVeEnljJ719D0ZReglSC zlhoG4piL0CglgoFDFv2UAwbphn2Rk4NS7nelNwwYu900a5YZToEyMAi2IuiO0aqRWcYdAaHHKw lsikEaqkswLBlDzLsjdwZFuZ05RAI1FLigGHLHk2GvZGuYYGcAoFaSh0wbNnDG/aGnGFvgGEBIDeAYcse3LA3SMPeyMyw0EsAAAqAYcseiWFvZN2wCl vQho282vqIrgqB0odMGzZU1SGzWCwj3hQq3pvYEp VB09CgBpAYYte4rJsJYsRX7R4r5MDJtGDgBAI uGrRaaGXqD5D1TQ3V1g0n518tvo2VjQANqhl3Mn2EtmUZ wcbbc6Pl1bc31tKDteC7y7ZhpbFmACAlsm9YXosGvS4TRWbJsIU wblFS9Sx4jEsp7H0I7 Ih8urbi K2EIN5oJNCtASJyW9TwmoYHJoWMag1 kNpobq6oYGvU7HPWbbp3g7l7KNsEV1g6Ghmm8Pp6ztZDL5uEzRGDm3aAybUvgV1Rn05Cx7StQCm blP DQncne5/GEkKJA6uTOsqaFaV91gMjVU8/0FrD0Neu4VE3InZRtxG9agZ9/mH2gmme7aCsVP9gyLUglFfkENUg3bG3kxUqfYg2GBHJPDflhSlOix5BW8bcvI9cOyZk1dsGBY7Y ZdLJnIL zu2rbnGsyUYC7aDQuCBdIjl70EDMNky7DIrWkIFgxbJIbNbuQXSjQ/hTtj3K0uSdwTaROV6ECQC6oCAJopgGGpvQRUw I NTVU69K5c5YEw6ZgWDfM6QKAbFIIw9LvdEm3YRiDXuhsSHtsQbIghs3LULOiMCwAAAqUzIyDdMd JbNrWIk65UwKhgUAIFk6hk2nC5ZhGDAs9BIAQAEpFcOmTTI/hsXH75rwe3p6vahDJJtkbNiDR73h3QFrnE r7sSZc US YVKeU ELe jK03AsKkhmBQflIa1sPHxEuyQYIZhGOz2XtbI1LB7Dx71hHf7LbF S6zfGuu3xlbd8TPnzmssGH2BChH5hZ9NgN3pN8oPrZVkkh0HGWvp VAXiZFWNwtjEyBUTYkAhk0NahtWql1u/Jl0SG WOw4yN wRT2i3dz7MpxVX7PQScKLIAAAgAElEQVTZdzQWjL5A Yv8ksS0ojx9gLqB8usp1kLOkSkvdJhJJSBUTSkAhk0NOcNSR1AUuWH3HDjMBBNGs99oDhhnAsaZ wLIjeur1tzUWjL5A Yv8kkzLsLRoL KQLvh6hdIthcpIoLsspcW6cQnzS3Or1Ur5eMlQNeKjwNrS5LtEfUDV2QAMmxr0fliiC4A0bPYFm 7Fhn97/vDsQbxt3tY 72yfc7RPMoi18svZ3GgtGX6D8RX5JUr3J6YK8ED OFoglor2IQ7pw5SjGhSFRNSx1RSvJXvwmfKgw1VrJZSUXqkbuKIQSxRPtiCA5QIaAYVND/U6XTifqh8W6DrJWCZZMDfvUM8 5/NGrD7evPdq 9minZWTHsh148dXfaCwYfYHyF/klKTasljasXLQX6XRbFL AtqXcgWXFsNw27H9aaqV6vErBHMR/mSj9tuL6ANkADJtDcjxmK1PDfue7h5y yKXbK5furFy6s3r57urchuenP/ VxoLRFyh/kV SaRmWuhnVZcoZSshCLwG/A7eXllppP17SsHgbWeb8iOoDZAMwbKroaNA3LXLDPll10OENXbyx8MWNhS8GF74YXJhZc73wj c0Foy QPmL/JJM3bBy0V7wjdmaKMaFIaH AUjjThc tkJLrZSPF3vRQobLkbwr9xcIYjBkFTBs6ZKpYZ/Ye8DhCX7eO/15nxkl84rjR2de11gw gIVIvJLKqO1qNfFot1pAWQVRz7hG3L3j/DOAeKKnqwV9SUttaJWQiFUjbhEvnLsgA7l gDZAAxbuqRgWLcQAxYz7J79dib4afckn6aWbT88VauxYPQFKsk5XcWjEfymfTHUCgYRZJu8GTaT SmrxiEK5YNhVRcNOfNo9 Wn3xCfdE1PLth kaNiSpBhclkwmJfeUiqBW0AWbdfJp2JyulaJcbtq7FzMpGXaAYli l6B3 vPe6c96p6aX7am2YQEAUCDPhk11L0azRxTKVb2QLV0yMuyTVQcd3vAX6E7XjYWLN bNq84fnVHPsanUewkAIF UvWHfKHdUzwBn2PjAYhz1FdBGa91e fr28tw685NX6jR JOgLpOzQojNstq7Ei CKPieU63EVjrI3LFBTV7/q5uJnLcYHeMM te85tz967eE2SleHtxa2fCd 8S qOWZg2AxGA6U3loDMJNPSaSN508kZYsdUBGDYskfWsE/vf94djLeNu9vH3W3jrrYxl3Un NIvf6uaY/qGtZRo5Bf8FruxVjLONHUsEDumYgDDlj3IsP3WGC9ZPvLLESaUMJoDXPIv2SMvv/aWao5pG9ZSqpFfiHvswrvYqFhxznxLW9OUAeFsQOyYsqIYDMtf9yj8nFMtDuCpqatfccX5GLAD1 rg3vMvFhyWjF76Ru iF3G 6BCO/sH8H Of4u/jS4nzO3Pq2sqpRNSzEjikLwLBlDzJsHxdoW2zY8G7/QoxPq674mbM5i8At/KRLNvILEi11NqokZ4WqUissFACxY8oKMGzZwxk2yjVjOcNWHTrqCe/252sVGbLdmQ/DUjejmkjrnStjLRlRJReG1dZPCrFjihwwbNlTU1e/7Ir1LkT6FqJoyRgPZ9hj3nByYDHBp/RWQlT4ejWVR QXS NxvH ANFGGhsVOA8SOKTMKaFidPOTPOdXiAJ6auvplZ6xnPoIk22eJyhp2NXeGpVxOch0F/BVs8UZ kbxHa26nYlg8O4gdU94Utg2rqlcGDJsxrGHnwj3z4d75SO9Ctg1benO6ykkCEDumuCl4L4GyXhk wbMYgw3bPhXjJZtOwJUkxmChLQOyYIqfghmWgHzbH1NTVLzui3bMhXrKeUIUbFgDyRTEYlmEYOb 0yYNiMqamrX3JEjTNBIyfZbBq2JHsJACBfFIlhVX/OaewIIGrq6pfskS5zgJdslg2r8PUCwxbDlTtQQMCwZU9NXf2iPdI57e8yB7pmgsbZoCeUKJRh1c byqA5yUkA8wEAyVYy4ly4djqCDWCpADgDDlj01dfWL9nDHlK9z2t9p9nfNBJiCGdbSqBL5JRMfS UeYIskSQVuyWKKWrMCwlQ0YtuxBhm2f8nZM TqmfZ1mf8EMi2wjG/kFG YqDLckZ5FiW4nUJTvpQPHmNjHuFWKpAFkEDFv21NTVW23htklP 6QXtWQLZVjOQHKRX5KUXgJBkOSUd7pSeYQdxL0GYiR7QSwVIKvk07Cqt53lAMNmAjLs9QlP26QH tWSZYEEMKwhIJvJLkmJY3ixswGpp96l8KBOJk/igLRLkvQyxVIDMyZthc71WCiBHTV29xRa6Ps5cn2BQS7YwhpW48TgZ SVJvdOFggJwKwIodGuqNGmT2qJVQSwVIJvkzbBAoaipq7fshFrH3axkJzxMMJ5/w4o7BKiRX/CtxLPta2v5JVc0hjLhNrMQQVuU9uLrALFUgOwAhi17WMOOuXnJugtgWMrFLxH5hetvFO508ftKL sapA6xEjWTxqAKF4VgQSwXIJWDYsgcZtmXMxUs2y4YttzldEEsFyB5g2LKnpq7esh28ZnLxks2m YcsPiKUCZBEwbNnDGdbZwkkWDAsAeQIMW/awhh118pJ1B6CXAADyAhi27Kmpq1/YDl4ddfKSzbJhFb5eYFglctcFITNcAcg/YNiyhzOs4 qo4 qo85rJWUDD5iDyC7pZL5lboH3fXNhHY7YKw4GzUgEIPVMEgGHLHtawIw6Uro063YFYGUV keRpaTx /HiBnVIkhs1unkBagGHLHolhr446CmbYnER sTQex2ZaGWuxFRWFLfkdxblZyC1JG E1pOXJBmoRFYMfBR/khbovVhpeCWMWYtAI/0LomYIBhi17SMO6CmRYzijZjfxiwWJoSV RrowtzQ3fV1IBoULSHghRnhYsUAt/XGJxY4Yi9lVow2Yeg0aY8gChZwoGGLbskRp2pFCGFSyQ1cgvmIuFVhk1IAA1N8m0K6yBKK4z8dR CCzJAGpZ6tU7uSyku4xg0cueBPCh81hll9h2EnkkfMGzZUyyGlXjseLYiv4gajNjVN9Ww1NwUei oLadiMY9BoMSzeNJY5GxB6JhPAsGUPb1jDiB2lghhWfLmdxcgvsp6i9BJIcyO2JNDQS0A1LF2LG noJiAgM4qriZ08tBg1hTKU6430IlFpBF2yagGHLnuIwLOXaU3rVn2bkF5VWLe0Kmuy lOQpyQ2voSRPGVtRjoKsD63tzO4oalUSR60lBo2oH1a8DdFSZt E0DM5AAxb9igY9qgnvNtvTaA0YE2suhM152BOV9FQJDFoYBBBBoBhyx7Zfti9B496wrt9llifJd Zvifdb4qvuxJkUDQvkjiKJQQNdsJkAhi17FA0b2u2Zi/TOR3rno30L0RVXHAwLAFkEDFv2yBp2z4EjTDDRZQ4aZ4Lds6GeufCKK3bm7HnVHKGXAAA0AoYte 2QN /T 593BeNsEWoTW32UOLjtjp994RzXH7Ed kbsELr9bLOV3RIAiYNiyR9awTz3znMsfvfrIdm3U0TrmbpvwLNkjp954WzXHXBlWbXxoihhr6fs aayV35NmSdBIyNSF1LC0YtsIAw5Y9sob9zncPOX2RS3cfX7m/ c3DnZZRp9UWfvm136vmWPxtWNaXtH35 zbEWNyMSqRXgswKDFthgGHLHiF6ocSwT 494PCGvhhc/Gpo5dLdx4bhbct28GTtW6o5ZjynizbGE2/f0V5nY5FYhDgmfKQYTSu/siiEICBfxCWcbvgVyVNLI8RhqSjAsGUPWuOAjQ LG/aJPfvtnuCnfbNNNyxffrt86e7jhS3/S798UzXHTNuwwkx3TFLHKRFb8LgBmM6Oc2EIuAcptH/xoUe0YUiSvTIPvyJ5iuUgzKGCOCzlCxi27OEM65Qa9q f3mdjAh91T33aN9t0w/rVrdX5Dd Lr/5WNcf0I79QW6xJxXn01FeoDyRkxbCZh1 RPJXGBIA4LGUOGLbskTXs/3n6GZs78JfO8Y97zJ8PzH/57dLchufEL36tmmOas2YVIowUxLDa kkzDb8ieapsWOWzRNYHKHrAsGWPsBLiqBN5ljTs9GcD81/cXJpbz6VhJRFGJGFiRb0E1NfF aRkWKwDM U7XZbMwq9InkrOA8RhKXfAsGUPbliUqL0Elq Gluc2vLkyLBlhBHtJGnNE7vWkVsPil9rc/SO8c4AcrYXtqRD3RDSmS0P4FXxjrE9ZtLG4RIjDUmaAYcuemrp6y07omkkwrBu/0/VZ3 zFG5Yvh5Yv3Vmb30ynH7bM53QVSfgVan2AogcMW/YIhjWJDftk1UGHN/zFt0tf3Vr5 u7jKw82F7YDL/1TamMJyp4iCb/CA12wpYXEsF6vN0DD5/OBYUsUWcOiGQeX761febBpeLhzbcRu2Q6erP2dao4VZVgAyASJYQOBwOHDh6uqqqqqqvbt2/e9732vtrb2vffeCwQCYNgSBRm2xeRiJWviDPvUvudcgdi1R/aWUUeryXV9zG21hdOYcVDmvQQAkAHUNuyJEydeeeWV8 fPNzc337x5E9qwJQ1vWJSumVxuLvLLYXcg3jbOtI0zbeOe9nHPYlqGVfh6pWDYbE cTZMi6AcoNwpySovmcyT7YZFk33rrrStXroyMjCC9MtAPW7Kwhh0jDIuiF3ZO TomfR2T3vZxxroTOpnbOV3yQ42yadgMBjRpLE5tAANtqILMGAbxboXpY WrllIN0jlX0pOkK9UIO1rjCiHDbm9vu1wu/hfk8/kCgcDVq1d5vTJg2JJF1rB7DxxhQomu6UDnlK9jwtM25rJsB1589TeqOaZvWHZWPu27mUXDKpSia d80DYtD3vCXHYcrMx42bxDzcjUrNpNzlcUjzXX tALl/jKQnzIyrN1ud7vdHgy/3x8MBv1 P/ K1 v1 Xxg2JJDYtgWk8sdiLNrHDChRNe0v3PS2zbubhmxL2z5fvbzX6nmmLZh0ddeZB/q FC8FWAhQqWItqF8zSmlYI202kZRpBUtxWF1lFaR/iumTGbQFr6Aj0WgUkO FvgS5US1JM8l2VKKlxyCtNDGWslLXO61tZoqTH5IlPNVIhF2NM8YRIZ1uVzIoQr4fD4wbCnCGdb dMuZCnhUZtnPK1z7BtI46DMObcxuen/zjOdUc0zUs96UTvrREkBfqkteSKV4qM1/JUsTCE7XZtBRH wUpNpFoP0r5eAii62bu165QQyxGQm0tanAaa9m5DPy8NVpIGkljVSidbLRSTws2K46c9KF8SlXb mCUXYUfVsNxjZFiGYUif8lbFAcOWHMiwrWNulFrGcMMGEx2T3rYxV8ujnSv31mYfu3985g3VHNO P/CKIVWg4KIUgoEzb52MW8hDdmgqlJGmFKheXlGloyxlW1lnyhlU CUR9UBegsbbWiBqvbBMWtdNpM83Q69qvplVPi8K0OuV9ZcsttQg7KRqWlKnf70f/SgDDlhw1dfUWG9WwB44wwUT7OHPd5Lj6cOvSnRXzmutHp19TzTHj LCcqdI2rHz7UaWUZOqGxdtTVKcQPzLFDjrlJpixVk5nScGwlsbjtUakWfYhZgHOs2QNZaVAvFoA w5ZahB1Vw3IbIMOSJpUDDFty1NTVW2zh1nFZw7pbR 1Xhze/vrVsXnX 8FStao5pGVbctBPCppA9ALLXmNhlssIXnyxF/KL016tWnOQVaR oUvn4U013ulCFlWuYTCYtjbXHebnV1tbWoqZ6rcgZxFmS atAXB jS3L5K31crHQhpt5LwNVD DZIzkmxRdihXuvI3 mypQIYtrSQGLZ1zC0ybNuYu3XEbhjeSNWwYQAA1EjjFwuGLS0Ew47TDNs 7r4 ar86vHnpdmq9BEuaWeRYXV29fft2c3Pz ///777/8Zg3wFSI/3xTQ3N9fXsVyAFrGkjjFwuGLS04wzJckhqWuT7quPZw6/Ld1Zm1FO50afl6SdjY2Ghubl5fX0fd/EAeWFtba25u3gBywKaY7e1tm83mdDoZhvF6vahTNY1fLBi2tKipq7fawtfHmetSwx48wgQT7ZPe 9jFX64jtmwcbc spjNba0gz/FbTZbB988EEgEPD5/D6fz sVksfjRWOuIWWY0Jn0eLwM43G5XC6X 8MPP0ypHxCQw07DweF0OtHELTRyAAxbIbCGncAMG8THw0772yc9bWOulke2 c0UZhzsiLHZbOgBGlztcrl2CJxO54ULF/x Ns5FHg4 E7xen98f8PsD1AeFrp06LpfbZnM4HM6PP/7YCeQAl8uF2qper9flcqF4r/zsLDBshUAYlhEM6wkljDOBzml/x2TKs2aphkV6PXHihMfjkTOsz dnGI/L5XY4nMWcvF7f/z1 vPaXv5Q8 H//9m9er6/g1VNNNptja3vHZrOBYXOEy Xy /2HDx9GkgXDViaCYScY1FeAG3a3ey5snAl2mf0dU75FW/hkrdbIL6RhkV6feuqpt99 W9GwPpebcTicNpu9mJPH4331F7 42NQkeXC9tdXj8Ra8eqppe8e2sbkFhs0dyLBVVVUnTpxAkmXAsJVHTV291R5um/C0TXiQZ0WG7ZkPd8 FjLPBLnNgyR55 TWt0Qsl9kR6feKJJ/7u7/7u008/VTCs1 tzOl02m317e6eYE8Mw77z9dltbm TB4OAgwzAFr55q2tzcWl/f2NnZAcPmCN6wr7zyyltvvYWHeQXDVg4qhu2eQ4YNGWeCS47oqdd/r5oj1bBer/fZZ5/9m7/5m/Pnz7e0tCgYdmfHtrKyurBgnZmZK a0vr6BxCp5MDg4uL6 UfDqqabp6Zmx8cn5hQUwbI5Aht23b9/58 evXLmCohGCYSsNsWE9uGGPMKGEcSbYNRPsmgl0mQNLjkjahkVt2NOnT7/33nvd3d0Kht3e3llcXJ6dnZ cNBdzWl19jMQqeTA4OLi6 rjg1VNN4 NTIyOm2dl5MGyOQIb93ve 19zczMfSBsNWGqxhJz1smvCwht1z4DATTHRM VBqn/Qt2sMn0 0l4Pth//3f//3mzZsKht3a2l5YsE5NzZhME8WclpZW/tTYeOPGDcmD /fvLy2tFLx6qunRyNiDB49mZmbBsDkCGba2tvbmzZvQD1ux1NTVL9rDbZNeXrKsYZ/e/7w7EG81uVrHXNfHXNfHXJad0Eua1zggDcu3ZI1Go4JhNze3ZmcXxsYmHz4cLeZktS5db219 PCh5MHExITVulTw6qmmBw8e3blzf3p6BgybI5Bh33vvPRhLUMkgw7ZPets5ybKGfeqZ51z 6DcPtgzDW4bhbcPw1vym/8Srv1bNMcPxsGuP102mibt3h /cuV/MaWxscm7OMjdnoT4oePVU061b927evD05NQ2GzREwHhZgeMNOeTnJelnDotW8m2 tNN9e/fr2avPt1dl1z0/1/6yao7JhFXA6nRcuXLBal7799s7g4NDAjW8h5SoNfNvff7Ovb3BiYhIMmyNcYsCwlYlgWJQmvQwy 7JNVBx3eUNPgwsWbli9uWi/etJjXXC9onjXr0Aw/v9DtdhsMhocPH42PT42Ojo MmCDlOt279 CLL75wA7mHwfQKhq0caurqF 2Rjimf1LBP7D1g94Q 7Zv9bGDu84H5z/rnplecP9Ic YX8A 5Sg2GYsbGxlpaWz4B88dVXX/X29ub a1YReNTA9QqGrRAww/okht1v9wQ/6TF/2jf7Wf/sp70zU8sO7dEL8xlxA8gc1T4cQJU0Tnsav1gwbGkhNeyUxLC95s8Ew9p/qM2wjwEAyBlg2BKCNew0N x1yifqJfisf/bzgfnPB Y/65 dXtHUhqWvqwEAQPbIgxqArFBTV79kj3RO zumfcizTDDB3 kKXxy0fHlz8ctvFy8OLpjXXD uUe HBQAAABCyhmVHa91e/frO46/vrH19a2X2MfOTV oKXWEAAICSATOsX2RYbMbBtuHh9jcPtuY3fT/7 b8UusIAAAAlQ01d/ZIj0jntR6lj2s8a9un9z7sDsRaTq9XkajG5Wkedlu3gS//020JXGAAAoGRgDWv2s4k37J4Dh93BeNuEp33S0z7pbZ/wWG3hk7W/K3SFAQAASoaauvolR7TLHCANe4QJJtq52FodU75FbRG4AQAAAARv2C5zoNMc6DSLDBtvn/S1T/naJ30dk75Fe/jl19TjwwIAAAAI3LAoMSFk2P2H3cE4Wrrr jjTNsZYbaGTtdCGBQAA0Apr2JkAWsdAMOzT 593BWLXRhzXRhxXRxzXHtkt2wG40wUAAKCdmrr6ZUeUXylGMOxT 55z iOX7q1furd 6e76pTuP5zY8MFoLAABAO7KG/c53Dzm84Ys3Fy/eXPzipvXioNbohQAAAACipq5 2Rk1zgSNSLIznGGfrDpo94Q 6Z35pMf8SY/5Y P05JL9h6fU4xIAAAAAiJq6 mVnzDgbNM4iyQZZwz6x94CNCV7oGLvQMfZBm mDttFxy/Y/nPynQlcYAACgZFA0rDvwfuuj91sf/c 14T9dfTC2sPn3L/6i0BVOBYNep9PpdDq9odA1AQCgIuEMG0KGNWKG3b/j9v/3teE/Ge43fnPvj1fumuY3vn/i5 kXZWqoFtvOoNfpqhtMpobq6gZTFo5FgkGv4/KlFoHqo9PpdDqV8hVqyL VxlFgFVCtQjbLBQAgXyDDds GumdDyLMUw/7xyt0/Xrk7OpexYav1 mrcetU5tIOpoZrXOUVDmH8Zgz7tVm4mgsP3xWub63IBAMgXuGGRZLk7XVwvwX9fHf7T1QeNhvum hc2/f nV9IsyNVRXNxg4Mxj0On1DQ7WoDctd1evYtxr0XKNXaO6xGhJe4Jtyog2ErHTVer14W4bdgDSaT AVMfD2FrCTVYv92mPi9qHUVN1VFluTqI9EuPU9quWzd9Ab2XZkzBQBA/mANO0catuqgnQn pXPigzbTn1tH/nx9dNyy/YOXa1VzbKLBMLw7DHqRs3jDiltxpoZqoUfBoOcesxth2xr0egO5AUNTlbierE3FRdIrwNeTlxRf oORqHd LbSULdZNWA3/KN6mphpXmSS23usHE97zgpdMb8tSPCQCAlFBdb4IzbLh7LoQ862FnHDzzrMMb/rR39pOemY M0x8ZpyaX7RrXmqUvesH9wpHa9AZRG03aGyvnR1aDQh4yG6gbluHVhnJSrYC0yVndYKKZTmEvsg iybasxB7lyacbHEP6C5H3dEwAoN7QbtmcujFL3HGfYp/c95/RFvhxauXhz8eLgYtOg1bzm/on n5WzYzjDUt7Af/y4BNMxLIKzYyaGZfMRZ0LdPT3D4v29ckXIdRlnxbDQNwAAuUGrYV2xnnnCsHv2H3b5o5fvb12 t3np7vrXd9fnNrwnXv1N qWSv3blXgKRzqS9BHrRKAENvQSSXldTQzX/gmoFSFvhV vkXwtRDvJDGiQZCl2sWA qgmGp5UofYH0UAABklbQMG2YNu/fAEXcgdm3UefWR3fDQfvWRfWE7oCUCd7qGFV01szfB8C1lbmSxW0k3kBaHdsBeoF2iy1WAcsUtW IvNGbvTJbUhdtdN/k4XKpwzvfQuFqUVTC X oBaOgAAmZGGYXvmwp7QbtWhY7q9B4 6g/HWcU/rGIOS1RY 9frbWSm1JMn8ips6fgEAgNIkNcOihBuWCSbap/xtk762SV/7lH/RHjl99p2slFqSpGtYrAkLfgWA8kGjYVdcsd75SO98pGc 0jPPGbbq0DEmlOgwBzvMwY7pYMd0cMkRO3OuPiulAgAAlDpZMGynOcQnMCwAAABPCoZdUG7DmoO d5uCSI1ZTB4YFAABgmNQNiyQLhgUAAFAnNcNykiUNG qcCXXOhMCwAAAAPJoNG 9diHIJDAsAAKABMCwAAECu0G7YPnXDmoOLjigYFgAAAJGSYft4w4Zphu0AwwIAAGCkZdgoGBYAA ECdbBmWTWBYAAAAnhQMa4n2WaLIs2BYAAAAdVI2rCXaZwHDFh/ZjKOdcV7FGdS7kLVSCCQPlDWVaNgsfL/JEKt5AI8hS12hkR5WHI/gTSzTQKWwMRjTLJ0IT4YFva3mV9EsVOQyMGylotGwq654nyXWZ4mBYRmGKUBzyISv khfW5z3hyASU0N1dXU19kRbnbNwdBnILL3ShTPC7S 8wi8hUTjFgmErFa2Gdcf7LbH 8jQsufYBvmS3gWwMCS wyweQmZgaqulLdqf526L/KMUZYorlG216A/aEXR2B 5GrryhOOyjxomHsSjvYGRGWV5A2JaXL8LDiIzeQe8aYGmQXJBcgNSooTaZWjPIi7aIF2/EsqadR gFhpxQMW3mkYFhrDEm23xIrJ8OS63eRK3Zh20quxImlrvhVwujLa6drWHqNxBkSXRdoqTJWsWzd sdVu1FYUJ8 MkIdej1qIBj2bG75wOpYH ZakqU1uQPEhXm3uYEQLkgungyI6zGgytSKWXxP/1aFcBMieRhzilIJhK4/UDItSWRlW2mtJ66mkNu7wB8qZZOMXpSkHvFbIG5wP SeyqzGqvsIqFqlXbxDlKl44XVQZ8i3Wm5w iQ2oq4fxzVa5pcZE eMviZ9SayXJRO6z03LSqB8HA4atXMCwaobF24lyv/DcG5ZsINHgSzLodXoD1540NegbTFxnQWaGNTVUc/0O7ENMjRJX4vuL3mIrJ9UurS9CzllKhsWbvmTDklYrMCyQMzQbNiEY1lpOhlXtJRBfY9IX6Kb2E pC/vQx6CfDrUQa/oNZJD4bviq3ma4A/kVWDICMuV/r65/pq/mj0er1e6I2QnCxUmQbaWyZuyVyGtq9QGLHMuLxhhWz4A5E527RayX7ilD/A/EM5w4rqLz6lYNjKQ7thB6zxfmu8LAyLX3gy NUodtmIbcHfBBHua0kWyiYzybZhxZXCzSfOkFOs6B1czwqNL 44ZQ KLQA7BdV8h6moE11xQBkAAAvVSURBVAWrjJ72FtmQFG0gLKuOHzNebfKB0mAtcenUWuGfOLlIO/ERKC2ijutackrBsJVHJRq2rCmq1cBlKkO5KZRPiuoUAWUOGLbc4EdnFQPUyhTccEV1ioDyJgXDL sYHrGwCwwIAAKiTmmFRssa9YFgAAABVwLAAAAC5AgwLAACQK9Ix7KKcYaeDi/ZozTkwLAAAAMNkatiDR5lgon0qwKdFe/TMufNZKRUAAKDUyciwew8edQcT16f8bZP tkn/9Umf1R45ffadrJQKAABQ6mRm2ANH3MF467jn oSndcLTMuax7IRPvwGGBQAAYJgMDbvnwGFXIHZ1xHlt1HVt1GUYcS5sB19 7a2slAoAAFDqZGTYp/c97/RHLz/YvjK8c2V458rw9tym/2Ttm1kpFcg5qU6Qhwn1AJAiGRn2qWeec3gjX95a/er2WvOdx1/dXptd95x49TdZKTV3lLYmsBglonBZ6WUFhgWAXJKRYb/z3UN2T izAUvToLXp5mLToNW85vrpz3 VlVJzR0lrQo HoCKXPkwJMCwA5JiMDPtk1UEbE/yoe aTvvlP uY/6Z2bWnH 5JW6rJSaOySakDYKTbTFl TC6DHiuKaSUHmSvUSvkEFnNUFbhEpUr5SPRekMSKI76goaEwsASo MDPvE3gM2Jnihc pDo/mjbvOHxunJJfuPa97ISqm5Q7YhJqwcpbaGlXJwe2GdFHLlK2LlkhQNy0YcxTVLbVpqPxblvZS3B wBAkZSiFw5YScO6Ax90TPyla ovXVMXOicmFm0/OvN6VkrNHZTVPpTbpxqXD9GSjw4ngxhLIs0jj8KR6Llr3IxwAAaCCVdbqE6IW4YYMftE9c6Jy60 Dn5Qcf4uHXnR6dLyrB4E1LOQXjEaAXnSvJR3isLYOsZkM1h7X8btOxFPgYAQANprIQoGBb1w/6la pD4/RfuqYvdE6WXhsWs4b84kuYLImFnci9OGURe5ELTzFiLWqpPLnSIF ZFI9FtuYik5LrdwEAoBWthnXF y2EYdFYgo97Zz/pnfu4d/ajbvPkkv3HNWezUmrukCx3JV2GS3ENK/LuEL qFWU5L2IvmXtfKXiLeteJX9gqpWORrbmkrUqu3wUAgDY0GnbFFe zxHjJ8uNhn3V4w003F5sGFz /Yf1sYGF61VX8YwkyIr0lUAq cAoAAIVAs2FjfQvRPku03xLrt3DrdD217zmnL/Ll7bUvb619eWvti6EV82PmZ7/4l6yUWlQQK5nmcC8AAMoGjYZddsV65yO9C9E S7SPN zT 593 qOX7m9dur/19f3Nr 9uzG54Xyz6OV0AAAD5QathnbGe UjvfAS1ZFnD7tl/2OWPXR7euTy8c3l4 /L97blN30u/hLgEAAAADJOSYefCPfNhJFlxG/bB1qUHW5fub126tzW34Xvpl7/NSqkAAACljlbDOqLdsyFespxh9z3n9EW uvP4yzuPv7zz Ks7j6GXAAAAgEejYZccUeNssHs21D0X6pkPe0L4WILBRT6Z19w/ 3kZ3ukCAABIA 2G7ZoJGGdYybKGfbLqoN0T qjb/FEPmyaXHT/5x3NZKRUAAKDU0WpYe6TT7O aCaCWLGtYFJfg/eum99vYNG7d dHp17JSKgAAQKmj0bCL9kjHtI V7EzQE0pUHTqms9 3dc/sarw41XHzZeHW68Omxa2PzBy7/MSqkAAACljkbDWu3h9ilvx7Svc9rfZQ4wnGH3bbv8f/zm/h8N9//4zf3/unJvdG7jH156NSulAgAAlDpaDWsLt09626e8HVO zmk/Z9inecMOM39//ryt3RuY2/B8MCAAAwDJOKYdsmPG1IstM Bu8l NPV4T9de/inaw8bDQ9M89CGBQAAYNFoWIstdH2caZvwtE9626d8TDAhutP157ax96 b/qdlZGxh6wcnoR8WAACAYbQbdifUOu5Gkm2b9DLBOBYftnPyL12Tf mc KB9bNy688NTtVpKBQAAqAQ0GrZlzN065r4 zlyf8LiRYVF82E/75lD6uMc8uaxpna4kAABAxaDBsMEWk6tlzI1asqxhn3rmWYc3cvHb5S GVi5 u3zx5qJ5zfVT/T rGhYAAABA1NTVW7aD10yuFpOrdczdOu5mDfv0vued/ujX9za/vrf59b2N5rvrs ueE6/ utAVBgAAKBk4wzpbOMmyht2z/7ArEPvmkR2lKw9t81uBkxqiFwIAAAAI1rCjzmsm5zWTq2XM5Q7Eqw4d0 09cMQdiLeMMXyy7IROvf77QlcYAACgZKipq1/YDl4ddVwbdV4bdV4z8YY9eNQdTLRN lG6PuGz2iKn33in0BUGAAAoGXjDonRt1CkYlgkm2qeDbJoKLtqjZ86eL3SFAQAASgbWsCMONo06 3YFY1aFjuqpDR5lQosMc4tOiI3bmXH2hKwwAAFAy1NTVL2wHMMM6eMMeY0K7nTNhPi05YjV1YFg AAACtIMMaRuy8YV1gWAAAgKwgNewIGBYAACBL8IY1jNgNYFgAAIAsIjas3TBiB8MCAABkhxQMO2 eL/XdTS01dPSRIkCBB0pL 65Mr0xsyhvWEk7hh769E52yxJUf206J6imaQUBHs0yVHVCjaGVsmkyu27IqjtCJKCTa5EyvuxGr lpbVcJAZS0SSZz0jm xAXJVd8Vfp7wVMMT8soUX99bIouO0RpiZ4iS/bIkj2yKE1hSbLiySZNFjaF2LSjJQUtO0HLtpAWZNL0RmBo3mMYcfCG9YSTVYeO6Y4dO/ZRU/OtxQgu2WynEEodyskc6jAHs5U6zUG 3K7ZMErG2bBxLmyci6DUPRfpno/2LER7FmK9KFlQivda4n2WeJ813mdN9FkT/appMZtpoKDpRi7SUiHTYLmnlM/JYuLGYnxgMS58OuynHxclK5v6rfF a4xNFjb1WWJ9lmifJdq3EO0VpUjvQqR3PtIzH mZD7Npjk3dc6HuuVD3bKh7NmScDRlng2yaYVPXTLBrJsAmc6DLHOg0 zvN/s5pf e0v2Pa1zHt65hiU/uUr33Ky6ZJNrVNetsmPW2TnrYJT9uE5/oEc32cuT7OtIqSu3VMlFrG3C1jLhS3hU/XTM5rJic7EZZLV0cdwrhXWjKM2PvM7o amo8dO6Z79dVX9z97dNkZK7xhs6davkQZyUaokiU8G8M9C4YFwxZ5yr5hMdWKJGvlJatkWD6xqi UMyyeJZAXPyhmWTxLJToklWyDDXh1xWHeC 589 v3vf1/35ptvVh069klT88RmPiSbn8YsWxD7mH3aRWvMds9Fuucj3fPRHolnpYbV3J4F1RafZwvuvqKTrO LHlLJhOc/24YbFPIsbtmcu3E3zrFHsWdywNM9KG7OCaiXNWNyzItW62URKdkwiWYpnryLPyqh2ZMX3SVNz1a FjJ0 e1P3nf/7n2bNn//dfPflJU/OyM3Y7p90F5nCnOdRpDrVzqUOSsmdY8VNajwHXXcBLltKYXYj34ckS77NoMCz2FLOzoGlNOrYm q2JAUnSYkbxLlhl4jIJKyhtw1rZNGBN8JeWA9b4gFV4qzCSxSo5iFKhJViEqtXYXUAalusriOGS 7VPoLphT9SwuWVFfQZc50Ik8K5EsplpKM5Ym2bQasy5aY9bJh3pBbh2YYaw7wU amv/3Xz35wgsvvPnmm7qPP/64oaHh7NmzVYeO7n/26EefNzOh3ZylBBNMMMGEG0voFSaUt0Svm4dMYeyBKCU1JHKvNPKhbO/VkLSVTklaMpdJu3wSZ8intHPOMO0SqVA1KeZEnhbyvFE X02J uMSpQSfNP2EgwopLkluLSmgMcWoyYWljz5v3v/s0apDx1544YVf//rXf/jDH3SXL1cOFCQ0PD66 //vLLL 89eHTvwaNVB49WHUovHZNJR6sOHt2rlqoyKfogkVSqJFNPxaoS dMyOUjmcGTvwSOaDpmyr0zpMkn1JGv9FOjnM/0PV 17ldLHpPVzJCumeCCQIGWa/vZv//bFF1/87W9/ 4c//OE//uM//j9dVIw3CThp/QAAAABJRU5ErkJggg==


Beatrix, I forgot to tell that you'll need to activate Microsoft Scripting Runtime to run this code:

11108

Douglas Marcel

Beatrix
01-20-2014, 05:21 AM
Sorry! In my previous reply: it should read the folder seems "empty" not "ok"

mancubus
01-20-2014, 01:47 PM
hi Beatrix.

try this.



Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria


Dim wb As Workbook, ws As Worksheet
Dim fRange As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

fPath = "C:\Files\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
wb.Worksheets(1).Activate
FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each ws In wb.Worksheets
With ws
LR = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
If LR > FR Then 'ws has row(s) with data below selected first row
For i = LR To FR Step -1
If .Cells(i, 1) = "" Then .Rows(i).Delete 'check for blank cells in Col A
'or: delete above line and use below line if only blank rows will be deleted
'If Application.CountA(Rows(i)) = 0 Then .Rows(i).Delete 'check if whole row is blank
If .Cells(i, 3) = "NW" Or .Cells(i, 3) = "NE" Then .Rows(i).Delete 'check for specific values in Col C
Next i
End If
If LC > 1 Then 'ws has more than 1 columns with data
For i = LC To 1 Step -1
If Application.CountA(Columns(i)) = 0 Then .Columns(i).Delete 'check if whole column is blank
Next i
End If
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
.Activate
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
If LR > FR Then 'ws has row(s) with data below selected first row
For i = LR To FR Step -1
If .Cells(i, 1) = "" Then .Rows(i).Delete 'check for blank cells in Col A
'or: delete above line and use below line if only blank rows will be deleted
'If Application.CountA(Rows(i)) = 0 Then .Rows(i).Delete 'check if whole row is blank
If .Cells(i, 3) = "NW" Or .Cells(i, 3) = "NE" Then .Rows(i).Delete 'check for specific values in Col C
Next i
End If
If LC > 1 Then 'ws has more than 1 columns with data
For i = LC To 1 Step -1
If Application.CountA(Columns(i)) = 0 Then .Columns(i).Delete 'check if whole column is blank
Next i
End If
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If
wb.Close SaveChanges:=True
fName = Dir()
Loop
End Sub

D_Marcel
01-20-2014, 03:25 PM
Good code mancubus!

Beatrix, sorry for the errors but I tested here by creating a folder with dummy files with extension ".xlsx" inside, and no errors happened. In wich line the error 1004 occurs?
During testing, I found an error in the code:

​ '***For Each Workbook and for its Worksheets, delete rows***'
For Each Entry In WorkArea
Workbooks.Open Filename:=TargetPath & "\" & Entry.Value
Workbooks(Entry.Value).Activate
Caption = MsgBox("Is first row of the range is same in each tab?", vbYesNo, "Beatrix Automation")
If Caption = vbYes Then
Set Range_Selection = Application.InputBox("Select the first row", "Get Range", Type:=8)
For Each Sheet In ActiveWorkbook.Worksheets
Set WorkArea2 = ActiveSheet.Range(Cells(Range_Selection.Row, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
For Each Entry2 In WorkArea2
If Entry2.Value = "" Then
Entry.EntireRow.Delete

The last line should be Entry2.EntireRow.Delete

Same to this:

ElseIf Caption = vbNo Then For Each Sheet In ActiveWorkbook.Worksheets
Set Range_Selection = Application.InputBox("Select the first row", "Get Range", Type:=8)
Set WorkArea2 = ActiveSheet.Range(Cells(Range_Selection.Row, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
For Each Entry2 In WorkArea2
If Entry2.Value = "" Then
Entry.EntireRow.Delete

mancubus
01-21-2014, 01:00 AM
Good code mancubus!thanks Marcel. yours is too. the OP states "process all workbooks in a specific folder" so i used a variable for that specific folder. but if it changes, it will be a good practice to enable user to browse for folder containing the files to be processed. using LIKE operator for "partial matches" is also a good idea for row deletion. i assumed it's a full match. :beerchug:

snb
01-21-2014, 02:11 AM
To return to the start of your question:


Sub M_snb()
for each sh in sheets
sh.columns(1).specialcells(4).entirerow.delete
sh.rows(1).specialcells(4).entirecolumn.delete
next
End Sub


The criterion for deleting a row/column is the emptiness of a cell in columnA / resp. in row 1.
To include your other requirements:
If all 'xlsx' files reside in folder "G:\OF\"


Sub M_snb()
sn=split(createobject("wscript.shell").exec("cmd /c dir ""G:\OF\*.xlsx"" /b").stdout.readall,vbcrlf)

for j=0 to ubound(sn)
with getobject(sn(j))
for each sh in .sheets
sh.columns(1).specialcells(4).entirerow.delete
sh.rows(1).specialcells(4).entirecolumn.delete
next
.close -1
end with
next
End Sub

Beatrix
01-21-2014, 07:54 AM
Hi All ,

Thanks very much for all replies. Much appreciated. I keep having errors. It might be me or data structure or the codes. The best solution is attaching the sample files to see where it goes wrong in each code. There is a lot to change in my files because of the data protection. I'll attach samples as soon as I can.

Cheers
B.

D_Marcel
01-21-2014, 08:36 AM
Hi Beatrix,

Please, do this. Attach the folder with the Workbooks (with dummy data, if possible) in a .ZIP file.

Douglas

snb
01-21-2014, 09:51 AM
If anything is protected don't be surprised.
Remove any protection before code testing.

Beatrix
01-21-2014, 10:01 AM
Sorry I guess It's me,my English etc.. couldn't explain it properly. I meant data security policies, compliance policy etc.. I need to change my data but keep the structure as it is..


If anything is protected don't be surprised.
Remove any protection before code testing.

mancubus
01-22-2014, 03:16 AM
Sorry I guess It's me,my English etc.. couldn't explain it properly. I meant data security policies, compliance policy etc.. I need to change my data but keep the structure as it is.. hi there. re to snb's comment: snb states that workbooks or worksheets may be protected. so remove the protection first. ----- and if you are not familiar with, adopt snb's codes to your workbook/worksheet structure. :) ----- from 'enabling the user to select the first row to start deleting rows' requirement i assume that the files are generated by some non MS office applications (or by different departments or or by different employees). so they dont have the same table structure and need to be made similar.

Beatrix
01-22-2014, 09:55 AM
Hi All ,


There is no ws/wb protection in the spreadsheets.

I attached 2 sample xls. Over all it's 4 files including before/after. The range starts from Row13 in all ws in Sample1. The range slightly changes in Sample2 - it's Row10 in some tabs. Apart from blank rows and blank columns I also need to remove the entire row where it says NE, NW, YH, EM, WM, E, L, IL, OL, SE, SW. At the end of the range there is a row which gives source info and bullets/numbering for some notes. I need to keep them as it is.

I only need to delete blank rows and blank columns and some certain rows in the range. Because first row of the range might change that's why I've thought mesage box would be an effective solution in this case. However you guys are expert so know much much better than I do, you might suggest other options?

PS: Sample2 has got some hidden worksheets which shouldn't be included to the process. Also some tabs in Sample2 has got data validation drop down lists which should remain as it is. ( I don't know if this would cause any issues). There are many spreadsheets in this format that's why I want to create one folder and to be able to run the script for all of them.


Cheers
B.

mancubus
01-22-2014, 02:49 PM
hi.

i see you left 2 blank rows between tables and footnotes. so i took it into account when determining the Last Rows of the tables.

try this with copies of your files.


including snb's offer for specialcells method


Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria


Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

fPath = "C:\Files\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
wb.Worksheets(1).Activate
FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each ws In wb.Worksheets
With ws
LR = .Cells.Find("(1) Includes", , , xlPart, xlByRows, xlPrevious).Row - 3
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues 'filters table for matches in Column C
.AutoFilter.Range.Rows.Delete 'deletes all rows of auto filter range
.AutoFilterMode = False
delRng.Columns(1).SpecialCells(4).EntireRow.Delete 'deletes all rows of blank cells in the table's first column (which is Column A)
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'deletes all columns of blank cells in the selected First Row
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
.Activate
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("(1) Includes", , , xlPart, xlByRows, xlPrevious).Row - 3
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
.Rows(FR).SpecialCells(4).EntireColumn.Delete
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If
wb.Close SaveChanges:=True
fName = Dir()
Loop
End Sub

mancubus
01-23-2014, 01:46 AM
second sample workbook has some sheets with formulas. deleting rows and columns may cause REF errors if formulas are dependent to those rows/cols.

mancubus
01-23-2014, 01:49 AM
BTW, if there is a pattern for all sheets in all books to determine the first row, ie all sheets have the same values in a cell (say A5, A7, A13, etc) in a column (say Col A), using a variable will be more efficient than making the user select a cell. ----- if there is, you can delete many lines from the code i posted and make life easy for the users. :) ----- assume all sheets have a common value such as "Performance Report As Of xx.xx.xxxx". (here x's are changing). this value may be in cell A13 in some sheets, in A8 for some other sheet, etc. the following method finds the first occurence of "Performance Report As Of" bit of this text and returns its row number as the First Row number.
FR = .Cells.Find("Performance Report As Of", , , xlPart, xlByRows, xlNext).Row

Beatrix
01-23-2014, 10:02 AM
hi mancubus.thanks for your reply. The code looks good and worked perfectly on S1 however gave run time error for S2. "91" -Object variable or With block variable not set. I don't know what's causing this error, hidden tabs may be? I said No to first message box as the first row is not same in each ws in S2 then it stopped and gave this error. Did you manage to run it on S2?




hi.

i see you left 2 blank rows between tables and footnotes. so i took it into account when determining the Last Rows of the tables.

try this with copies of your files.


including snb's offer for specialcells method


Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria


Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

fPath = "C:\Files\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
wb.Worksheets(1).Activate
FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each ws In wb.Worksheets
With ws
LR = .Cells.Find("(1) Includes", , , xlPart, xlByRows, xlPrevious).Row - 3
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues 'filters table for matches in Column C
.AutoFilter.Range.Rows.Delete 'deletes all rows of auto filter range
.AutoFilterMode = False
delRng.Columns(1).SpecialCells(4).EntireRow.Delete 'deletes all rows of blank cells in the table's first column (which is Column A)
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'deletes all columns of blank cells in the selected First Row
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
.Activate
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("(1) Includes", , , xlPart, xlByRows, xlPrevious).Row - 3
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
.Rows(FR).SpecialCells(4).EntireColumn.Delete
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If
wb.Close SaveChanges:=True
fName = Dir()
Loop
End Sub

mancubus
01-23-2014, 10:25 AM
Hi Beatrix.

Sorry for that.

Pls add below line after With ws

If .Visible = True Then

and below line before End With

End If

for both YES and NO responses.

Let me know if it does not fix the problem.

mancubus
01-23-2014, 01:25 PM
hi again.

in the second workbook first footnote is "1. NOTES" and not "(1) Includes". it throws error on this line. and maybe other workbook have different footnotes. so it will be hard to detect the last row of the worksheets for coding purposes. and considering there are not always 2 blank rows between tables and footnotes, it will be even harder.

but i see a common text in all worksheets which is Source: X. if it exists at the end of all tables in all worksheets in all workbooks, we can use it to determine the last rows of data tables. but if not, to my knowledge, you should find a pattern which is common to all worksheets.

assuming exists in all worksheets i modified the code as below.

i noticed that the first worksheet is hidden. so i added a few lines to handle it.



Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria

Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

'fPath = "C:\Files\" 'change to suit. include final \
fPath = "C:\Users\Attila\test\beax\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
For i = 1 To Worksheets.Count
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For
End If
Next i
FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If
wb.Close SaveChanges:=True
fName = Dir()
Loop
End Sub




or if you dont bother loosing blank rows between tables and footnotes, (and since the cell of that row in Col A is blank) the row that contains the word "Source" as well, you can use the first code.


Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria

Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

'fPath = "C:\Files\" 'change to suit. include final \
fPath = "C:\Users\Attila\test\beax\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
For i = 1 To Worksheets.Count
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For
End If
Next i
FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
LR = .Cells.Find("*", , , xlPart, xlByRows, xlPrevious).Row
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("*", , , xlPart, xlByRows, xlPrevious).Row
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If
wb.Close SaveChanges:=True
fName = Dir()
Loop
End Sub






PS: in some worksheets of "Removing rows n columns_S2_before.xls" workbook the column that have string criteria (NE, NW, IL, etc) is B rather than C. so the code threw an error there when testing. i inserted a column to fix it.

snb
01-23-2014, 04:16 PM
@macubus

You might use the following procedure:


for each it in Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")
cells.replace it,"12/0"
next
cells.specialcells(2,16).entirerow.delete

mancubus
01-24-2014, 12:32 AM
thanks snb. ----- worksheets "Table 23" and "Table 24" of "Removing....._S2_Before.xls" made me think, when preparing the sample files for the VBAX, the OP has accidentally deleted Column C. but worksheets "Table 11", "Table 12", etc display criteria cells in column B. ----- maybe using replace function for only columns B and C for full match to convert the criteria array elements into "error formulas" and then deleting their rows will suffice. ----- perhaps like this. as 12/0 returns a date i used "=12/0" instead, replaced 2 (xlCellTypeConstants) with -4123 (xlCellTypeFormulas) and limited the range to columns 2 and 3 of delRange. line1:
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW") line2:
Range(Cells(FR, 2), Cells(LR, 3)).Cells.Replace it, "=12/0", xlWhole line3:
Next line4:
Range(Cells(FR, 2), Cells(LR, 3)).SpecialCells(-4123, 16).EntireRow.Delete below line is the same as line4:
Range(Cells(FR, 2), Cells(LR, 3)).SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete thus, if the above code is used, the three lines that contain the word "AutoFilter" must be deleted from previous procedures for both YES and NO responses.
PS: "-----" means a new paragraph. in my office coumputer i cannot use html tags for line breaks, etc in VBAX. and i dont duplicate the problem in other forums like mrexcel, excelforum, ozgrid, etc. sorry for the inconvenience.

snb
01-24-2014, 02:01 AM
Although you can use:


Cells(5,5)=[0/0]

you can't use it in a replace action. It has to be a string.

e.g.


Sub M_snb()
Columns(2).Resize(, 2).Replace "A", "=0/0"
End Sub

mancubus
01-24-2014, 02:16 AM
thanks. did the same: ......Replace it, "=12/0" and it returned division by 0 error in mathing cells.

Beatrix
01-27-2014, 09:35 AM
Hey mancubus!

Sorry for the late response.

This is a great code and works fine for this 2 samples. Thanks for considering all criteria. At least I know which bits need to be changed when I run the script for other workbooks with different formats:thumb

I appreciate for spending your time on this.

@snb n @ D_Marcel : Thanks very much for your time and for all your help too :friends:

Cheers
B.



hi again.

in the second workbook first footnote is "1. NOTES" and not "(1) Includes". it throws error on this line. and maybe other workbook have different footnotes. so it will be hard to detect the last row of the worksheets for coding purposes. and considering there are not always 2 blank rows between tables and footnotes, it will be even harder.

but i see a common text in all worksheets which is Source: X. if it exists at the end of all tables in all worksheets in all workbooks, we can use it to determine the last rows of data tables. but if not, to my knowledge, you should find a pattern which is common to all worksheets.

assuming exists in all worksheets i modified the code as below.

i noticed that the first worksheet is hidden. so i added a few lines to handle it.



Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria

Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

'fPath = "C:\Files\" 'change to suit. include final \
fPath = "C:\Users\Attila\test\beax\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
For i = 1 To Worksheets.Count
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For
End If
Next i
FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If
wb.Close SaveChanges:=True
fName = Dir()
Loop
End Sub




or if you dont bother loosing blank rows between tables and footnotes, (and since the cell of that row in Col A is blank) the row that contains the word "Source" as well, you can use the first code.


Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria

Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

'fPath = "C:\Files\" 'change to suit. include final \
fPath = "C:\Users\Attila\test\beax\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
For i = 1 To Worksheets.Count
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For
End If
Next i
FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
LR = .Cells.Find("*", , , xlPart, xlByRows, xlPrevious).Row
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("*", , , xlPart, xlByRows, xlPrevious).Row
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
delRng.AutoFilter Field:=3, Criteria1:=Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW"), Operator:=xlFilterValues
.AutoFilter.Range.Rows.Delete
.AutoFilterMode = False
.Rows(FR).SpecialCells(4).EntireColumn.Delete 'WARNING: if a cell in a blank row is selected all columns will be deleted.
End If
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If
wb.Close SaveChanges:=True
fName = Dir()
Loop
End Sub






PS: in some worksheets of "Removing rows n columns_S2_before.xls" workbook the column that have string criteria (NE, NW, IL, etc) is B rather than C. so the code threw an error there when testing. i inserted a column to fix it.

mancubus
01-27-2014, 10:38 AM
You are welcome. I am glad it helped.

Beatrix
01-27-2014, 12:30 PM
Hi mancubus. I missed this bit. That string criteria, does it need to be in the same column in all ws?? I've thought it might be anywhere within the range and it would be still ok . I guess that's too much to expect :think: That's why Table 11-12-13-18-19 still have that specific rows :doh::doh:




PS: in some worksheets of "Removing rows n columns_S2_before.xls" workbook the column that have string criteria (NE, NW, IL, etc) is B rather than C. so the code threw an error there when testing. i inserted a column to fix it.

mancubus
01-27-2014, 12:30 PM
hi again.

looking the messages i post, it seemed the code was not copmplete to me.

i'll try to tidy all the code up a bit. and comment some lines in case someone will need it in the future. will post it when ready :)

mancubus
01-27-2014, 12:37 PM
Hi mancubus. I missed this bit. That string criteria, does it need to be in the same column in all ws?? I've thought it might be anywhere within the range and it would be still ok . I guess that's too much to expect :think: That's why Table 11-12-13-18-19 still have that specific rows :doh::doh:

hi Beatrix.

you are a bit earlier than me. :)

i first assumed they are in column B. after seeing that workbook, replaced column C with Columns B and C.

i'll take into account that part within the scope of my previous post. i mean which column they are in will not matter. but you must be careful that all rows containing the defined strings (NE, NW, IL, etc) at whole will be deleted. if a cell's value is NEW its row will not be deleted. but if its value is NE it will be deleted. OK?

Beatrix
01-27-2014, 01:07 PM
Yep that sounds perfect:thumb



hi Beatrix.

you are a bit earlier than me. :)

i first assumed they are in column B. after seeing that workbook, replaced column C with Columns B and C.

i'll take into account that part within the scope of my previous post. i mean which column they are in will not matter. but you must be careful that all rows containing the defined strings (NE, NW, IL, etc) at whole will be deleted. if a cell's value is NEW its row will not be deleted. but if its value is NE it will be deleted. OK?

snb
01-27-2014, 01:39 PM
I still think this is sufficient for range starting in row 13:


Sub M_snb()
For Each sh In Sheets
sh.UsedRange.Columns(1).Offset(12).SpecialCells(4).EntireRow.Delete
sh.Rows(11).SpecialCells(4).EntireColumn.Delete
Next
End Sub

mancubus
01-27-2014, 02:10 PM
hi.
try this with copies of your files. not tested.
pls keep in mind that Last Row of range to be processed is determined by the word "Source".



Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria


Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

fPath = "C:\Files\" 'change to suit. include final \
'fPath = "C:\Users\Attila\test\beax\" 'change to suit. include final \

fName = Dir(fPath & "*.xls*")
'Dir function returns a string representing the first file in the specified folder.
'using it without any arguments returns the next file: fName = Dir()

Do While fName <> "" 'start loop

Set wb = Workbooks.Open(fPath & fName)
'open the file. assign it to wb variable

For i = 1 To wb.Worksheets.Count
'if here are any hidden sheets, select the first visible worksheet.
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For 'when the first visible worksheet is selected exit loop.
End If
Next i

FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
'offer user 2 choices (YES, NO) to base the fist row selection method and another (CANCEL) to stop the code execution.

If FirstRowQ = vbYes Then
'user clicked the YES button. the row of selected cell in the next step will be used as First Row in all worksheets.

Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
'make user select the cell whose row number will be used as first row in all worksheets

FR = fRange.Row
'assign selected cell's row number to FR variable

For Each ws In wb.Worksheets
'loop all worksheets in the opened workbook

With ws
If .Visible = True Then
'check if worksheet is visible. if visible continue next line.

LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
'find the first occurence of string "Source" from bottom-up. return its row number. -1 means 1 row above Source will be Last Row

LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
'find the first occurence of any string/value from right-left. return its column number as Last Column.

Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
'set the range to delete rows and columns based on condition usng the variables determined above: FR,LR, and LC. 1 is for column A.

delRng.Columns(1).SpecialCells(4).EntireRow.Delete
'determine the blank cells in the first column of the set range and delete their rows.

For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")
delRng.Cells.Replace it, "=12/0", xlWhole
Next
'loop all cells in the range for all string criteria and if found a match change it to "=12/0" formula to display a formula error in cell.
'it may be "=15/0" or "=0/0", whatever. this is done to use specialcells method to get all cells with formula errors.

delRng.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
'or =
'delRng.SpecialCells(-4123, 16).EntireRow.Delete
'any of the above lines will delete the rows that contain a formula error.

.Rows(FR).SpecialCells(4).EntireColumn.Delete
'determine the blank cells in the first row of the set range and delete their columns.
End If
End With

Next ws

ElseIf FirstRowQ = vbNo Then
'user clicked the NO button. the row of selected cell in each worksheet will be used as First Row in each woksheets separately.


For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate 'in order to select a range in a worksheet that sheet must be selected first.
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")
delRng.Cells.Replace it, "=12/0", xlWhole
Next
.Rows(FR).SpecialCells(4).EntireColumn.Delete
End If
End With
Next ws

Else
'user clicked the CANCEL button.

MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
'inform the user about cancellation.

wb.Close SaveChanges:=False
'close the first workbook without saving.

Exit Sub
'exit procedure.
End If

wb.Close SaveChanges:=True
'save and close the workbook whose rows and columns are deleted
fName = Dir()
'return the next file

Loop
'go back to Do While fName <> "" line to process the next workbook.


End Sub

mancubus
01-27-2014, 02:38 PM
I still think this is sufficient for range starting in row 13:


Sub M_snb()
For Each sh In Sheets
sh.UsedRange.Columns(1).Offset(12).SpecialCells(4).EntireRow.Delete
sh.Rows(11).SpecialCells(4).EntireColumn.Delete
Next
End Sub

i certainly agree with you.

but when it comes to process third party data it may become hell on earth.

last week i was asked to consolidate about 500 email attachments. the files contained web imported data and were emailed by a third party on a daily basis for 2 years. the files had 3 rows of headers with merged rows and columns. many third row headers repeated more than once (under different merged areas). some files had blank row(s) at top, some had blank columns at left. column numbers did not match and changed over time.

if the table structures of the files were the same it would take a few minutes to complete the requirement. i even did not need to write a procedure for that.


i think this is the similar case for this thread.




i think i can adopt your code for workbooks with static First Rows.

user again will select a cell and that cell's row number will be used to offset the used range to selected cell's row.


maybe (user first clicks YES button in MsgBox and selects a cell from row 13 for all worksheets in the workbook):


Sub M_snb()


Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
For Each sh In Sheets
sh.UsedRange.Columns(1).Offset(fRange.Row - 1).SpecialCells(4).EntireRow.Delete
sh.Rows(fRange.Row - 2).SpecialCells(4).EntireColumn.Delete
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")
sh.UsedRange.Offset(fRange.Row - 1).Replace it, "=12/0", xlWhole
Next
sh.UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
Next

End Sub

mancubus
01-28-2014, 03:20 AM
hi.try this with copies of your files. not tested.pls keep in mind that Last Row of range to be processed is determined by the word "Source perhaps adding an error handling line such as On Error Resume Next will help handle errors which will be thrown by FIND method when there is not a match in the worksheet with the searched value. ----- i would put it before Do While fName "" line. ----- since it will suppress all error messages inserting it after all tests are completed is a good idea. we should detect the errors first and then handle them. :)

mancubus
01-28-2014, 03:35 AM
If its row is deleted the fRange becomes nothing. and the fRange.Row statement will throw an error. So storing its row number in a variable will handle this.





Sub M_snb()


Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
FR = fRange.Row
For Each sh In Sheets
sh.UsedRange.Columns(1).Offset(FR - 1).SpecialCells(4).EntireRow.Delete
sh.Rows(FR).SpecialCells(4).EntireColumn.Delete
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")
sh.UsedRange.Offset(FR - 1).Replace it, "=12/0", xlWhole
Next
sh.UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
Next

End Sub

snb
01-28-2014, 04:30 AM
As far as I can see "NE,NW etc will be removed from the posted examples using the ....specialcells(4).entirerow.delete line


Sub M_snb()
y= Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8).row

For Each sh In Sheets
sh.UsedRange.Columns(1).Offset(y - 1).SpecialCells(4).EntireRow.Delete
sh.Rows(y).SpecialCells(4).EntireColumn.Delete
Next
End Sub

mancubus
01-28-2014, 04:56 AM
As far as I can see "NE,NW etc will be removed from the posted examples using the ....specialcells(4).entirerow.delete line
Sub M_snb() y= Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8).row For Each sh In Sheets sh.UsedRange.Columns(1).Offset(y - 1).SpecialCells(4).EntireRow.Delete sh.Rows(y).SpecialCells(4).EntireColumn.Delete Next End Sub yep that's true for the sample file. i took into account the OP's amended requirement here:
Hi mancubus. I missed this bit. That string criteria, does it need to be in the same column in all ws?? I've thought it might be anywhere within the range and it would be still ok . I guess that's too much to expect :think: That's why Table 11-12-13-18-19 still have that specific rows :doh::doh: is there a neater way to modify the final code you posted to cover that reqirement?

Beatrix
01-28-2014, 05:02 AM
It's giving run-time error '1004': No cells were found

It takes to below line when I debug.


delRng.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete


I've only changed this bit as it should be "LL" instead of single "L".


For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")

It does the job for first ws but when it skips to next tab, it stops and can't find the cells :eek:


hi.
try this with copies of your files. not tested.
pls keep in mind that Last Row of range to be processed is determined by the word "Source".



Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria


Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String

fPath = "C:\Files\" 'change to suit. include final \
'fPath = "C:\Users\Attila\test\beax\" 'change to suit. include final \

fName = Dir(fPath & "*.xls*")
'Dir function returns a string representing the first file in the specified folder.
'using it without any arguments returns the next file: fName = Dir()

Do While fName <> "" 'start loop

Set wb = Workbooks.Open(fPath & fName)
'open the file. assign it to wb variable

For i = 1 To wb.Worksheets.Count
'if here are any hidden sheets, select the first visible worksheet.
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For 'when the first visible worksheet is selected exit loop.
End If
Next i

FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
'offer user 2 choices (YES, NO) to base the fist row selection method and another (CANCEL) to stop the code execution.

If FirstRowQ = vbYes Then
'user clicked the YES button. the row of selected cell in the next step will be used as First Row in all worksheets.

Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
'make user select the cell whose row number will be used as first row in all worksheets

FR = fRange.Row
'assign selected cell's row number to FR variable

For Each ws In wb.Worksheets
'loop all worksheets in the opened workbook

With ws
If .Visible = True Then
'check if worksheet is visible. if visible continue next line.

LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
'find the first occurence of string "Source" from bottom-up. return its row number. -1 means 1 row above Source will be Last Row

LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
'find the first occurence of any string/value from right-left. return its column number as Last Column.

Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
'set the range to delete rows and columns based on condition usng the variables determined above: FR,LR, and LC. 1 is for column A.

delRng.Columns(1).SpecialCells(4).EntireRow.Delete
'determine the blank cells in the first column of the set range and delete their rows.

For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")
delRng.Cells.Replace it, "=12/0", xlWhole
Next
'loop all cells in the range for all string criteria and if found a match change it to "=12/0" formula to display a formula error in cell.
'it may be "=15/0" or "=0/0", whatever. this is done to use specialcells method to get all cells with formula errors.

delRng.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
'or =
'delRng.SpecialCells(-4123, 16).EntireRow.Delete
'any of the above lines will delete the rows that contain a formula error.

.Rows(FR).SpecialCells(4).EntireColumn.Delete
'determine the blank cells in the first row of the set range and delete their columns.
End If
End With

Next ws

ElseIf FirstRowQ = vbNo Then
'user clicked the NO button. the row of selected cell in each worksheet will be used as First Row in each woksheets separately.


For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate 'in order to select a range in a worksheet that sheet must be selected first.
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "L", "IL", "OL", "SE", "SW")
delRng.Cells.Replace it, "=12/0", xlWhole
Next
.Rows(FR).SpecialCells(4).EntireColumn.Delete
End If
End With
Next ws

Else
'user clicked the CANCEL button.

MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
'inform the user about cancellation.

wb.Close SaveChanges:=False
'close the first workbook without saving.

Exit Sub
'exit procedure.
End If

wb.Close SaveChanges:=True
'save and close the workbook whose rows and columns are deleted
fName = Dir()
'return the next file

Loop
'go back to Do While fName <> "" line to process the next workbook.


End Sub

snb
01-28-2014, 05:25 AM
As long as the OP uses merged cells, it's useless to invent a VBA approach.
As long as the sample files are not representative for the real ones, it's not possible to create a bullitproof approach (I have no idea what all the X's stand for).

mancubus
01-28-2014, 05:35 AM
1) it means delRng.SpecialCells(xlCellTypeFormulas, xlErrors) returns nothing. that's why i suggested inserting On Error Resume Next statement. sorry for not including it in the last procedure i posted. you may insert it before Do While... line. ----- 2) because of the error the code stops execution. please test the code with the workbook you uploaded here.

mancubus
01-28-2014, 05:55 AM
As long as the OP uses merged cells, it's useless to invent a VBA approach.As long as the sample files are not representative for the real ones, it's not possible to create a bullitproof approach (I have no idea what all the X's stand for).from the messages posted before... ----- there are workbooks of two different types: 1) First rows in all sheets are the same and 2) are not the same. ----- we leave the decision as to which workbook has static FR and which does not have. ----- the OP has 3 requirements: a) delete blank cells' rows in column A. b) delete blank cells' columns in (user selected) first row. c) delete the rows of the cells that match with any of string criteria in the used range. one condition: keep the footnotes below each table. ----- i assume X's are any data that dont need to be taken into account for the code. ----- Beatrix pls correct the wrong points, if any.

Beatrix
01-28-2014, 06:30 AM
Yes there are 2 different types of workbooks. 1- first row is same in all ws 2- first row is not same in all ws.
Requriments are ;
1- Delete blank rows and columns in range: first row (user selects) and the last row (determined by the word Source, your VBA approach was pretty good in this one mancubus)
2- Delete entire row where the cells match with anything in string criteria in the range.



from the messages posted before... ----- there are workbooks of two different types: 1) First rows in all sheets are the same and 2) are not the same. ----- we leave the decision as to which workbook has static FR and which does not have. ----- the OP has 3 requirements: a) delete blank cells' rows in column A. b) delete blank cells' columns in (user selected) first row. c) delete the rows of the cells that match with any of string criteria in the used range. one condition for row delete: keep the footnotes below each table. ----- i assume X's are any data that dont need to be taken into account for the code. ----- Beatrix pls correct the wrong points, if any.

Beatrix
01-28-2014, 06:40 AM
I guess that's why the OP's VBAX title is "Contributor" and yours is "Master" snb :devil2::thumb


As long as the OP uses merged cells, it's useless to invent a VBA approach.
As long as the sample files are not representative for the real ones, it's not possible to create a bullitproof approach (I have no idea what all the X's stand for).

mancubus
01-28-2014, 07:02 AM
Beatrix. ----- the last code i posted deletes rows of blank cells in Column A, and deletes columns of blank cells in the First Row and does not "Delete blank rows and columns in range" since range can be (assuming FR = 13 / LR = 180 / LC = 10) "A13:J180". if A20 is blank, row 20 will be deleted regardless of other cells being non blank in the same row. is E25 is a blank cell but A25 is not, row 25 will not be deleted because only Col A is taken into account for row deletion. ----- if bolded bit in your last post is what you need, the code does not work for you and must be modified.

Beatrix
01-28-2014, 07:44 AM
Yes I need to delete blank rows and columns in range. In all tabs, entire row is blank so column A would be blank then I gues it would not be a problem..However I'lI got your point and will consider that hopefully I am not going to have any blank rows with data in column A.

The latest code you posted did the job. However it keeps giving below message while processing each step.

"Microsoft Excel cannot find any data to replace. Check if your search formatting and criteria are defined correctly. If you are sure that matching data exists in this workbook, it may be on a protected sheet. Excel cannot replace data on a protected worksheet."

I've checked every single workshet including hidden ones..there is no worksheet protection..

I added the error line and tested it on attached files. Any other suggestions??


fName = Dir(fPath & "*.xls*")
'Dir function returns a string representing the first file in the specified folder.
'using it without any arguments returns the next file: fName = Dir()

On Error Resume Next
Do While fName <> "" 'start loop

Set wb = Workbooks.Open(fPath & fName)
'open the file. assign it to wb variable





Beatrix. ----- the last code i posted deletes rows of blank cells in Column A, and deletes columns of blank cells in the First Row and does not "Delete blank rows and columns in range" since range can be (assuming FR = 13 / LR = 180 / LC = 10) "A13:J180". if A20 is blank, row 20 will be deleted regardless of other cells being non blank in the same row. is E25 is a blank cell but A25 is not, row 25 will not be deleted because only Col A is taken into account for row deletion. ----- if bolded bit in your last post is what you need, the code does not work for you and must be modified.

mancubus
01-28-2014, 07:49 AM
I guess that's why the OP's VBAX title is "Contributor" and yours is "Master" snb :devil2::thumbi am against forum titles based on post counts. mine is master too just because my post count exceeds 1000. how can i be called master compared to real masters of excel like snb. :)

mancubus
01-28-2014, 08:00 AM
i'm sorry for that. can you please visit http://www.vbaexpress.com/forum/showthread.php?48753-VBA-Create-Sheets-amp-Copy-Data and find post 14. please copy-paste With Application ................ End With after variable declarations. and the same bit before End Sub to same places in your workbook. add Dim calc As Long to tour declarations.

Beatrix
01-28-2014, 08:42 AM
Ok. I've done that too. Please see the latest below. Now the file is opened message box popped but can't select the first row as the workbook doesn't pop up. I saved the script into a blank workbook and run it from there. However the workbook which needs to be processed is open but minimized and it doesn't let me to maximize it :crying: It was working before..







Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria


Dim wb As Workbook, ws As Worksheet
Dim fRange As Range, delRng As Range
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long
Dim fName, fPath As String
Dim calc As Long


With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
calc = .Calculation
.Calculation = xlCalculationManual
End With

fPath = "C:\vba\" 'change to suit. include final \
'fPath = "C:\vba\" 'change to suit. include final \

fName = Dir(fPath & "*.xls*")
'Dir function returns a string representing the first file in the specified folder.
'using it without any arguments returns the next file: fName = Dir()

On Error Resume Next
Do While fName <> "" 'start loop

Set wb = Workbooks.Open(fPath & fName)
'open the file. assign it to wb variable

For i = 1 To wb.Worksheets.Count
'if here are any hidden sheets, select the first visible worksheet.
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For 'when the first visible worksheet is selected exit loop.
End If
Next i

FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
'offer user 2 choices (YES, NO) to base the fist row selection method and another (CANCEL) to stop the code execution.

If FirstRowQ = vbYes Then
'user clicked the YES button. the row of selected cell in the next step will be used as First Row in all worksheets.

Set fRange = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8)
'make user select the cell whose row number will be used as first row in all worksheets

FR = fRange.Row
'assign selected cell's row number to FR variable

For Each ws In wb.Worksheets
'loop all worksheets in the opened workbook

With ws
If .Visible = True Then
'check if worksheet is visible. if visible continue next line.

LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
'find the first occurence of string "Source" from bottom-up. return its row number. -1 means 1 row above Source will be Last Row

LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
'find the first occurence of any string/value from right-left. return its column number as Last Column.

Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
'set the range to delete rows and columns based on condition usng the variables determined above: FR,LR, and LC. 1 is for column A.

delRng.Columns(1).SpecialCells(4).EntireRow.Delete
'determine the blank cells in the first column of the set range and delete their rows.

For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "LL", "IL", "OL", "SE", "SW")
delRng.Cells.Replace it, "=12/0", xlWhole
Next
'loop all cells in the range for all string criteria and if found a match change it to "=12/0" formula to display a formula error in cell.
'it may be "=15/0" or "=0/0", whatever. this is done to use specialcells method to get all cells with formula errors.

delRng.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
'or =
'delRng.SpecialCells(-4123, 16).EntireRow.Delete
'any of the above lines will delete the rows that contain a formula error.

.Rows(FR).SpecialCells(4).EntireColumn.Delete
'determine the blank cells in the first row of the set range and delete their columns.
End If
End With

Next ws

ElseIf FirstRowQ = vbNo Then
'user clicked the NO button. the row of selected cell in each worksheet will be used as First Row in each woksheets separately.


For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate 'in order to select a range in a worksheet that sheet must be selected first.
Set fRange = Application.InputBox("Select the first row in each worksheet", "First Row Selection", Type:=8)
FR = fRange.Row
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set delRng = .Range(.Cells(FR, 1), .Cells(LR, LC))
delRng.Columns(1).SpecialCells(4).EntireRow.Delete
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "LL", "IL", "OL", "SE", "SW")
delRng.Cells.Replace it, "=12/0", xlWhole
Next
.Rows(FR).SpecialCells(4).EntireColumn.Delete
End If
End With
Next ws

Else
'user clicked the CANCEL button.

MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
'inform the user about cancellation.

wb.Close SaveChanges:=False
'close the first workbook without saving.

Exit Sub
'exit procedure.
End If

wb.Close SaveChanges:=True
'save and close the workbook whose rows and columns are deleted
fName = Dir()
'return the next file

Loop
'go back to Do While fName <> "" line to process the next workbook.

With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationManual
End With

End Sub






i'm sorry for that. can you please visit http://www.vbaexpress.com/forum/showthread.php?48753-VBA-Create-Sheets-amp-Copy-Data and find post 14. please copy-paste With Application ................ End With after variable declarations. and the same bit before End Sub to same places in your workbook. add Dim calc As Long to tour declarations.

mancubus
01-28-2014, 09:58 AM
I will check it asap...

First quit excel and reopen it. Delete screenupdating bit. Try previous codes.

mancubus
01-28-2014, 01:33 PM
Ok. I've done that too. Please see the latest below. Now the file is opened message box popped but can't select the first row as the workbook doesn't pop up. I saved the script into a blank workbook and run it from there. However the workbook which needs to be processed is open but minimized and it doesn't let me to maximize it :crying: It was working before..


i hope below procedure will work for you. for the purposes of this code blank row/column means all cells in that row/column are blank.



Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder_Final_Revised()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria

Dim wb As Workbook, ws As Worksheet
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long, calc As Long
Dim fName As String, fPath As String

With Application
.DisplayAlerts = False
.EnableEvents = False
.AskToUpdateLinks = False
calc = .Calculation
.Calculation = xlCalculationManual
End With

fPath = "C:\Users\test\"
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
For i = 1 To wb.Worksheets.Count
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For
End If
Next i

FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
FR = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8).Row
For Each ws In wb.Worksheets
With ws
On Error Resume Next
If .Visible = True Then
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
For i = LR To FR Step -1
If Application.CountA(.Rows(i)) = 0 Then
.Rows(i).Delete
Else
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "LL", "IL", "OL", "SE", "SW")
If Application.CountIf(.Rows(i), it) > 0 Then .Rows(i).Delete
Next
End If
Next
For i = LC To 1 Step -1
If Application.CountA(.Columns(i)) = 0 Then .Columns(i).Delete
Next
End If
End With
.Rows.AutoFit
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate
FR = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8).Row
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
For i = LR To FR Step -1
If Application.CountA(.Rows(i)) = 0 Then
.Rows(i).Delete
Else
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "LL", "IL", "OL", "SE", "SW")
If Application.CountIf(.Rows(i), it) > 0 Then .Rows(i).Delete
Next
End If
Next
For i = LC To 1 Step -1
If Application.CountA(.Columns(i)) = 0 Then .Columns(i).Delete
Next
End If
.Rows.AutoFit
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If

wb.Close SaveChanges:=True
fName = Dir()
Loop

With Application
.DisplayAlerts = True
.EnableEvents = True
.AskToUpdateLinks = True
.Calculation = xlCalculationManual
End With

End Sub

mancubus
01-28-2014, 11:00 PM
i made too many mistakes for a single project. the third line from last would be: .Calculation = calc sorry :)

Beatrix
01-30-2014, 10:36 AM
i made too many mistakes for a single project. the third line from last would be: .Calculation = calc sorry :)

thanks mancubus. As you said 3rd line do I need to replace .AskToUpdateLinks = False bit with .Calculation = calc as below ??

from:


With Application
.DisplayAlerts = True
.EnableEvents = True
.AskToUpdateLinks = True
.Calculation = xlCalculationManual
End With

to:


With Application
.DisplayAlerts = True
.EnableEvents = True
.Calculation = calc
.Calculation = xlCalculationManual

End With

I also made the same correction for the with statement after variable declaration however it's giving a compile error message reads: Invalid or unqualified reference.
I tested it without deleting .AskToUpdateLinks = False line too but same error. I was wondering if you had a chance to test it in yours??

Cheers
B.

mancubus
01-30-2014, 11:30 AM
you are welcome.

no that's not related with the settings.

it seems there is an extra "End With" statement.

below worked for me. i tested it with S1 workbook.



Sub Del_Rows_n_Cols_on_Condition_AllWS_AllWB_Same_Folder_Final_Revised()
'http://www.vbaexpress.com/forum/showthread.php?48681-Selecting-and-deleting-rows-based-on-criteria

Dim wb As Workbook, ws As Worksheet
Dim FirstRowQ As Variant
Dim i As Long, FR As Long, LR As Long, LC As Long, calc As Long
Dim fName As String, fPath As String

With Application
.DisplayAlerts = False
.EnableEvents = False
.AskToUpdateLinks = False
calc = .Calculation
.Calculation = xlCalculationManual
End With

fPath = "C:\Users\test\" 'change to suit. include final \
fName = Dir(fPath & "*.xls*")
Do While fName <> ""
Set wb = Workbooks.Open(fPath & fName)
For i = 1 To wb.Worksheets.Count
If Worksheets(i).Visible Then
Worksheets(i).Select
Exit For
End If
Next i

FirstRowQ = MsgBox(wb.Name & vbLf & vbLf & "Is the first row the same in each worksheet?", vbYesNoCancel, "First Row Decision")
If FirstRowQ = vbYes Then
FR = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8).Row
For Each ws In wb.Worksheets
With ws
On Error Resume Next
If .Visible = True Then
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
For i = LR To FR Step -1
If Application.CountA(.Rows(i)) = 0 Then
.Rows(i).Delete
Else
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "LL", "IL", "OL", "SE", "SW")
If Application.CountIf(.Rows(i), it) > 0 Then .Rows(i).Delete
Next
End If
Next
For i = LC To 1 Step -1
If Application.CountA(.Columns(i)) = 0 Then .Columns(i).Delete
Next
.Rows.AutoFit
End If
End With
Next ws
ElseIf FirstRowQ = vbNo Then
For Each ws In wb.Worksheets
With ws
If .Visible = True Then
.Activate
FR = Application.InputBox("Please Select the First Row of the Range", "First Row Selection", Type:=8).Row
LR = .Cells.Find("Source", , , xlPart, xlByRows, xlPrevious).Row - 1
LC = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
For i = LR To FR Step -1
If Application.CountA(.Rows(i)) = 0 Then
.Rows(i).Delete
Else
For Each it In Array("NE", "NW", "YH", "EM", "WM", "E", "LL", "IL", "OL", "SE", "SW")
If Application.CountIf(.Rows(i), it) > 0 Then .Rows(i).Delete
Next
End If
Next
For i = LC To 1 Step -1
If Application.CountA(.Columns(i)) = 0 Then .Columns(i).Delete
Next
.Rows.AutoFit
End If
End With
Next ws
Else
MsgBox "You cancelled the code execution. Quitting...", vbOKOnly, "QUIT"
wb.Close SaveChanges:=False
Exit Sub
End If

wb.Close SaveChanges:=True
fName = Dir()
Loop

With Application
.DisplayAlerts = True
.EnableEvents = True
.AskToUpdateLinks = True
.Calculation = calc
End With

End Sub

Beatrix
01-31-2014, 07:19 AM
you are welcome.

no that's not related with the settings.

it seems there is an extra "End With" statement.

below worked for me. i tested it with S1 workbook.



Brilliant! That's working..Thanks for your time and your help mancubus!

Cheers
B.

mancubus
01-31-2014, 07:55 AM
you are welcome Beatrix. i'm glad it helped.