From c60d2f92fa13cd83ce352cd5f02b8d9ff8b27ddd Mon Sep 17 00:00:00 2001 From: optixx Date: Tue, 1 Sep 2009 08:50:29 +0200 Subject: [PATCH] add app controller --- tools/Quickdev16/AppController.h | 19 ++++ tools/Quickdev16/AppController.m | 106 ++++++++++++++++++ tools/Quickdev16/English.lproj/MainMenu.xib | 22 ++-- .../Quickdev16.xcodeproj/david.pbxuser | 15 +++ .../Quickdev16.xcodeproj/project.pbxproj | 10 +- .../Quickdev16.pbxindex/cdecls.pbxbtree | Bin 573652 -> 573652 bytes .../Quickdev16.pbxindex/decls.pbxbtree | Bin 571880 -> 571880 bytes .../Quickdev16.pbxindex/pbxindex.header | Bin 24 -> 24 bytes .../Quickdev16.pbxindex/refs.pbxbtree | Bin 436276 -> 436276 bytes .../strings.pbxstrings/control | Bin 1048596 -> 1048596 bytes .../Quickdev16.pbxindex/symbols0.pbxsymbols | Bin 2156184 -> 2156184 bytes 11 files changed, 155 insertions(+), 17 deletions(-) create mode 100644 tools/Quickdev16/AppController.h create mode 100644 tools/Quickdev16/AppController.m diff --git a/tools/Quickdev16/AppController.h b/tools/Quickdev16/AppController.h new file mode 100644 index 0000000..e3f86cd --- /dev/null +++ b/tools/Quickdev16/AppController.h @@ -0,0 +1,19 @@ +#import + +@interface AppController : NSObject { + IBOutlet NSTextField *textField; + IBOutlet NSColorWell *colorWell; + IBOutlet NSButton *stopButton; + IBOutlet NSTableView *tableView; + NSSpeechSynthesizer *speechSynth; +} +- (IBAction)sayIt:(id)sender; +- (IBAction)stopIt:(id)sender; +- (IBAction)changeTextColor:(id)sender; +- (void)speechSynthesizer:(NSSpeechSynthesizer *)send + didFinishSpeaking:(BOOL)finishedSpeaking; +- (int)numberOfRowsInTableView:(NSTableView *) aTableView; +-(id)tableView:(NSTableView*) aTableView +objectValueForTableColumn:(NSTableColumn *) aTableColumn row:(int)row; + +@end diff --git a/tools/Quickdev16/AppController.m b/tools/Quickdev16/AppController.m new file mode 100644 index 0000000..887e434 --- /dev/null +++ b/tools/Quickdev16/AppController.m @@ -0,0 +1,106 @@ +#import "AppController.h" + +@implementation AppController +- (id) init { + [super init]; + NSLog(@"init"); + speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil]; + [speechSynth setDelegate:self]; + return self; +} + +- (void)awakeFromNib{ + NSColor *initialColor = [ textField textColor]; + NSLog(@"setting init color %@",initialColor); + [colorWell setColor:initialColor]; + NSString *defaultVoice = [NSSpeechSynthesizer defaultVoice]; + NSArray *voices = [NSSpeechSynthesizer availableVoices]; + int defaultRow = [voices indexOfObject:defaultVoice]; + [tableView selectRow:defaultRow byExtendingSelection:NO]; + [tableView scrollRowToVisible:defaultRow]; + +} +- (IBAction)sayIt:(id)sender { + NSString *string = [textField stringValue]; + if ( [string length] == 0) { + NSLog(@"No message"); + return; + } + [speechSynth startSpeakingString:string]; + NSLog(@"Have started speaking: %@", string); + [stopButton setEnabled:YES]; +} + +- (IBAction)stopIt:(id)sender { + NSLog(@"stopping"); + [speechSynth stopSpeaking]; + +} + +- (void)speechSynthesizer:(NSSpeechSynthesizer *)send + didFinishSpeaking:(BOOL)finishedSpeaking +{ + NSLog(@"didFinished=%d",finishedSpeaking); + [stopButton setEnabled:NO]; + +} + + +- (IBAction)changeTextColor:(id)sender{ + NSColor *newColor = [sender color]; + NSLog(@"Change Color %@",newColor); + [textField setTextColor:newColor]; + +} + +- (int)numberOfRowsInTableView:(NSTableView *) aTableView{ + NSLog(@"numberOfRowsInTableView %d", [[NSSpeechSynthesizer availableVoices] count]); + + return [[NSSpeechSynthesizer availableVoices] count]; +} +-(id)tableView:(NSTableView*) aTableView + objectValueForTableColumn:(NSTableColumn *) aTableColumn row:(int)row{ + NSString *voice = [[NSSpeechSynthesizer availableVoices] objectAtIndex:row ]; + return [[NSSpeechSynthesizer attributesForVoice:voice] valueForKey:NSVoiceName]; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)nofication{ + NSArray *availableVoices = [NSSpeechSynthesizer availableVoices]; + int row = [tableView selectedRow]; + if ( row == -1) { + return; + } + + NSString *selectedVoice = [availableVoices objectAtIndex:row]; + [speechSynth setVoice:selectedVoice]; + NSLog(@"new voice=%@",selectedVoice); +} + +-(BOOL)selectionShouldChangeInTableView:(NSTableView *) aTableView +{ + if ([speechSynth isSpeaking]){ + NSBeep(); + return NO; + } else { + return YES; + } +} + +-(NSSize)windowWillResize:(NSWindow *)send toSize:(NSSize) framesize; +{ + float w = framesize.width; + float h = framesize.height; + NSLog(@"called willResize %f x %f ",w,h); + + w = w*2; + framesize.width = w; + return framesize; +} + +- (void) dealloc { + NSLog(@"dealloc"); + [speechSynth release]; + [super dealloc]; + +} +@end diff --git a/tools/Quickdev16/English.lproj/MainMenu.xib b/tools/Quickdev16/English.lproj/MainMenu.xib index b8e74af..0b266a0 100644 --- a/tools/Quickdev16/English.lproj/MainMenu.xib +++ b/tools/Quickdev16/English.lproj/MainMenu.xib @@ -13,7 +13,6 @@ YES - YES @@ -1318,21 +1317,21 @@ 263 2 - {{157, 191}, {480, 270}} + {{157, -335}, {504, 796}} 611844096 Quickdev16 NSWindow {1.79769e+308, 1.79769e+308} - + 256 YES 12 - {{13, 5}, {454, 213}} + {{13, 531}, {454, 213}} YES @@ -1441,7 +1440,7 @@ 268 - {{20, 248}, {106, 23}} + {{20, 774}, {106, 23}} YES @@ -1461,7 +1460,7 @@ 268 - {{20, 219}, {106, 23}} + {{20, 745}, {106, 23}} YES @@ -1481,7 +1480,7 @@ 268 - {{354, 248}, {106, 23}} + {{354, 774}, {106, 23}} YES @@ -1499,8 +1498,7 @@ - {480, 270} - + {504, 796} {{0, 0}, {1440, 878}} {1.79769e+308, 1.79769e+308} @@ -3610,7 +3608,6 @@ 588.IBPluginDependency 589.IBPluginDependency 590.IBPluginDependency - 591.IBPluginDependency 72.IBPluginDependency 72.ImportedFromIB2 73.IBPluginDependency @@ -3849,9 +3846,9 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{338, 221}, {480, 270}} + {{936, 60}, {504, 796}} com.apple.InterfaceBuilder.CocoaPlugin - {{338, 221}, {480, 270}} + {{936, 60}, {504, 796}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3878,7 +3875,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin diff --git a/tools/Quickdev16/Quickdev16.xcodeproj/david.pbxuser b/tools/Quickdev16/Quickdev16.xcodeproj/david.pbxuser index fb07d76..98c37d4 100644 --- a/tools/Quickdev16/Quickdev16.xcodeproj/david.pbxuser +++ b/tools/Quickdev16/Quickdev16.xcodeproj/david.pbxuser @@ -63,6 +63,21 @@ userBuildSettings = { }; }; + 631A51A6104CF59900E73564 /* AppController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {593, 449}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 614}"; + }; + }; + 631A51A9104CF5B700E73564 /* AppController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {933, 1261}}"; + sepNavSelRange = "{782, 0}"; + sepNavVisRange = "{597, 1402}"; + sepNavWindowFrame = "{{15, 60}, {992, 818}}"; + }; + }; 631E1874104C5D72001A8B18 /* Quickdev16 */ = { isa = PBXExecutable; activeArgIndices = ( diff --git a/tools/Quickdev16/Quickdev16.xcodeproj/project.pbxproj b/tools/Quickdev16/Quickdev16.xcodeproj/project.pbxproj index 3f37da7..2b2e569 100644 --- a/tools/Quickdev16/Quickdev16.xcodeproj/project.pbxproj +++ b/tools/Quickdev16/Quickdev16.xcodeproj/project.pbxproj @@ -9,8 +9,8 @@ /* Begin PBXBuildFile section */ 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 256AC3DA0F4B6AC300CF3369 /* Quickdev16AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* Quickdev16AppDelegate.m */; }; - 631A5181104CF44F00E73564 /* BGHUDAppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 631A5180104CF44F00E73564 /* BGHUDAppKit.framework */; }; 631A51AA104CF5B700E73564 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 631A51A9104CF5B700E73564 /* AppController.m */; }; + 631A5252104CF9FB00E73564 /* BGHUDAppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 631A5251104CF9FB00E73564 /* BGHUDAppKit.framework */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; @@ -27,9 +27,9 @@ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 631A5180104CF44F00E73564 /* BGHUDAppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BGHUDAppKit.framework; path = /Users/david/Devel/arch/osx/code/BGHUDAppKit/BGHUDAppKit.framework; sourceTree = ""; }; 631A51A6104CF59900E73564 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; 631A51A9104CF5B700E73564 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; + 631A5251104CF9FB00E73564 /* BGHUDAppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BGHUDAppKit.framework; path = /Users/david/Devel/arch/osx/code/BGHUDAppKit/build/Release/BGHUDAppKit.framework; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Quickdev16-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Quickdev16-Info.plist"; sourceTree = ""; }; 8D1107320486CEB800E47090 /* Quickdev16.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Quickdev16.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -40,7 +40,7 @@ buildActionMask = 2147483647; files = ( 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, - 631A5181104CF44F00E73564 /* BGHUDAppKit.framework in Frameworks */, + 631A5252104CF9FB00E73564 /* BGHUDAppKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -120,7 +120,7 @@ children = ( 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, - 631A5180104CF44F00E73564 /* BGHUDAppKit.framework */, + 631A5251104CF9FB00E73564 /* BGHUDAppKit.framework */, ); name = Frameworks; sourceTree = ""; @@ -216,6 +216,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../../../osx/code/BGHUDAppKit\"", + "\"$(SRCROOT)/../../../../../osx/code/BGHUDAppKit/build/Release\"", ); GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; @@ -237,6 +238,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../../../osx/code/BGHUDAppKit\"", + "\"$(SRCROOT)/../../../../../osx/code/BGHUDAppKit/build/Release\"", ); GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; diff --git a/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/cdecls.pbxbtree b/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/cdecls.pbxbtree index 7618624ce8816f9c930113267d4888d167e8928e..4c2cc5d870f47c89fed16455ae2f33bb50744739 100644 GIT binary patch delta 188 zcmV;t07L)Ofg{v`Baj#Y-GLc}83DB!0#}a#q_=U80+(C{7#suuWE-~*>;ii10W7zP z*aJ^z0<^w|+CK!h+CK$SI078Khc0*pw=Q@F_MZj)8w3Diw<#D0kA4F@zX+E<-~}PK z+?EGq5C_8>1OQ;ii10kpS? z*aJ^z0zAKm+CK!h+CK$SI07ubhc0*pw=Q@F_MZh}8w3FTw<#D0kA4HBy$F{--~}PK z+?EGq5C>r!1OUSu1eZ@10u`5Feg*`GV5bMSV5bPc6_;>|1q7F@y$D2?a-{-1mw;FS z1eZX+2vC>!y$CdyV5R0;Ne=)3 diff --git a/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/decls.pbxbtree b/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/decls.pbxbtree index d147bc2bf4442b45414a2a4aa204c7334cbf13fd..1d07e1a64c6f30dc4414a54da31c9fb25eda41b6 100644 GIT binary patch delta 137 zcmaFyS?R@Rr3n&@XBs89N-}l}ut~_UFr-MguM%JcVy5k@1eoOvSr1FIFeGk2>&U#n zn(4&$_P)K$K+LkeZ!haAX*LU>jx_1*b~jmtl9^U)-5zAacIYkZU!azxc1bPv?UGs? l{oT_87BjO8Ujtz{{8+sU7rmxuwuM%JcVy5k@1eoOvSrdVRhqs?~WZqxR zv|?*}-(F@QX4&4imvxmiTN+T(LT0<&O;({~rW4z@2idS4ddr#w6#d&Ssl~osQj4R% kdwN3;Bg^zN+c|Q!OKjuVz&Jf%F*D2bHCusviyc5d041g|cmMzZ diff --git a/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/pbxindex.header b/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/pbxindex.header index ed055c3ff48e073a10f02a2faa57fd5bcd203159..64dab0490e10d4292768e11a3f00bc1cc7ed538c 100644 GIT binary patch literal 24 acmb=(%Pdf2VPN6)iR~=^hr_A~Qs4$~_?Q^E>Yo9Y;&t^RgoXub XYx`DNR_3{^Ux4iF?R$5zmcIo6SHvs- delta 123 zcmdmTL2AndsRMPVPQBb$-6)iR~=^hr_7oG6nN0S_Bqq`wa=NaXR{^(`G>c62D8K;WK9CH|89RP!g`p4H4Dgo XwtcHCEAw2|Y#{r~_Px7U%ijV3P@XIP diff --git a/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/strings.pbxstrings/control b/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/strings.pbxstrings/control index 97427ac01f01738af3c74cefd0c4e082d18cea86..c2d0bb443b89b2c1fb46efcb7c70478108635817 100644 GIT binary patch delta 923 zcmXX_Ye~--I`0oq;%5^yN{-{G_VqiZm=}NOFz6snCr?$l>X>K z1M7=YsK^;1B`$h{1iQFK5csS7V^~!BN75gHfmyw0_Uk$C`#$gUUd}mP;nJ>f>A-d$ zp)tQN$PpT`*kd2dI&#qwXqYG@)|mHZ!pZ!Om}{{4NRpxVYNUgx$b}uLq#-Nmgt&)1 z!8o*CA@d4i({1uMgN1V7+5q{Jimt1#$;OpLgpqHga~;~dY}~Ba)z0k}n9w<{$b{J4!OgEm?0U-SMhi8l@%Qy7vZ=x1dmKNJ&9Op9UT~8=Nbw&? z8H*x17gK6PVubT4d}}q@)3to-(v)zjj-Mpx3N-Lz5@JaUU%~MFDZa=;BsN^UgMZ>c zSKEC)Xhock{m;&U3(tA6N~Q*F6G!PQf@~@E&DVTWHidpc7_%Y!l2hnY5#0qss||bT zE)!Nzw1+AM$V0pBq)^3{GICMSGl>%dcZGyViaK*22$1_goUzNQL5aOHpEmFj%VvH5 zkjPYjO@}0#tt@}a)G>mOJ zASxKm$C2`^+1MwutYWwpH11(@jz^4*VG?JHthdUp(xol*?3J%;7LNl7TVA=>j_8A!+d8Fb#Uq_TQov1mD3` zoen#g&LFM8JiY4;O%N3VZ)qn^!TJzB&KrC4vH|=%O;dwNbuXAEtQc40j}9&Wl2lu-Dp5-6VLVd_c~}7lw3jQZ+{6Xl zClyV{tbW<-OG{?`ytDZpg*m5rsu2C-mFB54h$C@x-$87>DN7wyFwdK>4o65H{C=s< zY-EyU;F(j)EhwSc+g>`mVJz-G&RVQ68nIa8D;%Y7hx{@z!9ZC zv`ARpD20-o5n|$^H%QQGYXpM7YJUuiO8-dpBPb}V_h`SK^S9Q~@+TEt-OowMY9c`FBk3$cyUNDxuRy%-=MpJPDp!th zhnKVC7I3z5y96e5o+~sV_I7YT)*^-O^9M3n_fyFxvC=d|+uxICG4jCFt@u@JSrB}a3<*NghV09k!k~)i$`=AQ zB0_JOu#%!Zwo`yyv|COK)odxTOM;$3tl+;RBt%lsnbR*oPQUooE-MBl`pSIP!1q`- z>$PJdQ*9g*$G5Tl41nJnNMQqag#JCv#j-SH7M<7b58e2Cqg8~7J1w%J4=_g(6?8;0<{pqJX#YTE8({?jraXN)G#QA(W<0dLh9;87J+P<5#lHfb& z*6Fx|n4oHuR$`tWenAsN0sl+diBqsXgh{&5g36wEw9bW@y|SrJCY0UI@@1w9BhF?p zTz^}9-2%rPCM>c6d^=2YqeylAGR;^quErl6Sn+;QZG);rDA@zk8A`jG6>vang|fy) zY|wjJ(R9ojlFi;_i&ZB9+F7seO&~kMm==E)UJ-GX{Z8eN)hb!N-2>um3>g5Ys NGdrz^&kI^1_YZLU79#)v diff --git a/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/symbols0.pbxsymbols b/tools/Quickdev16/build/Quickdev16.build/Quickdev16.pbxindex/symbols0.pbxsymbols index b0bb92f0f68ba0513e152cd3a6e5d0e928b5e3f0..762cd51f1ddcc6f0469c4ce7665722096a3483ed 100644 GIT binary patch delta 6524 zcmX9?e{^Eio!`fgJRS)=UVy+OOdgDmk+F*CC{lGO<0>+`6Y16>t}Z9`OcAYRu_{tm zV`^;J=YG&p6NzFP#AUcp#F)RD4x-j`=IP&{^ zg!2v%$ng_o!~VKSA-~f?ll;bqd*nB2#;&4y3FjxR%Paxk7Kut5v*AoiS|z-QE2beZ zcY1h`K*wt%8}~DQKOq8s7Ft6A5V^n%&N3JK3Gey9r7Wn>&iNf=N9T6v@_h$O`%`xk zVtL>=pvk2iHKQ4*8*I zu0p+SC|)fQ#k{gWc$HT+NVJ}>yw`&R<&#+>S#o~{W8LS$)0@J-%wKPJo`c+jD z(%f+s3%=(D6_3+_8&zIl>Yr7}kusN1CE);533iTzVNtu%1cl*xRUR)*+|%vL=WyGBpkLD{@4`LT~h#CV{f3e5jd%eZDU=GWOR8v}xEG zFlsS2l#od~i}MYu7XHXxyS7Bgf~Z~GN-%nfb{THFcWaw4qrXQh<5(f8W>!Ws__8c*j@*4LH7`2L&cN)}kJuR8^!+Ex!o0xKEUkv>L6${WY6_bL29B^x zkk7oqdTF-bVrh7}V=U&W(ml>jfuA|S+ORLb$}WSBpJW$cKKBQ9iDvCjERXEA|Bnqq zuUn_Xgi)qB9UURUkdB78XwZdWPur@S#d^l3lMznNsY^mm#;sFGSY^+dI+>8QGj%qY z(b}$C0OrruEh1}?D|B?WL?gN$jz{+Bmar~FbtSk}`6nG6y4}4x)=cRB-MU4QVD(Ym z`W}Miwr&~fb0>9K@VlpUJgpX%i$Q)|;%L~rXK;!02px@c8*nT74Q?53y6@&BoDbzV z7W~NfxDvwC$#YZ4a!TgBG)+%(Jv2+OxKD9@0`XH+;@l~2m2h92*3XlZibtmpB4sI) zJ_d<3L9YOFW_=Q+&>qoGK#0$wPZF}|(0h@Jx>Ii>+vN5Z{X8M_WBPem?Q`pU1Uy^y z#2h8FRX>4ltDU3YAnBKDJM=Szj9j2!hswZCeF^Dp?b6$zs(ZP94XRsV{WAFFtM%)k zi+hMPg6#=?7F86#R-eRrEv|R;N9kfVM4Z>L$kOLGo7IlnY1qo1{pP9HXGK!E^IR_!MgZ%!vZE2 z=QB)D`T|1}-uQMJcmy8L_x6IkbMHubdVN65ZoZm>tZ~bB;&17SzaTR7%t~7?RufNB*0jK&g zV-l&EyvaD_B;wom8A(^jfhi-Z&v(BOfy>=*+SKklj#PcXT*Xj~&?`LHpFYU&&}N(e0X;ikCyC&nav z^L=VugKgs9jGGS_hF3^Jzk-%ULAw6K?7$E`Pg7rzYM(J7urX!;S}i}RKJ`~(__De`{MfhYJTY!^yAogLMu z`33lpdWOeXSKJGH8g$_hKZT(s9Ojq7Z~ux%MJug0cnNc}|7)J!+THhfdR_HDmbi6gbBCLY0TqcYITbB!TenhVlW+A^lA<)TOj0!w%wel^(II`17 z3-mT(?hzzJ*?pgogunS2frp%8URXMV;N&5JPKL@0!Z@PXdQ(WFDk8^)MP!A0U!YI4 z;vWPa{+0hItRu?BkAw|E7C#mwsH=8`HHe-2AAuG_t|zSJ2tAn@UW59`ox>X!11rND zB#CllaX3uK!s75EIVMMs45tZMJ2D)`1mGIOUPue93HN$r!}aMy=5<15D&~186%{igD^DLL;)u;P za||{VUNxf^J+GN(2)FW@ISEh1cg#J6Q8>1_D|MVMcaNL>u*~xt@-a@{!M`!b$fiis zOlvOEHm|{cU&ri+#?&Wf)R^q~%cktVn1e`d_mnwtHepA%TgC~Q+ir=WLK^2-<`Jx% z&qBYEau-?9=W^>}OOvoGmsqkWc+X`PJZI$kZcCDozN;*2rxO(a#e!L__-?n%z=mqh zLSIk5{g!38$vkF3FuDX_TKfqLZ6oo&EK{J1Ke5nEd7iN#D$4XvEp&$G4_X#!T~sV| z49_W+39NUk78cll*+Sc^{E7u*R*Af3vB8Bb` zAG@NTTf&fD{HrC5CT^>&P4KI%l|DTINwUWWdc@Iv%-X}Q;;{k+iJt;EM9NTf-l@`9ml!AE!HJ^{x)kE zc0@APSp>6nw{;eJQs1>MfEK@JUB-In2i64kNAjC;>knBa8~9Ic+S`4`+Jn8FXRSOc zv;UHn4zcK>H3>P@Us?U&ci*?%8dp*I91DE+eMGwf0ryu)Ej3fq~e)&rY9K`A6-3xKS(GslLvC z*u&(Nq4<7bZ{i$x*uIEiQ-9OG0KK_YJHC44+L}F#Ua_$-t zO{qlwQ7qB=xK3PyuZ^2TT6bbn3_@xA7Li`%`P;-S)|sqGFUQo~;`r%=E<7P_J^>Dj zO{6luAkN}k=Q(i#F$)|MX)GJR6VuQWIw?*d7ln@4a}&%DIudlh(UFA{lV(Q`cEv{= zboxc@j&bPCxg9*#^V=L7nEUx14*Gn}T;WI}$E|A|OL$ey?R6w+jBj<&{%EBgG?;}u z9OKAI^&SWP@NYcmD4_&1KX%Yu_?~po=hNIz9n|mkK}QU^4g9x*ekm809Q1MBc-!Ge zZE){8Xl{JQ4`ZUMtS&KxO9}ZMs?>XolnfJ(HZnW@`dfBd5#V_mo6f-c)63-aB8=64S9%0ofC-b+_g^n=n!sjdJ*5y zElwNF=dDgUcRJs4&cLqBUCt!tRqFw#OwP-hea>-07WX;v4J5}8I5!9xFFJ#mLd8Q) zS{0e+oOHSsUvMTMrT>bPc5HshIYYF_LY+zp)SVdpa^WZ?t4Ez-#DqEFTsq3E%+#OS zLOv+QWJsQTd29js6ON88z|Pv6V>5_r2jYYt-%!TTxqj)FOle5&a+eM;hcMygx87E z{(Fg*bLdKmmT}-JsR_QYM`AIW#BWGm(2>0o99J6Olr|^cw0YYF6)t_iT~yIsr3fAMQB8s^5eE_!?Uu5$(9M&<~kHH&@KpSzlnUpVZVCvxS$5h9m1+! delta 6524 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 iR}evoyg{7f4*mnP