From 623b1fb458e309a4f0f8461bc1777b23d81e0739 Mon Sep 17 00:00:00 2001 From: Patrick Wardle Date: Mon, 5 Dec 2016 21:46:30 -1000 Subject: [PATCH] global search now is background threaded w/ overlay reset color on auth prompt --- AppDelegate.m | 45 ++- Consts.h | 6 +- Filter.h | 8 +- Filter.m | 192 +++++++++--- RequestRootWindowController.m | 3 + SearchWindowController.h | 3 + SearchWindowController.m | 296 +++++------------- TaskEnumerator.m | 1 - .../UserInterfaceState.xcuserstate | Bin 52165 -> 53824 bytes UI/FlatView.xib | 44 ++- UI/SearchWindow.xib | 10 +- en.lproj/MainMenu.xib | 6 +- 12 files changed, 304 insertions(+), 310 deletions(-) diff --git a/AppDelegate.m b/AppDelegate.m index a89a93a..4df540e 100755 --- a/AppDelegate.m +++ b/AppDelegate.m @@ -1641,8 +1641,11 @@ bail: @synchronized(self.taskTableController.filteredItems) { + //remove prev + [self.taskTableController.filteredItems removeAllObjects]; + //normal filter - [self.filterObj filterTasks:search.string items:self.taskEnumerator.tasks results:self.taskTableController.filteredItems]; + [self.filterObj filterTasks:search.string items:self.taskEnumerator.tasks results:self.taskTableController.filteredItems pane:PANE_TOP]; } @@ -1679,6 +1682,9 @@ bail: //get segment tag segmentTag = [[self.bottomPaneBtn selectedCell] tagForSegment:[self.bottomPaneBtn selectedSegment]]; + //remove all filtered tasks + [self.bottomViewController.filteredItems removeAllObjects]; + //get item // ->will bail if item isn't in (current) view, etc switch(segmentTag) @@ -1687,7 +1693,7 @@ bail: case DYLIBS_VIEW: { //normal filter - [self.filterObj filterFiles:search.string items:self.currentTask.dylibs results:self.bottomViewController.filteredItems]; + [self.filterObj filterFiles:search.string items:self.currentTask.dylibs results:self.bottomViewController.filteredItems pane:PANE_BOTTOM]; break; } @@ -1696,7 +1702,7 @@ bail: case FILES_VIEW: { //filter - [self.filterObj filterFiles:search.string items:self.currentTask.files results:self.bottomViewController.filteredItems]; + [self.filterObj filterFiles:search.string items:self.currentTask.files results:self.bottomViewController.filteredItems pane:PANE_BOTTOM]; break; } @@ -1882,7 +1888,7 @@ bail: } } //bottom pane (dylibs, files, etc) - else + else if(PANE_BOTTOM == pane) { //always reload item (bottom) pane [self.bottomViewController.itemView reloadData]; @@ -2200,6 +2206,12 @@ bail: //filter string NSString* filterString = nil; + //tag + NSUInteger segmentTag = 0; + + //alert box + NSAlert* noKeywordsAlert = nil; + //extract filter filterString = textView.textStorage.string; @@ -2219,7 +2231,7 @@ bail: [self finalizeFiltration:PANE_TOP]; //filter - [self.filterObj filterTasks:filterString items:self.taskEnumerator.tasks results:self.taskTableController.filteredItems]; + [self.filterObj filterTasks:filterString items:self.taskEnumerator.tasks results:self.taskTableController.filteredItems pane:PANE_TOP]; } //refresh/update UI when not a keyword search @@ -2234,10 +2246,29 @@ bail: // ->just dylibs else if(textView == self.customItemsFilter) { + //get segment tag + segmentTag = [[self.bottomPaneBtn selectedCell] tagForSegment:[self.bottomPaneBtn selectedSegment]]; + + //check if keyword was entered for files/networks + if(segmentTag != DYLIBS_VIEW) + { + //alloc/init alert + noKeywordsAlert = [NSAlert alertWithMessageText:@"#keywords not (yet) supported for files/connections" defaultButton:@"Ok" alternateButton:nil otherButton:nil informativeTextWithFormat:@""]; + + //and show it + [noKeywordsAlert runModal]; + + //reset search + self.filterItemsBox.stringValue = @""; + + //bail + goto bail; + } + //set flag self.bottomViewController.isFiltered = YES; - @synchronized (self.bottomViewController.filteredItems) + @synchronized(self.bottomViewController.filteredItems) { //remove all filtered tasks [self.bottomViewController.filteredItems removeAllObjects]; @@ -2246,7 +2277,7 @@ bail: [self finalizeFiltration:PANE_BOTTOM]; //filter - [self.filterObj filterFiles:filterString items:self.currentTask.dylibs results:self.bottomViewController.filteredItems]; + [self.filterObj filterFiles:filterString items:self.currentTask.dylibs results:self.bottomViewController.filteredItems pane:PANE_BOTTOM]; } //refresh/update UI when not a keyword search diff --git a/Consts.h b/Consts.h index 7e68dfe..a42b3ca 100644 --- a/Consts.h +++ b/Consts.h @@ -179,6 +179,9 @@ //bottom pane #define PANE_BOTTOM 0x1 +//search pane +#define PANE_SEARCH 0x2 + //for prefs //#define PREF_FIRST_RUN @"isFirstRun" @@ -311,8 +314,9 @@ //delta for pid tag #define PID_TAG_DELTA 1000 +//TODO: change back //search wait time (from app's launch) -#define SEARCH_WAIT_TIME 45 +#define SEARCH_WAIT_TIME 10 //pls wait (search) message #define PLS_WAIT_MESSAGE @"completing (initial) task/dylib/file enumeration please wait" diff --git a/Filter.h b/Filter.h index 167483b..8f85122 100644 --- a/Filter.h +++ b/Filter.h @@ -46,11 +46,15 @@ //keyword filter '#notfound' -(BOOL)notFound:(Binary*)item; +//filter all for global search +// ->tasks, dylibs, files, & connections +-(void)filterAll:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results; + //filter tasks --(void)filterTasks:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results; +-(void)filterTasks:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results pane:(NSUInteger)pane; //filter dylibs and files --(void)filterFiles:(NSString*)filterText items:(NSMutableArray*)items results:(NSMutableArray*)results; +-(void)filterFiles:(NSString*)filterText items:(NSMutableArray*)items results:(NSMutableArray*)results pane:(NSUInteger)pane; //filter network connections -(void)filterConnections:(NSString*)filterText items:(NSMutableArray*)items results:(NSMutableArray*)results; diff --git a/Filter.m b/Filter.m index 3a2ab04..bf14012 100644 --- a/Filter.m +++ b/Filter.m @@ -29,9 +29,6 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un self = [super init]; if(nil != self) { - //alloc file filter keywords - //fileFilters = [NSMutableArray array]; - //alloc binary filter keywords binaryFilters = [NSMutableArray array]; @@ -53,35 +50,121 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un return [self.binaryFilters containsObject:searchString]; } +//filter all for global search +// ->tasks, dylibs, files, & connections +-(void)filterAll:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results +{ + //flag + BOOL isKeyword = NO; + + //matching tasks + NSMutableArray* matchingTasks = nil; + + //matching dylibs + NSMutableArray* matchingDylibs = nil; + + //matching files + NSMutableArray* matchingFiles = nil; + + //matching connections + NSMutableArray* matchingConnections = nil; + + //alloc array for matching tasks + matchingTasks = [NSMutableArray array]; + + //alloc array for matching dylibs + matchingDylibs = [NSMutableArray array]; + + //alloc dictionary for matching files + matchingFiles = [NSMutableArray array]; + + //alloc dictionary for matching connections + matchingConnections = [NSMutableArray array]; + + //set flag + isKeyword = [self isKeyword:filterText]; + + //filter all tasks + [self filterTasks:filterText items:items results:matchingTasks pane:PANE_SEARCH]; + + //iterate over all tasks + // ->for each, filter their dylib, files, etc + for(Task* task in items.allValues) + { + //filter dylibs + [self filterFiles:filterText items:task.dylibs results:matchingDylibs pane:PANE_SEARCH]; + + //when keyword search + // ->skip files/connections + if(YES == isKeyword) + { + //skip + continue; + } + + //filter files + [self filterFiles:filterText items:task.files results:matchingFiles pane:PANE_SEARCH]; + + //filter connections + [self filterFiles:filterText items:task.connections results:matchingConnections pane:PANE_SEARCH]; + } + + //remove duplicate dylibs + [results setArray:[[[NSSet setWithArray:results] allObjects] mutableCopy]]; + + //call back into search object to refresh it's UI and show results + dispatch_async(dispatch_get_main_queue(), ^{ + + //search done! + [((AppDelegate*)[[NSApplication sharedApplication] delegate]).searchWindowController completeSearch]; + + }); + + return; +} + //filter tasks // ->name, path, pid --(void)filterTasks:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results +-(void)filterTasks:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results pane:(NSUInteger)pane { //task Task* task = nil; - //first reset any previous filter'd items - [results removeAllObjects]; - //process #keyword filtering // ->note: already checked its a full/matching keyword if(YES == [filterText hasPrefix:@"#"]) { //prep UI for filtering // ->config/show overlay, etc - [((AppDelegate*)[[NSApplication sharedApplication] delegate]) prepUIForFiltering:PANE_TOP]; + if(PANE_SEARCH != pane) + { + //prep UI + [((AppDelegate*)[[NSApplication sharedApplication] delegate]) prepUIForFiltering:pane]; + } - //in background filter by keyword - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - //nap a 1/2second to let message show up - [NSThread sleepForTimeInterval:0.5]; - + //when main thread + // ->do #keyword in background + if(YES == [NSThread isMainThread]) + { + //in background filter by keyword + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + //nap a 1/2second to let message show up + [NSThread sleepForTimeInterval:0.5]; + + //filter + // ->calls back in UI to refresh when done! + [self filterByKeyword:(NSString*)filterText items:items.allValues results:(NSMutableArray*)results pane:pane]; + + }); + } + //already in background + // ->just run on current thread + else + { //filter - // ->calls back in UI to refresh when done! - [self filterByKeyword:(NSString*)filterText items:items.allValues results:(NSMutableArray*)results]; - - }); + [self filterByKeyword:(NSString*)filterText items:items.allValues results:(NSMutableArray*)results pane:pane]; + } } //not keyword @@ -142,11 +225,8 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un //filter tasks // ->name, path, pid --(void)filterByKeyword:(NSString*)filterText items:(NSArray*)items results:(NSMutableArray*)results +-(void)filterByKeyword:(NSString*)filterText items:(NSArray*)items results:(NSMutableArray*)results pane:(NSUInteger)pane { - //pane - NSUInteger pane = PANE_TOP; - //sync @synchronized(items) { @@ -160,9 +240,6 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un //handle tasks if(YES == [items.firstObject isKindOfClass:[Task class]]) { - //set pane - pane = PANE_TOP; - //iterate over all items for(id item in items) { @@ -177,9 +254,6 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un //handle dylibs else if(YES == [items.firstObject isKindOfClass:[Binary class]]) { - //set pane - pane = PANE_BOTTOM; - //iterate over all items for(id item in items) { @@ -195,12 +269,16 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un } //sync //tell the UI we are done - dispatch_async(dispatch_get_main_queue(), ^{ - - //finalize UI - [((AppDelegate*)[[NSApplication sharedApplication] delegate]) finalizeFiltration:pane]; - - }); + if(PANE_SEARCH != pane) + { + //on main thread, update UI + dispatch_async(dispatch_get_main_queue(), ^{ + + //finalize UI + [((AppDelegate*)[[NSApplication sharedApplication] delegate]) finalizeFiltration:pane]; + + }); + } //bail bail: @@ -210,11 +288,8 @@ bail: //filter dylibs and files // ->name and path --(void)filterFiles:(NSString*)filterText items:(NSMutableArray*)items results:(NSMutableArray*)results +-(void)filterFiles:(NSString*)filterText items:(NSMutableArray*)items results:(NSMutableArray*)results pane:(NSUInteger)pane { - //first reset filter'd items - [results removeAllObjects]; - //process #keyword filtering for dylibs // ->note: already checked its a full/matching keyword if( (YES == [filterText hasPrefix:@"#"]) && @@ -222,19 +297,35 @@ bail: { //prep UI for filtering // ->config/show overlay, etc - [((AppDelegate*)[[NSApplication sharedApplication] delegate]) prepUIForFiltering:PANE_BOTTOM]; + if(PANE_SEARCH != pane) + { + //prep UI + [((AppDelegate*)[[NSApplication sharedApplication] delegate]) prepUIForFiltering:pane]; + } - //in background filter by keyword - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - //nap a 1/2second to let message show up - [NSThread sleepForTimeInterval:0.5]; - + //when main thread + // ->do #keyword search in background + if(YES == [NSThread isMainThread]) + { + //in background filter by keyword + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + //nap a 1/2second to let message show up + [NSThread sleepForTimeInterval:0.5]; + + //filter + // ->calls back in UI to refresh when done! + [self filterByKeyword:(NSString*)filterText items:items results:(NSMutableArray*)results pane:pane]; + + }); + } + //already in background + // ->just run on current thread + else + { //filter - // ->calls back in UI to refresh when done! - [self filterByKeyword:(NSString*)filterText items:items results:(NSMutableArray*)results]; - - }); + [self filterByKeyword:(NSString*)filterText items:items results:(NSMutableArray*)results pane:pane]; + } } //not keyword @@ -283,9 +374,6 @@ bail: //filter network connections -(void)filterConnections:(NSString*)filterText items:(NSMutableArray*)items results:(NSMutableArray*)results { - //first reset filter'd items - [results removeAllObjects]; - //sync @synchronized(items) { diff --git a/RequestRootWindowController.m b/RequestRootWindowController.m index e0bc4a8..05577c9 100644 --- a/RequestRootWindowController.m +++ b/RequestRootWindowController.m @@ -117,6 +117,9 @@ //end w/ NULL installArgs[3] = NULL; + //reset text color + self.statusMsg.textColor = [NSColor blackColor]; + //create authorization ref osStatus = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef); if(errAuthorizationSuccess != osStatus) diff --git a/SearchWindowController.h b/SearchWindowController.h index 08fa153..88b0860 100644 --- a/SearchWindowController.h +++ b/SearchWindowController.h @@ -69,5 +69,8 @@ //search -(void)search; +//callback for when searching is done +// ->update UI by removing overlay and reloading table +-(void)completeSearch; @end diff --git a/SearchWindowController.m b/SearchWindowController.m index 5ff6e35..3eb839b 100644 --- a/SearchWindowController.m +++ b/SearchWindowController.m @@ -145,36 +145,9 @@ //calc time remaining timeRemaining = SEARCH_WAIT_TIME - (currentTime - ((AppDelegate*)[[NSApplication sharedApplication] delegate]).startTime); - //pre-req - [self.overlayView setWantsLayer:YES]; - - //rounded corners - self.overlayView.layer.cornerRadius = 20.0; - - //maks - self.overlayView.layer.masksToBounds = YES; - - //set overlay's view color to black - self.overlayView.layer.backgroundColor = [NSColor blackColor].CGColor; - - //make it semi-transparent - self.overlayView.alphaValue = 0.20; - //show overlay - self.overlayView.hidden = NO; - - //disable search box - self.searchBox.enabled = NO; - - //show activity indicator - [self.activityIndicator setHidden:NO]; - - //show activity indicator label - self.activityIndicatorLabel.hidden = NO; - - //start spinner - [self.activityIndicator startAnimation:nil]; - + [self showOverlay]; + //update w/ time self.activityIndicatorLabel.stringValue = [NSString stringWithFormat:@"%@ (%d)", PLS_WAIT_MESSAGE, (int)timeRemaining]; @@ -185,6 +158,64 @@ return; } +//display the overlay +-(void)showOverlay +{ + //pre-req + [self.overlayView setWantsLayer:YES]; + + //rounded corners + self.overlayView.layer.cornerRadius = 20.0; + + //maks + self.overlayView.layer.masksToBounds = YES; + + //set overlay's view color to black + self.overlayView.layer.backgroundColor = [NSColor blackColor].CGColor; + + //make it semi-transparent + self.overlayView.alphaValue = 0.20; + + //show overlay + self.overlayView.hidden = NO; + + //disable search box + self.searchBox.enabled = NO; + + //show activity indicator + [self.activityIndicator setHidden:NO]; + + //show activity indicator label + self.activityIndicatorLabel.hidden = NO; + + //start spinner + [self.activityIndicator startAnimation:nil]; + + return; +} + +//callback for when searching is done +// ->update UI by removing overlay and reloading table +-(void)completeSearch +{ + //hide overlay + self.overlayView.hidden = YES; + + //hide activity indicator + self.activityIndicator.hidden = YES; + + //hide activity indicator label + self.activityIndicatorLabel.hidden = YES; + + //enable search box + self.searchBox.enabled = YES; + + //reload table + [self.searchTable reloadData]; + + return; +} + //thread function // ->wait until task enumeration is done, then allow user to search -(void)waitTillPau @@ -479,7 +510,7 @@ bail: return; } -//search +//do the search -(void)search { //search string @@ -488,39 +519,6 @@ bail: //all tasks OrderedDictionary* allTasks = nil; - //matching items - NSMutableArray* matchingItems = nil; - - //matching tasks - NSMutableArray* matchingTasks = nil; - - //matching dylibs - NSMutableDictionary* matchingDylibs = nil; - - //matching files - NSMutableDictionary* matchingFiles = nil; - - //matching connections - NSMutableDictionary* matchingConnections = nil; - - //task - Task* task = nil; - - //alloc array for matching items - matchingItems = [NSMutableArray array]; - - //alloc array for matching tasks - matchingTasks = [NSMutableArray array]; - - //alloc dictionary for matching dylibs - matchingDylibs = [NSMutableDictionary dictionary]; - - //alloc dictionary for matching files - matchingFiles = [NSMutableDictionary dictionary]; - - //alloc dictionary for matching connections - matchingConnections = [NSMutableDictionary dictionary]; - //reset search results [self.searchResults removeAllObjects]; @@ -531,166 +529,32 @@ bail: //grab search string searchString = [self.searchBox stringValue]; + //show overlay + [self showOverlay]; + + //config it + self.activityIndicatorLabel.stringValue = [NSString stringWithFormat:@"searching (%@)", searchString]; + + //disable search input box + self.searchBox.enabled = NO; + //grab all tasks - allTasks = ((AppDelegate*)[[NSApplication sharedApplication] delegate]).taskEnumerator.tasks; + // ->make copy to avoid threading issues + allTasks = [((AppDelegate*)[[NSApplication sharedApplication] delegate]).taskEnumerator.tasks copy]; - //'#' indicates a keyword search - // ->check for keyword match, then filter by keyword - if(YES == [searchString hasPrefix:@"#"]) - { - //ignore #search strings that don't match a keyword - if(YES != [filterObj isKeyword:searchString]) - { - //ignore - goto bail; - } - } - - //1st: search for all matching tasks - - //search for all matching tasks - [self.filterObj filterTasks:searchString items:allTasks results:matchingTasks]; - - //add all tasks - [self.searchResults addObjectsFromArray:matchingTasks]; - - //refresh table to display task matches - [self.searchTable reloadData]; - - //2nd: search for all matching dylibs - - //sync - @synchronized(allTasks) - { - //reset - [matchingItems removeAllObjects]; - - //walk all tasks - // ->scan each for dylib matches, only processing first match - for(NSNumber* taskPid in allTasks) - { - //extract task - task = allTasks[taskPid]; - - //filter - [self.filterObj filterFiles:searchString items:task.dylibs results:matchingItems]; - - //process all matching dylibs - // ->but first check if processed due to matching in another task already - for(Binary* dylib in matchingItems) - { - //ignore if already seen/processed - if(nil != matchingDylibs[dylib.path]) - { - //skip - continue; - } - - //process - [self.searchResults addObject:dylib]; - - //save - matchingDylibs[dylib.path] = dylib; - } - - }//all tasks + //kick off filtering in background + // ->will call back into to refresh UI when done + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - }//sync + //nap to allow message to show + [NSThread sleepForTimeInterval:0.5]; - //refresh table to display dylib - [self.searchTable reloadData]; - - //3rd: search for all matching files - - //sync - @synchronized(allTasks) - { - //reset - [matchingItems removeAllObjects]; + //filter + [self.filterObj filterAll:searchString items:allTasks results:self.searchResults]; - //walk all tasks - // ->scan each for file matches, only processing first match - for(NSNumber* taskPid in allTasks) - { - //extract task - task = allTasks[taskPid]; - - //filter - [self.filterObj filterFiles:searchString items:task.files results:matchingItems]; - - //process all matching dylibs - // ->but first check if processed due to matching in another task already - for(File* file in matchingItems) - { - //ignore if already seen/processed - if(nil != matchingFiles[file.path]) - { - //skip - continue; - } - - //process - [self.searchResults addObject:file]; - - //save - matchingFiles[file.path] = file; - } - - }//all tasks - - }//sync - - //refresh table to display dylib - [self.searchTable reloadData]; - - //4th: search for all matching network comms - - //sync - @synchronized(allTasks) - { - //reset - [matchingItems removeAllObjects]; - - //walk all tasks - // ->scan each for connections matches, only processing first match - for(NSNumber* taskPid in allTasks) - { - //extract task - task = allTasks[taskPid]; - - //filter - [self.filterObj filterConnections:searchString items:task.connections results:matchingItems]; - - //process all matching connections - // ->but first check if processed due to matching in another task already - for(Connection* connection in matchingItems) - { - //ignore if already seen/processed - if(nil != matchingConnections[connection.endpoints]) - { - //skip - continue; - } - - //process - [self.searchResults addObject:connection]; - - //save - matchingConnections[connection.endpoints] = connection; - } - - }//all tasks - - }//sync - - //refresh table to display dylib - [self.searchTable reloadData]; - -//bail -bail: + }); return; - } //invoked when the user clicks 'virus total' icon diff --git a/TaskEnumerator.m b/TaskEnumerator.m index c9c3832..0486ded 100644 --- a/TaskEnumerator.m +++ b/TaskEnumerator.m @@ -23,7 +23,6 @@ @implementation TaskEnumerator -//@synthesize files; @synthesize tasks; @synthesize dylibs; @synthesize binaryQueue; diff --git a/TaskExplorer.xcodeproj/project.xcworkspace/xcuserdata/patrickw.xcuserdatad/UserInterfaceState.xcuserstate b/TaskExplorer.xcodeproj/project.xcworkspace/xcuserdata/patrickw.xcuserdatad/UserInterfaceState.xcuserstate index ce4eb5843ec6692b34e012635dd39b88068d5c88..cdd30a6d7bd12e026815186b9bfee6f90d5e1a89 100644 GIT binary patch literal 53824 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

TW-V(Z$y7hfb_99|xQt4yOe z4@R219i|DI*xZ9(6C`W)=$*CD60WDLt>1mbk$r6`NA>Fu&;R&JT!*SzG%K)g`wMY% zYpW`D4jMdU=xhVk8qi)djUU7OZe4z9Zu5|%VMNBwNV|rm+S1ZJfWr)~B4A`XF2!|l ziCC@&sZ_H8IG^7{ve|bu{2t7JhWVA{{7gEKxaJ^#n3WB>CGM)=3WN2Uhr=PdNuKM4 z25|ZXTn`kTiyfmzPpgL$#5Ihp$c=iV{wNjsP$nustQ1{X9W8m+hx<=T|ggs1ng$eKj6nKFG{bLz6 zZi4+cjiAZ`^fkY9@(;8DZxp@K``@(W2SDg8ce(?}?hd*$I7jnKW1)2PV9TRjADqvG zm-X5Yca}TbDDwz6yR*<~^QYBTgqEj-8d7}T;emjgz*$l5c86c+euaB9-qM5|AVaMt zNpsyrKvH*}JKtU4E_9D|k7L4{On93K?=k`MM;|ib6ChrIoriHNeC}!bDxC1vfBH~7_bdbOJDpkzj$b#7JL)?AASCyEql5SU3u}|^ zas&1UfBVjmRK9Er=Z%BTji>q|1O7*U_H<_b0N7=9padKuWr{mHV6~s8h6tnjp7h6}(|izl~Er9W1eu!F|60_lM5H z?Vv)!{fGhgr%thK2gmxmA2)#h(y7vgKRlkuz1;x)Tc@O<1N{?!3ZDA~y#o>b$B(yk z?=m2hP95iutJC%C4Rt4?7wU(OK|wSe9cwGHO}5RoRoH56OKdA` zt8Ay*&aj;mj6lI?c8!|t-X?OpBt z?B({e?VIec+V?9iWrz|~CMc7XDNs*4O({`kDzlZjQ0RJsQl>0dpz2dORbk2*%Gt`f z3Y2LomnfGhS18TOy~<Mo^ou5CFbWHFFJNO zb~*MqUU7Ws_{#B(<2%QG$3e#rj-MRAIDT^?CvgsRj&>F~XEbj0bX({ZN@PS>4oJ3V)L=k&qp zlhYT#G{AJgOu#I_YyccU0IUEM0M-Bs0mXniKs|s3U;`QfJpcp11TX`v02^QkFbvoX z*b3MV*a_GT*aO%HH~=^WxC(gd40gsj$2%uG7dTfqS35JEYn_G8oz7j(-Oe)SK4+ct zfb+2PZs#-3|2V$}&IkSpbOZu`K%gs-4qOIY1oV@L z-{rW=dzUY+NY`}NLf1-Hjw{bq;3{&Jy7ss#U5&10SF5Ydb(iZ&*E_CXK`tN=2n>RN zJV9ZgXiz*T6~qEHfm%QkkQCGb>H=9oHqa1g7&HnR2WJc7wQuxP`feyAjF(tYcSpJhyT`bb-6`(z?sWG=_a*L2-E-VmyXU*F zaW8T&aW8YPaIbRbxwp9wxNmho@BYgD8)N~*9fE+MAU+U3$RbDxBn%P`AwnV`QIHHs zBSZ$-2H6KW1-T4)26+K_1$hH`2l)W`=`q9OcaJ|j=6JYzfIT1{P!BH;xCh>Y>XGWP z!Xw=y(<9p>*Q3m1#AA!cHjf=1yF9*ox_BZymw0A)W_jj#uJ$bTWP6G{rJkLh-JUYf zwVsD(#+X6cPI|Mrn zI|@4vI|(}tyAHbvy9K)gy9av!dkA|Bdk6c^3+xr+mFZRGCGe7Xb$iLY$cZJug6|by`Fo$^!n!Y!|Olq-@O0ycJ%i2 zhIxB?BfNvWvEI?%vEFgsRPR*pEbmh9a_>s-YVRH1hrK_;e~148p97x<2f{&cFdPEM z!DHYF@Wt>Xcrtt$JQJP`&xPl~3*d$DD!2qLha2D{@D1=y@GbCd@E!02@I&y!@T2hK z@RRT-h*=0f1Q|g=EJLIrRw6PGS%@4&4T6UdBbpE`2nj-o=tJlcMuZh%LkuB?5nB*P z5$6!s5DyX05HAp~5bqHm5uXuXku#ACknTuNBn$~hB9RM`L?jKFh+Kk9MlM4xN0uO& zNEVWf4cE6NRpLZMOqs6Z4B6^g>62q+>d4wZshfl5bZpmI@pr~*_WstUzJ z^`PV^6-tZJqf96Z%7$8t8b$3!?L{3x{f#<`I)OTkI)}Q5x{SJt`nb?_Az@+C!m5SJ zg&P-6EquH1Kc7E+oP2;jARl)hPaiKIgb&sy)CccF^oj6^_96RFeBym_d>VcFeD?U< z^ZD!x^!4^d`ug~yeFJ=q_{*T8>ts zwP-!sgf^p3FPgT--J=8~u0rAM!uqf876q|4skf{&)PJ z_h8c-8ZAHWXa28;)65BNLaXuyep(*c(Qt_9o;cp2~};C;ZS zfUg1H17`#R10jLPz(s)}f%rgTU}RuwU{+v3U`b$oAUlv3C=6^2Yz|Zh4g?Mbjs%Ve zP6nV+X#uu{)6Nm}M;4m@2>W<A%m`)+W;zY6}2oq?T$1z?@Au2>k>3k%0C!un$| zzrsxj*a&O_HWj-9y9%3y&Bc~r%dwSM2DTPkkL|*4#vaB_VeeueU>{+hVqaii;eNyY ziF3d?;s7`p4vs_Nd~u6#0XQO#gp0sM;a1=Za5cDk92>{O32}|M7F-)ngX_Z?aQ!$7 z&W0Pp4dX^}hj5Q@A46P2fZ{z|?j;v?`&@mcs>d>+04UxDY~`FJ5-jPJ(x;uUxmej9!t{uKTi z{wDr5{vQ5c{A2tx{Ac_({Lk=d;nTx^51$=AH{3g%8eSOQ5WY5iQ~1{K9pSsf_lEBe zKOKH9{9^d!@N3~W!XJl!Aj~BEL6}QeKyV~D6I=;y1RnyL5I_j}RW9}`Ns$mih$2K2 zk_gKQd4zI89if|`CzuEpf{n12FhbZu*iP6**hAP)I7m24xIma9Tp?U1+$209JSV&) zydk_Nd?d~w&LYks&L=t$orq8(jOay#6EVbaB8eD9j3rWtNyHRlDlv_iPRtE z3P=^CS`v%IA@NB=!lg^ONkuH#~kgk*dA>AguAbpIO z5ivVrZp8curwCvKC;}Ye9}yZsj-W*(MkGa~Mx;foj93-Hi_k?}j<_9hFXBPO!-#j0 zb0Zf-Iz~E2x<-N{JtAR|@JLjoZ{(s#awH{^7MT#aBr-WNHF8Dds>rO!oXFLY`H`GR zP2~E>zalS2&5Cl13XfVIRTb45rHC>_^+#Ew2BU_f)<3UJr+F?{W<3M7(k3mj9UyO1{&iXgNzA|35mhS5Mv@^Vq)TA zs4=V>o5L*ygmYvQ$&<5N;jp4(n~Q>`YC3Ll`=_LM_EtVNZCu-N7+v~NI6S6M>$Wq zNV!9~OSwmRKzT!XOL<56K%GvVL7hpRMRleEsV-Cy6-h-=7gBwx!PF2co=Tu5Qq!pE z)J$p)HIF($-AX-3JxV=6Jx#qpy+plAy-vMHeM0>h?-&n`C&b6Z=fyX~%j5fLZZrrD zO7o^6X+AVGEr1q8!_mTM1X=_wnntEkX>{6R+EUswS{f~#mPyN@<EicX^^(v#>Z^yT!G^bC47eKoy+UPLdYSJ12JHS~Hqo6e&P>5cRjdKzm3`UriTK1ts|-%Q^|-%0ze2xG|A&5u zexLr3{)GOV{)+yV{(=6P{*C@4VQ#|wgg+CU5)=vM1Z#pVVQs>v#F>e+5@#pQOI(#$ zlvt8jmROlMmbfi(N8+x;J&U6jFJ7FqIC*jEV%1{nV%y@O#Uo36mxM0CFCi?6Sn}7B z<4aC1Ilbgul2Z~i$tww-gi5-R^f>8h((|NOO9@Nkm(rIeE=^i$Svs+F-O>$9H!uB> zJU4lM@}J30$?3_3$;HW~$rZ`#l6NQXN#2)yFom3woU$xsdCJO^zLcSq;gr!7`?5vL z!j}=3MJ$V6wtv~_WoMV2UpAGRmYScsCbcNFH1%=nhtyB0UsAs>k6ONXdD8Oa<*Car zEWf?{?(+M~AEqrz3r{1aMWjWi@zSJe9cf)@vb6JQx6OP`S*m!6WInx2-Po_;0$LHfh=$LY^j zRj%T$;;#~}YFxE{)#+7dSDjxqm9ZkDAfqs&IHN3MUB>Q=JsJBl4rVrFwq!~&rJ0?X zhcho^PGw%syp{#a^3Mv)3d+J|ZOJ;2btvm_*0Jo_*)G|jY;d+mc5Ze>c2zbbyEX@v zgUt!a3Ckhm?94fmb1dgX>Bw+|1nU+}zy!Tyw5HcQSW1g;5MgIlv@&4D$C)*N1QtT3T)W#OvA%)*?)p~8)Y zn+vxV?kEBj!HT?#5Jd}%@{6jA*hRb|VNqjIOHp@GZ;`S{UDQ{kFWORcqv%PoQ?Yw7 zvN*VySR7d#Qyf>UE}kf!D*mVVY4Q7#-%93|EGTg-aV~K! zftA2ZP$fPk=o0@DT1j<@pk%0IvSdfep^|eY*Gg`d+%CCS@^8t@k~byqOFou-Dfw19 zv(%~7qtveyTN+v#UP>yBDy5YsmL`=Zm!_7cl`=}Tr9-8sN-ve(E`413q4a0jZ)G#f z{wSMU=3M4l1}=k?LCd_#{K{};F=Yv5OUjbVQp;A9<(B1_6_yp3m6cVLwUtel?Jm1t z_Pp$4`Hb@UzP@}%`Qh?2<>$+%%CD4P zFTY>@u>48+v+|eaugkww{9fTu;ZcFA@U2)>5m*siL9B?Zh^Zh~P%CH^1r;3?eHHsE zj#XT!xLNU};%&u;iq93_Dt=b}Q8~AAL8U__pb}V#sa#oESlL~vskBy(Rc@=?S9!4V zaOJVela*7IS1PYp-mJV`dAIU=6{0G*Dx<2Pic!U{YOhjMsjK>`3|0MA!&PHd6IJV~ zHdbw}I#czbdPeo4>X2%3by9U^^_uG9>ayy}YDP7unqMudZme#pmQ-7-k5*r*{=t~V zaA3GGP>euEFe8M4XAl{2jCe)@V=-eXBZZN{C}dPIc#IZC8>55K&FE$57)FMfVPy<5 z)-u*Hb}$Yz&M?k1rWjWk*BSR24;fDw&loQmuNhyMvzSgyDAR|DW(F{Wm^fwxGnz?e zQkXPm0yCAF%`9WqGFeOxlg|_}rOZxd53`r4WU86{%n{}m<{svL<{{=0=5gi)<|XD; z=5^*j%-hVbHQqItn)I5yn(7*UO>2#`rn9D}MqZ<@G1XXV25N?ChHKW>?5sIbbGGI} z&83>FH8*M=)I6$rTJyZ-Rn42)`L(#(*xIt%+FEgKXKi1twRW&}xOS{|qIPTTj@sR| zdusRB9;`iCd#Uzb?X%jKwQp+Q*M6#-RyU(=R^9Bnd36iweCv|ya_S^?vbw&yp}NVs z4RxFAw$<&dJ6LzP?pWQ4y3=)M>z>v-)x+v(^(pna^%eD;`lkBUdTD)UeNVl%USDsj zH`fo;57tlA@2Edmf42T={f+ut^>^zZ)W4{IUH`8BL;dIaudErY1uS`D+$ZBM@u-aH1EG0|B(ypG~8&o)o{1rLBpel*A4F)J~n)A_}1`)J&WzY_F$vfzU)QpKz1;j$c|*ku*qyH zo5oIIXR=G!Om-c+fz4$L*b;U-yNlh!ma~;?BYT9sk-e9FlzoDInthIak$sbWn|+V{ zfc=R5g#DKNoim36;J9$yI1mn$l*~ zP_7Rb%?;pUxL9roHWzzDE{P(hR+RzMNN3lap21!;m@L4}}Rz!vZXLP4XTL(nbg z6(|I1fmUDkPApBc+ zRCq#oQFvK+O?X3iOL#~4MEFTGUF0Bg6G22!k+%pb3J?W}aH3FAxQHl<6D5f@0Q>yNTV!2yuXzD2@}yixb34#L41S;w*8lI8VGrTqLd*v&F6A z9IJSrX+Pm0%zcZd&&&xo&xuZ#Z?-x1#zKNr6ezZJh1e-eLb1pfL; zNNB8SIu=Jka=eZCz z&23uHe47?E1vUjYg*1gV#WhizXibSt;->BLj;{?h!d`A5sNme3Y*3$=ybvbbew zOG-;+3#*0G!fz3_C|lOHtZ&)WvZZBf%Z`@aEyr4Jw!CV2)AGLMN9&x{KU>{f5v>ue zajn^{wXNdT=2l5-duvx~PwQCgrq->kJ6dvPM!Qsg~48>Lm@5E{RMc zmnbA^NuOj$vQ4r>vRkrOa#V6wa#3``6QxPgWa%ntmNZwICuK=FQl6AA6-k?ZjWuJv@6=p?bdc%``Y#w?O)r!xBu+;ts}7`y(6O|t0T8#ZO5jL zEgjoBc6QF}bn0~Obm?^K%UrDqq34rqy39f5Dg(({+1n;osgZDos->`-Id*!J(N9` zJ(InZy_UU|{pfY+jp$w3ThJ@$?d>)7_V=25t-b4ecl7S=-P^mr_jK>&-fO)#dvEvN z>wVVyviD8z``%BzU*yx}zsqOK=gM8=aJiq{UyhMuIgnepk&_%~SoU za#8_RAk{*ZuL`XSP+?S9Rj3NDBB* z?V$EhFH#4pgViBwyqc(vRL7{3)yve&)hpGj)LH6Wb)LFF%}_JdHR?Kbv${(yQ!CUe zwN*W)o=~q>Z&Ghn?^PdA|E)f%KA}FPzNEgYzM=j{{aF1${ayW^X1eBg&3ui62A~0I zTr~&{QiIa?XhJlhnlMechN?-^q-!!YIhs7p8cngLOvBOeGy;uS)1+zDNHrarE{#s3 z*BCS=ja{=vvt6@G^Oxqh=7MHQb6Im$b6s;^^RMQS=85K+=7r{~c7}GAc8+$w)0P)pVpYB^ek)}ZazTD3Oqq;{9~fc9_gQSAxsdF_<;iuStpruJjsf z+thcW?~QJr4x|g#QFP06sk-I56}kdlg|1pxqpQ=2bX_{NPOH=D3_6o;t!`9j*G=j+ z=r-wg>-Opn=nm=5=x*rl=^p4F>K^M}>E7x-=sxMb=x6Ew(9hP-)r0hIdaxd%_tl5$ z@p^)uq>t1`>tppx^(p%0`jz?&eU?5)zgl0T=jny|Mt!rsM{m#@^(MVpZ`W_pZ`beA z@6qqqAJ?DKpVeQ`U(#RE-_hUKKh!_gzcWlT{9%}DSYU88fDG;iPXo;0Z3r}A3_%90 zA=(gQh&99+QVgpN1%@I+siDG9ZKyHS8(It!gVfMz=r;5klm@jyYZx>P8P*y`4BHI* z3gr}#y+FL*l(OLt}|{hZZ>W;?lA5) z?lJB&o-&>`o-v*?-ZnlqJ~O^FzBc|a%`(j~%{Mui049hDYVtNAO+F?+6V?=J3O5l= zR8y)c!<21WZ7ML8nJP^TQ;n(4)M#olHJe&Z3X{^LGHFaU(?-)4({|G?(;m})(;?Fl z(2pg(=F3o(*x5((__;I(?`=M)0h6){Z9SBeo#NSe_=nSAKM?=AKp*ur}WeM z6Z@0;Q~Fc;tNZ2sL;ZXDkMtk!Kh=Mx|62dU{ulkP```6{?Ehh&W}adG-Ta5y+Z=9A zGv}KN%xla==2~-|x!&AhZZXTvDznzCH=E2Bv(3ETywSYHyxqLZ{FiyJdB6Fj`HK0C z#m$1XP%UYe97~>Mjit!KvkSJO{i65CaPbd--fY;*$B1>TeL0KR&VRIjoLQa{<7_}9kd;`9kZRZ zowi-K-L*ZiJ+eKuy|KNweX@PEeIG;(E*}&Rwh#6Wng+)PHw&V`bBO_-=E{xn5xi|7?ly1EQ;ey{?u@+{ zdo}iE?EQG?IC-2h9zUKit{op7A04-kuN&VyzHNNx`0nuo`Z%|onz+ziYp5e{Fwje{cUZ zL7JdXBu*@uNS;tlSSM@~LlYwtk0(A%e46+&@qIFGGG#J#GHo(_a%ghnL+w|%GL#J#1!~dV_s{ap=B=q3` literal 52165 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 diff --git a/UI/FlatView.xib b/UI/FlatView.xib index 71f9556..a731cf1 100755 --- a/UI/FlatView.xib +++ b/UI/FlatView.xib @@ -1,10 +1,11 @@ - + - + + @@ -66,10 +67,7 @@ - - - - + @@ -103,7 +101,7 @@ - + @@ -175,7 +173,7 @@ - + @@ -184,7 +182,7 @@ - + @@ -204,9 +202,8 @@ - - - + + @@ -303,6 +300,9 @@ + + + @@ -328,10 +328,7 @@ - - - - + @@ -417,6 +414,7 @@ + @@ -435,7 +433,7 @@ - + @@ -446,10 +444,7 @@ - - - - + @@ -486,12 +481,13 @@ + - + @@ -512,7 +508,7 @@ - + @@ -528,7 +524,7 @@ - + diff --git a/UI/SearchWindow.xib b/UI/SearchWindow.xib index b661ad8..dcbc83a 100644 --- a/UI/SearchWindow.xib +++ b/UI/SearchWindow.xib @@ -1,10 +1,11 @@ - + - + + @@ -415,6 +416,10 @@ + + + + @@ -442,7 +447,6 @@ - diff --git a/en.lproj/MainMenu.xib b/en.lproj/MainMenu.xib index f823768..413931e 100755 --- a/en.lproj/MainMenu.xib +++ b/en.lproj/MainMenu.xib @@ -77,7 +77,7 @@