From 7a75d82184ae69601e71a4e09cc4c0a9fba4c859 Mon Sep 17 00:00:00 2001 From: byron wall Date: Tue, 3 Nov 2015 08:10:56 -0700 Subject: [PATCH 1/4] Ongoing changes to Usability This commit includes a couple of add'l changes that have been added: - Fixed an error in CutTranspose with a double variable declaration - Removed the Testing module and put it into Usability - Added a Sub to create PDFs of all xlsx files in a folder --- src/code/Testing.bas | 110 ------------------- src/code/Usability.bas | 194 +++++++++++++++++++++++++++++++++- src/code/form_newCommands.frm | 22 ++-- src/code/form_newCommands.frx | Bin 4632 -> 5144 bytes src/package/xl/vbaProject.bin | Bin 338944 -> 286720 bytes 5 files changed, 205 insertions(+), 121 deletions(-) delete mode 100644 src/code/Testing.bas diff --git a/src/code/Testing.bas b/src/code/Testing.bas deleted file mode 100644 index 0e9e69a..0000000 --- a/src/code/Testing.bas +++ /dev/null @@ -1,110 +0,0 @@ -Attribute VB_Name = "Testing" -Option Explicit - -Sub SeriesSplitIntoBins() - - On Error GoTo ErrorNoSelection - - Dim rngSelection As Range - Set rngSelection = Application.InputBox("Select category range with heading", _ - Type:=8) - Set rngSelection = Intersect(rngSelection, _ - rngSelection.Parent.UsedRange).SpecialCells(xlCellTypeVisible, xlLogical + _ - xlNumbers + xlTextValues) - - Dim rngValues As Range - Set rngValues = Application.InputBox("Select values range with heading", _ - Type:=8) - Set rngValues = Intersect(rngValues, rngValues.Parent.UsedRange) - - ''need to prompt for max/min/bins - Dim dbl_max As Double, dbl_min As Double, int_bins As Integer - - dbl_min = Application.InputBox("Minimum value.", "Min", _ - WorksheetFunction.Min(rngSelection), Type:=1) - dbl_max = Application.InputBox("Maximum value.", "Max", _ - WorksheetFunction.Max(rngSelection), Type:=1) - int_bins = Application.InputBox("Number of groups.", "Bins", _ - WorksheetFunction.RoundDown(Math.Sqr(WorksheetFunction.count(rngSelection)), 0), _ - Type:=1) - - On Error GoTo 0 - - 'determine default value - Dim strDefault As Variant - strDefault = Application.InputBox("Enter the default value", "Default", "#N/A") - - 'detect cancel and exit - If StrPtr(strDefault) = 0 Then - Exit Sub - End If - - ''TODO prompt for output location - - rngValues.EntireColumn.Offset(, 1).Resize(, int_bins + 2).Insert - 'head the columns with the values - - ''TODO add a For loop to go through the bins - - Dim int_binNo As Integer - For int_binNo = 0 To int_bins - rngValues.Cells(1).Offset(, int_binNo + 1) = dbl_min + (dbl_max - dbl_min) * int_binNo / int_bins - Next - - 'add the last item - rngValues.Cells(1).Offset(, int_bins + 2).FormulaR1C1 = "=RC[-1]" - - ''TODO add formulas for first, mid, last columns - 'FIRST =IF($D2 <=V$1,$U2,#N/A) - '=IF(RC4 <=R1C,RC21,#N/A) - - 'MID =IF(AND($D2 <=W$1, $D2>V$1),$U2,#N/A) '''W current, then left - '=IF(AND(RC4 <=R1C, RC4>R1C[-1]),RC21,#N/A) - - 'LAST =IF($D2>AA$1,$U2,#N/A) - '=IF(RC4>R1C[-1],RC21,#N/A) - - ''TODO add number format to display header correctly (helps with charts) - - 'put the formula in for each column - '=IF(RC13=R1C,RC16,#N/A) - Dim strFormula As Variant - strFormula = "=IF(AND(RC" & rngSelection.Column & _ - " <=R" & rngValues.Cells(1).Row & "C," & _ - "RC" & rngSelection.Column & ">R" & rngValues.Cells(1).Row & "C[-1]" & _ - ")" & _ - ",RC" & rngValues.Column & "," & strDefault & ")" - - Dim str_FirstFormula As Variant - str_FirstFormula = "=IF(AND(RC" & rngSelection.Column & _ - " <=R" & rngValues.Cells(1).Row & "C)" & _ - ",RC" & rngValues.Column & "," & strDefault & ")" - - Dim str_LastFormula As Variant - str_LastFormula = "=IF(AND(RC" & rngSelection.Column & _ - " >R" & rngValues.Cells(1).Row & "C)" & _ - ",RC" & rngValues.Column & "," & strDefault & ")" - - Dim rngFormula As Range - Set rngFormula = rngValues.Offset(1, 1).Resize(rngValues.Rows.count - 1, _ - int_bins + 2) - rngFormula.FormulaR1C1 = strFormula - - 'override with first/last - rngFormula.Columns(1).FormulaR1C1 = str_FirstFormula - rngFormula.Columns(rngFormula.Columns.count).FormulaR1C1 = str_LastFormula - - rngFormula.EntireColumn.AutoFit - - 'set the number formats - rngFormula.Offset(-1).Rows(1).Resize(1, int_bins + 1).NumberFormat = "<= General" - rngFormula.Offset(-1).Rows(1).Offset(, int_bins + 1).NumberFormat = "> General" - - Exit Sub - -ErrorNoSelection: - 'TODO: consider removing this prompt - MsgBox "No selection made. Exiting.", , "No selection" - -End Sub - diff --git a/src/code/Usability.bas b/src/code/Usability.bas index b1251d1..9cf7228 100644 --- a/src/code/Usability.bas +++ b/src/code/Usability.bas @@ -6,6 +6,78 @@ Attribute VB_Name = "Usability" ' Purpose : Contains an assortment of code that automates some task '--------------------------------------------------------------------------------------- + +Sub CreatePdfOfEachXlsxFileInFolder() + + 'pick a folder + Dim diag_folder As FileDialog + Set diag_folder = Application.FileDialog(msoFileDialogFolderPicker) + + diag_folder.Show + + Dim str_path As String + str_path = diag_folder.SelectedItems(1) & "\" + + 'find all files in the folder + Dim str_file As String + str_file = Dir(str_path & "*.xlsx") + + Do While str_file <> "" + + Dim wkbk_file As Workbook + Set wkbk_file = Workbooks.Open(str_path & str_file, , True) + + Dim sht As Worksheet + + For Each sht In wkbk_file.Worksheets + sht.Range("A16").EntireRow.RowHeight = 15.75 + sht.Range("A17").EntireRow.RowHeight = 15.75 + sht.Range("A22").EntireRow.RowHeight = 15.75 + sht.Range("A23").EntireRow.RowHeight = 15.75 + Next + + wkbk_file.ExportAsFixedFormat xlTypePDF, str_path & str_file & ".pdf" + wkbk_file.Close False + + str_file = Dir + Loop +End Sub + +Sub MakeSeveralBoxesWithNumbers() + + Dim shp As Shape + Dim sht As Worksheet + + Dim rng_loc As Range + Set rng_loc = Application.InputBox("select range", Type:=8) + + Set sht = ActiveSheet + + Dim int_counter As Integer + + For int_counter = 1 To InputBox("How many?") + + Set shp = sht.Shapes.AddTextbox(msoShapeRectangle, rng_loc.left, _ + rng_loc.top + 20 * int_counter, 20, 20) + + shp.Title = int_counter + + shp.Fill.Visible = msoFalse + shp.Line.Visible = msoFalse + + shp.TextFrame2.TextRange.Characters.Text = int_counter + + With shp.TextFrame2.TextRange.Font.Fill + .Visible = msoTrue + .ForeColor.RGB = RGB(0, 0, 0) + .Transparency = 0 + .Solid + End With + + Next + +End Sub + '--------------------------------------------------------------------------------------- ' Procedure : ColorInputs ' Author : @byronwall @@ -240,7 +312,6 @@ Sub CutPasteTranspose() End If Next - Dim c As Range For Each c In rngSelect c.Cut ActiveSheet.Cells(iORow + c.Column - iCCol, iOCol + c.Row - iCRow).Activate @@ -371,7 +442,7 @@ End Sub Sub FillValueDown() Dim rngInput As Range - Set rngInput = GetInputOrSelection() + Set rngInput = GetInputOrSelection("Select range for waterfall") If rngInput Is Nothing Then Exit Sub @@ -549,6 +620,125 @@ ErrorNoSelection: End Sub +'--------------------------------------------------------------------------------------- +' Procedure : SeriesSplitIntoBins +' Author : @byronwall +' Date : 2015 11 03 +' Purpose : Code will break a column of continuous data into bins for plotting +'--------------------------------------------------------------------------------------- +' +Sub SeriesSplitIntoBins() + + On Error GoTo ErrorNoSelection + + Dim rngSelection As Range + Set rngSelection = Application.InputBox("Select category range with heading", _ + Type:=8) + Set rngSelection = Intersect(rngSelection, _ + rngSelection.Parent.UsedRange).SpecialCells(xlCellTypeVisible, xlLogical + _ + xlNumbers + xlTextValues) + + Dim rngValues As Range + Set rngValues = Application.InputBox("Select values range with heading", _ + Type:=8) + Set rngValues = Intersect(rngValues, rngValues.Parent.UsedRange) + + ''need to prompt for max/min/bins + Dim dbl_max As Double, dbl_min As Double, int_bins As Integer + + dbl_min = Application.InputBox("Minimum value.", "Min", _ + WorksheetFunction.Min(rngSelection), Type:=1) + dbl_max = Application.InputBox("Maximum value.", "Max", _ + WorksheetFunction.Max(rngSelection), Type:=1) + int_bins = Application.InputBox("Number of groups.", "Bins", _ + WorksheetFunction.RoundDown(Math.Sqr(WorksheetFunction.count(rngSelection)), _ + 0), Type:=1) + + On Error GoTo 0 + + 'determine default value + Dim strDefault As Variant + strDefault = Application.InputBox("Enter the default value", "Default", _ + "#N/A") + + 'detect cancel and exit + If StrPtr(strDefault) = 0 Then + Exit Sub + End If + + ''TODO prompt for output location + + rngValues.EntireColumn.Offset(, 1).Resize(, int_bins + 2).Insert + 'head the columns with the values + + ''TODO add a For loop to go through the bins + + Dim int_binNo As Integer + For int_binNo = 0 To int_bins + rngValues.Cells(1).Offset(, int_binNo + 1) = dbl_min + (dbl_max - _ + dbl_min) * int_binNo / int_bins + Next + + 'add the last item + rngValues.Cells(1).Offset(, int_bins + 2).FormulaR1C1 = "=RC[-1]" + + 'FIRST =IF($D2 <=V$1,$U2,#N/A) + '=IF(RC4 <=R1C,RC21,#N/A) + + 'MID =IF(AND($D2 <=W$1, $D2>V$1),$U2,#N/A) '''W current, then left + '=IF(AND(RC4 <=R1C, RC4>R1C[-1]),RC21,#N/A) + + 'LAST =IF($D2>AA$1,$U2,#N/A) + '=IF(RC4>R1C[-1],RC21,#N/A) + + ''TODO add number format to display header correctly (helps with charts) + + 'put the formula in for each column + '=IF(RC13=R1C,RC16,#N/A) + Dim strFormula As Variant + strFormula = "=IF(AND(RC" & rngSelection.Column & " <=R" & _ + rngValues.Cells(1).Row & "C," & "RC" & rngSelection.Column & ">R" & _ + rngValues.Cells(1).Row & "C[-1]" & ")" & ",RC" & rngValues.Column & "," & _ + strDefault & ")" + + Dim str_FirstFormula As Variant + str_FirstFormula = "=IF(AND(RC" & rngSelection.Column & " <=R" & _ + rngValues.Cells(1).Row & "C)" & ",RC" & rngValues.Column & "," & strDefault _ + & ")" + + Dim str_LastFormula As Variant + str_LastFormula = "=IF(AND(RC" & rngSelection.Column & " >R" & _ + rngValues.Cells(1).Row & "C)" & ",RC" & rngValues.Column & "," & strDefault _ + & ")" + + Dim rngFormula As Range + Set rngFormula = rngValues.Offset(1, 1).Resize(rngValues.Rows.count - 1, _ + int_bins + 2) + rngFormula.FormulaR1C1 = strFormula + + 'override with first/last + rngFormula.Columns(1).FormulaR1C1 = str_FirstFormula + rngFormula.Columns(rngFormula.Columns.count).FormulaR1C1 = str_LastFormula + + rngFormula.EntireColumn.AutoFit + + 'set the number formats + rngFormula.Offset(-1).Rows(1).Resize(1, int_bins + 1).NumberFormat = _ + "<= General" + rngFormula.Offset(-1).Rows(1).Offset(, int_bins + 1).NumberFormat = _ + "> General" + + Exit Sub + +ErrorNoSelection: + 'TODO: consider removing this prompt + MsgBox "No selection made. Exiting.", , "No selection" + +End Sub + + + + '--------------------------------------------------------------------------------------- ' Procedure : Sht_DeleteHiddenRows ' Author : @byronwall diff --git a/src/code/form_newCommands.frm b/src/code/form_newCommands.frm index 95f10f3..2a8fabe 100644 --- a/src/code/form_newCommands.frm +++ b/src/code/form_newCommands.frm @@ -1,7 +1,7 @@ VERSION 5.00 Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} form_newCommands Caption = "Additional Features" - ClientHeight = 5970 + ClientHeight = 7770 ClientLeft = 45 ClientTop = 435 ClientWidth = 6585 @@ -13,11 +13,7 @@ Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False - - - - - +Option Explicit '--------------------------------------------------------------------------------------- ' Module : form_newCommands @@ -25,12 +21,9 @@ Attribute VB_Exposed = False ' Date : 2015 07 24 ' Purpose : This form is just buttons to easier get to new code '--------------------------------------------------------------------------------------- -Option Explicit Private Sub CommandButton1_Click() - Chart_CreateDataLabels - End Sub Private Sub CommandButton13_Click() @@ -84,3 +77,14 @@ Private Sub CommandButton26_Click() GenerateRandomData End Sub +Private Sub CommandButton27_Click() + SeriesSplitIntoBins +End Sub + +Private Sub CommandButton28_Click() + Chart_SortSeriesByName +End Sub + +Private Sub CommandButton29_Click() + CreatePdfOfEachXlsxFileInFolder +End Sub diff --git a/src/code/form_newCommands.frx b/src/code/form_newCommands.frx index 3d9480ecb85d18902ce9a933d2274d97b3792aee..45bdc222aaf07d81888f97ddb955d9d7e128d3aa 100644 GIT binary patch delta 734 zcmZXS!D|yi6vp4KscxF2O;Dq>HW_QQRhz|HtPw;Z5v6EKFhT~xTt{Hoa`gbij9dS<5htJPf(x0>=aO}rM?pE+VbvyVHDMSY z$AX=)r>Q)GZup5v!_0!2qmA-3R%gHr$bc+37!HSLG0%c?AP3Ha3t$e+gNxu2xC|D6 z$}!R7eJw+g92xOsT%`|(L`#_I8BrY_yto!D8~Jz&kt?dvSDF_HV^$jkJH}gRDS8k3 zGWr<$Gb*5K4l{{Dsh8Hvjdj_mv>|w?7eX QaD(Pf5tYr+KbYG84Y>}m2><{9 delta 331 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 I`?i<<56TGG&;S4c delta 105735 zcmb@v3qVy>zCXU!KAXb<4sbx^CE^A_jtY2CRD2&04b2BWDk{^1fCA1q)Xa3P+imDIS+^;iX=bdf=w(*M{(rt}?|nERGxyH?{tFgs zt?&1{zU%$^uJ78k_aw9*OX|v>;be?)SZO?rDey$X4j6`E0vWpoo{wPLLHH?byK;Mv zqxoP{KHsCL^P+$$f>mK7V2LAfaKT2yPKJ$vb;HKO#=+*pA~BYsmpUi&czvsqqIWox zit+&S!cK&p1WUOnhg$$!2s;JV2Rjw^Vc3QG3(hfaqMC!yTv)x|nHn_>o@Ur9^aRHk zex62eO1?nP zQpd%4mWxaFkA8(afMPG|JJr=Z5r~vH&2gJVm<0Og>S}j3NT@!*!O&kx^(re}`p$?Y zv3$M-v=BKFMCsDMi3sX#io2MS9uG(kY%c5s*pcdo>XPb*==CGcV*RAzQf1(@GvKG~Cq{o7}^ZLGfaL0!1=wBf+v91gwfn#=h< zeN6Ot{hDZ(zBsx>VT#@!J=?LI)$6~G9_v`g&e#7K{h)C6I2v|073rNWwV~g2zHj`~;)odEugbq1VKkBaH%Au^-dlbDdHC6A4FPryE z>U=QAEjKFO3{w;AwqP#w*kXW-EL^oD;p{?vf#mwgny zU0;=ulT3VIsOyIj=r<-z7o#^TC8DQ6(e%CqZBNn<)A~X561cujG2l|3UW1#b-<>pF ze=W7(_BzF_yAx-|%3+oXDk4Fb%Hfms?TIU5IkncjFu0S(%v%oq+r*`A8XPoi>^KqB z{Vvycj5^m%JxB{fITH~0;Y@w!x@m{zjlP6)zkX-(%%}>B#IN5t=3L<^R9$-iORD~> zWVilUiD!3{D~8L#DO=^xvnf;fo^?^9M=DaJo|!gXtZCpE9r|_JzsNr!<8g=XQ=PXR zP}DlDX(l~KaCfvftj=d8wG&)k$^H#@CL)-D&OG#3U4C8MA{Jf`0@ zm0iG6LvV#vMo5m_r8mvplA*F*YNGZi;v!pu;$Oyo&yG1QIOM?cY1OFyqdZ zkDc4}@lWnA|AoFOEywc_^M6sf?!JZl^J1&-dG7Zg$q_pocvj4JU6Z&^kD9iNck4G! z8^5;1V;HlMF15R1l))FtN<1D`Zo+OgjHU1~Hb0ws9r@B-As?_7Y+1NZI8z-H^rM%= z>CdFE-b528)dJ_o&?(2V3^^5cT2PH@8fGjiC>JjAS*w&QG<8v|UPPx1gyZJ}Ky+1r zli~WE#bf73pbZ^<3KNbD`TJx$A%4IU;$N<8R_c^@*lfkgzh!e3N=H9c?Dg-%LReyK zVW$DmFhi|_n}VOw>`62l*0k%ED8$%}BvOGV9C=R9c0B=VgHMCqRC@G(`Dvvtf+3OuL)Bv3`sB3G~gX5Yw`DL?+_$5Yvvc@k(aWd7p114ADe|Lpw_`pZJ#KIoAnz~r2 z0Gyhq9WK>`#4~f++6x%*Goge*UkM9SarYrRVZ{wf26jCJ5MiYHsRTT{eu(kfA+>B6 za$H)iP8~PA{~W+JtPa^y(SO3T$Cx;IoW}*5kf{J{1#&}pyEjohFGA#Ma3@|jVA$1P z2YND;7rP(W<)8sV?XFpP8*Wc_Hk{(Z=zpwEP}L13?l-$ruwKv8Y7K|zE~Vknm{6sT4-Rd)(_oYV#PAF?Awud1a4+Dr*%_YED!@-; zS{e@T1^h%f9O=s{>IULiIKqN=0{%MS!!rc5(K`bC2dhHL65W<59bFG9lu*yzK_?+N=!1Kf4Uq`)o8NsUnr~YgAyUUaRYYM?T z0e6SNFMjsEmkHhk_?b{G1sS_Oac&|Z$eauzaAtk1>KTG}Bf>jj@V~A5!PNvm0{BZ| zaP`oHH*G#ohr#Eanf5X9rh!AdJ1LZ)N`g6}FPOE}JnoBwUn{u<(^w7TiI5SkW2s$#K_5Icy#&_VnSvBBV3|um~x=hi(Kz zrC0_RC$W$b>l*l^c-lNyVJ*zwcWmiWq;||BDpe(k7wGM!DWEv*5x(6@(xJyo6IJCBr>Krr%EdKK zNBp5=?Ze3XCb^zi{BZ)|JvA(`g$a4h_7 zd`@s2>#@!-)E^UpN+bCS%ng3&uu{v7vfOVh_d?69FJ;o)kZZcLC<8DFmiv~4zuYgu z?82F*yQB;*MjhKhf*W!P0JGb24_Yo~)af{T!J_-ja_x*#Mciw_{HPl0n59-B-f|E} z&g!i&(b{G=j)h1+Q`V##(%NK@Cddw+$);HDa?8EJav!$b-&rnKD1l5i&T{8j?heZp zmivn3ermZBWyUgt>>Sg>YAyF+%iSOkt(ojS%N>U^nM}wE-($J&0J@h@s!_lus{!LH zlD*{B7`YX07JGubnJZviP-(=n@4tv+X{|+3SG*9xGDjm6ZGi2*)!Ny?U8(JLrwlxj6BD_i4T{JHtqT$8DV1d}e?u zXW&sc3%)aO5>)bF&jO2I8u;$hrw7iQYA|NFk^WpG-*{)hZM-x<*`)Gdt)fYa{`RmA zY!YenX_rVYc(SuH-hf=u7SfcAQ(+V=W(pQA1&fh_bwt6Mp#&k~P}o}3Iklr~!{5)Y zM4{1;YO8F3V!&6m8fi_2+GKbdh$>)w_o?5Q?ZYPXyH7Pkbs1`gq@@&BWf*CxhMH>8 zx15y5^KG6i50hgSU0S~K2cY>^%Q?k-Sd zQ`*anXeWB6nq=gq8o6gaUS>o@vK$n+8}foxNyfz<*-L1yO!pYmml-Hme%>-8#OYR> z6EmWtnJ0*ZNevb8tgQ{YmhKDT}j1KsztsM)3*WMxzdXrWs+Z(hkWI7 zg&@KTiG@^4Rs}YnLGsf;BbUlgt^<1la%rHGODoj{pv8q|y1bzZnwtO`r9iPNSQWe7 z-PT%+e3+VxqlCPwCHKcj=tkI^U@3eH+@HX9>GM9Eqqli8&-De zJzifD(LDp2|A6g*rLeAk}M9@3%FmxQlCBr z`!(!oSYq@o-0xt|SYfOHOx7w|C4yHEs{uri$V^`jyTK~2gE;~WU6BrQI2V!u4{0*< z*$WmGgj@lY)ehswXe`TWI6H6XAt3V(l9foZS;NRk^rT>Xgt*aEoW@oSBSQs%%+H*DO!L6+7=|bL zo&qVJt6Zk?(_v^5ALC+hEnG$CruS*YgcZ3DW~B z@*O@lUjNC8aeSq&ogBSp8HUVZRbx99FS}N0WG$>Q6z))(*;YVo{Ew8CY$LlY6z){& z5pG7SYphurU`KI=J%{~36y3}(Ra%(dzOs<76AAb8alAzo!BG}Nt6}9+yhMMva$ZIa zlDdR_uJ)l7Kb9=A*ixmCRVeG&o>l3&o50$n&@jM1SLw>98FXEW2E~mCb{G7s^#!X^ z(iwcqlq}p~Y3vRqm))&!C>ZQj=Ceaht1gJv+mqCE2leY5%pBDDk8$)>n0kZ{>Y3}N z=*wSyR6qSmobJ42Z#rE8?m=Ssgd@LII~r%S$73JMOr zyFP=fzM|=xKCmHUYV8%Z&4G@+mUPgR4-$jA>gHChV`m6nC)v{cq%RBH5)6Pu>u3(4 zJ#u=$1P-#Xz~xH3c_T$R@mY9kx3Sn-5kAoISSUV;B>|G{8t6E17MyV1WWnFhnSNn) zf_eeNmE5-KPCfZ6ub#QlnJVwU8TVMS1yedv#A-+kk?dp3Lt+S0RG12N1zaEo{;=>+ z)5hl`BcEb@2>Zn215k+>caJA}ldOX3w%Qhb*Ixp{a|7Qj4y5zZ`jRcUZx;uX_&H*0 z1axQ~-7;C+m&zN&-J|&oy{#cm|7?GHf!zzQwJOdIcMJ>vh{F0;E5?aH3J&jIHf$9A z*K?Xq~uFMGv= zL(&m^X>?kYOcR}mj5mjUBR$c~A<2ciL7AfWjPnI!v1pTVdVWMg z<5;b0S{;^W- zrfCGCMmYkcWZ?z`-edaCWlP;yb}Bb& z!bxgO5`UuV#u_en`qXtP$(V-#SZ21I{^HHK+yFg8o@}shcVQF7 z*wGCAKuxmJo1s^qPLAuN!tHXoNCI*qL+{$093{usE|=Rait2ds1h)q$jmF$Amj_b| z^O3*Zl-E%H0e356+I1xfaolxe9r9OLF4x=$+2a5q6BMl+lj zbxXt~bFW%t>aS6MUH9D0=j#Qp{uiICe{;?Cn%83(tsupk2p>&#=p2~zX29oQ+O2wb zaKchTT?K$W3z9GWR+$y@L8xoaHFwB4QetJ=(ig(wBx2}2m!x9qR7ZEAI-v=H-WHSi zDgeU_BHkrxznWF!`ed`c7 zPGb03q_5mHMlPWGwq4L)q4aLCJ&)}w91_KWJ^{5F{nK4zMD`?}>OM_%XBoZlS}Xnv z+q3Q3q48;V>}6N$k6&vg`La#<$+atxl7@nqnT}wy@bjR)^16u_r7-%{*X5eId+53x zn&kEWwgIOsz}SxQ5tlgo|KnnPQOBo4^6kV*;9>9T=lpQ_5O^fJ5I>(BdiaN1c=A<7 zc&)jhY&e&l!*%cV`;)>EQIHZQvg^2h;`(Jn5Yd>(-0U{4S9IPTq*AmgS19euO`$ag zhe>%o(T6TO(v=v+X@VVo-{VJj2mo#i_KB_z-GT1+9aeqGI$}HgBzN~m;pDt7j1eJi zfqa!=th5s_BjImPv)}Zu^&dfEU?3S&f)uX_FuLosGaxsn2#4acazBD$W_M$vQ1Tq! z#G@$dX;{Lwfo*p*u49rFZxpUzCIk-v;{lWsA*p%z#VIkjGd+^V0o`QNwVa))aQg6T zxp24>^fAbbMnJ~K$!t++<-7q1Wz&ZaNAA&R{hb@y2UQSp!LZ`2m7Nd2qS$!$)q#0$ zG5nT6UR+Qv&SFsmWvgL8B2FIRP68JdwCPymV=K?j+FARP;arO#T0iSTg>qZO-isFr zo0U1Fd#6A8(9w>vEEQSysv4kaPi$9gTII7}vemOq`%Vf}*`&de0sUR9En zy_x#1Z<3V*nUqel(vwNoBO8wrB}%Hn@s2b71gZ%0*IE8Dz&kBJEyBH)e?9#DmY+5e zl^WeDxv(U;S(Qdhx)RXn>Loe74k&5}S{2((zlzbpx->Ia-I~nRK0+Z^q$KLfGX0b* zf0#dD`BxCy^2=OVewi!FFLQ;83*{=?%oQ9g^Ygw{BGc=rUXim2aN112%vpD~{@GXQ z`p@RLlmprFzKHkf{=4rLpX^pNUMg1Y=Skw%14c3WsamnmtOT#{zP|7%%Sm*eiNa0Trn#8na976rLNkWeJJhV zqe;P#Fd1@WFomo#V4Nxb9&#wP%}8%DrU#6H&MHG?PvH;=nX|l5kdn!PXGv~^Lx-!) zs16tqrQlK_f-V&x4T}9O4%eU5 z{%NKIcRHEH4cTL>W~UqSjesHh{9R3V}6KdiqI ziW)saQU5QQ8?mH8g+ZymraEl%S%B-slX84p9Q@#Q}tZvweV%I3_5OnWe| zBXWN~Xm*qQAES1|niT4q=zaq?QpYO;DhUT8GAdpzJgxYw1CuG7Pn8%N52RAyU{$bm zgQQ7_xnHtx4(O(UB%oecAMkEk>drhbDOtdDu$fwtFfL7^!?1n-5Zg{8fy{_;{nS2W zM#T16*o+ae$K*cm@5L=K%lCIUAE8N!%!r)ZXvmTo5qm5gD`tPd%hXw>lr%|7NpaFT z{sA8YN1lS+<|#Ns_%BnOSX&f2_hh1)FOniJ9j`(gCDT^a~TV&x}X5l`tG9M*_kqI(&x7f8s$)MAHF)s7t z_AGOYvFE8CJ!84oJqO8{r85t>DH#6j4O&rP!Vbl@Du7d-oDTq*VfOEEB2y1wnocKY zTI*;DC+6~n#IN=3F9$tc0Ie;=ADBheo9guH@`gii9G~ob;`w=M91*KnLlvx|CtS2B z>eX+rMq%qj(HUiw{=(aLN%=&)HQeG*qYf#bsHcL!9JJ&K96f`~Zp*E=++SMmam$S& z4Fs4{%iUqQk63QhToXTJ?CJ9oCI?TTsynH=6_(iGVauzGC~7p771bFmwxP}#!`XMf zj2%$zXval!xiQe}H?F{*7+y&?ey)Mrw(opX<{BCGSf%q$4&=FwynF)$>RJPbs8|i` z@IWlza6{n-3B?eb7QZotWd@re8KG2gZ|ci<0&`W~I|C+*3J<#=AB$W#6PLy0oqVNc3(cK?;CHe1x?u8{`7u^#;sK7>ZeZ|CN{%5^*;&}eLe#1xOvQGj< zs$U<&{RH+?*nU{LHTWF%3#Pv~aq0wy*z$1);W{v1kzB%-ybd5dKLw4hXTSOf;Togl z=ozoAFRla$hupz1Zj!^o6uSZ#{@!9xq(J8%Lx1d&NhFU|G*y54H7^dne$bl-MqI?= zCr5+Zh}}Jmj%~#IEWvq3rB_Nq0$0S+fq;v==hO? z;?{wNv~l5;Mtk5!M<*tTwfdW{kK^U~*RM|>a`;vt`AWe1uLW;xiSmILrEyv;_*zMY z#(!^hW`eExPBL9W9@BqcJx1wQaCFQL66YS+ZrFf&g*;?8fQU+fQzb;U1qBCyBRYys ze_a+M@{=K^osLtX13HBjTuIZhvjVg@D~FDkwmvJ-_;D?>!9GNLK)4UK9|_Tb!{C&0zZx7cFm}WA_vpgNO!x>QgsbmSO(4EO z8BCD%Qcyq{=>=W5Iv>#y`~=|P>U^}@unQDY=bJ>?fUyz#F|6#9_~?jIS+#v&g!xlH zenYPQ?i=S1o}@SY!{e%{st0lUpoHB96`u{-bT(+FUj2v9F{$^7U3lVksQ%4Du3~@d zlw#0>$CB}EtXl@e`>!gAqJ1Wh)W1D8n#by%w^A0wu~gaz;QW_~uHYp<&P-GZ6($_& zbJ;9l(a^b;o?p-*CmIWCo4EHXJ}My*;-*duoQRRsEy0dS(4*^qDac`ZmosiEAdpHB!%V3nyE!}66!6MCXrMm@&Qj{(B9uxU|Nxe z_IrBVOJnpuq>eZDa&da~OJjJPe)UT!X&=Zr!lZTK;`tF7Ck`rtbg9A7jcN8J6F(=% zy7GuK_j~E)wx=&OMQ$8CR=E;Tmn9(80DC9p$|6Gi|Xku*qjkR@m|_ z=Nn)0N7Ufj|3_~51~$OU?Hqw?`9I23Lz6KtlBGcd48L9@$2E$@)?il%tt>isYjl2N zqC1`E>Pt_=D5tr8e4)lQdCwII(GhBKt?vIzhW@J)k1Rw0hAv)@z}=4q&trEvDBNqo z`{5est9LsF@b?af&Kfnsd(b!NqV_KRp$~H1)Spd0KCZv{!Nff$Q(OfFL|4i6qKDJ< zStqlD>z&6=U*aTS6C#t_Wii?7(AbO06xqg-DZ*17xyHT=$yQufWj3D zVRPAH-0>FT3W;X({g{5~2H4A?!o=vf>;(yriN&tW(^Z%Bz)f2X5(;#5{$kDyJjSZRUudE#WcZX9|BRrxIDW8Vx=w!~x6g zh5G{A@4#cum-HVOiRj6(a?)_kq>eQolP7>8B zFXl(Yz31{v4}Y(MCH6mJx|93UX;(xIf51Vi0VX5LOQl0EeKdU(d7D6DY5XN4TVE@b;X!B zX-|wE1h8Rb&~YY*jy~ozyzaTb{EF`CvhpRGNXU?2gXUi|go7S)3*O_X9^DN@44y5U zPnjVKfv;8n>8I#)Y+tr{srOIZ;bEIC&ZIbec*5+Fmv()~80YO+o?;SjcTiWyFD~uI z1kEkCnIU>Y?St&KgN~GVQngoZstFfB{>aq9wj(N;v2bZ8Iq|xwA-Yb9fmjzV(X|bs zyCXz*z@jr&fH@JSFsbEcGPcmZ zXr!Ebt=!UFG8XM)5>|vZ)D>KR`bU`?>V}Y+FS+fv&%~zF!jqzft+b&%@M4I~z9I3= zM~E?r_c>@F;@7Hb;$#{{UQ=!i-HZ-awF~5A=-zU$WP?>qU5*S*ii7yUs;#i_L}TM) z5`XUKcLITCJu52?mW7|-2wB-@u}Z+aXS32e2D5V1!dG2*PV*psFe@i4e5wDGV&h{H zA9EP`Z@$R7B>cuw1^=gH&@tO@P@AT12;SDFc|tG!GNt@TsJqzR zsAhX}tvQ^{aZAlZqoE&esA;adRmP)Xdcq+NXi7#xs!TT~(TQnL8q{JMwxt!JSkz4? z;3qm%22&%b4QwlDT7aPx>^>OiNRmh3wSd{VBYdDEQNqt32G<@)mT)iNdrf}ki`B8% z*2+qGAXO6NfZ)iG1WkOPLz8%tFoh?GprN4>$?dYLp$_pYVF_j%pB3&2!Rg3nnRXQq z)GnIX9)W%fOHf)x$+dY=nl7vyRj7zoaZjEjMckd|NaX=B#p_53hF=C#G+Jb+vhCYr z(o*ptj011za+v7aLUf}_eE$(GIuZ7Rt{gb~wD;L2&s5SXrTE2RaODeS0i6y353;F1 zP#!f9VMlvKx5YS;+D#CXSagM9{OUK=YW)_S zi)H(=wXM~5hH%gZzo40LY_z7)8IDTsVzmvmTWhz0kKspHgKMAYJNLckv~msw;lYwl zX=|Bn!>M`fj5cm>nosZRiSHP;wW*=DZEc+u&Y*M(tb~Xlll|FA2_U}VM~|R$Lb&O7 z&;>c~hpc0q(&NxQU-_cC(SxMU89j|l(eHOBPWG`t=)$)ctI8~BRSvr|o(d(z>0nJ4 z#Pddc95?jtn(mnY{uQ%##54O)4)Q)(U-{K@L50z?Tsq+9z^RBQze}a^U8=37bWGBiDoegNz;PJP#OEknrr$jQ>URC)M_e*guT1Yc6&dtP zsLMmCRt%?r4pRnVR+?O-ziC98MXblaXgs#|nSKwNozY`mz@c;&%}Pwai~RIB5^z-oJ%isASL4-3tbBOq-pO4& zM~vRd7e&wuL$|0d#E#rECnA=_WfYV0smbr;#Ci#2RlHAphEL}xB@U_YRbdjlNRERY zBlNEd+AR=efOdi4C2y4XT7Ejs?z3q`JT9K~zOIP$qZWv^U%i$;8~ziLYm^5wnrut` zvHwaQCtFP;5SWupg(g1oQ=%2Byi*sisu0Du>k)BH7Ltzi?W$B)>r&~yUHoAR&*whj z@bU38Rsh>cg9tq!1I{taPgm76UlJVC1FOOx`>Hx1yiqNR|OH1*CMmZmO-g5(`9y^SfzW zOsz6Oax4VMk8F^UGY$Mp;cv2Ns0cl7{oe1BgME_JoVZfWNe`Mb7@DTvEmJW49`aY2 z{v;|%lj%>TjI~*Cs#oj1ube=-Ot_oidrdzikeH%O|0r21`e=eVgCJkAQqe*=7O(U1 z_2Ti}_}JL%18Xc1;ZhP2X6Q=|As$HOYZJZTOJ_*hVUX*?z`G(n&S3v3H_vpIOLXb? z^kxMAll5XZB9ES+C4z1%+-}9~hD+q64o|x5xom|z;wQVx{2SpTqp_s3@To)a$^$_160EEb6nyb2Ddo7(dO@?FEOnaEi9%?xKD!&xlZv4`kj`rs1JGJk_Y!;x_bpz<`J-uj%m*YwF1{xs&bKHxH0 zYh8Vdc4d7-gVxdrjrW$?=K9(eZQ~AYTlLo37LZ8BsaPTOqTbc=dUH)JrIi|gc$|wL zkHPbWvGi=(fmPOg4&9Rr_1@8liTffMo9;o!Jc~dHDuzth1uJyAe4%JA{pj-im{&nj zNI8dQ)$Tty()7DWWzz@OL{Gg^JmxWgPpy>LVSJ_z#HuVr=+bx$YQ_OPNW#f#5>DdbP3utkWX5QPC97_m+7B*U z+(r|+aV9}YX2@bKsKv1yG|aOl&c@1ctc9#2WULiW2C%z~hNQbD-#7+sVu({~e8!DL zGgO&_>PE#C4L*?~_lfqKS&b0Z7SLAZ$g$Kpyl`_Q-mF|(r9%Up)H;e`J%*xBNl3#* zz(^V#bo!EJL~JEZ9b`tt_J?Ch8zR$v0d3_iqd%RH!xKz}hy+rI$k&+$*lF= zlf$kI-3`$ljNe?;q33ud7JJeiOyaTPo~!ui2-@wnht_vjlsN}GSQo)k#GWF)8k+eY zTA@>fQN+JN$QMH^kVu@yZ@gVoGZN^cItn$3_p}TTL9o>;IK}f+x_lN@ryv&05jUUW z({RLsKHH4vK0I~?UrEpdqa@Lf zX7bA%ToIqm<{NmVST%>IEb+5rX=vY}UzEUpZyf6}^7_=~`5V~jc zpmD@-;cE*Z(iNwK9h+UWR6!Gd@*<|hVF~#Be^LUb? z6g$MOXeBeU%+Uw-^W`O*=vu&I3qtq%894ruER&=;lzuRQvH$d&XGJss-W{C0OTIg( z5Z`3;B2*IZsR$ z{+cKLD7Hc|iBCKFDTXN|8=?t7li?H=FB)_B5(vA0nZswMJ#&_LiA42U$8#bomye5j z)zO6_;}^1`(S?=hKqsNXK>0Hb#~p1pn?I7gi0dZ<=?h6T6p~9yxuYe%wB(K@z}s?3 zQ@m-4$6^xy;Gq2%eo5Fjq#O!X;uIDTMlK(tu5GT}CNd}RNm0ifU7$wOoE3pS_>ju3 z6u}9IKvg5|p1?C`IfuZ`PVa4pPd4k>(N%1RGuTgrF@evSX-2YTu+N36&x^>mu|Ja; zllYFK3vir{C{K&RrG*iAQWDP|wQKHycSD@yq0nMwi)mvL-*?a%4lC4IrE|*c{Yn^l z9B=+nxUpV7d16@3WRXpVgE{-qu@~9G)Or@bNOmrM{vhu0a`X8~%)UVm;*VZFHiwwm zLO|_-lcB7i7$jsOb0W`}Vp7^7&rd>>UL^orhS4CNs&dR%fGWbqE!TWmo)2|4?Rq+?6u&CiXt z0`GzL^Y=U{XF#TGe|XO>ht|PW5E%j33X?LZsHteP^?=ZWh(StI_)ERN-Q0CZRH#ln zRF%%x8NhdsgttadD)2o+@OE!@%A7=r$jN-{*zkTAB_-vRgM}BbwDPf{a1!(_FPqGh zgJ#*lSc)Ep=a}H~6m1~}bL^5S5`Hf&*de@Ki)sjeWC(ufd|(J;GRFriU_@L#U&?2TaqxUjYXN7SN;l+kYB z(UhT@pc=LdKbl5{1! zNm~~;Hdg{h45C?cef751Sfc9$EWAmpwRtiFB!0;WOQ@lCQ)?Sw#5a-B*$^9TW)w$f zExhk!Yje9nL<|y{SraB9?oGhZZbIU4z@i(+s6I5XfnFjqn8Q{tM9E|rH^<0uG^w_U zr}BB2ZW|=+t3r}_`~CNblKHcM__`g*>Ms~cR*${TP+9xmdp`F6lN6tB8s_4bp(<3C z&?ohV=EHnL7WQ0BtSjJ8L;DW<=3XV`@YF)Sg^Qmp;G6Wmj5Pg{6_Mh@W6DJWU$t@` zZcpMDaqRg1XEZLUF>w+9 zh4Q6C^ey74sb8Xv^UNoApfzhPi=8sD$)_atbIFagRQi$L=Z?ek7xPR-`PL!USMZXE zZvnhXTwTFaAONM^`)Mq|AF~5!wUbc5S)FwFSOq`86}&;*b;YEy8dKD}kXuvT2@+~+ zQ+F8oP{b=s`N}B_%{8b6g-a9|vkISAG^Rq7O)gbw1=3azuY_KW!d>F=Y8QmP{*GeJ$krv^B%BdPrT6B>U< zIGb;)*5&;py}DIR#>IYmBOu>31@RniE~IOZa(sge3VtOVHdiMum1L_ zVO;3JhungOq)amKU9T8=Wc__3K49lsYvf;m_O*2Vk_^0K2;fs}XXqWnSt(~AcmI6K zX2QV{QhosWA0g#f)X%_;R9Wq3i2$*3Q;+RJQ~IgyVB{fWh;pkf0we|4xv=!AYY}O{ zmcZu7NRkh>eCCJYlHigoFctO;v|)Xq!TJ@_fTdHiG$YFR=pg&|v2<$v`&c@Z{(UT+ zF8@AO-ue-maus|Mc_fJy8ZPonqiMat{A!h{lZq{m^@R?$s>(=POPvyLRLp0aW?mtT!^Q!w{6;Y77Ppq|1H4b3~5#zF~wWiT`r(hvF-AXWej2L*Mn64 zC7`6sSQs1}K?OkVMX=SlRp>Sq8$?_o&-ZS4$-;qnPbVaj098 zlJ@W}M`v7VsBuYfJXggHUXb3CmzlcPiKf^%(R@djIOH8&;!q)P;!q)PqABFfh*~21 zbt0sK^yn_qe7lxtzFkWk@^&qe$+v51@k1{|riCssRQV(_7g?sAp8W93=LkH>^_{=p zIp%G6KfFekXV^7JafpMwP8stJQJRFqD5r-gRW}J3X&~EarGAe9eN{=C9QJ`#F!{nx zYL};zFgt3r)rd*@!RoQQoARk**G^KgosFY)Fp(B;Q##Kjhxd>Iv7~g!=sgJ<-c-v6 zj7et2Ck?6iB&*_OIj9Grr32=JCX)k+^xnFfdk^#V{8&sTi8!T1uLgIFB;v&KB2&8! z;d+tTz^91ismeh;F3K4}pT2OBHsN+HT5 z<$IDP=NdX}Orl%7u$3=R;#7Uo`b?B&;x_C{lEo4@X{n)OJZoF9p- zW@M++bbf3)H<2?M64qp~i-@|!z0I-&#}N`*GmjS0Ej*6jEz(*5?-m!ffa*T615Vn$ zv+|6LKxcHnI7n2FiC4&ZLVQM1pAnW|YDMT7vAY$!*B{~%^v!53V(E<}BF1ZosK zgg-F?KG3l~gtr@pQVevwZRhJ9Gr4yKzmhK~4TQ)^jA9!*b6Uq>b`Fey4|GUwRNP`I zb<7&f9*&+NWAh7iyl|d{_3&HuJWqM*8eSDGD(~k`{es;1!&^J?{XFgw|NUb=J~C0Imj`j; z>mT#URsbXPMm{|^S*3#vMlEuUD|hVClT@r=@Y7f6(p3jG@Tuau8+qyIR4969fD!HU zi6E7TaUG@!?G$%K#Bl2#YiD#?uFinE0JcP2 zLYHN9g*JLK!o=nlxYxs82D?K%lBLe%_2T%~e9Zh^fT+3nLJDW*(J&L`OIFG6#co;_ znpveDLRaYkofvf!FP$T+B!tuuIU7uJ)Chczp1%EeHeN;sohE*A6UI@pc>E?lJvIli z;sBk1Q;}DEb`xH)`%xtT@@#R6myZCDt&PFnR9D6o;%G-k#FToml)Q?llRMLud|F<4L?n1(b&4sd!+u~b~Wn~#~d z47~QUsjzfvrZh)}AXU8i%7Z?dCasTHi#K-jyfsVJt_bs}N*ZSxGG>zGt7ZN&)Q4&4 zC|f7-Gl1`M*e@iAJ_k9af>IGyz-nUU9zJ^fP=tmiA$bHbqJKO``JF9-Kf}GpeS3H! zpL+NgdpN!T=MlHv%ExC7wiA`vi)@%JI~V+u9eHfEc8Xb)cv-FPv5G)~l;yYaiPMgtrKJr7Xs0W>m&lZo|#>WIHox!40 z#{9_GV0t8B7?Pgs8)jk}s*+e!uH07MC=&#C%A9MgN*#?hsRFv7H7NwUHkYXujAG^=S$TTa<;lC#JFGMR{}!=7<; zdd*TwSeiO=*cEcj4~A*+P|-zdHEB$`m1+FP%vKEa##7Xi! zGh@xQ4b`o+$aW}WmqKfc9xC-k=?Pf@6wWD<@8%UMZ4XHiU`+J1BGz2nhgzB|9v4s= zxchEC!BO4NAl^H`cgfmVdk?SVSBVGj;d!y%}Er_XE!|RL2IQ1UdOn)p}&FnANSOcbzb;#aDLq&r>i+zbX;YX;uSEUvmY1x|a zQ?r2R483>k1cDfMOM-SQ;*XJq=g=q=J_Y)l;PxuwSKWN$0#npUb!sm8*I>z~u1jU4 zc(l@;a>M}A2~7tG|18*-5{7N*Cdcw%K>@vk>x(d_zhiK1hDTAeQ1iooX9!OK+H{if zYUTfwh)g&U;$fOhybQ5$%r^NQW!hBVVtlc7uop0PF%q=HsQyK5t+m_2dqu+z+y|l0 zl=*L=da5SXzWdo#V(Wc;i|ixs-p317C{WVtQ$LhzR^87pP+nB%jpXPYj3?9Ft{y{l zdOqk8V;|tN+-6r;XZEg*5AgNDJ#ti=5A*h@^dOHmQPkMU>^8P>M{^_R8lKeQnIWc( zXkZ*D*bzrOjs>IOqlx8Kbc!-)wS2|OP_CyC*N68aulsn%zl_pT8;;$ zs8f3iq25SIQls4`r-*Kp>jCsM8iyv_?0xqEu7yd?srNl34nE9BMUnUCm?-y&|9+Tf z1u1wSG+g$}hM=Kj)-Jt8wf)IRbw4N)-vHpR>^H3r|`p*xglQPlmSC zudpLXAz6Ket-~;&3G=DYmPFEvm5=h#sz>!^2+z%Y!r@yU<$L)odkLZL61Mb*t~6+g zcv=>BaP=p4M-FfJH~t_8zs^+A^lM%|&CFtzGFS$)5vmk>*Kcn1lI0|9W-0i%%o0@K znw~(Go_U-GJ#`p*Bivg1=Xeh&S0 z5U>6(c#^AG@n<8N%^*ka2TeBi&dhEDyU}RM@{Xp>rswe1Cpg{`KQG2U$tPQr{85xc z!^e5gdy+4Yf6*!wZW_=dUJ?hN8QSi2G9d1+${OjlmO^SR>WF<%OQRxDdUlcUDp~yQ z7d)OnfB21GK}{)Lz%Nxb5KxxikyZ4zjQBC$HJgiHvNc8v!GajQgTamiv_)?hQMRHO_e-b%dJa$j zCI2ILu9InqzI%AKRp5Xq{db;wk=dR9gbb|%?>hMRM+kA z@^UwQd~+f!j@G7p)`g1mMT>7QRhH<#i70XwAzbDZJL{CCZZ8NYhZCO* zJOTcnWdI8!bu<|O8tU|Y06LI`74V;i&2i}){=0B#6VhbtFITtxX5WPw=RW=Bs=fP9 zJ-%B1qwB6KfA-8dkIwqb{Ex1f`Qf6d_4myB_?xnyUVQ#J8_T-i0#7z|&;4Cd-@Lx` zms`HyTmOFcv-1CM4+josEZ$95Ht%j)EMDxxo?!;wri(Lud}?qOTZnbKgq7oG7QQE6 zfWPHzCVmR=?r$d6@$9Q7Ic&laiin6ZBCO*`3fYWljwL(s?YTh2I?K zhj3~9Z+{9GGvOn;=Yr)-wwYBU(M@=kFq6H9R}wJqfnTxonQYCQ3Vd=4@VOTJ5Agdf z|1tQ>E&p5aS6Kf4fq$9h|0DdBmj7M&OV?U~*Ab|){BOd)&hozjf57s;4S$X0e+T|L z_#rtSuPiwH@Sph;Tz;)o?Dz|Zyg+<5pi~RbFBMgc`ztS;`Z)&rm-5(gO8z}9|9&g~ zMmsciMlJOZD3Pc?5(2}oir`;)>2!K_)+%L>qB#WQD2EuLEH@s-ayob@+; z3)g$%y+M?L`X-F|PvuC~PJlSJ%Ni7qSney9`;Fz&(7Vv`yYSYR+9``M6p8A$)CH*`+6OsL^)WY9j<)_{XQ~$Fq zXZ!H<0Xm$4C`siM`~zMjvq;@?c#=0*EU4R>b})<7b%)d6Ytd8JHm#)3r)HtvJ-k_d zY0*>nw=MnKYZ-xtz*`oh(h9U%j7@opJ4L}$g zY_<(Wpb;<)=YIW6mBluS8JXA%kX;KJJ}tC0h|4 zAM&U0y&p06BVHafcleBH%o&lzToJTAa$~Pg&jjgkNbp=19YG>@+IMwXtLN^1+EvKa)@!+C zIYA~sTTS!KR_gbNypw#~d2u0bQYT6tveqfI!;FhC50#aOj<3d0>E&l^=tDNxe*N8e z$q`<0=Se>H?^c8?%x-3E-nL59?Q!r7P@8W1fSBs-16vDpzM4Z#4wP%wr5 zP&HM}nuQz>eOiCJAzk?U`HcBW#9b&78WqKZ?jQ=Sz$Z`s+#FcukR&lO9nfea&@5*f zYHsmlKhGIUF{t5>fdkD5y_Sp7ANiEvlax#`>NB1aoI2IV7SAjxD=wJnV+)H5il_S) zW1m=F<}09$gs*t&tm);`eQes*KPW4k>6^(G7R@XuT?FES;>EM37tBJe#RWwrB~!~- zS;@k(sncg&y(_lnoQB4Y)eXGMv!R%9XOXjm+CtV?Q>)>n?RK`UrnXtDsl5Up;Am{Z2RK?8 zO-&nXTU)t50)ungrL~$Ls@SddP3_q&yzFMJx)rk4P4Vp)2N$ea`I`&M>$hs$pRr+6 zBOdLRqBpFly;3W$XPa8<8@E+A?@(i-pN*`kZ*JYed1P5*V?%AQdRta$9Ax8H?DDVK z&NgZrTeod!sdcqht>#lVENrOvY}(?T$fNQut&Q@}uB-K@k^=Jv*6x`3tP>CEQtEl~ z61J_i_R`ws*yz!v5sUrn>iu{6w6#5rT0?zHD^{&n%L|wFC<`06`&Sk$(~5rQDRnQ| z{9@D^rFP+%ptpXawzlrw+UF+kiuxVfHFhH(y(^P#Ja6r?g(TZ9|L8hxQS_RgDGQ_L zEnedB)@u`P$@SLfw`snK*Jjp69%p}zENrhbHN|_<`F%Ow*0$CSZOw1;3AZ?vxWe(d zh3#3|!ui#G&fh4Te*Az^uPxfQBt!}8E7@0NYz16jQTVkVIi~n=QhDF^S&o^h?SejT-U(j#w%;ne;$a4d8lyFwQWJqCEKbSX3u-S@cWgqTEd!D z>ZatCv9~!_#u|Z*D`NviD`V+rS?r%(U-zoyty$&X75%}&3l~Rxxna}sjoS7mt#zJ1 zu(ikkMT|d3xwLR~Pwm#mD{4!#w(I=s()e-JeJiwt>fZ-`8`!;(`Ls2ywM|+W*84gR#oeY%sPE1UK6}mA1C1XkWf6tRe@PfK% zVn98A&8Xtw8>I^(K3x#eAGyf6FKX({h%YY6i}>5hh(!?#C)Cy~h|j%sRfKW*(&ZVY zp3k~hIe)V44M$}ci2^w7DO@g7m+7~(RKn0lUv3har}=cTrh#81etjCUdk+)I-|&Z$ z3Nh>B7Y`cf-$LORKGFLP-xi#TV=`uA9BoT*hAze_8WS+i@Z_U2H{r}Pd>Q-&IK|Rg z-Ul3g$!9vkL^DmE*D)JQ942geSf+FSA_*a0bXun~{4CHflw9#IU1lKJsfbnvcOm}b zzr@J%I_+M`K;<6!*5LENQaMxMGV#T?e4?U8h@Ve%_~PkhBL4d?A)w=OMCzc3hBG`m zZJ&ghf9wxrxf2p2`o*IY9a9qNAF10B-3dt%J}&l8bQC74R9O~7cS35!J`*0FB()XK zPDoSJBV3A%i_go_nS^M>(K9?p&4{QoF;fRIC{ftw(*kG@GIZfI7DdU0-<{xzC~-)R zbLn$pc5YC-(2G3<^+EAkFf-dP@Ti84S^V;_NQhs3&ofl5rn*(U4c{cXcd{!Y(2*TM z^ki&BG`jF|CwL>;%(N5fKwzisPM8FG-4_GhiQ_zpJ|G7DPP+!h-T__{!y^2sI>Myt zKbe^#kKr5Jl~6h{R-TDM%r^Mi=oTn`QmDcqP8fW#{%*C4PClyM|B|ZzD%q_+R^r*+ z`kjaSU5bYbZL_igB0{L9y~k&}afp*T)l_o% zEsR;5vF8)1Ifs4=1A;75CDT7wEgrKRR1ZLkdp4D&xCtuNT?8~Wo6S6?4bjG%y+W)y zUriCWzsJ`{F99^Nf>`0WIbR<7OAr`-h_5au62K#EJ1A$E3;1w3!w!pnP>w;TzoBx5 z94Tjzq6+^AEbg^f{0T|g)?~q%BS86v*mIBtQ4i0>3l@v_!NRsC3;geizzxG$P&Eu^ z@tMWqFJNI?lLfwu8F*nh3lf+NXOXrDK$yRRg>6k1ID-VDWRrvyq!OgVS(I8V{stDd zHCfO<$Xzm=#o7^A)LSf0fQ4;M7EZ7*h23Gfs2YLAZi~eSU}0O6MI>0fFgzC|dKq4j zUs^0a1Pj}mEL>m_g(KOJMhzf1oW*gA#YbRaTa!f;LtPAKQ8NOIsKo%noCFKonk?|Y zKLa-mXHf^z;khWXSbPE&wl!JAfW-^LSu~8m;zEnXr(j`QlZ6{B5>!O7I=Gw*x5VNk zW{QDwq$(eba#ibJnMXjXPhlrSp5#VC zct@@af_!qLSU|eb5a5IRs2B+E3GQYM_*x4K$^`MDD)Il(_9pOARcHVBx%bYNeIaBa zKyEgYu!JORfeK6(AW@b80is2jNivW?m>Fg!5Kx&3M8&m%CB+j7G1f(ugFz{85XCmFm%n%5);_((iXiCu-M;Ot|VBtOiG?8qlezVM5zK zI+1o#K7CFix;Q#fnO-xfaY1VlMx=ifkqPZO6}2BYK{kwv=?~?UPDCvPE@U5_C_<}& zD1Ssm;<@{f!TVu4VCel$*d(r7OiO;$iQNNpFU)-~_rs7pFA;XaJ_vINrVHjlzT%SH z2YqD>yDXo|jg#I5^0zR*gLw~T5at5R`!FByyFZmPqW=W&&oIK%bDzr7Z3O)jm@i?z zg87&3I;7i|M@ttIk26$~LnT*|&f-%I!kHFa=@IH9DS91C*3?IGNPXmSNCFFekYr6C zBzc5BNV2XEGJ*737?z)r*|w4TAUrckn%9NlV%NLPaecLs@^g}Q@(qS2;)ucz;gNP# zzl|zbi~agn;b@h50sbb~u@XVb%=0sP$G&|z>pYMM)cGboA796@~ z{;H?$>X`A)tucpx`^CIh>LOiBdkcQ};ltCu{ug5L`}p#{2l%X2Pt-m5`h{Dz&J=sB zS0k@x-1WPX1w8&EX(})D%8`6gwsajokS@$CXbdbnL{(};vwUeJ)w_~W zQ00ZF78nO5Uh}UJyapxQVS>MDA*$<)s?60Zk{XsLA4+CHH8VtIHPUR+Lh%oyyC_)% z-K-E@rLh}y5m(XuS&9&J^Fnl0#zD|UUPX6FiWGET3(+k%swi_&SJ8bYMG3maA-Wnd z(~AaON?IG5v)jT>jkzr0ZaMr_@IPh9Skgqm#FPp#J@jF0FjjnYioAx!;VyU|gt3L; z$PFlQeB&VSgYZW<+H#QhQ!}OAW@P0*ROQ^L=^|EycJudCIh)JCc6shO@#?QZAdFUUqLIV>;ow+Dhb;0 z`V^K|a+fhd}0fX71vdt1lAVczCUC1G*;PM_CBs>(*YyoMrF`BW_L$fU!yU;^Z zCaZw7xlg4I(Y>`OH5`MqZVNz%#@}Ec|eu{4|yt4)7)U^1|vX z;`7peQa@O#OdMr^53D`35t0w^uwhUj%B=l@p78MkucFXmc47UH|1w{m>Hm%JO3u_2 z!kg~A2xU>*SLqdal@b7N~&I2mxz5mQ==x z5mg8+;8J*?f>)&5s2rD{r45~V)ZtVvT~az58#tw9^GmQngDwVAAf@wWpl>Outeiiu z9G%Mixwqe1F&n+f()pE@Gm6lSl+Ktvcka>|mhz$!R=ae`Y;+nW<#WoHREBNk9QvQO zavHjRHQDU{uTl4MnApp~;iWQmbF|Hz2b=d`Gv|QV%)xGswwW^!2&lA~bN_GKzZAJO zut2rm=W{u|Vi(6@_cr%qduNNoSEg9+cdHGq#{Rm+*Nwx0+mWl>v_Yem^>1%!ZfN$E z-B?q>wzQY5ZLL=;e^6f8>I>u-Z>nGs+oJOe$|A}Z(AG$jZ_~c}9oEJ6<@We`M~k=2 z>|f$+bgKPv?J^%X>lfpejw=he-7ULoU1jaHxmgKwq7tf_2X2Uol%youDBA4V9#G4~ z9#Mt&Y(tZ8t@S$&YeBmO_kt9z#Wq1qq%kXfZd5wSKsQJOt2R}*T3ntD{ms6nD(sv@ z>?<(M+ZNGKK*z>4Vzb8&sehZg(~;`2Z|PpVX`IVhESH{*sPVYmD_qGtH(6f(+Wg|g zHID78RLg%S{w)1idP&i?h?@N7oh~-hH@IMFbE>1Iv47^zCb*m>A5^Uzm{Z|$2C`Vh zhlRFUSA}=y;>4`PlKoGoXU@eoN2|}D@E@nLOU|rY=WMdAU=sq?HLhLWGH0XJ+Sa<= z`JIUU5ogw4c-+H$OPgC9-lZPq+P>7)f<3ln8R>HReQTCEoP$e!jgB?lue-Jnc>ZYV zgTD6yiCd!O%$aqf&})L70Th3_eMb`q4r+eov711n;$ z2czXx(`cVwLm44RM!VEGc$YAT+$>AtT@!EsmdD1(Df5B^6l5;53F(Df^ysWb{W}8g zw0(bzQKP8WDEP)0*)iu9h(?gg4aJotOHE-RK+_1WB*UrEki4bXCFh^V$g`v-J~dYU zvA+duTOgdUm(hJvTSXeT8c9an#Om>@=ZU06f~dEO{bdh$Crc!1;nX9msdlJ%&t*Ol z$<4w=Wt$<`G22jX-KoDj@oti!m}AVWheJ@Ch%zQh7msbiZaV2d(4(?F2o}U6Xl3A= z5EN0BTiXy|A23cMw!Fbd^S76h#QWpqzb^|QY)buJBPpl657j7~hGrkVp z=@gWjB`VVIt0&V@dIz~%9BvGD=q-CXT_VM!;l=03d;X+?*0&Ing# zeFVX76)@E8jFWM2;~BgKVU-;+z6a)b=atFwH0c5EPL}saJt~R{C8V2QNtP#Ne-}YK zY79zGcZ-ru0zYNe0}%Yt2p6Tu3;jN07x-yP4zZ}jJw~WAz;mopZhcyCrLh^QGeL}ZS8lMxsFp!$QSQ9&c5y_szw?Ra` zId!Vv!#fTk!0lZ;HBGMPZE3PrUVOMvRwXF<7Rnje ztxP|W^sz!dWP+lx;=I7|GiGNDgR-Q0ZPLW#3B29WHFPjPUZQMQ+ zw0rq6dJFIY5XpBM`SnwzMf3NDc5&QVbrcODiALta*g66s_n^|b>U8azmUw`#E&|hg z_`xDDy^kL!>j8eQXhhtD2Mkd5**ZG8R4k{AI}~DhKp$A$!lxC>xlrw2T@0Sx{9rMd zJ<5-RT6&znS}d;?ZJ=oE)!2CC2m2Sy#nX?MUS9vyhx5er%S! z*qLcC zEx}7@O(isEG@j7fhJL-MT#Y}ahH-RVjw}tz8xc^$i(vnLQ;h1vp)*_ zpM}3mp!-<7|JAP(envKKiv3)FzYLoi-8t-^=sTW4queMBzxQ7C{_Iun&t3I?;;Q$P zq4#Zb*jHBtK=0uJ(0h0Q^d24ny@v-t@52GiXIJ!ApYcmK$o7JLddm^6@=8UTrid5e zMuRttsgObaW4WB+_kdeDu0)K~D-JnFnldqD((utbp1fBf)1C&aJZQvH7iTch;Kd}U zsh6XN@S37ctcfUSloTAukUP0T(qEwgOn){T_1EhF%oRFvHX28;=N> zuUsL|@?Ttw44=PJ?!apDODnNbkjg(^i4T#CD1WBlI11RGW0Xz< zNn{q@t}~FzGQq)P1%h-|3=zmB6)skctcQJSnv;cWg2*EJc)ft=VGEeUdzZ~eW9`lu)a`CPlBA9TLiEuR!yTSD_7 zdZISjAZC}9#9?N<9h4C@CdyZ2htB2oRuQp}h|3zDuoDq0#T5y(3DTs0fT1C6dnk99S1@9A zI}x#36YV!3=X93e+9_B*zY{Fi^9wsg#OO?CEn?dK(2QYbJaZQ!R%bd560}D;m+iX* zm%HJHS>y3tf{O(a*SKiALUY2nd`et4nvQ@3ZJW+zVVmG`V;i{OoVYf@<$Q>XwimQ8 zjLQHhBW$K76b`gAI+vK;f=j_}aH;33cO#Q7>6z36LM=uy;_EFL<`vAOBfF7FjV5YT zV?!)|tFiooSZ?N-dql)&(xWkp6UavG0pljF^FV-A+%^|<|DkBHl=d%$Qb zZXpzmsz9PK!o@xKTNlQt_*SH_#YFmd5Z=?d+q z7wI-|ahrNTg7!@3vf?(ur5SFLhabF6aJd-bLY){6u@B>Nj=1}BDic1<8lm?5pAX_eD>5(T>heQiP#G+xAEe=g3AHwBE^#?xU`0G z*#S!2NtlYY4ICq>r|749MO@w?F8jFT7hLKOlj0OhO%|NtkRRf5e~0!#JLF|jFaK2IQbor+h^Ihsc`=Mj z@g3mutm!;RriQrOeuv=lFx+r#vvE~%)L8kcE;%PV1Aq&vaogsBH4(?eWV+$p#; z!wrYMAG}j=xftRyLvT40#^oGw`H86wLSh(m=|yzXU4qN}yTIioZof;;L_8zeNf2qV znTh4?D69gG?3~E${5T$cCsry5E)opKn@{7k4)h`XFU0m09&rF{t$oD@kp6T>ID)r4ACjgl^o4EhP$wiu0L zylhG3&)qGr?E0&H3Ln2i{vifJO~hCq2)O|V2SUHyA!nbsN3K=SM~ht@{bo@cIvJvm zM7vKtlTOdtjC|0EYXG|Lmwzv(MYB>wOykR#6|hFf`VMx=?echwsTXbaBZw;6Ql`!A zJUp*Uo^Q06%B@x0(IvN5A25=T08J5W7)u-$2j0=vs+MzvuOfU>r^xm)>#s#75uUbM z4=2%BfauTj><8sl`bsZ3p9cDH5_Qky{6~K8gYr!ID}}%Kpj=pN5@;f;Au>ZZdO{+5 zGQ_=9;HmE;{EIyOA$i^;tpy`*Bt~&K$%?*)l4eDE-si4|@h;y$XiKoPa1MLN9 z={zFv)CUp%r4T+K@Pj&jkBAWkMPKi567@Djzc+-h5qP>ph4A0j_$0yujeQO$QO80K z9X$Oo_RfzQ=t~m6OUSXqNz`MI^F1Mc=LMc_@F4uNp?LKRJoOEPzbS<85qMQJ-ZV9* zVmZ9UuSuU!cmbm0uO61G{fABB9>IP1azUBBI{=f+9*LeDfIXVX9!j zM*;T1oP;69zl8k)%!@ETg?S0)XE3Mvzb?rcF+TzLDh!dn$qPP})0e!3R~6BLCPoZm{;ll+@p z&P$*TB23=dGbWmg=i}VUw}AG)5-J2%!NZMyhQj=H2%j(T)c+9vcOiVdz+2H>5Z)QW zU&j04BE6xKkn5syB5i`Ws_d%5; zMVhZo!7Z$vh%ml>LfDDAP;MeN5b4RmR85S&L$cf|$!E{FPRBBmb4IlBVCX644B!=# zb0!ql%U36)TqFH`X;eAyy3s|n`vrPrsQ7Sr#t!uwf$`4KrMEASj)Pijk+pwRCMp?=+vlDsRN^cykgB)X44^e6&Ht0g0=AWb6Zp@x9yG(Lo3U0+X# zxuz(@$Br7~w$agpqob?hMrG1FIyyCeRO-O!XiLJV)b7#I=SN3d6GvszGdenc+^E!T z0zI-;ij4gq8X9p)fgc|vbV&ih@$`ujY1+>caiIf#Y4XkzaUdCf$D@oe;U`(V(`1?@ zrix#h60^h!;+H12EODavrRgb4oGgB6lF1TP@k_Hmwka`7ywD_$CFY3VT=6?a{L+Mq zCFYA?nijFdsp6L=H!N|w_@yZdODqgUZKilHVy%d3*Eypq?zQN$ok^0WceS3$$b3iS zj#h5j!sqq3>3Vl!fc&-p%=mvxbxzP5m^>zxCYKKdkTIz;MIutGbK?G#*&M)Ez)@*dMS0Y|6ve?G1s&PD@~H)Ou&`*L-R zgejX)))2Wiiq|!744Q%|FRGJcyfhCVgRg6kbr^>oQrUH?+%c){)~Tk9Np)PO${UmF9i1wFOe#q%GZX=S7V@#@7b*jQKsUpM>&H%;Gv0AxeovMhaQWHeGE`AtW z_$d{3j304WYfVxSHh~S?+9EI5LOM}2Mr_X#1gu)O@6OfU=Vxnnf^OS&J0eHJ->ttt ztiLzwc7g8yQ|+BD@iS5MqFLXwkIK;sB=6+?ukmxoW!xOxuT;jKMH5YZAw3sqJ+Rz= zG7NPTFg>&YVP^M3EwaQH$uJo(DoiF!7EJa-cN;SN(*R9}nE_J> zGZUr=rWmFKW){qBm^m#FckJ;-7eGZ3fPq}OJJ75EQ6_n zsfM{;h63*m0G7k7fLRH%3Z@2THOv~AwJ^0X>tNQykOp@h%#AQN!F(Nt0=^mcEijv4 zY%tVK*TXcxG{QJwHp6UzA^K)v-#9e1O-F2p?Syf`xM6m{cwoFRKA2XRoiMv#+F*9W z?18xz<~EqyVfMoKVFEJiT9J^B4Q*`>6I2xsP$8ga)NB0uh10)t)u&JY#;;YcD%w?i zgJAMBag$lW->K7F&;*sR+;r^wwhf_pkC4nsj*qaf*Q(#cqjx~&ZBll8&&FAI%P_ZKH#^|{s8W& z-IuAx?pG)n~mpF0xaU91y1^BdKx16YcuslbRK@6ckoF2nG zu0gz{;T%Pe>qL({MM}>yN$ecEXds6Xh^SA{IVw>=@} zCXn>c995J4F-b&s>&Bl378g)CfJrdV?4AV!`w*uZ9)zwy7WPh(d5H79BI$#?2uc?f3+bYNf2H-+ zlqAM9oA-YrTl-#nR<5(eylJu_Y)I;&D4pdqUy!q--ZW9;Di*)_u~cabFU^$V_)@lU8e>nt{MQI_qF__`j)~HizPAVDI!St$&v;p$0qg58Lp$SLe%H&;9eS6) z@Upz*@T2mx{GBJ{OzA}5mruyQmC^>q$dEQpn()b~oz7!_M9K#Fr%%bhz!n+AT=`F* zmeLE}(sRZNVXNs7SL^~k@Ya%?ANU~|f zAW1~=cOe)!d}YyRrb84-JVW3Ryr%-fv?676f-Pa^300^}s5=P-uvmfApBF`>su0&%a4szn;4D z|No}$XQ%(KQrCtQjhZ^1{;K@@6Yt9JNW+(UcHmP})7XpLp(^}iytnenINDZR>dCLX zCa3C}HNU)Cv!+V4d`J1fFQH5_$fYxKit?l>zU$swX7cOL$g$EN_>E`K{ss8%GuUl^ zk)Jyw2oqk%4$L2U!Rzuo=@PfU4&-0?vDf8{;?G2LM)3&hJE(X@JGN~$dJ$X4OZ-#t zlK*Mqk#ES0z@_>PIV0^_E_6Hwoo(0t210&`Kl}zl{vAK}hCK3O#M-Nc4$-dC#fWeG zO5PbEz2CRw9eKVKHE1GsbfWDbzxy}x^9AnIW$N3ua5YsL&%aeI zMLjfG`FI^OQ}n1JQqZq5+1wACWW2AS(pykAW`V4?18^d z&_4!$2ZTSmM?SI7E-62fZjLrns{qkjNEghQK|D?1VSzE3wR?Pm66SB?N;0}>@CYhz zkS_Wv+N*r<9g5N?2MpSsMpXvoLw|U99#@dhwc%0tnJm_vqhF`^U1csxu(;_^q(O`4 zSm9sG0eRT>lu;>`{fXc^**tukX1w_xaLr?hW>_MpwI)638oGmmE-6HJQZ)UE<~%k5 zd65KrBJ4x~M`10PF3yR?_&Xk<;ieVgPxTApiDokhJ_AEY+#?_&399QROu5zJE00Hc@9p8^#nN@<0)M zWJCmUAt~sF*%Re75p|FOpDO$XG2|K^QSyg(T4O+fd{cxnehKB(L?myLxG+!!FD?Hj znxXNG1F^MkT8j~7LpYt5=cF0^e1x*>#E0?~{h%Eh#daW~;iFiC1@9PgqZMWn%*Io{ zKSk2WrX*yaf$=NP$blj=D}`wA0+ewBHqwTMBEbX`bsTx44`#0#;0A}aW)=BAEisV~ z{7ufDj59sp%LYTfCg3ktm%eJ=f5pV*&*Uj-Oh{c3-=G2`$id=mUiKNJRBec6{LnPk z52O{*B^l#*{N=L_9DqeK#wNi4GR6l!Lr-H7Z#aUrm)@eqTN2~vKa-0hzN^F|LHMVk zFhq?>IE2vVdn0n0^;{N&vYqYCqONJKIf?R(q;d3IWNB~_u_s*^vUf@<>bETFXYJ*)}N@( z(5#&viU;%Rs>VfN5mlNezn4I#g@-RXGN z!cN!yd%*&U1PfFVHOgx$gbJD@1$<-_RGB5gP&VMhhU9&!^c;vDbwQ4rA$o)>Khz=@ z(n+;N+UQQ@7h13gpmyDUCdHp1g4CEzN<$k%ZFZ4WUpG>z0k>f=MY*p(M51ltKuuKl zeWPxh;6^InLqj263xiDad#o5i(W6qM`7TaqSr1(FOC6za2w+vg^X&B4o z!!OM#rwJ~^VTk>L^}x;nMpMkqL7PZdS!aokwizGk0MX$I^bN%-ui^yCjG~Bay~)nv z^AnV1dc~a;Rvl--Q>N}wsG(V9zVk2g-U+`(uHAk=T=0a~!eYh;-o=I9p(Q=4@=hu! z*APN)q(v&`;+ZXC`#8bbAqyKPdET!qVD;lECEMDvg8$cM%$DgFSV0@}V8Wj*{_5`j9Pkw)hL z?hb=bhryS^U|Pu_zvybANQ&&SN(RjS$r-bGLQSSnFKZzI z(h3)AkGE6;Rt-Eb9!Ie@8F-N*C;Qtd>WE!DEEAewvtC4)Y%0t0tn%$nWcx8zk=gnwIf!H zlPR7(!j-WUEFM+{&&Y^MoXZcUDWtDRG}eFt8F-^#-6T>GiI684jbQ19_snScz9^y=hBsw zw5=iM;8Gh%0%}JxmnJIXVpig!gJ>~>v30cY%!$fOshqE#cvVgrkV{k8sZh+_{NO~y zz{8JER8k}#f0f?EK|AAdOwJxIO~U)*Jaf`je2h%R-$k8|tz#dzPeLRXn4%K*nyAvD z?p%{?CbkHF7Ag3d_VVY6eSp71RtNurtUGz}WJKkFu+r`copcgRbgEcKypP*K6>*QVtkYz%b>3lI=Uyw--!z;Y#opAb8yB1J|BU9L3bz?R#EM+s}F_y z;j-OfIt@JLBiH0z1WUo+GoifO$eUF}7)2FU#9Mf>k`D7^|DpSfN?cXOV-Y0-AMMpnRHVlGV%0U`0G?>PPC(G+mQ1 zv6!MQ!*vfq?8=p zJ8_mFmG0Hq_{Keq(^4w^Jz{L^-05LO2@4kWHNi z*;R0-awhMe&LeV_8De|98+@Diz%)b3L3cbIHKfK?K{C7-hWw<)AgBq6RrtvC8hmVo zPWGb^vo@V_ft+tn1he2nAgwzT!F{v^lGDIny+9INr>I3ZSFdXv0DTScRLE5=5Wl#V z(FO;--iiQ8J!j?6P(~ObYXXiKgwtKdJG$*_7D@(zpFRpc9y}(F!27in0yh*r!a>95 z!^2ltkfBej$5=#==>L2bo^T>j`U=iPxZB|0rll0Ek=BiL0!JT1RG6i33})FM;2}K4 z-5{czKv5D81wc8F6!uPcabuxRY&0h)Dm76P*-6mfQU1>j7CI;b1Ey=w0LC~4%RkA> ziO>Ifxra%y7z=D2?**yilHqP zVH%QB^6NA>9yO9R>39qzSX&rA5Qgv6U@>exqQTI=!~}uhKm>ohQcj?j?Mpeuep16> z6$FYH6jQ{DMzPi~*rvnu6{uPf4K&2rX&t7KE2+v8o|0CD>L^C8_>?vLlWAzX>VOK) zeLxk04{+%#Ox0;l5Yb6^$_jq`c4>Uqpu-f~tD|VDb5bl~#h%qs6wrAMHK?N~3Ks=x z!lf{emo?Zz1tLC@*Ib7Ibv{4#wmi2Z0Qz{M z@6r9z*AUv1NSg}yq@cH8{ESHIe5L>%9Lb0O@NL(9~GDy9WAD18k{;6_<)WVanRs+3Wf?erK@Z4SIIoSP%%w7OPGK*&AF_*5(k|B za%q~9JfVnK>+W>~!#BCxaEP=dC$H}ebMMvNsT>G>PUHxc&+~$Ya$L_T#J&XZMa{34 zK-5mwt|l#ol^@e}>|e>nZh^8S5mk={r&=5;cXvr0!4nHL!ZZ@YK%|o+^>5!&I~afPb@v7O|M z3PNA^NPJiO7s(TPG?a+xN!^)J)35nBt)r+|oz+n1bre;p!T7_t<)q}Y&V))jj`pPJ zkOwV$5Vb16`Gm)`TZIKhqxLUS`2J!gfd>{V<`~UQ#H%NP7yeUDjyV~IJI%W*vFi>+ zq#gfA_77?yh!(_3vCuQi76u1&*b3)v9i|K#)M3gX>$u?zssc=WvS8H^j9hAjC3HFw zYw|Xz(fEgxrf214&A|YgP?8q`77d2JUQgLEwW$(K4Pg))|k33n&xF z*{#FV0Uyy}Dv@-!0nuC!>!J=*#+Fjm0G=}Thz)D&1A_^}Z%|oanSk@FOylHM7Md=LaFf{<3yv%`xqTuQEkzH|LGsSl6 z1XQ1U1j{M?VSY{%tbZ&zHGzU6UV|Dbop}>1B5UnifSpqcoK{R zO!z7d7L}_mjbbP_32RYXn9BhjrX(K;!}k!3KAQqQ2{>3}`qQY$)Snj4S__>|D`7}0 z6%$(+9MIvFz<28~<;Nu*rs5M%r=aP@#|=1GOxn_U{1UV<0pYHdlkPCMhhXF>6_;Ke zrX-wBr-YWA7o=frHG&}0i(xFpx6wa~WugeqpGxu53qvWvdJt9}ro68cG$VOe0^g+5 zQ0jU|p`q~43cQw_i(&MaGNuuG5 zJraiNnZ#|S7_FS-t4blV8(Sh-B}sC z6*(Z!@?rJpFj;5A;7dAuJ@D}v8a<(GI(!SEbeLL)LBPS!dohguk`9-HCSJu)yTz;( zT9xYm_$I>X>2_=GhSaW)A4%cXf69iKP8~&g*Uj6vO5;q_EA^_hB97^_z>wo`OZCmhgF+8|$dmf_r;P1!xAC(K8$PAYmq9Z%)va<*8; zmMuBd7_8Gqx>}sw)QRZv?+k-`b(mVIvpP)ix8!Q{6#pi`!4l%;_PuDz`yII32WBk^m<7tb&U&l`b z{TDWwvN7*bI=qQmr^`@`Tt9j*l)hwq0{RHwrf z^EMr(n4bq6jQQX+5%Y_}Ss#Z?qx#{$towk6V6`?h0k%+#M}7ws28@^l-Xd0_4iKyl z8#^^voW;|l!_jc=)oCID_iM0d?#>ddPqO8~>C`f;yQtwrYfv>qxC^)`3_hU4EpYD9 zVM=)_wMB?8rMwMrFy#S$VIS3}Ldt*%okWFCw+Pk|9i{=vdCfU~rsjMdtW+JQzN&5} z4ddjtnPP%BAwW)g8{Msw(Ri(Ars!95&+9nKuge-N+MjqLLg-X5Qu(p{*x6HswJ2YA ziG@oM!AJ@9tX2)LZE;*YUI}ORDzEPSmS?E_>DJ<0@hzlUnDob z1Vjj*T1s5HBj9LQO*%|rVqLpJ!8a`7@z2Tlh~$KzD0N4|yq_-7>J$z&r9qozmPSS~ zYSLkfQD+$3tHbMoKdZx3n(}Ak2SHG2I-tX3b>b&jvQEzy9n4wbtR--eU?hgB@x|FF z)9L*7H)XRNKZkdkT{5EGkCL9AYcm=4gp=&!NQl+lWF>^LZVn z#8{~G0#9(h4pStm!tendri69tFeQw1j)IA?046^4=)JqB?(u}DAxa|b{CQfOtn(;N z>#KA>l-eF0rg)qUgD>fDJ@E1LjS&XLqfLh?9_IlE<1tvOHB{t`jEskM2{Kxhaa3K+KlnN_=5ud=1!Rthd> z=?pBB{{En0Vlma2(KK^Our3aUmZ=h8ppz&xbCVug0exGnh7W~n+IvB8iIZ9UA@%DSYB+XO?(x?5pLSGNTwsH(0V&j(Xp3*AZBk)A;B_@JMZ$V`>C}o6GQG-^RNpB#4 zVy?0^Bk;8K+5|k=HrP}NllvB~Q9hC8kjj?Wc>ta&aqt3#^?IePLMjQr9!U*eqHq(p z*DB-IZq!KvAR$S)Ja&tj>N%-SP!Klr75vr-k6mC-4`E4P3)grFdsvUmhFbbD|3$4b z4U*V@t5s&?-h?F5RSKFEo(*r;8E7wbr%@8T`VitqzGR&;FRdOyjU>|on#~_tr_9K# z7vlL8rpDuG5ff4&nSk+j9;5+3Sf}LWHkzT10AapI1bda$n}atZ^#m_?z`bHK*DJY@ zrdYRLS)2Cn7-9!&%EB2fBa)k1&$t-xp~Fcm1!$HqP$&HG_O8U-rUH_>kPs2M&*&j z;BbA2z-O|Z2tIi2+%SX-==cj?S5{?v;CvIhK)S&r2fLAU3zmvKxC9gvkC|fV<1;oY z=^1-Mks&X8PG=uk)m2l}>bRHEdFMubhcMtTAPBZ%*53K!1~;ERB#F8L_m zzDbFZ_VwMmNioZ~FLb|MS%QnHUbQO={Q(2@m2?L~64=udd>`uymQ*7(5A@ZwFTWQW z*HkzQS%-o0z7+20t3~n6V|R+&Abd>-|2c{qB>ZS#M-C+LPIf>L1ay!0=-Ei`NOaxY(^pc16X^*eQ7%GGlg(>^2`QhTiHmj$%b<4o%)BR zi2rZcyxyRs(d-N0?mCLOU2$(*> zV>mC*YSL7ZOEtyeR~nTgQaWw^s;m=bdZV1j9uT3^JEG5bZB}MTS^RsOm1S{<1l=K& zP}1)`z`xwAtV%fqZ%-PYW+eB12<^vaG^@DAjoY^<1;Vix*}PGvh~=`wDAl-knIGGt zv=?YT^H`4_TYB$Bo{9ZuaO**84q+7ZB)_3anK$zg#V3?AxY!QyC;?CH=DiXm^#HgB z%ULNu-UMly(!O&|$~xJx)kwD?1_z)=MM941gHKJf>+9?tgh_NqQ9pkz%FQL@)-W!Q zJpzAJo-DAbAA1B*7`|Qc+x*^bO6K@)BNIqFxDcD?l0+30_wDe3Z4k)~-X`@NJNhs^ z?=04`MZ=#mQvEuDX@fQ(rMn%Ctfq1)hSk(=P`ttir`^a9ZE#A7{x;r54or`lNy&{C zbVYrY^ZPcmC@)9}iTFZ=Y@=Q-RCIgUPNkq)E4+^)NgMTBi3qy-$`&d}6hUhDlR?+X zgp!`lOqAEYhnz~gBz?Cp#jPBd#wY7;qC#S3AQ~(F+Z{^U!jq^xIYQ+9ELfgIJDzNy zyN)0|Dm{$_Ev*^Q@N_?>4B;m#Uo_-7$!B?#4aJqXxT?}X8Ha_jP(v7Ou%5<}o%RK0 zBPCXhq8{&i!J|AZO$*m9*R;xmS7}o7NLuDp6#i-|w^sG}eM*`P@vet=Dqee!=op?x zS$)PF-Z9uPVWgz>3ilqkKNoT*OH_^cehd2 zMqL`7XetfU*eTI_QP5(T7^h_ou?r@ZKKLn6Co92W5k)Rb8UD<4SLn}0^oh?P-+imH zaM?c5Yn~SIIwkT~g=iNs(|RyUV=g)k?anM29)m7XXn3e^qddmp$+s#lKjq!$3RNmJ zUJKWtl4+?3vY=s-R^=+Duc@FaNO9DBPymEsqEbq%0B_WkQ7P}nf)IT(qP`C0E?HdK zMZJcWVhRPuDoDZ;T*zL-SE6?BHI$JvBJl)M#*|y%5bw94sFUaebd&q0-LBjyZ`Cfh zrDlc-`EY;~4E6r>P;{ssB_e~V-!DYc2v0YPX=4I<)85OiG$zm<`g|m%Lb-NQ8NR2q zFFK&~NRwzTO**6WP$NWnUjwJSfBvMEy3uhhwOV#Q?>nBk$Om2AjKJjy*c0PR?wqyQ{FrH_qs@26 z#)?eYG^=n)n>*kw>-R2gZgVsSFvbn2Z7sFC-43;J!u0Rkr+gompJQp|@Mc!NKT16? zy`m*EFu2s-;&pr!v*bG4Hx+;Ps>kw|yIk&=$jM6rH+6g3jr~krVQ1SMYaNhmwX>FT zSDVATp}F7Jw6b-3eZT#T@0BKZ`Nk%@TaA$t%(E&RV(f~?xn)z!ZLWr6rc(>Em4Vt^ zWg(`(xOBU@!7lr(u0nB7wG@cY&+^hG+D$&y(_Wcn^VbHl7hJcn^bd|QOMi(iy{rKj zfbVq3yT6x_8P|-=+0@`_b^6|Rc#g$YGii%`XLkHund=J-))i{4OZ`P0t8(p9x7(e& zKVH1dcVW`YvF`p@d->o4%L-D!Xjp{V(3+hzceWsM@ajI-*k54W$d7IpY7i*h+>gk2eMn}dH z1H(PqErsiwy|*>jXBpWzL#1T6!?3)q+37fB_CzdQMyWof|w>%#W&QQ2`%C1yVOXGJZ=VLUA;hJ|aEl?URw z*`@rV>1rA4&%I;f1(s7-8>sTSt*P~yhb12sP8;kb!CwV{J&bF)dcCVvRWw?^P$-cAMY1yLMRhMUbYfFcHac1Pw77RL* zalO0Kv1`WW-rI**RJSxUmcq}FCQ6;gjK&TrLrM5%^`xbFwN0-z5AN~0Z*?{%M6ZpL zvO95Gx59YiRhpT=N|+KctlUcTb(Qz23Sa{_)4Y)%hd) zcZ%ho&7!})SrsmiaenWQTUy+is~_vW+2Jj3J(cTfY2EJb+f~`*aDUC$J#EzL&v+>mJUX3BwyjjPs~E=QCY z%<@9@mB_-l?2J#_o;UPHwJdG+$X?IWo*ZT)% zaj9m1fwIdx)SO_6N-j^5GoLL_Op4kyyP?}(K1(ii+6UhmEZ^n7Gd5caEIJ#Nq9jD* zDC-8DZjZ~?dDoJN<5F5N%iH1}uopBr?BfEz?0s)X>mVvk>rj995_tz3G|x-uGJPZ+ zXMwy1mwUJBI{WBi&$%SymzEv!>BjG4QjYFCRLH%hw)G^WS#w z1?iLJtEKKdufy)CIlX!CbkX)^ueWFZR}tSo!BiCu`gYaBoLj0KcC__qUA!tarm2pY zNOm?dekoSURcdxEz12>pRy%!IB6qL`U;Zv{rQOHug=l2G`Nfuk=_my2P^^pPM+;&i z<9ei1c@2Kn543vVT#N1FMYAn(9im!DU66 zb*h`$-3>9;HLe??%ACz;Uel}*)r|v3{O$K|ad`gohKOaB)!VY<30c42nwoEF?0@2H z9$KX8%AXDNrsUsc*_eOtsa1#a${!eKT{Vz3U9~=-*6)6yUHVmSLwokw4}bna18%ff z`Co-=-HwK4dw)xXqou{$fA4_As8g!IhQ%JA^^6x6Zamz~`fD353~W*tsl|`AUa$pBDTW`M2oB#8585Uc@$-C`k&S=N3N3D-_H#Rq_v)Fx)9YgcAU6Nb3 zU#VZQ`HqSC_uY~E+j|d8J(}*1Eqr-OlcDUzLi9JUIo0lBm>lx#ObWdg%8#d0QO5p~i>aGQYn@z0SVo(1W=V7nYgXGe3Oo$>iec zYD3|7l%?I3E%~QDyj1P z$Gf)_MJ-URxO=(Z<=ka&X*nplD|pFKrNe(7J?uctQ{P$}DC&>`3)N)~U$wI{?z&Z; zUymQ3-MOSuuJ$r@rOVgU?A-FjefKVD3w*QJ@wj{NZRgbtQ8MLnqG_eV`v zv)J^k0(FYIv;K00XZheGiseUN!)Z8?;{z?t?s}KqyCW*sRDO8U9nMX|?5Esc;z2DXxm|6lx8#Ia%r~ zZmDqZu4ut9r~mOh^@rs@EdO5lyi~Ph_9?>?jH zs5ZT6%)H0zFTAi=-K{p*otgL4JEo|$#@@HoGMj0)E5B9s_ODvp`;(pZgEu<7D_y5c zE>)J97tAZERG+HIyRNx(ZG+9@a5&cuxQ{PeXj5tU_gU1qyu8j04t4v5v#P!O#`*3v z)mP4HCUnm8sF#{Bq{4Z#CnVV#IrO*a50vBO{=wTW-Dh8RlfO~QU#J#6CU4lWsjT4= zjn$q_Su5>`%DjF-^Vy_A(U5P^*VuP&cR3q7HZ<=ahaSh#4)G>+fm%{jJjbdQ z%~NL;%f+oGk2HnFE>J674(3IvXlV7#%<|n)f_7B0_?n^Vh+W?%wE^*LK|9#kyz^o+ zBIKXDJCL=ZeP3@@wt=nnH3t^1bT9|B6MZh#&Kes%4zE|O4tTw-j_i_IcSO8%N{Wf> z-x9YXpSkw$v95Be=xW%iWz2<9v%}-5vf7=EDEJlT$^iAN&Mj*Lx1qDtdR2pSOUFH^ z&y}l~n!UEk)!O23WNNF|K?A+aK&89YSI@q&x%ED0L)kZ#M9h>diMK6OE0Wk_Wpmpb zD<`a4*?NCkWvpacs8%1Zp5nAl2t1LW)sg3F#bm&M&dB3*Fb_Hq>K0NLEG)fq!O?yc zO!L5j_N-SUmN@P8Edj@poernZ%U)}*jc`=hTN+whzMYOe?R#u>j+;wZ&{OcD~ z$OX%5_bsS2EsVJ9hQf;eqv+$ON2|p@FKNG_xnhlL->&v}8Vqc?qh(%&vEQsj6xs}1 z<~LWgp<}Bt9g~-tx~0~}?aq(JH}kk|WxW6PE%D8d8vh_i#jq9a#uurT(e!$?ZR=KDGI= z2{Z)AmL6kYyG3Q`tvM$Chi+xEzhRtx{6w|kd)0Suvprwoau4oa;c9ej*|y*Gs=uq)IrG%p7w*4x*YUpJ98(G;!<$n+D&^+Kln4AL?Yql*pZdYkV+ECK zemUfgb}3twhK46^e(wfXb%qp2Eq15zwbwCkb}^3+(>RBBX#ndVOI2~(SE z?$1;Ixv}4|%RghY!*1Ku=^n~>FHS@q{X#oNB zw{nhGZdTL3UD+wjZ=v}3*mi&tcYS$VQjs4pC$3aP*S+F{8 zLsPpc|CDsyqG&biAM!b=(ox^aw!C$M71nq#22{0`o+(&U3AA7|jn>xyb$T=lOWE?3 zcDCIiR)Kso*mGMVI!wNWX?O0bSIZzcu~WWtgUc!wO}3d|TU+Ju`&3irLe;2xtzyX} z-)Jw0h&i&$8&yj~xx>Ebb;hiPCR^cJw1VFJtO`soRkpTu`*yo$ch>yK!VS&r&iymw zhE5z~EXnr2L10vJ1Tz`<^>93#fU&-{=1yxO?XIbMM@C&OP^BT6S~bEYvqz?9~QarOoMh%$|~& z;XlebQrxW*GKy?%hBn)hkujy1N<8_B&Fj~%C7ua=`$EPv;Tk|UEHR@yD}0m6k|Aa3 z>kr3s9`^b1!n$8MA)Z82;)^E_S+_W&xXH$qm*rvt-Lk%8vvXXD^+2moGRM-~@Jhg; zLa5Aju!*)MsKHs87lTEaa zvKUKjE1G#vOfZHZ#NekdV(DJ zRmM*WLP1B(dGo52vgdk#;V>aEj?J;&Ux>(ZX7xtb&R-*y32fzguUJsgIum>xuH81N z8K04tT6cL!Z!B>1B(JDVYF)r3Z)_CH7rbUDw_{DZ35(LB6F}b_&FDCu1}Y6>)=}F+ zXF;4UuBd#$`bp*?^}@};+|`VJlZ^EkNeej8Z{BuiP>Md3$O#GbL{l-BVNVHd|B^G; z6!m7=Q`3dApq`arBeZ4AnhT0>)iamkrX1*3Vai(=+F&8srSySzlGRM)NDofqDW!9#; zn`<&-gU5+=!+H%HCt8|uNIcM4`fUSPt!vG3;sn!GrnL`v7jCL+vehp(Z@Q{yQGu_- zJ$Q7Bb8(v`(cV_LaOpChw>3NM5|}SDD~<-Zx}zqDnc`Nx5Lpp0yyR5g#=XUT*+Dre z@kLqR6zKcLS^LK2vzac#Qcz!CADD0D#$-yFnDDc+`Mm}885~GQMmd6SntFyWZfs3C zGdf2aeuUdLCQb)sLvKGU{N1tV*8Fo|K*o9M4D~BdPdgkxL0RXXN&0SD+&#rMskzN; zZEndZvt4LvI2-4f-o5gRoc$}8>aYE2#e#T!7uU13eyxYywT3?)_|e0$0blqk@jF9v zp76J{UX`<=Zbp_X*=twq(wr8adobwf*ZAU?z^>&h>N383VO-L9DK|b|nzDQkpBd6* zJGf#}WmjvHmD_ScCma_R4_8)rviMJ--0{0~da14UaX#sccxJA%#UI(P4cP8cjn%_H zExoPFx^(8+f3%v0zauSOXWfNf<#?|-<9cby)IvSA1^&Ao;fU@8hLFsf*XABnS2V*IceosBUz|H(0tBn3pxR z9m%ojM&EBTM0eaUFLbngo_@ zjx%EKuuj9-x}dH$-`cJff465m>Y6_;pd$!b^iN6L}>$!8$4|YAEBkFlxf7s zVdAqea2RM&n>$vjHaizv*lH9yOBUK%L1@^T3}6>@)545J)os}t@%hSCJGb%yGaZ*IN~bN&>*Hu5{59l zb(M#umiI9dJEXa!E!F9;TUzfgNuCfV6~(>sV3EV~L2J%(^F6J_0lP+SnHGojbgxf+ zq0n0kHd1lgL0$euDKWY%=OHgHXL!g)(?gDE*ViM4MJM=lq?CDidcNu}@}Cd?D&WgB zgGaGP^3h!fq+JEQ;47PJ4@wUn5Q-B-eSUdaN>#Dbl$~E?Do*G43!~F_EpRR<%snO@ zHP=Q>Tw`cyEyaWspWqcAB@OePq8r<#iS6#5J=tYTB7u8WwV^Zfs`PI$Ie(`Kfx{LlgbHgO)Y6jZM%MFmh>Zi?i8aw>ESX zSeDq93z@bq$!eFtJ}q%9X<3(rvFi-Dl=0JTlKq)>X-N+_nHiGQ0jAf*jNs{;FQk6P5U97OK-jcJUv8|@0)*I8}Br9P`%v-Jc z*LP&=h1(l_w(IxKwD)D1!9O!VX!xjcqRnAz;16V*rFbwHmWbx&T1PzXp}CGU8TF?b zCqv=b=YjBT14&Bzpm3&4*tm}sMvwSZf9QEEv z6JNS;FBg694C@1)j)3+6EU{d*0WCS)>h2NUk;Z-3|Ev~zJkwPyT0qa(ID&XqR2JoUUTA!L2xFyVAew~s@? zCY(Rw|9y<3ceJI$ImXu1RA+8=#MmYre>cJrvm&Or@^4&M>m+Oa;;q-2+xjNgf6{ZT zw7uhTWAU;g&pmvXMZ$i_R!?b{XSifuV4QkJYBIOJyU?`1$&&C%axCU77iAO0%du09 z$+0sgI_<6*6C>|5@jk_KCMG`CG5$F#her-spj#7o;Z=Hv_^hD7E9==S5dW7iQ`|-Y zuBe5NG{UgwioQ;d|K-c{X;6SG#(mv$KwL)`4-sk@P6zSXYFF}HSCVqwjedaI@@mp6 z$_4zwiB+y&gp2jlT}eDw{!8KFD%b9B#BnZf5eK?1oEqm!ZgeHVu_WD6w^Q#r}eQ+0GGMGr>^ z^Ed>>JwFtfUUGn$;X?g|bKhR%yixFm=`IsQ%7JA7mxQWPE2w}IIFxJ7I8yDL?@JnP zioLl3XhCG2JtB7pYC0V?MGu`Qg5H)A26XKA+lvB6YFHr-ghy#v)v%9q={R4QOt|{O zXpPUQr1Te``RM=j#R(4OxndLPf#3vtuIMX4kn*p6YX|zWyHBIg4X$|iX(+_VJLAMq zMI~&cqVPXbQTQLp4ZJNVlG7>o0pSDUi5#r(A9tY+ye%k_(=)5*Qu?@DqVc& zJejMUxmf1`n?Z?kQVGL(DN*Rm0Y&Lp%%b=xfy|04bcfIdMxLA1KxY=~qI?p$y{fOj z5?Hx#63S5(E6+Y;Bxh8t$`z84Tp(H5g+^I^)f{-39C)%^Gq;d*ZDx1&OdB;c1?j#P zLHJy%&9vUFq;%9!lJKuq0$rl>v_T04rKh5A9zsxqAjuU{WvZtG0So2x`-STrqw(4| zTS=lCq-YzXqV3&f*B@M3tPfs#&|`kf@&h4XxNJeT4btT1VtqP)*IJ!$xPJX3$;r(Y z3wW9!>@YhoF}AdUMt*LIxxHs3)@>u}db*46Fc%g#)HT%T%6-~{EPmhw~3q&VhzaLWyx0vl>l`V^G zE;^CX<@w!Q>_EP~HpP@!s|zx>7p%3nygtp`?uYl-poVEHjd&Rvv>|y`;@a8ZGA@u7 z(!rte_Ine1Z|e?9sy!T3Wy2D@!9nbT6b?I+jTtkSwk}Hfn^^A@+a3u!nwr^N%YBhu z6fkjQ@#HsmXL?j&9f~z^SA|7#Hdxq#^mw89n@U=aCJMEW%sy(S<*4*rhwmg|eNIYg zZB;9{1#kKI9ZinE-@A~f1?lAY1s%!ep!zoF-e%$=IKawlkbEueyIwW>gX1}~fUQYW z9tue9D43kdHsW6nedd^0DtSoGw-R)vwFdA6HpH-%Qeb(DZCRVtD>d0Ba6QrodcE_} z#8pSbt*so%K!En>Cs%PEFg1e~rM|1MDBVy#T*^xAlN@hiNqR6bIqvm3X;uA~p7!H! zbj06x`wv0p0_?S#r7~%4)9a9I=~%ze*5fHv-mtLofI(QFFtl)eNx<}bZ2xrbk~$0z zVFB5d_=`;vb#}qfD}ECtyt?9OD!t0UJO`T! zt^5t?y?xQm5`tPmSyLl#-_w{^m2j@M7Ua9MNf_1l8M5p(QKX(+JTTbj%(>$X{ptsn`zeCpepoGYc2MoUx6(<8d-ah9#^ zqt(g1IRU*fw}rRFJsC~};@^y7Va{#A_l02P-WhViGtcH|PEDHl0Dt76 zhl1m!VUxQueybl>$#+-B7eLBmX+x1@#KVIV%mn?Ol_pgCj3$qSpJY5 zbvpof2<9NnD=@FZyaw|+48?r|@J*PvVBS{U4y&*a@LibqVBUxM0EXgx1o*KIhqh=& z_!Q>fFrUHv2j+8_FJO+s9D|_VSa--=fKZ-nBQS2lM5=m2Lg+_d8uTbGx;ORIs^k#ik*)H$x z-Ycr&_|%_0vfdw3Q^uPnga{Emg2P9*GvwoaJ3|imOyXQ287nS^JmG(}7$1OV$l_tY zbp$6()CWv8PIUSI=6{~wdD{Q9f2||rZxQi6@lr*sgWtcj{$S!^|3m)W{?87NcN~r` zh~MwuRo&=c)AtIWf7Kn2G}M^(FG-$f%(Q2my>~MsA8i4Le7d>Q!Th56^?ub=r|Tz=*eSfIOLExH%C`x( zjd(vGwZ=Q9W^Td*-gEtaUkmQ=54JM>EiZc}bL*d6{rl|S5?8g0zeJ1(PJGgD$fl#= z6E=mM;a`5_tdH}Wmh^EDQen(TbJG`6!M1Rl-m1UNBYpG@l`Fhz^zq}1^lSHUt>&h9 z;@RjVY`W5R(oAt#9q(ud_Xe|<%C~7Vf^Rcc*re_9*F%zR4JUg0)^bwZ<3r#6mpk8(#thsl9bYY;&e9|z?;`^P-RoGyc>p3Ys9yee_6#F z!_r~Pg^iBxl24=Z&h)KEvy}nVAdea^=X9fFnb5_gPIxQQVfe=gSuTscnx zVxU&igRp|~dK8QBm#BDeko2|-_mj*PLs%j+-HA}PSuBxiy%IqFFXd~)v1@-QTyr(* zlzb--ilSgT-a`qH?{djEQoefD3n^c!R)X!+x$w~NLXhwwSV?$!fs8=Zy)O!p5mdIR zSIFZHdC!YNnl3R+{_I5|9#wYv^;<62=N|IW7lo)$mutMbV0Tjb*F&q0%M~v>9@HhU za$kO<2ZjL;C4jv9B_Sa7Q!F!wpc%~KO1LttMG39TE(<`Sl6>qXArdNTF1#cR1y+|U zl61M!J!QUI7~()JoTJ*oAWB$mTtry;qaXtoyDX#GgUYXbmUlfb4e4^VKE+bwjtWo{ z#IY+BK10gy!*vf<@l?M)Xrue+lsjqmrIr2s1FcU%OZdOtS6IHO^VW^kb#8cXlxG(L z_}~g2+_8|<>3^NCku*(X5@bW7wC*|2&a~@dbUmJOS~DNzs9pD=TV<^tnNc2eexY{V z$CtS$!LN4Rr*3ymg)g?~EVb+UF9Xul!x9^|cHNhkg@071Lpn?sE~*oc7D37Qggb)f zE^*1twd=mV%)K3}aVXDqyU(S%Vb4#{WeuWNwNW0rwePZUq+EF`3rDW#&4tfF%98=a| zwa zkQ22(nzr$7Aiz=chdaF+$nFCOyliAvLS!MtR(5ef9P2)6x<{0>4CCSb zt(vYV8^`KGWJ#~{@Ny5>ou9uMRyZ1=+SOq@5$}7{_ZYl?tiI!wbsZYoC*l2^>P|y` z0UOH$dhbXP4*<+%N@4vaVnN{} zwgaSiGG!561DqaaPLUE3toTAj6pFno+QV?Oi4!V1Bhh47y<)E5y3}{d{5b>DE@t|e z+^(S9j;U`&eHOsmK#c+KRG*WWepV0qOq;w^EhXfQQl|mjp$5&x`|Dn+Ity>6&LWiO-F=OKbg-s?lgF>DB^1 z$cY&2QspOB3RfleP&KM&cqDd?XW$tt9Gmh?;pOoggp|k;BPanULgTDD`=x$FBbDsj zAS6QH*8>}H4)J68l?_5NY^Pug_|S7c!`~aH-=euhdFVzVE`d&SJ*i8=X(1lX<8vHi zI*L+ ze~|=PG%Ej5q(?`DzQn;S1>;XWx5F(+$bjp|DA|WFAA9xf+IpLn=q8=)lxbe8iC)qv)B4^8$7_zzm54h+`9N ztC6;hO2)1t2zxtytA{rWNjP%%&Sv2yU7KCLb&JrVYi`(alQ7jmb@d=;L~{#(e)vEf zZVg03rgLH59PJ5#?!~?kjz{5`mU1=>;wt0vtN!XVnT{(?r`S49IaAgjPsfeFJeGhH zTJjq=3Gt5q`{6S*6>vi6gBW?GhZulz2p9JM2ia8RfLywxsu-nKTE+i519yU*qfc=o zFa!vM{tpBMP8$E$XYWv3Dgq8L9R8mW_?jV5zz`6Tb++1(2cC_i!*~N5Q-6cfPMOjn z$~V|BfLf(9dEWhp@?_gBLPFsQ)@3n1kK*)P6??ZL<7OOC=8ex1(DmneJilClS1Al2hopoPf@KnS*2 z*^4*gG)M#gYPwY8DOB@w;{>)Lk7HfV#*R>9DYwefI@ZoLrg)j}%ibKGQOQ9E63Oh? zMN5P3Mz$l*G5H?s$cNig+SdsDM45j~2+8yxK4Nj)>bDK;P1Be8E~(?Lat>{8!Uud2 zixsLi+&IZ&2x9NF-jMI<5u`kHb=6l1LlmU)rjR;B&XE0MgzFg)wzl)Id8j7kRBWE1eN!waP`C_-=%V(0eZmVv`Nj@!*7#LcbL^gr8>K5$VTEZRSu-!2rM=jLR z0dB$nFgE&i?3w=99UrV6wfNjK6oyB+3O}t_V18^$`Q3)ZSEs)f|Fq`b{ovYnhRHjo z?p|9k>b&FL2Q~NnXQqcg5R@|M{$DP>chB>N<8XJdgr3^?K>Jl|?wZ!QBe7ITwnN1 zz_TxVMP1Kp?$_Vy={Rux!m{TYZ>qgl`VZZm!16tDzvJaa?`E&9Si9h4{nPi4`#|#; z`NxFo{9>{uy^w#ygBzdgmNfV2U*_Mp=H^3XyYDR<1>rqY3@&)Egbvbqn}RR{=%cXqWD8!Xzsq>KmS;7^p6F*ro8s=wrhUQ z)Z8-*zFC_5XYJIR8%}&Yt>xA+n)@>?x&MBAk8axY<9?a*{fPBx4$UJVy42L?{H^?< zEpKNRpLp)H=1vf!4d=x7hW;mUxFGPG9;SCMPUpl$uV^P`J6)E*uM20kI*!Zd1l0>2 zmxH9ds9NdB6YaBTG0OuMa9mx#wOPLVWkDLwaZkFVKvtv~d`EYfYMb7dsTFe$H*$in z{QAp6S)Fg)tm>&aKv~}G{KCk280>8gI9b+NOYaaCvDRBcmKixu!?c+sL1`}zFmhf7 z2m)9!R5dT$f;gU=Bw+8sRaq94Hdxy>K%tu6FuSO{q_ogweQS>=Y*2Q<1!2(8a~`l6Q0snJZ3JVgQ?6gs!V>hQ zYYId3^ACh@;hioqg7GEF1`+-Wb0t~F{N=CT16$%J4Ddws&IG9kF@0>2nXqim1nVXT zJfj7i8B-+VAIUNA3-Oajuz|sVuQm&8hN&!Q_N76QU=GMjEev=^Ur-@IvtYR4{Mhsn z)9DC~4WXRoxTC9=p~^44FO2ehKZ9Zn>2ysA38Y}t+`)j59Q%Qg!S9o&e;~vKWOCC7 z`Q7+|FdW>At;me(g+@H?x>B-4%EnpZP*yP&1EZ*nsv89*fNb~>jH;3_iXwG7-ck5e zweA>nuVWr~WG>fj0`re^xxRXy(A9C1)LgaPAEw;B6Xlyf6eMtSX1EjS=Z`%v$Xh=| z)}MbU7={UMytS0H@tH<{?(G7)lP9s$aX5(;qv{Ijd5g?np7)Uu;9;vp_MF`Okq`w2 z!IVM4mF93--u01?CZriS`P{2Qm#5Zl?|e;&cU%7TnozRiW8nt3!|IQPO%ZC7SLBkv zxgDJWk@0ysIs6l$kiwFs^YfNidF3ZUjN9R2YpDGACxV$A(Ed2t_^FZ?3qE~Wlw9$t zFhmQ!ui;aCY|SQj{#&>aN-2Uq6CQQDb$=!#xh-FPCS;R^Qr;KwAHn2~yKlLfU zWEe=kQ;rEHN|Xg%eN3qaX6ZgA*t9B}$;2Q1{%hpo5f%g+Cl`Jx?5Bv#@&zt<9`^;t zID?uli8fonf1YSkFriS&fI~~Bxy*a+3;llbgyTX;s+ybq#6 zd8dWpZp-@9!Wg&Z#nVEL600Iw42k#@H%EB;qLDzTyBNo58d{88G*a=CFN_f-Irogx zIoVg3b4D0VQT^n&Tx59P8R2e97HUO+;922nx8<(0LbTiR+*#o+CDtvuVuWn{Nyt>J zkK~F&_dWTOuvAd&Z{~{8^7vnsugMbK_N$QPPUqmS!p&~WjNfn%Dnq3*PYjda`b`K? ztW9}hgm03Ukqgr>yZD<>fvTH+PDr8X{)Fv{bHWU_<)M*pO)%Y;;oRH28e20RF|jpY9Ao4nFAvg&oiN*6cc`Cs z|8=PTwD!KGv^GM~on1tkwXHv)?&(G@Tq~^ccjaraB4rG;O#OX8VQs$)QSKt$JkaNf z--S50PaiCmmzHGiJVOdpt^tr^>nikOT$t=4b)t3_ay1GmVZj-4 zI(~qmkB)3vTA%o#AAS0wjSvOLae?N=?o34t?li)%Z}`#$VW_)+pI#X7aV`wZHS$j( za*l>59b04PMC!l#pugTJGl&kg;eekztKruu zgeVn=u_#je*8Y?{4}e#vBB0D0km|R#Z9!k4fs~cy{Xd0d>bb%4V^Qe2OY4>4hxvtH z6yjsyN0?MBYr}y}1(D3~{>CLwyC`J3E91tCLRgBLG{cJWgCvf-aJL>BP>*{r4yebs z2U<>E9MA&2TtW=tOK8k$rlT(ID*5y00qEwtl-|UeTCGb6aig`|C8U!Dd!n3tpG!!H z@Kt6Ij11Ejwq|x1IVvafzG=TM*3gUz#UNU%cId?7VXBWih9c!oEp9wMCC$?;;p8pl6W`{SZLzmr0n9uP7qeR$Zn-W6q3YnDsP= zY1W2QnDwZ8vDH}1bWGqaM+I@Zz?CeqR^jd#?8V}OX&uqFF-R4>_sRe< zbWAXJ8Yx;3xa`59^{e^!3mObScTOX_Qeupr%_Cl&jg5GvX4=`lio!6 zVWYSx6zS@SFJj~hN)jjQ48#({ZeCA-7_(1Wpo`^Y=kr3Fz6s@hLO%bzFvT|)0YE;p z{7695Vr zj;*b+eI0$&clkX_6WWfh>sVLw!I5be>6sSCo}sPxj*S&p^6^<*tY{C579BpetlI7& zo)2^nsjOX6;{-J_5zpEw+?aa%3qrOqF~SN7G4m# zW8Qdb>vgL`ygXukex6rV>+MvQ)Dx@bJYJPKZHCtjkK#SC4Mv~qBDc?%bwAJBsk69( zxdz)PSMbpX?@sOusN$@3b++c3VspVlI%844__pAxS(#aNPp)k?rWEh-YWnZithyGi ze$TqwgI^RngU3+5JA=K9NB$8k-)O4I!X)AR&z_Uh7CzoOGizIN;n{j)mbEhY+h%T> zbfERjyugX)bpbQ8T)Lm}DH6ld_R6ax#QFU7@~07Ej_%V4+$1h0LBwQCq&RBq#zhr* z?dPUQp3W#v9e^jMbN;+gu)*FFZRI|O#B@)L!H{J%R75}cVu9)H{MM(+qm9l8G|M5u zt+O-+p%cxK3@`6W6NjTu%E{THGy!C|j`ojfrp963Wo<+fx~FRF>Uy6iN*xb%NxJlg zo;Vt$@$8oyv&GstGts+vG>D$Up3SOzpL{Y~w8j+@*@oxRU{=+=PqvQ|8=~`&D?OAU z>$i9}t8TmHUq*>HOh!iq3yb60+DWfllb!I4Q|0b8$YTVcr(AXKQ{fTjO2Y^l`SBdF zI?n8?I9?iev+CX_CyW+vikU|g5gx)!&qfREovUtf{_c`1*xB3b%(p!tXO0mUNWjuTfo>O+%z9WBxH$l2 zq^r+l&_+Y)rWzdys>mRYqG{7!mq0d9M+s>ZlI~fdZ^&j099M4~w9cp4BpD!sW{Ppp zHwXKyKRnS%{e;UEz57X@%W?zNGnj<>s}O1$saSChY<3LgL8KEU5KicVYzilpy^0NV zQ+R(xfN+W?kqcH78I)5Ps}@#CAf2LF$S6t$v{O{S4a8Ga`DG|xMm=dMyDN1toWyjyur*O2iR$qj(x7WRO7d{Y?u*&w!={>LzRgRS&JaDJ#gb51_CH)-m%L zNb9&O2Xs!TRkKkdZ8n?;2EkT82wSZigOFe1CN>6z(Av&2rc4h+BM2dP0QV>XIw+b1 zpV`Rr&?O@azL6i6n~;l8MnM1!W;6!*J$v!iAKxi2-}Y4bjTtAte3IP0T5W&%;dxP0 z{`Jv}J0AV@i7ImI{Ey-9EB^7)#7FYJ8vp(BG2f9}sn>No^G=;Fy7QXZ6YGk)J`o}K zEo5!KZ>!h&_b2aP{O29k6Y;$iuqgW7n~HvTC-5FW?w`27<7aI!uWwvjv&v>$LSf>* z9r5VBqYno|E_b?q4G_YFBh$Ode-kes6SL3%n9WafD)nR6T+?CVpc0u$Mq?nOkLruRBgN5 zt~h|8rZ3>rQ+(|q=Rh9hCOv{&I8O|Aq^iwOaB4ZkaD@|C2o~3aiz8t>JTp|dRE2k{ z@Q@05cPvmDYO4GuNyXcnOO033A#Ap){@As5xkPSPlH%2;LVlQHFH|9k?^?Aa4TWlw zzJro{SW6Nq`f!`on0r-tUWKM)CFPYWbnI1Mj;XLWK?&fMqQE>AnpH@sY}QcOq}7@K zAXIt=pdxU))tG%M3`|v0rj+(Nw4~gn3LKQw9yA_$P$;b7&K4=QJT-}JD*Qx+5owA) zCH;w(vKz^uK`EbM{thK+Z*HC%b+-ynsxSgu==7AUutSA=Rp^zj_~)t6szO4+3q66J z{#Gz#5DEr5?n4ii&dA-VMm?m$vnmW6!2)r4Dm1HbvkLoE=#`;_GpTT%3OiJ|Uxmk1 z7&wySCQ_6!e_G7bL)Guk znblg@twOI%#WzodD^<8lg`cPpx^dYv&!pnATXi_3!U&Ak^vqDQX$WT?NLG%cBrsVg%PwwqxdT9P~mgHg(QbIGD%?F( z?V5cmM)a|iv(eO^v~kZcs67#5j~;4I9$cTqEL=pK0?SpnQiXd}cua+?_o>4jwOEH2 zix)m9i`)TCR?qcjDM_DHVPLjm&r_jUg_QI>chVa2(x8;pH3maoYg;e@O?lNelj~Y~l z#sQy-=lC&7(iHQg8q>h-7D=Iiu2;{%E)NF03=EuPfIlP$mWp9IFJI=E=T9Jl2Yo~7 zAt4<#6SvUTzU?E$+j(CaH&p(UDCd~OdC|10qKCePh~+EAGO2EN%8!`D8={$ji5i4g zSGTEH#L=@`F3A$>q9Z&ME2W|qk1JH&Hp?$(i4FK_45PB_l9kQoCDwXxtiVk%{n6-+ zkf9{zsqX#fd&n1_Li{~9%X{8`C$M`2D2fRMN01pVK*9DJ@#V7y*|G=O9HS_DufOj4 zrYGJB+*yX`b0$|%JsA+4NV$dJfDVd+Mg4%pM{8k;z-hpi5o$mPx&jeIHAoz-71jnQ zt3?thDc3d+E{zr|RCa6WP?+V|ff{IUgdKS5{0HDvQw$m3#R%o+i_Mre_$UwX*2Usg zrhTq_V8aN1H@VrrxAhlZw0nc9BmM{5MM>dPHk!;tDzd62pf%_P@hU*USLiYv#mViH8!R+Ih@pA`5&MH$xwQ;%}RSveat zM^r!{4jRpwm>jsc+(HP=wXts>#Q1M=Rt)CAlkrLxfe8wvRzn~71FW6s>0!TI8KFRv zqJqLyt`z422?4FFYzwBi6-wVMbLSBc9MK&xO$Ck%0Fjmt3Z&*S zi>pNX_~t%@;$J60Da_(pi0T-CVF}7V2eNjnvCH;9khs=eMJ1@T6{t4g?V(kQ6T<*K zR7fg3D0 z8!wbBkUevA>N+86#&|>IqhO-cH}ue%S+}(lKGaSWU-}9a3)s7TP_A@;$jWLPI3

q52MgV10?2TFZt85Jwy|D+&~RU@{R-Stb=iqA5O=?4_%AZr>MlwhkY6pXr!dO<=l zsox_v*2)yolxpIxVegfk*;fT4mDF#O_HB#S^yE|b^05oGYANj(M4=V|og1{huc0)} zyx1~H6A59t5eAAx1jEaXfikSQ<mWj9Q$l|kc)3u4hkPPh94$W@Ee_QqG2t*9 zq#Yk#(p6A9JTurA)-(X)1LyS9VX662eR9>(b$2YD+ed(L(_0QCKEH)ieQ+feTb7?0-G5lC{tR5 z!MBcEq|QfnTI%?)QOg}`pg)y1YT?2Aca{$|zR-^KMDDm3$ju2i$0d$Hzc3HE;jyYv zov|2N#qJD{08gJ2XJUYu1p|8rRk>?Wuvp| z7#4iWko3SQi7LGr^<*1RZV3rdEkVg4`y3MDF2h9Cf>2a*7OnwDvrz4(e(2AXymFS_sv@Dvj3@e$Lw$?TtjcafWmun^>bg2=j9v3SuX?Xr0 z7k=+*G(MDT;D%=}eTKZIoVjCoM%3LEk56ei^|$*L>;j zmARbItSN7{wm|_hcBH6ph9Cjlet?mf?rvl0Dv@bIXXAgzs~G=b^NZr5xVZ?9Oz@1t zm&t`02QvwVGNIXn-6jGdF-5C06T8&DH=BbXBTf0zM55Viil7;^0cyM9!PYbRXlSKu z(N~JM6pl2=P)TW};zMxPz7z{pHEZx^nO<7bxor1p?w(qv;dV zL^vpIlR}`8A9X~;e$kBsC4$foDU{AU0M;urkoTZjd-r%5v z(#gvFU!GSiiJELy)@3mr1M2sZVh+wU=d!2+VyeYP3uW|eJGD^uXx*)d%W}`w`B*yO zS|Lny^SBfTMA3$0gdvJ41@GvOjBLw?TOnwu60Qg%P&Ir@@i!e|Oc-=b5NXRqXl(?T zh3So^v??|gF2p;U3X`ZU#)Q{|sc#9UNIT87jBDBNI=&f6TM?D!%S%V8S_}^cq(l!& z!Yiu}XzF8AItE$CzQ6^#`*{zxU1pK*juf+1&R#5=OK7yDIgScM@f zq{D1D2gdx8RJSk{>Q(5a!Uz?{sW5>c@i>R74$*|QS1)Rb9#epvIaEw{kee4R;_={Q z0DBaUE0fb9f`fx9sJ2#H)1aWV(!!I%ewCo8Pp*}T7f{G;>aK8{3Uk$v=(Lo21M-BSVmXyD~x51_)7E)j`xY`r?flfN2DufrDeLpol)#q&f6Vuz@TfO zT4`?r=>rTDUy@Bl0P09DjktVjG zj;M0YP;ux~_gAr|!XM8j_N(AdQJ_e@hE@Z1Elt(Itl>lUHb%e8D~5{09Ea33OQ8zy zP!q&5&44%@uTI0 zbV2Y;qvgVQ@iqbdSeBB-c-^&}d}NpyC601&9`c!Ckh~t7Aa0PIiDH}Iy+E7fN9nQ2 z9f@MGZvkGB66<*+Z>qarCofMDs|>{h9QDs5l36}~m3Y1Hzwnv@Wa*K662t;IF&UY} z3=9hW*EZmHW<>7w-s<3 z%yyVg)$QV5^G<$Si*ZOM@**h>+$jY;(pbJs06HjcwEW6ve9%52Mf{V0aIC1?FH={Azhj)(raPjOe=QPc^HcsZ?++3EXBc|a zyeH#zDvUetFX5l*AwNG>EZ--Th^2fe4FI%m$^-=8jjI_!ngr#T@!|+yViPf%foAqMPoR*Av9n3FdqQ?4u#Q)Oq8ILR;#nQ677{{ux+8mjJ3G~|imbl*zV zUkl?4;cre+{|hBSbCJUI0Vy~F;CoD+HE3UqTA~0b!suZm z?*HO+X$(S Date: Thu, 3 Dec 2015 08:40:20 -0700 Subject: [PATCH 2/4] added Option Explicit, declare variables Commit includes a number of "Option Explicit" changes with declared variables following where needed. This also solves a problem where the RubberDuck VBA add-in was not able to parse the code. --- src/code/Chart_Axes.bas | 11 +++-- src/code/Chart_Format.bas | 6 +++ src/code/Chart_Helpers.bas | 2 + src/code/Chart_Series.bas | 8 ++- src/code/Formatting_Helpers.bas | 27 +++++++++-- src/code/RandomCode.bas | 4 +- src/code/Ribbon_Callbacks.bas | 6 ++- src/code/Sheet_Helpers.bas | 7 ++- src/code/SubsFuncs_Helpers.bas | 2 + src/code/Testing.bas | 64 ++++++++++++++++++++++++ src/code/Usability.bas | 13 ++++- src/code/bUTLChartSeries.cls | 83 +++++++++++++++++--------------- src/code/form_chtSeries.frm | 5 +- src/code/form_chtSeries.frx | Bin 3096 -> 3096 bytes src/code/form_newCommands.frm | 4 ++ src/code/form_newCommands.frx | Bin 5144 -> 5656 bytes 16 files changed, 180 insertions(+), 62 deletions(-) create mode 100644 src/code/Testing.bas diff --git a/src/code/Chart_Axes.bas b/src/code/Chart_Axes.bas index 5b76201..9c620d7 100644 --- a/src/code/Chart_Axes.bas +++ b/src/code/Chart_Axes.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Chart_Axes" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Chart_Axes ' Author : @byronwall @@ -68,13 +70,12 @@ End Sub '--------------------------------------------------------------------------------------- ' Sub Chart_FitAxisToMaxAndMin(xlCat As XlAxisType) - - Dim first As Boolean - first = True - Dim cht_obj As ChartObject - For Each cht_obj In Chart_GetObjectsFromObject(Selection) + '2015 11 09 moved first inside loop so that it works for multiple charts + Dim first As Boolean + first = True + Dim cht As Chart Set cht = cht_obj.Chart diff --git a/src/code/Chart_Format.bas b/src/code/Chart_Format.bas index cedf827..fa30817 100644 --- a/src/code/Chart_Format.bas +++ b/src/code/Chart_Format.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Chart_Format" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Chart_Format ' Author : @byronwall @@ -111,6 +113,10 @@ Sub Chart_AxisTitleIsSeriesTitle() cht.Axes(xlValue, ser.AxisGroup).HasTitle = True cht.Axes(xlValue, ser.AxisGroup).AxisTitle.Text = b_ser.name + + '2015 11 11, adds the x-title assuming that the name is one cell above the data + cht.Axes(xlCategory).HasTitle = True + cht.Axes(xlCategory).AxisTitle.Text = b_ser.XValues.Cells(1, 1).Offset(-1).Value Next ser Next cht_obj diff --git a/src/code/Chart_Helpers.bas b/src/code/Chart_Helpers.bas index 496cd59..4dbcf6e 100644 --- a/src/code/Chart_Helpers.bas +++ b/src/code/Chart_Helpers.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Chart_Helpers" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Chart_Helpers ' Author : @byronwall diff --git a/src/code/Chart_Series.bas b/src/code/Chart_Series.bas index 0e49f4d..93d1460 100644 --- a/src/code/Chart_Series.bas +++ b/src/code/Chart_Series.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Chart_Series" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Chart_Series ' Author : @byronwall @@ -42,7 +44,11 @@ Sub Chart_AddTrendlineToSeriesAndColor() Set trend = ser.Trendlines.Add() trend.Type = xlLinear trend.Border.Color = ser.MarkerBackgroundColor - trend.name = b_ser.name + + '2015 11 06 test to avoid error without name + If Not b_ser.name Is Nothing Then + trend.name = b_ser.name + End If trend.DisplayEquation = True trend.DisplayRSquared = True diff --git a/src/code/Formatting_Helpers.bas b/src/code/Formatting_Helpers.bas index de75441..6277e35 100644 --- a/src/code/Formatting_Helpers.bas +++ b/src/code/Formatting_Helpers.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Formatting_Helpers" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Formatting_Helpers ' Author : @byronwall @@ -131,11 +133,13 @@ Public Sub Colorize() Set rngToColor = GetInputOrSelection("Select range to color") Dim lastrow As Integer lastrow = rngToColor.Rows.count - + + Dim likevalues As VbMsgBoxResult likevalues = MsgBox("Do you want to keep duplicate values the same color?", vbYesNo) If likevalues = vbNo Then - + + Dim i As Integer For i = 1 To lastrow If i Mod 2 = 0 Then rngToColor.Rows(i).Interior.Color = RGB(200, 200, 200) @@ -194,8 +198,10 @@ Sub CombineCells() 'Read input rows into a single string Dim strOutput As String + Dim i As Integer For i = 1 To x strOutput = vbNullString + Dim j As Integer For j = 1 To y strOutput = strOutput & strDelim & rngInput(i, j) Next @@ -296,6 +302,8 @@ Sub CopyTranspose() errCancel: End Sub + + '--------------------------------------------------------------------------------------- ' Procedure : CreateConditionalsForFormatting ' Author : @byronwall @@ -310,7 +318,8 @@ Sub CreateConditionalsForFormatting() 'add these in as powers of 3, starting at 1 = 10^0 Dim arrMarkers As Variant arrMarkers = Array("", "k", "M", "B") - + + Dim i As Integer For i = UBound(arrMarkers) To 0 Step -1 With rngInput.FormatConditions.Add(xlCellValue, xlGreaterEqual, 10 ^ (3 * i)) @@ -341,6 +350,8 @@ Sub ExtendArrayFormulaDown() Set rngArrForm = Selection For Each RngArea In rngArrForm.Areas + + Dim c As Range For Each c In RngArea.Cells If c.HasArray Then @@ -382,6 +393,9 @@ Sub MakeHyperlinks() On Error GoTo errHandler Dim rngEval As Range Set rngEval = GetInputOrSelection("Select the range of cells to convert to hyperlink") + + 'TODO: choose a better variable name + Dim c As Range For Each c In rngEval ActiveSheet.Hyperlinks.Add Anchor:=c, Address:=c Next c @@ -399,7 +413,8 @@ End Sub '--------------------------------------------------------------------------------------- ' Sub OutputColors() - + + Dim i As Integer For i = 1 To 10 ActiveCell.Offset(i).Interior.Color = Chart_GetColor(i) Next i @@ -419,6 +434,7 @@ Sub SelectedToValue() On Error GoTo errHandler Set rng = GetInputOrSelection("Select the formulas you'd like to convert to static values") + Dim c As Range For Each c In rng c.Value = c.Value Next c @@ -587,7 +603,8 @@ Sub TrimSelection() Dim rngToTrim As Range On Error GoTo errHandler Set rngToTrim = GetInputOrSelection("Select the formulas you'd like to convert to static values") - + + Dim c As Range For Each c In rngToTrim c.Value = Trim(c.Value) Next c diff --git a/src/code/RandomCode.bas b/src/code/RandomCode.bas index 9cf5f53..4c360ef 100644 --- a/src/code/RandomCode.bas +++ b/src/code/RandomCode.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "RandomCode" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : RandomCode ' Author : @byronwall @@ -174,7 +176,7 @@ Sub Rand_DownloadFromSheet() For Each rng_addr In Range("B2:B35") - Download_File rng_add, str_folder & rng_addr.Offset(, 1) + Download_File rng_addr, str_folder & rng_addr.Offset(, 1) Next rng_addr diff --git a/src/code/Ribbon_Callbacks.bas b/src/code/Ribbon_Callbacks.bas index ea19e99..42ce4dc 100644 --- a/src/code/Ribbon_Callbacks.bas +++ b/src/code/Ribbon_Callbacks.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Ribbon_Callbacks" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Ribbon_Callbacks ' Author : @byronwall @@ -113,7 +115,7 @@ Public Sub btn_convertValue_onAction(control As IRibbonControl) End Sub Public Sub btn_copyClear_onAction(control As IRibbonControl) - CopyClear + MsgBox "Copy clear is missing" End Sub Public Sub btn_cutTranspose_onAction(control As IRibbonControl) @@ -162,7 +164,7 @@ Public Sub btn_protect_onAction(control As IRibbonControl) End Sub Public Sub btn_rmvComments_onAction(control As IRibbonControl) - RemoveComments + MsgBox "RemoveComments missing" End Sub Public Sub btn_seriesSplit_onAction(control As IRibbonControl) diff --git a/src/code/Sheet_Helpers.bas b/src/code/Sheet_Helpers.bas index d932816..a5ad71f 100644 --- a/src/code/Sheet_Helpers.bas +++ b/src/code/Sheet_Helpers.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Sheet_Helpers" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Sheet_Helpers ' Author : @byronwall @@ -24,9 +26,10 @@ Sub LockAllSheets() Application.ScreenUpdating = False 'Changed to activeworkbook so if add-in is not installed, it will target the active book rather than the xlam - For Each Sheet In ActiveWorkbook.Sheets + Dim sheet As Worksheet + For Each sheet In ActiveWorkbook.Sheets On Error Resume Next - Sheet.Protect (pass) + sheet.Protect (pass) Next Application.ScreenUpdating = True diff --git a/src/code/SubsFuncs_Helpers.bas b/src/code/SubsFuncs_Helpers.bas index 0d002d3..9fbb5d1 100644 --- a/src/code/SubsFuncs_Helpers.bas +++ b/src/code/SubsFuncs_Helpers.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "SubsFuncs_Helpers" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : SubsFuncs_Helpers ' Author : @byronwall diff --git a/src/code/Testing.bas b/src/code/Testing.bas new file mode 100644 index 0000000..c5cda00 --- /dev/null +++ b/src/code/Testing.bas @@ -0,0 +1,64 @@ +Attribute VB_Name = "Testing" +Option Explicit + +Sub RemoveAllLegends() + + Dim cht_obj As ChartObject + + For Each cht_obj In Chart_GetObjectsFromObject(Selection) + cht_obj.Chart.HasLegend = False + cht_obj.Chart.HasTitle = False + Next + +End Sub + +Sub ApplyFormattingToEachColumn() +' +' Macro1 Macro +' + +' + Dim rng As Range + For Each rng In Selection.Columns + + rng.FormatConditions.AddColorScale ColorScaleType:=3 + rng.FormatConditions(rng.FormatConditions.count).SetFirstPriority + rng.FormatConditions(1).ColorScaleCriteria(1).Type = _ + xlConditionValueLowestValue + With rng.FormatConditions(1).ColorScaleCriteria(1).FormatColor + .Color = 7039480 + .TintAndShade = 0 + End With + rng.FormatConditions(1).ColorScaleCriteria(2).Type = _ + xlConditionValuePercentile + rng.FormatConditions(1).ColorScaleCriteria(2).Value = 50 + With rng.FormatConditions(1).ColorScaleCriteria(2).FormatColor + .Color = 8711167 + .TintAndShade = 0 + End With + rng.FormatConditions(1).ColorScaleCriteria(3).Type = _ + xlConditionValueHighestValue + With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor + .Color = 8109667 + .TintAndShade = 0 + End With + Next +End Sub + +'--------------------------------------------------------------------------------------- +' Procedure : TraceDependentsForAll +' Author : @byronwall +' Date : 2015 11 09 +' Purpose : Quick Sub to iterate through Selection and Trace Dependents for all +'--------------------------------------------------------------------------------------- +' +Sub TraceDependentsForAll() + + Dim rng As Range + + For Each rng In Intersect(Selection, Selection.Parent.UsedRange) + rng.ShowDependents + Next rng + +End Sub + diff --git a/src/code/Usability.bas b/src/code/Usability.bas index 9cf7228..4008eab 100644 --- a/src/code/Usability.bas +++ b/src/code/Usability.bas @@ -1,4 +1,6 @@ Attribute VB_Name = "Usability" +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : Usability ' Author : @byronwall @@ -206,7 +208,7 @@ End Sub Sub ConvertSelectionToCsv() Dim rngCSV As Range - Set rngCSV = GetInputOrSelection + Set rngCSV = GetInputOrSelection("Choose range for converting to CSV") If rngCSV Is Nothing Then Exit Sub @@ -243,8 +245,12 @@ End Sub ' Sub Sheet_DeleteHiddenRows() 'These rows are unrecoverable + Dim x As VbMsgBoxResult x = MsgBox("This will permanently delete hidden rows. They cannot be recovered. Are you sure?", vbYesNo) - If x = 7 Then Exit Sub + + If Not x = vbYes Then + Exit Sub + End If Application.ScreenUpdating = False @@ -252,6 +258,7 @@ Sub Sheet_DeleteHiddenRows() Dim iCount As Integer iCount = 0 With ActiveSheet + Dim i As Integer For i = .UsedRange.Rows.count To 1 Step -1 If .Rows(i).Hidden Then .Rows(i).Delete @@ -305,6 +312,7 @@ Sub CutPasteTranspose() rngOut.Activate 'Check to not overwrite + Dim c As Range For Each c In rngSelect If Not Intersect(rngSelect, Cells(iORow + c.Column - iCCol, iOCol + c.Row - iCRow)) Is Nothing Then MsgBox ("Your destination intersects with your data") @@ -751,6 +759,7 @@ Sub Sht_DeleteHiddenRows() Application.ScreenUpdating = False Dim Row As Range + Dim i As Integer For i = ActiveSheet.UsedRange.Rows.count To 1 Step -1 diff --git a/src/code/bUTLChartSeries.cls b/src/code/bUTLChartSeries.cls index 38c95ff..ad055da 100644 --- a/src/code/bUTLChartSeries.cls +++ b/src/code/bUTLChartSeries.cls @@ -7,6 +7,8 @@ Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False +Option Explicit + '--------------------------------------------------------------------------------------- ' Module : bUTLChartSeries ' Author : @byronwall @@ -21,6 +23,8 @@ Public SeriesNumber As Integer Public ChartType As XlChartType Public series As series +Private str_name As String + '--------------------------------------------------------------------------------------- ' Procedure : AddSeriesToChart ' Author : @byronwall @@ -69,8 +73,18 @@ End Function '--------------------------------------------------------------------------------------- ' Public Property Get SeriesFormula() As String - - SeriesFormula = "=SERIES(" & FullAddress(Me.name) & "," & FullAddress(Me.XValues) & "," & FullAddress(Me.Values) & "," & Me.SeriesNumber & ")" + + '2015 11 09 add a trap here to allow for a string only name + If str_name <> "" Then + SeriesFormula = "=SERIES(" & str_name & "," & _ + FullAddress(Me.XValues) & "," & FullAddress(Me.Values) & "," & _ + Me.SeriesNumber & ")" + Else + + SeriesFormula = "=SERIES(" & FullAddress(Me.name) & "," & _ + FullAddress(Me.XValues) & "," & FullAddress(Me.Values) & "," & _ + Me.SeriesNumber & ")" + End If End Property @@ -88,74 +102,63 @@ End Sub '--------------------------------------------------------------------------------------- ' Procedure : UpdateFromChartSeries ' Author : @byronwall -' Date : 2015 07 24 +' Date : 2015 11 09 ' Purpose : Reads the series info from a Series and stores it in the class '--------------------------------------------------------------------------------------- ' Sub UpdateFromChartSeries(ser As series) - 'this will work for the simple case where all items are references - +'this will work for the simple case where all items are references + Set series = ser Dim form As Variant - - ' "=SERIES("Y",Sheet1!$C$8:$C$13,Sheet1!$D$8:$D$13,1)" - + + '=SERIES("Y",Sheet1!$C$8:$C$13,Sheet1!$D$8:$D$13,1) + 'pull in teh formula form = ser.Formula - + 'uppercase to remove match errors form = UCase(form) - + 'remove the front of the formula form = Replace(form, "=SERIES(", "") - - 'Debug.Print form & vbCrLf - ' "Y",SHEET1!$C$8:$C$13,SHEET1!$D$8:$D$13,1) - + 'find the first comma Dim comma comma = InStr(form, ",") - - 'Debug.Print comma - + If comma > 1 Then - Set Me.name = Range(left(form, comma - 1)) + + 'need to catch an error here if a text name is used instead of a valid range + On Error Resume Next + Set Me.name = Range(left(form, comma - 1)) + + If Err <> 0 Then + str_name = left(form, comma - 1) + End If + + On Error GoTo 0 End If - + 'pull out the title from that form = Mid(form, comma + 1) - - 'Debug.Print vbCrLf & form - ' SHEET1!$C$8:$C$13,SHEET1!$D$8:$D$13,1) - - 'check the xvalues for multiple references (include paren) - + comma = InStr(form, ",") - + If comma > 1 Then - Set Me.XValues = Range(left(form, comma - 1)) + Set Me.XValues = Range(left(form, comma - 1)) End If form = Mid(form, comma + 1) - 'Debug.Print vbCrLf & form - + comma = InStr(form, ",") Set Me.Values = Range(left(form, comma - 1)) form = Mid(form, comma + 1) - 'Debug.Print vbCrLf & form - + comma = InStr(form, ")") Me.SeriesNumber = left(form, comma - 1) - + Me.ChartType = ser.ChartType - - 'if parenth then bring in until ), // otherwise until next comma - - 'do teh same thing for y values - - 'pull in the series number - - End Sub '--------------------------------------------------------------------------------------- diff --git a/src/code/form_chtSeries.frm b/src/code/form_chtSeries.frm index 6a90106..3e14b9e 100644 --- a/src/code/form_chtSeries.frm +++ b/src/code/form_chtSeries.frm @@ -14,10 +14,7 @@ Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False - - - - +Option Explicit '--------------------------------------------------------------------------------------- ' Module : form_chtSeries diff --git a/src/code/form_chtSeries.frx b/src/code/form_chtSeries.frx index ae27183b0b678872c81c3af0904ef1458d3afeac..658f2cdfa46b3e52e800037550a6ee699eb725e5 100644 GIT binary patch delta 36 rcmbOsF+*ZQ3k%zVMdAw|=x**};bLL_|NsBy=^VEhnSgXL*HT6R8q5#) delta 36 rcmbOsF+*ZQ3kzF9^x=E!MK^b`aIr8mFfeSM&T)&82}l=nEoB4%<0lIi diff --git a/src/code/form_newCommands.frm b/src/code/form_newCommands.frm index 2a8fabe..6811023 100644 --- a/src/code/form_newCommands.frm +++ b/src/code/form_newCommands.frm @@ -88,3 +88,7 @@ End Sub Private Sub CommandButton29_Click() CreatePdfOfEachXlsxFileInFolder End Sub + +Private Sub CommandButton30_Click() + ApplyFormattingToEachColumn +End Sub diff --git a/src/code/form_newCommands.frx b/src/code/form_newCommands.frx index 45bdc222aaf07d81888f97ddb955d9d7e128d3aa..dcb2fc8014e1211d6556ff2a3166e7550c20d13e 100644 GIT binary patch delta 477 zcmbQCF++#V$BBc1L2M(N5fdvX0|Udq&5lgh87DTdOqO8D5#8`yXyF6hi;T=b83!I9 z0R(B24+`5)zQJO_xOuW5Ydzzg$rD+t1@(b4d0=@421X#QG+CCdoJRr3QUv0E|NsA= zynszZP#4J2g9;dc=#7Q;jDid-DhwPv0zAqa#(Q*0eJ}^ntq3LB_KPTE0_sr3xso?D;X$c%#Dy<%pJi9la=QQ zfNPt~lMYn*o2M8^=JVzQ$@{$ZKr)^WBz~L^Bx24V4kY{ei~WGEVG3Z-0aDTo4GcC6 z3=Pitc`2DCnfZAEsYTBDIiR zNwGqHc^=5IlNYjRZ7o3j(2Yer|4JUW!v`NlAX5 au>pg+I0J*P-egbV^OG+KdthJ(76|~HMSJc5 delta 307 zcmbQCGed*T$BBc1L1ZJF5fkIT&5lgh87DSyOqO8D5oI`Xz0p(bA|o>c1H%DsAOQqv zlO09uC*NSPU~HZ&$Xd^sGkGFwwV*CgCJ!vnz`zKk6(-BFmGk`j|Np-tkf#L1lNYdQ zaDoK%fSi9D3*8w78CX;pICunjK+^yJGcXuW*5t6_5(M%LKsHXCoXepCv}F><1|aFo z=?)~jIirE(b55Vh{M^bwRybGiWIk??s`FgQK+>2SCbO73f{|&m0JjoQRGudQs(vz0 zI*|XHrx-})^X3D|`@Ho)GM*14ew+^^V$L59B>VY6Y7AMVHqRCK#l+;R2l2P?0RV6p BRwDoa From 2f488fead909250c76c87876c034de6efa3b6549 Mon Sep 17 00:00:00 2001 From: byron wall Date: Thu, 3 Dec 2015 09:39:46 -0700 Subject: [PATCH 3/4] Added a distance function The distance function is good to compare data sets. Also starting to work through the issues reported by RubberDuck. --- src/code/Chart_Axes.bas | 5 ++-- src/code/Testing.bas | 54 +++++++++++++++++++++++++++++++++++++++++ src/code/Usability.bas | 21 ++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/src/code/Chart_Axes.bas b/src/code/Chart_Axes.bas index 9c620d7..e7b75ea 100644 --- a/src/code/Chart_Axes.bas +++ b/src/code/Chart_Axes.bas @@ -82,7 +82,8 @@ Sub Chart_FitAxisToMaxAndMin(xlCat As XlAxisType) Dim ser As series For Each ser In cht.SeriesCollection - Dim min_val As Double, max_val As Double + Dim min_val As Double + Dim max_val As Double If xlCat = xlCategory Then @@ -125,7 +126,7 @@ End Sub ' Flags : not-used '--------------------------------------------------------------------------------------- ' -Sub Chart_YAxisRangeWithAvgAndStdev() +Public Sub Chart_YAxisRangeWithAvgAndStdev() Dim dbl_std As Double dbl_std = CDbl(InputBox("How many standard deviations to include?")) diff --git a/src/code/Testing.bas b/src/code/Testing.bas index c5cda00..bbeeaea 100644 --- a/src/code/Testing.bas +++ b/src/code/Testing.bas @@ -1,6 +1,60 @@ Attribute VB_Name = "Testing" Option Explicit +Public Sub ComputeDistanceMatrix() + +'get the range of inputs, along with input name + Dim rng_input As Range + Set rng_input = Application.InputBox("Select input data", "Input", Type:=8) + + 'Dim rng_ID As Range + 'Set rng_ID = Application.InputBox("Select ID data", "ID", Type:=8) + + 'turning off updates makes a huge difference here... could also use array for output + Application.ScreenUpdating = False + Application.Calculation = xlCalculationManual + Application.EnableEvents = False + + 'create new workbook + Dim wkbk As Workbook + Set wkbk = Workbooks.Add + + Dim rng_out As Range + Set rng_out = wkbk.Sheets(1).Range("A1") + + 'loop through each row with each other row + Dim rng_row1 As Range + Dim rng_row2 As Range + + For Each rng_row1 In rng_input.Rows + For Each rng_row2 In rng_input.Rows + + 'loop through each column and compute the distance + Dim dbl_dist_sq As Double + dbl_dist_sq = 0 + + Dim int_col As Integer + For int_col = 1 To rng_row1.Cells.count + dbl_dist_sq = dbl_dist_sq + (rng_row1.Cells(1, int_col) - rng_row2.Cells(1, int_col)) ^ 2 + Next + + 'take the sqrt of that value and output + rng_out.Value = dbl_dist_sq ^ 0.5 + + 'get to next column for output + Set rng_out = rng_out.Offset(, 1) + Next + + 'drop down a row and go back to left edge + Set rng_out = rng_out.Offset(1).End(xlToLeft) + Next + + Application.EnableEvents = True + Application.Calculation = xlCalculationAutomatic + Application.ScreenUpdating = True + +End Sub + Sub RemoveAllLegends() Dim cht_obj As ChartObject diff --git a/src/code/Usability.bas b/src/code/Usability.bas index 4008eab..faf98c7 100644 --- a/src/code/Usability.bas +++ b/src/code/Usability.bas @@ -236,6 +236,27 @@ Sub ConvertSelectionToCsv() End Sub +Public Sub CopyCellAddress() +'--------------------------------------------------------------------------------------- +' Procedure : CopyCellAddress +' Author : @byronwall +' Date : 2015 12 03 +' Purpose : Copies the current cell address to the clipboard for paste use in a formula +'--------------------------------------------------------------------------------------- +' + +'TODO: this need to get a button or a keyboard shortcut for easy use + Dim clipboard As MSForms.DataObject + Set clipboard = New MSForms.DataObject + + Dim rng_sel As Range + Set rng_sel = Selection + + clipboard.SetText rng_sel.Address(True, True, xlA1, True) + clipboard.PutInClipboard +End Sub + + '--------------------------------------------------------------------------------------- ' Procedure : CopyClear ' Author : @byronwall From 18afa1319ef2c0e5ef08a59aa9a49e374ab5445e Mon Sep 17 00:00:00 2001 From: byron wall Date: Fri, 4 Dec 2015 14:49:42 -0700 Subject: [PATCH 4/4] add'l charting code, changes to distance This adds a couple more charting functions and improves the distance matrix calculation. --- src/code/Chart_Processing.bas | 51 +++++++++++++++++++++++ src/code/Testing.bas | 76 +++++++++++++++++++++++++++++----- src/code/form_newCommands.frm | 12 +++++- src/code/form_newCommands.frx | Bin 5656 -> 5656 bytes 4 files changed, 127 insertions(+), 12 deletions(-) diff --git a/src/code/Chart_Processing.bas b/src/code/Chart_Processing.bas index c6019d6..da2acd5 100644 --- a/src/code/Chart_Processing.bas +++ b/src/code/Chart_Processing.bas @@ -8,6 +8,57 @@ Attribute VB_Name = "Chart_Processing" Option Explicit +Public Sub Chart_CreateChartWithSeriesForEachColumn() +'will create a chart that includes a series with no x value for each column + + Dim rng_data As Range + Set rng_data = GetInputOrSelection("Select chart data") + + 'create a chart + Dim cht_obj As ChartObject + Set cht_obj = ActiveSheet.ChartObjects.Add(0, 0, 300, 300) + + cht_obj.Chart.ChartType = xlXYScatter + + Dim rng_col As Range + For Each rng_col In rng_data.Columns + + Dim rng_chart As Range + Set rng_chart = RangeEnd(rng_col.Cells(1, 1), xlDown) + + Dim b_ser As New bUTLChartSeries + Set b_ser.Values = rng_chart + + b_ser.AddSeriesToChart cht_obj.Chart + Next + +End Sub + +Public Sub Chart_CopyToSheet() + + Dim cht_obj As ChartObject + + Dim obj_all As Object + Set obj_all = Selection + + Dim msg_newSheet As VbMsgBoxResult + msg_newSheet = MsgBox("New sheet?", vbYesNo, "New sheet?") + + Dim sht_out As Worksheet + If msg_newSheet = vbYes Then + Set sht_out = Worksheets.Add() + Else + Set sht_out = Application.InputBox("Pick a cell on a sheet", "Pick sheet", Type:=8).Parent + End If + + For Each cht_obj In Chart_GetObjectsFromObject(obj_all) + cht_obj.Copy + + sht_out.Paste + Next + + sht_out.Activate +End Sub Sub Chart_SortSeriesByName() 'this will sort series by names diff --git a/src/code/Testing.bas b/src/code/Testing.bas index bbeeaea..309c564 100644 --- a/src/code/Testing.bas +++ b/src/code/Testing.bas @@ -9,7 +9,7 @@ Public Sub ComputeDistanceMatrix() 'Dim rng_ID As Range 'Set rng_ID = Application.InputBox("Select ID data", "ID", Type:=8) - + 'turning off updates makes a huge difference here... could also use array for output Application.ScreenUpdating = False Application.Calculation = xlCalculationManual @@ -19,12 +19,56 @@ Public Sub ComputeDistanceMatrix() Dim wkbk As Workbook Set wkbk = Workbooks.Add + Dim sht_out As Worksheet + Set sht_out = wkbk.Sheets(1) + sht_out.name = "scaled data" + + 'copy data over to standardize + rng_input.Copy wkbk.Sheets(1).Range("A1") + + 'go to edge of data, add a column, add STANDARDIZE, copy paste values, delete + + Dim rng_data As Range + Set rng_data = sht_out.Range("A1").CurrentRegion + + Dim rng_col As Range + For Each rng_col In rng_data.Columns + + 'edge cell + Dim rng_edge As Range + Set rng_edge = sht_out.Cells(1, sht_out.Columns.count).End(xlToLeft).Offset(, 1) + + 'do a normal dist standardization + '=STANDARDIZE(A1,AVERAGE(A:A),STDEV.S(A:A)) + + rng_edge.Formula = "=IFERROR(STANDARDIZE(" & rng_col.Cells(1, 1).Address(False, False) & ",AVERAGE(" & _ + rng_col.Address & "),STDEV.S(" & rng_col.Address & ")),0)" + + 'do a simple value over average to detect differences + rng_edge.Formula = "=IFERROR(" & rng_col.Cells(1, 1).Address(False, False) & "/AVERAGE(" & _ + rng_col.Address & "),1)" + + 'fill that down + Range(rng_edge, rng_edge.Offset(, -1).End(xlDown).Offset(, 1)).FillDown + + Next + + Application.Calculate + sht_out.UsedRange.Value = sht_out.UsedRange.Value + rng_data.EntireColumn.Delete + + Dim sht_dist As Worksheet + Set sht_dist = wkbk.Worksheets.Add() + sht_dist.name = "distances" + Dim rng_out As Range - Set rng_out = wkbk.Sheets(1).Range("A1") + Set rng_out = sht_dist.Range("A1") 'loop through each row with each other row Dim rng_row1 As Range Dim rng_row2 As Range + + Set rng_input = sht_out.Range("A1").CurrentRegion For Each rng_row1 In rng_input.Rows For Each rng_row2 In rng_input.Rows @@ -40,11 +84,11 @@ Public Sub ComputeDistanceMatrix() 'take the sqrt of that value and output rng_out.Value = dbl_dist_sq ^ 0.5 - + 'get to next column for output Set rng_out = rng_out.Offset(, 1) Next - + 'drop down a row and go back to left edge Set rng_out = rng_out.Offset(1).End(xlToLeft) Next @@ -52,6 +96,12 @@ Public Sub ComputeDistanceMatrix() Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True + + sht_dist.UsedRange.NumberFormat = "0.00" + sht_dist.UsedRange.EntireColumn.AutoFit + + 'do the coloring + Formatting_AddCondFormat sht_dist.UsedRange End Sub @@ -61,20 +111,23 @@ Sub RemoveAllLegends() For Each cht_obj In Chart_GetObjectsFromObject(Selection) cht_obj.Chart.HasLegend = False - cht_obj.Chart.HasTitle = False + cht_obj.Chart.HasTitle = True + + cht_obj.Chart.SeriesCollection(1).MarkerSize = 4 Next End Sub Sub ApplyFormattingToEachColumn() -' -' Macro1 Macro -' - -' Dim rng As Range For Each rng In Selection.Columns + Formatting_AddCondFormat rng + Next +End Sub + +Private Sub Formatting_AddCondFormat(ByVal rng As Range) + rng.FormatConditions.AddColorScale ColorScaleType:=3 rng.FormatConditions(rng.FormatConditions.count).SetFirstPriority rng.FormatConditions(1).ColorScaleCriteria(1).Type = _ @@ -96,9 +149,10 @@ Sub ApplyFormattingToEachColumn() .Color = 8109667 .TintAndShade = 0 End With - Next End Sub + + '--------------------------------------------------------------------------------------- ' Procedure : TraceDependentsForAll ' Author : @byronwall diff --git a/src/code/form_newCommands.frm b/src/code/form_newCommands.frm index 6811023..f9ab8f7 100644 --- a/src/code/form_newCommands.frm +++ b/src/code/form_newCommands.frm @@ -1,11 +1,12 @@ VERSION 5.00 Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} form_newCommands Caption = "Additional Features" - ClientHeight = 7770 + ClientHeight = 8460 ClientLeft = 45 ClientTop = 435 ClientWidth = 6585 OleObjectBlob = "form_newCommands.frx":0000 + ShowModal = 0 'False StartUpPosition = 1 'CenterOwner End Attribute VB_Name = "form_newCommands" @@ -13,6 +14,7 @@ Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False + Option Explicit '--------------------------------------------------------------------------------------- @@ -92,3 +94,11 @@ End Sub Private Sub CommandButton30_Click() ApplyFormattingToEachColumn End Sub + +Private Sub CommandButton31_Click() + ComputeDistanceMatrix +End Sub + +Private Sub CommandButton32_Click() + Chart_CreateChartWithSeriesForEachColumn +End Sub diff --git a/src/code/form_newCommands.frx b/src/code/form_newCommands.frx index dcb2fc8014e1211d6556ff2a3166e7550c20d13e..1b966ac286addf2b9635a4ff8942c8decd88f004 100644 GIT binary patch delta 477 zcmZWlO-lk%6uqOPj5^hrR*NtmrWG~jSBbQVvNloVG9rjUCluzx#*w6`{0Y%3aML1M zv?)s5v~1PBR&HAM4_Z6j(OUK3y!+lc=e~EiO|dCn1Rc-e)~Lpg2(#B`pY!jG695_m zxZygWE5T*jVY8k9+h_D1v*XG-UO0N`I`%Ihuk|%xutsUfeJ+IYG>M2Hx|U_p2X`bC z$4df{M5GXDge@-GwRJehOaL1Jju-eSGL{99!3w7U`!RrxC7R)4-XJoscE+o=%Dpkn z6BT?@bl01wgT5L1;eAA=;X7d*J-*9(smSLTf4joF*mcJyh}b#~4Zu$uIbE&POnI$b zH6^VeZ%L+6u9Fx!Dk};p7_wx_L?XpsnW#OzjvuAyw?~NQWh196HC4lwzPpO{LP;`A ze8Mb|s%(_yDyhf@Dd-B_7ErH;;R{DKgbD2VD2QS31Ex_Wt+-kwKce+_O#lD@ delta 250 zcmbQCGec*B2-83LjbeE$q8pwIEqtJRk&&5!fx&?XNB}|F}S0c7!{&AA-M7#Ue7 z3vjDVj^YYn`u`uyyu`H@DA>SV%?RQD